summaryrefslogtreecommitdiff
path: root/js/core/utility.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/core/utility.js')
-rwxr-xr-xjs/core/utility.js319
1 files changed, 0 insertions, 319 deletions
diff --git a/js/core/utility.js b/js/core/utility.js
deleted file mode 100755
index 0090b8c..0000000
--- a/js/core/utility.js
+++ /dev/null
@@ -1,319 +0,0 @@
1/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2(function(UI) {
3
4 "use strict";
5
6 var stacks = [];
7
8 UI.component('stackMargin', {
9
10 defaults: {
11 cls: 'uk-margin-small-top',
12 rowfirst: false,
13 observe: false
14 },
15
16 boot: function() {
17
18 // init code
19 UI.ready(function(context) {
20
21 UI.$("[data-uk-margin]", context).each(function() {
22
23 var ele = UI.$(this);
24
25 if (!ele.data("stackMargin")) {
26 UI.stackMargin(ele, UI.Utils.options(ele.attr("data-uk-margin")));
27 }
28 });
29 });
30 },
31
32 init: function() {
33
34 var $this = this;
35
36 UI.$win.on('resize orientationchange', (function() {
37
38 var fn = function() {
39 $this.process();
40 };
41
42 UI.$(function() {
43 fn();
44 UI.$win.on("load", fn);
45 });
46
47 return UI.Utils.debounce(fn, 20);
48 })());
49
50 this.on("display.uk.check", function(e) {
51 if (this.element.is(":visible")) this.process();
52 }.bind(this));
53
54 if (this.options.observe) {
55
56 UI.domObserve(this.element, function(e) {
57 if ($this.element.is(":visible")) $this.process();
58 });
59 }
60
61 stacks.push(this);
62 },
63
64 process: function() {
65
66 var $this = this, columns = this.element.children();
67
68 UI.Utils.stackMargin(columns, this.options);
69
70 if (!this.options.rowfirst || !columns.length) {
71 return this;
72 }
73
74 // Mark first column elements
75 var group = {}, minleft = false;
76
77 columns.removeClass(this.options.rowfirst).each(function(offset, $ele){
78
79 $ele = UI.$(this);
80
81 if (this.style.display != 'none') {
82 offset = $ele.offset().left;
83 ((group[offset] = group[offset] || []) && group[offset]).push(this);
84 minleft = minleft === false ? offset : Math.min(minleft, offset);
85 }
86 });
87
88 UI.$(group[minleft]).addClass(this.options.rowfirst);
89
90 return this;
91 }
92
93 });
94
95
96 // responsive element e.g. iframes
97
98 (function(){
99
100 var elements = [], check = function(ele) {
101
102 if (!ele.is(':visible')) return;
103
104 var width = ele.parent().width(),
105 iwidth = ele.data('width'),
106 ratio = (width / iwidth),
107 height = Math.floor(ratio * ele.data('height'));
108
109 ele.css({'height': (width < iwidth) ? height : ele.data('height')});
110 };
111
112 UI.component('responsiveElement', {
113
114 defaults: {},
115
116 boot: function() {
117
118 // init code
119 UI.ready(function(context) {
120
121 UI.$("iframe.uk-responsive-width, [data-uk-responsive]", context).each(function() {
122
123 var ele = UI.$(this), obj;
124
125 if (!ele.data("responsiveElement")) {
126 obj = UI.responsiveElement(ele, {});
127 }
128 });
129 });
130 },
131
132 init: function() {
133
134 var ele = this.element;
135
136 if (ele.attr('width') && ele.attr('height')) {
137
138 ele.data({
139
140 'width' : ele.attr('width'),
141 'height': ele.attr('height')
142
143 }).on('display.uk.check', function(){
144 check(ele);
145 });
146
147 check(ele);
148
149 elements.push(ele);
150 }
151 }
152 });
153
154 UI.$win.on('resize load', UI.Utils.debounce(function(){
155
156 elements.forEach(function(ele){
157 check(ele);
158 });
159
160 }, 15));
161
162 })();
163
164
165
166 // helper
167
168 UI.Utils.stackMargin = function(elements, options) {
169
170 options = UI.$.extend({
171 'cls': 'uk-margin-small-top'
172 }, options);
173
174 elements = UI.$(elements).removeClass(options.cls);
175
176 var min = false;
177
178 elements.each(function(offset, height, pos, $ele){
179
180 $ele = UI.$(this);
181
182 if ($ele.css('display') != 'none') {
183
184 offset = $ele.offset();
185 height = $ele.outerHeight();
186 pos = offset.top + height;
187
188 $ele.data({
189 'ukMarginPos': pos,
190 'ukMarginTop': offset.top
191 });
192
193 if (min === false || (offset.top < min.top) ) {
194
195 min = {
196 top : offset.top,
197 left : offset.left,
198 pos : pos
199 };
200 }
201 }
202
203 }).each(function($ele) {
204
205 $ele = UI.$(this);
206
207 if ($ele.css('display') != 'none' && $ele.data('ukMarginTop') > min.top && $ele.data('ukMarginPos') > min.pos) {
208 $ele.addClass(options.cls);
209 }
210 });
211 };
212
213 UI.Utils.matchHeights = function(elements, options) {
214
215 elements = UI.$(elements).css('min-height', '');
216 options = UI.$.extend({ row : true }, options);
217
218 var matchHeights = function(group){
219
220 if (group.length < 2) return;
221
222 var max = 0;
223
224 group.each(function() {
225 max = Math.max(max, UI.$(this).outerHeight());
226 }).each(function() {
227
228 var element = UI.$(this),
229 height = max - (element.css('box-sizing') == 'border-box' ? 0 : (element.outerHeight() - element.height()));
230
231 element.css('min-height', height + 'px');
232 });
233 };
234
235 if (options.row) {
236
237 elements.first().width(); // force redraw
238
239 setTimeout(function(){
240
241 var lastoffset = false, group = [];
242
243 elements.each(function() {
244
245 var ele = UI.$(this), offset = ele.offset().top;
246
247 if (offset != lastoffset && group.length) {
248
249 matchHeights(UI.$(group));
250 group = [];
251 offset = ele.offset().top;
252 }
253
254 group.push(ele);
255 lastoffset = offset;
256 });
257
258 if (group.length) {
259 matchHeights(UI.$(group));
260 }
261
262 }, 0);
263
264 } else {
265 matchHeights(elements);
266 }
267 };
268
269 (function(cacheSvgs){
270
271 UI.Utils.inlineSvg = function(selector, root) {
272
273 var images = UI.$(selector || 'img[src$=".svg"]', root || document).each(function(){
274
275 var img = UI.$(this),
276 src = img.attr('src');
277
278 if (!cacheSvgs[src]) {
279
280 var d = UI.$.Deferred();
281
282 UI.$.get(src, {nc: Math.random()}, function(data){
283 d.resolve(UI.$(data).find('svg'));
284 });
285
286 cacheSvgs[src] = d.promise();
287 }
288
289 cacheSvgs[src].then(function(svg) {
290
291 var $svg = UI.$(svg).clone();
292
293 if (img.attr('id')) $svg.attr('id', img.attr('id'));
294 if (img.attr('class')) $svg.attr('class', img.attr('class'));
295 if (img.attr('style')) $svg.attr('style', img.attr('style'));
296
297 if (img.attr('width')) {
298 $svg.attr('width', img.attr('width'));
299 if (!img.attr('height')) $svg.removeAttr('height');
300 }
301
302 if (img.attr('height')){
303 $svg.attr('height', img.attr('height'));
304 if (!img.attr('width')) $svg.removeAttr('width');
305 }
306
307 img.replaceWith($svg);
308 });
309 });
310 };
311
312 // init code
313 UI.ready(function(context) {
314 UI.Utils.inlineSvg('[data-uk-svg]', context);
315 });
316
317 })({});
318
319})(UIkit);