From c94fb32c7a3c28b18a27460aa2447eeec1fac1de Mon Sep 17 00:00:00 2001 From: Pascal Szewczyk Date: Mon, 18 Jul 2016 23:23:54 +0200 Subject: uikit added --- js/core/utility.js | 319 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100755 js/core/utility.js (limited to 'js/core/utility.js') diff --git a/js/core/utility.js b/js/core/utility.js new file mode 100755 index 0000000..0090b8c --- /dev/null +++ b/js/core/utility.js @@ -0,0 +1,319 @@ +/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(UI) { + + "use strict"; + + var stacks = []; + + UI.component('stackMargin', { + + defaults: { + cls: 'uk-margin-small-top', + rowfirst: false, + observe: false + }, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$("[data-uk-margin]", context).each(function() { + + var ele = UI.$(this); + + if (!ele.data("stackMargin")) { + UI.stackMargin(ele, UI.Utils.options(ele.attr("data-uk-margin"))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + UI.$win.on('resize orientationchange', (function() { + + var fn = function() { + $this.process(); + }; + + UI.$(function() { + fn(); + UI.$win.on("load", fn); + }); + + return UI.Utils.debounce(fn, 20); + })()); + + this.on("display.uk.check", function(e) { + if (this.element.is(":visible")) this.process(); + }.bind(this)); + + if (this.options.observe) { + + UI.domObserve(this.element, function(e) { + if ($this.element.is(":visible")) $this.process(); + }); + } + + stacks.push(this); + }, + + process: function() { + + var $this = this, columns = this.element.children(); + + UI.Utils.stackMargin(columns, this.options); + + if (!this.options.rowfirst || !columns.length) { + return this; + } + + // Mark first column elements + var group = {}, minleft = false; + + columns.removeClass(this.options.rowfirst).each(function(offset, $ele){ + + $ele = UI.$(this); + + if (this.style.display != 'none') { + offset = $ele.offset().left; + ((group[offset] = group[offset] || []) && group[offset]).push(this); + minleft = minleft === false ? offset : Math.min(minleft, offset); + } + }); + + UI.$(group[minleft]).addClass(this.options.rowfirst); + + return this; + } + + }); + + + // responsive element e.g. iframes + + (function(){ + + var elements = [], check = function(ele) { + + if (!ele.is(':visible')) return; + + var width = ele.parent().width(), + iwidth = ele.data('width'), + ratio = (width / iwidth), + height = Math.floor(ratio * ele.data('height')); + + ele.css({'height': (width < iwidth) ? height : ele.data('height')}); + }; + + UI.component('responsiveElement', { + + defaults: {}, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$("iframe.uk-responsive-width, [data-uk-responsive]", context).each(function() { + + var ele = UI.$(this), obj; + + if (!ele.data("responsiveElement")) { + obj = UI.responsiveElement(ele, {}); + } + }); + }); + }, + + init: function() { + + var ele = this.element; + + if (ele.attr('width') && ele.attr('height')) { + + ele.data({ + + 'width' : ele.attr('width'), + 'height': ele.attr('height') + + }).on('display.uk.check', function(){ + check(ele); + }); + + check(ele); + + elements.push(ele); + } + } + }); + + UI.$win.on('resize load', UI.Utils.debounce(function(){ + + elements.forEach(function(ele){ + check(ele); + }); + + }, 15)); + + })(); + + + + // helper + + UI.Utils.stackMargin = function(elements, options) { + + options = UI.$.extend({ + 'cls': 'uk-margin-small-top' + }, options); + + elements = UI.$(elements).removeClass(options.cls); + + var min = false; + + elements.each(function(offset, height, pos, $ele){ + + $ele = UI.$(this); + + if ($ele.css('display') != 'none') { + + offset = $ele.offset(); + height = $ele.outerHeight(); + pos = offset.top + height; + + $ele.data({ + 'ukMarginPos': pos, + 'ukMarginTop': offset.top + }); + + if (min === false || (offset.top < min.top) ) { + + min = { + top : offset.top, + left : offset.left, + pos : pos + }; + } + } + + }).each(function($ele) { + + $ele = UI.$(this); + + if ($ele.css('display') != 'none' && $ele.data('ukMarginTop') > min.top && $ele.data('ukMarginPos') > min.pos) { + $ele.addClass(options.cls); + } + }); + }; + + UI.Utils.matchHeights = function(elements, options) { + + elements = UI.$(elements).css('min-height', ''); + options = UI.$.extend({ row : true }, options); + + var matchHeights = function(group){ + + if (group.length < 2) return; + + var max = 0; + + group.each(function() { + max = Math.max(max, UI.$(this).outerHeight()); + }).each(function() { + + var element = UI.$(this), + height = max - (element.css('box-sizing') == 'border-box' ? 0 : (element.outerHeight() - element.height())); + + element.css('min-height', height + 'px'); + }); + }; + + if (options.row) { + + elements.first().width(); // force redraw + + setTimeout(function(){ + + var lastoffset = false, group = []; + + elements.each(function() { + + var ele = UI.$(this), offset = ele.offset().top; + + if (offset != lastoffset && group.length) { + + matchHeights(UI.$(group)); + group = []; + offset = ele.offset().top; + } + + group.push(ele); + lastoffset = offset; + }); + + if (group.length) { + matchHeights(UI.$(group)); + } + + }, 0); + + } else { + matchHeights(elements); + } + }; + + (function(cacheSvgs){ + + UI.Utils.inlineSvg = function(selector, root) { + + var images = UI.$(selector || 'img[src$=".svg"]', root || document).each(function(){ + + var img = UI.$(this), + src = img.attr('src'); + + if (!cacheSvgs[src]) { + + var d = UI.$.Deferred(); + + UI.$.get(src, {nc: Math.random()}, function(data){ + d.resolve(UI.$(data).find('svg')); + }); + + cacheSvgs[src] = d.promise(); + } + + cacheSvgs[src].then(function(svg) { + + var $svg = UI.$(svg).clone(); + + if (img.attr('id')) $svg.attr('id', img.attr('id')); + if (img.attr('class')) $svg.attr('class', img.attr('class')); + if (img.attr('style')) $svg.attr('style', img.attr('style')); + + if (img.attr('width')) { + $svg.attr('width', img.attr('width')); + if (!img.attr('height')) $svg.removeAttr('height'); + } + + if (img.attr('height')){ + $svg.attr('height', img.attr('height')); + if (!img.attr('width')) $svg.removeAttr('width'); + } + + img.replaceWith($svg); + }); + }); + }; + + // init code + UI.ready(function(context) { + UI.Utils.inlineSvg('[data-uk-svg]', context); + }); + + })({}); + +})(UIkit); -- cgit v1.2.3