1 |
57451
|
k.triantaf
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
2 |
|
|
(function(core) {
|
3 |
|
|
|
4 |
|
|
var uikit;
|
5 |
|
|
|
6 |
|
|
if (!window.jQuery) {
|
7 |
|
|
throw new Error('UIkit 2.x requires jQuery');
|
8 |
|
|
} else {
|
9 |
|
|
uikit = core(window.jQuery);
|
10 |
|
|
}
|
11 |
|
|
|
12 |
|
|
if (typeof define == 'function' && define.amd) { // AMD
|
13 |
|
|
|
14 |
|
|
define('uikit', function(){
|
15 |
|
|
|
16 |
|
|
uikit.load = function(res, req, onload, config) {
|
17 |
|
|
|
18 |
|
|
var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : '').replace(/\/+$/g, '');
|
19 |
|
|
|
20 |
|
|
if (!base) {
|
21 |
|
|
throw new Error('Please define base path to UIkit in the requirejs config.');
|
22 |
|
|
}
|
23 |
|
|
|
24 |
|
|
for (i = 0; i < resources.length; i += 1) {
|
25 |
|
|
var resource = resources[i].replace(/\./g, '/');
|
26 |
|
|
load.push(base+'/components/'+resource);
|
27 |
|
|
}
|
28 |
|
|
|
29 |
|
|
req(load, function() {
|
30 |
|
|
onload(uikit);
|
31 |
|
|
});
|
32 |
|
|
};
|
33 |
|
|
|
34 |
|
|
return uikit;
|
35 |
|
|
});
|
36 |
|
|
}
|
37 |
|
|
|
38 |
|
|
})(function($) {
|
39 |
|
|
|
40 |
|
|
"use strict";
|
41 |
|
|
|
42 |
|
|
if (window.UIkit2) {
|
43 |
|
|
return window.UIkit2;
|
44 |
|
|
}
|
45 |
|
|
|
46 |
|
|
var UI = {}, _UI = window.UIkit || undefined;
|
47 |
|
|
|
48 |
|
|
UI.version = '2.27.5';
|
49 |
|
|
|
50 |
|
|
UI.noConflict = function() {
|
51 |
|
|
// restore UIkit version
|
52 |
|
|
if (_UI) {
|
53 |
|
|
window.UIkit = _UI;
|
54 |
|
|
$.UIkit = _UI;
|
55 |
|
|
$.fn.uk = _UI.fn;
|
56 |
|
|
}
|
57 |
|
|
|
58 |
|
|
return UI;
|
59 |
|
|
};
|
60 |
|
|
|
61 |
|
|
window.UIkit2 = UI;
|
62 |
|
|
|
63 |
|
|
if (!_UI) {
|
64 |
|
|
window.UIkit = UI;
|
65 |
|
|
}
|
66 |
|
|
|
67 |
|
|
// cache jQuery
|
68 |
|
|
UI.$ = $;
|
69 |
|
|
|
70 |
|
|
UI.$doc = UI.$(document);
|
71 |
|
|
UI.$win = UI.$(window);
|
72 |
|
|
UI.$html = UI.$('html');
|
73 |
|
|
|
74 |
|
|
UI.support = {};
|
75 |
|
|
UI.support.transition = (function() {
|
76 |
|
|
|
77 |
|
|
var transitionEnd = (function() {
|
78 |
|
|
|
79 |
|
|
var element = document.body || document.documentElement,
|
80 |
|
|
transEndEventNames = {
|
81 |
|
|
WebkitTransition : 'webkitTransitionEnd',
|
82 |
|
|
MozTransition : 'transitionend',
|
83 |
|
|
OTransition : 'oTransitionEnd otransitionend',
|
84 |
|
|
transition : 'transitionend'
|
85 |
|
|
}, name;
|
86 |
|
|
|
87 |
|
|
for (name in transEndEventNames) {
|
88 |
|
|
if (element.style[name] !== undefined) return transEndEventNames[name];
|
89 |
|
|
}
|
90 |
|
|
}());
|
91 |
|
|
|
92 |
|
|
return transitionEnd && { end: transitionEnd };
|
93 |
|
|
})();
|
94 |
|
|
|
95 |
|
|
UI.support.animation = (function() {
|
96 |
|
|
|
97 |
|
|
var animationEnd = (function() {
|
98 |
|
|
|
99 |
|
|
var element = document.body || document.documentElement,
|
100 |
|
|
animEndEventNames = {
|
101 |
|
|
WebkitAnimation : 'webkitAnimationEnd',
|
102 |
|
|
MozAnimation : 'animationend',
|
103 |
|
|
OAnimation : 'oAnimationEnd oanimationend',
|
104 |
|
|
animation : 'animationend'
|
105 |
|
|
}, name;
|
106 |
|
|
|
107 |
|
|
for (name in animEndEventNames) {
|
108 |
|
|
if (element.style[name] !== undefined) return animEndEventNames[name];
|
109 |
|
|
}
|
110 |
|
|
}());
|
111 |
|
|
|
112 |
|
|
return animationEnd && { end: animationEnd };
|
113 |
|
|
})();
|
114 |
|
|
|
115 |
|
|
// requestAnimationFrame polyfill
|
116 |
|
|
//https://github.com/darius/requestAnimationFrame
|
117 |
|
|
(function() {
|
118 |
|
|
|
119 |
|
|
Date.now = Date.now || function() { return new Date().getTime(); };
|
120 |
|
|
|
121 |
|
|
var vendors = ['webkit', 'moz'];
|
122 |
|
|
for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
|
123 |
|
|
var vp = vendors[i];
|
124 |
|
|
window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];
|
125 |
|
|
window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']
|
126 |
|
|
|| window[vp+'CancelRequestAnimationFrame']);
|
127 |
|
|
}
|
128 |
|
|
if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy
|
129 |
|
|
|| !window.requestAnimationFrame || !window.cancelAnimationFrame) {
|
130 |
|
|
var lastTime = 0;
|
131 |
|
|
window.requestAnimationFrame = function(callback) {
|
132 |
|
|
var now = Date.now();
|
133 |
|
|
var nextTime = Math.max(lastTime + 16, now);
|
134 |
|
|
return setTimeout(function() { callback(lastTime = nextTime); },
|
135 |
|
|
nextTime - now);
|
136 |
|
|
};
|
137 |
|
|
window.cancelAnimationFrame = clearTimeout;
|
138 |
|
|
}
|
139 |
|
|
}());
|
140 |
|
|
|
141 |
|
|
UI.support.touch = (
|
142 |
|
|
('ontouchstart' in document) ||
|
143 |
|
|
(window.DocumentTouch && document instanceof window.DocumentTouch) ||
|
144 |
|
|
(window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0) || //IE 10
|
145 |
|
|
(window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 0) || //IE >=11
|
146 |
|
|
false
|
147 |
|
|
);
|
148 |
|
|
|
149 |
|
|
UI.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || null);
|
150 |
|
|
|
151 |
|
|
UI.Utils = {};
|
152 |
|
|
|
153 |
|
|
UI.Utils.isFullscreen = function() {
|
154 |
|
|
return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false;
|
155 |
|
|
};
|
156 |
|
|
|
157 |
|
|
UI.Utils.str2json = function(str, notevil) {
|
158 |
|
|
try {
|
159 |
|
|
if (notevil) {
|
160 |
|
|
return JSON.parse(str
|
161 |
|
|
// wrap keys without quote with valid double quote
|
162 |
|
|
.replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":';})
|
163 |
|
|
// replacing single quote wrapped ones to double quote
|
164 |
|
|
.replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"';})
|
165 |
|
|
);
|
166 |
|
|
} else {
|
167 |
|
|
return (new Function('', 'var json = ' + str + '; return JSON.parse(JSON.stringify(json));'))();
|
168 |
|
|
}
|
169 |
|
|
} catch(e) { return false; }
|
170 |
|
|
};
|
171 |
|
|
|
172 |
|
|
UI.Utils.debounce = function(func, wait, immediate) {
|
173 |
|
|
var timeout;
|
174 |
|
|
return function() {
|
175 |
|
|
var context = this, args = arguments;
|
176 |
|
|
var later = function() {
|
177 |
|
|
timeout = null;
|
178 |
|
|
if (!immediate) func.apply(context, args);
|
179 |
|
|
};
|
180 |
|
|
var callNow = immediate && !timeout;
|
181 |
|
|
clearTimeout(timeout);
|
182 |
|
|
timeout = setTimeout(later, wait);
|
183 |
|
|
if (callNow) func.apply(context, args);
|
184 |
|
|
};
|
185 |
|
|
};
|
186 |
|
|
|
187 |
|
|
UI.Utils.throttle = function (func, limit) {
|
188 |
|
|
var wait = false;
|
189 |
|
|
return function () {
|
190 |
|
|
if (!wait) {
|
191 |
|
|
func.call();
|
192 |
|
|
wait = true;
|
193 |
|
|
setTimeout(function () {
|
194 |
|
|
wait = false;
|
195 |
|
|
}, limit);
|
196 |
|
|
}
|
197 |
|
|
}
|
198 |
|
|
};
|
199 |
|
|
|
200 |
|
|
UI.Utils.removeCssRules = function(selectorRegEx) {
|
201 |
|
|
var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref;
|
202 |
|
|
|
203 |
|
|
if(!selectorRegEx) return;
|
204 |
|
|
|
205 |
|
|
setTimeout(function(){
|
206 |
|
|
try {
|
207 |
|
|
_ref = document.styleSheets;
|
208 |
|
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
209 |
|
|
stylesheet = _ref[_i];
|
210 |
|
|
idxs = [];
|
211 |
|
|
stylesheet.cssRules = stylesheet.cssRules;
|
212 |
|
|
for (idx = _j = 0, _len1 = stylesheet.cssRules.length; _j < _len1; idx = ++_j) {
|
213 |
|
|
if (stylesheet.cssRules[idx].type === CSSRule.STYLE_RULE && selectorRegEx.test(stylesheet.cssRules[idx].selectorText)) {
|
214 |
|
|
idxs.unshift(idx);
|
215 |
|
|
}
|
216 |
|
|
}
|
217 |
|
|
for (_k = 0, _len2 = idxs.length; _k < _len2; _k++) {
|
218 |
|
|
stylesheet.deleteRule(idxs[_k]);
|
219 |
|
|
}
|
220 |
|
|
}
|
221 |
|
|
} catch (_error) {}
|
222 |
|
|
}, 0);
|
223 |
|
|
};
|
224 |
|
|
|
225 |
|
|
UI.Utils.isInView = function(element, options) {
|
226 |
|
|
|
227 |
|
|
var $element = $(element);
|
228 |
|
|
|
229 |
|
|
if (!$element.is(':visible')) {
|
230 |
|
|
return false;
|
231 |
|
|
}
|
232 |
|
|
|
233 |
|
|
var window_left = UI.$win.scrollLeft(), window_top = UI.$win.scrollTop(), offset = $element.offset(), left = offset.left, top = offset.top;
|
234 |
|
|
|
235 |
|
|
options = $.extend({topoffset:0, leftoffset:0}, options);
|
236 |
|
|
|
237 |
|
|
if (top + $element.height() >= window_top && top - options.topoffset <= window_top + UI.$win.height() &&
|
238 |
|
|
left + $element.width() >= window_left && left - options.leftoffset <= window_left + UI.$win.width()) {
|
239 |
|
|
return true;
|
240 |
|
|
} else {
|
241 |
|
|
return false;
|
242 |
|
|
}
|
243 |
|
|
};
|
244 |
|
|
|
245 |
|
|
UI.Utils.checkDisplay = function(context, initanimation) {
|
246 |
|
|
|
247 |
|
|
var elements = UI.$('[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]', context || document), animated;
|
248 |
|
|
|
249 |
|
|
if (context && !elements.length) {
|
250 |
|
|
elements = $(context);
|
251 |
|
|
}
|
252 |
|
|
|
253 |
|
|
elements.trigger('display.uk.check');
|
254 |
|
|
|
255 |
|
|
// fix firefox / IE animations
|
256 |
|
|
if (initanimation) {
|
257 |
|
|
|
258 |
|
|
if (typeof(initanimation)!='string') {
|
259 |
|
|
initanimation = '[class*="uk-animation-"]';
|
260 |
|
|
}
|
261 |
|
|
|
262 |
|
|
elements.find(initanimation).each(function(){
|
263 |
|
|
|
264 |
|
|
var ele = UI.$(this),
|
265 |
|
|
cls = ele.attr('class'),
|
266 |
|
|
anim = cls.match(/uk-animation-(.+)/);
|
267 |
|
|
|
268 |
|
|
ele.removeClass(anim[0]).width();
|
269 |
|
|
|
270 |
|
|
ele.addClass(anim[0]);
|
271 |
|
|
});
|
272 |
|
|
}
|
273 |
|
|
|
274 |
|
|
return elements;
|
275 |
|
|
};
|
276 |
|
|
|
277 |
|
|
UI.Utils.options = function(string) {
|
278 |
|
|
|
279 |
|
|
if ($.type(string)!='string') return string;
|
280 |
|
|
|
281 |
|
|
if (string.indexOf(':') != -1 && string.trim().substr(-1) != '}') {
|
282 |
|
|
string = '{'+string+'}';
|
283 |
|
|
}
|
284 |
|
|
|
285 |
|
|
var start = (string ? string.indexOf("{") : -1), options = {};
|
286 |
|
|
|
287 |
|
|
if (start != -1) {
|
288 |
|
|
try {
|
289 |
|
|
options = UI.Utils.str2json(string.substr(start));
|
290 |
|
|
} catch (e) {}
|
291 |
|
|
}
|
292 |
|
|
|
293 |
|
|
return options;
|
294 |
|
|
};
|
295 |
|
|
|
296 |
|
|
UI.Utils.animate = function(element, cls) {
|
297 |
|
|
|
298 |
|
|
var d = $.Deferred();
|
299 |
|
|
|
300 |
|
|
element = UI.$(element);
|
301 |
|
|
|
302 |
|
|
element.css('display', 'none').addClass(cls).one(UI.support.animation.end, function() {
|
303 |
|
|
element.removeClass(cls);
|
304 |
|
|
d.resolve();
|
305 |
|
|
});
|
306 |
|
|
|
307 |
|
|
element.css('display', '');
|
308 |
|
|
|
309 |
|
|
return d.promise();
|
310 |
|
|
};
|
311 |
|
|
|
312 |
|
|
UI.Utils.uid = function(prefix) {
|
313 |
|
|
return (prefix || 'id') + (new Date().getTime())+"RAND"+(Math.ceil(Math.random() * 100000));
|
314 |
|
|
};
|
315 |
|
|
|
316 |
|
|
UI.Utils.template = function(str, data) {
|
317 |
|
|
|
318 |
|
|
var tokens = str.replace(/\n/g, '\\n').replace(/\{\{\{\s*(.+?)\s*\}\}\}/g, "{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),
|
319 |
|
|
i=0, toc, cmd, prop, val, fn, output = [], openblocks = 0;
|
320 |
|
|
|
321 |
|
|
while(i < tokens.length) {
|
322 |
|
|
|
323 |
|
|
toc = tokens[i];
|
324 |
|
|
|
325 |
|
|
if(toc.match(/\{\{\s*(.+?)\s*\}\}/)) {
|
326 |
|
|
i = i + 1;
|
327 |
|
|
toc = tokens[i];
|
328 |
|
|
cmd = toc[0];
|
329 |
|
|
prop = toc.substring(toc.match(/^(\^|\#|\!|\~|\:)/) ? 1:0);
|
330 |
|
|
|
331 |
|
|
switch(cmd) {
|
332 |
|
|
case '~':
|
333 |
|
|
output.push('for(var $i=0;$i<'+prop+'.length;$i++) { var $item = '+prop+'[$i];');
|
334 |
|
|
openblocks++;
|
335 |
|
|
break;
|
336 |
|
|
case ':':
|
337 |
|
|
output.push('for(var $key in '+prop+') { var $val = '+prop+'[$key];');
|
338 |
|
|
openblocks++;
|
339 |
|
|
break;
|
340 |
|
|
case '#':
|
341 |
|
|
output.push('if('+prop+') {');
|
342 |
|
|
openblocks++;
|
343 |
|
|
break;
|
344 |
|
|
case '^':
|
345 |
|
|
output.push('if(!'+prop+') {');
|
346 |
|
|
openblocks++;
|
347 |
|
|
break;
|
348 |
|
|
case '/':
|
349 |
|
|
output.push('}');
|
350 |
|
|
openblocks--;
|
351 |
|
|
break;
|
352 |
|
|
case '!':
|
353 |
|
|
output.push('__ret.push('+prop+');');
|
354 |
|
|
break;
|
355 |
|
|
default:
|
356 |
|
|
output.push('__ret.push(escape('+prop+'));');
|
357 |
|
|
break;
|
358 |
|
|
}
|
359 |
|
|
} else {
|
360 |
|
|
output.push("__ret.push('"+toc.replace(/\'/g, "\\'")+"');");
|
361 |
|
|
}
|
362 |
|
|
i = i + 1;
|
363 |
|
|
}
|
364 |
|
|
|
365 |
|
|
fn = new Function('$data', [
|
366 |
|
|
'var __ret = [];',
|
367 |
|
|
'try {',
|
368 |
|
|
'with($data){', (!openblocks ? output.join('') : '__ret = ["Not all blocks are closed correctly."]'), '};',
|
369 |
|
|
'}catch(e){__ret = [e.message];}',
|
370 |
|
|
'return __ret.join("").replace(/\\n\\n/g, "\\n");',
|
371 |
|
|
"function escape(html) { return String(html).replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');}"
|
372 |
|
|
].join("\n"));
|
373 |
|
|
|
374 |
|
|
return data ? fn(data) : fn;
|
375 |
|
|
};
|
376 |
|
|
|
377 |
|
|
UI.Utils.focus = function(element, extra) {
|
378 |
|
|
|
379 |
|
|
element = $(element);
|
380 |
|
|
|
381 |
|
|
if (!element.length) {
|
382 |
|
|
return element;
|
383 |
|
|
}
|
384 |
|
|
|
385 |
|
|
var autofocus = element.find('[autofocus]:first'), tabidx;
|
386 |
|
|
|
387 |
|
|
if (autofocus.length) {
|
388 |
|
|
return autofocus.focus();
|
389 |
|
|
}
|
390 |
|
|
|
391 |
|
|
autofocus = element.find(':input'+(extra && (','+extra) || '')).first();
|
392 |
|
|
|
393 |
|
|
if (autofocus.length) {
|
394 |
|
|
return autofocus.focus();
|
395 |
|
|
}
|
396 |
|
|
|
397 |
|
|
if (!element.attr('tabindex')) {
|
398 |
|
|
tabidx = 1000;
|
399 |
|
|
element.attr('tabindex', tabidx);
|
400 |
|
|
}
|
401 |
|
|
|
402 |
|
|
element[0].focus();
|
403 |
|
|
|
404 |
|
|
if (tabidx) {
|
405 |
|
|
element.attr('tabindex', '');
|
406 |
|
|
}
|
407 |
|
|
|
408 |
|
|
return element;
|
409 |
|
|
}
|
410 |
|
|
|
411 |
|
|
UI.Utils.events = {};
|
412 |
|
|
UI.Utils.events.click = UI.support.touch ? 'tap' : 'click';
|
413 |
|
|
|
414 |
|
|
// deprecated
|
415 |
|
|
|
416 |
|
|
UI.fn = function(command, options) {
|
417 |
|
|
|
418 |
|
|
var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2];
|
419 |
|
|
|
420 |
|
|
if (!UI[component]) {
|
421 |
|
|
$.error('UIkit component [' + component + '] does not exist.');
|
422 |
|
|
return this;
|
423 |
|
|
}
|
424 |
|
|
|
425 |
|
|
return this.each(function() {
|
426 |
|
|
var $this = $(this), data = $this.data(component);
|
427 |
|
|
if (!data) $this.data(component, (data = UI[component](this, method ? undefined : options)));
|
428 |
|
|
if (method) data[method].apply(data, Array.prototype.slice.call(args, 1));
|
429 |
|
|
});
|
430 |
|
|
};
|
431 |
|
|
|
432 |
|
|
$.UIkit = UI;
|
433 |
|
|
$.fn.uk = UI.fn;
|
434 |
|
|
|
435 |
|
|
UI.langdirection = UI.$html.attr("dir") == "rtl" ? "right" : "left";
|
436 |
|
|
|
437 |
|
|
UI.components = {};
|
438 |
|
|
|
439 |
|
|
UI.component = function(name, def, override) {
|
440 |
|
|
|
441 |
|
|
if (UI.components[name] && !override) {
|
442 |
|
|
return UI.components[name];
|
443 |
|
|
}
|
444 |
|
|
|
445 |
|
|
var fn = function(element, options) {
|
446 |
|
|
|
447 |
|
|
var $this = this;
|
448 |
|
|
|
449 |
|
|
this.UIkit = UI;
|
450 |
|
|
this.element = element ? UI.$(element) : null;
|
451 |
|
|
this.options = $.extend(true, {}, this.defaults, options);
|
452 |
|
|
this.plugins = {};
|
453 |
|
|
|
454 |
|
|
if (this.element) {
|
455 |
|
|
this.element.data(name, this);
|
456 |
|
|
}
|
457 |
|
|
|
458 |
|
|
this.init();
|
459 |
|
|
|
460 |
|
|
(this.options.plugins.length ? this.options.plugins : Object.keys(fn.plugins)).forEach(function(plugin) {
|
461 |
|
|
|
462 |
|
|
if (fn.plugins[plugin].init) {
|
463 |
|
|
fn.plugins[plugin].init($this);
|
464 |
|
|
$this.plugins[plugin] = true;
|
465 |
|
|
}
|
466 |
|
|
|
467 |
|
|
});
|
468 |
|
|
|
469 |
|
|
this.trigger('init.uk.component', [name, this]);
|
470 |
|
|
|
471 |
|
|
return this;
|
472 |
|
|
};
|
473 |
|
|
|
474 |
|
|
fn.plugins = {};
|
475 |
|
|
|
476 |
|
|
$.extend(true, fn.prototype, {
|
477 |
|
|
|
478 |
|
|
defaults : {plugins: []},
|
479 |
|
|
|
480 |
|
|
boot: function(){},
|
481 |
|
|
init: function(){},
|
482 |
|
|
|
483 |
|
|
on: function(a1,a2,a3){
|
484 |
|
|
return UI.$(this.element || this).on(a1,a2,a3);
|
485 |
|
|
},
|
486 |
|
|
|
487 |
|
|
one: function(a1,a2,a3){
|
488 |
|
|
return UI.$(this.element || this).one(a1,a2,a3);
|
489 |
|
|
},
|
490 |
|
|
|
491 |
|
|
off: function(evt){
|
492 |
|
|
return UI.$(this.element || this).off(evt);
|
493 |
|
|
},
|
494 |
|
|
|
495 |
|
|
trigger: function(evt, params) {
|
496 |
|
|
return UI.$(this.element || this).trigger(evt, params);
|
497 |
|
|
},
|
498 |
|
|
|
499 |
|
|
find: function(selector) {
|
500 |
|
|
return UI.$(this.element ? this.element: []).find(selector);
|
501 |
|
|
},
|
502 |
|
|
|
503 |
|
|
proxy: function(obj, methods) {
|
504 |
|
|
|
505 |
|
|
var $this = this;
|
506 |
|
|
|
507 |
|
|
methods.split(' ').forEach(function(method) {
|
508 |
|
|
if (!$this[method]) $this[method] = function() { return obj[method].apply(obj, arguments); };
|
509 |
|
|
});
|
510 |
|
|
},
|
511 |
|
|
|
512 |
|
|
mixin: function(obj, methods) {
|
513 |
|
|
|
514 |
|
|
var $this = this;
|
515 |
|
|
|
516 |
|
|
methods.split(' ').forEach(function(method) {
|
517 |
|
|
if (!$this[method]) $this[method] = obj[method].bind($this);
|
518 |
|
|
});
|
519 |
|
|
},
|
520 |
|
|
|
521 |
|
|
option: function() {
|
522 |
|
|
|
523 |
|
|
if (arguments.length == 1) {
|
524 |
|
|
return this.options[arguments[0]] || undefined;
|
525 |
|
|
} else if (arguments.length == 2) {
|
526 |
|
|
this.options[arguments[0]] = arguments[1];
|
527 |
|
|
}
|
528 |
|
|
}
|
529 |
|
|
|
530 |
|
|
}, def);
|
531 |
|
|
|
532 |
|
|
this.components[name] = fn;
|
533 |
|
|
|
534 |
|
|
this[name] = function() {
|
535 |
|
|
|
536 |
|
|
var element, options;
|
537 |
|
|
|
538 |
|
|
if (arguments.length) {
|
539 |
|
|
|
540 |
|
|
switch(arguments.length) {
|
541 |
|
|
case 1:
|
542 |
|
|
|
543 |
|
|
if (typeof arguments[0] === 'string' || arguments[0].nodeType || arguments[0] instanceof jQuery) {
|
544 |
|
|
element = $(arguments[0]);
|
545 |
|
|
} else {
|
546 |
|
|
options = arguments[0];
|
547 |
|
|
}
|
548 |
|
|
|
549 |
|
|
break;
|
550 |
|
|
case 2:
|
551 |
|
|
|
552 |
|
|
element = $(arguments[0]);
|
553 |
|
|
options = arguments[1];
|
554 |
|
|
break;
|
555 |
|
|
}
|
556 |
|
|
}
|
557 |
|
|
|
558 |
|
|
if (element && element.data(name)) {
|
559 |
|
|
return element.data(name);
|
560 |
|
|
}
|
561 |
|
|
|
562 |
|
|
return (new UI.components[name](element, options));
|
563 |
|
|
};
|
564 |
|
|
|
565 |
|
|
if (UI.domready) {
|
566 |
|
|
UI.component.boot(name);
|
567 |
|
|
}
|
568 |
|
|
|
569 |
|
|
return fn;
|
570 |
|
|
};
|
571 |
|
|
|
572 |
|
|
UI.plugin = function(component, name, def) {
|
573 |
|
|
this.components[component].plugins[name] = def;
|
574 |
|
|
};
|
575 |
|
|
|
576 |
|
|
UI.component.boot = function(name) {
|
577 |
|
|
|
578 |
|
|
if (UI.components[name].prototype && UI.components[name].prototype.boot && !UI.components[name].booted) {
|
579 |
|
|
UI.components[name].prototype.boot.apply(UI, []);
|
580 |
|
|
UI.components[name].booted = true;
|
581 |
|
|
}
|
582 |
|
|
};
|
583 |
|
|
|
584 |
|
|
UI.component.bootComponents = function() {
|
585 |
|
|
|
586 |
|
|
for (var component in UI.components) {
|
587 |
|
|
UI.component.boot(component);
|
588 |
|
|
}
|
589 |
|
|
};
|
590 |
|
|
|
591 |
|
|
|
592 |
|
|
// DOM mutation save ready helper function
|
593 |
|
|
|
594 |
|
|
UI.domObservers = [];
|
595 |
|
|
UI.domready = false;
|
596 |
|
|
|
597 |
|
|
UI.ready = function(fn) {
|
598 |
|
|
|
599 |
|
|
UI.domObservers.push(fn);
|
600 |
|
|
|
601 |
|
|
if (UI.domready) {
|
602 |
|
|
fn(document);
|
603 |
|
|
}
|
604 |
|
|
};
|
605 |
|
|
|
606 |
|
|
UI.on = function(a1,a2,a3){
|
607 |
|
|
|
608 |
|
|
if (a1 && a1.indexOf('ready.uk.dom') > -1 && UI.domready) {
|
609 |
|
|
a2.apply(UI.$doc);
|
610 |
|
|
}
|
611 |
|
|
|
612 |
|
|
return UI.$doc.on(a1,a2,a3);
|
613 |
|
|
};
|
614 |
|
|
|
615 |
|
|
UI.one = function(a1,a2,a3){
|
616 |
|
|
|
617 |
|
|
if (a1 && a1.indexOf('ready.uk.dom') > -1 && UI.domready) {
|
618 |
|
|
a2.apply(UI.$doc);
|
619 |
|
|
return UI.$doc;
|
620 |
|
|
}
|
621 |
|
|
|
622 |
|
|
return UI.$doc.one(a1,a2,a3);
|
623 |
|
|
};
|
624 |
|
|
|
625 |
|
|
UI.trigger = function(evt, params) {
|
626 |
|
|
return UI.$doc.trigger(evt, params);
|
627 |
|
|
};
|
628 |
|
|
|
629 |
|
|
UI.domObserve = function(selector, fn) {
|
630 |
|
|
|
631 |
|
|
if(!UI.support.mutationobserver) return;
|
632 |
|
|
|
633 |
|
|
fn = fn || function() {};
|
634 |
|
|
|
635 |
|
|
UI.$(selector).each(function() {
|
636 |
|
|
|
637 |
|
|
var element = this,
|
638 |
|
|
$element = UI.$(element);
|
639 |
|
|
|
640 |
|
|
if ($element.data('observer')) {
|
641 |
|
|
return;
|
642 |
|
|
}
|
643 |
|
|
|
644 |
|
|
try {
|
645 |
|
|
|
646 |
|
|
var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) {
|
647 |
|
|
fn.apply(element, [$element]);
|
648 |
|
|
$element.trigger('changed.uk.dom');
|
649 |
|
|
}, 50), {childList: true, subtree: true});
|
650 |
|
|
|
651 |
|
|
// pass in the target node, as well as the observer options
|
652 |
|
|
observer.observe(element, { childList: true, subtree: true });
|
653 |
|
|
|
654 |
|
|
$element.data('observer', observer);
|
655 |
|
|
|
656 |
|
|
} catch(e) {}
|
657 |
|
|
});
|
658 |
|
|
};
|
659 |
|
|
|
660 |
|
|
UI.init = function(root) {
|
661 |
|
|
|
662 |
|
|
root = root || document;
|
663 |
|
|
|
664 |
|
|
UI.domObservers.forEach(function(fn){
|
665 |
|
|
fn(root);
|
666 |
|
|
});
|
667 |
|
|
};
|
668 |
|
|
|
669 |
|
|
UI.on('domready.uk.dom', function(){
|
670 |
|
|
|
671 |
|
|
UI.init();
|
672 |
|
|
|
673 |
|
|
if (UI.domready) UI.Utils.checkDisplay();
|
674 |
|
|
});
|
675 |
|
|
|
676 |
|
|
document.addEventListener('DOMContentLoaded', function(){
|
677 |
|
|
|
678 |
|
|
var domReady = function() {
|
679 |
|
|
|
680 |
|
|
UI.$body = UI.$('body');
|
681 |
|
|
|
682 |
|
|
UI.trigger('beforeready.uk.dom');
|
683 |
|
|
|
684 |
|
|
UI.component.bootComponents();
|
685 |
|
|
|
686 |
|
|
// custom scroll observer
|
687 |
|
|
var rafToken = requestAnimationFrame((function(){
|
688 |
|
|
|
689 |
|
|
var memory = {dir: {x:0, y:0}, x: window.pageXOffset, y:window.pageYOffset};
|
690 |
|
|
|
691 |
|
|
var fn = function(){
|
692 |
|
|
// reading this (window.page[X|Y]Offset) causes a full page recalc of the layout in Chrome,
|
693 |
|
|
// so we only want to do this once
|
694 |
|
|
var wpxo = window.pageXOffset;
|
695 |
|
|
var wpyo = window.pageYOffset;
|
696 |
|
|
|
697 |
|
|
// Did the scroll position change since the last time we were here?
|
698 |
|
|
if (memory.x != wpxo || memory.y != wpyo) {
|
699 |
|
|
|
700 |
|
|
// Set the direction of the scroll and store the new position
|
701 |
|
|
if (wpxo != memory.x) {memory.dir.x = wpxo > memory.x ? 1:-1; } else { memory.dir.x = 0; }
|
702 |
|
|
if (wpyo != memory.y) {memory.dir.y = wpyo > memory.y ? 1:-1; } else { memory.dir.y = 0; }
|
703 |
|
|
|
704 |
|
|
memory.x = wpxo;
|
705 |
|
|
memory.y = wpyo;
|
706 |
|
|
|
707 |
|
|
// Trigger the scroll event, this could probably be sent using memory.clone() but this is
|
708 |
|
|
// more explicit and easier to see exactly what is being sent in the event.
|
709 |
|
|
UI.$doc.trigger('scrolling.uk.document', [{
|
710 |
|
|
dir: {x: memory.dir.x, y: memory.dir.y}, x: wpxo, y: wpyo
|
711 |
|
|
}]);
|
712 |
|
|
}
|
713 |
|
|
|
714 |
|
|
cancelAnimationFrame(rafToken);
|
715 |
|
|
rafToken = requestAnimationFrame(fn);
|
716 |
|
|
};
|
717 |
|
|
|
718 |
|
|
if (UI.support.touch) {
|
719 |
|
|
UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn);
|
720 |
|
|
}
|
721 |
|
|
|
722 |
|
|
if (memory.x || memory.y) fn();
|
723 |
|
|
|
724 |
|
|
return fn;
|
725 |
|
|
|
726 |
|
|
})());
|
727 |
|
|
|
728 |
|
|
// run component init functions on dom
|
729 |
|
|
UI.trigger('domready.uk.dom');
|
730 |
|
|
|
731 |
|
|
if (UI.support.touch) {
|
732 |
|
|
|
733 |
|
|
// remove css hover rules for touch devices
|
734 |
|
|
// UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/);
|
735 |
|
|
|
736 |
|
|
// viewport unit fix for uk-height-viewport - should be fixed in iOS 8
|
737 |
|
|
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
|
738 |
|
|
|
739 |
|
|
UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){
|
740 |
|
|
|
741 |
|
|
var fn = function() {
|
742 |
|
|
$('.uk-height-viewport').css('height', window.innerHeight);
|
743 |
|
|
return fn;
|
744 |
|
|
};
|
745 |
|
|
|
746 |
|
|
return fn();
|
747 |
|
|
|
748 |
|
|
})(), 100));
|
749 |
|
|
}
|
750 |
|
|
}
|
751 |
|
|
|
752 |
|
|
UI.trigger('afterready.uk.dom');
|
753 |
|
|
|
754 |
|
|
// mark that domready is left behind
|
755 |
|
|
UI.domready = true;
|
756 |
|
|
|
757 |
|
|
// auto init js components
|
758 |
|
|
if (UI.support.mutationobserver) {
|
759 |
|
|
|
760 |
|
|
var initFn = UI.Utils.debounce(function(){
|
761 |
|
|
requestAnimationFrame(function(){ UI.init(document.body);});
|
762 |
|
|
}, 10);
|
763 |
|
|
|
764 |
|
|
(new UI.support.mutationobserver(function(mutations) {
|
765 |
|
|
|
766 |
|
|
var init = false;
|
767 |
|
|
|
768 |
|
|
mutations.every(function(mutation){
|
769 |
|
|
|
770 |
|
|
if (mutation.type != 'childList') return true;
|
771 |
|
|
|
772 |
|
|
for (var i = 0, node; i < mutation.addedNodes.length; ++i) {
|
773 |
|
|
|
774 |
|
|
node = mutation.addedNodes[i];
|
775 |
|
|
|
776 |
|
|
if (node.outerHTML && node.outerHTML.indexOf('data-uk-') !== -1) {
|
777 |
|
|
return (init = true) && false;
|
778 |
|
|
}
|
779 |
|
|
}
|
780 |
|
|
return true;
|
781 |
|
|
});
|
782 |
|
|
|
783 |
|
|
if (init) initFn();
|
784 |
|
|
|
785 |
|
|
})).observe(document.body, {childList: true, subtree: true});
|
786 |
|
|
}
|
787 |
|
|
};
|
788 |
|
|
|
789 |
|
|
if (document.readyState == 'complete' || document.readyState == 'interactive') {
|
790 |
|
|
setTimeout(domReady);
|
791 |
|
|
}
|
792 |
|
|
|
793 |
|
|
return domReady;
|
794 |
|
|
|
795 |
|
|
}());
|
796 |
|
|
|
797 |
|
|
// add touch identifier class
|
798 |
|
|
UI.$html.addClass(UI.support.touch ? 'uk-touch' : 'uk-notouch');
|
799 |
|
|
|
800 |
|
|
// add uk-hover class on tap to support overlays on touch devices
|
801 |
|
|
if (UI.support.touch) {
|
802 |
|
|
|
803 |
|
|
var hoverset = false,
|
804 |
|
|
exclude,
|
805 |
|
|
hovercls = 'uk-hover',
|
806 |
|
|
selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover';
|
807 |
|
|
|
808 |
|
|
UI.$html.on('mouseenter touchstart MSPointerDown pointerdown', selector, function() {
|
809 |
|
|
|
810 |
|
|
if (hoverset) $('.'+hovercls).removeClass(hovercls);
|
811 |
|
|
|
812 |
|
|
hoverset = $(this).addClass(hovercls);
|
813 |
|
|
|
814 |
|
|
}).on('mouseleave touchend MSPointerUp pointerup', function(e) {
|
815 |
|
|
|
816 |
|
|
exclude = $(e.target).parents(selector);
|
817 |
|
|
|
818 |
|
|
if (hoverset) {
|
819 |
|
|
hoverset.not(exclude).removeClass(hovercls);
|
820 |
|
|
}
|
821 |
|
|
});
|
822 |
|
|
}
|
823 |
|
|
|
824 |
|
|
return UI;
|
825 |
|
|
});
|
826 |
|
|
|
827 |
|
|
// Based on Zeptos touch.js
|
828 |
|
|
// https://raw.github.com/madrobby/zepto/master/src/touch.js
|
829 |
|
|
// Zepto.js may be freely distributed under the MIT license.
|
830 |
|
|
|
831 |
|
|
;(function($){
|
832 |
|
|
|
833 |
|
|
if ($.fn.swipeLeft) {
|
834 |
|
|
return;
|
835 |
|
|
}
|
836 |
|
|
|
837 |
|
|
|
838 |
|
|
var touch = {}, touchTimeout, tapTimeout, swipeTimeout, longTapTimeout, longTapDelay = 750, gesture;
|
839 |
|
|
var hasTouchEvents = 'ontouchstart' in window,
|
840 |
|
|
hasPointerEvents = window.PointerEvent,
|
841 |
|
|
hasTouch = hasTouchEvents
|
842 |
|
|
|| window.DocumentTouch && document instanceof DocumentTouch
|
843 |
|
|
|| navigator.msPointerEnabled && navigator.msMaxTouchPoints > 0 // IE 10
|
844 |
|
|
|| navigator.pointerEnabled && navigator.maxTouchPoints > 0; // IE >=11
|
845 |
|
|
|
846 |
|
|
function swipeDirection(x1, x2, y1, y2) {
|
847 |
|
|
return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down');
|
848 |
|
|
}
|
849 |
|
|
|
850 |
|
|
function longTap() {
|
851 |
|
|
longTapTimeout = null;
|
852 |
|
|
if (touch.last) {
|
853 |
|
|
if ( touch.el !== undefined ) touch.el.trigger('longTap');
|
854 |
|
|
touch = {};
|
855 |
|
|
}
|
856 |
|
|
}
|
857 |
|
|
|
858 |
|
|
function cancelLongTap() {
|
859 |
|
|
if (longTapTimeout) clearTimeout(longTapTimeout);
|
860 |
|
|
longTapTimeout = null;
|
861 |
|
|
}
|
862 |
|
|
|
863 |
|
|
function cancelAll() {
|
864 |
|
|
if (touchTimeout) clearTimeout(touchTimeout);
|
865 |
|
|
if (tapTimeout) clearTimeout(tapTimeout);
|
866 |
|
|
if (swipeTimeout) clearTimeout(swipeTimeout);
|
867 |
|
|
if (longTapTimeout) clearTimeout(longTapTimeout);
|
868 |
|
|
touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null;
|
869 |
|
|
touch = {};
|
870 |
|
|
}
|
871 |
|
|
|
872 |
|
|
function isPrimaryTouch(event){
|
873 |
|
|
return event.pointerType == event.MSPOINTER_TYPE_TOUCH && event.isPrimary;
|
874 |
|
|
}
|
875 |
|
|
|
876 |
|
|
$(function(){
|
877 |
|
|
var now, delta, deltaX = 0, deltaY = 0, firstTouch;
|
878 |
|
|
|
879 |
|
|
if ('MSGesture' in window) {
|
880 |
|
|
gesture = new MSGesture();
|
881 |
|
|
gesture.target = document.body;
|
882 |
|
|
}
|
883 |
|
|
|
884 |
|
|
$(document)
|
885 |
|
|
.on('MSGestureEnd gestureend', function(e){
|
886 |
|
|
|
887 |
|
|
var swipeDirectionFromVelocity = e.originalEvent.velocityX > 1 ? 'Right' : e.originalEvent.velocityX < -1 ? 'Left' : e.originalEvent.velocityY > 1 ? 'Down' : e.originalEvent.velocityY < -1 ? 'Up' : null;
|
888 |
|
|
|
889 |
|
|
if (swipeDirectionFromVelocity && touch.el !== undefined) {
|
890 |
|
|
touch.el.trigger('swipe');
|
891 |
|
|
touch.el.trigger('swipe'+ swipeDirectionFromVelocity);
|
892 |
|
|
}
|
893 |
|
|
})
|
894 |
|
|
// MSPointerDown: for IE10
|
895 |
|
|
// pointerdown: for IE11
|
896 |
|
|
.on('touchstart MSPointerDown pointerdown', function(e){
|
897 |
|
|
|
898 |
|
|
if(e.type == 'MSPointerDown' && !isPrimaryTouch(e.originalEvent)) return;
|
899 |
|
|
|
900 |
|
|
firstTouch = (e.type == 'MSPointerDown' || e.type == 'pointerdown') ? e : e.originalEvent.touches[0];
|
901 |
|
|
|
902 |
|
|
now = Date.now();
|
903 |
|
|
delta = now - (touch.last || now);
|
904 |
|
|
touch.el = $('tagName' in firstTouch.target ? firstTouch.target : firstTouch.target.parentNode);
|
905 |
|
|
|
906 |
|
|
if(touchTimeout) clearTimeout(touchTimeout);
|
907 |
|
|
|
908 |
|
|
touch.x1 = firstTouch.pageX;
|
909 |
|
|
touch.y1 = firstTouch.pageY;
|
910 |
|
|
|
911 |
|
|
if (delta > 0 && delta <= 250) touch.isDoubleTap = true;
|
912 |
|
|
|
913 |
|
|
touch.last = now;
|
914 |
|
|
longTapTimeout = setTimeout(longTap, longTapDelay);
|
915 |
|
|
|
916 |
|
|
// adds the current touch contact for IE gesture recognition
|
917 |
|
|
if (e.originalEvent && e.originalEvent.pointerId && gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) {
|
918 |
|
|
gesture.addPointer(e.originalEvent.pointerId);
|
919 |
|
|
}
|
920 |
|
|
|
921 |
|
|
})
|
922 |
|
|
// MSPointerMove: for IE10
|
923 |
|
|
// pointermove: for IE11
|
924 |
|
|
.on('touchmove MSPointerMove pointermove', function(e){
|
925 |
|
|
|
926 |
|
|
if (e.type == 'MSPointerMove' && !isPrimaryTouch(e.originalEvent)) return;
|
927 |
|
|
|
928 |
|
|
firstTouch = (e.type == 'MSPointerMove' || e.type == 'pointermove') ? e : e.originalEvent.touches[0];
|
929 |
|
|
|
930 |
|
|
cancelLongTap();
|
931 |
|
|
touch.x2 = firstTouch.pageX;
|
932 |
|
|
touch.y2 = firstTouch.pageY;
|
933 |
|
|
|
934 |
|
|
deltaX += Math.abs(touch.x1 - touch.x2);
|
935 |
|
|
deltaY += Math.abs(touch.y1 - touch.y2);
|
936 |
|
|
})
|
937 |
|
|
// MSPointerUp: for IE10
|
938 |
|
|
// pointerup: for IE11
|
939 |
|
|
.on('touchend MSPointerUp pointerup', function(e){
|
940 |
|
|
|
941 |
|
|
if (e.type == 'MSPointerUp' && !isPrimaryTouch(e.originalEvent)) return;
|
942 |
|
|
|
943 |
|
|
cancelLongTap();
|
944 |
|
|
|
945 |
|
|
// swipe
|
946 |
|
|
if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)){
|
947 |
|
|
|
948 |
|
|
swipeTimeout = setTimeout(function() {
|
949 |
|
|
if ( touch.el !== undefined ) {
|
950 |
|
|
touch.el.trigger('swipe');
|
951 |
|
|
touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)));
|
952 |
|
|
}
|
953 |
|
|
touch = {};
|
954 |
|
|
}, 0);
|
955 |
|
|
|
956 |
|
|
// normal tap
|
957 |
|
|
} else if ('last' in touch) {
|
958 |
|
|
|
959 |
|
|
// don't fire tap when delta position changed by more than 30 pixels,
|
960 |
|
|
// for instance when moving to a point and back to origin
|
961 |
|
|
if (isNaN(deltaX) || (deltaX < 30 && deltaY < 30)) {
|
962 |
|
|
// delay by one tick so we can cancel the 'tap' event if 'scroll' fires
|
963 |
|
|
// ('tap' fires before 'scroll')
|
964 |
|
|
tapTimeout = setTimeout(function() {
|
965 |
|
|
|
966 |
|
|
// trigger universal 'tap' with the option to cancelTouch()
|
967 |
|
|
// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
|
968 |
|
|
var event = $.Event('tap');
|
969 |
|
|
event.cancelTouch = cancelAll;
|
970 |
|
|
if ( touch.el !== undefined ) touch.el.trigger(event);
|
971 |
|
|
|
972 |
|
|
// trigger double tap immediately
|
973 |
|
|
if (touch.isDoubleTap) {
|
974 |
|
|
if ( touch.el !== undefined ) touch.el.trigger('doubleTap');
|
975 |
|
|
touch = {};
|
976 |
|
|
}
|
977 |
|
|
|
978 |
|
|
// trigger single tap after 250ms of inactivity
|
979 |
|
|
else {
|
980 |
|
|
touchTimeout = setTimeout(function(){
|
981 |
|
|
touchTimeout = null;
|
982 |
|
|
if ( touch.el !== undefined ) touch.el.trigger('singleTap');
|
983 |
|
|
touch = {};
|
984 |
|
|
}, 250);
|
985 |
|
|
}
|
986 |
|
|
}, 0);
|
987 |
|
|
} else {
|
988 |
|
|
touch = {};
|
989 |
|
|
}
|
990 |
|
|
deltaX = deltaY = 0;
|
991 |
|
|
}
|
992 |
|
|
})
|
993 |
|
|
// when the browser window loses focus,
|
994 |
|
|
// for example when a modal dialog is shown,
|
995 |
|
|
// cancel all ongoing events
|
996 |
|
|
.on('touchcancel MSPointerCancel pointercancel', function(e){
|
997 |
|
|
|
998 |
|
|
// Ignore pointercancel if the event supports touch events, to prevent pointercancel in swipe gesture
|
999 |
|
|
if ((e.type == 'touchcancel' && hasTouchEvents && hasTouch) || (!hasTouchEvents && e.type == 'pointercancel' && hasPointerEvents)) {
|
1000 |
|
|
cancelAll();
|
1001 |
|
|
}
|
1002 |
|
|
|
1003 |
|
|
});
|
1004 |
|
|
|
1005 |
|
|
// scrolling the window indicates intention of the user
|
1006 |
|
|
// to scroll, not tap or swipe, so cancel all ongoing events
|
1007 |
|
|
$(window).on('scroll', cancelAll);
|
1008 |
|
|
});
|
1009 |
|
|
|
1010 |
|
|
['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(eventName){
|
1011 |
|
|
$.fn[eventName] = function(callback){ return $(this).on(eventName, callback); };
|
1012 |
|
|
});
|
1013 |
|
|
})(jQuery);
|
1014 |
|
|
|
1015 |
|
|
(function(UI) {
|
1016 |
|
|
|
1017 |
|
|
"use strict";
|
1018 |
|
|
|
1019 |
|
|
var stacks = [];
|
1020 |
|
|
|
1021 |
|
|
UI.component('stackMargin', {
|
1022 |
|
|
|
1023 |
|
|
defaults: {
|
1024 |
|
|
cls: 'uk-margin-small-top',
|
1025 |
|
|
rowfirst: false,
|
1026 |
|
|
observe: false
|
1027 |
|
|
},
|
1028 |
|
|
|
1029 |
|
|
boot: function() {
|
1030 |
|
|
|
1031 |
|
|
// init code
|
1032 |
|
|
UI.ready(function(context) {
|
1033 |
|
|
|
1034 |
|
|
UI.$('[data-uk-margin]', context).each(function() {
|
1035 |
|
|
|
1036 |
|
|
var ele = UI.$(this);
|
1037 |
|
|
|
1038 |
|
|
if (!ele.data('stackMargin')) {
|
1039 |
|
|
UI.stackMargin(ele, UI.Utils.options(ele.attr('data-uk-margin')));
|
1040 |
|
|
}
|
1041 |
|
|
});
|
1042 |
|
|
});
|
1043 |
|
|
},
|
1044 |
|
|
|
1045 |
|
|
init: function() {
|
1046 |
|
|
|
1047 |
|
|
var $this = this;
|
1048 |
|
|
|
1049 |
|
|
UI.$win.on('resize orientationchange', (function() {
|
1050 |
|
|
|
1051 |
|
|
var fn = function() {
|
1052 |
|
|
$this.process();
|
1053 |
|
|
};
|
1054 |
|
|
|
1055 |
|
|
UI.$(function() {
|
1056 |
|
|
fn();
|
1057 |
|
|
UI.$win.on('load', fn);
|
1058 |
|
|
});
|
1059 |
|
|
|
1060 |
|
|
return UI.Utils.debounce(fn, 20);
|
1061 |
|
|
})());
|
1062 |
|
|
|
1063 |
|
|
this.on('display.uk.check', function(e) {
|
1064 |
|
|
if (this.element.is(':visible')) this.process();
|
1065 |
|
|
}.bind(this));
|
1066 |
|
|
|
1067 |
|
|
if (this.options.observe) {
|
1068 |
|
|
|
1069 |
|
|
UI.domObserve(this.element, function(e) {
|
1070 |
|
|
if ($this.element.is(':visible')) $this.process();
|
1071 |
|
|
});
|
1072 |
|
|
}
|
1073 |
|
|
|
1074 |
|
|
stacks.push(this);
|
1075 |
|
|
},
|
1076 |
|
|
|
1077 |
|
|
process: function() {
|
1078 |
|
|
|
1079 |
|
|
var $this = this, columns = this.element.children();
|
1080 |
|
|
|
1081 |
|
|
UI.Utils.stackMargin(columns, this.options);
|
1082 |
|
|
|
1083 |
|
|
if (!this.options.rowfirst || !columns.length) {
|
1084 |
|
|
return this;
|
1085 |
|
|
}
|
1086 |
|
|
|
1087 |
|
|
// Mark first column elements
|
1088 |
|
|
var group = {}, minleft = false;
|
1089 |
|
|
|
1090 |
|
|
columns.removeClass(this.options.rowfirst).each(function(offset, $ele){
|
1091 |
|
|
|
1092 |
|
|
$ele = UI.$(this);
|
1093 |
|
|
|
1094 |
|
|
if (this.style.display != 'none') {
|
1095 |
|
|
offset = $ele.offset().left;
|
1096 |
|
|
((group[offset] = group[offset] || []) && group[offset]).push(this);
|
1097 |
|
|
minleft = minleft === false ? offset : Math.min(minleft, offset);
|
1098 |
|
|
}
|
1099 |
|
|
});
|
1100 |
|
|
|
1101 |
|
|
UI.$(group[minleft]).addClass(this.options.rowfirst);
|
1102 |
|
|
|
1103 |
|
|
return this;
|
1104 |
|
|
}
|
1105 |
|
|
|
1106 |
|
|
});
|
1107 |
|
|
|
1108 |
|
|
|
1109 |
|
|
// responsive element e.g. iframes
|
1110 |
|
|
|
1111 |
|
|
(function(){
|
1112 |
|
|
|
1113 |
|
|
var elements = [], check = function(ele) {
|
1114 |
|
|
|
1115 |
|
|
if (!ele.is(':visible')) return;
|
1116 |
|
|
|
1117 |
|
|
var width = ele.parent().width(),
|
1118 |
|
|
iwidth = ele.data('width'),
|
1119 |
|
|
ratio = (width / iwidth),
|
1120 |
|
|
height = Math.floor(ratio * ele.data('height'));
|
1121 |
|
|
|
1122 |
|
|
ele.css({height: (width < iwidth) ? height : ele.data('height')});
|
1123 |
|
|
};
|
1124 |
|
|
|
1125 |
|
|
UI.component('responsiveElement', {
|
1126 |
|
|
|
1127 |
|
|
defaults: {},
|
1128 |
|
|
|
1129 |
|
|
boot: function() {
|
1130 |
|
|
|
1131 |
|
|
// init code
|
1132 |
|
|
UI.ready(function(context) {
|
1133 |
|
|
|
1134 |
|
|
UI.$('iframe.uk-responsive-width, [data-uk-responsive]', context).each(function() {
|
1135 |
|
|
|
1136 |
|
|
var ele = UI.$(this), obj;
|
1137 |
|
|
|
1138 |
|
|
if (!ele.data('responsiveElement')) {
|
1139 |
|
|
obj = UI.responsiveElement(ele, {});
|
1140 |
|
|
}
|
1141 |
|
|
});
|
1142 |
|
|
});
|
1143 |
|
|
},
|
1144 |
|
|
|
1145 |
|
|
init: function() {
|
1146 |
|
|
|
1147 |
|
|
var ele = this.element;
|
1148 |
|
|
|
1149 |
|
|
if (ele.attr('width') && ele.attr('height')) {
|
1150 |
|
|
|
1151 |
|
|
ele.data({
|
1152 |
|
|
width : ele.attr('width'),
|
1153 |
|
|
height: ele.attr('height')
|
1154 |
|
|
}).on('display.uk.check', function(){
|
1155 |
|
|
check(ele);
|
1156 |
|
|
});
|
1157 |
|
|
|
1158 |
|
|
check(ele);
|
1159 |
|
|
|
1160 |
|
|
elements.push(ele);
|
1161 |
|
|
}
|
1162 |
|
|
}
|
1163 |
|
|
});
|
1164 |
|
|
|
1165 |
|
|
UI.$win.on('resize load', UI.Utils.debounce(function(){
|
1166 |
|
|
|
1167 |
|
|
elements.forEach(function(ele){
|
1168 |
|
|
check(ele);
|
1169 |
|
|
});
|
1170 |
|
|
|
1171 |
|
|
}, 15));
|
1172 |
|
|
|
1173 |
|
|
})();
|
1174 |
|
|
|
1175 |
|
|
|
1176 |
|
|
// helper
|
1177 |
|
|
|
1178 |
|
|
UI.Utils.stackMargin = function(elements, options) {
|
1179 |
|
|
|
1180 |
|
|
options = UI.$.extend({
|
1181 |
|
|
cls: 'uk-margin-small-top'
|
1182 |
|
|
}, options);
|
1183 |
|
|
|
1184 |
|
|
elements = UI.$(elements).removeClass(options.cls);
|
1185 |
|
|
|
1186 |
|
|
var min = false;
|
1187 |
|
|
|
1188 |
|
|
elements.each(function(offset, height, pos, $ele){
|
1189 |
|
|
|
1190 |
|
|
$ele = UI.$(this);
|
1191 |
|
|
|
1192 |
|
|
if ($ele.css('display') != 'none') {
|
1193 |
|
|
|
1194 |
|
|
offset = $ele.offset();
|
1195 |
|
|
height = $ele.outerHeight();
|
1196 |
|
|
pos = offset.top + height;
|
1197 |
|
|
|
1198 |
|
|
$ele.data({
|
1199 |
|
|
ukMarginPos: pos,
|
1200 |
|
|
ukMarginTop: offset.top
|
1201 |
|
|
});
|
1202 |
|
|
|
1203 |
|
|
if (min === false || (offset.top < min.top) ) {
|
1204 |
|
|
|
1205 |
|
|
min = {
|
1206 |
|
|
top : offset.top,
|
1207 |
|
|
left : offset.left,
|
1208 |
|
|
pos : pos
|
1209 |
|
|
};
|
1210 |
|
|
}
|
1211 |
|
|
}
|
1212 |
|
|
|
1213 |
|
|
}).each(function($ele) {
|
1214 |
|
|
|
1215 |
|
|
$ele = UI.$(this);
|
1216 |
|
|
|
1217 |
|
|
if ($ele.css('display') != 'none' && $ele.data('ukMarginTop') > min.top && $ele.data('ukMarginPos') > min.pos) {
|
1218 |
|
|
$ele.addClass(options.cls);
|
1219 |
|
|
}
|
1220 |
|
|
});
|
1221 |
|
|
};
|
1222 |
|
|
|
1223 |
|
|
UI.Utils.matchHeights = function(elements, options) {
|
1224 |
|
|
|
1225 |
|
|
elements = UI.$(elements).css('min-height', '');
|
1226 |
|
|
options = UI.$.extend({ row : true }, options);
|
1227 |
|
|
|
1228 |
|
|
var matchHeights = function(group){
|
1229 |
|
|
|
1230 |
|
|
if (group.length < 2) return;
|
1231 |
|
|
|
1232 |
|
|
var max = 0;
|
1233 |
|
|
|
1234 |
|
|
group.each(function() {
|
1235 |
|
|
max = Math.max(max, UI.$(this).outerHeight());
|
1236 |
|
|
}).each(function() {
|
1237 |
|
|
|
1238 |
|
|
var element = UI.$(this),
|
1239 |
|
|
height = max - (element.css('box-sizing') == 'border-box' ? 0 : (element.outerHeight() - element.height()));
|
1240 |
|
|
|
1241 |
|
|
element.css('min-height', height + 'px');
|
1242 |
|
|
});
|
1243 |
|
|
};
|
1244 |
|
|
|
1245 |
|
|
if (options.row) {
|
1246 |
|
|
|
1247 |
|
|
elements.first().width(); // force redraw
|
1248 |
|
|
|
1249 |
|
|
setTimeout(function(){
|
1250 |
|
|
|
1251 |
|
|
var lastoffset = false, group = [];
|
1252 |
|
|
|
1253 |
|
|
elements.each(function() {
|
1254 |
|
|
|
1255 |
|
|
var ele = UI.$(this), offset = ele.offset().top;
|
1256 |
|
|
|
1257 |
|
|
if (offset != lastoffset && group.length) {
|
1258 |
|
|
|
1259 |
|
|
matchHeights(UI.$(group));
|
1260 |
|
|
group = [];
|
1261 |
|
|
offset = ele.offset().top;
|
1262 |
|
|
}
|
1263 |
|
|
|
1264 |
|
|
group.push(ele);
|
1265 |
|
|
lastoffset = offset;
|
1266 |
|
|
});
|
1267 |
|
|
|
1268 |
|
|
if (group.length) {
|
1269 |
|
|
matchHeights(UI.$(group));
|
1270 |
|
|
}
|
1271 |
|
|
|
1272 |
|
|
}, 0);
|
1273 |
|
|
|
1274 |
|
|
} else {
|
1275 |
|
|
matchHeights(elements);
|
1276 |
|
|
}
|
1277 |
|
|
};
|
1278 |
|
|
|
1279 |
|
|
(function(cacheSvgs){
|
1280 |
|
|
|
1281 |
|
|
UI.Utils.inlineSvg = function(selector, root) {
|
1282 |
|
|
|
1283 |
|
|
var images = UI.$(selector || 'img[src$=".svg"]', root || document).each(function(){
|
1284 |
|
|
|
1285 |
|
|
var img = UI.$(this),
|
1286 |
|
|
src = img.attr('src');
|
1287 |
|
|
|
1288 |
|
|
if (!cacheSvgs[src]) {
|
1289 |
|
|
|
1290 |
|
|
var d = UI.$.Deferred();
|
1291 |
|
|
|
1292 |
|
|
UI.$.get(src, {nc: Math.random()}, function(data){
|
1293 |
|
|
d.resolve(UI.$(data).find('svg'));
|
1294 |
|
|
});
|
1295 |
|
|
|
1296 |
|
|
cacheSvgs[src] = d.promise();
|
1297 |
|
|
}
|
1298 |
|
|
|
1299 |
|
|
cacheSvgs[src].then(function(svg) {
|
1300 |
|
|
|
1301 |
|
|
var $svg = UI.$(svg).clone();
|
1302 |
|
|
|
1303 |
|
|
if (img.attr('id')) $svg.attr('id', img.attr('id'));
|
1304 |
|
|
if (img.attr('class')) $svg.attr('class', img.attr('class'));
|
1305 |
|
|
if (img.attr('style')) $svg.attr('style', img.attr('style'));
|
1306 |
|
|
|
1307 |
|
|
if (img.attr('width')) {
|
1308 |
|
|
$svg.attr('width', img.attr('width'));
|
1309 |
|
|
if (!img.attr('height')) $svg.removeAttr('height');
|
1310 |
|
|
}
|
1311 |
|
|
|
1312 |
|
|
if (img.attr('height')){
|
1313 |
|
|
$svg.attr('height', img.attr('height'));
|
1314 |
|
|
if (!img.attr('width')) $svg.removeAttr('width');
|
1315 |
|
|
}
|
1316 |
|
|
|
1317 |
|
|
img.replaceWith($svg);
|
1318 |
|
|
});
|
1319 |
|
|
});
|
1320 |
|
|
};
|
1321 |
|
|
|
1322 |
|
|
// init code
|
1323 |
|
|
UI.ready(function(context) {
|
1324 |
|
|
UI.Utils.inlineSvg('[data-uk-svg]', context);
|
1325 |
|
|
});
|
1326 |
|
|
|
1327 |
|
|
})({});
|
1328 |
|
|
|
1329 |
|
|
UI.Utils.getCssVar = function(name) {
|
1330 |
|
|
|
1331 |
|
|
/* usage in css: .var-name:before { content:"xyz" } */
|
1332 |
|
|
|
1333 |
|
|
var val, doc = document.documentElement, element = doc.appendChild(document.createElement('div'));
|
1334 |
|
|
|
1335 |
|
|
element.classList.add('var-'+name);
|
1336 |
|
|
|
1337 |
|
|
try {
|
1338 |
|
|
val = JSON.parse(val = getComputedStyle(element, ':before').content.replace(/^["'](.*)["']$/, '$1'));
|
1339 |
|
|
} catch (e) {
|
1340 |
|
|
val = undefined;
|
1341 |
|
|
}
|
1342 |
|
|
|
1343 |
|
|
doc.removeChild(element);
|
1344 |
|
|
|
1345 |
|
|
return val;
|
1346 |
|
|
}
|
1347 |
|
|
|
1348 |
|
|
})(UIkit2);
|
1349 |
|
|
|
1350 |
|
|
(function(UI) {
|
1351 |
|
|
|
1352 |
|
|
"use strict";
|
1353 |
|
|
|
1354 |
|
|
UI.component('smoothScroll', {
|
1355 |
|
|
|
1356 |
|
|
boot: function() {
|
1357 |
|
|
|
1358 |
|
|
// init code
|
1359 |
|
|
UI.$html.on('click.smooth-scroll.uikit', '[data-uk-smooth-scroll]', function(e) {
|
1360 |
|
|
var ele = UI.$(this);
|
1361 |
|
|
|
1362 |
|
|
if (!ele.data('smoothScroll')) {
|
1363 |
|
|
var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr('data-uk-smooth-scroll')));
|
1364 |
|
|
ele.trigger('click');
|
1365 |
|
|
}
|
1366 |
|
|
|
1367 |
|
|
return false;
|
1368 |
|
|
});
|
1369 |
|
|
},
|
1370 |
|
|
|
1371 |
|
|
init: function() {
|
1372 |
|
|
|
1373 |
|
|
var $this = this;
|
1374 |
|
|
|
1375 |
|
|
this.on('click', function(e) {
|
1376 |
|
|
e.preventDefault();
|
1377 |
|
|
scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$('body'), $this.options);
|
1378 |
|
|
});
|
1379 |
|
|
}
|
1380 |
|
|
});
|
1381 |
|
|
|
1382 |
|
|
function scrollToElement(ele, options) {
|
1383 |
|
|
|
1384 |
|
|
options = UI.$.extend({
|
1385 |
|
|
duration: 1000,
|
1386 |
|
|
transition: 'easeOutExpo',
|
1387 |
|
|
offset: 0,
|
1388 |
|
|
complete: function(){}
|
1389 |
|
|
}, options);
|
1390 |
|
|
|
1391 |
|
|
// get / set parameters
|
1392 |
|
|
var target = ele.offset().top - options.offset,
|
1393 |
|
|
docheight = UI.$doc.height(),
|
1394 |
|
|
winheight = window.innerHeight;
|
1395 |
|
|
|
1396 |
|
|
if ((target + winheight) > docheight) {
|
1397 |
|
|
target = docheight - winheight;
|
1398 |
|
|
}
|
1399 |
|
|
|
1400 |
|
|
// animate to target, fire callback when done
|
1401 |
|
|
UI.$('html,body').stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete);
|
1402 |
|
|
}
|
1403 |
|
|
|
1404 |
|
|
UI.Utils.scrollToElement = scrollToElement;
|
1405 |
|
|
|
1406 |
|
|
if (!UI.$.easing.easeOutExpo) {
|
1407 |
|
|
UI.$.easing.easeOutExpo = function(x, t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; };
|
1408 |
|
|
}
|
1409 |
|
|
|
1410 |
|
|
})(UIkit2);
|
1411 |
|
|
|
1412 |
|
|
(function(UI) {
|
1413 |
|
|
|
1414 |
|
|
"use strict";
|
1415 |
|
|
|
1416 |
|
|
var $win = UI.$win,
|
1417 |
|
|
$doc = UI.$doc,
|
1418 |
|
|
scrollspies = [],
|
1419 |
|
|
checkScrollSpy = function() {
|
1420 |
|
|
for(var i=0; i < scrollspies.length; i++) {
|
1421 |
|
|
window.requestAnimationFrame.apply(window, [scrollspies[i].check]);
|
1422 |
|
|
}
|
1423 |
|
|
};
|
1424 |
|
|
|
1425 |
|
|
UI.component('scrollspy', {
|
1426 |
|
|
|
1427 |
|
|
defaults: {
|
1428 |
|
|
target : false,
|
1429 |
|
|
cls : 'uk-scrollspy-inview',
|
1430 |
|
|
initcls : 'uk-scrollspy-init-inview',
|
1431 |
|
|
topoffset : 0,
|
1432 |
|
|
leftoffset : 0,
|
1433 |
|
|
repeat : false,
|
1434 |
|
|
delay : 0
|
1435 |
|
|
},
|
1436 |
|
|
|
1437 |
|
|
boot: function() {
|
1438 |
|
|
|
1439 |
|
|
// listen to scroll and resize
|
1440 |
|
|
$doc.on('scrolling.uk.document', checkScrollSpy);
|
1441 |
|
|
$win.on('load resize orientationchange', UI.Utils.debounce(checkScrollSpy, 50));
|
1442 |
|
|
|
1443 |
|
|
// init code
|
1444 |
|
|
UI.ready(function(context) {
|
1445 |
|
|
|
1446 |
|
|
UI.$('[data-uk-scrollspy]', context).each(function() {
|
1447 |
|
|
|
1448 |
|
|
var element = UI.$(this);
|
1449 |
|
|
|
1450 |
|
|
if (!element.data('scrollspy')) {
|
1451 |
|
|
var obj = UI.scrollspy(element, UI.Utils.options(element.attr('data-uk-scrollspy')));
|
1452 |
|
|
}
|
1453 |
|
|
});
|
1454 |
|
|
});
|
1455 |
|
|
},
|
1456 |
|
|
|
1457 |
|
|
init: function() {
|
1458 |
|
|
|
1459 |
|
|
var $this = this, inviewstate, initinview, togglecls = this.options.cls.split(/,/), fn = function(){
|
1460 |
|
|
|
1461 |
|
|
var elements = $this.options.target ? $this.element.find($this.options.target) : $this.element,
|
1462 |
|
|
delayIdx = elements.length === 1 ? 1 : 0,
|
1463 |
|
|
toggleclsIdx = 0;
|
1464 |
|
|
|
1465 |
|
|
elements.each(function(idx){
|
1466 |
|
|
|
1467 |
|
|
var element = UI.$(this),
|
1468 |
|
|
inviewstate = element.data('inviewstate'),
|
1469 |
|
|
inview = UI.Utils.isInView(element, $this.options),
|
1470 |
|
|
toggle = element.attr('data-uk-scrollspy-cls') || togglecls[toggleclsIdx].trim();
|
1471 |
|
|
|
1472 |
|
|
if (inview && !inviewstate && !element.data('scrollspy-idle')) {
|
1473 |
|
|
|
1474 |
|
|
if (!initinview) {
|
1475 |
|
|
element.addClass($this.options.initcls);
|
1476 |
|
|
$this.offset = element.offset();
|
1477 |
|
|
initinview = true;
|
1478 |
|
|
|
1479 |
|
|
element.trigger('init.uk.scrollspy');
|
1480 |
|
|
}
|
1481 |
|
|
|
1482 |
|
|
element.data('scrollspy-idle', setTimeout(function(){
|
1483 |
|
|
|
1484 |
|
|
element.addClass('uk-scrollspy-inview').toggleClass(toggle).width();
|
1485 |
|
|
element.trigger('inview.uk.scrollspy');
|
1486 |
|
|
|
1487 |
|
|
element.data('scrollspy-idle', false);
|
1488 |
|
|
element.data('inviewstate', true);
|
1489 |
|
|
|
1490 |
|
|
}, $this.options.delay * delayIdx));
|
1491 |
|
|
|
1492 |
|
|
delayIdx++;
|
1493 |
|
|
}
|
1494 |
|
|
|
1495 |
|
|
if (!inview && inviewstate && $this.options.repeat) {
|
1496 |
|
|
|
1497 |
|
|
if (element.data('scrollspy-idle')) {
|
1498 |
|
|
clearTimeout(element.data('scrollspy-idle'));
|
1499 |
|
|
element.data('scrollspy-idle', false);
|
1500 |
|
|
}
|
1501 |
|
|
|
1502 |
|
|
element.removeClass('uk-scrollspy-inview').toggleClass(toggle);
|
1503 |
|
|
element.data('inviewstate', false);
|
1504 |
|
|
|
1505 |
|
|
element.trigger('outview.uk.scrollspy');
|
1506 |
|
|
}
|
1507 |
|
|
|
1508 |
|
|
toggleclsIdx = togglecls[toggleclsIdx + 1] ? (toggleclsIdx + 1) : 0;
|
1509 |
|
|
|
1510 |
|
|
});
|
1511 |
|
|
};
|
1512 |
|
|
|
1513 |
|
|
fn();
|
1514 |
|
|
|
1515 |
|
|
this.check = fn;
|
1516 |
|
|
|
1517 |
|
|
scrollspies.push(this);
|
1518 |
|
|
}
|
1519 |
|
|
});
|
1520 |
|
|
|
1521 |
|
|
|
1522 |
|
|
var scrollspynavs = [],
|
1523 |
|
|
checkScrollSpyNavs = function() {
|
1524 |
|
|
for(var i=0; i < scrollspynavs.length; i++) {
|
1525 |
|
|
window.requestAnimationFrame.apply(window, [scrollspynavs[i].check]);
|
1526 |
|
|
}
|
1527 |
|
|
};
|
1528 |
|
|
|
1529 |
|
|
UI.component('scrollspynav', {
|
1530 |
|
|
|
1531 |
|
|
defaults: {
|
1532 |
|
|
cls : 'uk-active',
|
1533 |
|
|
closest : false,
|
1534 |
|
|
topoffset : 0,
|
1535 |
|
|
leftoffset : 0,
|
1536 |
|
|
smoothscroll : false
|
1537 |
|
|
},
|
1538 |
|
|
|
1539 |
|
|
boot: function() {
|
1540 |
|
|
|
1541 |
|
|
// listen to scroll and resize
|
1542 |
|
|
$doc.on('scrolling.uk.document', checkScrollSpyNavs);
|
1543 |
|
|
$win.on('resize orientationchange', UI.Utils.debounce(checkScrollSpyNavs, 50));
|
1544 |
|
|
|
1545 |
|
|
// init code
|
1546 |
|
|
UI.ready(function(context) {
|
1547 |
|
|
|
1548 |
|
|
UI.$('[data-uk-scrollspy-nav]', context).each(function() {
|
1549 |
|
|
|
1550 |
|
|
var element = UI.$(this);
|
1551 |
|
|
|
1552 |
|
|
if (!element.data('scrollspynav')) {
|
1553 |
|
|
var obj = UI.scrollspynav(element, UI.Utils.options(element.attr('data-uk-scrollspy-nav')));
|
1554 |
|
|
}
|
1555 |
|
|
});
|
1556 |
|
|
});
|
1557 |
|
|
},
|
1558 |
|
|
|
1559 |
|
|
init: function() {
|
1560 |
|
|
|
1561 |
|
|
var ids = [],
|
1562 |
|
|
links = this.find("a[href^='#']").each(function(){ if(this.getAttribute('href').trim()!=='#') ids.push(this.getAttribute('href')); }),
|
1563 |
|
|
targets = UI.$(ids.join(",")),
|
1564 |
|
|
|
1565 |
|
|
clsActive = this.options.cls,
|
1566 |
|
|
clsClosest = this.options.closest || this.options.closest;
|
1567 |
|
|
|
1568 |
|
|
var $this = this, inviews, fn = function(){
|
1569 |
|
|
|
1570 |
|
|
inviews = [];
|
1571 |
|
|
|
1572 |
|
|
for (var i=0 ; i < targets.length ; i++) {
|
1573 |
|
|
if (UI.Utils.isInView(targets.eq(i), $this.options)) {
|
1574 |
|
|
inviews.push(targets.eq(i));
|
1575 |
|
|
}
|
1576 |
|
|
}
|
1577 |
|
|
|
1578 |
|
|
if (inviews.length) {
|
1579 |
|
|
|
1580 |
|
|
var navitems,
|
1581 |
|
|
scrollTop = $win.scrollTop(),
|
1582 |
|
|
target = (function(){
|
1583 |
|
|
for(var i=0; i< inviews.length;i++){
|
1584 |
|
|
if (inviews[i].offset().top - $this.options.topoffset >= scrollTop){
|
1585 |
|
|
return inviews[i];
|
1586 |
|
|
}
|
1587 |
|
|
}
|
1588 |
|
|
})();
|
1589 |
|
|
|
1590 |
|
|
if (!target) return;
|
1591 |
|
|
|
1592 |
|
|
if ($this.options.closest) {
|
1593 |
|
|
links.blur().closest(clsClosest).removeClass(clsActive);
|
1594 |
|
|
navitems = links.filter("a[href='#"+target.attr('id')+"']").closest(clsClosest).addClass(clsActive);
|
1595 |
|
|
} else {
|
1596 |
|
|
navitems = links.removeClass(clsActive).filter("a[href='#"+target.attr("id")+"']").addClass(clsActive);
|
1597 |
|
|
}
|
1598 |
|
|
|
1599 |
|
|
$this.element.trigger('inview.uk.scrollspynav', [target, navitems]);
|
1600 |
|
|
}
|
1601 |
|
|
};
|
1602 |
|
|
|
1603 |
|
|
if (this.options.smoothscroll && UI.smoothScroll) {
|
1604 |
|
|
links.each(function(){
|
1605 |
|
|
UI.smoothScroll(this, $this.options.smoothscroll);
|
1606 |
|
|
});
|
1607 |
|
|
}
|
1608 |
|
|
|
1609 |
|
|
fn();
|
1610 |
|
|
|
1611 |
|
|
this.element.data('scrollspynav', this);
|
1612 |
|
|
|
1613 |
|
|
this.check = fn;
|
1614 |
|
|
scrollspynavs.push(this);
|
1615 |
|
|
|
1616 |
|
|
}
|
1617 |
|
|
});
|
1618 |
|
|
|
1619 |
|
|
})(UIkit2);
|
1620 |
|
|
|
1621 |
|
|
(function(UI){
|
1622 |
|
|
|
1623 |
|
|
"use strict";
|
1624 |
|
|
|
1625 |
|
|
var toggles = [];
|
1626 |
|
|
|
1627 |
|
|
UI.component('toggle', {
|
1628 |
|
|
|
1629 |
|
|
defaults: {
|
1630 |
|
|
target : false,
|
1631 |
|
|
cls : 'uk-hidden',
|
1632 |
|
|
animation : false,
|
1633 |
|
|
duration : 200
|
1634 |
|
|
},
|
1635 |
|
|
|
1636 |
|
|
boot: function(){
|
1637 |
|
|
|
1638 |
|
|
// init code
|
1639 |
|
|
UI.ready(function(context) {
|
1640 |
|
|
|
1641 |
|
|
UI.$('[data-uk-toggle]', context).each(function() {
|
1642 |
|
|
var ele = UI.$(this);
|
1643 |
|
|
|
1644 |
|
|
if (!ele.data('toggle')) {
|
1645 |
|
|
var obj = UI.toggle(ele, UI.Utils.options(ele.attr('data-uk-toggle')));
|
1646 |
|
|
}
|
1647 |
|
|
});
|
1648 |
|
|
|
1649 |
|
|
setTimeout(function(){
|
1650 |
|
|
|
1651 |
|
|
toggles.forEach(function(toggle){
|
1652 |
|
|
toggle.getToggles();
|
1653 |
|
|
});
|
1654 |
|
|
|
1655 |
|
|
}, 0);
|
1656 |
|
|
});
|
1657 |
|
|
},
|
1658 |
|
|
|
1659 |
|
|
init: function() {
|
1660 |
|
|
|
1661 |
|
|
var $this = this;
|
1662 |
|
|
|
1663 |
|
|
this.aria = (this.options.cls.indexOf('uk-hidden') !== -1);
|
1664 |
|
|
|
1665 |
|
|
this.on('click', function(e) {
|
1666 |
|
|
|
1667 |
|
|
if ($this.element.is('a[href="#"]')) {
|
1668 |
|
|
e.preventDefault();
|
1669 |
|
|
}
|
1670 |
|
|
|
1671 |
|
|
$this.toggle();
|
1672 |
|
|
});
|
1673 |
|
|
|
1674 |
|
|
toggles.push(this);
|
1675 |
|
|
},
|
1676 |
|
|
|
1677 |
|
|
toggle: function() {
|
1678 |
|
|
|
1679 |
|
|
this.getToggles();
|
1680 |
|
|
|
1681 |
|
|
if(!this.totoggle.length) return;
|
1682 |
|
|
|
1683 |
|
|
if (this.options.animation && UI.support.animation) {
|
1684 |
|
|
|
1685 |
|
|
var $this = this, animations = this.options.animation.split(',');
|
1686 |
|
|
|
1687 |
|
|
if (animations.length == 1) {
|
1688 |
|
|
animations[1] = animations[0];
|
1689 |
|
|
}
|
1690 |
|
|
|
1691 |
|
|
animations[0] = animations[0].trim();
|
1692 |
|
|
animations[1] = animations[1].trim();
|
1693 |
|
|
|
1694 |
|
|
this.totoggle.css('animation-duration', this.options.duration+'ms');
|
1695 |
|
|
|
1696 |
|
|
this.totoggle.each(function(){
|
1697 |
|
|
|
1698 |
|
|
var ele = UI.$(this);
|
1699 |
|
|
|
1700 |
|
|
if (ele.hasClass($this.options.cls)) {
|
1701 |
|
|
|
1702 |
|
|
ele.toggleClass($this.options.cls);
|
1703 |
|
|
|
1704 |
|
|
UI.Utils.animate(ele, animations[0]).then(function(){
|
1705 |
|
|
ele.css('animation-duration', '');
|
1706 |
|
|
UI.Utils.checkDisplay(ele);
|
1707 |
|
|
});
|
1708 |
|
|
|
1709 |
|
|
} else {
|
1710 |
|
|
|
1711 |
|
|
UI.Utils.animate(this, animations[1]+' uk-animation-reverse').then(function(){
|
1712 |
|
|
ele.toggleClass($this.options.cls).css('animation-duration', '');
|
1713 |
|
|
UI.Utils.checkDisplay(ele);
|
1714 |
|
|
});
|
1715 |
|
|
|
1716 |
|
|
}
|
1717 |
|
|
|
1718 |
|
|
});
|
1719 |
|
|
|
1720 |
|
|
} else {
|
1721 |
|
|
this.totoggle.toggleClass(this.options.cls);
|
1722 |
|
|
UI.Utils.checkDisplay(this.totoggle);
|
1723 |
|
|
}
|
1724 |
|
|
|
1725 |
|
|
this.updateAria();
|
1726 |
|
|
|
1727 |
|
|
},
|
1728 |
|
|
|
1729 |
|
|
getToggles: function() {
|
1730 |
|
|
this.totoggle = this.options.target ? UI.$(this.options.target):[];
|
1731 |
|
|
this.updateAria();
|
1732 |
|
|
},
|
1733 |
|
|
|
1734 |
|
|
updateAria: function() {
|
1735 |
|
|
if (this.aria && this.totoggle.length) {
|
1736 |
|
|
this.totoggle.not('[aria-hidden]').each(function(){
|
1737 |
|
|
UI.$(this).attr('aria-hidden', UI.$(this).hasClass('uk-hidden'));
|
1738 |
|
|
});
|
1739 |
|
|
}
|
1740 |
|
|
}
|
1741 |
|
|
});
|
1742 |
|
|
|
1743 |
|
|
})(UIkit2);
|
1744 |
|
|
|
1745 |
|
|
(function(UI) {
|
1746 |
|
|
|
1747 |
|
|
"use strict";
|
1748 |
|
|
|
1749 |
|
|
UI.component('alert', {
|
1750 |
|
|
|
1751 |
|
|
defaults: {
|
1752 |
|
|
fade: true,
|
1753 |
|
|
duration: 200,
|
1754 |
|
|
trigger: '.uk-alert-close'
|
1755 |
|
|
},
|
1756 |
|
|
|
1757 |
|
|
boot: function() {
|
1758 |
|
|
|
1759 |
|
|
// init code
|
1760 |
|
|
UI.$html.on('click.alert.uikit', '[data-uk-alert]', function(e) {
|
1761 |
|
|
|
1762 |
|
|
var ele = UI.$(this);
|
1763 |
|
|
|
1764 |
|
|
if (!ele.data('alert')) {
|
1765 |
|
|
|
1766 |
|
|
var alert = UI.alert(ele, UI.Utils.options(ele.attr('data-uk-alert')));
|
1767 |
|
|
|
1768 |
|
|
if (UI.$(e.target).is(alert.options.trigger)) {
|
1769 |
|
|
e.preventDefault();
|
1770 |
|
|
alert.close();
|
1771 |
|
|
}
|
1772 |
|
|
}
|
1773 |
|
|
});
|
1774 |
|
|
},
|
1775 |
|
|
|
1776 |
|
|
init: function() {
|
1777 |
|
|
|
1778 |
|
|
var $this = this;
|
1779 |
|
|
|
1780 |
|
|
this.on('click', this.options.trigger, function(e) {
|
1781 |
|
|
e.preventDefault();
|
1782 |
|
|
$this.close();
|
1783 |
|
|
});
|
1784 |
|
|
},
|
1785 |
|
|
|
1786 |
|
|
close: function() {
|
1787 |
|
|
|
1788 |
|
|
var element = this.trigger('close.uk.alert'),
|
1789 |
|
|
removeElement = function () {
|
1790 |
|
|
this.trigger('closed.uk.alert').remove();
|
1791 |
|
|
}.bind(this);
|
1792 |
|
|
|
1793 |
|
|
if (this.options.fade) {
|
1794 |
|
|
element.css('overflow', 'hidden').css("max-height", element.height()).animate({
|
1795 |
|
|
height : 0,
|
1796 |
|
|
opacity : 0,
|
1797 |
|
|
paddingTop : 0,
|
1798 |
|
|
paddingBottom : 0,
|
1799 |
|
|
marginTop : 0,
|
1800 |
|
|
marginBottom : 0
|
1801 |
|
|
}, this.options.duration, removeElement);
|
1802 |
|
|
} else {
|
1803 |
|
|
removeElement();
|
1804 |
|
|
}
|
1805 |
|
|
}
|
1806 |
|
|
|
1807 |
|
|
});
|
1808 |
|
|
|
1809 |
|
|
})(UIkit2);
|
1810 |
|
|
|
1811 |
|
|
(function(UI) {
|
1812 |
|
|
|
1813 |
|
|
"use strict";
|
1814 |
|
|
|
1815 |
|
|
UI.component('buttonRadio', {
|
1816 |
|
|
|
1817 |
|
|
defaults: {
|
1818 |
|
|
activeClass: 'uk-active',
|
1819 |
|
|
target: '.uk-button'
|
1820 |
|
|
},
|
1821 |
|
|
|
1822 |
|
|
boot: function() {
|
1823 |
|
|
|
1824 |
|
|
// init code
|
1825 |
|
|
UI.$html.on('click.buttonradio.uikit', '[data-uk-button-radio]', function(e) {
|
1826 |
|
|
|
1827 |
|
|
var ele = UI.$(this);
|
1828 |
|
|
|
1829 |
|
|
if (!ele.data('buttonRadio')) {
|
1830 |
|
|
|
1831 |
|
|
var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr('data-uk-button-radio'))),
|
1832 |
|
|
target = UI.$(e.target);
|
1833 |
|
|
|
1834 |
|
|
if (target.is(obj.options.target)) {
|
1835 |
|
|
target.trigger('click');
|
1836 |
|
|
}
|
1837 |
|
|
}
|
1838 |
|
|
});
|
1839 |
|
|
},
|
1840 |
|
|
|
1841 |
|
|
init: function() {
|
1842 |
|
|
|
1843 |
|
|
var $this = this;
|
1844 |
|
|
|
1845 |
|
|
// Init ARIA
|
1846 |
|
|
this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
|
1847 |
|
|
|
1848 |
|
|
this.on('click', this.options.target, function(e) {
|
1849 |
|
|
|
1850 |
|
|
var ele = UI.$(this);
|
1851 |
|
|
|
1852 |
|
|
if (ele.is('a[href="#"]')) e.preventDefault();
|
1853 |
|
|
|
1854 |
|
|
$this.find($this.options.target).not(ele).removeClass($this.options.activeClass).blur();
|
1855 |
|
|
ele.addClass($this.options.activeClass);
|
1856 |
|
|
|
1857 |
|
|
// Update ARIA
|
1858 |
|
|
$this.find($this.options.target).not(ele).attr('aria-checked', 'false');
|
1859 |
|
|
ele.attr('aria-checked', 'true');
|
1860 |
|
|
|
1861 |
|
|
$this.trigger('change.uk.button', [ele]);
|
1862 |
|
|
});
|
1863 |
|
|
|
1864 |
|
|
},
|
1865 |
|
|
|
1866 |
|
|
getSelected: function() {
|
1867 |
|
|
return this.find('.' + this.options.activeClass);
|
1868 |
|
|
}
|
1869 |
|
|
});
|
1870 |
|
|
|
1871 |
|
|
UI.component('buttonCheckbox', {
|
1872 |
|
|
|
1873 |
|
|
defaults: {
|
1874 |
|
|
activeClass: 'uk-active',
|
1875 |
|
|
target: '.uk-button'
|
1876 |
|
|
},
|
1877 |
|
|
|
1878 |
|
|
boot: function() {
|
1879 |
|
|
|
1880 |
|
|
UI.$html.on('click.buttoncheckbox.uikit', '[data-uk-button-checkbox]', function(e) {
|
1881 |
|
|
var ele = UI.$(this);
|
1882 |
|
|
|
1883 |
|
|
if (!ele.data('buttonCheckbox')) {
|
1884 |
|
|
|
1885 |
|
|
var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr('data-uk-button-checkbox'))),
|
1886 |
|
|
target = UI.$(e.target);
|
1887 |
|
|
|
1888 |
|
|
if (target.is(obj.options.target)) {
|
1889 |
|
|
target.trigger('click');
|
1890 |
|
|
}
|
1891 |
|
|
}
|
1892 |
|
|
});
|
1893 |
|
|
},
|
1894 |
|
|
|
1895 |
|
|
init: function() {
|
1896 |
|
|
|
1897 |
|
|
var $this = this;
|
1898 |
|
|
|
1899 |
|
|
// Init ARIA
|
1900 |
|
|
this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
|
1901 |
|
|
|
1902 |
|
|
this.on('click', this.options.target, function(e) {
|
1903 |
|
|
var ele = UI.$(this);
|
1904 |
|
|
|
1905 |
|
|
if (ele.is('a[href="#"]')) e.preventDefault();
|
1906 |
|
|
|
1907 |
|
|
ele.toggleClass($this.options.activeClass).blur();
|
1908 |
|
|
|
1909 |
|
|
// Update ARIA
|
1910 |
|
|
ele.attr('aria-checked', ele.hasClass($this.options.activeClass));
|
1911 |
|
|
|
1912 |
|
|
$this.trigger('change.uk.button', [ele]);
|
1913 |
|
|
});
|
1914 |
|
|
|
1915 |
|
|
},
|
1916 |
|
|
|
1917 |
|
|
getSelected: function() {
|
1918 |
|
|
return this.find('.' + this.options.activeClass);
|
1919 |
|
|
}
|
1920 |
|
|
});
|
1921 |
|
|
|
1922 |
|
|
|
1923 |
|
|
UI.component('button', {
|
1924 |
|
|
|
1925 |
|
|
defaults: {},
|
1926 |
|
|
|
1927 |
|
|
boot: function() {
|
1928 |
|
|
|
1929 |
|
|
UI.$html.on('click.button.uikit', '[data-uk-button]', function(e) {
|
1930 |
|
|
var ele = UI.$(this);
|
1931 |
|
|
|
1932 |
|
|
if (!ele.data('button')) {
|
1933 |
|
|
|
1934 |
|
|
var obj = UI.button(ele, UI.Utils.options(ele.attr('data-uk-button')));
|
1935 |
|
|
ele.trigger('click');
|
1936 |
|
|
}
|
1937 |
|
|
});
|
1938 |
|
|
},
|
1939 |
|
|
|
1940 |
|
|
init: function() {
|
1941 |
|
|
|
1942 |
|
|
var $this = this;
|
1943 |
|
|
|
1944 |
|
|
// Init ARIA
|
1945 |
|
|
this.element.attr('aria-pressed', this.element.hasClass("uk-active"));
|
1946 |
|
|
|
1947 |
|
|
this.on('click', function(e) {
|
1948 |
|
|
|
1949 |
|
|
if ($this.element.is('a[href="#"]')) e.preventDefault();
|
1950 |
|
|
|
1951 |
|
|
$this.toggle();
|
1952 |
|
|
$this.trigger('change.uk.button', [$this.element.blur().hasClass('uk-active')]);
|
1953 |
|
|
});
|
1954 |
|
|
|
1955 |
|
|
},
|
1956 |
|
|
|
1957 |
|
|
toggle: function() {
|
1958 |
|
|
this.element.toggleClass('uk-active');
|
1959 |
|
|
|
1960 |
|
|
// Update ARIA
|
1961 |
|
|
this.element.attr('aria-pressed', this.element.hasClass('uk-active'));
|
1962 |
|
|
}
|
1963 |
|
|
});
|
1964 |
|
|
|
1965 |
|
|
})(UIkit2);
|
1966 |
|
|
|
1967 |
|
|
(function(UI) {
|
1968 |
|
|
|
1969 |
|
|
"use strict";
|
1970 |
|
|
|
1971 |
|
|
var active = false, hoverIdle, flips = {
|
1972 |
|
|
x: {
|
1973 |
|
|
'bottom-left' : 'bottom-right',
|
1974 |
|
|
'bottom-right' : 'bottom-left',
|
1975 |
|
|
'bottom-center' : 'bottom-center',
|
1976 |
|
|
'top-left' : 'top-right',
|
1977 |
|
|
'top-right' : 'top-left',
|
1978 |
|
|
'top-center' : 'top-center',
|
1979 |
|
|
'left-top' : 'right-top',
|
1980 |
|
|
'left-bottom' : 'right-bottom',
|
1981 |
|
|
'left-center' : 'right-center',
|
1982 |
|
|
'right-top' : 'left-top',
|
1983 |
|
|
'right-bottom' : 'left-bottom',
|
1984 |
|
|
'right-center' : 'left-center'
|
1985 |
|
|
},
|
1986 |
|
|
y: {
|
1987 |
|
|
'bottom-left' : 'top-left',
|
1988 |
|
|
'bottom-right' : 'top-right',
|
1989 |
|
|
'bottom-center' : 'top-center',
|
1990 |
|
|
'top-left' : 'bottom-left',
|
1991 |
|
|
'top-right' : 'bottom-right',
|
1992 |
|
|
'top-center' : 'bottom-center',
|
1993 |
|
|
'left-top' : 'left-bottom',
|
1994 |
|
|
'left-bottom' : 'left-top',
|
1995 |
|
|
'left-center' : 'left-center',
|
1996 |
|
|
'right-top' : 'right-bottom',
|
1997 |
|
|
'right-bottom' : 'right-top',
|
1998 |
|
|
'right-center' : 'right-center'
|
1999 |
|
|
},
|
2000 |
|
|
xy: {
|
2001 |
|
|
'bottom-left' : 'top-right',
|
2002 |
|
|
'bottom-right' : 'top-left',
|
2003 |
|
|
'bottom-center' : 'top-center',
|
2004 |
|
|
'top-left' : 'bottom-right',
|
2005 |
|
|
'top-right' : 'bottom-left',
|
2006 |
|
|
'top-center' : 'bottom-center',
|
2007 |
|
|
'left-top' : 'right-bottom',
|
2008 |
|
|
'left-bottom' : 'right-top',
|
2009 |
|
|
'left-center' : 'right-center',
|
2010 |
|
|
'right-top' : 'left-bottom',
|
2011 |
|
|
'right-bottom' : 'left-top',
|
2012 |
|
|
'right-center' : 'left-center'
|
2013 |
|
|
}
|
2014 |
|
|
};
|
2015 |
|
|
|
2016 |
|
|
UI.component('dropdown', {
|
2017 |
|
|
|
2018 |
|
|
defaults: {
|
2019 |
|
|
mode : 'hover',
|
2020 |
|
|
pos : 'bottom-left',
|
2021 |
|
|
offset : 0,
|
2022 |
|
|
remaintime : 800,
|
2023 |
|
|
justify : false,
|
2024 |
|
|
boundary : UI.$win,
|
2025 |
|
|
delay : 0,
|
2026 |
|
|
dropdownSelector: '.uk-dropdown,.uk-dropdown-blank',
|
2027 |
|
|
hoverDelayIdle : 250,
|
2028 |
|
|
preventflip : false
|
2029 |
|
|
},
|
2030 |
|
|
|
2031 |
|
|
remainIdle: false,
|
2032 |
|
|
|
2033 |
|
|
boot: function() {
|
2034 |
|
|
|
2035 |
|
|
var triggerevent = UI.support.touch ? 'click' : 'mouseenter';
|
2036 |
|
|
|
2037 |
|
|
// init code
|
2038 |
|
|
UI.$html.on(triggerevent+'.dropdown.uikit focus pointerdown', '[data-uk-dropdown]', function(e) {
|
2039 |
|
|
|
2040 |
|
|
var ele = UI.$(this);
|
2041 |
|
|
|
2042 |
|
|
if (!ele.data('dropdown')) {
|
2043 |
|
|
|
2044 |
|
|
var dropdown = UI.dropdown(ele, UI.Utils.options(ele.attr('data-uk-dropdown')));
|
2045 |
|
|
|
2046 |
|
|
if (e.type=='click' || (e.type=='mouseenter' && dropdown.options.mode=='hover')) {
|
2047 |
|
|
dropdown.element.trigger(triggerevent);
|
2048 |
|
|
}
|
2049 |
|
|
|
2050 |
|
|
if (dropdown.dropdown.length) {
|
2051 |
|
|
e.preventDefault();
|
2052 |
|
|
}
|
2053 |
|
|
}
|
2054 |
|
|
});
|
2055 |
|
|
},
|
2056 |
|
|
|
2057 |
|
|
init: function() {
|
2058 |
|
|
|
2059 |
|
|
var $this = this;
|
2060 |
|
|
|
2061 |
|
|
this.dropdown = this.find(this.options.dropdownSelector);
|
2062 |
|
|
this.offsetParent = this.dropdown.parents().filter(function() {
|
2063 |
|
|
return UI.$.inArray(UI.$(this).css('position'), ['relative', 'fixed', 'absolute']) !== -1;
|
2064 |
|
|
}).slice(0,1);
|
2065 |
|
|
|
2066 |
|
|
if (!this.offsetParent.length) {
|
2067 |
|
|
this.offsetParent = this.element;
|
2068 |
|
|
}
|
2069 |
|
|
|
2070 |
|
|
this.centered = this.dropdown.hasClass('uk-dropdown-center');
|
2071 |
|
|
this.justified = this.options.justify ? UI.$(this.options.justify) : false;
|
2072 |
|
|
|
2073 |
|
|
this.boundary = UI.$(this.options.boundary);
|
2074 |
|
|
|
2075 |
|
|
if (!this.boundary.length) {
|
2076 |
|
|
this.boundary = UI.$win;
|
2077 |
|
|
}
|
2078 |
|
|
|
2079 |
|
|
// legacy DEPRECATED!
|
2080 |
|
|
if (this.dropdown.hasClass('uk-dropdown-up')) {
|
2081 |
|
|
this.options.pos = 'top-left';
|
2082 |
|
|
}
|
2083 |
|
|
if (this.dropdown.hasClass('uk-dropdown-flip')) {
|
2084 |
|
|
this.options.pos = this.options.pos.replace('left','right');
|
2085 |
|
|
}
|
2086 |
|
|
if (this.dropdown.hasClass('uk-dropdown-center')) {
|
2087 |
|
|
this.options.pos = this.options.pos.replace(/(left|right)/,'center');
|
2088 |
|
|
}
|
2089 |
|
|
//-- end legacy
|
2090 |
|
|
|
2091 |
|
|
// Init ARIA
|
2092 |
|
|
this.element.attr('aria-haspopup', 'true');
|
2093 |
|
|
this.element.attr('aria-expanded', this.element.hasClass('uk-open'));
|
2094 |
|
|
this.dropdown.attr('aria-hidden', 'true');
|
2095 |
|
|
|
2096 |
|
|
if (this.options.mode == 'click' || UI.support.touch) {
|
2097 |
|
|
|
2098 |
|
|
this.on('click.uk.dropdown', function(e) {
|
2099 |
|
|
|
2100 |
|
|
var $target = UI.$(e.target);
|
2101 |
|
|
|
2102 |
|
|
if (!$target.parents($this.options.dropdownSelector).length) {
|
2103 |
|
|
|
2104 |
|
|
if ($target.is("a[href='#']") || $target.parent().is("a[href='#']") || ($this.dropdown.length && !$this.dropdown.is(':visible')) ){
|
2105 |
|
|
e.preventDefault();
|
2106 |
|
|
}
|
2107 |
|
|
|
2108 |
|
|
$target.blur();
|
2109 |
|
|
}
|
2110 |
|
|
|
2111 |
|
|
if (!$this.element.hasClass('uk-open')) {
|
2112 |
|
|
|
2113 |
|
|
$this.show();
|
2114 |
|
|
|
2115 |
|
|
} else {
|
2116 |
|
|
|
2117 |
|
|
if (!$this.dropdown.find(e.target).length || $target.is('.uk-dropdown-close') || $target.parents('.uk-dropdown-close').length) {
|
2118 |
|
|
$this.hide();
|
2119 |
|
|
}
|
2120 |
|
|
}
|
2121 |
|
|
});
|
2122 |
|
|
|
2123 |
|
|
} else {
|
2124 |
|
|
|
2125 |
|
|
this.on('mouseenter', function(e) {
|
2126 |
|
|
|
2127 |
|
|
$this.trigger('pointerenter.uk.dropdown', [$this]);
|
2128 |
|
|
|
2129 |
|
|
if ($this.remainIdle) {
|
2130 |
|
|
clearTimeout($this.remainIdle);
|
2131 |
|
|
}
|
2132 |
|
|
|
2133 |
|
|
if (hoverIdle) {
|
2134 |
|
|
clearTimeout(hoverIdle);
|
2135 |
|
|
}
|
2136 |
|
|
|
2137 |
|
|
if (active && active == $this) {
|
2138 |
|
|
return;
|
2139 |
|
|
}
|
2140 |
|
|
|
2141 |
|
|
// pseudo manuAim
|
2142 |
|
|
if (active && active != $this) {
|
2143 |
|
|
|
2144 |
|
|
hoverIdle = setTimeout(function() {
|
2145 |
|
|
hoverIdle = setTimeout($this.show.bind($this), $this.options.delay);
|
2146 |
|
|
}, $this.options.hoverDelayIdle);
|
2147 |
|
|
|
2148 |
|
|
} else {
|
2149 |
|
|
|
2150 |
|
|
hoverIdle = setTimeout($this.show.bind($this), $this.options.delay);
|
2151 |
|
|
}
|
2152 |
|
|
|
2153 |
|
|
}).on('mouseleave', function() {
|
2154 |
|
|
|
2155 |
|
|
if (hoverIdle) {
|
2156 |
|
|
clearTimeout(hoverIdle);
|
2157 |
|
|
}
|
2158 |
|
|
|
2159 |
|
|
$this.remainIdle = setTimeout(function() {
|
2160 |
|
|
if (active && active == $this) $this.hide();
|
2161 |
|
|
}, $this.options.remaintime);
|
2162 |
|
|
|
2163 |
|
|
$this.trigger('pointerleave.uk.dropdown', [$this]);
|
2164 |
|
|
|
2165 |
|
|
}).on('click', function(e){
|
2166 |
|
|
|
2167 |
|
|
var $target = UI.$(e.target);
|
2168 |
|
|
|
2169 |
|
|
if ($this.remainIdle) {
|
2170 |
|
|
clearTimeout($this.remainIdle);
|
2171 |
|
|
}
|
2172 |
|
|
|
2173 |
|
|
if (active && active == $this) {
|
2174 |
|
|
if (!$this.dropdown.find(e.target).length || $target.is('.uk-dropdown-close') || $target.parents('.uk-dropdown-close').length) {
|
2175 |
|
|
$this.hide();
|
2176 |
|
|
}
|
2177 |
|
|
return;
|
2178 |
|
|
}
|
2179 |
|
|
|
2180 |
|
|
if ($target.is("a[href='#']") || $target.parent().is("a[href='#']")){
|
2181 |
|
|
e.preventDefault();
|
2182 |
|
|
}
|
2183 |
|
|
|
2184 |
|
|
$this.show();
|
2185 |
|
|
});
|
2186 |
|
|
}
|
2187 |
|
|
},
|
2188 |
|
|
|
2189 |
|
|
show: function(){
|
2190 |
|
|
|
2191 |
|
|
UI.$html.off('click.outer.dropdown');
|
2192 |
|
|
|
2193 |
|
|
if (active && active != this) {
|
2194 |
|
|
active.hide(true);
|
2195 |
|
|
}
|
2196 |
|
|
|
2197 |
|
|
if (hoverIdle) {
|
2198 |
|
|
clearTimeout(hoverIdle);
|
2199 |
|
|
}
|
2200 |
|
|
|
2201 |
|
|
this.trigger('beforeshow.uk.dropdown', [this]);
|
2202 |
|
|
|
2203 |
|
|
this.checkDimensions();
|
2204 |
|
|
this.element.addClass('uk-open');
|
2205 |
|
|
|
2206 |
|
|
// Update ARIA
|
2207 |
|
|
this.element.attr('aria-expanded', 'true');
|
2208 |
|
|
this.dropdown.attr('aria-hidden', 'false');
|
2209 |
|
|
|
2210 |
|
|
this.trigger('show.uk.dropdown', [this]);
|
2211 |
|
|
|
2212 |
|
|
UI.Utils.checkDisplay(this.dropdown, true);
|
2213 |
|
|
UI.Utils.focus(this.dropdown);
|
2214 |
|
|
active = this;
|
2215 |
|
|
|
2216 |
|
|
this.registerOuterClick();
|
2217 |
|
|
},
|
2218 |
|
|
|
2219 |
|
|
hide: function(force) {
|
2220 |
|
|
|
2221 |
|
|
this.trigger('beforehide.uk.dropdown', [this, force]);
|
2222 |
|
|
|
2223 |
|
|
this.element.removeClass('uk-open');
|
2224 |
|
|
|
2225 |
|
|
if (this.remainIdle) {
|
2226 |
|
|
clearTimeout(this.remainIdle);
|
2227 |
|
|
}
|
2228 |
|
|
|
2229 |
|
|
this.remainIdle = false;
|
2230 |
|
|
|
2231 |
|
|
// Update ARIA
|
2232 |
|
|
this.element.attr('aria-expanded', 'false');
|
2233 |
|
|
this.dropdown.attr('aria-hidden', 'true');
|
2234 |
|
|
|
2235 |
|
|
this.trigger('hide.uk.dropdown', [this, force]);
|
2236 |
|
|
|
2237 |
|
|
if (active == this) active = false;
|
2238 |
|
|
},
|
2239 |
|
|
|
2240 |
|
|
registerOuterClick: function(){
|
2241 |
|
|
|
2242 |
|
|
var $this = this;
|
2243 |
|
|
|
2244 |
|
|
UI.$html.off('click.outer.dropdown');
|
2245 |
|
|
|
2246 |
|
|
setTimeout(function() {
|
2247 |
|
|
|
2248 |
|
|
UI.$html.on('click.outer.dropdown', function(e) {
|
2249 |
|
|
|
2250 |
|
|
if (hoverIdle) {
|
2251 |
|
|
clearTimeout(hoverIdle);
|
2252 |
|
|
}
|
2253 |
|
|
|
2254 |
|
|
var $target = UI.$(e.target);
|
2255 |
|
|
|
2256 |
|
|
if (active == $this && !$this.element.find(e.target).length) {
|
2257 |
|
|
$this.hide(true);
|
2258 |
|
|
UI.$html.off('click.outer.dropdown');
|
2259 |
|
|
}
|
2260 |
|
|
});
|
2261 |
|
|
}, 10);
|
2262 |
|
|
},
|
2263 |
|
|
|
2264 |
|
|
checkDimensions: function() {
|
2265 |
|
|
|
2266 |
|
|
if (!this.dropdown.length) return;
|
2267 |
|
|
|
2268 |
|
|
// reset
|
2269 |
|
|
this.dropdown.removeClass('uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack uk-dropdown-autoflip').css({
|
2270 |
|
|
topLeft :'',
|
2271 |
|
|
left :'',
|
2272 |
|
|
marginLeft :'',
|
2273 |
|
|
marginRight :''
|
2274 |
|
|
});
|
2275 |
|
|
|
2276 |
|
|
if (this.justified && this.justified.length) {
|
2277 |
|
|
this.dropdown.css('min-width', '');
|
2278 |
|
|
}
|
2279 |
|
|
|
2280 |
|
|
var $this = this,
|
2281 |
|
|
pos = UI.$.extend({}, this.offsetParent.offset(), {width: this.offsetParent[0].offsetWidth, height: this.offsetParent[0].offsetHeight}),
|
2282 |
|
|
posoffset = this.options.offset,
|
2283 |
|
|
dropdown = this.dropdown,
|
2284 |
|
|
offset = dropdown.show().offset() || {left: 0, top: 0},
|
2285 |
|
|
width = dropdown.outerWidth(),
|
2286 |
|
|
height = dropdown.outerHeight(),
|
2287 |
|
|
boundarywidth = this.boundary.width(),
|
2288 |
|
|
boundaryoffset = this.boundary[0] !== window && this.boundary.offset() ? this.boundary.offset(): {top:0, left:0},
|
2289 |
|
|
dpos = this.options.pos;
|
2290 |
|
|
|
2291 |
|
|
var variants = {
|
2292 |
|
|
'bottom-left' : {top: 0 + pos.height + posoffset, left: 0},
|
2293 |
|
|
'bottom-right' : {top: 0 + pos.height + posoffset, left: 0 + pos.width - width},
|
2294 |
|
|
'bottom-center' : {top: 0 + pos.height + posoffset, left: 0 + pos.width / 2 - width / 2},
|
2295 |
|
|
'top-left' : {top: 0 - height - posoffset, left: 0},
|
2296 |
|
|
'top-right' : {top: 0 - height - posoffset, left: 0 + pos.width - width},
|
2297 |
|
|
'top-center' : {top: 0 - height - posoffset, left: 0 + pos.width / 2 - width / 2},
|
2298 |
|
|
'left-top' : {top: 0, left: 0 - width - posoffset},
|
2299 |
|
|
'left-bottom' : {top: 0 + pos.height - height, left: 0 - width - posoffset},
|
2300 |
|
|
'left-center' : {top: 0 + pos.height / 2 - height / 2, left: 0 - width - posoffset},
|
2301 |
|
|
'right-top' : {top: 0, left: 0 + pos.width + posoffset},
|
2302 |
|
|
'right-bottom' : {top: 0 + pos.height - height, left: 0 + pos.width + posoffset},
|
2303 |
|
|
'right-center' : {top: 0 + pos.height / 2 - height / 2, left: 0 + pos.width + posoffset}
|
2304 |
|
|
},
|
2305 |
|
|
css = {},
|
2306 |
|
|
pp;
|
2307 |
|
|
|
2308 |
|
|
pp = dpos.split('-');
|
2309 |
|
|
css = variants[dpos] ? variants[dpos] : variants['bottom-left'];
|
2310 |
|
|
|
2311 |
|
|
// justify dropdown
|
2312 |
|
|
if (this.justified && this.justified.length) {
|
2313 |
|
|
justify(dropdown.css({left:0}), this.justified, boundarywidth);
|
2314 |
|
|
} else {
|
2315 |
|
|
|
2316 |
|
|
if (this.options.preventflip !== true) {
|
2317 |
|
|
|
2318 |
|
|
var fdpos;
|
2319 |
|
|
|
2320 |
|
|
switch(this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) {
|
2321 |
|
|
case "x":
|
2322 |
|
|
if(this.options.preventflip !=='x') fdpos = flips['x'][dpos] || 'right-top';
|
2323 |
|
|
break;
|
2324 |
|
|
case "y":
|
2325 |
|
|
if(this.options.preventflip !=='y') fdpos = flips['y'][dpos] || 'top-left';
|
2326 |
|
|
break;
|
2327 |
|
|
case "xy":
|
2328 |
|
|
if(!this.options.preventflip) fdpos = flips['xy'][dpos] || 'right-bottom';
|
2329 |
|
|
break;
|
2330 |
|
|
}
|
2331 |
|
|
|
2332 |
|
|
if (fdpos) {
|
2333 |
|
|
|
2334 |
|
|
pp = fdpos.split('-');
|
2335 |
|
|
css = variants[fdpos] ? variants[fdpos] : variants['bottom-left'];
|
2336 |
|
|
dropdown.addClass('uk-dropdown-autoflip');
|
2337 |
|
|
|
2338 |
|
|
// check flipped
|
2339 |
|
|
if (this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) {
|
2340 |
|
|
pp = dpos.split('-');
|
2341 |
|
|
css = variants[dpos] ? variants[dpos] : variants['bottom-left'];
|
2342 |
|
|
}
|
2343 |
|
|
}
|
2344 |
|
|
}
|
2345 |
|
|
}
|
2346 |
|
|
|
2347 |
|
|
if (width > boundarywidth) {
|
2348 |
|
|
dropdown.addClass('uk-dropdown-stack');
|
2349 |
|
|
this.trigger('stack.uk.dropdown', [this]);
|
2350 |
|
|
}
|
2351 |
|
|
|
2352 |
|
|
dropdown.css(css).css('display', '').addClass('uk-dropdown-'+pp[0]);
|
2353 |
|
|
},
|
2354 |
|
|
|
2355 |
|
|
checkBoundary: function(left, top, width, height, boundarywidth) {
|
2356 |
|
|
|
2357 |
|
|
var axis = "";
|
2358 |
|
|
|
2359 |
|
|
if (left < 0 || ((left - UI.$win.scrollLeft())+width) > boundarywidth) {
|
2360 |
|
|
axis += "x";
|
2361 |
|
|
}
|
2362 |
|
|
|
2363 |
|
|
if ((top - UI.$win.scrollTop()) < 0 || ((top - UI.$win.scrollTop())+height) > window.innerHeight) {
|
2364 |
|
|
axis += "y";
|
2365 |
|
|
}
|
2366 |
|
|
|
2367 |
|
|
return axis;
|
2368 |
|
|
}
|
2369 |
|
|
});
|
2370 |
|
|
|
2371 |
|
|
|
2372 |
|
|
UI.component('dropdownOverlay', {
|
2373 |
|
|
|
2374 |
|
|
defaults: {
|
2375 |
|
|
justify : false,
|
2376 |
|
|
cls : '',
|
2377 |
|
|
duration: 200
|
2378 |
|
|
},
|
2379 |
|
|
|
2380 |
|
|
boot: function() {
|
2381 |
|
|
|
2382 |
|
|
// init code
|
2383 |
|
|
UI.ready(function(context) {
|
2384 |
|
|
|
2385 |
|
|
UI.$('[data-uk-dropdown-overlay]', context).each(function() {
|
2386 |
|
|
var ele = UI.$(this);
|
2387 |
|
|
|
2388 |
|
|
if (!ele.data('dropdownOverlay')) {
|
2389 |
|
|
UI.dropdownOverlay(ele, UI.Utils.options(ele.attr('data-uk-dropdown-overlay')));
|
2390 |
|
|
}
|
2391 |
|
|
});
|
2392 |
|
|
});
|
2393 |
|
|
},
|
2394 |
|
|
|
2395 |
|
|
init: function() {
|
2396 |
|
|
|
2397 |
|
|
var $this = this;
|
2398 |
|
|
|
2399 |
|
|
this.justified = this.options.justify ? UI.$(this.options.justify) : false;
|
2400 |
|
|
this.overlay = this.element.find('uk-dropdown-overlay');
|
2401 |
|
|
|
2402 |
|
|
if (!this.overlay.length) {
|
2403 |
|
|
this.overlay = UI.$('<div class="uk-dropdown-overlay"></div>').appendTo(this.element);
|
2404 |
|
|
}
|
2405 |
|
|
|
2406 |
|
|
this.overlay.addClass(this.options.cls);
|
2407 |
|
|
|
2408 |
|
|
this.on({
|
2409 |
|
|
|
2410 |
|
|
'beforeshow.uk.dropdown': function(e, dropdown) {
|
2411 |
|
|
$this.dropdown = dropdown;
|
2412 |
|
|
|
2413 |
|
|
if ($this.justified && $this.justified.length) {
|
2414 |
|
|
justify($this.overlay.css({display:'block', marginLeft:'', marginRight:''}), $this.justified, $this.justified.outerWidth());
|
2415 |
|
|
}
|
2416 |
|
|
},
|
2417 |
|
|
|
2418 |
|
|
'show.uk.dropdown': function(e, dropdown) {
|
2419 |
|
|
|
2420 |
|
|
var h = $this.dropdown.dropdown.outerHeight(true);
|
2421 |
|
|
|
2422 |
|
|
$this.dropdown.element.removeClass('uk-open');
|
2423 |
|
|
|
2424 |
|
|
$this.overlay.stop().css('display', 'block').animate({height: h}, $this.options.duration, function() {
|
2425 |
|
|
|
2426 |
|
|
$this.dropdown.dropdown.css('visibility', '');
|
2427 |
|
|
$this.dropdown.element.addClass('uk-open');
|
2428 |
|
|
|
2429 |
|
|
UI.Utils.checkDisplay($this.dropdown.dropdown, true);
|
2430 |
|
|
});
|
2431 |
|
|
|
2432 |
|
|
$this.pointerleave = false;
|
2433 |
|
|
},
|
2434 |
|
|
|
2435 |
|
|
'hide.uk.dropdown': function() {
|
2436 |
|
|
$this.overlay.stop().animate({height: 0}, $this.options.duration);
|
2437 |
|
|
},
|
2438 |
|
|
|
2439 |
|
|
'pointerenter.uk.dropdown': function(e, dropdown) {
|
2440 |
|
|
clearTimeout($this.remainIdle);
|
2441 |
|
|
},
|
2442 |
|
|
|
2443 |
|
|
'pointerleave.uk.dropdown': function(e, dropdown) {
|
2444 |
|
|
$this.pointerleave = true;
|
2445 |
|
|
}
|
2446 |
|
|
});
|
2447 |
|
|
|
2448 |
|
|
|
2449 |
|
|
this.overlay.on({
|
2450 |
|
|
|
2451 |
|
|
'mouseenter': function() {
|
2452 |
|
|
if ($this.remainIdle) {
|
2453 |
|
|
clearTimeout($this.dropdown.remainIdle);
|
2454 |
|
|
clearTimeout($this.remainIdle);
|
2455 |
|
|
}
|
2456 |
|
|
},
|
2457 |
|
|
|
2458 |
|
|
'mouseleave': function(){
|
2459 |
|
|
|
2460 |
|
|
if ($this.pointerleave && active) {
|
2461 |
|
|
|
2462 |
|
|
$this.remainIdle = setTimeout(function() {
|
2463 |
|
|
if(active) active.hide();
|
2464 |
|
|
}, active.options.remaintime);
|
2465 |
|
|
}
|
2466 |
|
|
}
|
2467 |
|
|
})
|
2468 |
|
|
}
|
2469 |
|
|
|
2470 |
|
|
});
|
2471 |
|
|
|
2472 |
|
|
|
2473 |
|
|
function justify(ele, justifyTo, boundarywidth, offset) {
|
2474 |
|
|
|
2475 |
|
|
ele = UI.$(ele);
|
2476 |
|
|
justifyTo = UI.$(justifyTo);
|
2477 |
|
|
boundarywidth = boundarywidth || window.innerWidth;
|
2478 |
|
|
offset = offset || ele.offset();
|
2479 |
|
|
|
2480 |
|
|
if (justifyTo.length) {
|
2481 |
|
|
|
2482 |
|
|
var jwidth = justifyTo.outerWidth();
|
2483 |
|
|
|
2484 |
|
|
ele.css('min-width', jwidth);
|
2485 |
|
|
|
2486 |
|
|
if (UI.langdirection == 'right') {
|
2487 |
|
|
|
2488 |
|
|
var right1 = boundarywidth - (justifyTo.offset().left + jwidth),
|
2489 |
|
|
right2 = boundarywidth - (ele.offset().left + ele.outerWidth());
|
2490 |
|
|
|
2491 |
|
|
ele.css('margin-right', right1 - right2);
|
2492 |
|
|
|
2493 |
|
|
} else {
|
2494 |
|
|
ele.css('margin-left', justifyTo.offset().left - offset.left);
|
2495 |
|
|
}
|
2496 |
|
|
}
|
2497 |
|
|
}
|
2498 |
|
|
|
2499 |
|
|
})(UIkit2);
|
2500 |
|
|
|
2501 |
|
|
(function(UI) {
|
2502 |
|
|
|
2503 |
|
|
"use strict";
|
2504 |
|
|
|
2505 |
|
|
var grids = [];
|
2506 |
|
|
|
2507 |
|
|
UI.component('gridMatchHeight', {
|
2508 |
|
|
|
2509 |
|
|
defaults: {
|
2510 |
|
|
target : false,
|
2511 |
|
|
row : true,
|
2512 |
|
|
ignorestacked : false,
|
2513 |
|
|
observe : false
|
2514 |
|
|
},
|
2515 |
|
|
|
2516 |
|
|
boot: function() {
|
2517 |
|
|
|
2518 |
|
|
// init code
|
2519 |
|
|
UI.ready(function(context) {
|
2520 |
|
|
|
2521 |
|
|
UI.$('[data-uk-grid-match]', context).each(function() {
|
2522 |
|
|
var grid = UI.$(this), obj;
|
2523 |
|
|
|
2524 |
|
|
if (!grid.data('gridMatchHeight')) {
|
2525 |
|
|
obj = UI.gridMatchHeight(grid, UI.Utils.options(grid.attr('data-uk-grid-match')));
|
2526 |
|
|
}
|
2527 |
|
|
});
|
2528 |
|
|
});
|
2529 |
|
|
},
|
2530 |
|
|
|
2531 |
|
|
init: function() {
|
2532 |
|
|
|
2533 |
|
|
var $this = this;
|
2534 |
|
|
|
2535 |
|
|
this.columns = this.element.children();
|
2536 |
|
|
this.elements = this.options.target ? this.find(this.options.target) : this.columns;
|
2537 |
|
|
|
2538 |
|
|
if (!this.columns.length) return;
|
2539 |
|
|
|
2540 |
|
|
UI.$win.on('load resize orientationchange', (function() {
|
2541 |
|
|
|
2542 |
|
|
var fn = function() {
|
2543 |
|
|
if ($this.element.is(':visible')) $this.match();
|
2544 |
|
|
};
|
2545 |
|
|
|
2546 |
|
|
UI.$(function() { fn(); });
|
2547 |
|
|
|
2548 |
|
|
return UI.Utils.debounce(fn, 50);
|
2549 |
|
|
})());
|
2550 |
|
|
|
2551 |
|
|
if (this.options.observe) {
|
2552 |
|
|
|
2553 |
|
|
UI.domObserve(this.element, function(e) {
|
2554 |
|
|
if ($this.element.is(':visible')) $this.match();
|
2555 |
|
|
});
|
2556 |
|
|
}
|
2557 |
|
|
|
2558 |
|
|
this.on('display.uk.check', function(e) {
|
2559 |
|
|
if(this.element.is(':visible')) this.match();
|
2560 |
|
|
}.bind(this));
|
2561 |
|
|
|
2562 |
|
|
grids.push(this);
|
2563 |
|
|
},
|
2564 |
|
|
|
2565 |
|
|
match: function() {
|
2566 |
|
|
|
2567 |
|
|
var firstvisible = this.columns.filter(':visible:first');
|
2568 |
|
|
|
2569 |
|
|
if (!firstvisible.length) return;
|
2570 |
|
|
|
2571 |
|
|
var stacked = Math.ceil(100 * parseFloat(firstvisible.css('width')) / parseFloat(firstvisible.parent().css('width'))) >= 100;
|
2572 |
|
|
|
2573 |
|
|
if (stacked && !this.options.ignorestacked) {
|
2574 |
|
|
this.revert();
|
2575 |
|
|
} else {
|
2576 |
|
|
UI.Utils.matchHeights(this.elements, this.options);
|
2577 |
|
|
}
|
2578 |
|
|
|
2579 |
|
|
return this;
|
2580 |
|
|
},
|
2581 |
|
|
|
2582 |
|
|
revert: function() {
|
2583 |
|
|
this.elements.css('min-height', '');
|
2584 |
|
|
return this;
|
2585 |
|
|
}
|
2586 |
|
|
});
|
2587 |
|
|
|
2588 |
|
|
UI.component('gridMargin', {
|
2589 |
|
|
|
2590 |
|
|
defaults: {
|
2591 |
|
|
cls : 'uk-grid-margin',
|
2592 |
|
|
rowfirst : 'uk-row-first'
|
2593 |
|
|
},
|
2594 |
|
|
|
2595 |
|
|
boot: function() {
|
2596 |
|
|
|
2597 |
|
|
// init code
|
2598 |
|
|
UI.ready(function(context) {
|
2599 |
|
|
|
2600 |
|
|
UI.$('[data-uk-grid-margin]', context).each(function() {
|
2601 |
|
|
var grid = UI.$(this), obj;
|
2602 |
|
|
|
2603 |
|
|
if (!grid.data('gridMargin')) {
|
2604 |
|
|
obj = UI.gridMargin(grid, UI.Utils.options(grid.attr('data-uk-grid-margin')));
|
2605 |
|
|
}
|
2606 |
|
|
});
|
2607 |
|
|
});
|
2608 |
|
|
},
|
2609 |
|
|
|
2610 |
|
|
init: function() {
|
2611 |
|
|
|
2612 |
|
|
var stackMargin = UI.stackMargin(this.element, this.options);
|
2613 |
|
|
}
|
2614 |
|
|
});
|
2615 |
|
|
|
2616 |
|
|
})(UIkit2);
|
2617 |
|
|
|
2618 |
|
|
(function(UI) {
|
2619 |
|
|
|
2620 |
|
|
"use strict";
|
2621 |
|
|
|
2622 |
|
|
var active = false, activeCount = 0, $html = UI.$html, body;
|
2623 |
|
|
|
2624 |
|
|
UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){
|
2625 |
|
|
UI.$('.uk-modal.uk-open').each(function(){
|
2626 |
|
|
return UI.$(this).data('modal') && UI.$(this).data('modal').resize();
|
2627 |
|
|
});
|
2628 |
|
|
}, 150));
|
2629 |
|
|
|
2630 |
|
|
UI.component('modal', {
|
2631 |
|
|
|
2632 |
|
|
defaults: {
|
2633 |
|
|
keyboard: true,
|
2634 |
|
|
bgclose: true,
|
2635 |
|
|
minScrollHeight: 150,
|
2636 |
|
|
center: false,
|
2637 |
|
|
modal: true
|
2638 |
|
|
},
|
2639 |
|
|
|
2640 |
|
|
scrollable: false,
|
2641 |
|
|
transition: false,
|
2642 |
|
|
hasTransitioned: true,
|
2643 |
|
|
|
2644 |
|
|
init: function() {
|
2645 |
|
|
|
2646 |
|
|
if (!body) body = UI.$('body');
|
2647 |
|
|
|
2648 |
|
|
if (!this.element.length) return;
|
2649 |
|
|
|
2650 |
|
|
var $this = this;
|
2651 |
|
|
|
2652 |
|
|
this.paddingdir = 'padding-' + (UI.langdirection == 'left' ? 'right':'left');
|
2653 |
|
|
this.dialog = this.find('.uk-modal-dialog');
|
2654 |
|
|
|
2655 |
|
|
this.active = false;
|
2656 |
|
|
|
2657 |
|
|
// Update ARIA
|
2658 |
|
|
this.element.attr('aria-hidden', this.element.hasClass('uk-open'));
|
2659 |
|
|
|
2660 |
|
|
this.on('click', '.uk-modal-close', function(e) {
|
2661 |
|
|
|
2662 |
|
|
e.preventDefault();
|
2663 |
|
|
|
2664 |
|
|
var modal = UI.$(e.target).closest('.uk-modal');
|
2665 |
|
|
if (modal[0] === $this.element[0]) $this.hide();
|
2666 |
|
|
|
2667 |
|
|
}).on('click', function(e) {
|
2668 |
|
|
|
2669 |
|
|
var target = UI.$(e.target);
|
2670 |
|
|
|
2671 |
|
|
if (target[0] == $this.element[0] && $this.options.bgclose) {
|
2672 |
|
|
$this.hide();
|
2673 |
|
|
}
|
2674 |
|
|
});
|
2675 |
|
|
|
2676 |
|
|
UI.domObserve(this.element, function(e) { $this.resize(); });
|
2677 |
|
|
},
|
2678 |
|
|
|
2679 |
|
|
toggle: function() {
|
2680 |
|
|
return this[this.isActive() ? 'hide' : 'show']();
|
2681 |
|
|
},
|
2682 |
|
|
|
2683 |
|
|
show: function() {
|
2684 |
|
|
|
2685 |
|
|
if (!this.element.length) return;
|
2686 |
|
|
|
2687 |
|
|
var $this = this;
|
2688 |
|
|
|
2689 |
|
|
if (this.isActive()) return;
|
2690 |
|
|
|
2691 |
|
|
if (this.options.modal && active) {
|
2692 |
|
|
active.hide(true);
|
2693 |
|
|
}
|
2694 |
|
|
|
2695 |
|
|
this.element.removeClass('uk-open').show();
|
2696 |
|
|
this.resize(true);
|
2697 |
|
|
|
2698 |
|
|
if (this.options.modal) {
|
2699 |
|
|
active = this;
|
2700 |
|
|
}
|
2701 |
|
|
|
2702 |
|
|
this.active = true;
|
2703 |
|
|
|
2704 |
|
|
activeCount++;
|
2705 |
|
|
|
2706 |
|
|
if (UI.support.transition) {
|
2707 |
|
|
this.hasTransitioned = false;
|
2708 |
|
|
this.element.one(UI.support.transition.end, function(){
|
2709 |
|
|
$this.hasTransitioned = true;
|
2710 |
|
|
UI.Utils.focus($this.dialog, 'a[href]');
|
2711 |
|
|
}).addClass('uk-open');
|
2712 |
|
|
} else {
|
2713 |
|
|
this.element.addClass('uk-open');
|
2714 |
|
|
UI.Utils.focus(this.dialog, 'a[href]');
|
2715 |
|
|
}
|
2716 |
|
|
|
2717 |
|
|
$html.addClass('uk-modal-page').height(); // force browser engine redraw
|
2718 |
|
|
|
2719 |
|
|
// Update ARIA
|
2720 |
|
|
this.element.attr('aria-hidden', 'false');
|
2721 |
|
|
|
2722 |
|
|
this.element.trigger('show.uk.modal');
|
2723 |
|
|
|
2724 |
|
|
UI.Utils.checkDisplay(this.dialog, true);
|
2725 |
|
|
|
2726 |
|
|
return this;
|
2727 |
|
|
},
|
2728 |
|
|
|
2729 |
|
|
hide: function(force) {
|
2730 |
|
|
|
2731 |
|
|
if (!force && UI.support.transition && this.hasTransitioned) {
|
2732 |
|
|
|
2733 |
|
|
var $this = this;
|
2734 |
|
|
|
2735 |
|
|
this.one(UI.support.transition.end, function() {
|
2736 |
|
|
$this._hide();
|
2737 |
|
|
}).removeClass('uk-open');
|
2738 |
|
|
|
2739 |
|
|
} else {
|
2740 |
|
|
|
2741 |
|
|
this._hide();
|
2742 |
|
|
}
|
2743 |
|
|
|
2744 |
|
|
return this;
|
2745 |
|
|
},
|
2746 |
|
|
|
2747 |
|
|
resize: function(force) {
|
2748 |
|
|
|
2749 |
|
|
if (!this.isActive() && !force) return;
|
2750 |
|
|
|
2751 |
|
|
var bodywidth = body.width();
|
2752 |
|
|
|
2753 |
|
|
this.scrollbarwidth = window.innerWidth - bodywidth;
|
2754 |
|
|
|
2755 |
|
|
body.css(this.paddingdir, this.scrollbarwidth);
|
2756 |
|
|
|
2757 |
|
|
this.element.css('overflow-y', this.scrollbarwidth ? 'scroll' : 'auto');
|
2758 |
|
|
|
2759 |
|
|
if (!this.updateScrollable() && this.options.center) {
|
2760 |
|
|
|
2761 |
|
|
var dh = this.dialog.outerHeight(),
|
2762 |
|
|
pad = parseInt(this.dialog.css('margin-top'), 10) + parseInt(this.dialog.css('margin-bottom'), 10);
|
2763 |
|
|
|
2764 |
|
|
if ((dh + pad) < window.innerHeight) {
|
2765 |
|
|
this.dialog.css({top: (window.innerHeight/2 - dh/2) - pad });
|
2766 |
|
|
} else {
|
2767 |
|
|
this.dialog.css({top: ''});
|
2768 |
|
|
}
|
2769 |
|
|
}
|
2770 |
|
|
},
|
2771 |
|
|
|
2772 |
|
|
updateScrollable: function() {
|
2773 |
|
|
|
2774 |
|
|
// has scrollable?
|
2775 |
|
|
var scrollable = this.dialog.find('.uk-overflow-container:visible:first');
|
2776 |
|
|
|
2777 |
|
|
if (scrollable.length) {
|
2778 |
|
|
|
2779 |
|
|
scrollable.css('height', 0);
|
2780 |
|
|
|
2781 |
|
|
var offset = Math.abs(parseInt(this.dialog.css('margin-top'), 10)),
|
2782 |
|
|
dh = this.dialog.outerHeight(),
|
2783 |
|
|
wh = window.innerHeight,
|
2784 |
|
|
h = wh - 2*(offset < 20 ? 20:offset) - dh;
|
2785 |
|
|
|
2786 |
|
|
scrollable.css({
|
2787 |
|
|
maxHeight: (h < this.options.minScrollHeight ? '':h),
|
2788 |
|
|
height:''
|
2789 |
|
|
});
|
2790 |
|
|
|
2791 |
|
|
return true;
|
2792 |
|
|
}
|
2793 |
|
|
|
2794 |
|
|
return false;
|
2795 |
|
|
},
|
2796 |
|
|
|
2797 |
|
|
_hide: function() {
|
2798 |
|
|
|
2799 |
|
|
this.active = false;
|
2800 |
|
|
if (activeCount > 0) activeCount--;
|
2801 |
|
|
else activeCount = 0;
|
2802 |
|
|
|
2803 |
|
|
this.element.hide().removeClass('uk-open');
|
2804 |
|
|
|
2805 |
|
|
// Update ARIA
|
2806 |
|
|
this.element.attr('aria-hidden', 'true');
|
2807 |
|
|
|
2808 |
|
|
if (!activeCount) {
|
2809 |
|
|
$html.removeClass('uk-modal-page');
|
2810 |
|
|
body.css(this.paddingdir, "");
|
2811 |
|
|
}
|
2812 |
|
|
|
2813 |
|
|
if (active===this) active = false;
|
2814 |
|
|
|
2815 |
|
|
this.trigger('hide.uk.modal');
|
2816 |
|
|
},
|
2817 |
|
|
|
2818 |
|
|
isActive: function() {
|
2819 |
|
|
return this.element.hasClass('uk-open');
|
2820 |
|
|
}
|
2821 |
|
|
|
2822 |
|
|
});
|
2823 |
|
|
|
2824 |
|
|
UI.component('modalTrigger', {
|
2825 |
|
|
|
2826 |
|
|
boot: function() {
|
2827 |
|
|
|
2828 |
|
|
// init code
|
2829 |
|
|
UI.$html.on('click.modal.uikit', '[data-uk-modal]', function(e) {
|
2830 |
|
|
|
2831 |
|
|
var ele = UI.$(this);
|
2832 |
|
|
|
2833 |
|
|
if (ele.is('a')) {
|
2834 |
|
|
e.preventDefault();
|
2835 |
|
|
}
|
2836 |
|
|
|
2837 |
|
|
if (!ele.data('modalTrigger')) {
|
2838 |
|
|
var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr('data-uk-modal')));
|
2839 |
|
|
modal.show();
|
2840 |
|
|
}
|
2841 |
|
|
|
2842 |
|
|
});
|
2843 |
|
|
|
2844 |
|
|
// close modal on esc button
|
2845 |
|
|
UI.$html.on('keydown.modal.uikit', function (e) {
|
2846 |
|
|
|
2847 |
|
|
if (active && e.keyCode === 27 && active.options.keyboard) { // ESC
|
2848 |
|
|
e.preventDefault();
|
2849 |
|
|
active.hide();
|
2850 |
|
|
}
|
2851 |
|
|
});
|
2852 |
|
|
},
|
2853 |
|
|
|
2854 |
|
|
init: function() {
|
2855 |
|
|
|
2856 |
|
|
var $this = this;
|
2857 |
|
|
|
2858 |
|
|
this.options = UI.$.extend({
|
2859 |
|
|
target: $this.element.is('a') ? $this.element.attr('href') : false
|
2860 |
|
|
}, this.options);
|
2861 |
|
|
|
2862 |
|
|
this.modal = UI.modal(this.options.target, this.options);
|
2863 |
|
|
|
2864 |
|
|
this.on("click", function(e) {
|
2865 |
|
|
e.preventDefault();
|
2866 |
|
|
$this.show();
|
2867 |
|
|
});
|
2868 |
|
|
|
2869 |
|
|
//methods
|
2870 |
|
|
this.proxy(this.modal, 'show hide isActive');
|
2871 |
|
|
}
|
2872 |
|
|
});
|
2873 |
|
|
|
2874 |
|
|
UI.modal.dialog = function(content, options) {
|
2875 |
|
|
|
2876 |
|
|
var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo('body'), options);
|
2877 |
|
|
|
2878 |
|
|
modal.on('hide.uk.modal', function(){
|
2879 |
|
|
if (modal.persist) {
|
2880 |
|
|
modal.persist.appendTo(modal.persist.data('modalPersistParent'));
|
2881 |
|
|
modal.persist = false;
|
2882 |
|
|
}
|
2883 |
|
|
modal.element.remove();
|
2884 |
|
|
});
|
2885 |
|
|
|
2886 |
|
|
setContent(content, modal);
|
2887 |
|
|
|
2888 |
|
|
return modal;
|
2889 |
|
|
};
|
2890 |
|
|
|
2891 |
|
|
UI.modal.dialog.template = '<div class="uk-modal"><div class="uk-modal-dialog" style="min-height:0;"></div></div>';
|
2892 |
|
|
|
2893 |
|
|
UI.modal.alert = function(content, options) {
|
2894 |
|
|
|
2895 |
|
|
options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, options);
|
2896 |
|
|
|
2897 |
|
|
var modal = UI.modal.dialog(([
|
2898 |
|
|
'<div class="uk-margin uk-modal-content">'+String(content)+'</div>',
|
2899 |
|
|
'<div class="uk-modal-footer uk-text-right"><button class="uk-button uk-button-primary uk-modal-close">'+options.labels.Ok+'</button></div>'
|
2900 |
|
|
]).join(""), options);
|
2901 |
|
|
|
2902 |
|
|
modal.on('show.uk.modal', function(){
|
2903 |
|
|
setTimeout(function(){
|
2904 |
|
|
modal.element.find('button:first').focus();
|
2905 |
|
|
}, 50);
|
2906 |
|
|
});
|
2907 |
|
|
|
2908 |
|
|
return modal.show();
|
2909 |
|
|
};
|
2910 |
|
|
|
2911 |
|
|
UI.modal.confirm = function(content, onconfirm, oncancel) {
|
2912 |
|
|
|
2913 |
|
|
var options = arguments.length > 1 && arguments[arguments.length-1] ? arguments[arguments.length-1] : {};
|
2914 |
|
|
|
2915 |
|
|
onconfirm = UI.$.isFunction(onconfirm) ? onconfirm : function(){};
|
2916 |
|
|
oncancel = UI.$.isFunction(oncancel) ? oncancel : function(){};
|
2917 |
|
|
options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, UI.$.isFunction(options) ? {}:options);
|
2918 |
|
|
|
2919 |
|
|
var modal = UI.modal.dialog(([
|
2920 |
|
|
'<div class="uk-margin uk-modal-content">'+String(content)+'</div>',
|
2921 |
|
|
'<div class="uk-modal-footer uk-text-right"><button class="uk-button js-modal-confirm-cancel">'+options.labels.Cancel+'</button> <button class="uk-button uk-button-primary js-modal-confirm">'+options.labels.Ok+'</button></div>'
|
2922 |
|
|
]).join(""), options);
|
2923 |
|
|
|
2924 |
|
|
modal.element.find(".js-modal-confirm, .js-modal-confirm-cancel").on("click", function(){
|
2925 |
|
|
UI.$(this).is('.js-modal-confirm') ? onconfirm() : oncancel();
|
2926 |
|
|
modal.hide();
|
2927 |
|
|
});
|
2928 |
|
|
|
2929 |
|
|
modal.on('show.uk.modal', function(){
|
2930 |
|
|
setTimeout(function(){
|
2931 |
|
|
modal.element.find('.js-modal-confirm').focus();
|
2932 |
|
|
}, 50);
|
2933 |
|
|
});
|
2934 |
|
|
|
2935 |
|
|
return modal.show();
|
2936 |
|
|
};
|
2937 |
|
|
|
2938 |
|
|
UI.modal.prompt = function(text, value, onsubmit, options) {
|
2939 |
|
|
|
2940 |
|
|
onsubmit = UI.$.isFunction(onsubmit) ? onsubmit : function(value){};
|
2941 |
|
|
options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, options);
|
2942 |
|
|
|
2943 |
|
|
var modal = UI.modal.dialog(([
|
2944 |
|
|
text ? '<div class="uk-modal-content uk-form">'+String(text)+'</div>':'',
|
2945 |
|
|
'<div class="uk-margin-small-top uk-modal-content uk-form"><p><input type="text" class="uk-width-1-1"></p></div>',
|
2946 |
|
|
'<div class="uk-modal-footer uk-text-right"><button class="uk-button uk-modal-close">'+options.labels.Cancel+'</button> <button class="uk-button uk-button-primary js-modal-ok">'+options.labels.Ok+'</button></div>'
|
2947 |
|
|
]).join(""), options),
|
2948 |
|
|
|
2949 |
|
|
input = modal.element.find("input[type='text']").val(value || '').on('keyup', function(e){
|
2950 |
|
|
if (e.keyCode == 13) {
|
2951 |
|
|
modal.element.find('.js-modal-ok').trigger('click');
|
2952 |
|
|
}
|
2953 |
|
|
});
|
2954 |
|
|
|
2955 |
|
|
modal.element.find('.js-modal-ok').on('click', function(){
|
2956 |
|
|
if (onsubmit(input.val())!==false){
|
2957 |
|
|
modal.hide();
|
2958 |
|
|
}
|
2959 |
|
|
});
|
2960 |
|
|
|
2961 |
|
|
return modal.show();
|
2962 |
|
|
};
|
2963 |
|
|
|
2964 |
|
|
UI.modal.blockUI = function(content, options) {
|
2965 |
|
|
|
2966 |
|
|
var modal = UI.modal.dialog(([
|
2967 |
|
|
'<div class="uk-margin uk-modal-content">'+String(content || '<div class="uk-text-center">...</div>')+'</div>'
|
2968 |
|
|
]).join(""), UI.$.extend({bgclose:false, keyboard:false, modal:false}, options));
|
2969 |
|
|
|
2970 |
|
|
modal.content = modal.element.find('.uk-modal-content:first');
|
2971 |
|
|
|
2972 |
|
|
return modal.show();
|
2973 |
|
|
};
|
2974 |
|
|
|
2975 |
|
|
UI.modal.labels = {
|
2976 |
|
|
Ok: 'Ok',
|
2977 |
|
|
Cancel: 'Cancel'
|
2978 |
|
|
};
|
2979 |
|
|
|
2980 |
|
|
// helper functions
|
2981 |
|
|
function setContent(content, modal){
|
2982 |
|
|
|
2983 |
|
|
if(!modal) return;
|
2984 |
|
|
|
2985 |
|
|
if (typeof content === 'object') {
|
2986 |
|
|
|
2987 |
|
|
// convert DOM object to a jQuery object
|
2988 |
|
|
content = content instanceof jQuery ? content : UI.$(content);
|
2989 |
|
|
|
2990 |
|
|
if(content.parent().length) {
|
2991 |
|
|
modal.persist = content;
|
2992 |
|
|
modal.persist.data('modalPersistParent', content.parent());
|
2993 |
|
|
}
|
2994 |
|
|
}else if (typeof content === 'string' || typeof content === 'number') {
|
2995 |
|
|
// just insert the data as innerHTML
|
2996 |
|
|
content = UI.$('<div></div>').html(content);
|
2997 |
|
|
}else {
|
2998 |
|
|
// unsupported data type!
|
2999 |
|
|
content = UI.$('<div></div>').html('UIkit2.modal Error: Unsupported data type: ' + typeof content);
|
3000 |
|
|
}
|
3001 |
|
|
|
3002 |
|
|
content.appendTo(modal.element.find('.uk-modal-dialog'));
|
3003 |
|
|
|
3004 |
|
|
return modal;
|
3005 |
|
|
}
|
3006 |
|
|
|
3007 |
|
|
})(UIkit2);
|
3008 |
|
|
|
3009 |
|
|
(function(UI) {
|
3010 |
|
|
|
3011 |
|
|
"use strict";
|
3012 |
|
|
|
3013 |
|
|
UI.component('nav', {
|
3014 |
|
|
|
3015 |
|
|
defaults: {
|
3016 |
|
|
toggle: '>li.uk-parent > a[href="#"]',
|
3017 |
|
|
lists: '>li.uk-parent > ul',
|
3018 |
|
|
multiple: false
|
3019 |
|
|
},
|
3020 |
|
|
|
3021 |
|
|
boot: function() {
|
3022 |
|
|
|
3023 |
|
|
// init code
|
3024 |
|
|
UI.ready(function(context) {
|
3025 |
|
|
|
3026 |
|
|
UI.$('[data-uk-nav]', context).each(function() {
|
3027 |
|
|
var nav = UI.$(this);
|
3028 |
|
|
|
3029 |
|
|
if (!nav.data('nav')) {
|
3030 |
|
|
var obj = UI.nav(nav, UI.Utils.options(nav.attr('data-uk-nav')));
|
3031 |
|
|
}
|
3032 |
|
|
});
|
3033 |
|
|
});
|
3034 |
|
|
},
|
3035 |
|
|
|
3036 |
|
|
init: function() {
|
3037 |
|
|
|
3038 |
|
|
var $this = this;
|
3039 |
|
|
|
3040 |
|
|
this.on('click.uk.nav', this.options.toggle, function(e) {
|
3041 |
|
|
e.preventDefault();
|
3042 |
|
|
var ele = UI.$(this);
|
3043 |
|
|
$this.open(ele.parent()[0] == $this.element[0] ? ele : ele.parent("li"));
|
3044 |
|
|
});
|
3045 |
|
|
|
3046 |
|
|
this.update();
|
3047 |
|
|
|
3048 |
|
|
UI.domObserve(this.element, function(e) {
|
3049 |
|
|
if ($this.element.find($this.options.lists).not('[role]').length) {
|
3050 |
|
|
$this.update();
|
3051 |
|
|
}
|
3052 |
|
|
});
|
3053 |
|
|
},
|
3054 |
|
|
|
3055 |
|
|
update: function() {
|
3056 |
|
|
|
3057 |
|
|
var $this = this;
|
3058 |
|
|
|
3059 |
|
|
this.find(this.options.lists).each(function() {
|
3060 |
|
|
|
3061 |
|
|
var $ele = UI.$(this).attr('role', 'menu'),
|
3062 |
|
|
parent = $ele.closest('li'),
|
3063 |
|
|
active = parent.hasClass("uk-active");
|
3064 |
|
|
|
3065 |
|
|
if (!parent.data('list-container')) {
|
3066 |
|
|
$ele.wrap('<div style="overflow:hidden;height:0;position:relative;"></div>');
|
3067 |
|
|
parent.data('list-container', $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden'));
|
3068 |
|
|
}
|
3069 |
|
|
|
3070 |
|
|
// Init ARIA
|
3071 |
|
|
parent.attr('aria-expanded', parent.hasClass("uk-open"));
|
3072 |
|
|
|
3073 |
|
|
if (active) $this.open(parent, true);
|
3074 |
|
|
});
|
3075 |
|
|
},
|
3076 |
|
|
|
3077 |
|
|
open: function(li, noanimation) {
|
3078 |
|
|
|
3079 |
|
|
var $this = this, element = this.element, $li = UI.$(li), $container = $li.data('list-container');
|
3080 |
|
|
|
3081 |
|
|
if (!this.options.multiple) {
|
3082 |
|
|
|
3083 |
|
|
element.children('.uk-open').not(li).each(function() {
|
3084 |
|
|
|
3085 |
|
|
var ele = UI.$(this);
|
3086 |
|
|
|
3087 |
|
|
if (ele.data('list-container')) {
|
3088 |
|
|
ele.data('list-container').stop().animate({height: 0}, function() {
|
3089 |
|
|
UI.$(this).parent().removeClass('uk-open').end().addClass('uk-hidden');
|
3090 |
|
|
});
|
3091 |
|
|
}
|
3092 |
|
|
});
|
3093 |
|
|
}
|
3094 |
|
|
|
3095 |
|
|
$li.toggleClass('uk-open');
|
3096 |
|
|
|
3097 |
|
|
// Update ARIA
|
3098 |
|
|
$li.attr('aria-expanded', $li.hasClass('uk-open'));
|
3099 |
|
|
|
3100 |
|
|
if ($container) {
|
3101 |
|
|
|
3102 |
|
|
if ($li.hasClass('uk-open')) {
|
3103 |
|
|
$container.removeClass('uk-hidden');
|
3104 |
|
|
}
|
3105 |
|
|
|
3106 |
|
|
if (noanimation) {
|
3107 |
|
|
|
3108 |
|
|
$container.stop().height($li.hasClass('uk-open') ? 'auto' : 0);
|
3109 |
|
|
|
3110 |
|
|
if (!$li.hasClass('uk-open')) {
|
3111 |
|
|
$container.addClass('uk-hidden');
|
3112 |
|
|
}
|
3113 |
|
|
|
3114 |
|
|
this.trigger('display.uk.check');
|
3115 |
|
|
|
3116 |
|
|
} else {
|
3117 |
|
|
|
3118 |
|
|
$container.stop().animate({
|
3119 |
|
|
height: ($li.hasClass('uk-open') ? getHeight($container.find('ul:first')) : 0)
|
3120 |
|
|
}, function() {
|
3121 |
|
|
|
3122 |
|
|
if (!$li.hasClass('uk-open')) {
|
3123 |
|
|
$container.addClass('uk-hidden');
|
3124 |
|
|
} else {
|
3125 |
|
|
$container.css('height', '');
|
3126 |
|
|
}
|
3127 |
|
|
|
3128 |
|
|
$this.trigger('display.uk.check');
|
3129 |
|
|
});
|
3130 |
|
|
}
|
3131 |
|
|
}
|
3132 |
|
|
}
|
3133 |
|
|
});
|
3134 |
|
|
|
3135 |
|
|
|
3136 |
|
|
// helper
|
3137 |
|
|
|
3138 |
|
|
function getHeight(ele) {
|
3139 |
|
|
|
3140 |
|
|
var $ele = UI.$(ele), height = 'auto';
|
3141 |
|
|
|
3142 |
|
|
if ($ele.is(':visible')) {
|
3143 |
|
|
height = $ele.outerHeight();
|
3144 |
|
|
} else {
|
3145 |
|
|
|
3146 |
|
|
var tmp = {
|
3147 |
|
|
position: $ele.css('position'),
|
3148 |
|
|
visibility: $ele.css('visibility'),
|
3149 |
|
|
display: $ele.css('display')
|
3150 |
|
|
};
|
3151 |
|
|
|
3152 |
|
|
height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight();
|
3153 |
|
|
|
3154 |
|
|
$ele.css(tmp); // reset element
|
3155 |
|
|
}
|
3156 |
|
|
|
3157 |
|
|
return height;
|
3158 |
|
|
}
|
3159 |
|
|
|
3160 |
|
|
})(UIkit2);
|
3161 |
|
|
|
3162 |
|
|
(function(UI) {
|
3163 |
|
|
|
3164 |
|
|
"use strict";
|
3165 |
|
|
|
3166 |
|
|
var scrollpos = {x: window.scrollX, y: window.scrollY},
|
3167 |
|
|
$win = UI.$win,
|
3168 |
|
|
$doc = UI.$doc,
|
3169 |
|
|
$html = UI.$html,
|
3170 |
|
|
Offcanvas = {
|
3171 |
|
|
|
3172 |
|
|
show: function(element, options) {
|
3173 |
|
|
|
3174 |
|
|
element = UI.$(element);
|
3175 |
|
|
|
3176 |
|
|
if (!element.length) return;
|
3177 |
|
|
|
3178 |
|
|
options = UI.$.extend({mode: 'push'}, options);
|
3179 |
|
|
|
3180 |
|
|
var $body = UI.$('body'),
|
3181 |
|
|
bar = element.find('.uk-offcanvas-bar:first'),
|
3182 |
|
|
rtl = (UI.langdirection == 'right'),
|
3183 |
|
|
flip = bar.hasClass('uk-offcanvas-bar-flip') ? -1:1,
|
3184 |
|
|
dir = flip * (rtl ? -1 : 1),
|
3185 |
|
|
|
3186 |
|
|
scrollbarwidth = window.innerWidth - $body.width();
|
3187 |
|
|
|
3188 |
|
|
scrollpos = {x: window.pageXOffset, y: window.pageYOffset};
|
3189 |
|
|
|
3190 |
|
|
bar.attr('mode', options.mode);
|
3191 |
|
|
element.addClass('uk-active');
|
3192 |
|
|
|
3193 |
|
|
$body.css({width: window.innerWidth - scrollbarwidth, height: window.innerHeight}).addClass('uk-offcanvas-page');
|
3194 |
|
|
|
3195 |
|
|
if (options.mode == 'push' || options.mode == 'reveal') {
|
3196 |
|
|
$body.css((rtl ? 'margin-right' : 'margin-left'), (rtl ? -1 : 1) * (bar.outerWidth() * dir));
|
3197 |
|
|
}
|
3198 |
|
|
|
3199 |
|
|
if (options.mode == 'reveal') {
|
3200 |
|
|
bar.css('clip', 'rect(0, '+bar.outerWidth()+'px, 100vh, 0)');
|
3201 |
|
|
}
|
3202 |
|
|
|
3203 |
|
|
$html.css('margin-top', scrollpos.y * -1).width(); // .width() - force redraw
|
3204 |
|
|
|
3205 |
|
|
|
3206 |
|
|
bar.addClass('uk-offcanvas-bar-show');
|
3207 |
|
|
|
3208 |
|
|
this._initElement(element);
|
3209 |
|
|
|
3210 |
|
|
bar.trigger('show.uk.offcanvas', [element, bar]);
|
3211 |
|
|
|
3212 |
|
|
// Update ARIA
|
3213 |
|
|
element.attr('aria-hidden', 'false');
|
3214 |
|
|
},
|
3215 |
|
|
|
3216 |
|
|
hide: function(force) {
|
3217 |
|
|
|
3218 |
|
|
var $body = UI.$('body'),
|
3219 |
|
|
panel = UI.$('.uk-offcanvas.uk-active'),
|
3220 |
|
|
rtl = (UI.langdirection == 'right'),
|
3221 |
|
|
bar = panel.find('.uk-offcanvas-bar:first'),
|
3222 |
|
|
finalize = function() {
|
3223 |
|
|
$body.removeClass('uk-offcanvas-page').css({width: '', height: '', marginLeft: '', marginRight: ''});
|
3224 |
|
|
panel.removeClass('uk-active');
|
3225 |
|
|
|
3226 |
|
|
bar.removeClass('uk-offcanvas-bar-show');
|
3227 |
|
|
$html.css('margin-top', '');
|
3228 |
|
|
window.scrollTo(scrollpos.x, scrollpos.y);
|
3229 |
|
|
bar.trigger('hide.uk.offcanvas', [panel, bar]);
|
3230 |
|
|
|
3231 |
|
|
// Update ARIA
|
3232 |
|
|
panel.attr('aria-hidden', 'true');
|
3233 |
|
|
};
|
3234 |
|
|
|
3235 |
|
|
if (!panel.length) return;
|
3236 |
|
|
if (bar.attr('mode') == 'none') force = true;
|
3237 |
|
|
|
3238 |
|
|
if (UI.support.transition && !force) {
|
3239 |
|
|
|
3240 |
|
|
$body.one(UI.support.transition.end, function() {
|
3241 |
|
|
finalize();
|
3242 |
|
|
}).css((rtl ? 'margin-right' : 'margin-left'), '');
|
3243 |
|
|
|
3244 |
|
|
if (bar.attr('mode') == 'reveal') {
|
3245 |
|
|
bar.css('clip', '');
|
3246 |
|
|
}
|
3247 |
|
|
|
3248 |
|
|
setTimeout(function(){
|
3249 |
|
|
bar.removeClass('uk-offcanvas-bar-show');
|
3250 |
|
|
}, 0);
|
3251 |
|
|
|
3252 |
|
|
} else {
|
3253 |
|
|
finalize();
|
3254 |
|
|
}
|
3255 |
|
|
},
|
3256 |
|
|
|
3257 |
|
|
_initElement: function(element) {
|
3258 |
|
|
|
3259 |
|
|
if (element.data('OffcanvasInit')) return;
|
3260 |
|
|
|
3261 |
|
|
element.on('click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas', function(e) {
|
3262 |
|
|
|
3263 |
|
|
var target = UI.$(e.target);
|
3264 |
|
|
|
3265 |
|
|
if (e.type.match(/swipe/)) {
|
3266 |
|
|
if (target.parents('.uk-offcanvas-bar:first').length) return;
|
3267 |
|
|
} else {
|
3268 |
|
|
|
3269 |
|
|
if (!target.hasClass('uk-offcanvas-close')) {
|
3270 |
|
|
if (target.hasClass('uk-offcanvas-bar')) return;
|
3271 |
|
|
if (target.parents('.uk-offcanvas-bar:first').length) return;
|
3272 |
|
|
}
|
3273 |
|
|
}
|
3274 |
|
|
|
3275 |
|
|
e.stopImmediatePropagation();
|
3276 |
|
|
Offcanvas.hide();
|
3277 |
|
|
});
|
3278 |
|
|
|
3279 |
|
|
element.on('click', 'a[href*="#"]', function(e){
|
3280 |
|
|
|
3281 |
|
|
var link = UI.$(this),
|
3282 |
|
|
href = link.attr('href');
|
3283 |
|
|
|
3284 |
|
|
if (href == '#') {
|
3285 |
|
|
return;
|
3286 |
|
|
}
|
3287 |
|
|
|
3288 |
|
|
UI.$doc.one('hide.uk.offcanvas', function() {
|
3289 |
|
|
|
3290 |
|
|
var target;
|
3291 |
|
|
|
3292 |
|
|
try {
|
3293 |
|
|
target = UI.$(link[0].hash);
|
3294 |
|
|
} catch (e){
|
3295 |
|
|
target = '';
|
3296 |
|
|
}
|
3297 |
|
|
|
3298 |
|
|
if (!target.length) {
|
3299 |
|
|
target = UI.$('[name="'+link[0].hash.replace('#','')+'"]');
|
3300 |
|
|
}
|
3301 |
|
|
|
3302 |
|
|
if (target.length && UI.Utils.scrollToElement) {
|
3303 |
|
|
UI.Utils.scrollToElement(target, UI.Utils.options(link.attr('data-uk-smooth-scroll') || '{}'));
|
3304 |
|
|
} else {
|
3305 |
|
|
window.location.href = href;
|
3306 |
|
|
}
|
3307 |
|
|
});
|
3308 |
|
|
|
3309 |
|
|
Offcanvas.hide();
|
3310 |
|
|
});
|
3311 |
|
|
|
3312 |
|
|
element.data('OffcanvasInit', true);
|
3313 |
|
|
}
|
3314 |
|
|
};
|
3315 |
|
|
|
3316 |
|
|
UI.component('offcanvasTrigger', {
|
3317 |
|
|
|
3318 |
|
|
boot: function() {
|
3319 |
|
|
|
3320 |
|
|
// init code
|
3321 |
|
|
$html.on('click.offcanvas.uikit', '[data-uk-offcanvas]', function(e) {
|
3322 |
|
|
|
3323 |
|
|
e.preventDefault();
|
3324 |
|
|
|
3325 |
|
|
var ele = UI.$(this);
|
3326 |
|
|
|
3327 |
|
|
if (!ele.data('offcanvasTrigger')) {
|
3328 |
|
|
var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr('data-uk-offcanvas')));
|
3329 |
|
|
ele.trigger("click");
|
3330 |
|
|
}
|
3331 |
|
|
});
|
3332 |
|
|
|
3333 |
|
|
$html.on('keydown.uk.offcanvas', function(e) {
|
3334 |
|
|
|
3335 |
|
|
if (e.keyCode === 27) { // ESC
|
3336 |
|
|
Offcanvas.hide();
|
3337 |
|
|
}
|
3338 |
|
|
});
|
3339 |
|
|
},
|
3340 |
|
|
|
3341 |
|
|
init: function() {
|
3342 |
|
|
|
3343 |
|
|
var $this = this;
|
3344 |
|
|
|
3345 |
|
|
this.options = UI.$.extend({
|
3346 |
|
|
target: $this.element.is('a') ? $this.element.attr('href') : false,
|
3347 |
|
|
mode: 'push'
|
3348 |
|
|
}, this.options);
|
3349 |
|
|
|
3350 |
|
|
this.on('click', function(e) {
|
3351 |
|
|
e.preventDefault();
|
3352 |
|
|
Offcanvas.show($this.options.target, $this.options);
|
3353 |
|
|
});
|
3354 |
|
|
}
|
3355 |
|
|
});
|
3356 |
|
|
|
3357 |
|
|
UI.offcanvas = Offcanvas;
|
3358 |
|
|
|
3359 |
|
|
})(UIkit2);
|
3360 |
|
|
|
3361 |
|
|
(function(UI) {
|
3362 |
|
|
|
3363 |
|
|
"use strict";
|
3364 |
|
|
|
3365 |
|
|
var Animations;
|
3366 |
|
|
|
3367 |
|
|
UI.component('switcher', {
|
3368 |
|
|
|
3369 |
|
|
defaults: {
|
3370 |
|
|
connect : false,
|
3371 |
|
|
toggle : '>*',
|
3372 |
|
|
active : 0,
|
3373 |
|
|
animation : false,
|
3374 |
|
|
duration : 200,
|
3375 |
|
|
swiping : true
|
3376 |
|
|
},
|
3377 |
|
|
|
3378 |
|
|
animating: false,
|
3379 |
|
|
|
3380 |
|
|
boot: function() {
|
3381 |
|
|
|
3382 |
|
|
// init code
|
3383 |
|
|
UI.ready(function(context) {
|
3384 |
|
|
|
3385 |
|
|
UI.$('[data-uk-switcher]', context).each(function() {
|
3386 |
|
|
var switcher = UI.$(this);
|
3387 |
|
|
|
3388 |
|
|
if (!switcher.data('switcher')) {
|
3389 |
|
|
var obj = UI.switcher(switcher, UI.Utils.options(switcher.attr('data-uk-switcher')));
|
3390 |
|
|
}
|
3391 |
|
|
});
|
3392 |
|
|
});
|
3393 |
|
|
},
|
3394 |
|
|
|
3395 |
|
|
init: function() {
|
3396 |
|
|
|
3397 |
|
|
var $this = this;
|
3398 |
|
|
|
3399 |
|
|
this.on('click.uk.switcher', this.options.toggle, function(e) {
|
3400 |
|
|
e.preventDefault();
|
3401 |
|
|
$this.show(this);
|
3402 |
|
|
});
|
3403 |
|
|
|
3404 |
|
|
if (!this.options.connect) {
|
3405 |
|
|
return;
|
3406 |
|
|
}
|
3407 |
|
|
|
3408 |
|
|
this.connect = UI.$(this.options.connect);
|
3409 |
|
|
|
3410 |
|
|
if (!this.connect.length) {
|
3411 |
|
|
return;
|
3412 |
|
|
}
|
3413 |
|
|
|
3414 |
|
|
this.connect.on('click.uk.switcher', '[data-uk-switcher-item]', function(e) {
|
3415 |
|
|
|
3416 |
|
|
e.preventDefault();
|
3417 |
|
|
|
3418 |
|
|
var item = UI.$(this).attr('data-uk-switcher-item');
|
3419 |
|
|
|
3420 |
|
|
if ($this.index == item) return;
|
3421 |
|
|
|
3422 |
|
|
switch(item) {
|
3423 |
|
|
case 'next':
|
3424 |
|
|
case 'previous':
|
3425 |
|
|
$this.show($this.index + (item=='next' ? 1:-1));
|
3426 |
|
|
break;
|
3427 |
|
|
default:
|
3428 |
|
|
$this.show(parseInt(item, 10));
|
3429 |
|
|
}
|
3430 |
|
|
});
|
3431 |
|
|
|
3432 |
|
|
if (this.options.swiping) {
|
3433 |
|
|
|
3434 |
|
|
this.connect.on('swipeRight swipeLeft', function(e) {
|
3435 |
|
|
e.preventDefault();
|
3436 |
|
|
if (!window.getSelection().toString()) {
|
3437 |
|
|
$this.show($this.index + (e.type == 'swipeLeft' ? 1 : -1));
|
3438 |
|
|
}
|
3439 |
|
|
});
|
3440 |
|
|
}
|
3441 |
|
|
|
3442 |
|
|
this.update();
|
3443 |
|
|
},
|
3444 |
|
|
|
3445 |
|
|
update: function() {
|
3446 |
|
|
|
3447 |
|
|
this.connect.children().removeClass('uk-active').attr('aria-hidden', 'true');
|
3448 |
|
|
|
3449 |
|
|
var toggles = this.find(this.options.toggle),
|
3450 |
|
|
active = toggles.filter('.uk-active');
|
3451 |
|
|
|
3452 |
|
|
if (active.length) {
|
3453 |
|
|
this.show(active, false);
|
3454 |
|
|
} else {
|
3455 |
|
|
|
3456 |
|
|
if (this.options.active===false) return;
|
3457 |
|
|
|
3458 |
|
|
active = toggles.eq(this.options.active);
|
3459 |
|
|
this.show(active.length ? active : toggles.eq(0), false);
|
3460 |
|
|
}
|
3461 |
|
|
|
3462 |
|
|
// Init ARIA for toggles
|
3463 |
|
|
toggles.not(active).attr('aria-expanded', 'false');
|
3464 |
|
|
active.attr('aria-expanded', 'true');
|
3465 |
|
|
},
|
3466 |
|
|
|
3467 |
|
|
show: function(tab, animate) {
|
3468 |
|
|
|
3469 |
|
|
if (this.animating) {
|
3470 |
|
|
return;
|
3471 |
|
|
}
|
3472 |
|
|
|
3473 |
|
|
var toggles = this.find(this.options.toggle);
|
3474 |
|
|
|
3475 |
|
|
if (isNaN(tab)) {
|
3476 |
|
|
tab = UI.$(tab);
|
3477 |
|
|
} else {
|
3478 |
|
|
tab = tab < 0 ? toggles.length-1 : tab;
|
3479 |
|
|
tab = toggles.eq(toggles[tab] ? tab : 0);
|
3480 |
|
|
}
|
3481 |
|
|
|
3482 |
|
|
var $this = this,
|
3483 |
|
|
active = UI.$(tab),
|
3484 |
|
|
animation = Animations[this.options.animation] || function(current, next) {
|
3485 |
|
|
|
3486 |
|
|
if (!$this.options.animation) {
|
3487 |
|
|
return Animations.none.apply($this);
|
3488 |
|
|
}
|
3489 |
|
|
|
3490 |
|
|
var anim = $this.options.animation.split(',');
|
3491 |
|
|
|
3492 |
|
|
if (anim.length == 1) {
|
3493 |
|
|
anim[1] = anim[0];
|
3494 |
|
|
}
|
3495 |
|
|
|
3496 |
|
|
anim[0] = anim[0].trim();
|
3497 |
|
|
anim[1] = anim[1].trim();
|
3498 |
|
|
|
3499 |
|
|
return coreAnimation.apply($this, [anim, current, next]);
|
3500 |
|
|
};
|
3501 |
|
|
|
3502 |
|
|
if (animate===false || !UI.support.animation) {
|
3503 |
|
|
animation = Animations.none;
|
3504 |
|
|
}
|
3505 |
|
|
|
3506 |
|
|
if (active.hasClass("uk-disabled")) return;
|
3507 |
|
|
|
3508 |
|
|
// Update ARIA for Toggles
|
3509 |
|
|
toggles.attr('aria-expanded', 'false');
|
3510 |
|
|
active.attr('aria-expanded', 'true');
|
3511 |
|
|
|
3512 |
|
|
toggles.filter(".uk-active").removeClass("uk-active");
|
3513 |
|
|
active.addClass("uk-active");
|
3514 |
|
|
|
3515 |
|
|
if (this.options.connect && this.connect.length) {
|
3516 |
|
|
|
3517 |
|
|
this.index = this.find(this.options.toggle).index(active);
|
3518 |
|
|
|
3519 |
|
|
if (this.index == -1 ) {
|
3520 |
|
|
this.index = 0;
|
3521 |
|
|
}
|
3522 |
|
|
|
3523 |
|
|
this.connect.each(function() {
|
3524 |
|
|
|
3525 |
|
|
var container = UI.$(this),
|
3526 |
|
|
children = UI.$(container.children()),
|
3527 |
|
|
current = UI.$(children.filter('.uk-active')),
|
3528 |
|
|
next = UI.$(children.eq($this.index));
|
3529 |
|
|
|
3530 |
|
|
$this.animating = true;
|
3531 |
|
|
|
3532 |
|
|
animation.apply($this, [current, next]).then(function(){
|
3533 |
|
|
|
3534 |
|
|
current.removeClass("uk-active");
|
3535 |
|
|
next.addClass("uk-active");
|
3536 |
|
|
|
3537 |
|
|
// Update ARIA for connect
|
3538 |
|
|
current.attr('aria-hidden', 'true');
|
3539 |
|
|
next.attr('aria-hidden', 'false');
|
3540 |
|
|
|
3541 |
|
|
UI.Utils.checkDisplay(next, true);
|
3542 |
|
|
|
3543 |
|
|
$this.animating = false;
|
3544 |
|
|
|
3545 |
|
|
});
|
3546 |
|
|
});
|
3547 |
|
|
}
|
3548 |
|
|
|
3549 |
|
|
this.trigger("show.uk.switcher", [active]);
|
3550 |
|
|
}
|
3551 |
|
|
});
|
3552 |
|
|
|
3553 |
|
|
Animations = {
|
3554 |
|
|
|
3555 |
|
|
'none': function() {
|
3556 |
|
|
var d = UI.$.Deferred();
|
3557 |
|
|
d.resolve();
|
3558 |
|
|
return d.promise();
|
3559 |
|
|
},
|
3560 |
|
|
|
3561 |
|
|
'fade': function(current, next) {
|
3562 |
|
|
return coreAnimation.apply(this, ['uk-animation-fade', current, next]);
|
3563 |
|
|
},
|
3564 |
|
|
|
3565 |
|
|
'slide-bottom': function(current, next) {
|
3566 |
|
|
return coreAnimation.apply(this, ['uk-animation-slide-bottom', current, next]);
|
3567 |
|
|
},
|
3568 |
|
|
|
3569 |
|
|
'slide-top': function(current, next) {
|
3570 |
|
|
return coreAnimation.apply(this, ['uk-animation-slide-top', current, next]);
|
3571 |
|
|
},
|
3572 |
|
|
|
3573 |
|
|
'slide-vertical': function(current, next, dir) {
|
3574 |
|
|
|
3575 |
|
|
var anim = ['uk-animation-slide-top', 'uk-animation-slide-bottom'];
|
3576 |
|
|
|
3577 |
|
|
if (current && current.index() > next.index()) {
|
3578 |
|
|
anim.reverse();
|
3579 |
|
|
}
|
3580 |
|
|
|
3581 |
|
|
return coreAnimation.apply(this, [anim, current, next]);
|
3582 |
|
|
},
|
3583 |
|
|
|
3584 |
|
|
'slide-left': function(current, next) {
|
3585 |
|
|
return coreAnimation.apply(this, ['uk-animation-slide-left', current, next]);
|
3586 |
|
|
},
|
3587 |
|
|
|
3588 |
|
|
'slide-right': function(current, next) {
|
3589 |
|
|
return coreAnimation.apply(this, ['uk-animation-slide-right', current, next]);
|
3590 |
|
|
},
|
3591 |
|
|
|
3592 |
|
|
'slide-horizontal': function(current, next, dir) {
|
3593 |
|
|
|
3594 |
|
|
var anim = ['uk-animation-slide-right', 'uk-animation-slide-left'];
|
3595 |
|
|
|
3596 |
|
|
if (current && current.index() > next.index()) {
|
3597 |
|
|
anim.reverse();
|
3598 |
|
|
}
|
3599 |
|
|
|
3600 |
|
|
return coreAnimation.apply(this, [anim, current, next]);
|
3601 |
|
|
},
|
3602 |
|
|
|
3603 |
|
|
'scale': function(current, next) {
|
3604 |
|
|
return coreAnimation.apply(this, ['uk-animation-scale-up', current, next]);
|
3605 |
|
|
}
|
3606 |
|
|
};
|
3607 |
|
|
|
3608 |
|
|
UI.switcher.animations = Animations;
|
3609 |
|
|
|
3610 |
|
|
|
3611 |
|
|
// helpers
|
3612 |
|
|
|
3613 |
|
|
function coreAnimation(cls, current, next) {
|
3614 |
|
|
|
3615 |
|
|
var d = UI.$.Deferred(), clsIn = cls, clsOut = cls, release;
|
3616 |
|
|
|
3617 |
|
|
if (next[0]===current[0]) {
|
3618 |
|
|
d.resolve();
|
3619 |
|
|
return d.promise();
|
3620 |
|
|
}
|
3621 |
|
|
|
3622 |
|
|
if (typeof(cls) == 'object') {
|
3623 |
|
|
clsIn = cls[0];
|
3624 |
|
|
clsOut = cls[1] || cls[0];
|
3625 |
|
|
}
|
3626 |
|
|
|
3627 |
|
|
UI.$body.css('overflow-x', 'hidden'); // fix scroll jumping in iOS
|
3628 |
|
|
|
3629 |
|
|
release = function() {
|
3630 |
|
|
|
3631 |
|
|
if (current) current.hide().removeClass('uk-active '+clsOut+' uk-animation-reverse');
|
3632 |
|
|
|
3633 |
|
|
next.addClass(clsIn).one(UI.support.animation.end, function() {
|
3634 |
|
|
|
3635 |
|
|
setTimeout(function () {
|
3636 |
|
|
next.removeClass(''+clsIn+'').css({opacity:'', display:''});
|
3637 |
|
|
}, 0);
|
3638 |
|
|
|
3639 |
|
|
d.resolve();
|
3640 |
|
|
|
3641 |
|
|
UI.$body.css('overflow-x', '');
|
3642 |
|
|
|
3643 |
|
|
if (current) current.css({opacity:'', display:''});
|
3644 |
|
|
|
3645 |
|
|
}.bind(this)).show();
|
3646 |
|
|
};
|
3647 |
|
|
|
3648 |
|
|
next.css('animation-duration', this.options.duration+'ms');
|
3649 |
|
|
|
3650 |
|
|
if (current && current.length) {
|
3651 |
|
|
|
3652 |
|
|
current.css('animation-duration', this.options.duration+'ms');
|
3653 |
|
|
|
3654 |
|
|
current.css('display', 'none').addClass(clsOut+' uk-animation-reverse').one(UI.support.animation.end, function() {
|
3655 |
|
|
release();
|
3656 |
|
|
}.bind(this)).css('display', '');
|
3657 |
|
|
|
3658 |
|
|
} else {
|
3659 |
|
|
next.addClass('uk-active');
|
3660 |
|
|
release();
|
3661 |
|
|
}
|
3662 |
|
|
|
3663 |
|
|
return d.promise();
|
3664 |
|
|
}
|
3665 |
|
|
|
3666 |
|
|
})(UIkit2);
|
3667 |
|
|
|
3668 |
|
|
(function(UI) {
|
3669 |
|
|
|
3670 |
|
|
"use strict";
|
3671 |
|
|
|
3672 |
|
|
UI.component('tab', {
|
3673 |
|
|
|
3674 |
|
|
defaults: {
|
3675 |
|
|
target : '>li:not(.uk-tab-responsive, .uk-disabled)',
|
3676 |
|
|
connect : false,
|
3677 |
|
|
active : 0,
|
3678 |
|
|
animation : false,
|
3679 |
|
|
duration : 200,
|
3680 |
|
|
swiping : true
|
3681 |
|
|
},
|
3682 |
|
|
|
3683 |
|
|
boot: function() {
|
3684 |
|
|
|
3685 |
|
|
// init code
|
3686 |
|
|
UI.ready(function(context) {
|
3687 |
|
|
|
3688 |
|
|
UI.$('[data-uk-tab]', context).each(function() {
|
3689 |
|
|
|
3690 |
|
|
var tab = UI.$(this);
|
3691 |
|
|
|
3692 |
|
|
if (!tab.data('tab')) {
|
3693 |
|
|
var obj = UI.tab(tab, UI.Utils.options(tab.attr('data-uk-tab')));
|
3694 |
|
|
}
|
3695 |
|
|
});
|
3696 |
|
|
});
|
3697 |
|
|
},
|
3698 |
|
|
|
3699 |
|
|
init: function() {
|
3700 |
|
|
|
3701 |
|
|
var $this = this;
|
3702 |
|
|
|
3703 |
|
|
this.current = false;
|
3704 |
|
|
|
3705 |
|
|
this.on('click.uk.tab', this.options.target, function(e) {
|
3706 |
|
|
|
3707 |
|
|
e.preventDefault();
|
3708 |
|
|
|
3709 |
|
|
if ($this.switcher && $this.switcher.animating) {
|
3710 |
|
|
return;
|
3711 |
|
|
}
|
3712 |
|
|
|
3713 |
|
|
var current = $this.find($this.options.target).not(this);
|
3714 |
|
|
|
3715 |
|
|
current.removeClass('uk-active').blur();
|
3716 |
|
|
|
3717 |
|
|
$this.trigger('change.uk.tab', [UI.$(this).addClass('uk-active'), $this.current]);
|
3718 |
|
|
|
3719 |
|
|
$this.current = UI.$(this);
|
3720 |
|
|
|
3721 |
|
|
// Update ARIA
|
3722 |
|
|
if (!$this.options.connect) {
|
3723 |
|
|
current.attr('aria-expanded', 'false');
|
3724 |
|
|
UI.$(this).attr('aria-expanded', 'true');
|
3725 |
|
|
}
|
3726 |
|
|
});
|
3727 |
|
|
|
3728 |
|
|
if (this.options.connect) {
|
3729 |
|
|
this.connect = UI.$(this.options.connect);
|
3730 |
|
|
}
|
3731 |
|
|
|
3732 |
|
|
// init responsive tab
|
3733 |
|
|
this.responsivetab = UI.$('<li class="uk-tab-responsive uk-active"><a></a></li>').append('<div class="uk-dropdown uk-dropdown-small"><ul class="uk-nav uk-nav-dropdown"></ul><div>');
|
3734 |
|
|
|
3735 |
|
|
this.responsivetab.dropdown = this.responsivetab.find('.uk-dropdown');
|
3736 |
|
|
this.responsivetab.lst = this.responsivetab.dropdown.find('ul');
|
3737 |
|
|
this.responsivetab.caption = this.responsivetab.find('a:first');
|
3738 |
|
|
|
3739 |
|
|
if (this.element.hasClass('uk-tab-bottom')) this.responsivetab.dropdown.addClass('uk-dropdown-up');
|
3740 |
|
|
|
3741 |
|
|
// handle click
|
3742 |
|
|
this.responsivetab.lst.on('click.uk.tab', 'a', function(e) {
|
3743 |
|
|
|
3744 |
|
|
e.preventDefault();
|
3745 |
|
|
e.stopPropagation();
|
3746 |
|
|
|
3747 |
|
|
var link = UI.$(this);
|
3748 |
|
|
|
3749 |
|
|
$this.element.children('li:not(.uk-tab-responsive)').eq(link.data('index')).trigger('click');
|
3750 |
|
|
});
|
3751 |
|
|
|
3752 |
|
|
this.on('show.uk.switcher change.uk.tab', function(e, tab) {
|
3753 |
|
|
$this.responsivetab.caption.html(tab.text());
|
3754 |
|
|
});
|
3755 |
|
|
|
3756 |
|
|
this.element.append(this.responsivetab);
|
3757 |
|
|
|
3758 |
|
|
// init UIkit components
|
3759 |
|
|
if (this.options.connect) {
|
3760 |
|
|
|
3761 |
|
|
this.switcher = UI.switcher(this.element, {
|
3762 |
|
|
toggle : '>li:not(.uk-tab-responsive)',
|
3763 |
|
|
connect : this.options.connect,
|
3764 |
|
|
active : this.options.active,
|
3765 |
|
|
animation : this.options.animation,
|
3766 |
|
|
duration : this.options.duration,
|
3767 |
|
|
swiping : this.options.swiping
|
3768 |
|
|
});
|
3769 |
|
|
}
|
3770 |
|
|
|
3771 |
|
|
UI.dropdown(this.responsivetab, {mode: 'click', preventflip: 'y'});
|
3772 |
|
|
|
3773 |
|
|
// init
|
3774 |
|
|
$this.trigger('change.uk.tab', [this.element.find(this.options.target).not('.uk-tab-responsive').filter('.uk-active')]);
|
3775 |
|
|
|
3776 |
|
|
this.check();
|
3777 |
|
|
|
3778 |
|
|
UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){
|
3779 |
|
|
if ($this.element.is(':visible')) $this.check();
|
3780 |
|
|
}, 100));
|
3781 |
|
|
|
3782 |
|
|
this.on('display.uk.check', function(){
|
3783 |
|
|
if ($this.element.is(':visible')) $this.check();
|
3784 |
|
|
});
|
3785 |
|
|
},
|
3786 |
|
|
|
3787 |
|
|
check: function() {
|
3788 |
|
|
|
3789 |
|
|
var children = this.element.children('li:not(.uk-tab-responsive)').removeClass('uk-hidden');
|
3790 |
|
|
|
3791 |
|
|
if (!children.length) {
|
3792 |
|
|
this.responsivetab.addClass('uk-hidden');
|
3793 |
|
|
return;
|
3794 |
|
|
}
|
3795 |
|
|
|
3796 |
|
|
var top = (children.eq(0).offset().top + Math.ceil(children.eq(0).height()/2)),
|
3797 |
|
|
doresponsive = false,
|
3798 |
|
|
item, link, clone;
|
3799 |
|
|
|
3800 |
|
|
this.responsivetab.lst.empty();
|
3801 |
|
|
|
3802 |
|
|
children.each(function(){
|
3803 |
|
|
|
3804 |
|
|
if (UI.$(this).offset().top > top) {
|
3805 |
|
|
doresponsive = true;
|
3806 |
|
|
}
|
3807 |
|
|
});
|
3808 |
|
|
|
3809 |
|
|
if (doresponsive) {
|
3810 |
|
|
|
3811 |
|
|
for (var i = 0; i < children.length; i++) {
|
3812 |
|
|
|
3813 |
|
|
item = UI.$(children.eq(i));
|
3814 |
|
|
link = item.find('a');
|
3815 |
|
|
|
3816 |
|
|
if (item.css('float') != 'none' && !item.attr('uk-dropdown')) {
|
3817 |
|
|
|
3818 |
|
|
if (!item.hasClass('uk-disabled')) {
|
3819 |
|
|
|
3820 |
|
|
clone = UI.$(item[0].outerHTML);
|
3821 |
|
|
clone.find('a').data('index', i);
|
3822 |
|
|
|
3823 |
|
|
this.responsivetab.lst.append(clone);
|
3824 |
|
|
}
|
3825 |
|
|
|
3826 |
|
|
item.addClass('uk-hidden');
|
3827 |
|
|
}
|
3828 |
|
|
}
|
3829 |
|
|
}
|
3830 |
|
|
|
3831 |
|
|
this.responsivetab[this.responsivetab.lst.children('li').length ? 'removeClass':'addClass']('uk-hidden');
|
3832 |
|
|
}
|
3833 |
|
|
});
|
3834 |
|
|
|
3835 |
|
|
})(UIkit2);
|
3836 |
|
|
|
3837 |
|
|
(function(UI){
|
3838 |
|
|
|
3839 |
|
|
"use strict";
|
3840 |
|
|
|
3841 |
|
|
UI.component('cover', {
|
3842 |
|
|
|
3843 |
|
|
defaults: {
|
3844 |
|
|
automute : true
|
3845 |
|
|
},
|
3846 |
|
|
|
3847 |
|
|
boot: function() {
|
3848 |
|
|
|
3849 |
|
|
// auto init
|
3850 |
|
|
UI.ready(function(context) {
|
3851 |
|
|
|
3852 |
|
|
UI.$('[data-uk-cover]', context).each(function(){
|
3853 |
|
|
|
3854 |
|
|
var ele = UI.$(this);
|
3855 |
|
|
|
3856 |
|
|
if(!ele.data('cover')) {
|
3857 |
|
|
var plugin = UI.cover(ele, UI.Utils.options(ele.attr('data-uk-cover')));
|
3858 |
|
|
}
|
3859 |
|
|
});
|
3860 |
|
|
});
|
3861 |
|
|
},
|
3862 |
|
|
|
3863 |
|
|
init: function() {
|
3864 |
|
|
|
3865 |
|
|
this.parent = this.element.parent();
|
3866 |
|
|
|
3867 |
|
|
UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(){
|
3868 |
|
|
this.check();
|
3869 |
|
|
}.bind(this), 100));
|
3870 |
|
|
|
3871 |
|
|
this.on('display.uk.check', function(e) {
|
3872 |
|
|
if (this.element.is(':visible')) this.check();
|
3873 |
|
|
}.bind(this));
|
3874 |
|
|
|
3875 |
|
|
this.check();
|
3876 |
|
|
|
3877 |
|
|
if (this.element.is('iframe') && this.options.automute) {
|
3878 |
|
|
|
3879 |
|
|
var src = this.element.attr('src');
|
3880 |
|
|
|
3881 |
|
|
this.element.attr('src', '').on('load', function(){
|
3882 |
|
|
this.contentWindow.postMessage('{ "event": "command", "func": "mute", "method":"setVolume", "value":0}', '*');
|
3883 |
|
|
}).attr('src', [src, (src.indexOf('?') > -1 ? '&':'?'), 'enablejsapi=1&api=1'].join(''));
|
3884 |
|
|
}
|
3885 |
|
|
},
|
3886 |
|
|
|
3887 |
|
|
check: function() {
|
3888 |
|
|
|
3889 |
|
|
this.element.css({ width : '', height : '' });
|
3890 |
|
|
|
3891 |
|
|
this.dimension = {w: this.element.width(), h: this.element.height()};
|
3892 |
|
|
|
3893 |
|
|
if (this.element.attr('width') && !isNaN(this.element.attr('width'))) {
|
3894 |
|
|
this.dimension.w = this.element.attr('width');
|
3895 |
|
|
}
|
3896 |
|
|
|
3897 |
|
|
if (this.element.attr('height') && !isNaN(this.element.attr('height'))) {
|
3898 |
|
|
this.dimension.h = this.element.attr('height');
|
3899 |
|
|
}
|
3900 |
|
|
|
3901 |
|
|
this.ratio = this.dimension.w / this.dimension.h;
|
3902 |
|
|
|
3903 |
|
|
var w = this.parent.width(), h = this.parent.height(), width, height;
|
3904 |
|
|
|
3905 |
|
|
// if element height < parent height (gap underneath)
|
3906 |
|
|
if ((w / this.ratio) < h) {
|
3907 |
|
|
|
3908 |
|
|
width = Math.ceil(h * this.ratio);
|
3909 |
|
|
height = h;
|
3910 |
|
|
|
3911 |
|
|
// element width < parent width (gap to right)
|
3912 |
|
|
} else {
|
3913 |
|
|
|
3914 |
|
|
width = w;
|
3915 |
|
|
height = Math.ceil(w / this.ratio);
|
3916 |
|
|
}
|
3917 |
|
|
|
3918 |
|
|
this.element.css({ width : width, height : height });
|
3919 |
|
|
}
|
3920 |
|
|
});
|
3921 |
|
|
|
3922 |
|
|
})(UIkit2);
|
3923 |
|
|
|
3924 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
3925 |
|
|
(function(addon) {
|
3926 |
|
|
var component;
|
3927 |
|
|
|
3928 |
|
|
if (window.UIkit2) {
|
3929 |
|
|
component = addon(UIkit2);
|
3930 |
|
|
}
|
3931 |
|
|
|
3932 |
|
|
if (typeof define == 'function' && define.amd) {
|
3933 |
|
|
define('uikit-accordion', ['uikit'], function(){
|
3934 |
|
|
return component || addon(UIkit2);
|
3935 |
|
|
});
|
3936 |
|
|
}
|
3937 |
|
|
})(function(UI){
|
3938 |
|
|
|
3939 |
|
|
"use strict";
|
3940 |
|
|
|
3941 |
|
|
UI.component('accordion', {
|
3942 |
|
|
|
3943 |
|
|
defaults: {
|
3944 |
|
|
showfirst : true,
|
3945 |
|
|
collapse : true,
|
3946 |
|
|
animate : true,
|
3947 |
|
|
easing : 'swing',
|
3948 |
|
|
duration : 300,
|
3949 |
|
|
toggle : '.uk-accordion-title',
|
3950 |
|
|
containers : '.uk-accordion-content',
|
3951 |
|
|
clsactive : 'uk-active'
|
3952 |
|
|
},
|
3953 |
|
|
|
3954 |
|
|
boot: function() {
|
3955 |
|
|
|
3956 |
|
|
// init code
|
3957 |
|
|
UI.ready(function(context) {
|
3958 |
|
|
|
3959 |
|
|
setTimeout(function(){
|
3960 |
|
|
|
3961 |
|
|
UI.$('[data-uk-accordion]', context).each(function(){
|
3962 |
|
|
|
3963 |
|
|
var ele = UI.$(this);
|
3964 |
|
|
|
3965 |
|
|
if (!ele.data('accordion')) {
|
3966 |
|
|
UI.accordion(ele, UI.Utils.options(ele.attr('data-uk-accordion')));
|
3967 |
|
|
}
|
3968 |
|
|
});
|
3969 |
|
|
|
3970 |
|
|
}, 0);
|
3971 |
|
|
});
|
3972 |
|
|
},
|
3973 |
|
|
|
3974 |
|
|
init: function() {
|
3975 |
|
|
|
3976 |
|
|
var $this = this;
|
3977 |
|
|
|
3978 |
|
|
this.element.on('click.uk.accordion', this.options.toggle, function(e) {
|
3979 |
|
|
|
3980 |
|
|
e.preventDefault();
|
3981 |
|
|
|
3982 |
|
|
$this.toggleItem(UI.$(this).data('wrapper'), $this.options.animate, $this.options.collapse);
|
3983 |
|
|
});
|
3984 |
|
|
|
3985 |
|
|
this.update(true);
|
3986 |
|
|
|
3987 |
|
|
UI.domObserve(this.element, function(e) {
|
3988 |
|
|
if ($this.element.children($this.options.containers).length) {
|
3989 |
|
|
$this.update();
|
3990 |
|
|
}
|
3991 |
|
|
});
|
3992 |
|
|
},
|
3993 |
|
|
|
3994 |
|
|
toggleItem: function(wrapper, animated, collapse) {
|
3995 |
|
|
|
3996 |
|
|
var $this = this;
|
3997 |
|
|
|
3998 |
|
|
wrapper.data('toggle').toggleClass(this.options.clsactive);
|
3999 |
|
|
wrapper.data('content').toggleClass(this.options.clsactive);
|
4000 |
|
|
|
4001 |
|
|
var active = wrapper.data('toggle').hasClass(this.options.clsactive);
|
4002 |
|
|
|
4003 |
|
|
if (collapse) {
|
4004 |
|
|
this.toggle.not(wrapper.data('toggle')).removeClass(this.options.clsactive);
|
4005 |
|
|
this.content.not(wrapper.data('content')).removeClass(this.options.clsactive)
|
4006 |
|
|
.parent().stop().css('overflow', 'hidden').animate({ height: 0 }, {easing: this.options.easing, duration: animated ? this.options.duration : 0}).attr('aria-expanded', 'false');
|
4007 |
|
|
}
|
4008 |
|
|
|
4009 |
|
|
wrapper.stop().css('overflow', 'hidden');
|
4010 |
|
|
|
4011 |
|
|
if (animated) {
|
4012 |
|
|
|
4013 |
|
|
wrapper.animate({ height: active ? getHeight(wrapper.data('content')) : 0 }, {easing: this.options.easing, duration: this.options.duration, complete: function() {
|
4014 |
|
|
|
4015 |
|
|
if (active) {
|
4016 |
|
|
wrapper.css({'overflow': '', 'height': 'auto'});
|
4017 |
|
|
UI.Utils.checkDisplay(wrapper.data('content'));
|
4018 |
|
|
}
|
4019 |
|
|
|
4020 |
|
|
$this.trigger('display.uk.check');
|
4021 |
|
|
}});
|
4022 |
|
|
|
4023 |
|
|
} else {
|
4024 |
|
|
|
4025 |
|
|
wrapper.height(active ? 'auto' : 0);
|
4026 |
|
|
|
4027 |
|
|
if (active) {
|
4028 |
|
|
wrapper.css({'overflow': ''});
|
4029 |
|
|
UI.Utils.checkDisplay(wrapper.data('content'));
|
4030 |
|
|
}
|
4031 |
|
|
|
4032 |
|
|
this.trigger('display.uk.check');
|
4033 |
|
|
}
|
4034 |
|
|
|
4035 |
|
|
// Update ARIA
|
4036 |
|
|
wrapper.attr('aria-expanded', active);
|
4037 |
|
|
|
4038 |
|
|
this.element.trigger('toggle.uk.accordion', [active, wrapper.data('toggle'), wrapper.data('content')]);
|
4039 |
|
|
},
|
4040 |
|
|
|
4041 |
|
|
update: function(init) {
|
4042 |
|
|
|
4043 |
|
|
var $this = this, $content, $wrapper, $toggle;
|
4044 |
|
|
|
4045 |
|
|
this.toggle = this.find(this.options.toggle);
|
4046 |
|
|
this.content = this.find(this.options.containers);
|
4047 |
|
|
|
4048 |
|
|
this.content.each(function(index) {
|
4049 |
|
|
|
4050 |
|
|
$content = UI.$(this);
|
4051 |
|
|
|
4052 |
|
|
if ($content.parent().data('wrapper')) {
|
4053 |
|
|
$wrapper = $content.parent();
|
4054 |
|
|
} else {
|
4055 |
|
|
$wrapper = UI.$(this).wrap('<div data-wrapper="true" style="overflow:hidden;height:0;position:relative;"></div>').parent();
|
4056 |
|
|
|
4057 |
|
|
// Init ARIA
|
4058 |
|
|
$wrapper.attr('aria-expanded', 'false');
|
4059 |
|
|
}
|
4060 |
|
|
|
4061 |
|
|
$toggle = $this.toggle.eq(index);
|
4062 |
|
|
|
4063 |
|
|
$wrapper.data('toggle', $toggle);
|
4064 |
|
|
$wrapper.data('content', $content);
|
4065 |
|
|
$toggle.data('wrapper', $wrapper);
|
4066 |
|
|
$content.data('wrapper', $wrapper);
|
4067 |
|
|
});
|
4068 |
|
|
|
4069 |
|
|
this.element.trigger('update.uk.accordion', [this]);
|
4070 |
|
|
|
4071 |
|
|
if (init && this.options.showfirst) {
|
4072 |
|
|
this.toggleItem(this.toggle.eq(0).data('wrapper'), false, false);
|
4073 |
|
|
}
|
4074 |
|
|
}
|
4075 |
|
|
|
4076 |
|
|
});
|
4077 |
|
|
|
4078 |
|
|
// helper
|
4079 |
|
|
|
4080 |
|
|
function getHeight(ele) {
|
4081 |
|
|
|
4082 |
|
|
var $ele = UI.$(ele), height = "auto";
|
4083 |
|
|
|
4084 |
|
|
if ($ele.is(":visible")) {
|
4085 |
|
|
height = $ele.outerHeight();
|
4086 |
|
|
} else {
|
4087 |
|
|
|
4088 |
|
|
var tmp = {
|
4089 |
|
|
position : $ele.css('position'),
|
4090 |
|
|
visibility : $ele.css('visibility'),
|
4091 |
|
|
display : $ele.css('display')
|
4092 |
|
|
};
|
4093 |
|
|
|
4094 |
|
|
height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight();
|
4095 |
|
|
|
4096 |
|
|
$ele.css(tmp); // reset element
|
4097 |
|
|
}
|
4098 |
|
|
|
4099 |
|
|
return height;
|
4100 |
|
|
}
|
4101 |
|
|
|
4102 |
|
|
return UI.accordion;
|
4103 |
|
|
});
|
4104 |
|
|
|
4105 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
4106 |
|
|
(function(addon) {
|
4107 |
|
|
|
4108 |
|
|
var component;
|
4109 |
|
|
|
4110 |
|
|
if (window.UIkit2) {
|
4111 |
|
|
component = addon(UIkit2);
|
4112 |
|
|
}
|
4113 |
|
|
|
4114 |
|
|
if (typeof define == 'function' && define.amd) {
|
4115 |
|
|
define('uikit-autocomplete', ['uikit'], function(){
|
4116 |
|
|
return component || addon(UIkit2);
|
4117 |
|
|
});
|
4118 |
|
|
}
|
4119 |
|
|
|
4120 |
|
|
})(function(UI){
|
4121 |
|
|
|
4122 |
|
|
"use strict";
|
4123 |
|
|
|
4124 |
|
|
var active;
|
4125 |
|
|
|
4126 |
|
|
UI.component('autocomplete', {
|
4127 |
|
|
|
4128 |
|
|
defaults: {
|
4129 |
|
|
minLength: 3,
|
4130 |
|
|
param: 'search',
|
4131 |
|
|
method: 'post',
|
4132 |
|
|
delay: 300,
|
4133 |
|
|
loadingClass: 'uk-loading',
|
4134 |
|
|
flipDropdown: false,
|
4135 |
|
|
skipClass: 'uk-skip',
|
4136 |
|
|
hoverClass: 'uk-active',
|
4137 |
|
|
source: null,
|
4138 |
|
|
renderer: null,
|
4139 |
|
|
|
4140 |
|
|
// template
|
4141 |
|
|
|
4142 |
|
|
template: '<ul class="uk-nav uk-nav-autocomplete uk-autocomplete-results">{{~items}}<li data-value="{{$item.value}}"><a>{{$item.value}}</a></li>{{/items}}</ul>'
|
4143 |
|
|
},
|
4144 |
|
|
|
4145 |
|
|
visible : false,
|
4146 |
|
|
value : null,
|
4147 |
|
|
selected : null,
|
4148 |
|
|
|
4149 |
|
|
boot: function() {
|
4150 |
|
|
|
4151 |
|
|
// init code
|
4152 |
|
|
UI.$html.on('focus.autocomplete.uikit', '[data-uk-autocomplete]', function(e) {
|
4153 |
|
|
|
4154 |
|
|
var ele = UI.$(this);
|
4155 |
|
|
|
4156 |
|
|
if (!ele.data('autocomplete')) {
|
4157 |
|
|
UI.autocomplete(ele, UI.Utils.options(ele.attr('data-uk-autocomplete')));
|
4158 |
|
|
}
|
4159 |
|
|
});
|
4160 |
|
|
|
4161 |
|
|
// register outer click for autocompletes
|
4162 |
|
|
UI.$html.on('click.autocomplete.uikit', function(e) {
|
4163 |
|
|
if (active && e.target!=active.input[0]) active.hide();
|
4164 |
|
|
});
|
4165 |
|
|
},
|
4166 |
|
|
|
4167 |
|
|
init: function() {
|
4168 |
|
|
|
4169 |
|
|
var $this = this,
|
4170 |
|
|
select = false,
|
4171 |
|
|
trigger = UI.Utils.debounce(function(e) {
|
4172 |
|
|
|
4173 |
|
|
if (select) {
|
4174 |
|
|
return (select = false);
|
4175 |
|
|
}
|
4176 |
|
|
|
4177 |
|
|
$this.handle();
|
4178 |
|
|
}, this.options.delay);
|
4179 |
|
|
|
4180 |
|
|
|
4181 |
|
|
this.dropdown = this.find('.uk-dropdown');
|
4182 |
|
|
this.template = this.find('script[type="text/autocomplete"]').html();
|
4183 |
|
|
this.template = UI.Utils.template(this.template || this.options.template);
|
4184 |
|
|
this.input = this.find("input:first").attr("autocomplete", "off");
|
4185 |
|
|
|
4186 |
|
|
if (!this.dropdown.length) {
|
4187 |
|
|
this.dropdown = UI.$('<div class="uk-dropdown"></div>').appendTo(this.element);
|
4188 |
|
|
}
|
4189 |
|
|
|
4190 |
|
|
if (this.options.flipDropdown) {
|
4191 |
|
|
this.dropdown.addClass('uk-dropdown-flip');
|
4192 |
|
|
}
|
4193 |
|
|
|
4194 |
|
|
this.dropdown.attr('aria-expanded', 'false');
|
4195 |
|
|
|
4196 |
|
|
this.input.on({
|
4197 |
|
|
|
4198 |
|
|
keydown: function(e) {
|
4199 |
|
|
|
4200 |
|
|
if (e && e.which && !e.shiftKey && $this.visible) {
|
4201 |
|
|
|
4202 |
|
|
switch (e.which) {
|
4203 |
|
|
case 13: // enter
|
4204 |
|
|
select = true;
|
4205 |
|
|
|
4206 |
|
|
if ($this.selected) {
|
4207 |
|
|
e.preventDefault();
|
4208 |
|
|
$this.select();
|
4209 |
|
|
}
|
4210 |
|
|
break;
|
4211 |
|
|
case 38: // up
|
4212 |
|
|
e.preventDefault();
|
4213 |
|
|
$this.pick('prev', true);
|
4214 |
|
|
break;
|
4215 |
|
|
case 40: // down
|
4216 |
|
|
e.preventDefault();
|
4217 |
|
|
$this.pick('next', true);
|
4218 |
|
|
break;
|
4219 |
|
|
case 27:
|
4220 |
|
|
case 9: // esc, tab
|
4221 |
|
|
$this.hide();
|
4222 |
|
|
break;
|
4223 |
|
|
default:
|
4224 |
|
|
break;
|
4225 |
|
|
}
|
4226 |
|
|
}
|
4227 |
|
|
|
4228 |
|
|
},
|
4229 |
|
|
|
4230 |
|
|
keyup: trigger
|
4231 |
|
|
});
|
4232 |
|
|
|
4233 |
|
|
this.dropdown.on('click', '.uk-autocomplete-results > *', function(){
|
4234 |
|
|
$this.select();
|
4235 |
|
|
});
|
4236 |
|
|
|
4237 |
|
|
this.dropdown.on('mouseover', '.uk-autocomplete-results > *', function(){
|
4238 |
|
|
$this.pick(UI.$(this));
|
4239 |
|
|
});
|
4240 |
|
|
|
4241 |
|
|
this.triggercomplete = trigger;
|
4242 |
|
|
},
|
4243 |
|
|
|
4244 |
|
|
handle: function() {
|
4245 |
|
|
|
4246 |
|
|
var $this = this, old = this.value;
|
4247 |
|
|
|
4248 |
|
|
this.value = this.input.val();
|
4249 |
|
|
|
4250 |
|
|
if (this.value.length < this.options.minLength) return this.hide();
|
4251 |
|
|
|
4252 |
|
|
if (this.value != old) {
|
4253 |
|
|
$this.request();
|
4254 |
|
|
}
|
4255 |
|
|
|
4256 |
|
|
return this;
|
4257 |
|
|
},
|
4258 |
|
|
|
4259 |
|
|
pick: function(item, scrollinview) {
|
4260 |
|
|
|
4261 |
|
|
var $this = this,
|
4262 |
|
|
items = UI.$(this.dropdown.find('.uk-autocomplete-results').children(':not(.'+this.options.skipClass+')')),
|
4263 |
|
|
selected = false;
|
4264 |
|
|
|
4265 |
|
|
if (typeof item !== "string" && !item.hasClass(this.options.skipClass)) {
|
4266 |
|
|
selected = item;
|
4267 |
|
|
} else if (item == 'next' || item == 'prev') {
|
4268 |
|
|
|
4269 |
|
|
if (this.selected) {
|
4270 |
|
|
var index = items.index(this.selected);
|
4271 |
|
|
|
4272 |
|
|
if (item == 'next') {
|
4273 |
|
|
selected = items.eq(index + 1 < items.length ? index + 1 : 0);
|
4274 |
|
|
} else {
|
4275 |
|
|
selected = items.eq(index - 1 < 0 ? items.length - 1 : index - 1);
|
4276 |
|
|
}
|
4277 |
|
|
|
4278 |
|
|
} else {
|
4279 |
|
|
selected = items[(item == 'next') ? 'first' : 'last']();
|
4280 |
|
|
}
|
4281 |
|
|
|
4282 |
|
|
selected = UI.$(selected);
|
4283 |
|
|
}
|
4284 |
|
|
|
4285 |
|
|
if (selected && selected.length) {
|
4286 |
|
|
this.selected = selected;
|
4287 |
|
|
items.removeClass(this.options.hoverClass);
|
4288 |
|
|
this.selected.addClass(this.options.hoverClass);
|
4289 |
|
|
|
4290 |
|
|
// jump to selected if not in view
|
4291 |
|
|
if (scrollinview) {
|
4292 |
|
|
|
4293 |
|
|
var top = selected.position().top,
|
4294 |
|
|
scrollTop = $this.dropdown.scrollTop(),
|
4295 |
|
|
dpheight = $this.dropdown.height();
|
4296 |
|
|
|
4297 |
|
|
if (top > dpheight || top < 0) {
|
4298 |
|
|
$this.dropdown.scrollTop(scrollTop + top);
|
4299 |
|
|
}
|
4300 |
|
|
}
|
4301 |
|
|
}
|
4302 |
|
|
},
|
4303 |
|
|
|
4304 |
|
|
select: function() {
|
4305 |
|
|
|
4306 |
|
|
if(!this.selected) return;
|
4307 |
|
|
|
4308 |
|
|
var data = this.selected.data();
|
4309 |
|
|
|
4310 |
|
|
this.trigger('selectitem.uk.autocomplete', [data, this]);
|
4311 |
|
|
|
4312 |
|
|
if (data.value) {
|
4313 |
|
|
this.input.val(data.value).trigger('change');
|
4314 |
|
|
}
|
4315 |
|
|
|
4316 |
|
|
this.hide();
|
4317 |
|
|
},
|
4318 |
|
|
|
4319 |
|
|
show: function() {
|
4320 |
|
|
|
4321 |
|
|
if (this.visible) return;
|
4322 |
|
|
|
4323 |
|
|
this.visible = true;
|
4324 |
|
|
this.element.addClass('uk-open');
|
4325 |
|
|
|
4326 |
|
|
if (active && active!==this) {
|
4327 |
|
|
active.hide();
|
4328 |
|
|
}
|
4329 |
|
|
|
4330 |
|
|
active = this;
|
4331 |
|
|
|
4332 |
|
|
// Update aria
|
4333 |
|
|
this.dropdown.attr('aria-expanded', 'true');
|
4334 |
|
|
|
4335 |
|
|
return this;
|
4336 |
|
|
},
|
4337 |
|
|
|
4338 |
|
|
hide: function() {
|
4339 |
|
|
if (!this.visible) return;
|
4340 |
|
|
this.visible = false;
|
4341 |
|
|
this.element.removeClass('uk-open');
|
4342 |
|
|
|
4343 |
|
|
if (active === this) {
|
4344 |
|
|
active = false;
|
4345 |
|
|
}
|
4346 |
|
|
|
4347 |
|
|
// Update aria
|
4348 |
|
|
this.dropdown.attr('aria-expanded', 'false');
|
4349 |
|
|
|
4350 |
|
|
return this;
|
4351 |
|
|
},
|
4352 |
|
|
|
4353 |
|
|
request: function() {
|
4354 |
|
|
|
4355 |
|
|
var $this = this,
|
4356 |
|
|
release = function(data) {
|
4357 |
|
|
|
4358 |
|
|
if(data) {
|
4359 |
|
|
$this.render(data);
|
4360 |
|
|
}
|
4361 |
|
|
|
4362 |
|
|
$this.element.removeClass($this.options.loadingClass);
|
4363 |
|
|
};
|
4364 |
|
|
|
4365 |
|
|
this.element.addClass(this.options.loadingClass);
|
4366 |
|
|
|
4367 |
|
|
if (this.options.source) {
|
4368 |
|
|
|
4369 |
|
|
var source = this.options.source;
|
4370 |
|
|
|
4371 |
|
|
switch(typeof(this.options.source)) {
|
4372 |
|
|
case 'function':
|
4373 |
|
|
|
4374 |
|
|
this.options.source.apply(this, [release]);
|
4375 |
|
|
|
4376 |
|
|
break;
|
4377 |
|
|
|
4378 |
|
|
case 'object':
|
4379 |
|
|
|
4380 |
|
|
if(source.length) {
|
4381 |
|
|
|
4382 |
|
|
var items = [];
|
4383 |
|
|
|
4384 |
|
|
source.forEach(function(item){
|
4385 |
|
|
if(item.value && item.value.toLowerCase().indexOf($this.value.toLowerCase())!=-1) {
|
4386 |
|
|
items.push(item);
|
4387 |
|
|
}
|
4388 |
|
|
});
|
4389 |
|
|
|
4390 |
|
|
release(items);
|
4391 |
|
|
}
|
4392 |
|
|
|
4393 |
|
|
break;
|
4394 |
|
|
|
4395 |
|
|
case 'string':
|
4396 |
|
|
|
4397 |
|
|
var params ={};
|
4398 |
|
|
|
4399 |
|
|
params[this.options.param] = this.value;
|
4400 |
|
|
|
4401 |
|
|
UI.$.ajax({
|
4402 |
|
|
url: this.options.source,
|
4403 |
|
|
data: params,
|
4404 |
|
|
type: this.options.method,
|
4405 |
|
|
dataType: 'json'
|
4406 |
|
|
}).done(function(json) {
|
4407 |
|
|
release(json || []);
|
4408 |
|
|
});
|
4409 |
|
|
|
4410 |
|
|
break;
|
4411 |
|
|
|
4412 |
|
|
default:
|
4413 |
|
|
release(null);
|
4414 |
|
|
}
|
4415 |
|
|
|
4416 |
|
|
} else {
|
4417 |
|
|
this.element.removeClass($this.options.loadingClass);
|
4418 |
|
|
}
|
4419 |
|
|
},
|
4420 |
|
|
|
4421 |
|
|
render: function(data) {
|
4422 |
|
|
|
4423 |
|
|
this.dropdown.empty();
|
4424 |
|
|
|
4425 |
|
|
this.selected = false;
|
4426 |
|
|
|
4427 |
|
|
if (this.options.renderer) {
|
4428 |
|
|
|
4429 |
|
|
this.options.renderer.apply(this, [data]);
|
4430 |
|
|
|
4431 |
|
|
} else if(data && data.length) {
|
4432 |
|
|
|
4433 |
|
|
this.dropdown.append(this.template({items:data}));
|
4434 |
|
|
this.show();
|
4435 |
|
|
|
4436 |
|
|
this.trigger('show.uk.autocomplete');
|
4437 |
|
|
}
|
4438 |
|
|
|
4439 |
|
|
return this;
|
4440 |
|
|
}
|
4441 |
|
|
});
|
4442 |
|
|
|
4443 |
|
|
return UI.autocomplete;
|
4444 |
|
|
});
|
4445 |
|
|
|
4446 |
|
|
/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
4447 |
|
|
// removed moment_js from core
|
4448 |
|
|
// customized by tzd
|
4449 |
|
|
|
4450 |
|
|
(function(addon) {
|
4451 |
|
|
|
4452 |
|
|
var component;
|
4453 |
|
|
|
4454 |
|
|
if (window.UIkit) {
|
4455 |
|
|
component = addon(UIkit);
|
4456 |
|
|
}
|
4457 |
|
|
|
4458 |
|
|
if (typeof define == "function" && define.amd) {
|
4459 |
|
|
define("uikit-datepicker", ["uikit"], function(){
|
4460 |
|
|
return component || addon(UIkit);
|
4461 |
|
|
});
|
4462 |
|
|
}
|
4463 |
|
|
|
4464 |
|
|
})(function(UI){
|
4465 |
|
|
|
4466 |
|
|
"use strict";
|
4467 |
|
|
|
4468 |
|
|
// Datepicker
|
4469 |
|
|
|
4470 |
|
|
var active = false, dropdown;
|
4471 |
|
|
|
4472 |
|
|
UI.component('datepicker', {
|
4473 |
|
|
|
4474 |
|
|
defaults: {
|
4475 |
|
|
mobile: false,
|
4476 |
|
|
weekstart: 1,
|
4477 |
|
|
i18n: {
|
4478 |
|
|
months : ['January','February','March','April','May','June','July','August','September','October','November','December'],
|
4479 |
|
|
weekdays : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
|
4480 |
|
|
},
|
4481 |
|
|
format: "DD.MM.YYYY",
|
4482 |
|
|
offsettop: 5,
|
4483 |
|
|
maxDate: false,
|
4484 |
|
|
minDate: false,
|
4485 |
|
|
pos: 'auto',
|
4486 |
|
|
addClass: '',
|
4487 |
|
|
template: function(data, opts) {
|
4488 |
|
|
|
4489 |
|
|
var content = '', i;
|
4490 |
|
|
|
4491 |
|
|
content += '<div class="uk-datepicker-nav uk-clearfix">';
|
4492 |
|
|
content += '<a href="" class="uk-datepicker-previous"></a>';
|
4493 |
|
|
content += '<a href="" class="uk-datepicker-next"></a>';
|
4494 |
|
|
|
4495 |
|
|
if (UI.formSelect) {
|
4496 |
|
|
|
4497 |
|
|
var currentyear = (new Date()).getFullYear(), options = [], months, years, minYear, maxYear;
|
4498 |
|
|
|
4499 |
|
|
for (i=0;i<opts.i18n.months.length;i++) {
|
4500 |
|
|
if(i==data.month) {
|
4501 |
|
|
options.push('<option value="'+i+'" selected>'+opts.i18n.months[i]+'</option>');
|
4502 |
|
|
} else {
|
4503 |
|
|
options.push('<option value="'+i+'">'+opts.i18n.months[i]+'</option>');
|
4504 |
|
|
}
|
4505 |
|
|
}
|
4506 |
|
|
|
4507 |
|
|
months = '<span class="uk-form-select">'+ opts.i18n.months[data.month] + '<select class="update-picker-month">'+options.join('')+'</select></span>';
|
4508 |
|
|
|
4509 |
|
|
// --
|
4510 |
|
|
|
4511 |
|
|
options = [];
|
4512 |
|
|
|
4513 |
|
|
minYear = data.minDate ? data.minDate.year() : currentyear - 50;
|
4514 |
|
|
maxYear = data.maxDate ? data.maxDate.year() : currentyear + 20;
|
4515 |
|
|
|
4516 |
|
|
for (i=minYear;i<=maxYear;i++) {
|
4517 |
|
|
if (i == data.year) {
|
4518 |
|
|
options.push('<option value="'+i+'" selected>'+i+'</option>');
|
4519 |
|
|
} else {
|
4520 |
|
|
options.push('<option value="'+i+'">'+i+'</option>');
|
4521 |
|
|
}
|
4522 |
|
|
}
|
4523 |
|
|
|
4524 |
|
|
years = '<span class="uk-form-select">'+ data.year + '<select class="update-picker-year">'+options.join('')+'</select></span>';
|
4525 |
|
|
|
4526 |
|
|
content += '<div class="uk-datepicker-heading">'+ months + ' ' + years +'</div>';
|
4527 |
|
|
|
4528 |
|
|
} else {
|
4529 |
|
|
content += '<div class="uk-datepicker-heading">'+ opts.i18n.months[data.month] +' '+ data.year+'</div>';
|
4530 |
|
|
}
|
4531 |
|
|
|
4532 |
|
|
content += '</div>';
|
4533 |
|
|
|
4534 |
|
|
content += '<table class="uk-datepicker-table">';
|
4535 |
|
|
content += '<thead>';
|
4536 |
|
|
for(i = 0; i < data.weekdays.length; i++) {
|
4537 |
|
|
if (data.weekdays[i]) {
|
4538 |
|
|
content += '<th>'+data.weekdays[i]+'</th>';
|
4539 |
|
|
}
|
4540 |
|
|
}
|
4541 |
|
|
content += '</thead>';
|
4542 |
|
|
|
4543 |
|
|
content += '<tbody>';
|
4544 |
|
|
for(i = 0; i < data.days.length; i++) {
|
4545 |
|
|
if (data.days[i] && data.days[i].length){
|
4546 |
|
|
content += '<tr>';
|
4547 |
|
|
for(var d = 0; d < data.days[i].length; d++) {
|
4548 |
|
|
if (data.days[i][d]) {
|
4549 |
|
|
var day = data.days[i][d],
|
4550 |
|
|
cls = [];
|
4551 |
|
|
|
4552 |
|
|
if(!day.inmonth) cls.push("uk-datepicker-table-muted");
|
4553 |
|
|
if(day.selected) cls.push("uk-active");
|
4554 |
|
|
if(day.disabled) cls.push('uk-datepicker-date-disabled uk-datepicker-table-muted');
|
4555 |
|
|
|
4556 |
|
|
content += '<td><a href="" class="'+cls.join(" ")+'" data-date="'+day.day.format()+'">'+day.day.format("D")+'</a></td>';
|
4557 |
|
|
}
|
4558 |
|
|
}
|
4559 |
|
|
content += '</tr>';
|
4560 |
|
|
}
|
4561 |
|
|
}
|
4562 |
|
|
content += '</tbody>';
|
4563 |
|
|
|
4564 |
|
|
content += '</table>';
|
4565 |
|
|
|
4566 |
|
|
return content;
|
4567 |
|
|
}
|
4568 |
|
|
},
|
4569 |
|
|
|
4570 |
|
|
boot: function() {
|
4571 |
|
|
|
4572 |
|
|
UI.$win.on("resize orientationchange", function() {
|
4573 |
|
|
|
4574 |
|
|
if (active) {
|
4575 |
|
|
active.hide();
|
4576 |
|
|
}
|
4577 |
|
|
});
|
4578 |
|
|
|
4579 |
|
|
// init code
|
4580 |
|
|
UI.$html.on("focus.datepicker.uikit", "[data-uk-datepicker]", function(e) {
|
4581 |
|
|
|
4582 |
|
|
var ele = UI.$(this);
|
4583 |
|
|
|
4584 |
|
|
if (!ele.data("datepicker")) {
|
4585 |
|
|
e.preventDefault();
|
4586 |
|
|
UI.datepicker(ele, UI.Utils.options(ele.attr("data-uk-datepicker")));
|
4587 |
|
|
ele.trigger("focus");
|
4588 |
|
|
}
|
4589 |
|
|
});
|
4590 |
|
|
|
4591 |
|
|
UI.$html.on("click focus", '*', function(e) {
|
4592 |
|
|
|
4593 |
|
|
var target = UI.$(e.target);
|
4594 |
|
|
|
4595 |
|
|
if (active && target[0] != dropdown[0] && !target.data("datepicker") && !target.parents(".uk-datepicker:first").length) {
|
4596 |
|
|
active.hide();
|
4597 |
|
|
}
|
4598 |
|
|
});
|
4599 |
|
|
},
|
4600 |
|
|
|
4601 |
|
|
init: function() {
|
4602 |
|
|
|
4603 |
|
|
// use native datepicker on touch devices
|
4604 |
|
|
if (UI.support.touch && this.element.attr('type')=='date' && !this.options.mobile) {
|
4605 |
|
|
return;
|
4606 |
|
|
}
|
4607 |
|
|
|
4608 |
|
|
var $this = this;
|
4609 |
|
|
|
4610 |
|
|
this.current = this.element.val() ? moment(this.element.val(), this.options.format) : moment();
|
4611 |
|
|
|
4612 |
|
|
this.on("click focus", function(){
|
4613 |
|
|
if (active!==$this) $this.pick(this.value ? this.value:($this.options.minDate ? $this.options.minDate :''));
|
4614 |
|
|
}).on("change", function(){
|
4615 |
|
|
if ($this.element.val() && !moment($this.element.val(), $this.options.format).isValid()) {
|
4616 |
|
|
$this.element.val(moment().format($this.options.format));
|
4617 |
|
|
}
|
4618 |
|
|
});
|
4619 |
|
|
|
4620 |
|
|
// init dropdown
|
4621 |
|
|
if (!dropdown) {
|
4622 |
|
|
|
4623 |
|
|
dropdown = UI.$('<div class="uk-dropdown uk-datepicker '+$this.options.addClass+'"></div>');
|
4624 |
|
|
|
4625 |
|
|
dropdown.on("click", ".uk-datepicker-next, .uk-datepicker-previous, [data-date]", function(e){
|
4626 |
|
|
|
4627 |
|
|
e.stopPropagation();
|
4628 |
|
|
e.preventDefault();
|
4629 |
|
|
|
4630 |
|
|
var ele = UI.$(this);
|
4631 |
|
|
|
4632 |
|
|
if (ele.hasClass('uk-datepicker-date-disabled')) return false;
|
4633 |
|
|
|
4634 |
|
|
if (ele.is('[data-date]')) {
|
4635 |
|
|
active.current = moment(ele.data("date"));
|
4636 |
|
|
active.element.val(active.current.isValid() ? active.current.format(active.options.format) : null).trigger("change");
|
4637 |
|
|
dropdown.removeClass('uk-dropdown-shown');
|
4638 |
|
|
setTimeout(function() {
|
4639 |
|
|
dropdown.removeClass('uk-dropdown-active')
|
4640 |
|
|
},280);
|
4641 |
|
|
active.hide();
|
4642 |
|
|
} else {
|
4643 |
|
|
active.add((ele.hasClass("uk-datepicker-next") ? 1:-1), "months");
|
4644 |
|
|
}
|
4645 |
|
|
});
|
4646 |
|
|
|
4647 |
|
|
dropdown.on('change', '.update-picker-month, .update-picker-year', function(){
|
4648 |
|
|
|
4649 |
|
|
var select = UI.$(this);
|
4650 |
|
|
active[select.is('.update-picker-year') ? 'setYear':'setMonth'](Number(select.val()));
|
4651 |
|
|
});
|
4652 |
|
|
|
4653 |
|
|
dropdown.appendTo("body");
|
4654 |
|
|
}
|
4655 |
|
|
},
|
4656 |
|
|
|
4657 |
|
|
pick: function(initdate) {
|
4658 |
|
|
|
4659 |
|
|
var offset = this.element.offset(),
|
4660 |
|
|
offset_left = parseInt(offset.left),
|
4661 |
|
|
offset_top = parseInt(offset.top),
|
4662 |
|
|
css = {
|
4663 |
|
|
'left': offset_left,
|
4664 |
|
|
'right': ""
|
4665 |
|
|
};
|
4666 |
|
|
|
4667 |
|
|
this.current = isNaN(initdate) ? moment(initdate, this.options.format):moment();
|
4668 |
|
|
this.initdate = this.current.format("YYYY-MM-DD");
|
4669 |
|
|
|
4670 |
|
|
this.update();
|
4671 |
|
|
|
4672 |
|
|
// check if datepicker input is in modal
|
4673 |
|
|
if(($(this.element[0]).closest('.ui-dialog').length || $(this.element[0]).closest('.uk-modal').length) && !dropdown.hasClass('dropdown-modal')) {
|
4674 |
|
|
dropdown.addClass('dropdown-modal');
|
4675 |
|
|
}
|
4676 |
|
|
|
4677 |
|
|
if (UI.langdirection == 'right' || ( window.innerWidth - offset_left - dropdown.outerWidth() < 0 ) ) {
|
4678 |
|
|
css.right = (window.innerWidth - (window.innerWidth - $('body').width())) - (css.left + this.element.outerWidth());
|
4679 |
|
|
css.left = "";
|
4680 |
|
|
}
|
4681 |
|
|
|
4682 |
|
|
var posTop = (offset_top - this.element.outerHeight() + this.element.height()) - this.options.offsettop - dropdown.outerHeight(),
|
4683 |
|
|
posBottom = offset_top + this.element.outerHeight() + this.options.offsettop;
|
4684 |
|
|
|
4685 |
|
|
css.top = posBottom;
|
4686 |
|
|
|
4687 |
|
|
if (this.options.pos == 'top') {
|
4688 |
|
|
css.top = posTop;
|
4689 |
|
|
dropdown.addClass('dp-top');
|
4690 |
|
|
} else if(this.options.pos == 'auto' && (window.innerHeight - posBottom - dropdown.outerHeight() + UI.$win.scrollTop() < 0 && posTop >= 0) ) {
|
4691 |
|
|
css.top = posTop;
|
4692 |
|
|
dropdown.addClass('dp-top');
|
4693 |
|
|
}
|
4694 |
|
|
|
4695 |
|
|
css.minWidth = dropdown.actual('outerWidth');
|
4696 |
|
|
|
4697 |
|
|
dropdown.css(css).addClass('uk-dropdown-active uk-dropdown-shown');
|
4698 |
|
|
|
4699 |
|
|
|
4700 |
|
|
this.trigger('show.uk.datepicker');
|
4701 |
|
|
|
4702 |
|
|
active = this;
|
4703 |
|
|
},
|
4704 |
|
|
|
4705 |
|
|
add: function(unit, value) {
|
4706 |
|
|
this.current.add(unit, value);
|
4707 |
|
|
this.update();
|
4708 |
|
|
},
|
4709 |
|
|
|
4710 |
|
|
setMonth: function(month) {
|
4711 |
|
|
this.current.month(month);
|
4712 |
|
|
this.update();
|
4713 |
|
|
},
|
4714 |
|
|
|
4715 |
|
|
setYear: function(year) {
|
4716 |
|
|
this.current.year(year);
|
4717 |
|
|
this.update();
|
4718 |
|
|
},
|
4719 |
|
|
|
4720 |
|
|
update: function() {
|
4721 |
|
|
|
4722 |
|
|
var data = this.getRows(this.current.year(), this.current.month()),
|
4723 |
|
|
tpl = this.options.template(data, this.options);
|
4724 |
|
|
|
4725 |
|
|
dropdown.html(tpl);
|
4726 |
|
|
|
4727 |
|
|
this.trigger('update.uk.datepicker');
|
4728 |
|
|
},
|
4729 |
|
|
|
4730 |
|
|
getRows: function(year, month) {
|
4731 |
|
|
|
4732 |
|
|
var opts = this.options,
|
4733 |
|
|
now = moment().format('YYYY-MM-DD'),
|
4734 |
|
|
days = [31, (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month],
|
4735 |
|
|
before = new Date(year, month, 1, 12).getDay(),
|
4736 |
|
|
data = {"month":month, "year":year,"weekdays":[],"days":[], "maxDate": false, "minDate": false},
|
4737 |
|
|
row = [];
|
4738 |
|
|
|
4739 |
|
|
// We need these to be midday to avoid issues from DST transition protection.
|
4740 |
|
|
if (opts.maxDate!==false){
|
4741 |
|
|
data.maxDate = isNaN(opts.maxDate) ? moment(opts.maxDate, opts.format).startOf('day').hours(12) : moment().add(opts.maxDate, 'days').startOf('day').hours(12);
|
4742 |
|
|
}
|
4743 |
|
|
|
4744 |
|
|
if (opts.minDate!==false){
|
4745 |
|
|
data.minDate = isNaN(opts.minDate) ? moment(opts.minDate, opts.format).startOf('day').hours(12) : moment().add(opts.minDate-1, 'days').startOf('day').hours(12);
|
4746 |
|
|
}
|
4747 |
|
|
|
4748 |
|
|
data.weekdays = (function(){
|
4749 |
|
|
|
4750 |
|
|
for (var i=0, arr=[]; i < 7; i++) {
|
4751 |
|
|
|
4752 |
|
|
var day = i + (opts.weekstart || 0);
|
4753 |
|
|
|
4754 |
|
|
while (day >= 7) {
|
4755 |
|
|
day -= 7;
|
4756 |
|
|
}
|
4757 |
|
|
|
4758 |
|
|
arr.push(opts.i18n.weekdays[day]);
|
4759 |
|
|
}
|
4760 |
|
|
|
4761 |
|
|
return arr;
|
4762 |
|
|
})();
|
4763 |
|
|
|
4764 |
|
|
if (opts.weekstart && opts.weekstart > 0) {
|
4765 |
|
|
before -= opts.weekstart;
|
4766 |
|
|
if (before < 0) {
|
4767 |
|
|
before += 7;
|
4768 |
|
|
}
|
4769 |
|
|
}
|
4770 |
|
|
|
4771 |
|
|
var cells = days + before, after = cells;
|
4772 |
|
|
|
4773 |
|
|
while(after > 7) { after -= 7; }
|
4774 |
|
|
|
4775 |
|
|
cells += 7 - after;
|
4776 |
|
|
|
4777 |
|
|
var day, isDisabled, isSelected, isToday, isInMonth;
|
4778 |
|
|
|
4779 |
|
|
for (var i = 0, r = 0; i < cells; i++) {
|
4780 |
|
|
|
4781 |
|
|
day = new Date(year, month, 1 + (i - before), 12);
|
4782 |
|
|
isDisabled = (data.minDate && data.minDate > day) || (data.maxDate && day > data.maxDate);
|
4783 |
|
|
isInMonth = !(i < before || i >= (days + before));
|
4784 |
|
|
|
4785 |
|
|
day = moment(day);
|
4786 |
|
|
|
4787 |
|
|
isSelected = this.initdate == day.format("YYYY-MM-DD");
|
4788 |
|
|
isToday = now == day.format("YYYY-MM-DD");
|
4789 |
|
|
|
4790 |
|
|
row.push({"selected": isSelected, "today": isToday, "disabled": isDisabled, "day":day, "inmonth":isInMonth});
|
4791 |
|
|
|
4792 |
|
|
if (++r === 7) {
|
4793 |
|
|
data.days.push(row);
|
4794 |
|
|
row = [];
|
4795 |
|
|
r = 0;
|
4796 |
|
|
}
|
4797 |
|
|
}
|
4798 |
|
|
|
4799 |
|
|
return data;
|
4800 |
|
|
},
|
4801 |
|
|
|
4802 |
|
|
hide: function() {
|
4803 |
|
|
|
4804 |
|
|
if (active && active === this) {
|
4805 |
|
|
dropdown.removeClass('uk-dropdown-shown');
|
4806 |
|
|
setTimeout(function() {
|
4807 |
|
|
dropdown.removeClass('uk-dropdown-active dp-top')
|
4808 |
|
|
},280);
|
4809 |
|
|
active = false;
|
4810 |
|
|
this.trigger('hide.uk.datepicker');
|
4811 |
|
|
}
|
4812 |
|
|
}
|
4813 |
|
|
});
|
4814 |
|
|
|
4815 |
|
|
UI.Utils.moment = moment();
|
4816 |
|
|
|
4817 |
|
|
return UI.datepicker;
|
4818 |
|
|
});
|
4819 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
4820 |
|
|
(function(addon) {
|
4821 |
|
|
|
4822 |
|
|
var component;
|
4823 |
|
|
|
4824 |
|
|
if (window.UIkit2) {
|
4825 |
|
|
component = addon(UIkit2);
|
4826 |
|
|
}
|
4827 |
|
|
|
4828 |
|
|
if (typeof define == 'function' && define.amd) {
|
4829 |
|
|
define('uikit-form-password', ['uikit'], function(){
|
4830 |
|
|
return component || addon(UIkit2);
|
4831 |
|
|
});
|
4832 |
|
|
}
|
4833 |
|
|
|
4834 |
|
|
})(function(UI){
|
4835 |
|
|
|
4836 |
|
|
"use strict";
|
4837 |
|
|
|
4838 |
|
|
UI.component('formPassword', {
|
4839 |
|
|
|
4840 |
|
|
defaults: {
|
4841 |
|
|
lblShow: 'Show',
|
4842 |
|
|
lblHide: 'Hide'
|
4843 |
|
|
},
|
4844 |
|
|
|
4845 |
|
|
boot: function() {
|
4846 |
|
|
// init code
|
4847 |
|
|
UI.$html.on('click.formpassword.uikit', '[data-uk-form-password]', function(e) {
|
4848 |
|
|
|
4849 |
|
|
var ele = UI.$(this);
|
4850 |
|
|
|
4851 |
|
|
if (!ele.data('formPassword')) {
|
4852 |
|
|
|
4853 |
|
|
e.preventDefault();
|
4854 |
|
|
|
4855 |
|
|
UI.formPassword(ele, UI.Utils.options(ele.attr('data-uk-form-password')));
|
4856 |
|
|
ele.trigger('click');
|
4857 |
|
|
}
|
4858 |
|
|
});
|
4859 |
|
|
},
|
4860 |
|
|
|
4861 |
|
|
init: function() {
|
4862 |
|
|
|
4863 |
|
|
var $this = this;
|
4864 |
|
|
|
4865 |
|
|
this.on('click', function(e) {
|
4866 |
|
|
|
4867 |
|
|
e.preventDefault();
|
4868 |
|
|
|
4869 |
|
|
if($this.input.length) {
|
4870 |
|
|
var type = $this.input.attr('type');
|
4871 |
|
|
$this.input.attr('type', type=='text' ? 'password':'text');
|
4872 |
|
|
$this.element.html($this.options[type=='text' ? 'lblShow':'lblHide']);
|
4873 |
|
|
}
|
4874 |
|
|
});
|
4875 |
|
|
|
4876 |
|
|
this.input = this.element.next('input').length ? this.element.next('input') : this.element.prev('input');
|
4877 |
|
|
this.element.html(this.options[this.input.is('[type="password"]') ? 'lblShow':'lblHide']);
|
4878 |
|
|
|
4879 |
|
|
|
4880 |
|
|
this.element.data('formPassword', this);
|
4881 |
|
|
}
|
4882 |
|
|
});
|
4883 |
|
|
|
4884 |
|
|
return UI.formPassword;
|
4885 |
|
|
});
|
4886 |
|
|
|
4887 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
4888 |
|
|
(function(addon) {
|
4889 |
|
|
|
4890 |
|
|
var component;
|
4891 |
|
|
|
4892 |
|
|
if (window.UIkit2) {
|
4893 |
|
|
component = addon(UIkit2);
|
4894 |
|
|
}
|
4895 |
|
|
|
4896 |
|
|
if (typeof define == 'function' && define.amd) {
|
4897 |
|
|
define('uikit-form-select', ['uikit'], function(){
|
4898 |
|
|
return component || addon(UIkit2);
|
4899 |
|
|
});
|
4900 |
|
|
}
|
4901 |
|
|
|
4902 |
|
|
})(function(UI){
|
4903 |
|
|
|
4904 |
|
|
"use strict";
|
4905 |
|
|
|
4906 |
|
|
UI.component('formSelect', {
|
4907 |
|
|
|
4908 |
|
|
defaults: {
|
4909 |
|
|
target: '>span:first',
|
4910 |
|
|
activeClass: 'uk-active'
|
4911 |
|
|
},
|
4912 |
|
|
|
4913 |
|
|
boot: function() {
|
4914 |
|
|
// init code
|
4915 |
|
|
UI.ready(function(context) {
|
4916 |
|
|
|
4917 |
|
|
UI.$('[data-uk-form-select]', context).each(function(){
|
4918 |
|
|
|
4919 |
|
|
var ele = UI.$(this);
|
4920 |
|
|
|
4921 |
|
|
if (!ele.data('formSelect')) {
|
4922 |
|
|
UI.formSelect(ele, UI.Utils.options(ele.attr('data-uk-form-select')));
|
4923 |
|
|
}
|
4924 |
|
|
});
|
4925 |
|
|
});
|
4926 |
|
|
},
|
4927 |
|
|
|
4928 |
|
|
init: function() {
|
4929 |
|
|
|
4930 |
|
|
var $this = this;
|
4931 |
|
|
|
4932 |
|
|
this.target = this.find(this.options.target);
|
4933 |
|
|
this.select = this.find('select');
|
4934 |
|
|
|
4935 |
|
|
// init + on change event
|
4936 |
|
|
this.select.on({
|
4937 |
|
|
|
4938 |
|
|
change: (function(){
|
4939 |
|
|
|
4940 |
|
|
var select = $this.select[0], fn = function(){
|
4941 |
|
|
|
4942 |
|
|
try {
|
4943 |
|
|
|
4944 |
|
|
if($this.options.target === 'input') {
|
4945 |
|
|
$this.target.val(select.options[select.selectedIndex].text);
|
4946 |
|
|
} else {
|
4947 |
|
|
$this.target.text(select.options[select.selectedIndex].text);
|
4948 |
|
|
}
|
4949 |
|
|
|
4950 |
|
|
} catch(e) {}
|
4951 |
|
|
|
4952 |
|
|
$this.element[$this.select.val() ? 'addClass':'removeClass']($this.options.activeClass);
|
4953 |
|
|
|
4954 |
|
|
return fn;
|
4955 |
|
|
};
|
4956 |
|
|
|
4957 |
|
|
return fn();
|
4958 |
|
|
})(),
|
4959 |
|
|
|
4960 |
|
|
focus: function(){ $this.target.addClass('uk-focus') },
|
4961 |
|
|
blur: function(){ $this.target.removeClass('uk-focus') },
|
4962 |
|
|
mouseenter: function(){ $this.target.addClass('uk-hover') },
|
4963 |
|
|
mouseleave: function(){ $this.target.removeClass('uk-hover') }
|
4964 |
|
|
});
|
4965 |
|
|
|
4966 |
|
|
this.element.data("formSelect", this);
|
4967 |
|
|
}
|
4968 |
|
|
});
|
4969 |
|
|
|
4970 |
|
|
return UI.formSelect;
|
4971 |
|
|
});
|
4972 |
|
|
|
4973 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
4974 |
|
|
(function(addon) {
|
4975 |
|
|
|
4976 |
|
|
var component;
|
4977 |
|
|
|
4978 |
|
|
if (window.UIkit2) {
|
4979 |
|
|
component = addon(UIkit2);
|
4980 |
|
|
}
|
4981 |
|
|
|
4982 |
|
|
if (typeof define == 'function' && define.amd) {
|
4983 |
|
|
define('uikit-grid', ['uikit'], function(){
|
4984 |
|
|
return component || addon(UIkit2);
|
4985 |
|
|
});
|
4986 |
|
|
}
|
4987 |
|
|
|
4988 |
|
|
})(function(UI){
|
4989 |
|
|
|
4990 |
|
|
"use strict";
|
4991 |
|
|
|
4992 |
|
|
UI.component('grid', {
|
4993 |
|
|
|
4994 |
|
|
defaults: {
|
4995 |
|
|
colwidth : 'auto',
|
4996 |
|
|
animation : true,
|
4997 |
|
|
duration : 300,
|
4998 |
|
|
gutter : 0,
|
4999 |
|
|
controls : false,
|
5000 |
|
|
filter : false,
|
5001 |
|
|
origin : UI.langdirection
|
5002 |
|
|
},
|
5003 |
|
|
|
5004 |
|
|
boot: function() {
|
5005 |
|
|
|
5006 |
|
|
// init code
|
5007 |
|
|
UI.ready(function(context) {
|
5008 |
|
|
|
5009 |
|
|
UI.$('[data-uk-grid]', context).each(function(){
|
5010 |
|
|
|
5011 |
|
|
var ele = UI.$(this);
|
5012 |
|
|
|
5013 |
|
|
if(!ele.data('grid')) {
|
5014 |
|
|
UI.grid(ele, UI.Utils.options(ele.attr('data-uk-grid')));
|
5015 |
|
|
}
|
5016 |
|
|
});
|
5017 |
|
|
});
|
5018 |
|
|
},
|
5019 |
|
|
|
5020 |
|
|
init: function() {
|
5021 |
|
|
|
5022 |
|
|
var $this = this, gutter = String(this.options.gutter).trim().split(' ');
|
5023 |
|
|
|
5024 |
|
|
this.gutterv = parseInt(gutter[0], 10);
|
5025 |
|
|
this.gutterh = parseInt((gutter[1] || gutter[0]), 10);
|
5026 |
|
|
|
5027 |
|
|
// make sure parent element has the right position property
|
5028 |
|
|
this.element.css({'position': 'relative'});
|
5029 |
|
|
|
5030 |
|
|
this.controls = null;
|
5031 |
|
|
this.origin = this.options.origin;
|
5032 |
|
|
|
5033 |
|
|
if (this.options.controls) {
|
5034 |
|
|
|
5035 |
|
|
this.controls = UI.$(this.options.controls);
|
5036 |
|
|
|
5037 |
|
|
// filter
|
5038 |
|
|
this.controls.on('click', '[data-uk-filter]', function(e){
|
5039 |
|
|
e.preventDefault();
|
5040 |
|
|
$this.filter(UI.$(this).attr('data-uk-filter'));
|
5041 |
|
|
});
|
5042 |
|
|
|
5043 |
|
|
// sort
|
5044 |
|
|
this.controls.on('click', '[data-uk-sort]', function(e){
|
5045 |
|
|
e.preventDefault();
|
5046 |
|
|
var cmd = UI.$(this).attr('data-uk-sort').split(':');
|
5047 |
|
|
$this.sort(cmd[0], cmd[1]);
|
5048 |
|
|
});
|
5049 |
|
|
}
|
5050 |
|
|
|
5051 |
|
|
UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(){
|
5052 |
|
|
|
5053 |
|
|
if ($this.currentfilter) {
|
5054 |
|
|
$this.filter($this.currentfilter);
|
5055 |
|
|
} else {
|
5056 |
|
|
this.update();
|
5057 |
|
|
}
|
5058 |
|
|
|
5059 |
|
|
}.bind(this), 100));
|
5060 |
|
|
|
5061 |
|
|
this.on('display.uk.check', function(){
|
5062 |
|
|
if ($this.element.is(':visible')) $this.update();
|
5063 |
|
|
});
|
5064 |
|
|
|
5065 |
|
|
UI.domObserve(this.element, function(e) {
|
5066 |
|
|
$this.update();
|
5067 |
|
|
});
|
5068 |
|
|
|
5069 |
|
|
if (this.options.filter !== false) {
|
5070 |
|
|
this.filter(this.options.filter);
|
5071 |
|
|
} else {
|
5072 |
|
|
this.update();
|
5073 |
|
|
}
|
5074 |
|
|
},
|
5075 |
|
|
|
5076 |
|
|
_prepareElements: function() {
|
5077 |
|
|
|
5078 |
|
|
var children = this.element.children().not('[data-grid-prepared]'), css;
|
5079 |
|
|
|
5080 |
|
|
// exit if no already prepared elements found
|
5081 |
|
|
if (!children.length) {
|
5082 |
|
|
return;
|
5083 |
|
|
}
|
5084 |
|
|
|
5085 |
|
|
css = {
|
5086 |
|
|
position : 'absolute',
|
5087 |
|
|
boxSizing : 'border-box',
|
5088 |
|
|
width : this.options.colwidth == 'auto' ? '' : this.options.colwidth
|
5089 |
|
|
};
|
5090 |
|
|
|
5091 |
|
|
if (this.options.gutter) {
|
5092 |
|
|
|
5093 |
|
|
css['padding-'+this.origin] = this.gutterh;
|
5094 |
|
|
css['padding-bottom'] = this.gutterv;
|
5095 |
|
|
|
5096 |
|
|
this.element.css('margin-'+this.origin, this.gutterh * -1);
|
5097 |
|
|
}
|
5098 |
|
|
|
5099 |
|
|
children.attr('data-grid-prepared', 'true').css(css);
|
5100 |
|
|
},
|
5101 |
|
|
|
5102 |
|
|
update: function(elements) {
|
5103 |
|
|
|
5104 |
|
|
var $this = this;
|
5105 |
|
|
|
5106 |
|
|
this._prepareElements();
|
5107 |
|
|
|
5108 |
|
|
elements = elements || this.element.children(':visible');
|
5109 |
|
|
|
5110 |
|
|
var children = elements,
|
5111 |
|
|
maxwidth = this.element.width() + (2*this.gutterh) + 2,
|
5112 |
|
|
left = 0,
|
5113 |
|
|
top = 0,
|
5114 |
|
|
positions = [],
|
5115 |
|
|
|
5116 |
|
|
item, width, height, pos, posi, i, z, max, size;
|
5117 |
|
|
|
5118 |
|
|
this.trigger('beforeupdate.uk.grid', [children]);
|
5119 |
|
|
|
5120 |
|
|
children.each(function(index){
|
5121 |
|
|
|
5122 |
|
|
item = UI.$(this);
|
5123 |
|
|
size = this.getBoundingClientRect();
|
5124 |
|
|
width = size.width;
|
5125 |
|
|
height = size.height;
|
5126 |
|
|
left = 0;
|
5127 |
|
|
top = 0;
|
5128 |
|
|
|
5129 |
|
|
for (i=0,max=positions.length;i<max;i++) {
|
5130 |
|
|
|
5131 |
|
|
pos = positions[i];
|
5132 |
|
|
|
5133 |
|
|
if (left <= pos.aX) { left = pos.aX; }
|
5134 |
|
|
if (maxwidth < (left + width)) { left = 0; }
|
5135 |
|
|
if (top <= pos.aY) { top = pos.aY; }
|
5136 |
|
|
}
|
5137 |
|
|
|
5138 |
|
|
posi = {
|
5139 |
|
|
ele : item,
|
5140 |
|
|
top : top,
|
5141 |
|
|
width : width,
|
5142 |
|
|
height : height,
|
5143 |
|
|
aY : (top + height),
|
5144 |
|
|
aX : (left + width)
|
5145 |
|
|
};
|
5146 |
|
|
|
5147 |
|
|
posi[$this.origin] = left;
|
5148 |
|
|
|
5149 |
|
|
positions.push(posi);
|
5150 |
|
|
});
|
5151 |
|
|
|
5152 |
|
|
var posPrev, maxHeight = 0, positionto;
|
5153 |
|
|
|
5154 |
|
|
// fix top
|
5155 |
|
|
for (i=0,max=positions.length;i<max;i++) {
|
5156 |
|
|
|
5157 |
|
|
pos = positions[i];
|
5158 |
|
|
top = 0;
|
5159 |
|
|
|
5160 |
|
|
for (z=0;z<i;z++) {
|
5161 |
|
|
|
5162 |
|
|
posPrev = positions[z];
|
5163 |
|
|
|
5164 |
|
|
// (posPrev.left + 1) fixex 1px bug when using % based widths
|
5165 |
|
|
if (pos[this.origin] < posPrev.aX && (posPrev[this.origin] +1) < pos.aX) {
|
5166 |
|
|
top = posPrev.aY;
|
5167 |
|
|
}
|
5168 |
|
|
}
|
5169 |
|
|
|
5170 |
|
|
pos.top = top;
|
5171 |
|
|
pos.aY = top + pos.height;
|
5172 |
|
|
|
5173 |
|
|
maxHeight = Math.max(maxHeight, pos.aY);
|
5174 |
|
|
}
|
5175 |
|
|
|
5176 |
|
|
maxHeight = maxHeight - this.gutterv;
|
5177 |
|
|
|
5178 |
|
|
if (this.options.animation) {
|
5179 |
|
|
|
5180 |
|
|
this.element.stop().animate({'height': maxHeight}, 100);
|
5181 |
|
|
|
5182 |
|
|
positions.forEach(function(pos){
|
5183 |
|
|
|
5184 |
|
|
positionto = {"top": pos.top, opacity: 1};
|
5185 |
|
|
positionto[$this.origin] = pos[$this.origin];
|
5186 |
|
|
|
5187 |
|
|
pos.ele.stop().animate(positionto, this.options.duration);
|
5188 |
|
|
}.bind(this));
|
5189 |
|
|
|
5190 |
|
|
} else {
|
5191 |
|
|
|
5192 |
|
|
this.element.css('height', maxHeight);
|
5193 |
|
|
|
5194 |
|
|
positions.forEach(function(pos){
|
5195 |
|
|
positionto = {"top": pos.top, opacity: 1};
|
5196 |
|
|
positionto[$this.origin] = pos[$this.origin];
|
5197 |
|
|
pos.ele.css(positionto);
|
5198 |
|
|
}.bind(this));
|
5199 |
|
|
}
|
5200 |
|
|
|
5201 |
|
|
// make sure to trigger possible scrollpies etc.
|
5202 |
|
|
setTimeout(function() {
|
5203 |
|
|
UI.$doc.trigger('scrolling.uk.document');
|
5204 |
|
|
}, 2 * this.options.duration * (this.options.animation ? 1:0));
|
5205 |
|
|
|
5206 |
|
|
this.trigger('afterupdate.uk.grid', [children]);
|
5207 |
|
|
},
|
5208 |
|
|
|
5209 |
|
|
filter: function(filter) {
|
5210 |
|
|
|
5211 |
|
|
this.currentfilter = filter;
|
5212 |
|
|
|
5213 |
|
|
filter = filter || [];
|
5214 |
|
|
|
5215 |
|
|
if (typeof(filter) === 'number') {
|
5216 |
|
|
filter = filter.toString();
|
5217 |
|
|
}
|
5218 |
|
|
|
5219 |
|
|
if (typeof(filter) === 'string') {
|
5220 |
|
|
filter = filter.split(/,/).map(function(item){ return item.trim(); });
|
5221 |
|
|
}
|
5222 |
|
|
|
5223 |
|
|
var $this = this, children = this.element.children(), elements = {"visible": [], "hidden": []}, visible, hidden;
|
5224 |
|
|
|
5225 |
|
|
children.each(function(index){
|
5226 |
|
|
|
5227 |
|
|
var ele = UI.$(this), f = ele.attr('data-uk-filter'), infilter = filter.length ? false : true;
|
5228 |
|
|
|
5229 |
|
|
if (f) {
|
5230 |
|
|
|
5231 |
|
|
f = f.split(/,/).map(function(item){ return item.trim(); });
|
5232 |
|
|
|
5233 |
|
|
filter.forEach(function(item){
|
5234 |
|
|
if (f.indexOf(item) > -1) infilter = true;
|
5235 |
|
|
});
|
5236 |
|
|
}
|
5237 |
|
|
|
5238 |
|
|
elements[infilter ? "visible":"hidden"].push(ele);
|
5239 |
|
|
});
|
5240 |
|
|
|
5241 |
|
|
// convert to jQuery collections
|
5242 |
|
|
elements.hidden = UI.$(elements.hidden).map(function () {return this[0];});
|
5243 |
|
|
elements.visible = UI.$(elements.visible).map(function () {return this[0];});
|
5244 |
|
|
|
5245 |
|
|
elements.hidden.attr('aria-hidden', 'true').filter(':visible').fadeOut(this.options.duration);
|
5246 |
|
|
elements.visible.attr('aria-hidden', 'false').filter(':hidden').css('opacity', 0).show();
|
5247 |
|
|
|
5248 |
|
|
$this.update(elements.visible);
|
5249 |
|
|
|
5250 |
|
|
if (this.controls && this.controls.length) {
|
5251 |
|
|
this.controls.find('[data-uk-filter]').removeClass('uk-active').filter('[data-uk-filter="'+filter+'"]').addClass('uk-active');
|
5252 |
|
|
}
|
5253 |
|
|
},
|
5254 |
|
|
|
5255 |
|
|
sort: function(by, order){
|
5256 |
|
|
|
5257 |
|
|
order = order || 1;
|
5258 |
|
|
|
5259 |
|
|
// covert from string (asc|desc) to number
|
5260 |
|
|
if (typeof(order) === 'string') {
|
5261 |
|
|
order = order.toLowerCase() == 'desc' ? -1 : 1;
|
5262 |
|
|
}
|
5263 |
|
|
|
5264 |
|
|
var elements = this.element.children();
|
5265 |
|
|
|
5266 |
|
|
elements.sort(function(a, b){
|
5267 |
|
|
|
5268 |
|
|
a = UI.$(a);
|
5269 |
|
|
b = UI.$(b);
|
5270 |
|
|
|
5271 |
|
|
return (b.data(by) || '') < (a.data(by) || '') ? order : (order*-1);
|
5272 |
|
|
|
5273 |
|
|
}).appendTo(this.element);
|
5274 |
|
|
|
5275 |
|
|
this.update(elements.filter(':visible'));
|
5276 |
|
|
|
5277 |
|
|
if (this.controls && this.controls.length) {
|
5278 |
|
|
this.controls.find('[data-uk-sort]').removeClass('uk-active').filter('[data-uk-sort="'+by+':'+(order == -1 ? 'desc':'asc')+'"]').addClass('uk-active');
|
5279 |
|
|
}
|
5280 |
|
|
}
|
5281 |
|
|
});
|
5282 |
|
|
|
5283 |
|
|
});
|
5284 |
|
|
|
5285 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
5286 |
|
|
(function(addon) {
|
5287 |
|
|
|
5288 |
|
|
var component;
|
5289 |
|
|
|
5290 |
|
|
if (window.UIkit2) {
|
5291 |
|
|
component = addon(UIkit2);
|
5292 |
|
|
}
|
5293 |
|
|
|
5294 |
|
|
if (typeof define == 'function' && define.amd) { // AMD
|
5295 |
|
|
define('uikit-lightbox', ['uikit'], function(){
|
5296 |
|
|
return component || addon(UIkit2);
|
5297 |
|
|
});
|
5298 |
|
|
}
|
5299 |
|
|
|
5300 |
|
|
})(function(UI){
|
5301 |
|
|
|
5302 |
|
|
"use strict";
|
5303 |
|
|
|
5304 |
|
|
var modal, cache = {};
|
5305 |
|
|
|
5306 |
|
|
UI.component('lightbox', {
|
5307 |
|
|
|
5308 |
|
|
defaults: {
|
5309 |
|
|
allowfullscreen : true,
|
5310 |
|
|
duration : 400,
|
5311 |
|
|
group : false,
|
5312 |
|
|
keyboard : true
|
5313 |
|
|
},
|
5314 |
|
|
|
5315 |
|
|
index : 0,
|
5316 |
|
|
items : false,
|
5317 |
|
|
|
5318 |
|
|
boot: function() {
|
5319 |
|
|
|
5320 |
|
|
UI.$html.on('click', '[data-uk-lightbox]', function(e){
|
5321 |
|
|
|
5322 |
|
|
e.preventDefault();
|
5323 |
|
|
|
5324 |
|
|
var link = UI.$(this);
|
5325 |
|
|
|
5326 |
|
|
if (!link.data('lightbox')) {
|
5327 |
|
|
|
5328 |
|
|
UI.lightbox(link, UI.Utils.options(link.attr('data-uk-lightbox')));
|
5329 |
|
|
}
|
5330 |
|
|
|
5331 |
|
|
link.data('lightbox').show(link);
|
5332 |
|
|
});
|
5333 |
|
|
|
5334 |
|
|
// keyboard navigation
|
5335 |
|
|
UI.$doc.on('keyup', function(e) {
|
5336 |
|
|
|
5337 |
|
|
if (modal && modal.is(':visible') && modal.lightbox.options.keyboard) {
|
5338 |
|
|
|
5339 |
|
|
e.preventDefault();
|
5340 |
|
|
|
5341 |
|
|
switch(e.keyCode) {
|
5342 |
|
|
case 37:
|
5343 |
|
|
modal.lightbox.previous();
|
5344 |
|
|
break;
|
5345 |
|
|
case 39:
|
5346 |
|
|
modal.lightbox.next();
|
5347 |
|
|
break;
|
5348 |
|
|
}
|
5349 |
|
|
}
|
5350 |
|
|
});
|
5351 |
|
|
},
|
5352 |
|
|
|
5353 |
|
|
init: function() {
|
5354 |
|
|
|
5355 |
|
|
var siblings = [];
|
5356 |
|
|
|
5357 |
|
|
this.index = 0;
|
5358 |
|
|
this.siblings = [];
|
5359 |
|
|
|
5360 |
|
|
if (this.element && this.element.length) {
|
5361 |
|
|
|
5362 |
|
|
var domSiblings = this.options.group ? UI.$('[data-uk-lightbox*="'+this.options.group+'"]') : this.element;
|
5363 |
|
|
|
5364 |
|
|
domSiblings.each(function() {
|
5365 |
|
|
|
5366 |
|
|
var ele = UI.$(this);
|
5367 |
|
|
|
5368 |
|
|
siblings.push({
|
5369 |
|
|
source : ele.attr('href'),
|
5370 |
|
|
title : ele.attr('data-title') || ele.attr('title'),
|
5371 |
|
|
type : ele.attr("data-lightbox-type") || 'auto',
|
5372 |
|
|
link : ele
|
5373 |
|
|
});
|
5374 |
|
|
});
|
5375 |
|
|
|
5376 |
|
|
this.index = domSiblings.index(this.element);
|
5377 |
|
|
this.siblings = siblings;
|
5378 |
|
|
|
5379 |
|
|
} else if (this.options.group && this.options.group.length) {
|
5380 |
|
|
this.siblings = this.options.group;
|
5381 |
|
|
}
|
5382 |
|
|
|
5383 |
|
|
this.trigger('lightbox-init', [this]);
|
5384 |
|
|
},
|
5385 |
|
|
|
5386 |
|
|
show: function(index) {
|
5387 |
|
|
|
5388 |
|
|
this.modal = getModal(this);
|
5389 |
|
|
|
5390 |
|
|
// stop previous animation
|
5391 |
|
|
this.modal.dialog.stop();
|
5392 |
|
|
this.modal.content.stop();
|
5393 |
|
|
|
5394 |
|
|
var $this = this, promise = UI.$.Deferred(), data, item;
|
5395 |
|
|
|
5396 |
|
|
index = index || 0;
|
5397 |
|
|
|
5398 |
|
|
// index is a jQuery object or DOM element
|
5399 |
|
|
if (typeof(index) == 'object') {
|
5400 |
|
|
|
5401 |
|
|
this.siblings.forEach(function(s, idx){
|
5402 |
|
|
|
5403 |
|
|
if (index[0] === s.link[0]) {
|
5404 |
|
|
index = idx;
|
5405 |
|
|
}
|
5406 |
|
|
});
|
5407 |
|
|
}
|
5408 |
|
|
|
5409 |
|
|
// fix index if needed
|
5410 |
|
|
if ( index < 0 ) {
|
5411 |
|
|
index = this.siblings.length - index;
|
5412 |
|
|
} else if (!this.siblings[index]) {
|
5413 |
|
|
index = 0;
|
5414 |
|
|
}
|
5415 |
|
|
|
5416 |
|
|
item = this.siblings[index];
|
5417 |
|
|
|
5418 |
|
|
data = {
|
5419 |
|
|
lightbox : $this,
|
5420 |
|
|
source : item.source,
|
5421 |
|
|
type : item.type,
|
5422 |
|
|
index : index,
|
5423 |
|
|
promise : promise,
|
5424 |
|
|
title : item.title,
|
5425 |
|
|
item : item,
|
5426 |
|
|
meta : {
|
5427 |
|
|
content : '',
|
5428 |
|
|
width : null,
|
5429 |
|
|
height : null
|
5430 |
|
|
}
|
5431 |
|
|
};
|
5432 |
|
|
|
5433 |
|
|
this.index = index;
|
5434 |
|
|
|
5435 |
|
|
this.modal.content.empty();
|
5436 |
|
|
|
5437 |
|
|
if (!this.modal.is(':visible')) {
|
5438 |
|
|
this.modal.content.css({width:'', height:''}).empty();
|
5439 |
|
|
this.modal.modal.show();
|
5440 |
|
|
}
|
5441 |
|
|
|
5442 |
|
|
this.modal.loader.removeClass('uk-hidden');
|
5443 |
|
|
|
5444 |
|
|
promise.promise().done(function() {
|
5445 |
|
|
|
5446 |
|
|
$this.data = data;
|
5447 |
|
|
$this.fitSize(data);
|
5448 |
|
|
|
5449 |
|
|
}).fail(function(){
|
5450 |
|
|
|
5451 |
|
|
data.meta.content = '<div class="uk-position-cover uk-flex uk-flex-middle uk-flex-center"><strong>Loading resource failed!</strong></div>';
|
5452 |
|
|
data.meta.width = 400;
|
5453 |
|
|
data.meta.height = 300;
|
5454 |
|
|
|
5455 |
|
|
$this.data = data;
|
5456 |
|
|
$this.fitSize(data);
|
5457 |
|
|
});
|
5458 |
|
|
|
5459 |
|
|
$this.trigger('showitem.uk.lightbox', [data]);
|
5460 |
|
|
},
|
5461 |
|
|
|
5462 |
|
|
fitSize: function() {
|
5463 |
|
|
|
5464 |
|
|
var $this = this,
|
5465 |
|
|
data = this.data,
|
5466 |
|
|
pad = this.modal.dialog.outerWidth() - this.modal.dialog.width(),
|
5467 |
|
|
dpadTop = parseInt(this.modal.dialog.css('margin-top'), 10),
|
5468 |
|
|
dpadBot = parseInt(this.modal.dialog.css('margin-bottom'), 10),
|
5469 |
|
|
dpad = dpadTop + dpadBot,
|
5470 |
|
|
content = data.meta.content,
|
5471 |
|
|
duration = $this.options.duration;
|
5472 |
|
|
|
5473 |
|
|
if (this.siblings.length > 1) {
|
5474 |
|
|
|
5475 |
|
|
content = [
|
5476 |
|
|
content,
|
5477 |
|
|
'<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-previous uk-hidden-touch" data-lightbox-previous></a>',
|
5478 |
|
|
'<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-next uk-hidden-touch" data-lightbox-next></a>'
|
5479 |
|
|
].join('');
|
5480 |
|
|
}
|
5481 |
|
|
|
5482 |
|
|
// calculate width
|
5483 |
|
|
var tmp = UI.$('<div> </div>').css({
|
5484 |
|
|
opacity : 0,
|
5485 |
|
|
position : 'absolute',
|
5486 |
|
|
top : 0,
|
5487 |
|
|
left : 0,
|
5488 |
|
|
width : '100%',
|
5489 |
|
|
maxWidth : $this.modal.dialog.css('max-width'),
|
5490 |
|
|
padding : $this.modal.dialog.css('padding'),
|
5491 |
|
|
margin : $this.modal.dialog.css('margin')
|
5492 |
|
|
}), maxwidth, maxheight, w = data.meta.width, h = data.meta.height;
|
5493 |
|
|
|
5494 |
|
|
tmp.appendTo('body').width();
|
5495 |
|
|
|
5496 |
|
|
maxwidth = tmp.width();
|
5497 |
|
|
maxheight = window.innerHeight - dpad;
|
5498 |
|
|
|
5499 |
|
|
tmp.remove();
|
5500 |
|
|
|
5501 |
|
|
this.modal.dialog.find('.uk-modal-caption').remove();
|
5502 |
|
|
|
5503 |
|
|
if (data.title) {
|
5504 |
|
|
this.modal.dialog.append('<div class="uk-modal-caption">'+data.title+'</div>');
|
5505 |
|
|
maxheight -= this.modal.dialog.find('.uk-modal-caption').outerHeight();
|
5506 |
|
|
}
|
5507 |
|
|
|
5508 |
|
|
if (maxwidth < data.meta.width) {
|
5509 |
|
|
|
5510 |
|
|
h = Math.floor( h * (maxwidth / w) );
|
5511 |
|
|
w = maxwidth;
|
5512 |
|
|
}
|
5513 |
|
|
|
5514 |
|
|
if (maxheight < h) {
|
5515 |
|
|
|
5516 |
|
|
h = Math.floor(maxheight);
|
5517 |
|
|
w = Math.ceil(data.meta.width * (maxheight/data.meta.height));
|
5518 |
|
|
}
|
5519 |
|
|
|
5520 |
|
|
this.modal.content.css('opacity', 0).width(w).html(content);
|
5521 |
|
|
|
5522 |
|
|
if (data.type == 'iframe') {
|
5523 |
|
|
this.modal.content.find('iframe:first').height(h);
|
5524 |
|
|
}
|
5525 |
|
|
|
5526 |
|
|
var dh = h + pad,
|
5527 |
|
|
t = Math.floor(window.innerHeight/2 - dh/2) - dpad;
|
5528 |
|
|
|
5529 |
|
|
if (t < 0) { t = 0; }
|
5530 |
|
|
|
5531 |
|
|
this.modal.closer.addClass('uk-hidden');
|
5532 |
|
|
|
5533 |
|
|
if ($this.modal.data('mwidth') == w && $this.modal.data('mheight') == h) {
|
5534 |
|
|
duration = 0;
|
5535 |
|
|
}
|
5536 |
|
|
|
5537 |
|
|
this.modal.dialog.animate({width: w + pad, height: h + pad, top: t }, duration, 'swing', function() {
|
5538 |
|
|
$this.modal.loader.addClass('uk-hidden');
|
5539 |
|
|
$this.modal.content.css({width:''}).animate({opacity: 1}, function() {
|
5540 |
|
|
$this.modal.closer.removeClass('uk-hidden');
|
5541 |
|
|
});
|
5542 |
|
|
|
5543 |
|
|
$this.modal.data({mwidth: w, mheight: h});
|
5544 |
|
|
});
|
5545 |
|
|
},
|
5546 |
|
|
|
5547 |
|
|
next: function() {
|
5548 |
|
|
this.show(this.siblings[(this.index+1)] ? (this.index+1) : 0);
|
5549 |
|
|
},
|
5550 |
|
|
|
5551 |
|
|
previous: function() {
|
5552 |
|
|
this.show(this.siblings[(this.index-1)] ? (this.index-1) : this.siblings.length-1);
|
5553 |
|
|
}
|
5554 |
|
|
});
|
5555 |
|
|
|
5556 |
|
|
|
5557 |
|
|
// Plugins
|
5558 |
|
|
|
5559 |
|
|
UI.plugin('lightbox', 'image', {
|
5560 |
|
|
|
5561 |
|
|
init: function(lightbox) {
|
5562 |
|
|
|
5563 |
|
|
lightbox.on('showitem.uk.lightbox', function(e, data){
|
5564 |
|
|
|
5565 |
|
|
if (data.type == 'image' || data.source && data.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)) {
|
5566 |
|
|
|
5567 |
|
|
var resolve = function(source, width, height) {
|
5568 |
|
|
|
5569 |
|
|
data.meta = {
|
5570 |
|
|
content : '<img class="uk-responsive-width" width="'+width+'" height="'+height+'" src ="'+source+'">',
|
5571 |
|
|
width : width,
|
5572 |
|
|
height : height
|
5573 |
|
|
};
|
5574 |
|
|
|
5575 |
|
|
data.type = 'image';
|
5576 |
|
|
|
5577 |
|
|
data.promise.resolve();
|
5578 |
|
|
};
|
5579 |
|
|
|
5580 |
|
|
if (!cache[data.source]) {
|
5581 |
|
|
|
5582 |
|
|
var img = new Image();
|
5583 |
|
|
|
5584 |
|
|
img.onerror = function(){
|
5585 |
|
|
data.promise.reject('Loading image failed');
|
5586 |
|
|
};
|
5587 |
|
|
|
5588 |
|
|
img.onload = function(){
|
5589 |
|
|
cache[data.source] = {width: img.width, height: img.height};
|
5590 |
|
|
resolve(data.source, cache[data.source].width, cache[data.source].height);
|
5591 |
|
|
};
|
5592 |
|
|
|
5593 |
|
|
img.src = data.source;
|
5594 |
|
|
|
5595 |
|
|
} else {
|
5596 |
|
|
resolve(data.source, cache[data.source].width, cache[data.source].height);
|
5597 |
|
|
}
|
5598 |
|
|
}
|
5599 |
|
|
});
|
5600 |
|
|
}
|
5601 |
|
|
});
|
5602 |
|
|
|
5603 |
|
|
UI.plugin('lightbox', 'youtube', {
|
5604 |
|
|
|
5605 |
|
|
init: function(lightbox) {
|
5606 |
|
|
|
5607 |
|
|
var youtubeRegExp = /(\/\/.*?youtube\.[a-z]+)\/watch\?v=([^&]+)&?(.*)/,
|
5608 |
|
|
youtubeRegExpShort = /youtu\.be\/(.*)/;
|
5609 |
|
|
|
5610 |
|
|
|
5611 |
|
|
lightbox.on('showitem.uk.lightbox', function(e, data){
|
5612 |
|
|
|
5613 |
|
|
var id, matches, resolve = function(id, width, height) {
|
5614 |
|
|
|
5615 |
|
|
data.meta = {
|
5616 |
|
|
content: '<iframe src="//www.youtube.com/embed/'+id+'" width="'+width+'" height="'+height+'" style="max-width:100%;"'+(modal.lightbox.options.allowfullscreen?' allowfullscreen':'')+'></iframe>',
|
5617 |
|
|
width: width,
|
5618 |
|
|
height: height
|
5619 |
|
|
};
|
5620 |
|
|
|
5621 |
|
|
data.type = 'iframe';
|
5622 |
|
|
|
5623 |
|
|
data.promise.resolve();
|
5624 |
|
|
};
|
5625 |
|
|
|
5626 |
|
|
if (matches = data.source.match(youtubeRegExp)) {
|
5627 |
|
|
id = matches[2];
|
5628 |
|
|
}
|
5629 |
|
|
|
5630 |
|
|
if (matches = data.source.match(youtubeRegExpShort)) {
|
5631 |
|
|
id = matches[1];
|
5632 |
|
|
}
|
5633 |
|
|
|
5634 |
|
|
if (id) {
|
5635 |
|
|
|
5636 |
|
|
if(!cache[id]) {
|
5637 |
|
|
|
5638 |
|
|
var img = new Image(), lowres = false;
|
5639 |
|
|
|
5640 |
|
|
img.onerror = function(){
|
5641 |
|
|
cache[id] = {width:640, height:320};
|
5642 |
|
|
resolve(id, cache[id].width, cache[id].height);
|
5643 |
|
|
};
|
5644 |
|
|
|
5645 |
|
|
img.onload = function(){
|
5646 |
|
|
//youtube default 404 thumb, fall back to lowres
|
5647 |
|
|
if (img.width == 120 && img.height == 90) {
|
5648 |
|
|
if (!lowres) {
|
5649 |
|
|
lowres = true;
|
5650 |
|
|
img.src = '//img.youtube.com/vi/' + id + '/0.jpg';
|
5651 |
|
|
} else {
|
5652 |
|
|
cache[id] = {width: 640, height: 320};
|
5653 |
|
|
resolve(id, cache[id].width, cache[id].height);
|
5654 |
|
|
}
|
5655 |
|
|
} else {
|
5656 |
|
|
cache[id] = {width: img.width, height: img.height};
|
5657 |
|
|
resolve(id, img.width, img.height);
|
5658 |
|
|
}
|
5659 |
|
|
};
|
5660 |
|
|
|
5661 |
|
|
img.src = '//img.youtube.com/vi/'+id+'/maxresdefault.jpg';
|
5662 |
|
|
|
5663 |
|
|
} else {
|
5664 |
|
|
resolve(id, cache[id].width, cache[id].height);
|
5665 |
|
|
}
|
5666 |
|
|
|
5667 |
|
|
e.stopImmediatePropagation();
|
5668 |
|
|
}
|
5669 |
|
|
});
|
5670 |
|
|
}
|
5671 |
|
|
});
|
5672 |
|
|
|
5673 |
|
|
|
5674 |
|
|
UI.plugin('lightbox', 'vimeo', {
|
5675 |
|
|
|
5676 |
|
|
init: function(lightbox) {
|
5677 |
|
|
|
5678 |
|
|
var regex = /(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/, matches;
|
5679 |
|
|
|
5680 |
|
|
|
5681 |
|
|
lightbox.on('showitem.uk.lightbox', function(e, data){
|
5682 |
|
|
|
5683 |
|
|
var id, resolve = function(id, width, height) {
|
5684 |
|
|
|
5685 |
|
|
data.meta = {
|
5686 |
|
|
content: '<iframe src="//player.vimeo.com/video/'+id+'" width="'+width+'" height="'+height+'" style="width:100%;box-sizing:border-box;"'+(modal.lightbox.options.allowfullscreen?' allowfullscreen':'')+'></iframe>',
|
5687 |
|
|
width: width,
|
5688 |
|
|
height: height
|
5689 |
|
|
};
|
5690 |
|
|
|
5691 |
|
|
data.type = 'iframe';
|
5692 |
|
|
|
5693 |
|
|
data.promise.resolve();
|
5694 |
|
|
};
|
5695 |
|
|
|
5696 |
|
|
if (matches = data.source.match(regex)) {
|
5697 |
|
|
|
5698 |
|
|
id = matches[2];
|
5699 |
|
|
|
5700 |
|
|
if(!cache[id]) {
|
5701 |
|
|
|
5702 |
|
|
UI.$.ajax({
|
5703 |
|
|
type : 'GET',
|
5704 |
|
|
url : '//vimeo.com/api/oembed.json?url=' + encodeURI(data.source),
|
5705 |
|
|
jsonp : 'callback',
|
5706 |
|
|
dataType : 'jsonp',
|
5707 |
|
|
success : function(data) {
|
5708 |
|
|
cache[id] = {width:data.width, height:data.height};
|
5709 |
|
|
resolve(id, cache[id].width, cache[id].height);
|
5710 |
|
|
}
|
5711 |
|
|
});
|
5712 |
|
|
|
5713 |
|
|
} else {
|
5714 |
|
|
resolve(id, cache[id].width, cache[id].height);
|
5715 |
|
|
}
|
5716 |
|
|
|
5717 |
|
|
e.stopImmediatePropagation();
|
5718 |
|
|
}
|
5719 |
|
|
});
|
5720 |
|
|
}
|
5721 |
|
|
});
|
5722 |
|
|
|
5723 |
|
|
UI.plugin('lightbox', 'video', {
|
5724 |
|
|
|
5725 |
|
|
init: function(lightbox) {
|
5726 |
|
|
|
5727 |
|
|
lightbox.on('showitem.uk.lightbox', function(e, data){
|
5728 |
|
|
|
5729 |
|
|
|
5730 |
|
|
var resolve = function(source, width, height) {
|
5731 |
|
|
|
5732 |
|
|
data.meta = {
|
5733 |
|
|
content: '<video class="uk-responsive-width" src="'+source+'" width="'+width+'" height="'+height+'" controls></video>',
|
5734 |
|
|
width: width,
|
5735 |
|
|
height: height
|
5736 |
|
|
};
|
5737 |
|
|
|
5738 |
|
|
data.type = 'video';
|
5739 |
|
|
|
5740 |
|
|
data.promise.resolve();
|
5741 |
|
|
};
|
5742 |
|
|
|
5743 |
|
|
if (data.type == 'video' || data.source.match(/\.(mp4|webm|ogv)$/i)) {
|
5744 |
|
|
|
5745 |
|
|
if (!cache[data.source]) {
|
5746 |
|
|
|
5747 |
|
|
var vid = UI.$('<video style="position:fixed;visibility:hidden;top:-10000px;"></video>').attr('src', data.source).appendTo('body');
|
5748 |
|
|
|
5749 |
|
|
var idle = setInterval(function() {
|
5750 |
|
|
|
5751 |
|
|
if (vid[0].videoWidth) {
|
5752 |
|
|
clearInterval(idle);
|
5753 |
|
|
cache[data.source] = {width: vid[0].videoWidth, height: vid[0].videoHeight};
|
5754 |
|
|
resolve(data.source, cache[data.source].width, cache[data.source].height);
|
5755 |
|
|
vid.remove();
|
5756 |
|
|
}
|
5757 |
|
|
|
5758 |
|
|
}, 20);
|
5759 |
|
|
|
5760 |
|
|
} else {
|
5761 |
|
|
resolve(data.source, cache[data.source].width, cache[data.source].height);
|
5762 |
|
|
}
|
5763 |
|
|
}
|
5764 |
|
|
});
|
5765 |
|
|
}
|
5766 |
|
|
});
|
5767 |
|
|
|
5768 |
|
|
|
5769 |
|
|
UI.plugin('lightbox', 'iframe', {
|
5770 |
|
|
|
5771 |
|
|
init: function (lightbox) {
|
5772 |
|
|
|
5773 |
|
|
lightbox.on('showitem.uk.lightbox', function (e, data) {
|
5774 |
|
|
|
5775 |
|
|
var resolve = function (source, width, height) {
|
5776 |
|
|
|
5777 |
|
|
data.meta = {
|
5778 |
|
|
content: '<iframe class="uk-responsive-width" src="' + source + '" width="' + width + '" height="' + height + '"'+(modal.lightbox.options.allowfullscreen?' allowfullscreen':'')+'></iframe>',
|
5779 |
|
|
width: width,
|
5780 |
|
|
height: height
|
5781 |
|
|
};
|
5782 |
|
|
|
5783 |
|
|
data.type = 'iframe';
|
5784 |
|
|
|
5785 |
|
|
data.promise.resolve();
|
5786 |
|
|
};
|
5787 |
|
|
|
5788 |
|
|
if (data.type === 'iframe' || data.source.match(/\.(html|php)$/)) {
|
5789 |
|
|
resolve(data.source, (lightbox.options.width || 800), (lightbox.options.height || 600));
|
5790 |
|
|
}
|
5791 |
|
|
});
|
5792 |
|
|
|
5793 |
|
|
}
|
5794 |
|
|
});
|
5795 |
|
|
|
5796 |
|
|
function getModal(lightbox) {
|
5797 |
|
|
|
5798 |
|
|
if (modal) {
|
5799 |
|
|
modal.lightbox = lightbox;
|
5800 |
|
|
return modal;
|
5801 |
|
|
}
|
5802 |
|
|
|
5803 |
|
|
// init lightbox container
|
5804 |
|
|
modal = UI.$([
|
5805 |
|
|
'<div class="uk-modal">',
|
5806 |
|
|
'<div class="uk-modal-dialog uk-modal-dialog-lightbox uk-slidenav-position" style="margin-left:auto;margin-right:auto;width:200px;height:200px;top:'+Math.abs(window.innerHeight/2 - 200)+'px;">',
|
5807 |
|
|
'<a href="#" class="uk-modal-close uk-close uk-close-alt"></a>',
|
5808 |
|
|
'<div class="uk-lightbox-content"></div>',
|
5809 |
|
|
'<div class="uk-modal-spinner uk-hidden"></div>',
|
5810 |
|
|
'</div>',
|
5811 |
|
|
'</div>'
|
5812 |
|
|
].join('')).appendTo('body');
|
5813 |
|
|
|
5814 |
|
|
modal.dialog = modal.find('.uk-modal-dialog:first');
|
5815 |
|
|
modal.content = modal.find('.uk-lightbox-content:first');
|
5816 |
|
|
modal.loader = modal.find('.uk-modal-spinner:first');
|
5817 |
|
|
modal.closer = modal.find('.uk-close.uk-close-alt');
|
5818 |
|
|
modal.modal = UI.modal(modal, {modal:false});
|
5819 |
|
|
|
5820 |
|
|
// next / previous
|
5821 |
|
|
modal.on('swipeRight swipeLeft', function(e) {
|
5822 |
|
|
modal.lightbox[e.type=='swipeLeft' ? 'next':'previous']();
|
5823 |
|
|
}).on('click', '[data-lightbox-previous], [data-lightbox-next]', function(e){
|
5824 |
|
|
e.preventDefault();
|
5825 |
|
|
modal.lightbox[UI.$(this).is('[data-lightbox-next]') ? 'next':'previous']();
|
5826 |
|
|
});
|
5827 |
|
|
|
5828 |
|
|
// destroy content on modal hide
|
5829 |
|
|
modal.on('hide.uk.modal', function(e) {
|
5830 |
|
|
modal.content.html('');
|
5831 |
|
|
});
|
5832 |
|
|
|
5833 |
|
|
var resizeCache = {w: window.innerWidth, h:window.innerHeight};
|
5834 |
|
|
|
5835 |
|
|
UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(e){
|
5836 |
|
|
|
5837 |
|
|
if (resizeCache.w !== window.innerWidth && modal.is(':visible') && !UI.Utils.isFullscreen()) {
|
5838 |
|
|
modal.lightbox.fitSize();
|
5839 |
|
|
}
|
5840 |
|
|
|
5841 |
|
|
resizeCache = {w: window.innerWidth, h:window.innerHeight};
|
5842 |
|
|
|
5843 |
|
|
}, 100));
|
5844 |
|
|
|
5845 |
|
|
modal.lightbox = lightbox;
|
5846 |
|
|
|
5847 |
|
|
return modal;
|
5848 |
|
|
}
|
5849 |
|
|
|
5850 |
|
|
UI.lightbox.create = function(items, options) {
|
5851 |
|
|
|
5852 |
|
|
if (!items) return;
|
5853 |
|
|
|
5854 |
|
|
var group = [], o;
|
5855 |
|
|
|
5856 |
|
|
items.forEach(function(item) {
|
5857 |
|
|
|
5858 |
|
|
group.push(UI.$.extend({
|
5859 |
|
|
source : '',
|
5860 |
|
|
title : '',
|
5861 |
|
|
type : 'auto',
|
5862 |
|
|
link : false
|
5863 |
|
|
}, (typeof(item) == 'string' ? {'source': item} : item)));
|
5864 |
|
|
});
|
5865 |
|
|
|
5866 |
|
|
o = UI.lightbox(UI.$.extend({}, options, {'group':group}));
|
5867 |
|
|
|
5868 |
|
|
return o;
|
5869 |
|
|
};
|
5870 |
|
|
|
5871 |
|
|
return UI.lightbox;
|
5872 |
|
|
});
|
5873 |
|
|
|
5874 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
5875 |
|
|
/*
|
5876 |
|
|
* Based on Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/
|
5877 |
|
|
*/
|
5878 |
|
|
(function(addon) {
|
5879 |
|
|
|
5880 |
|
|
var component;
|
5881 |
|
|
|
5882 |
|
|
if (window.UIkit2) {
|
5883 |
|
|
component = addon(UIkit2);
|
5884 |
|
|
}
|
5885 |
|
|
|
5886 |
|
|
if (typeof define == 'function' && define.amd) {
|
5887 |
|
|
define('uikit-nestable', ['uikit'], function(){
|
5888 |
|
|
return component || addon(UIkit2);
|
5889 |
|
|
});
|
5890 |
|
|
}
|
5891 |
|
|
|
5892 |
|
|
})(function(UI) {
|
5893 |
|
|
|
5894 |
|
|
"use strict";
|
5895 |
|
|
|
5896 |
|
|
var hasTouch = 'ontouchstart' in window || 'MSGesture' in window || window.PointerEvent,
|
5897 |
|
|
html = UI.$html,
|
5898 |
|
|
touchedlists = [],
|
5899 |
|
|
$win = UI.$win,
|
5900 |
|
|
draggingElement;
|
5901 |
|
|
|
5902 |
|
|
var eStart = hasTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointerdown':'touchstart') : 'mousedown',
|
5903 |
|
|
eMove = hasTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointermove':'touchmove') : 'mousemove',
|
5904 |
|
|
eEnd = hasTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointerup':'touchend') : 'mouseup',
|
5905 |
|
|
eCancel = hasTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointercancel':'touchcancel') : 'mouseup';
|
5906 |
|
|
|
5907 |
|
|
|
5908 |
|
|
UI.component('nestable', {
|
5909 |
|
|
|
5910 |
|
|
defaults: {
|
5911 |
|
|
listBaseClass : 'uk-nestable',
|
5912 |
|
|
listClass : 'uk-nestable-list',
|
5913 |
|
|
listItemClass : 'uk-nestable-item',
|
5914 |
|
|
dragClass : 'uk-nestable-dragged',
|
5915 |
|
|
movingClass : 'uk-nestable-moving',
|
5916 |
|
|
noChildrenClass : 'uk-nestable-nochildren',
|
5917 |
|
|
emptyClass : 'uk-nestable-empty',
|
5918 |
|
|
handleClass : '',
|
5919 |
|
|
collapsedClass : 'uk-collapsed',
|
5920 |
|
|
placeholderClass: 'uk-nestable-placeholder',
|
5921 |
|
|
noDragClass : 'uk-nestable-nodrag',
|
5922 |
|
|
group : false,
|
5923 |
|
|
maxDepth : 10,
|
5924 |
|
|
threshold : 20,
|
5925 |
|
|
idlethreshold : 10,
|
5926 |
|
|
},
|
5927 |
|
|
|
5928 |
|
|
boot: function() {
|
5929 |
|
|
|
5930 |
|
|
// adjust document scrolling
|
5931 |
|
|
UI.$html.on('mousemove touchmove', function(e) {
|
5932 |
|
|
|
5933 |
|
|
if (draggingElement) {
|
5934 |
|
|
|
5935 |
|
|
var top = draggingElement.offset().top;
|
5936 |
|
|
|
5937 |
|
|
if (top < UI.$win.scrollTop()) {
|
5938 |
|
|
UI.$win.scrollTop(UI.$win.scrollTop() - Math.ceil(draggingElement.height()/2));
|
5939 |
|
|
} else if ( (top + draggingElement.height()) > (window.innerHeight + UI.$win.scrollTop()) ) {
|
5940 |
|
|
UI.$win.scrollTop(UI.$win.scrollTop() + Math.ceil(draggingElement.height()/2));
|
5941 |
|
|
}
|
5942 |
|
|
}
|
5943 |
|
|
});
|
5944 |
|
|
|
5945 |
|
|
// init code
|
5946 |
|
|
UI.ready(function(context) {
|
5947 |
|
|
|
5948 |
|
|
UI.$("[data-uk-nestable]", context).each(function(){
|
5949 |
|
|
|
5950 |
|
|
var ele = UI.$(this);
|
5951 |
|
|
|
5952 |
|
|
if (!ele.data("nestable")) {
|
5953 |
|
|
UI.nestable(ele, UI.Utils.options(ele.attr("data-uk-nestable")));
|
5954 |
|
|
}
|
5955 |
|
|
});
|
5956 |
|
|
});
|
5957 |
|
|
},
|
5958 |
|
|
|
5959 |
|
|
init: function() {
|
5960 |
|
|
|
5961 |
|
|
var $this = this;
|
5962 |
|
|
|
5963 |
|
|
Object.keys(this.options).forEach(function(key){
|
5964 |
|
|
|
5965 |
|
|
if(String(key).indexOf('Class')!=-1) {
|
5966 |
|
|
$this.options['_'+key] = '.' + $this.options[key];
|
5967 |
|
|
}
|
5968 |
|
|
});
|
5969 |
|
|
|
5970 |
|
|
this.find(this.options._listItemClass).find(">ul").addClass(this.options.listClass);
|
5971 |
|
|
|
5972 |
|
|
this.checkEmptyList();
|
5973 |
|
|
|
5974 |
|
|
this.reset();
|
5975 |
|
|
this.element.data('nestable-group', this.options.group || UI.Utils.uid('nestable-group'));
|
5976 |
|
|
|
5977 |
|
|
this.find(this.options._listItemClass).each(function() {
|
5978 |
|
|
$this.setParent(UI.$(this));
|
5979 |
|
|
});
|
5980 |
|
|
|
5981 |
|
|
this.on('click', '[data-nestable-action]', function(e) {
|
5982 |
|
|
|
5983 |
|
|
if ($this.dragEl || (!hasTouch && e.button !== 0)) {
|
5984 |
|
|
return;
|
5985 |
|
|
}
|
5986 |
|
|
|
5987 |
|
|
e.preventDefault();
|
5988 |
|
|
|
5989 |
|
|
var target = UI.$(e.currentTarget),
|
5990 |
|
|
action = target.data('nestableAction'),
|
5991 |
|
|
item = target.closest($this.options._listItemClass);
|
5992 |
|
|
|
5993 |
|
|
if (action === 'collapse') {
|
5994 |
|
|
$this.collapseItem(item);
|
5995 |
|
|
}
|
5996 |
|
|
if (action === 'expand') {
|
5997 |
|
|
$this.expandItem(item);
|
5998 |
|
|
}
|
5999 |
|
|
if (action === 'toggle') {
|
6000 |
|
|
$this.toggleItem(item);
|
6001 |
|
|
}
|
6002 |
|
|
});
|
6003 |
|
|
|
6004 |
|
|
var onStartEvent = function(e) {
|
6005 |
|
|
|
6006 |
|
|
var handle = UI.$(e.target),
|
6007 |
|
|
link = handle.is('a[href]') ? handle:handle.parents('a[href]');
|
6008 |
|
|
|
6009 |
|
|
if (e.target === $this.element[0]) {
|
6010 |
|
|
return;
|
6011 |
|
|
}
|
6012 |
|
|
|
6013 |
|
|
if (handle.is($this.options._noDragClass) || handle.closest($this.options._noDragClass).length) {
|
6014 |
|
|
return;
|
6015 |
|
|
}
|
6016 |
|
|
|
6017 |
|
|
if (handle.is('[data-nestable-action]') || handle.closest('[data-nestable-action]').length) {
|
6018 |
|
|
return;
|
6019 |
|
|
}
|
6020 |
|
|
|
6021 |
|
|
if ($this.options.handleClass && !handle.hasClass($this.options.handleClass)) {
|
6022 |
|
|
|
6023 |
|
|
if ($this.options.handleClass) {
|
6024 |
|
|
handle = handle.closest($this.options._handleClass);
|
6025 |
|
|
}
|
6026 |
|
|
}
|
6027 |
|
|
|
6028 |
|
|
if (!handle.length || $this.dragEl || (!hasTouch && e.button !== 0) || (hasTouch && e.touches && e.touches.length !== 1)) {
|
6029 |
|
|
return;
|
6030 |
|
|
}
|
6031 |
|
|
|
6032 |
|
|
if (e.originalEvent && e.originalEvent.touches) {
|
6033 |
|
|
e = evt.originalEvent.touches[0];
|
6034 |
|
|
}
|
6035 |
|
|
|
6036 |
|
|
$this.delayMove = function(evt) {
|
6037 |
|
|
|
6038 |
|
|
link = false;
|
6039 |
|
|
|
6040 |
|
|
evt.preventDefault();
|
6041 |
|
|
$this.dragStart(e);
|
6042 |
|
|
$this.trigger('start.uk.nestable', [$this]);
|
6043 |
|
|
|
6044 |
|
|
$this.delayMove = false;
|
6045 |
|
|
};
|
6046 |
|
|
|
6047 |
|
|
$this.delayMove.x = parseInt(e.pageX, 10);
|
6048 |
|
|
$this.delayMove.y = parseInt(e.pageY, 10);
|
6049 |
|
|
$this.delayMove.threshold = $this.options.idlethreshold;
|
6050 |
|
|
|
6051 |
|
|
if (link.length && eEnd == 'touchend') {
|
6052 |
|
|
|
6053 |
|
|
$this.one(eEnd, function(){
|
6054 |
|
|
if (link && link.attr('href').trim()) {
|
6055 |
|
|
location.href = link.attr('href');
|
6056 |
|
|
}
|
6057 |
|
|
});
|
6058 |
|
|
}
|
6059 |
|
|
|
6060 |
|
|
e.preventDefault();
|
6061 |
|
|
};
|
6062 |
|
|
|
6063 |
|
|
var onMoveEvent = function(e) {
|
6064 |
|
|
|
6065 |
|
|
if (e.originalEvent && e.originalEvent.touches) {
|
6066 |
|
|
e = e.originalEvent.touches[0];
|
6067 |
|
|
}
|
6068 |
|
|
|
6069 |
|
|
if ($this.delayMove && (Math.abs(e.pageX - $this.delayMove.x) > $this.delayMove.threshold || Math.abs(e.pageY - $this.delayMove.y) > $this.delayMove.threshold)) {
|
6070 |
|
|
|
6071 |
|
|
if (!window.getSelection().toString()) {
|
6072 |
|
|
$this.delayMove(e);
|
6073 |
|
|
} else {
|
6074 |
|
|
$this.delayMove = false;
|
6075 |
|
|
}
|
6076 |
|
|
}
|
6077 |
|
|
|
6078 |
|
|
if ($this.dragEl) {
|
6079 |
|
|
e.preventDefault();
|
6080 |
|
|
$this.dragMove(e);
|
6081 |
|
|
$this.trigger('move.uk.nestable', [$this]);
|
6082 |
|
|
}
|
6083 |
|
|
};
|
6084 |
|
|
|
6085 |
|
|
var onEndEvent = function(e) {
|
6086 |
|
|
|
6087 |
|
|
if ($this.dragEl) {
|
6088 |
|
|
e.preventDefault();
|
6089 |
|
|
$this.dragStop(hasTouch && e.touches ? e.touches[0] : e);
|
6090 |
|
|
}
|
6091 |
|
|
|
6092 |
|
|
draggingElement = false;
|
6093 |
|
|
$this.delayMove = false;
|
6094 |
|
|
};
|
6095 |
|
|
|
6096 |
|
|
if (hasTouch) {
|
6097 |
|
|
this.element[0].addEventListener(eStart, onStartEvent, false);
|
6098 |
|
|
window.addEventListener(eMove, onMoveEvent, false);
|
6099 |
|
|
window.addEventListener(eEnd, onEndEvent, false);
|
6100 |
|
|
window.addEventListener(eCancel, onEndEvent, false);
|
6101 |
|
|
} else {
|
6102 |
|
|
this.on(eStart, onStartEvent);
|
6103 |
|
|
$win.on(eMove, onMoveEvent);
|
6104 |
|
|
$win.on(eEnd, onEndEvent);
|
6105 |
|
|
}
|
6106 |
|
|
|
6107 |
|
|
},
|
6108 |
|
|
|
6109 |
|
|
serialize: function() {
|
6110 |
|
|
|
6111 |
|
|
var data,
|
6112 |
|
|
depth = 0,
|
6113 |
|
|
list = this,
|
6114 |
|
|
step = function(level, depth) {
|
6115 |
|
|
|
6116 |
|
|
var array = [ ], items = level.children(list.options._listItemClass);
|
6117 |
|
|
|
6118 |
|
|
items.each(function() {
|
6119 |
|
|
|
6120 |
|
|
var li = UI.$(this),
|
6121 |
|
|
item = {}, attribute,
|
6122 |
|
|
sub = li.children(list.options._listClass);
|
6123 |
|
|
|
6124 |
|
|
for (var i = 0, attr, val; i < li[0].attributes.length; i++) {
|
6125 |
|
|
attribute = li[0].attributes[i];
|
6126 |
|
|
if (attribute.name.indexOf('data-') === 0) {
|
6127 |
|
|
attr = attribute.name.substr(5);
|
6128 |
|
|
val = UI.Utils.str2json(attribute.value);
|
6129 |
|
|
item[attr] = (val || attribute.value=='false' || attribute.value=='0') ? val:attribute.value;
|
6130 |
|
|
}
|
6131 |
|
|
}
|
6132 |
|
|
|
6133 |
|
|
if (sub.length) {
|
6134 |
|
|
item.children = step(sub, depth + 1);
|
6135 |
|
|
}
|
6136 |
|
|
|
6137 |
|
|
array.push(item);
|
6138 |
|
|
|
6139 |
|
|
});
|
6140 |
|
|
return array;
|
6141 |
|
|
};
|
6142 |
|
|
|
6143 |
|
|
data = step(list.element, depth);
|
6144 |
|
|
|
6145 |
|
|
return data;
|
6146 |
|
|
},
|
6147 |
|
|
|
6148 |
|
|
list: function(options) {
|
6149 |
|
|
|
6150 |
|
|
var data = [],
|
6151 |
|
|
list = this,
|
6152 |
|
|
depth = 0,
|
6153 |
|
|
step = function(level, depth, parent) {
|
6154 |
|
|
|
6155 |
|
|
var items = level.children(options._listItemClass);
|
6156 |
|
|
|
6157 |
|
|
items.each(function(index) {
|
6158 |
|
|
var li = UI.$(this),
|
6159 |
|
|
item = UI.$.extend({parent_id: (parent ? parent : null), depth: depth, order: index}, li.data()),
|
6160 |
|
|
sub = li.children(options._listClass);
|
6161 |
|
|
|
6162 |
|
|
data.push(item);
|
6163 |
|
|
|
6164 |
|
|
if (sub.length) {
|
6165 |
|
|
step(sub, depth + 1, li.data(options.idProperty || 'id'));
|
6166 |
|
|
}
|
6167 |
|
|
});
|
6168 |
|
|
};
|
6169 |
|
|
|
6170 |
|
|
options = UI.$.extend({}, list.options, options);
|
6171 |
|
|
|
6172 |
|
|
step(list.element, depth);
|
6173 |
|
|
|
6174 |
|
|
return data;
|
6175 |
|
|
},
|
6176 |
|
|
|
6177 |
|
|
reset: function() {
|
6178 |
|
|
|
6179 |
|
|
this.mouse = {
|
6180 |
|
|
offsetX : 0,
|
6181 |
|
|
offsetY : 0,
|
6182 |
|
|
startX : 0,
|
6183 |
|
|
startY : 0,
|
6184 |
|
|
lastX : 0,
|
6185 |
|
|
lastY : 0,
|
6186 |
|
|
nowX : 0,
|
6187 |
|
|
nowY : 0,
|
6188 |
|
|
distX : 0,
|
6189 |
|
|
distY : 0,
|
6190 |
|
|
dirAx : 0,
|
6191 |
|
|
dirX : 0,
|
6192 |
|
|
dirY : 0,
|
6193 |
|
|
lastDirX : 0,
|
6194 |
|
|
lastDirY : 0,
|
6195 |
|
|
distAxX : 0,
|
6196 |
|
|
distAxY : 0
|
6197 |
|
|
};
|
6198 |
|
|
this.moving = false;
|
6199 |
|
|
this.dragEl = null;
|
6200 |
|
|
this.dragRootEl = null;
|
6201 |
|
|
this.dragDepth = 0;
|
6202 |
|
|
this.hasNewRoot = false;
|
6203 |
|
|
this.pointEl = null;
|
6204 |
|
|
|
6205 |
|
|
for (var i=0; i<touchedlists.length; i++) {
|
6206 |
|
|
this.checkEmptyList(touchedlists[i]);
|
6207 |
|
|
}
|
6208 |
|
|
|
6209 |
|
|
touchedlists = [];
|
6210 |
|
|
},
|
6211 |
|
|
|
6212 |
|
|
toggleItem: function(li) {
|
6213 |
|
|
this[li.hasClass(this.options.collapsedClass) ? 'expandItem':'collapseItem'](li);
|
6214 |
|
|
},
|
6215 |
|
|
|
6216 |
|
|
expandItem: function(li) {
|
6217 |
|
|
li.removeClass(this.options.collapsedClass);
|
6218 |
|
|
},
|
6219 |
|
|
|
6220 |
|
|
collapseItem: function(li) {
|
6221 |
|
|
var lists = li.children(this.options._listClass);
|
6222 |
|
|
if (lists.length) {
|
6223 |
|
|
li.addClass(this.options.collapsedClass);
|
6224 |
|
|
}
|
6225 |
|
|
},
|
6226 |
|
|
|
6227 |
|
|
expandAll: function() {
|
6228 |
|
|
var list = this;
|
6229 |
|
|
this.find(list.options._listItemClass).each(function() {
|
6230 |
|
|
list.expandItem(UI.$(this));
|
6231 |
|
|
});
|
6232 |
|
|
},
|
6233 |
|
|
|
6234 |
|
|
collapseAll: function() {
|
6235 |
|
|
var list = this;
|
6236 |
|
|
this.find(list.options._listItemClass).each(function() {
|
6237 |
|
|
list.collapseItem(UI.$(this));
|
6238 |
|
|
});
|
6239 |
|
|
},
|
6240 |
|
|
|
6241 |
|
|
setParent: function(li) {
|
6242 |
|
|
|
6243 |
|
|
if (li.children(this.options._listClass).length) {
|
6244 |
|
|
li.addClass('uk-parent');
|
6245 |
|
|
}
|
6246 |
|
|
},
|
6247 |
|
|
|
6248 |
|
|
unsetParent: function(li) {
|
6249 |
|
|
li.removeClass('uk-parent '+this.options.collapsedClass);
|
6250 |
|
|
li.children(this.options._listClass).remove();
|
6251 |
|
|
},
|
6252 |
|
|
|
6253 |
|
|
dragStart: function(e) {
|
6254 |
|
|
|
6255 |
|
|
var mouse = this.mouse,
|
6256 |
|
|
target = UI.$(e.target),
|
6257 |
|
|
dragItem = target.closest(this.options._listItemClass),
|
6258 |
|
|
offset = dragItem.offset();
|
6259 |
|
|
|
6260 |
|
|
this.placeEl = dragItem;
|
6261 |
|
|
|
6262 |
|
|
mouse.offsetX = e.pageX - offset.left;
|
6263 |
|
|
mouse.offsetY = e.pageY - offset.top;
|
6264 |
|
|
|
6265 |
|
|
mouse.startX = mouse.lastX = offset.left;
|
6266 |
|
|
mouse.startY = mouse.lastY = offset.top;
|
6267 |
|
|
|
6268 |
|
|
this.dragRootEl = this.element;
|
6269 |
|
|
|
6270 |
|
|
this.dragEl = UI.$('<ul></ul>').addClass(this.options.listClass + ' ' + this.options.dragClass).append(dragItem.clone());
|
6271 |
|
|
this.dragEl.css('width', dragItem.width());
|
6272 |
|
|
this.placeEl.addClass(this.options.placeholderClass);
|
6273 |
|
|
|
6274 |
|
|
draggingElement = this.dragEl;
|
6275 |
|
|
|
6276 |
|
|
this.tmpDragOnSiblings = [dragItem[0].previousSibling, dragItem[0].nextSibling];
|
6277 |
|
|
|
6278 |
|
|
UI.$body.append(this.dragEl);
|
6279 |
|
|
|
6280 |
|
|
this.dragEl.css({
|
6281 |
|
|
left : offset.left,
|
6282 |
|
|
top : offset.top
|
6283 |
|
|
});
|
6284 |
|
|
|
6285 |
|
|
// total depth of dragging item
|
6286 |
|
|
var i, depth, items = this.dragEl.find(this.options._listItemClass);
|
6287 |
|
|
|
6288 |
|
|
for (i = 0; i < items.length; i++) {
|
6289 |
|
|
depth = UI.$(items[i]).parents(this.options._listClass+','+this.options._listBaseClass).length;
|
6290 |
|
|
if (depth > this.dragDepth) {
|
6291 |
|
|
this.dragDepth = depth;
|
6292 |
|
|
}
|
6293 |
|
|
}
|
6294 |
|
|
|
6295 |
|
|
html.addClass(this.options.movingClass);
|
6296 |
|
|
},
|
6297 |
|
|
|
6298 |
|
|
dragStop: function(e) {
|
6299 |
|
|
|
6300 |
|
|
var el = UI.$(this.placeEl),
|
6301 |
|
|
root = this.placeEl.parents(this.options._listBaseClass+':first');
|
6302 |
|
|
|
6303 |
|
|
this.placeEl.removeClass(this.options.placeholderClass);
|
6304 |
|
|
this.dragEl.remove();
|
6305 |
|
|
|
6306 |
|
|
if (this.element[0] !== root[0]) {
|
6307 |
|
|
|
6308 |
|
|
root.trigger('change.uk.nestable',[root.data('nestable'), el, 'added']);
|
6309 |
|
|
this.element.trigger('change.uk.nestable', [this, el, 'removed']);
|
6310 |
|
|
|
6311 |
|
|
} else {
|
6312 |
|
|
this.element.trigger('change.uk.nestable',[this, el, "moved"]);
|
6313 |
|
|
}
|
6314 |
|
|
|
6315 |
|
|
this.trigger('stop.uk.nestable', [this, el]);
|
6316 |
|
|
|
6317 |
|
|
this.reset();
|
6318 |
|
|
|
6319 |
|
|
html.removeClass(this.options.movingClass);
|
6320 |
|
|
},
|
6321 |
|
|
|
6322 |
|
|
dragMove: function(e) {
|
6323 |
|
|
var list, parent, prev, next, depth,
|
6324 |
|
|
opt = this.options,
|
6325 |
|
|
mouse = this.mouse,
|
6326 |
|
|
maxDepth = this.dragRootEl ? this.dragRootEl.data('nestable').options.maxDepth : opt.maxDepth;
|
6327 |
|
|
|
6328 |
|
|
this.dragEl.css({
|
6329 |
|
|
left : e.pageX - mouse.offsetX,
|
6330 |
|
|
top : e.pageY - mouse.offsetY
|
6331 |
|
|
});
|
6332 |
|
|
|
6333 |
|
|
// mouse position last events
|
6334 |
|
|
mouse.lastX = mouse.nowX;
|
6335 |
|
|
mouse.lastY = mouse.nowY;
|
6336 |
|
|
// mouse position this events
|
6337 |
|
|
mouse.nowX = e.pageX;
|
6338 |
|
|
mouse.nowY = e.pageY;
|
6339 |
|
|
// distance mouse moved between events
|
6340 |
|
|
mouse.distX = mouse.nowX - mouse.lastX;
|
6341 |
|
|
mouse.distY = mouse.nowY - mouse.lastY;
|
6342 |
|
|
// direction mouse was moving
|
6343 |
|
|
mouse.lastDirX = mouse.dirX;
|
6344 |
|
|
mouse.lastDirY = mouse.dirY;
|
6345 |
|
|
// direction mouse is now moving (on both axis)
|
6346 |
|
|
mouse.dirX = mouse.distX === 0 ? 0 : mouse.distX > 0 ? 1 : -1;
|
6347 |
|
|
mouse.dirY = mouse.distY === 0 ? 0 : mouse.distY > 0 ? 1 : -1;
|
6348 |
|
|
// axis mouse is now moving on
|
6349 |
|
|
var newAx = Math.abs(mouse.distX) > Math.abs(mouse.distY) ? 1 : 0;
|
6350 |
|
|
|
6351 |
|
|
// do nothing on first move
|
6352 |
|
|
if (!mouse.moving) {
|
6353 |
|
|
mouse.dirAx = newAx;
|
6354 |
|
|
mouse.moving = true;
|
6355 |
|
|
return;
|
6356 |
|
|
}
|
6357 |
|
|
|
6358 |
|
|
// calc distance moved on this axis (and direction)
|
6359 |
|
|
if (mouse.dirAx !== newAx) {
|
6360 |
|
|
mouse.distAxX = 0;
|
6361 |
|
|
mouse.distAxY = 0;
|
6362 |
|
|
} else {
|
6363 |
|
|
mouse.distAxX += Math.abs(mouse.distX);
|
6364 |
|
|
if (mouse.dirX !== 0 && mouse.dirX !== mouse.lastDirX) {
|
6365 |
|
|
mouse.distAxX = 0;
|
6366 |
|
|
}
|
6367 |
|
|
mouse.distAxY += Math.abs(mouse.distY);
|
6368 |
|
|
if (mouse.dirY !== 0 && mouse.dirY !== mouse.lastDirY) {
|
6369 |
|
|
mouse.distAxY = 0;
|
6370 |
|
|
}
|
6371 |
|
|
}
|
6372 |
|
|
mouse.dirAx = newAx;
|
6373 |
|
|
|
6374 |
|
|
/**
|
6375 |
|
|
* move horizontal
|
6376 |
|
|
*/
|
6377 |
|
|
if (mouse.dirAx && mouse.distAxX >= opt.threshold) {
|
6378 |
|
|
// reset move distance on x-axis for new phase
|
6379 |
|
|
mouse.distAxX = 0;
|
6380 |
|
|
prev = this.placeEl.prev('li');
|
6381 |
|
|
|
6382 |
|
|
// increase horizontal level if previous sibling exists, is not collapsed, and does not have a 'no children' class
|
6383 |
|
|
if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass) && !prev.hasClass(opt.noChildrenClass)) {
|
6384 |
|
|
|
6385 |
|
|
// cannot increase level when item above is collapsed
|
6386 |
|
|
list = prev.find(opt._listClass).last();
|
6387 |
|
|
|
6388 |
|
|
// check if depth limit has reached
|
6389 |
|
|
depth = this.placeEl.parents(opt._listClass+','+opt._listBaseClass).length;
|
6390 |
|
|
|
6391 |
|
|
if (depth + this.dragDepth <= maxDepth) {
|
6392 |
|
|
|
6393 |
|
|
// create new sub-level if one doesn't exist
|
6394 |
|
|
if (!list.length) {
|
6395 |
|
|
list = UI.$('<ul/>').addClass(opt.listClass);
|
6396 |
|
|
list.append(this.placeEl);
|
6397 |
|
|
prev.append(list);
|
6398 |
|
|
this.setParent(prev);
|
6399 |
|
|
} else {
|
6400 |
|
|
// else append to next level up
|
6401 |
|
|
list = prev.children(opt._listClass).last();
|
6402 |
|
|
list.append(this.placeEl);
|
6403 |
|
|
}
|
6404 |
|
|
}
|
6405 |
|
|
}
|
6406 |
|
|
|
6407 |
|
|
// decrease horizontal level
|
6408 |
|
|
if (mouse.distX < 0) {
|
6409 |
|
|
|
6410 |
|
|
// we cannot decrease the level if an item precedes the current one
|
6411 |
|
|
next = this.placeEl.next(opt._listItemClass);
|
6412 |
|
|
if (!next.length) {
|
6413 |
|
|
|
6414 |
|
|
// get parent ul of the list item
|
6415 |
|
|
var parentUl = this.placeEl.closest([opt._listBaseClass, opt._listClass].join(','));
|
6416 |
|
|
// try to get the li surrounding the ul
|
6417 |
|
|
var surroundingLi = parentUl.closest(opt._listItemClass);
|
6418 |
|
|
|
6419 |
|
|
// if the ul is inside of a li (meaning it is nested)
|
6420 |
|
|
if (surroundingLi.length) {
|
6421 |
|
|
// we can decrease the horizontal level
|
6422 |
|
|
surroundingLi.after(this.placeEl);
|
6423 |
|
|
// if the previous parent ul is now empty
|
6424 |
|
|
if (!parentUl.children().length) {
|
6425 |
|
|
this.unsetParent(surroundingLi);
|
6426 |
|
|
}
|
6427 |
|
|
}
|
6428 |
|
|
}
|
6429 |
|
|
}
|
6430 |
|
|
}
|
6431 |
|
|
|
6432 |
|
|
var isEmpty = false;
|
6433 |
|
|
|
6434 |
|
|
// find list item under cursor
|
6435 |
|
|
var pointX = e.pageX - (window.pageXOffset || document.scrollLeft || 0),
|
6436 |
|
|
pointY = e.pageY - (window.pageYOffset || document.documentElement.scrollTop);
|
6437 |
|
|
this.pointEl = UI.$(document.elementFromPoint(pointX, pointY));
|
6438 |
|
|
|
6439 |
|
|
if (opt.handleClass && this.pointEl.hasClass(opt.handleClass)) {
|
6440 |
|
|
|
6441 |
|
|
this.pointEl = this.pointEl.closest(opt._listItemClass);
|
6442 |
|
|
|
6443 |
|
|
} else {
|
6444 |
|
|
|
6445 |
|
|
var nestableitem = this.pointEl.closest(opt._listItemClass);
|
6446 |
|
|
|
6447 |
|
|
if (nestableitem.length) {
|
6448 |
|
|
this.pointEl = nestableitem;
|
6449 |
|
|
}
|
6450 |
|
|
}
|
6451 |
|
|
|
6452 |
|
|
if (this.placeEl.find(this.pointEl).length) {
|
6453 |
|
|
return;
|
6454 |
|
|
}
|
6455 |
|
|
|
6456 |
|
|
if (this.pointEl.data('nestable') && !this.pointEl.children().length) {
|
6457 |
|
|
isEmpty = true;
|
6458 |
|
|
this.checkEmptyList(this.pointEl);
|
6459 |
|
|
} else if (!this.pointEl.length || !this.pointEl.hasClass(opt.listItemClass)) {
|
6460 |
|
|
return;
|
6461 |
|
|
}
|
6462 |
|
|
|
6463 |
|
|
// find parent list of item under cursor
|
6464 |
|
|
var pointElRoot = this.element,
|
6465 |
|
|
tmpRoot = this.pointEl.closest(this.options._listBaseClass),
|
6466 |
|
|
isNewRoot = pointElRoot[0] != tmpRoot[0];
|
6467 |
|
|
|
6468 |
|
|
/**
|
6469 |
|
|
* move vertical
|
6470 |
|
|
*/
|
6471 |
|
|
if (!mouse.dirAx || isNewRoot || isEmpty) {
|
6472 |
|
|
|
6473 |
|
|
// check if groups match if dragging over new root
|
6474 |
|
|
if (isNewRoot && opt.group !== tmpRoot.data('nestable-group')) {
|
6475 |
|
|
return;
|
6476 |
|
|
} else {
|
6477 |
|
|
touchedlists.push(pointElRoot);
|
6478 |
|
|
}
|
6479 |
|
|
|
6480 |
|
|
// check depth limit
|
6481 |
|
|
depth = this.dragDepth - 1 + this.pointEl.parents(opt._listClass+','+opt._listBaseClass).length;
|
6482 |
|
|
|
6483 |
|
|
if (depth > maxDepth) {
|
6484 |
|
|
return;
|
6485 |
|
|
}
|
6486 |
|
|
|
6487 |
|
|
var before = e.pageY < (this.pointEl.offset().top + this.pointEl.height() / 2);
|
6488 |
|
|
|
6489 |
|
|
parent = this.placeEl.parent();
|
6490 |
|
|
|
6491 |
|
|
if (isEmpty) {
|
6492 |
|
|
this.pointEl.append(this.placeEl);
|
6493 |
|
|
} else if (before) {
|
6494 |
|
|
this.pointEl.before(this.placeEl);
|
6495 |
|
|
} else {
|
6496 |
|
|
this.pointEl.after(this.placeEl);
|
6497 |
|
|
}
|
6498 |
|
|
|
6499 |
|
|
if (!parent.children().length) {
|
6500 |
|
|
if (!parent.data('nestable')) this.unsetParent(parent.parent());
|
6501 |
|
|
}
|
6502 |
|
|
|
6503 |
|
|
this.checkEmptyList(this.dragRootEl);
|
6504 |
|
|
this.checkEmptyList(pointElRoot);
|
6505 |
|
|
|
6506 |
|
|
// parent root list has changed
|
6507 |
|
|
if (isNewRoot) {
|
6508 |
|
|
this.dragRootEl = tmpRoot;
|
6509 |
|
|
this.hasNewRoot = this.element[0] !== this.dragRootEl[0];
|
6510 |
|
|
}
|
6511 |
|
|
}
|
6512 |
|
|
},
|
6513 |
|
|
|
6514 |
|
|
checkEmptyList: function(list) {
|
6515 |
|
|
|
6516 |
|
|
list = list ? UI.$(list) : this.element;
|
6517 |
|
|
|
6518 |
|
|
if (this.options.emptyClass) {
|
6519 |
|
|
list[!list.children().length ? 'addClass':'removeClass'](this.options.emptyClass);
|
6520 |
|
|
}
|
6521 |
|
|
}
|
6522 |
|
|
|
6523 |
|
|
});
|
6524 |
|
|
|
6525 |
|
|
return UI.nestable;
|
6526 |
|
|
});
|
6527 |
|
|
|
6528 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
6529 |
|
|
(function(addon) {
|
6530 |
|
|
|
6531 |
|
|
var component;
|
6532 |
|
|
|
6533 |
|
|
if (window.UIkit2) {
|
6534 |
|
|
component = addon(UIkit2);
|
6535 |
|
|
}
|
6536 |
|
|
|
6537 |
|
|
if (typeof define == 'function' && define.amd) {
|
6538 |
|
|
define('uikit-notify', ['uikit'], function(){
|
6539 |
|
|
return component || addon(UIkit2);
|
6540 |
|
|
});
|
6541 |
|
|
}
|
6542 |
|
|
|
6543 |
|
|
})(function(UI){
|
6544 |
|
|
|
6545 |
|
|
"use strict";
|
6546 |
|
|
|
6547 |
|
|
var containers = {},
|
6548 |
|
|
messages = {},
|
6549 |
|
|
|
6550 |
|
|
notify = function(options){
|
6551 |
|
|
|
6552 |
|
|
if (UI.$.type(options) == 'string') {
|
6553 |
|
|
options = { message: options };
|
6554 |
|
|
}
|
6555 |
|
|
|
6556 |
|
|
if (arguments[1]) {
|
6557 |
|
|
options = UI.$.extend(options, UI.$.type(arguments[1]) == 'string' ? {status:arguments[1]} : arguments[1]);
|
6558 |
|
|
}
|
6559 |
|
|
|
6560 |
|
|
return (new Message(options)).show();
|
6561 |
|
|
},
|
6562 |
|
|
closeAll = function(group, instantly){
|
6563 |
|
|
|
6564 |
|
|
var id;
|
6565 |
|
|
|
6566 |
|
|
if (group) {
|
6567 |
|
|
for(id in messages) { if(group===messages[id].group) messages[id].close(instantly); }
|
6568 |
|
|
} else {
|
6569 |
|
|
for(id in messages) { messages[id].close(instantly); }
|
6570 |
|
|
}
|
6571 |
|
|
};
|
6572 |
|
|
|
6573 |
|
|
var Message = function(options){
|
6574 |
|
|
|
6575 |
|
|
this.options = UI.$.extend({}, Message.defaults, options);
|
6576 |
|
|
|
6577 |
|
|
this.uuid = UI.Utils.uid('notifymsg');
|
6578 |
|
|
this.element = UI.$([
|
6579 |
|
|
|
6580 |
|
|
'<div class="uk-notify-message">',
|
6581 |
|
|
'<a class="uk-close"></a>',
|
6582 |
|
|
'<div></div>',
|
6583 |
|
|
'</div>'
|
6584 |
|
|
|
6585 |
|
|
].join('')).data("notifyMessage", this);
|
6586 |
|
|
|
6587 |
|
|
this.content(this.options.message);
|
6588 |
|
|
|
6589 |
|
|
// status
|
6590 |
|
|
if (this.options.status) {
|
6591 |
|
|
this.element.addClass('uk-notify-message-'+this.options.status);
|
6592 |
|
|
this.currentstatus = this.options.status;
|
6593 |
|
|
}
|
6594 |
|
|
|
6595 |
|
|
this.group = this.options.group;
|
6596 |
|
|
|
6597 |
|
|
messages[this.uuid] = this;
|
6598 |
|
|
|
6599 |
|
|
if(!containers[this.options.pos]) {
|
6600 |
|
|
containers[this.options.pos] = UI.$('<div class="uk-notify uk-notify-'+this.options.pos+'"></div>').appendTo('body').on("click", ".uk-notify-message", function(){
|
6601 |
|
|
|
6602 |
|
|
var message = UI.$(this).data('notifyMessage');
|
6603 |
|
|
|
6604 |
|
|
message.element.trigger('manualclose.uk.notify', [message]);
|
6605 |
|
|
message.close();
|
6606 |
|
|
});
|
6607 |
|
|
}
|
6608 |
|
|
};
|
6609 |
|
|
|
6610 |
|
|
|
6611 |
|
|
UI.$.extend(Message.prototype, {
|
6612 |
|
|
|
6613 |
|
|
uuid: false,
|
6614 |
|
|
element: false,
|
6615 |
|
|
timout: false,
|
6616 |
|
|
currentstatus: "",
|
6617 |
|
|
group: false,
|
6618 |
|
|
|
6619 |
|
|
show: function() {
|
6620 |
|
|
|
6621 |
|
|
if (this.element.is(':visible')) return;
|
6622 |
|
|
|
6623 |
|
|
var $this = this;
|
6624 |
|
|
|
6625 |
|
|
containers[this.options.pos].show().prepend(this.element);
|
6626 |
|
|
|
6627 |
|
|
var marginbottom = parseInt(this.element.css('margin-bottom'), 10);
|
6628 |
|
|
|
6629 |
|
|
this.element.css({opacity:0, marginTop: -1*this.element.outerHeight(), marginBottom:0}).animate({opacity:1, marginTop:0, marginBottom:marginbottom}, function(){
|
6630 |
|
|
|
6631 |
|
|
if ($this.options.timeout) {
|
6632 |
|
|
|
6633 |
|
|
var closefn = function(){ $this.close(); };
|
6634 |
|
|
|
6635 |
|
|
$this.timeout = setTimeout(closefn, $this.options.timeout);
|
6636 |
|
|
|
6637 |
|
|
$this.element.hover(
|
6638 |
|
|
function() { clearTimeout($this.timeout); },
|
6639 |
|
|
function() { $this.timeout = setTimeout(closefn, $this.options.timeout); }
|
6640 |
|
|
);
|
6641 |
|
|
}
|
6642 |
|
|
|
6643 |
|
|
});
|
6644 |
|
|
|
6645 |
|
|
return this;
|
6646 |
|
|
},
|
6647 |
|
|
|
6648 |
|
|
close: function(instantly) {
|
6649 |
|
|
|
6650 |
|
|
var $this = this,
|
6651 |
|
|
finalize = function(){
|
6652 |
|
|
$this.element.remove();
|
6653 |
|
|
|
6654 |
|
|
if (!containers[$this.options.pos].children().length) {
|
6655 |
|
|
containers[$this.options.pos].hide();
|
6656 |
|
|
}
|
6657 |
|
|
|
6658 |
|
|
$this.options.onClose.apply($this, []);
|
6659 |
|
|
$this.element.trigger('close.uk.notify', [$this]);
|
6660 |
|
|
|
6661 |
|
|
delete messages[$this.uuid];
|
6662 |
|
|
};
|
6663 |
|
|
|
6664 |
|
|
if (this.timeout) clearTimeout(this.timeout);
|
6665 |
|
|
|
6666 |
|
|
if (instantly) {
|
6667 |
|
|
finalize();
|
6668 |
|
|
} else {
|
6669 |
|
|
this.element.animate({opacity:0, marginTop: -1* this.element.outerHeight(), marginBottom:0}, function(){
|
6670 |
|
|
finalize();
|
6671 |
|
|
});
|
6672 |
|
|
}
|
6673 |
|
|
},
|
6674 |
|
|
|
6675 |
|
|
content: function(html){
|
6676 |
|
|
|
6677 |
|
|
var container = this.element.find(">div");
|
6678 |
|
|
|
6679 |
|
|
if(!html) {
|
6680 |
|
|
return container.html();
|
6681 |
|
|
}
|
6682 |
|
|
|
6683 |
|
|
container.html(html);
|
6684 |
|
|
|
6685 |
|
|
return this;
|
6686 |
|
|
},
|
6687 |
|
|
|
6688 |
|
|
status: function(status) {
|
6689 |
|
|
|
6690 |
|
|
if (!status) {
|
6691 |
|
|
return this.currentstatus;
|
6692 |
|
|
}
|
6693 |
|
|
|
6694 |
|
|
this.element.removeClass('uk-notify-message-'+this.currentstatus).addClass('uk-notify-message-'+status);
|
6695 |
|
|
|
6696 |
|
|
this.currentstatus = status;
|
6697 |
|
|
|
6698 |
|
|
return this;
|
6699 |
|
|
}
|
6700 |
|
|
});
|
6701 |
|
|
|
6702 |
|
|
Message.defaults = {
|
6703 |
|
|
message: "",
|
6704 |
|
|
status: "",
|
6705 |
|
|
timeout: 5000,
|
6706 |
|
|
group: null,
|
6707 |
|
|
pos: 'top-center',
|
6708 |
|
|
onClose: function() {}
|
6709 |
|
|
};
|
6710 |
|
|
|
6711 |
|
|
UI.notify = notify;
|
6712 |
|
|
UI.notify.message = Message;
|
6713 |
|
|
UI.notify.closeAll = closeAll;
|
6714 |
|
|
|
6715 |
|
|
return notify;
|
6716 |
|
|
});
|
6717 |
|
|
|
6718 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
6719 |
|
|
(function(addon) {
|
6720 |
|
|
|
6721 |
|
|
var component;
|
6722 |
|
|
|
6723 |
|
|
if (window.UIkit2) {
|
6724 |
|
|
component = addon(UIkit2);
|
6725 |
|
|
}
|
6726 |
|
|
|
6727 |
|
|
if (typeof define == 'function' && define.amd) {
|
6728 |
|
|
define('uikit-slideshow', ['uikit'], function() {
|
6729 |
|
|
return component || addon(UIkit2);
|
6730 |
|
|
});
|
6731 |
|
|
}
|
6732 |
|
|
|
6733 |
|
|
})(function(UI) {
|
6734 |
|
|
|
6735 |
|
|
"use strict";
|
6736 |
|
|
|
6737 |
|
|
var Animations, playerId = 0;
|
6738 |
|
|
|
6739 |
|
|
UI.component('slideshow', {
|
6740 |
|
|
|
6741 |
|
|
defaults: {
|
6742 |
|
|
animation : 'fade',
|
6743 |
|
|
duration : 500,
|
6744 |
|
|
height : 'auto',
|
6745 |
|
|
start : 0,
|
6746 |
|
|
autoplay : false,
|
6747 |
|
|
autoplayInterval : 7000,
|
6748 |
|
|
videoautoplay : true,
|
6749 |
|
|
videomute : true,
|
6750 |
|
|
slices : 15,
|
6751 |
|
|
pauseOnHover : true,
|
6752 |
|
|
kenburns : false,
|
6753 |
|
|
kenburnsanimations : [
|
6754 |
|
|
'uk-animation-middle-left',
|
6755 |
|
|
'uk-animation-top-right',
|
6756 |
|
|
'uk-animation-bottom-left',
|
6757 |
|
|
'uk-animation-top-center',
|
6758 |
|
|
'', // middle-center
|
6759 |
|
|
'uk-animation-bottom-right'
|
6760 |
|
|
]
|
6761 |
|
|
},
|
6762 |
|
|
|
6763 |
|
|
current : false,
|
6764 |
|
|
interval : null,
|
6765 |
|
|
hovering : false,
|
6766 |
|
|
|
6767 |
|
|
boot: function() {
|
6768 |
|
|
|
6769 |
|
|
// init code
|
6770 |
|
|
UI.ready(function(context) {
|
6771 |
|
|
|
6772 |
|
|
UI.$('[data-uk-slideshow]', context).each(function() {
|
6773 |
|
|
|
6774 |
|
|
var slideshow = UI.$(this);
|
6775 |
|
|
|
6776 |
|
|
if (!slideshow.data('slideshow')) {
|
6777 |
|
|
UI.slideshow(slideshow, UI.Utils.options(slideshow.attr('data-uk-slideshow')));
|
6778 |
|
|
}
|
6779 |
|
|
});
|
6780 |
|
|
});
|
6781 |
|
|
},
|
6782 |
|
|
|
6783 |
|
|
init: function() {
|
6784 |
|
|
|
6785 |
|
|
var $this = this;
|
6786 |
|
|
|
6787 |
|
|
this.container = this.element.hasClass('uk-slideshow') ? this.element : UI.$(this.find('.uk-slideshow:first'));
|
6788 |
|
|
this.current = this.options.start;
|
6789 |
|
|
this.animating = false;
|
6790 |
|
|
|
6791 |
|
|
this.fixFullscreen = navigator.userAgent.match(/(iPad|iPhone|iPod)/g) && this.container.hasClass('uk-slideshow-fullscreen'); // viewport unit fix for height:100vh - should be fixed in iOS 8
|
6792 |
|
|
|
6793 |
|
|
if (this.options.kenburns) {
|
6794 |
|
|
|
6795 |
|
|
this.kbanimduration = this.options.kenburns === true ? '15s': this.options.kenburns;
|
6796 |
|
|
|
6797 |
|
|
if (!String(this.kbanimduration).match(/(ms|s)$/)) {
|
6798 |
|
|
this.kbanimduration += 'ms';
|
6799 |
|
|
}
|
6800 |
|
|
|
6801 |
|
|
if (typeof(this.options.kenburnsanimations) == 'string') {
|
6802 |
|
|
this.options.kenburnsanimations = this.options.kenburnsanimations.split(',');
|
6803 |
|
|
}
|
6804 |
|
|
}
|
6805 |
|
|
|
6806 |
|
|
this.update();
|
6807 |
|
|
|
6808 |
|
|
this.on('click.uk.slideshow', '[data-uk-slideshow-item]', function(e) {
|
6809 |
|
|
|
6810 |
|
|
e.preventDefault();
|
6811 |
|
|
|
6812 |
|
|
var slide = UI.$(this).attr('data-uk-slideshow-item');
|
6813 |
|
|
|
6814 |
|
|
if ($this.current == slide) return;
|
6815 |
|
|
|
6816 |
|
|
switch(slide) {
|
6817 |
|
|
case 'next':
|
6818 |
|
|
case 'previous':
|
6819 |
|
|
$this[slide=='next' ? 'next':'previous']();
|
6820 |
|
|
break;
|
6821 |
|
|
default:
|
6822 |
|
|
$this.show(parseInt(slide, 10));
|
6823 |
|
|
}
|
6824 |
|
|
|
6825 |
|
|
$this.stop();
|
6826 |
|
|
});
|
6827 |
|
|
|
6828 |
|
|
UI.$win.on("resize load", UI.Utils.debounce(function() {
|
6829 |
|
|
$this.resize();
|
6830 |
|
|
|
6831 |
|
|
if ($this.fixFullscreen) {
|
6832 |
|
|
$this.container.css('height', window.innerHeight);
|
6833 |
|
|
$this.slides.css('height', window.innerHeight);
|
6834 |
|
|
}
|
6835 |
|
|
}, 100));
|
6836 |
|
|
|
6837 |
|
|
// chrome image load fix
|
6838 |
|
|
setTimeout(function(){
|
6839 |
|
|
$this.resize();
|
6840 |
|
|
}, 80);
|
6841 |
|
|
|
6842 |
|
|
// Set autoplay
|
6843 |
|
|
if (this.options.autoplay) {
|
6844 |
|
|
this.start();
|
6845 |
|
|
}
|
6846 |
|
|
|
6847 |
|
|
if (this.options.videoautoplay && this.slides.eq(this.current).data('media')) {
|
6848 |
|
|
this.playmedia(this.slides.eq(this.current).data('media'));
|
6849 |
|
|
}
|
6850 |
|
|
|
6851 |
|
|
if (this.options.kenburns) {
|
6852 |
|
|
this.applyKenBurns(this.slides.eq(this.current));
|
6853 |
|
|
}
|
6854 |
|
|
|
6855 |
|
|
this.container.on({
|
6856 |
|
|
mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; },
|
6857 |
|
|
mouseleave: function() { $this.hovering = false; }
|
6858 |
|
|
});
|
6859 |
|
|
|
6860 |
|
|
this.on('swipeRight swipeLeft', function(e) {
|
6861 |
|
|
$this[e.type=='swipeLeft' ? 'next' : 'previous']();
|
6862 |
|
|
});
|
6863 |
|
|
|
6864 |
|
|
this.on('display.uk.check', function(){
|
6865 |
|
|
if ($this.element.is(':visible')) {
|
6866 |
|
|
|
6867 |
|
|
$this.resize();
|
6868 |
|
|
|
6869 |
|
|
if ($this.fixFullscreen) {
|
6870 |
|
|
$this.container.css('height', window.innerHeight);
|
6871 |
|
|
$this.slides.css('height', window.innerHeight);
|
6872 |
|
|
}
|
6873 |
|
|
}
|
6874 |
|
|
});
|
6875 |
|
|
|
6876 |
|
|
UI.domObserve(this.element, function(e) {
|
6877 |
|
|
if ($this.container.children(':not([data-slideshow-slide])').not('.uk-slideshow-ghost').length) {
|
6878 |
|
|
$this.update(true);
|
6879 |
|
|
}
|
6880 |
|
|
});
|
6881 |
|
|
},
|
6882 |
|
|
|
6883 |
|
|
update: function(resize) {
|
6884 |
|
|
|
6885 |
|
|
var $this = this, canvas, processed = 0;
|
6886 |
|
|
|
6887 |
|
|
this.slides = this.container.children();
|
6888 |
|
|
this.slidesCount = this.slides.length;
|
6889 |
|
|
|
6890 |
|
|
if (!this.slides.eq(this.current).length) {
|
6891 |
|
|
this.current = 0;
|
6892 |
|
|
}
|
6893 |
|
|
|
6894 |
|
|
this.slides.each(function(index) {
|
6895 |
|
|
|
6896 |
|
|
var slide = UI.$(this);
|
6897 |
|
|
|
6898 |
|
|
if (slide.data('processed')) {
|
6899 |
|
|
return;
|
6900 |
|
|
}
|
6901 |
|
|
|
6902 |
|
|
var media = slide.children('img,video,iframe').eq(0), type = 'html';
|
6903 |
|
|
|
6904 |
|
|
slide.data('media', media);
|
6905 |
|
|
slide.data('sizer', media);
|
6906 |
|
|
|
6907 |
|
|
if (media.length) {
|
6908 |
|
|
|
6909 |
|
|
var placeholder;
|
6910 |
|
|
|
6911 |
|
|
type = media[0].nodeName.toLowerCase();
|
6912 |
|
|
|
6913 |
|
|
switch(media[0].nodeName) {
|
6914 |
|
|
case 'IMG':
|
6915 |
|
|
|
6916 |
|
|
var cover = UI.$('<div class="uk-cover-background uk-position-cover"></div>').css({'background-image':'url('+ media.attr('src') + ')'});
|
6917 |
|
|
|
6918 |
|
|
if (media.attr('width') && media.attr('height')) {
|
6919 |
|
|
placeholder = UI.$('<canvas></canvas>').attr({width:media.attr('width'), height:media.attr('height')});
|
6920 |
|
|
media.replaceWith(placeholder);
|
6921 |
|
|
media = placeholder;
|
6922 |
|
|
placeholder = undefined;
|
6923 |
|
|
}
|
6924 |
|
|
|
6925 |
|
|
media.css({width: '100%',height: 'auto', opacity:0});
|
6926 |
|
|
slide.prepend(cover).data('cover', cover);
|
6927 |
|
|
break;
|
6928 |
|
|
|
6929 |
|
|
case 'IFRAME':
|
6930 |
|
|
|
6931 |
|
|
var src = media[0].src, iframeId = 'sw-'+(++playerId);
|
6932 |
|
|
|
6933 |
|
|
media
|
6934 |
|
|
.attr('src', '').on('load', function(){
|
6935 |
|
|
|
6936 |
|
|
if (index !== $this.current || (index == $this.current && !$this.options.videoautoplay)) {
|
6937 |
|
|
$this.pausemedia(media);
|
6938 |
|
|
}
|
6939 |
|
|
|
6940 |
|
|
if ($this.options.videomute) {
|
6941 |
|
|
|
6942 |
|
|
$this.mutemedia(media);
|
6943 |
|
|
|
6944 |
|
|
var inv = setInterval((function(ic) {
|
6945 |
|
|
return function() {
|
6946 |
|
|
$this.mutemedia(media);
|
6947 |
|
|
if (++ic >= 4) clearInterval(inv);
|
6948 |
|
|
}
|
6949 |
|
|
})(0), 250);
|
6950 |
|
|
}
|
6951 |
|
|
|
6952 |
|
|
})
|
6953 |
|
|
.data('slideshow', $this) // add self-reference for the vimeo-ready listener
|
6954 |
|
|
.attr('data-player-id', iframeId) // add frameId for the vimeo-ready listener
|
6955 |
|
|
.attr('src', [src, (src.indexOf('?') > -1 ? '&':'?'), 'enablejsapi=1&api=1&player_id='+iframeId].join(''))
|
6956 |
|
|
.addClass('uk-position-absolute');
|
6957 |
|
|
|
6958 |
|
|
// disable pointer events
|
6959 |
|
|
if(!UI.support.touch) media.css('pointer-events', 'none');
|
6960 |
|
|
|
6961 |
|
|
placeholder = true;
|
6962 |
|
|
|
6963 |
|
|
if (UI.cover) {
|
6964 |
|
|
UI.cover(media);
|
6965 |
|
|
media.attr('data-uk-cover', '{}');
|
6966 |
|
|
}
|
6967 |
|
|
|
6968 |
|
|
break;
|
6969 |
|
|
|
6970 |
|
|
case 'VIDEO':
|
6971 |
|
|
media.addClass('uk-cover-object uk-position-absolute');
|
6972 |
|
|
placeholder = true;
|
6973 |
|
|
|
6974 |
|
|
if ($this.options.videomute) $this.mutemedia(media);
|
6975 |
|
|
}
|
6976 |
|
|
|
6977 |
|
|
if (placeholder) {
|
6978 |
|
|
|
6979 |
|
|
canvas = UI.$('<canvas></canvas>').attr({'width': media[0].width, 'height': media[0].height});
|
6980 |
|
|
var img = UI.$('<img style="width:100%;height:auto;">').attr('src', canvas[0].toDataURL());
|
6981 |
|
|
|
6982 |
|
|
slide.prepend(img);
|
6983 |
|
|
slide.data('sizer', img);
|
6984 |
|
|
}
|
6985 |
|
|
|
6986 |
|
|
} else {
|
6987 |
|
|
slide.data('sizer', slide);
|
6988 |
|
|
}
|
6989 |
|
|
|
6990 |
|
|
if ($this.hasKenBurns(slide)) {
|
6991 |
|
|
|
6992 |
|
|
slide.data('cover').css({
|
6993 |
|
|
'-webkit-animation-duration': $this.kbanimduration,
|
6994 |
|
|
'animation-duration': $this.kbanimduration
|
6995 |
|
|
});
|
6996 |
|
|
}
|
6997 |
|
|
|
6998 |
|
|
slide.data('processed', ++processed);
|
6999 |
|
|
slide.attr('data-slideshow-slide', type);
|
7000 |
|
|
});
|
7001 |
|
|
|
7002 |
|
|
if (processed) {
|
7003 |
|
|
|
7004 |
|
|
this.triggers = this.find('[data-uk-slideshow-item]');
|
7005 |
|
|
|
7006 |
|
|
// Set start slide
|
7007 |
|
|
this.slides.attr('aria-hidden', 'true').removeClass('uk-active').eq(this.current).addClass('uk-active').attr('aria-hidden', 'false');
|
7008 |
|
|
this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass('uk-active');
|
7009 |
|
|
}
|
7010 |
|
|
|
7011 |
|
|
if (resize && processed) {
|
7012 |
|
|
this.resize();
|
7013 |
|
|
}
|
7014 |
|
|
},
|
7015 |
|
|
|
7016 |
|
|
resize: function() {
|
7017 |
|
|
|
7018 |
|
|
if (this.container.hasClass('uk-slideshow-fullscreen')) return;
|
7019 |
|
|
|
7020 |
|
|
var height = this.options.height;
|
7021 |
|
|
|
7022 |
|
|
if (this.options.height === 'auto') {
|
7023 |
|
|
|
7024 |
|
|
height = 0;
|
7025 |
|
|
|
7026 |
|
|
this.slides.css('height', '').each(function() {
|
7027 |
|
|
height = Math.max(height, UI.$(this).height());
|
7028 |
|
|
});
|
7029 |
|
|
}
|
7030 |
|
|
|
7031 |
|
|
this.container.css('height', height);
|
7032 |
|
|
this.slides.css('height', height);
|
7033 |
|
|
},
|
7034 |
|
|
|
7035 |
|
|
show: function(index, direction) {
|
7036 |
|
|
|
7037 |
|
|
if (this.animating || this.current == index) return;
|
7038 |
|
|
|
7039 |
|
|
this.animating = true;
|
7040 |
|
|
|
7041 |
|
|
var $this = this,
|
7042 |
|
|
current = this.slides.eq(this.current),
|
7043 |
|
|
next = this.slides.eq(index),
|
7044 |
|
|
dir = direction ? direction : this.current < index ? 1 : -1,
|
7045 |
|
|
currentmedia = current.data('media'),
|
7046 |
|
|
animation = Animations[this.options.animation] ? this.options.animation : 'fade',
|
7047 |
|
|
nextmedia = next.data('media'),
|
7048 |
|
|
finalize = function() {
|
7049 |
|
|
|
7050 |
|
|
if (!$this.animating) return;
|
7051 |
|
|
|
7052 |
|
|
if (currentmedia && currentmedia.is('video,iframe')) {
|
7053 |
|
|
$this.pausemedia(currentmedia);
|
7054 |
|
|
}
|
7055 |
|
|
|
7056 |
|
|
if (nextmedia && nextmedia.is('video,iframe')) {
|
7057 |
|
|
$this.playmedia(nextmedia);
|
7058 |
|
|
}
|
7059 |
|
|
|
7060 |
|
|
next.addClass('uk-active').attr('aria-hidden', 'false');
|
7061 |
|
|
current.removeClass('uk-active').attr('aria-hidden', 'true');
|
7062 |
|
|
|
7063 |
|
|
$this.animating = false;
|
7064 |
|
|
$this.current = index;
|
7065 |
|
|
|
7066 |
|
|
UI.Utils.checkDisplay(next, '[class*="uk-animation-"]:not(.uk-cover-background.uk-position-cover)');
|
7067 |
|
|
|
7068 |
|
|
$this.trigger('show.uk.slideshow', [next, current, $this]);
|
7069 |
|
|
};
|
7070 |
|
|
|
7071 |
|
|
$this.applyKenBurns(next);
|
7072 |
|
|
|
7073 |
|
|
// animation fallback
|
7074 |
|
|
if (!UI.support.animation) {
|
7075 |
|
|
animation = 'none';
|
7076 |
|
|
}
|
7077 |
|
|
|
7078 |
|
|
current = UI.$(current);
|
7079 |
|
|
next = UI.$(next);
|
7080 |
|
|
|
7081 |
|
|
$this.trigger('beforeshow.uk.slideshow', [next, current, $this]);
|
7082 |
|
|
|
7083 |
|
|
Animations[animation].apply(this, [current, next, dir]).then(finalize);
|
7084 |
|
|
|
7085 |
|
|
$this.triggers.removeClass('uk-active');
|
7086 |
|
|
$this.triggers.filter('[data-uk-slideshow-item="'+index+'"]').addClass('uk-active');
|
7087 |
|
|
},
|
7088 |
|
|
|
7089 |
|
|
applyKenBurns: function(slide) {
|
7090 |
|
|
|
7091 |
|
|
if (!this.hasKenBurns(slide)) {
|
7092 |
|
|
return;
|
7093 |
|
|
}
|
7094 |
|
|
|
7095 |
|
|
var animations = this.options.kenburnsanimations,
|
7096 |
|
|
index = this.kbindex || 0;
|
7097 |
|
|
|
7098 |
|
|
|
7099 |
|
|
slide.data('cover').attr('class', 'uk-cover-background uk-position-cover').width();
|
7100 |
|
|
slide.data('cover').addClass(['uk-animation-scale', 'uk-animation-reverse', animations[index].trim()].join(' '));
|
7101 |
|
|
|
7102 |
|
|
this.kbindex = animations[index + 1] ? (index+1):0;
|
7103 |
|
|
},
|
7104 |
|
|
|
7105 |
|
|
hasKenBurns: function(slide) {
|
7106 |
|
|
return (this.options.kenburns && slide.data('cover'));
|
7107 |
|
|
},
|
7108 |
|
|
|
7109 |
|
|
next: function() {
|
7110 |
|
|
this.show(this.slides[this.current + 1] ? (this.current + 1) : 0, 1);
|
7111 |
|
|
},
|
7112 |
|
|
|
7113 |
|
|
previous: function() {
|
7114 |
|
|
this.show(this.slides[this.current - 1] ? (this.current - 1) : (this.slides.length - 1), -1);
|
7115 |
|
|
},
|
7116 |
|
|
|
7117 |
|
|
start: function() {
|
7118 |
|
|
|
7119 |
|
|
this.stop();
|
7120 |
|
|
|
7121 |
|
|
var $this = this;
|
7122 |
|
|
|
7123 |
|
|
this.interval = setInterval(function() {
|
7124 |
|
|
if (!$this.hovering) $this.next();
|
7125 |
|
|
}, this.options.autoplayInterval);
|
7126 |
|
|
|
7127 |
|
|
},
|
7128 |
|
|
|
7129 |
|
|
stop: function() {
|
7130 |
|
|
if (this.interval) clearInterval(this.interval);
|
7131 |
|
|
},
|
7132 |
|
|
|
7133 |
|
|
playmedia: function(media) {
|
7134 |
|
|
|
7135 |
|
|
if (!(media && media[0])) return;
|
7136 |
|
|
|
7137 |
|
|
switch(media[0].nodeName) {
|
7138 |
|
|
case 'VIDEO':
|
7139 |
|
|
|
7140 |
|
|
if (!this.options.videomute) {
|
7141 |
|
|
media[0].muted = false;
|
7142 |
|
|
}
|
7143 |
|
|
|
7144 |
|
|
media[0].play();
|
7145 |
|
|
break;
|
7146 |
|
|
case 'IFRAME':
|
7147 |
|
|
|
7148 |
|
|
if (!this.options.videomute) {
|
7149 |
|
|
media[0].contentWindow.postMessage('{ "event": "command", "func": "unmute", "method":"setVolume", "value":1}', '*');
|
7150 |
|
|
}
|
7151 |
|
|
|
7152 |
|
|
media[0].contentWindow.postMessage('{ "event": "command", "func": "playVideo", "method":"play"}', '*');
|
7153 |
|
|
break;
|
7154 |
|
|
}
|
7155 |
|
|
},
|
7156 |
|
|
|
7157 |
|
|
pausemedia: function(media) {
|
7158 |
|
|
|
7159 |
|
|
switch(media[0].nodeName) {
|
7160 |
|
|
case 'VIDEO':
|
7161 |
|
|
media[0].pause();
|
7162 |
|
|
break;
|
7163 |
|
|
case 'IFRAME':
|
7164 |
|
|
media[0].contentWindow.postMessage('{ "event": "command", "func": "pauseVideo", "method":"pause"}', '*');
|
7165 |
|
|
break;
|
7166 |
|
|
}
|
7167 |
|
|
},
|
7168 |
|
|
|
7169 |
|
|
mutemedia: function(media) {
|
7170 |
|
|
|
7171 |
|
|
switch(media[0].nodeName) {
|
7172 |
|
|
case 'VIDEO':
|
7173 |
|
|
media[0].muted = true;
|
7174 |
|
|
break;
|
7175 |
|
|
case 'IFRAME':
|
7176 |
|
|
media[0].contentWindow.postMessage('{ "event": "command", "func": "mute", "method":"setVolume", "value":0}', '*');
|
7177 |
|
|
break;
|
7178 |
|
|
}
|
7179 |
|
|
}
|
7180 |
|
|
});
|
7181 |
|
|
|
7182 |
|
|
Animations = {
|
7183 |
|
|
|
7184 |
|
|
'none': function() {
|
7185 |
|
|
|
7186 |
|
|
var d = UI.$.Deferred();
|
7187 |
|
|
d.resolve();
|
7188 |
|
|
return d.promise();
|
7189 |
|
|
},
|
7190 |
|
|
|
7191 |
|
|
'scroll': function(current, next, dir) {
|
7192 |
|
|
|
7193 |
|
|
var d = UI.$.Deferred();
|
7194 |
|
|
|
7195 |
|
|
current.css('animation-duration', this.options.duration+'ms');
|
7196 |
|
|
next.css('animation-duration', this.options.duration+'ms');
|
7197 |
|
|
|
7198 |
|
|
next.css('opacity', 1).one(UI.support.animation.end, function() {
|
7199 |
|
|
|
7200 |
|
|
current.css('opacity', 0).removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out');
|
7201 |
|
|
next.removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in');
|
7202 |
|
|
d.resolve();
|
7203 |
|
|
|
7204 |
|
|
}.bind(this));
|
7205 |
|
|
|
7206 |
|
|
current.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out');
|
7207 |
|
|
next.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in');
|
7208 |
|
|
next.width(); // force redraw
|
7209 |
|
|
|
7210 |
|
|
return d.promise();
|
7211 |
|
|
},
|
7212 |
|
|
|
7213 |
|
|
'swipe': function(current, next, dir) {
|
7214 |
|
|
|
7215 |
|
|
var d = UI.$.Deferred();
|
7216 |
|
|
|
7217 |
|
|
current.css('animation-duration', this.options.duration+'ms');
|
7218 |
|
|
next.css('animation-duration', this.options.duration+'ms');
|
7219 |
|
|
|
7220 |
|
|
next.css('opacity', 1).one(UI.support.animation.end, function() {
|
7221 |
|
|
|
7222 |
|
|
current.css('opacity', 0).removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out');
|
7223 |
|
|
next.removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in');
|
7224 |
|
|
d.resolve();
|
7225 |
|
|
|
7226 |
|
|
}.bind(this));
|
7227 |
|
|
|
7228 |
|
|
current.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out');
|
7229 |
|
|
next.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in');
|
7230 |
|
|
next.width(); // force redraw
|
7231 |
|
|
|
7232 |
|
|
return d.promise();
|
7233 |
|
|
},
|
7234 |
|
|
|
7235 |
|
|
'scale': function(current, next, dir) {
|
7236 |
|
|
|
7237 |
|
|
var d = UI.$.Deferred();
|
7238 |
|
|
|
7239 |
|
|
current.css('animation-duration', this.options.duration+'ms');
|
7240 |
|
|
next.css('animation-duration', this.options.duration+'ms');
|
7241 |
|
|
|
7242 |
|
|
next.css('opacity', 1);
|
7243 |
|
|
|
7244 |
|
|
current.one(UI.support.animation.end, function() {
|
7245 |
|
|
|
7246 |
|
|
current.css('opacity', 0).removeClass('uk-slideshow-scale-out');
|
7247 |
|
|
d.resolve();
|
7248 |
|
|
|
7249 |
|
|
}.bind(this));
|
7250 |
|
|
|
7251 |
|
|
current.addClass('uk-slideshow-scale-out');
|
7252 |
|
|
current.width(); // force redraw
|
7253 |
|
|
|
7254 |
|
|
return d.promise();
|
7255 |
|
|
},
|
7256 |
|
|
|
7257 |
|
|
'fade': function(current, next, dir) {
|
7258 |
|
|
|
7259 |
|
|
var d = UI.$.Deferred();
|
7260 |
|
|
|
7261 |
|
|
current.css('animation-duration', this.options.duration+'ms');
|
7262 |
|
|
next.css('animation-duration', this.options.duration+'ms');
|
7263 |
|
|
|
7264 |
|
|
next.css('opacity', 1);
|
7265 |
|
|
|
7266 |
|
|
// for plain text content slides - looks smoother
|
7267 |
|
|
if (!(next.data('cover') || next.data('placeholder'))) {
|
7268 |
|
|
|
7269 |
|
|
next.css('opacity', 1).one(UI.support.animation.end, function() {
|
7270 |
|
|
next.removeClass('uk-slideshow-fade-in');
|
7271 |
|
|
}).addClass('uk-slideshow-fade-in');
|
7272 |
|
|
}
|
7273 |
|
|
|
7274 |
|
|
current.one(UI.support.animation.end, function() {
|
7275 |
|
|
|
7276 |
|
|
current.css('opacity', 0).removeClass('uk-slideshow-fade-out');
|
7277 |
|
|
d.resolve();
|
7278 |
|
|
|
7279 |
|
|
}.bind(this));
|
7280 |
|
|
|
7281 |
|
|
current.addClass('uk-slideshow-fade-out');
|
7282 |
|
|
current.width(); // force redraw
|
7283 |
|
|
|
7284 |
|
|
return d.promise();
|
7285 |
|
|
}
|
7286 |
|
|
};
|
7287 |
|
|
|
7288 |
|
|
UI.slideshow.animations = Animations;
|
7289 |
|
|
|
7290 |
|
|
// Listen for messages from the vimeo player
|
7291 |
|
|
window.addEventListener('message', function onMessageReceived(e) {
|
7292 |
|
|
|
7293 |
|
|
var data = e.data, iframe;
|
7294 |
|
|
|
7295 |
|
|
if (typeof(data) == 'string') {
|
7296 |
|
|
|
7297 |
|
|
try {
|
7298 |
|
|
data = JSON.parse(data);
|
7299 |
|
|
} catch(err) {
|
7300 |
|
|
data = {};
|
7301 |
|
|
}
|
7302 |
|
|
}
|
7303 |
|
|
|
7304 |
|
|
if (e.origin && e.origin.indexOf('vimeo') > -1 && data.event == 'ready' && data.player_id) {
|
7305 |
|
|
iframe = UI.$('[data-player-id="'+ data.player_id+'"]');
|
7306 |
|
|
|
7307 |
|
|
if (iframe.length) {
|
7308 |
|
|
iframe.data('slideshow').mutemedia(iframe);
|
7309 |
|
|
}
|
7310 |
|
|
}
|
7311 |
|
|
}, false);
|
7312 |
|
|
|
7313 |
|
|
});
|
7314 |
|
|
|
7315 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
7316 |
|
|
(function(addon) {
|
7317 |
|
|
|
7318 |
|
|
var component;
|
7319 |
|
|
|
7320 |
|
|
if (window.UIkit2) {
|
7321 |
|
|
component = addon(UIkit2);
|
7322 |
|
|
}
|
7323 |
|
|
|
7324 |
|
|
if (typeof define == 'function' && define.amd) {
|
7325 |
|
|
define('uikit-slider', ['uikit'], function(){
|
7326 |
|
|
return component || addon(UIkit2);
|
7327 |
|
|
});
|
7328 |
|
|
}
|
7329 |
|
|
|
7330 |
|
|
})(function(UI){
|
7331 |
|
|
|
7332 |
|
|
"use strict";
|
7333 |
|
|
|
7334 |
|
|
var dragging, delayIdle, anchor, dragged, store = {};
|
7335 |
|
|
|
7336 |
|
|
UI.component('slider', {
|
7337 |
|
|
|
7338 |
|
|
defaults: {
|
7339 |
|
|
center : false,
|
7340 |
|
|
threshold : 10,
|
7341 |
|
|
infinite : true,
|
7342 |
|
|
autoplay : false,
|
7343 |
|
|
autoplayInterval : 7000,
|
7344 |
|
|
pauseOnHover : true,
|
7345 |
|
|
activecls : 'uk-active'
|
7346 |
|
|
},
|
7347 |
|
|
|
7348 |
|
|
boot: function() {
|
7349 |
|
|
|
7350 |
|
|
// init code
|
7351 |
|
|
UI.ready(function(context) {
|
7352 |
|
|
|
7353 |
|
|
setTimeout(function(){
|
7354 |
|
|
|
7355 |
|
|
UI.$('[data-uk-slider]', context).each(function(){
|
7356 |
|
|
|
7357 |
|
|
var ele = UI.$(this);
|
7358 |
|
|
|
7359 |
|
|
if (!ele.data('slider')) {
|
7360 |
|
|
UI.slider(ele, UI.Utils.options(ele.attr('data-uk-slider')));
|
7361 |
|
|
}
|
7362 |
|
|
});
|
7363 |
|
|
|
7364 |
|
|
}, 0);
|
7365 |
|
|
});
|
7366 |
|
|
},
|
7367 |
|
|
|
7368 |
|
|
init: function() {
|
7369 |
|
|
|
7370 |
|
|
var $this = this;
|
7371 |
|
|
|
7372 |
|
|
this.container = this.element.find('.uk-slider');
|
7373 |
|
|
this.focus = 0;
|
7374 |
|
|
|
7375 |
|
|
UI.$win.on('resize load', UI.Utils.debounce(function() {
|
7376 |
|
|
$this.update(true);
|
7377 |
|
|
}, 100));
|
7378 |
|
|
|
7379 |
|
|
this.on('click.uk.slider', '[data-uk-slider-item]', function(e) {
|
7380 |
|
|
|
7381 |
|
|
e.preventDefault();
|
7382 |
|
|
|
7383 |
|
|
var item = UI.$(this).attr('data-uk-slider-item');
|
7384 |
|
|
|
7385 |
|
|
if ($this.focus == item) return;
|
7386 |
|
|
|
7387 |
|
|
// stop autoplay
|
7388 |
|
|
$this.stop();
|
7389 |
|
|
|
7390 |
|
|
switch(item) {
|
7391 |
|
|
case 'next':
|
7392 |
|
|
case 'previous':
|
7393 |
|
|
$this[item=='next' ? 'next':'previous']();
|
7394 |
|
|
break;
|
7395 |
|
|
default:
|
7396 |
|
|
$this.updateFocus(parseInt(item, 10));
|
7397 |
|
|
}
|
7398 |
|
|
});
|
7399 |
|
|
|
7400 |
|
|
this.container.on({
|
7401 |
|
|
|
7402 |
|
|
'touchstart mousedown': function(evt) {
|
7403 |
|
|
|
7404 |
|
|
if (evt.originalEvent && evt.originalEvent.touches) {
|
7405 |
|
|
evt = evt.originalEvent.touches[0];
|
7406 |
|
|
}
|
7407 |
|
|
|
7408 |
|
|
// ignore right click button
|
7409 |
|
|
if (evt.button && evt.button==2 || !$this.active) {
|
7410 |
|
|
return;
|
7411 |
|
|
}
|
7412 |
|
|
|
7413 |
|
|
// stop autoplay
|
7414 |
|
|
$this.stop();
|
7415 |
|
|
|
7416 |
|
|
anchor = UI.$(evt.target).is('a') ? UI.$(evt.target) : UI.$(evt.target).parents('a:first');
|
7417 |
|
|
dragged = false;
|
7418 |
|
|
|
7419 |
|
|
if (anchor.length) {
|
7420 |
|
|
|
7421 |
|
|
anchor.one('click', function(e){
|
7422 |
|
|
if (dragged) e.preventDefault();
|
7423 |
|
|
});
|
7424 |
|
|
}
|
7425 |
|
|
|
7426 |
|
|
delayIdle = function(e) {
|
7427 |
|
|
|
7428 |
|
|
dragged = true;
|
7429 |
|
|
dragging = $this;
|
7430 |
|
|
store = {
|
7431 |
|
|
touchx : parseInt(e.pageX, 10),
|
7432 |
|
|
dir : 1,
|
7433 |
|
|
focus : $this.focus,
|
7434 |
|
|
base : $this.options.center ? 'center':'area'
|
7435 |
|
|
};
|
7436 |
|
|
|
7437 |
|
|
if (e.originalEvent && e.originalEvent.touches) {
|
7438 |
|
|
e = e.originalEvent.touches[0];
|
7439 |
|
|
}
|
7440 |
|
|
|
7441 |
|
|
dragging.element.data({
|
7442 |
|
|
'pointer-start': {x: parseInt(e.pageX, 10), y: parseInt(e.pageY, 10)},
|
7443 |
|
|
'pointer-pos-start': $this.pos
|
7444 |
|
|
});
|
7445 |
|
|
|
7446 |
|
|
$this.container.addClass('uk-drag');
|
7447 |
|
|
|
7448 |
|
|
delayIdle = false;
|
7449 |
|
|
};
|
7450 |
|
|
|
7451 |
|
|
delayIdle.x = parseInt(evt.pageX, 10);
|
7452 |
|
|
delayIdle.threshold = $this.options.threshold;
|
7453 |
|
|
|
7454 |
|
|
},
|
7455 |
|
|
|
7456 |
|
|
mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; },
|
7457 |
|
|
mouseleave: function() { $this.hovering = false; }
|
7458 |
|
|
});
|
7459 |
|
|
|
7460 |
|
|
this.update(true);
|
7461 |
|
|
|
7462 |
|
|
this.on('display.uk.check', function(){
|
7463 |
|
|
if ($this.element.is(":visible")) {
|
7464 |
|
|
$this.update(true);
|
7465 |
|
|
}
|
7466 |
|
|
});
|
7467 |
|
|
|
7468 |
|
|
// prevent dragging links + images
|
7469 |
|
|
this.element.find('a,img').attr('draggable', 'false');
|
7470 |
|
|
|
7471 |
|
|
// Set autoplay
|
7472 |
|
|
if (this.options.autoplay) {
|
7473 |
|
|
this.start();
|
7474 |
|
|
}
|
7475 |
|
|
|
7476 |
|
|
UI.domObserve(this.element, function(e) {
|
7477 |
|
|
if ($this.element.children(':not([data-slider-slide])').length) {
|
7478 |
|
|
$this.update(true);
|
7479 |
|
|
}
|
7480 |
|
|
});
|
7481 |
|
|
|
7482 |
|
|
},
|
7483 |
|
|
|
7484 |
|
|
update: function(focus) {
|
7485 |
|
|
|
7486 |
|
|
var $this = this, pos = 0, maxheight = 0, item, width, cwidth, size;
|
7487 |
|
|
|
7488 |
|
|
this.items = this.container.children().filter(':visible');
|
7489 |
|
|
this.vp = this.element[0].getBoundingClientRect().width;
|
7490 |
|
|
|
7491 |
|
|
this.container.css({'min-width': '', 'min-height': ''});
|
7492 |
|
|
|
7493 |
|
|
this.items.each(function(idx){
|
7494 |
|
|
|
7495 |
|
|
item = UI.$(this).attr('data-slider-slide', idx);
|
7496 |
|
|
size = item.css({'left': '', 'width':''})[0].getBoundingClientRect();
|
7497 |
|
|
width = size.width;
|
7498 |
|
|
cwidth = item.width();
|
7499 |
|
|
maxheight = Math.max(maxheight, size.height);
|
7500 |
|
|
|
7501 |
|
|
item.css({'left': pos, 'width':width}).data({'idx':idx, 'left': pos, 'width': width, 'cwidth':cwidth, 'area': (pos+width), 'center':(pos - ($this.vp/2 - cwidth/2))});
|
7502 |
|
|
|
7503 |
|
|
pos += width;
|
7504 |
|
|
});
|
7505 |
|
|
|
7506 |
|
|
this.container.css({'min-width': pos, 'min-height': maxheight});
|
7507 |
|
|
|
7508 |
|
|
if (this.options.infinite && (pos <= (2*this.vp) || this.items.length < 5) && !this.itemsResized) {
|
7509 |
|
|
|
7510 |
|
|
// fill with cloned items
|
7511 |
|
|
this.container.children().each(function(idx){
|
7512 |
|
|
$this.container.append($this.items.eq(idx).clone(true).attr('id', ''));
|
7513 |
|
|
}).each(function(idx){
|
7514 |
|
|
$this.container.append($this.items.eq(idx).clone(true).attr('id', ''));
|
7515 |
|
|
});
|
7516 |
|
|
|
7517 |
|
|
this.itemsResized = true;
|
7518 |
|
|
|
7519 |
|
|
return this.update();
|
7520 |
|
|
}
|
7521 |
|
|
|
7522 |
|
|
this.cw = pos;
|
7523 |
|
|
this.pos = 0;
|
7524 |
|
|
this.active = pos >= this.vp;
|
7525 |
|
|
|
7526 |
|
|
this.container.css({
|
7527 |
|
|
'-ms-transform': '',
|
7528 |
|
|
'-webkit-transform': '',
|
7529 |
|
|
'transform': ''
|
7530 |
|
|
});
|
7531 |
|
|
|
7532 |
|
|
if (focus) this.updateFocus(this.focus);
|
7533 |
|
|
},
|
7534 |
|
|
|
7535 |
|
|
updatePos: function(pos) {
|
7536 |
|
|
this.pos = pos;
|
7537 |
|
|
this.container.css({
|
7538 |
|
|
'-ms-transform': 'translateX('+pos+'px)',
|
7539 |
|
|
'-webkit-transform': 'translateX('+pos+'px)',
|
7540 |
|
|
'transform': 'translateX('+pos+'px)'
|
7541 |
|
|
});
|
7542 |
|
|
},
|
7543 |
|
|
|
7544 |
|
|
updateFocus: function(idx, dir) {
|
7545 |
|
|
|
7546 |
|
|
if (!this.active) {
|
7547 |
|
|
return;
|
7548 |
|
|
}
|
7549 |
|
|
|
7550 |
|
|
dir = dir || (idx > this.focus ? 1:-1);
|
7551 |
|
|
|
7552 |
|
|
var item = this.items.eq(idx), area, i;
|
7553 |
|
|
|
7554 |
|
|
if (this.options.infinite) {
|
7555 |
|
|
this.infinite(idx, dir);
|
7556 |
|
|
}
|
7557 |
|
|
|
7558 |
|
|
if (this.options.center) {
|
7559 |
|
|
|
7560 |
|
|
this.updatePos(item.data('center')*-1);
|
7561 |
|
|
|
7562 |
|
|
this.items.filter('.'+this.options.activecls).removeClass(this.options.activecls);
|
7563 |
|
|
item.addClass(this.options.activecls);
|
7564 |
|
|
|
7565 |
|
|
} else {
|
7566 |
|
|
|
7567 |
|
|
if (this.options.infinite) {
|
7568 |
|
|
|
7569 |
|
|
this.updatePos(item.data('left')*-1);
|
7570 |
|
|
|
7571 |
|
|
} else {
|
7572 |
|
|
|
7573 |
|
|
area = 0;
|
7574 |
|
|
|
7575 |
|
|
for (i=idx;i<this.items.length;i++) {
|
7576 |
|
|
area += this.items.eq(i).data('width');
|
7577 |
|
|
}
|
7578 |
|
|
|
7579 |
|
|
|
7580 |
|
|
if (area > this.vp) {
|
7581 |
|
|
|
7582 |
|
|
this.updatePos(item.data('left')*-1);
|
7583 |
|
|
|
7584 |
|
|
} else {
|
7585 |
|
|
|
7586 |
|
|
if (dir == 1) {
|
7587 |
|
|
|
7588 |
|
|
area = 0;
|
7589 |
|
|
|
7590 |
|
|
for (i=this.items.length-1;i>=0;i--) {
|
7591 |
|
|
|
7592 |
|
|
area += this.items.eq(i).data('width');
|
7593 |
|
|
|
7594 |
|
|
if (area == this.vp) {
|
7595 |
|
|
idx = i;
|
7596 |
|
|
break;
|
7597 |
|
|
}
|
7598 |
|
|
|
7599 |
|
|
if (area > this.vp) {
|
7600 |
|
|
idx = (i < this.items.length-1) ? i+1 : i;
|
7601 |
|
|
break;
|
7602 |
|
|
}
|
7603 |
|
|
}
|
7604 |
|
|
|
7605 |
|
|
if (area > this.vp) {
|
7606 |
|
|
this.updatePos((this.container.width() - this.vp) * -1);
|
7607 |
|
|
} else {
|
7608 |
|
|
this.updatePos(this.items.eq(idx).data('left')*-1);
|
7609 |
|
|
}
|
7610 |
|
|
}
|
7611 |
|
|
}
|
7612 |
|
|
}
|
7613 |
|
|
}
|
7614 |
|
|
|
7615 |
|
|
// mark elements
|
7616 |
|
|
var left = this.items.eq(idx).data('left');
|
7617 |
|
|
|
7618 |
|
|
this.items.removeClass('uk-slide-before uk-slide-after').each(function(i){
|
7619 |
|
|
if (i!==idx) {
|
7620 |
|
|
UI.$(this).addClass(UI.$(this).data('left') < left ? 'uk-slide-before':'uk-slide-after');
|
7621 |
|
|
}
|
7622 |
|
|
});
|
7623 |
|
|
|
7624 |
|
|
this.focus = idx;
|
7625 |
|
|
|
7626 |
|
|
this.trigger('focusitem.uk.slider', [idx,this.items.eq(idx),this]);
|
7627 |
|
|
},
|
7628 |
|
|
|
7629 |
|
|
next: function() {
|
7630 |
|
|
|
7631 |
|
|
var focus = this.items[this.focus + 1] ? (this.focus + 1) : (this.options.infinite ? 0:this.focus);
|
7632 |
|
|
|
7633 |
|
|
this.updateFocus(focus, 1);
|
7634 |
|
|
},
|
7635 |
|
|
|
7636 |
|
|
previous: function() {
|
7637 |
|
|
|
7638 |
|
|
var focus = this.items[this.focus - 1] ? (this.focus - 1) : (this.options.infinite ? (this.items[this.focus - 1] ? this.items-1:this.items.length-1):this.focus);
|
7639 |
|
|
|
7640 |
|
|
this.updateFocus(focus, -1);
|
7641 |
|
|
},
|
7642 |
|
|
|
7643 |
|
|
start: function() {
|
7644 |
|
|
|
7645 |
|
|
this.stop();
|
7646 |
|
|
|
7647 |
|
|
var $this = this;
|
7648 |
|
|
|
7649 |
|
|
this.interval = setInterval(function() {
|
7650 |
|
|
if (!$this.hovering) $this.next();
|
7651 |
|
|
}, this.options.autoplayInterval);
|
7652 |
|
|
|
7653 |
|
|
},
|
7654 |
|
|
|
7655 |
|
|
stop: function() {
|
7656 |
|
|
if (this.interval) clearInterval(this.interval);
|
7657 |
|
|
},
|
7658 |
|
|
|
7659 |
|
|
infinite: function(baseidx, direction) {
|
7660 |
|
|
|
7661 |
|
|
var $this = this, item = this.items.eq(baseidx), i, z = baseidx, move = [], area = 0;
|
7662 |
|
|
|
7663 |
|
|
if (direction == 1) {
|
7664 |
|
|
|
7665 |
|
|
|
7666 |
|
|
for (i=0;i<this.items.length;i++) {
|
7667 |
|
|
|
7668 |
|
|
if (z != baseidx) {
|
7669 |
|
|
area += this.items.eq(z).data('width');
|
7670 |
|
|
move.push(this.items.eq(z));
|
7671 |
|
|
}
|
7672 |
|
|
|
7673 |
|
|
if (area > this.vp) {
|
7674 |
|
|
break;
|
7675 |
|
|
}
|
7676 |
|
|
|
7677 |
|
|
z = z+1 == this.items.length ? 0:z+1;
|
7678 |
|
|
}
|
7679 |
|
|
|
7680 |
|
|
if (move.length) {
|
7681 |
|
|
|
7682 |
|
|
move.forEach(function(itm){
|
7683 |
|
|
|
7684 |
|
|
var left = item.data('area');
|
7685 |
|
|
|
7686 |
|
|
itm.css({'left': left}).data({
|
7687 |
|
|
left : left,
|
7688 |
|
|
area : (left+itm.data('width')),
|
7689 |
|
|
center: (left - ($this.vp/2 - itm.data('cwidth')/2))
|
7690 |
|
|
});
|
7691 |
|
|
|
7692 |
|
|
item = itm;
|
7693 |
|
|
});
|
7694 |
|
|
}
|
7695 |
|
|
|
7696 |
|
|
|
7697 |
|
|
} else {
|
7698 |
|
|
|
7699 |
|
|
for (i=this.items.length-1;i >-1 ;i--) {
|
7700 |
|
|
|
7701 |
|
|
area += this.items.eq(z).data('width');
|
7702 |
|
|
|
7703 |
|
|
if (z != baseidx) {
|
7704 |
|
|
move.push(this.items.eq(z));
|
7705 |
|
|
}
|
7706 |
|
|
|
7707 |
|
|
if (area > this.vp) {
|
7708 |
|
|
break;
|
7709 |
|
|
}
|
7710 |
|
|
|
7711 |
|
|
z = z-1 == -1 ? this.items.length-1:z-1;
|
7712 |
|
|
}
|
7713 |
|
|
|
7714 |
|
|
if (move.length) {
|
7715 |
|
|
|
7716 |
|
|
move.forEach(function(itm){
|
7717 |
|
|
|
7718 |
|
|
var left = item.data('left') - itm.data('width');
|
7719 |
|
|
|
7720 |
|
|
itm.css({'left': left}).data({
|
7721 |
|
|
left : left,
|
7722 |
|
|
area : (left+itm.data('width')),
|
7723 |
|
|
center: (left - ($this.vp/2 - itm.data('cwidth')/2))
|
7724 |
|
|
});
|
7725 |
|
|
|
7726 |
|
|
item = itm;
|
7727 |
|
|
});
|
7728 |
|
|
}
|
7729 |
|
|
}
|
7730 |
|
|
}
|
7731 |
|
|
});
|
7732 |
|
|
|
7733 |
|
|
// handle dragging
|
7734 |
|
|
UI.$doc.on('mousemove.uk.slider touchmove.uk.slider', function(e) {
|
7735 |
|
|
|
7736 |
|
|
if (e.originalEvent && e.originalEvent.touches) {
|
7737 |
|
|
e = e.originalEvent.touches[0];
|
7738 |
|
|
}
|
7739 |
|
|
|
7740 |
|
|
if (delayIdle && Math.abs(e.pageX - delayIdle.x) > delayIdle.threshold) {
|
7741 |
|
|
|
7742 |
|
|
if (!window.getSelection().toString()) {
|
7743 |
|
|
delayIdle(e);
|
7744 |
|
|
} else {
|
7745 |
|
|
dragging = delayIdle = false;
|
7746 |
|
|
}
|
7747 |
|
|
}
|
7748 |
|
|
|
7749 |
|
|
if (!dragging) {
|
7750 |
|
|
return;
|
7751 |
|
|
}
|
7752 |
|
|
|
7753 |
|
|
var x, xDiff, pos, dir, focus, item, next, diff, i, z, itm;
|
7754 |
|
|
|
7755 |
|
|
if (e.clientX || e.clientY) {
|
7756 |
|
|
x = e.clientX;
|
7757 |
|
|
} else if (e.pageX || e.pageY) {
|
7758 |
|
|
x = e.pageX - document.body.scrollLeft - document.documentElement.scrollLeft;
|
7759 |
|
|
}
|
7760 |
|
|
|
7761 |
|
|
focus = store.focus;
|
7762 |
|
|
xDiff = x - dragging.element.data('pointer-start').x;
|
7763 |
|
|
pos = dragging.element.data('pointer-pos-start') + xDiff;
|
7764 |
|
|
dir = x > dragging.element.data('pointer-start').x ? -1:1;
|
7765 |
|
|
item = dragging.items.eq(store.focus);
|
7766 |
|
|
|
7767 |
|
|
if (dir == 1) {
|
7768 |
|
|
|
7769 |
|
|
diff = item.data('left') + Math.abs(xDiff);
|
7770 |
|
|
|
7771 |
|
|
for (i=0,z=store.focus;i<dragging.items.length;i++) {
|
7772 |
|
|
|
7773 |
|
|
itm = dragging.items.eq(z);
|
7774 |
|
|
|
7775 |
|
|
if (z != store.focus && itm.data('left') < diff && itm.data('area') > diff) {
|
7776 |
|
|
focus = z;
|
7777 |
|
|
break;
|
7778 |
|
|
}
|
7779 |
|
|
|
7780 |
|
|
z = z+1 == dragging.items.length ? 0:z+1;
|
7781 |
|
|
}
|
7782 |
|
|
|
7783 |
|
|
} else {
|
7784 |
|
|
|
7785 |
|
|
diff = item.data('left') - Math.abs(xDiff);
|
7786 |
|
|
|
7787 |
|
|
for (i=0,z=store.focus;i<dragging.items.length;i++) {
|
7788 |
|
|
|
7789 |
|
|
itm = dragging.items.eq(z);
|
7790 |
|
|
|
7791 |
|
|
if (z != store.focus && itm.data('area') <= item.data('left') && itm.data('center') < diff) {
|
7792 |
|
|
focus = z;
|
7793 |
|
|
break;
|
7794 |
|
|
}
|
7795 |
|
|
|
7796 |
|
|
z = z-1 == -1 ? dragging.items.length-1:z-1;
|
7797 |
|
|
}
|
7798 |
|
|
}
|
7799 |
|
|
|
7800 |
|
|
if (dragging.options.infinite && focus!=store._focus) {
|
7801 |
|
|
dragging.infinite(focus, dir);
|
7802 |
|
|
}
|
7803 |
|
|
|
7804 |
|
|
dragging.updatePos(pos);
|
7805 |
|
|
|
7806 |
|
|
store.dir = dir;
|
7807 |
|
|
store._focus = focus;
|
7808 |
|
|
store.touchx = parseInt(e.pageX, 10);
|
7809 |
|
|
store.diff = diff;
|
7810 |
|
|
});
|
7811 |
|
|
|
7812 |
|
|
UI.$doc.on('mouseup.uk.slider touchend.uk.slider', function(e) {
|
7813 |
|
|
|
7814 |
|
|
if (dragging) {
|
7815 |
|
|
|
7816 |
|
|
dragging.container.removeClass('uk-drag');
|
7817 |
|
|
|
7818 |
|
|
// TODO is this needed?
|
7819 |
|
|
dragging.items.eq(store.focus);
|
7820 |
|
|
|
7821 |
|
|
var itm, focus = false, i, z;
|
7822 |
|
|
|
7823 |
|
|
if (store.dir == 1) {
|
7824 |
|
|
|
7825 |
|
|
for (i=0,z=store.focus;i<dragging.items.length;i++) {
|
7826 |
|
|
|
7827 |
|
|
itm = dragging.items.eq(z);
|
7828 |
|
|
|
7829 |
|
|
if (z != store.focus && itm.data('left') > store.diff) {
|
7830 |
|
|
focus = z;
|
7831 |
|
|
break;
|
7832 |
|
|
}
|
7833 |
|
|
|
7834 |
|
|
z = z+1 == dragging.items.length ? 0:z+1;
|
7835 |
|
|
}
|
7836 |
|
|
if (!dragging.options.infinite && !focus) {
|
7837 |
|
|
focus = dragging.items.length;
|
7838 |
|
|
}
|
7839 |
|
|
|
7840 |
|
|
} else {
|
7841 |
|
|
|
7842 |
|
|
for (i=0,z=store.focus;i<dragging.items.length;i++) {
|
7843 |
|
|
|
7844 |
|
|
itm = dragging.items.eq(z);
|
7845 |
|
|
|
7846 |
|
|
if (z != store.focus && itm.data('left') < store.diff) {
|
7847 |
|
|
focus = z;
|
7848 |
|
|
break;
|
7849 |
|
|
}
|
7850 |
|
|
|
7851 |
|
|
z = z-1 == -1 ? dragging.items.length-1:z-1;
|
7852 |
|
|
}
|
7853 |
|
|
if (!dragging.options.infinite && !focus) {
|
7854 |
|
|
focus = 0
|
7855 |
|
|
}
|
7856 |
|
|
}
|
7857 |
|
|
|
7858 |
|
|
dragging.updateFocus(focus!==false ? focus:store._focus);
|
7859 |
|
|
|
7860 |
|
|
}
|
7861 |
|
|
|
7862 |
|
|
dragging = delayIdle = false;
|
7863 |
|
|
});
|
7864 |
|
|
|
7865 |
|
|
return UI.slider;
|
7866 |
|
|
});
|
7867 |
|
|
|
7868 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
7869 |
|
|
/*
|
7870 |
|
|
* Based on nativesortable - Copyright (c) Brian Grinstead - https://github.com/bgrins/nativesortable
|
7871 |
|
|
*/
|
7872 |
|
|
(function(addon) {
|
7873 |
|
|
|
7874 |
|
|
var component;
|
7875 |
|
|
|
7876 |
|
|
if (window.UIkit2) {
|
7877 |
|
|
component = addon(UIkit2);
|
7878 |
|
|
}
|
7879 |
|
|
|
7880 |
|
|
if (typeof define == 'function' && define.amd) {
|
7881 |
|
|
define('uikit-sortable', ['uikit'], function(){
|
7882 |
|
|
return component || addon(UIkit2);
|
7883 |
|
|
});
|
7884 |
|
|
}
|
7885 |
|
|
|
7886 |
|
|
})(function(UI){
|
7887 |
|
|
|
7888 |
|
|
"use strict";
|
7889 |
|
|
|
7890 |
|
|
var supportsTouch = ('ontouchstart' in window || 'MSGesture' in window) || (window.DocumentTouch && document instanceof DocumentTouch),
|
7891 |
|
|
draggingPlaceholder, currentlyDraggingElement, currentlyDraggingTarget, dragging, moving, clickedlink, delayIdle, touchedlists, moved, overElement, startEvent;
|
7892 |
|
|
|
7893 |
|
|
var POINTER_DOWN = supportsTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointerdown':'touchstart') : 'mousedown',
|
7894 |
|
|
POINTER_MOVE = supportsTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointermove':'touchmove') : 'mousemove',
|
7895 |
|
|
POINTER_UP = supportsTouch ? ('MSGesture' in window || window.PointerEvent ? 'pointerup':'touchend') : 'mouseup';
|
7896 |
|
|
|
7897 |
|
|
|
7898 |
|
|
function closestSortable(ele) {
|
7899 |
|
|
|
7900 |
|
|
ele = UI.$(ele);
|
7901 |
|
|
|
7902 |
|
|
do {
|
7903 |
|
|
if (ele.data('sortable')) {
|
7904 |
|
|
return ele;
|
7905 |
|
|
}
|
7906 |
|
|
ele = UI.$(ele).parent();
|
7907 |
|
|
} while(ele.length);
|
7908 |
|
|
|
7909 |
|
|
return ele;
|
7910 |
|
|
}
|
7911 |
|
|
|
7912 |
|
|
UI.component('sortable', {
|
7913 |
|
|
|
7914 |
|
|
defaults: {
|
7915 |
|
|
|
7916 |
|
|
animation : 150,
|
7917 |
|
|
threshold : 10,
|
7918 |
|
|
|
7919 |
|
|
childClass : 'uk-sortable-item',
|
7920 |
|
|
placeholderClass : 'uk-sortable-placeholder',
|
7921 |
|
|
overClass : 'uk-sortable-over',
|
7922 |
|
|
draggingClass : 'uk-sortable-dragged',
|
7923 |
|
|
dragMovingClass : 'uk-sortable-moving',
|
7924 |
|
|
baseClass : 'uk-sortable',
|
7925 |
|
|
noDragClass : 'uk-sortable-nodrag',
|
7926 |
|
|
emptyClass : 'uk-sortable-empty',
|
7927 |
|
|
dragCustomClass : '',
|
7928 |
|
|
handleClass : false,
|
7929 |
|
|
group : false,
|
7930 |
|
|
|
7931 |
|
|
stop : function() {},
|
7932 |
|
|
start : function() {},
|
7933 |
|
|
change : function() {}
|
7934 |
|
|
},
|
7935 |
|
|
|
7936 |
|
|
boot: function() {
|
7937 |
|
|
|
7938 |
|
|
// auto init
|
7939 |
|
|
UI.ready(function(context) {
|
7940 |
|
|
|
7941 |
|
|
UI.$('[data-uk-sortable]', context).each(function(){
|
7942 |
|
|
|
7943 |
|
|
var ele = UI.$(this);
|
7944 |
|
|
|
7945 |
|
|
if(!ele.data('sortable')) {
|
7946 |
|
|
UI.sortable(ele, UI.Utils.options(ele.attr('data-uk-sortable')));
|
7947 |
|
|
}
|
7948 |
|
|
});
|
7949 |
|
|
});
|
7950 |
|
|
|
7951 |
|
|
UI.$html.on(POINTER_MOVE, function(e) {
|
7952 |
|
|
|
7953 |
|
|
if (delayIdle) {
|
7954 |
|
|
|
7955 |
|
|
var src = e.originalEvent.targetTouches ? e.originalEvent.targetTouches[0] : e;
|
7956 |
|
|
|
7957 |
|
|
if (Math.abs(src.pageX - delayIdle.pos.x) > delayIdle.threshold || Math.abs(src.pageY - delayIdle.pos.y) > delayIdle.threshold) {
|
7958 |
|
|
delayIdle.apply(src);
|
7959 |
|
|
}
|
7960 |
|
|
}
|
7961 |
|
|
|
7962 |
|
|
if (draggingPlaceholder) {
|
7963 |
|
|
|
7964 |
|
|
if (!moving) {
|
7965 |
|
|
moving = true;
|
7966 |
|
|
draggingPlaceholder.show();
|
7967 |
|
|
|
7968 |
|
|
draggingPlaceholder.$current.addClass(draggingPlaceholder.$sortable.options.placeholderClass);
|
7969 |
|
|
draggingPlaceholder.$sortable.element.children().addClass(draggingPlaceholder.$sortable.options.childClass);
|
7970 |
|
|
|
7971 |
|
|
UI.$html.addClass(draggingPlaceholder.$sortable.options.dragMovingClass);
|
7972 |
|
|
}
|
7973 |
|
|
|
7974 |
|
|
var offset = draggingPlaceholder.data('mouse-offset'),
|
7975 |
|
|
ev = e.originalEvent.touches && e.originalEvent.touches[0] || e.originalEvent,
|
7976 |
|
|
left = parseInt(ev.pageX, 10) + offset.left,
|
7977 |
|
|
top = parseInt(ev.pageY, 10) + offset.top;
|
7978 |
|
|
|
7979 |
|
|
draggingPlaceholder.css({left: left, top: top });
|
7980 |
|
|
|
7981 |
|
|
// adjust document scrolling
|
7982 |
|
|
|
7983 |
|
|
if (top + (draggingPlaceholder.height()/3) > document.body.offsetHeight) {
|
7984 |
|
|
return;
|
7985 |
|
|
}
|
7986 |
|
|
|
7987 |
|
|
if (top < UI.$win.scrollTop()) {
|
7988 |
|
|
UI.$win.scrollTop(UI.$win.scrollTop() - Math.ceil(draggingPlaceholder.height()/3));
|
7989 |
|
|
} else if ( (top + (draggingPlaceholder.height()/3)) > (window.innerHeight + UI.$win.scrollTop()) ) {
|
7990 |
|
|
UI.$win.scrollTop(UI.$win.scrollTop() + Math.ceil(draggingPlaceholder.height()/3));
|
7991 |
|
|
}
|
7992 |
|
|
}
|
7993 |
|
|
});
|
7994 |
|
|
|
7995 |
|
|
UI.$html.on(POINTER_UP, function(e) {
|
7996 |
|
|
|
7997 |
|
|
delayIdle = clickedlink = false;
|
7998 |
|
|
|
7999 |
|
|
// dragging?
|
8000 |
|
|
if (!currentlyDraggingElement || !draggingPlaceholder) {
|
8001 |
|
|
// completely reset dragging attempt. will cause weird delay behavior elsewise
|
8002 |
|
|
currentlyDraggingElement = draggingPlaceholder = null;
|
8003 |
|
|
return;
|
8004 |
|
|
}
|
8005 |
|
|
|
8006 |
|
|
// inside or outside of sortable?
|
8007 |
|
|
var sortable = closestSortable(currentlyDraggingElement),
|
8008 |
|
|
component = draggingPlaceholder.$sortable,
|
8009 |
|
|
ev = { type: e.type };
|
8010 |
|
|
|
8011 |
|
|
if (sortable[0]) {
|
8012 |
|
|
component.dragDrop(ev, component.element);
|
8013 |
|
|
}
|
8014 |
|
|
component.dragEnd(ev, component.element);
|
8015 |
|
|
});
|
8016 |
|
|
},
|
8017 |
|
|
|
8018 |
|
|
init: function() {
|
8019 |
|
|
|
8020 |
|
|
var $this = this,
|
8021 |
|
|
element = this.element[0];
|
8022 |
|
|
|
8023 |
|
|
touchedlists = [];
|
8024 |
|
|
|
8025 |
|
|
this.checkEmptyList();
|
8026 |
|
|
|
8027 |
|
|
this.element.data('sortable-group', this.options.group ? this.options.group : UI.Utils.uid('sortable-group'));
|
8028 |
|
|
|
8029 |
|
|
var handleDragStart = delegate(function(e) {
|
8030 |
|
|
|
8031 |
|
|
if (e.data && e.data.sortable) {
|
8032 |
|
|
return;
|
8033 |
|
|
}
|
8034 |
|
|
|
8035 |
|
|
var $target = UI.$(e.target),
|
8036 |
|
|
$link = $target.is('a[href]') ? $target:$target.parents('a[href]');
|
8037 |
|
|
|
8038 |
|
|
if ($target.is(':input')) {
|
8039 |
|
|
return;
|
8040 |
|
|
}
|
8041 |
|
|
|
8042 |
|
|
if ($this.options.handleClass) {
|
8043 |
|
|
var handle = $target.hasClass($this.options.handleClass) ? $target : $target.closest('.'+$this.options.handleClass, $this.element);
|
8044 |
|
|
if (!handle.length) return;
|
8045 |
|
|
}
|
8046 |
|
|
|
8047 |
|
|
e.preventDefault();
|
8048 |
|
|
|
8049 |
|
|
if ($link.length) {
|
8050 |
|
|
|
8051 |
|
|
$link.one('click', function(e){
|
8052 |
|
|
e.preventDefault();
|
8053 |
|
|
}).one(POINTER_UP, function(){
|
8054 |
|
|
|
8055 |
|
|
if (!moved) {
|
8056 |
|
|
$link.trigger('click');
|
8057 |
|
|
if (supportsTouch && $link.attr('href').trim()) {
|
8058 |
|
|
location.href = $link.attr('href');
|
8059 |
|
|
}
|
8060 |
|
|
}
|
8061 |
|
|
});
|
8062 |
|
|
}
|
8063 |
|
|
|
8064 |
|
|
e.data = e.data || {};
|
8065 |
|
|
|
8066 |
|
|
e.data.sortable = element;
|
8067 |
|
|
|
8068 |
|
|
return $this.dragStart(e, this);
|
8069 |
|
|
});
|
8070 |
|
|
|
8071 |
|
|
var handleDragEnter = delegate(UI.Utils.debounce(function(e) {
|
8072 |
|
|
return $this.dragEnter(e, this);
|
8073 |
|
|
}), 40);
|
8074 |
|
|
|
8075 |
|
|
var handleDragLeave = delegate(function(e) {
|
8076 |
|
|
|
8077 |
|
|
// Prevent dragenter on a child from allowing a dragleave on the container
|
8078 |
|
|
var previousCounter = $this.dragenterData(this);
|
8079 |
|
|
$this.dragenterData(this, previousCounter - 1);
|
8080 |
|
|
|
8081 |
|
|
// This is a fix for child elements firing dragenter before the parent fires dragleave
|
8082 |
|
|
if (!$this.dragenterData(this)) {
|
8083 |
|
|
UI.$(this).removeClass($this.options.overClass);
|
8084 |
|
|
$this.dragenterData(this, false);
|
8085 |
|
|
}
|
8086 |
|
|
});
|
8087 |
|
|
|
8088 |
|
|
var handleTouchMove = delegate(function(e) {
|
8089 |
|
|
|
8090 |
|
|
if (!currentlyDraggingElement ||
|
8091 |
|
|
currentlyDraggingElement === this ||
|
8092 |
|
|
currentlyDraggingTarget === this) {
|
8093 |
|
|
return true;
|
8094 |
|
|
}
|
8095 |
|
|
|
8096 |
|
|
$this.element.children().removeClass($this.options.overClass);
|
8097 |
|
|
currentlyDraggingTarget = this;
|
8098 |
|
|
|
8099 |
|
|
$this.moveElementNextTo(currentlyDraggingElement, this);
|
8100 |
|
|
|
8101 |
|
|
return prevent(e);
|
8102 |
|
|
});
|
8103 |
|
|
|
8104 |
|
|
// Bind/unbind standard mouse/touch events as a polyfill.
|
8105 |
|
|
function addDragHandlers() {
|
8106 |
|
|
|
8107 |
|
|
if (supportsTouch && startEvent.touches && startEvent.touches.length) {
|
8108 |
|
|
element.addEventListener(POINTER_MOVE, handleTouchMove, false);
|
8109 |
|
|
} else {
|
8110 |
|
|
element.addEventListener('mouseover', handleDragEnter, false);
|
8111 |
|
|
element.addEventListener('mouseout', handleDragLeave, false);
|
8112 |
|
|
}
|
8113 |
|
|
|
8114 |
|
|
// document.addEventListener("selectstart", prevent, false);
|
8115 |
|
|
}
|
8116 |
|
|
|
8117 |
|
|
function removeDragHandlers() {
|
8118 |
|
|
if (supportsTouch && startEvent.touches && startEvent.touches.length) {
|
8119 |
|
|
element.removeEventListener(POINTER_MOVE, handleTouchMove, false);
|
8120 |
|
|
} else {
|
8121 |
|
|
element.removeEventListener('mouseover', handleDragEnter, false);
|
8122 |
|
|
element.removeEventListener('mouseout', handleDragLeave, false);
|
8123 |
|
|
}
|
8124 |
|
|
|
8125 |
|
|
// document.removeEventListener("selectstart", prevent, false);
|
8126 |
|
|
}
|
8127 |
|
|
|
8128 |
|
|
this.addDragHandlers = addDragHandlers;
|
8129 |
|
|
this.removeDragHandlers = removeDragHandlers;
|
8130 |
|
|
|
8131 |
|
|
function handleDragMove(e) {
|
8132 |
|
|
|
8133 |
|
|
if (!currentlyDraggingElement) {
|
8134 |
|
|
return;
|
8135 |
|
|
}
|
8136 |
|
|
|
8137 |
|
|
$this.dragMove(e, $this);
|
8138 |
|
|
}
|
8139 |
|
|
|
8140 |
|
|
function delegate(fn) {
|
8141 |
|
|
|
8142 |
|
|
return function(e) {
|
8143 |
|
|
|
8144 |
|
|
var touch, target, context;
|
8145 |
|
|
|
8146 |
|
|
startEvent = e;
|
8147 |
|
|
|
8148 |
|
|
if (e) {
|
8149 |
|
|
touch = e.touches && e.touches[0] || e;
|
8150 |
|
|
target = touch.target || e.target;
|
8151 |
|
|
|
8152 |
|
|
// Fix event.target for a touch event
|
8153 |
|
|
if (supportsTouch && document.elementFromPoint) {
|
8154 |
|
|
|
8155 |
|
|
var _target = document.elementFromPoint(touch.pageX - document.body.scrollLeft, touch.pageY - document.body.scrollTop);
|
8156 |
|
|
|
8157 |
|
|
if (_target) {
|
8158 |
|
|
target = _target;
|
8159 |
|
|
}
|
8160 |
|
|
}
|
8161 |
|
|
|
8162 |
|
|
overElement = UI.$(target);
|
8163 |
|
|
}
|
8164 |
|
|
|
8165 |
|
|
if (UI.$(target).hasClass('.'+$this.options.childClass)) {
|
8166 |
|
|
fn.apply(target, [e]);
|
8167 |
|
|
} else if (target !== element) {
|
8168 |
|
|
|
8169 |
|
|
// If a child is initiating the event or ending it, then use the container as context for the callback.
|
8170 |
|
|
context = moveUpToChildNode(element, target);
|
8171 |
|
|
|
8172 |
|
|
if (context) {
|
8173 |
|
|
fn.apply(context, [e]);
|
8174 |
|
|
}
|
8175 |
|
|
}
|
8176 |
|
|
};
|
8177 |
|
|
}
|
8178 |
|
|
|
8179 |
|
|
window.addEventListener(POINTER_MOVE, handleDragMove, false);
|
8180 |
|
|
element.addEventListener(POINTER_DOWN, handleDragStart, false);
|
8181 |
|
|
},
|
8182 |
|
|
|
8183 |
|
|
dragStart: function(e, elem) {
|
8184 |
|
|
|
8185 |
|
|
moved = false;
|
8186 |
|
|
moving = false;
|
8187 |
|
|
dragging = false;
|
8188 |
|
|
|
8189 |
|
|
var $this = this,
|
8190 |
|
|
target = UI.$(e.target);
|
8191 |
|
|
|
8192 |
|
|
if (!supportsTouch && e.button==2) {
|
8193 |
|
|
return;
|
8194 |
|
|
}
|
8195 |
|
|
|
8196 |
|
|
if (target.is('.'+$this.options.noDragClass)) {
|
8197 |
|
|
return;
|
8198 |
|
|
}
|
8199 |
|
|
|
8200 |
|
|
var noDragParent = target.closest('.'+$this.options.noDragClass);
|
8201 |
|
|
|
8202 |
|
|
if (noDragParent.length && this.element.find(noDragParent[0]).length) {
|
8203 |
|
|
return;
|
8204 |
|
|
}
|
8205 |
|
|
|
8206 |
|
|
// prevent dragging if taget is a form field
|
8207 |
|
|
if (target.is(':input')) {
|
8208 |
|
|
return;
|
8209 |
|
|
}
|
8210 |
|
|
|
8211 |
|
|
currentlyDraggingElement = elem;
|
8212 |
|
|
|
8213 |
|
|
// init drag placeholder
|
8214 |
|
|
if (draggingPlaceholder) {
|
8215 |
|
|
draggingPlaceholder.remove();
|
8216 |
|
|
}
|
8217 |
|
|
|
8218 |
|
|
var $current = UI.$(currentlyDraggingElement), offset = $current.offset(), ev = e.touches && e.touches[0] || e;
|
8219 |
|
|
|
8220 |
|
|
delayIdle = {
|
8221 |
|
|
|
8222 |
|
|
pos : { x:ev.pageX, y:ev.pageY },
|
8223 |
|
|
threshold : $this.options.handleClass ? 1 : $this.options.threshold,
|
8224 |
|
|
apply : function(evt) {
|
8225 |
|
|
|
8226 |
|
|
draggingPlaceholder = UI.$('<div class="'+([$this.options.draggingClass, $this.options.dragCustomClass].join(' '))+'"></div>').css({
|
8227 |
|
|
display : 'none',
|
8228 |
|
|
top : offset.top,
|
8229 |
|
|
left : offset.left,
|
8230 |
|
|
width : $current.width(),
|
8231 |
|
|
height : $current.height(),
|
8232 |
|
|
padding : $current.css('padding')
|
8233 |
|
|
}).data({
|
8234 |
|
|
'mouse-offset': {
|
8235 |
|
|
left : offset.left - parseInt(ev.pageX, 10),
|
8236 |
|
|
top : offset.top - parseInt(ev.pageY, 10)
|
8237 |
|
|
},
|
8238 |
|
|
origin : $this.element,
|
8239 |
|
|
index : $current.index()
|
8240 |
|
|
}).append($current.html()).appendTo('body');
|
8241 |
|
|
|
8242 |
|
|
draggingPlaceholder.$current = $current;
|
8243 |
|
|
draggingPlaceholder.$sortable = $this;
|
8244 |
|
|
|
8245 |
|
|
$current.data({
|
8246 |
|
|
'start-list': $current.parent(),
|
8247 |
|
|
'start-index': $current.index(),
|
8248 |
|
|
'sortable-group': $this.options.group
|
8249 |
|
|
});
|
8250 |
|
|
|
8251 |
|
|
$this.addDragHandlers();
|
8252 |
|
|
|
8253 |
|
|
$this.options.start(this, currentlyDraggingElement);
|
8254 |
|
|
$this.trigger('start.uk.sortable', [$this, currentlyDraggingElement, draggingPlaceholder]);
|
8255 |
|
|
|
8256 |
|
|
moved = true;
|
8257 |
|
|
delayIdle = false;
|
8258 |
|
|
}
|
8259 |
|
|
};
|
8260 |
|
|
},
|
8261 |
|
|
|
8262 |
|
|
dragMove: function(e, elem) {
|
8263 |
|
|
|
8264 |
|
|
overElement = UI.$(document.elementFromPoint(e.pageX - (document.body.scrollLeft || document.scrollLeft || 0), e.pageY - (document.body.scrollTop || document.documentElement.scrollTop || 0)));
|
8265 |
|
|
|
8266 |
|
|
var overRoot = overElement.closest('.'+this.options.baseClass),
|
8267 |
|
|
groupOver = overRoot.data('sortable-group'),
|
8268 |
|
|
$current = UI.$(currentlyDraggingElement),
|
8269 |
|
|
currentRoot = $current.parent(),
|
8270 |
|
|
groupCurrent = $current.data('sortable-group'),
|
8271 |
|
|
overChild;
|
8272 |
|
|
|
8273 |
|
|
if (overRoot[0] !== currentRoot[0] && groupCurrent !== undefined && groupOver === groupCurrent) {
|
8274 |
|
|
|
8275 |
|
|
overRoot.data('sortable').addDragHandlers();
|
8276 |
|
|
|
8277 |
|
|
touchedlists.push(overRoot);
|
8278 |
|
|
overRoot.children().addClass(this.options.childClass);
|
8279 |
|
|
|
8280 |
|
|
// swap root
|
8281 |
|
|
if (overRoot.children().length > 0) {
|
8282 |
|
|
overChild = overElement.closest('.'+this.options.childClass);
|
8283 |
|
|
|
8284 |
|
|
if (overChild.length) {
|
8285 |
|
|
overChild.before($current);
|
8286 |
|
|
} else {
|
8287 |
|
|
overRoot.append($current);
|
8288 |
|
|
}
|
8289 |
|
|
|
8290 |
|
|
} else { // empty list
|
8291 |
|
|
overElement.append($current);
|
8292 |
|
|
}
|
8293 |
|
|
|
8294 |
|
|
UI.$doc.trigger('mouseover');
|
8295 |
|
|
}
|
8296 |
|
|
|
8297 |
|
|
this.checkEmptyList();
|
8298 |
|
|
this.checkEmptyList(currentRoot);
|
8299 |
|
|
},
|
8300 |
|
|
|
8301 |
|
|
dragEnter: function(e, elem) {
|
8302 |
|
|
|
8303 |
|
|
if (!currentlyDraggingElement || currentlyDraggingElement === elem) {
|
8304 |
|
|
return true;
|
8305 |
|
|
}
|
8306 |
|
|
|
8307 |
|
|
var previousCounter = this.dragenterData(elem);
|
8308 |
|
|
|
8309 |
|
|
this.dragenterData(elem, previousCounter + 1);
|
8310 |
|
|
|
8311 |
|
|
// Prevent dragenter on a child from allowing a dragleave on the container
|
8312 |
|
|
if (previousCounter === 0) {
|
8313 |
|
|
|
8314 |
|
|
var currentlist = UI.$(elem).parent(),
|
8315 |
|
|
startlist = UI.$(currentlyDraggingElement).data('start-list');
|
8316 |
|
|
|
8317 |
|
|
if (currentlist[0] !== startlist[0]) {
|
8318 |
|
|
|
8319 |
|
|
var groupOver = currentlist.data('sortable-group'),
|
8320 |
|
|
groupCurrent = UI.$(currentlyDraggingElement).data('sortable-group');
|
8321 |
|
|
|
8322 |
|
|
if ((groupOver || groupCurrent) && (groupOver != groupCurrent)) {
|
8323 |
|
|
return false;
|
8324 |
|
|
}
|
8325 |
|
|
}
|
8326 |
|
|
|
8327 |
|
|
UI.$(elem).addClass(this.options.overClass);
|
8328 |
|
|
this.moveElementNextTo(currentlyDraggingElement, elem);
|
8329 |
|
|
}
|
8330 |
|
|
|
8331 |
|
|
return false;
|
8332 |
|
|
},
|
8333 |
|
|
|
8334 |
|
|
dragEnd: function(e, elem) {
|
8335 |
|
|
|
8336 |
|
|
var $this = this;
|
8337 |
|
|
|
8338 |
|
|
// avoid triggering event twice
|
8339 |
|
|
if (currentlyDraggingElement) {
|
8340 |
|
|
// TODO: trigger on right element?
|
8341 |
|
|
this.options.stop(elem);
|
8342 |
|
|
this.trigger('stop.uk.sortable', [this]);
|
8343 |
|
|
}
|
8344 |
|
|
|
8345 |
|
|
currentlyDraggingElement = null;
|
8346 |
|
|
currentlyDraggingTarget = null;
|
8347 |
|
|
|
8348 |
|
|
touchedlists.push(this.element);
|
8349 |
|
|
touchedlists.forEach(function(el, i) {
|
8350 |
|
|
UI.$(el).children().each(function() {
|
8351 |
|
|
if (this.nodeType === 1) {
|
8352 |
|
|
UI.$(this).removeClass($this.options.overClass)
|
8353 |
|
|
.removeClass($this.options.placeholderClass)
|
8354 |
|
|
.removeClass($this.options.childClass);
|
8355 |
|
|
$this.dragenterData(this, false);
|
8356 |
|
|
}
|
8357 |
|
|
});
|
8358 |
|
|
});
|
8359 |
|
|
|
8360 |
|
|
touchedlists = [];
|
8361 |
|
|
|
8362 |
|
|
UI.$html.removeClass(this.options.dragMovingClass);
|
8363 |
|
|
|
8364 |
|
|
this.removeDragHandlers();
|
8365 |
|
|
|
8366 |
|
|
if (draggingPlaceholder) {
|
8367 |
|
|
draggingPlaceholder.remove();
|
8368 |
|
|
draggingPlaceholder = null;
|
8369 |
|
|
}
|
8370 |
|
|
},
|
8371 |
|
|
|
8372 |
|
|
dragDrop: function(e, elem) {
|
8373 |
|
|
|
8374 |
|
|
if (e.type === 'drop') {
|
8375 |
|
|
|
8376 |
|
|
if (e.stopPropagation) {
|
8377 |
|
|
e.stopPropagation();
|
8378 |
|
|
}
|
8379 |
|
|
|
8380 |
|
|
if (e.preventDefault) {
|
8381 |
|
|
e.preventDefault();
|
8382 |
|
|
}
|
8383 |
|
|
}
|
8384 |
|
|
|
8385 |
|
|
this.triggerChangeEvents();
|
8386 |
|
|
},
|
8387 |
|
|
|
8388 |
|
|
triggerChangeEvents: function() {
|
8389 |
|
|
|
8390 |
|
|
// trigger events once
|
8391 |
|
|
if (!currentlyDraggingElement) return;
|
8392 |
|
|
|
8393 |
|
|
var $current = UI.$(currentlyDraggingElement),
|
8394 |
|
|
oldRoot = draggingPlaceholder.data('origin'),
|
8395 |
|
|
newRoot = $current.closest('.'+this.options.baseClass),
|
8396 |
|
|
triggers = [],
|
8397 |
|
|
el = UI.$(currentlyDraggingElement);
|
8398 |
|
|
|
8399 |
|
|
// events depending on move inside lists or across lists
|
8400 |
|
|
if (oldRoot[0] === newRoot[0] && draggingPlaceholder.data('index') != $current.index() ) {
|
8401 |
|
|
triggers.push({sortable: this, mode: 'moved'});
|
8402 |
|
|
} else if (oldRoot[0] != newRoot[0]) {
|
8403 |
|
|
triggers.push({sortable: UI.$(newRoot).data('sortable'), mode: 'added'}, {sortable: UI.$(oldRoot).data('sortable'), mode: 'removed'});
|
8404 |
|
|
}
|
8405 |
|
|
|
8406 |
|
|
triggers.forEach(function (trigger, i) {
|
8407 |
|
|
if (trigger.sortable) {
|
8408 |
|
|
trigger.sortable.element.trigger('change.uk.sortable', [trigger.sortable, el, trigger.mode]);
|
8409 |
|
|
}
|
8410 |
|
|
});
|
8411 |
|
|
},
|
8412 |
|
|
|
8413 |
|
|
dragenterData: function(element, val) {
|
8414 |
|
|
|
8415 |
|
|
element = UI.$(element);
|
8416 |
|
|
|
8417 |
|
|
if (arguments.length == 1) {
|
8418 |
|
|
return parseInt(element.data('child-dragenter'), 10) || 0;
|
8419 |
|
|
} else if (!val) {
|
8420 |
|
|
element.removeData('child-dragenter');
|
8421 |
|
|
} else {
|
8422 |
|
|
element.data('child-dragenter', Math.max(0, val));
|
8423 |
|
|
}
|
8424 |
|
|
},
|
8425 |
|
|
|
8426 |
|
|
moveElementNextTo: function(element, elementToMoveNextTo) {
|
8427 |
|
|
|
8428 |
|
|
dragging = true;
|
8429 |
|
|
|
8430 |
|
|
var $this = this,
|
8431 |
|
|
list = UI.$(element).parent().css('min-height', ''),
|
8432 |
|
|
next = isBelow(element, elementToMoveNextTo) ? elementToMoveNextTo : elementToMoveNextTo.nextSibling,
|
8433 |
|
|
children = list.children(),
|
8434 |
|
|
count = children.length;
|
8435 |
|
|
|
8436 |
|
|
if (!$this.options.animation) {
|
8437 |
|
|
elementToMoveNextTo.parentNode.insertBefore(element, next);
|
8438 |
|
|
UI.Utils.checkDisplay($this.element.parent());
|
8439 |
|
|
return;
|
8440 |
|
|
}
|
8441 |
|
|
|
8442 |
|
|
list.css('min-height', list.height());
|
8443 |
|
|
|
8444 |
|
|
children.stop().each(function(){
|
8445 |
|
|
var ele = UI.$(this),
|
8446 |
|
|
offset = ele.position();
|
8447 |
|
|
|
8448 |
|
|
offset.width = ele.width();
|
8449 |
|
|
|
8450 |
|
|
ele.data('offset-before', offset);
|
8451 |
|
|
});
|
8452 |
|
|
|
8453 |
|
|
elementToMoveNextTo.parentNode.insertBefore(element, next);
|
8454 |
|
|
|
8455 |
|
|
UI.Utils.checkDisplay($this.element.parent());
|
8456 |
|
|
|
8457 |
|
|
children = list.children().each(function() {
|
8458 |
|
|
var ele = UI.$(this);
|
8459 |
|
|
ele.data('offset-after', ele.position());
|
8460 |
|
|
}).each(function() {
|
8461 |
|
|
var ele = UI.$(this),
|
8462 |
|
|
before = ele.data('offset-before');
|
8463 |
|
|
ele.css({position:'absolute', top:before.top, left:before.left, minWidth:before.width });
|
8464 |
|
|
});
|
8465 |
|
|
|
8466 |
|
|
children.each(function(){
|
8467 |
|
|
|
8468 |
|
|
var ele = UI.$(this),
|
8469 |
|
|
before = ele.data('offset-before'),
|
8470 |
|
|
offset = ele.data('offset-after');
|
8471 |
|
|
|
8472 |
|
|
ele.css('pointer-events', 'none').width();
|
8473 |
|
|
|
8474 |
|
|
setTimeout(function(){
|
8475 |
|
|
ele.animate({'top':offset.top, 'left':offset.left}, $this.options.animation, function() {
|
8476 |
|
|
ele.css({position:'',top:'', left:'', minWidth: '', 'pointer-events':''}).removeClass($this.options.overClass).removeData('child-dragenter');
|
8477 |
|
|
count--;
|
8478 |
|
|
if (!count) {
|
8479 |
|
|
list.css('min-height', '');
|
8480 |
|
|
UI.Utils.checkDisplay($this.element.parent());
|
8481 |
|
|
}
|
8482 |
|
|
});
|
8483 |
|
|
}, 0);
|
8484 |
|
|
});
|
8485 |
|
|
},
|
8486 |
|
|
|
8487 |
|
|
serialize: function() {
|
8488 |
|
|
|
8489 |
|
|
var data = [], item, attribute;
|
8490 |
|
|
|
8491 |
|
|
this.element.children().each(function(j, child) {
|
8492 |
|
|
item = {};
|
8493 |
|
|
for (var i = 0, attr, val; i < child.attributes.length; i++) {
|
8494 |
|
|
attribute = child.attributes[i];
|
8495 |
|
|
if (attribute.name.indexOf('data-') === 0) {
|
8496 |
|
|
attr = attribute.name.substr(5);
|
8497 |
|
|
val = UI.Utils.str2json(attribute.value);
|
8498 |
|
|
item[attr] = (val || attribute.value=='false' || attribute.value=='0') ? val:attribute.value;
|
8499 |
|
|
}
|
8500 |
|
|
}
|
8501 |
|
|
data.push(item);
|
8502 |
|
|
});
|
8503 |
|
|
|
8504 |
|
|
return data;
|
8505 |
|
|
},
|
8506 |
|
|
|
8507 |
|
|
checkEmptyList: function(list) {
|
8508 |
|
|
|
8509 |
|
|
list = list ? UI.$(list) : this.element;
|
8510 |
|
|
|
8511 |
|
|
if (this.options.emptyClass) {
|
8512 |
|
|
list[!list.children().length ? 'addClass':'removeClass'](this.options.emptyClass);
|
8513 |
|
|
}
|
8514 |
|
|
}
|
8515 |
|
|
});
|
8516 |
|
|
|
8517 |
|
|
// helpers
|
8518 |
|
|
|
8519 |
|
|
function isBelow(el1, el2) {
|
8520 |
|
|
|
8521 |
|
|
var parent = el1.parentNode;
|
8522 |
|
|
|
8523 |
|
|
if (el2.parentNode != parent) {
|
8524 |
|
|
return false;
|
8525 |
|
|
}
|
8526 |
|
|
|
8527 |
|
|
var cur = el1.previousSibling;
|
8528 |
|
|
|
8529 |
|
|
while (cur && cur.nodeType !== 9) {
|
8530 |
|
|
if (cur === el2) {
|
8531 |
|
|
return true;
|
8532 |
|
|
}
|
8533 |
|
|
cur = cur.previousSibling;
|
8534 |
|
|
}
|
8535 |
|
|
|
8536 |
|
|
return false;
|
8537 |
|
|
}
|
8538 |
|
|
|
8539 |
|
|
function moveUpToChildNode(parent, child) {
|
8540 |
|
|
var cur = child;
|
8541 |
|
|
if (cur == parent) { return null; }
|
8542 |
|
|
|
8543 |
|
|
while (cur) {
|
8544 |
|
|
if (cur.parentNode === parent) {
|
8545 |
|
|
return cur;
|
8546 |
|
|
}
|
8547 |
|
|
|
8548 |
|
|
cur = cur.parentNode;
|
8549 |
|
|
if ( !cur || !cur.ownerDocument || cur.nodeType === 11 ) {
|
8550 |
|
|
break;
|
8551 |
|
|
}
|
8552 |
|
|
}
|
8553 |
|
|
return null;
|
8554 |
|
|
}
|
8555 |
|
|
|
8556 |
|
|
function prevent(e) {
|
8557 |
|
|
if (e.stopPropagation) {
|
8558 |
|
|
e.stopPropagation();
|
8559 |
|
|
}
|
8560 |
|
|
if (e.preventDefault) {
|
8561 |
|
|
e.preventDefault();
|
8562 |
|
|
}
|
8563 |
|
|
e.returnValue = false;
|
8564 |
|
|
}
|
8565 |
|
|
|
8566 |
|
|
return UI.sortable;
|
8567 |
|
|
});
|
8568 |
|
|
|
8569 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
8570 |
|
|
(function(addon) {
|
8571 |
|
|
|
8572 |
|
|
var component;
|
8573 |
|
|
|
8574 |
|
|
if (window.UIkit2) {
|
8575 |
|
|
component = addon(UIkit2);
|
8576 |
|
|
}
|
8577 |
|
|
|
8578 |
|
|
if (typeof define == 'function' && define.amd) {
|
8579 |
|
|
define('uikit-sticky', ['uikit'], function(){
|
8580 |
|
|
return component || addon(UIkit2);
|
8581 |
|
|
});
|
8582 |
|
|
}
|
8583 |
|
|
|
8584 |
|
|
})(function(UI){
|
8585 |
|
|
|
8586 |
|
|
"use strict";
|
8587 |
|
|
|
8588 |
|
|
var $win = UI.$win,
|
8589 |
|
|
$doc = UI.$doc,
|
8590 |
|
|
sticked = [],
|
8591 |
|
|
direction = 1;
|
8592 |
|
|
|
8593 |
|
|
UI.component('sticky', {
|
8594 |
|
|
|
8595 |
|
|
defaults: {
|
8596 |
|
|
top : 0,
|
8597 |
|
|
bottom : 0,
|
8598 |
|
|
animation : '',
|
8599 |
|
|
clsinit : 'uk-sticky-init',
|
8600 |
|
|
clsactive : 'uk-active',
|
8601 |
|
|
clsinactive : '',
|
8602 |
|
|
getWidthFrom : '',
|
8603 |
|
|
showup : false,
|
8604 |
|
|
boundary : false,
|
8605 |
|
|
media : false,
|
8606 |
|
|
target : false,
|
8607 |
|
|
disabled : false
|
8608 |
|
|
},
|
8609 |
|
|
|
8610 |
|
|
boot: function() {
|
8611 |
|
|
|
8612 |
|
|
// should be more efficient than using $win.scroll(checkscrollposition):
|
8613 |
|
|
UI.$doc.on('scrolling.uk.document', function(e, data) {
|
8614 |
|
|
if (!data || !data.dir) return;
|
8615 |
|
|
direction = data.dir.y;
|
8616 |
|
|
checkscrollposition();
|
8617 |
|
|
});
|
8618 |
|
|
|
8619 |
|
|
UI.$win.on('resize orientationchange', UI.Utils.debounce(function() {
|
8620 |
|
|
|
8621 |
|
|
if (!sticked.length) return;
|
8622 |
|
|
|
8623 |
|
|
for (var i = 0; i < sticked.length; i++) {
|
8624 |
|
|
sticked[i].reset(true);
|
8625 |
|
|
sticked[i].self.computeWrapper();
|
8626 |
|
|
}
|
8627 |
|
|
|
8628 |
|
|
checkscrollposition();
|
8629 |
|
|
}, 100));
|
8630 |
|
|
|
8631 |
|
|
// init code
|
8632 |
|
|
UI.ready(function(context) {
|
8633 |
|
|
|
8634 |
|
|
setTimeout(function(){
|
8635 |
|
|
|
8636 |
|
|
UI.$('[data-uk-sticky]', context).each(function(){
|
8637 |
|
|
|
8638 |
|
|
var $ele = UI.$(this);
|
8639 |
|
|
|
8640 |
|
|
if (!$ele.data('sticky')) {
|
8641 |
|
|
UI.sticky($ele, UI.Utils.options($ele.attr('data-uk-sticky')));
|
8642 |
|
|
}
|
8643 |
|
|
});
|
8644 |
|
|
|
8645 |
|
|
checkscrollposition();
|
8646 |
|
|
}, 0);
|
8647 |
|
|
});
|
8648 |
|
|
},
|
8649 |
|
|
|
8650 |
|
|
init: function() {
|
8651 |
|
|
|
8652 |
|
|
var boundary = this.options.boundary, boundtoparent;
|
8653 |
|
|
|
8654 |
|
|
this.wrapper = this.element.wrap('<div class="uk-sticky-placeholder"></div>').parent();
|
8655 |
|
|
this.computeWrapper();
|
8656 |
|
|
this.wrapper.css({
|
8657 |
|
|
'margin-top' : this.element.css('margin-top'),
|
8658 |
|
|
'margin-bottom' : this.element.css('margin-bottom'),
|
8659 |
|
|
'margin-left' : this.element.css('margin-left'),
|
8660 |
|
|
'margin-right' : this.element.css('margin-right')
|
8661 |
|
|
})
|
8662 |
|
|
this.element.css('margin', 0);
|
8663 |
|
|
|
8664 |
|
|
if (boundary) {
|
8665 |
|
|
|
8666 |
|
|
if (boundary === true || boundary[0] === '!') {
|
8667 |
|
|
|
8668 |
|
|
boundary = boundary === true ? this.wrapper.parent() : this.wrapper.closest(boundary.substr(1));
|
8669 |
|
|
boundtoparent = true;
|
8670 |
|
|
|
8671 |
|
|
} else if (typeof boundary === "string") {
|
8672 |
|
|
boundary = UI.$(boundary);
|
8673 |
|
|
}
|
8674 |
|
|
}
|
8675 |
|
|
|
8676 |
|
|
this.sticky = {
|
8677 |
|
|
self : this,
|
8678 |
|
|
options : this.options,
|
8679 |
|
|
element : this.element,
|
8680 |
|
|
currentTop : null,
|
8681 |
|
|
wrapper : this.wrapper,
|
8682 |
|
|
init : false,
|
8683 |
|
|
getWidthFrom : UI.$(this.options.getWidthFrom || this.wrapper),
|
8684 |
|
|
boundary : boundary,
|
8685 |
|
|
boundtoparent : boundtoparent,
|
8686 |
|
|
top : 0,
|
8687 |
|
|
calcTop : function() {
|
8688 |
|
|
|
8689 |
|
|
var top = this.options.top;
|
8690 |
|
|
|
8691 |
|
|
// dynamic top parameter
|
8692 |
|
|
if (this.options.top && typeof(this.options.top) == 'string') {
|
8693 |
|
|
|
8694 |
|
|
// e.g. 50vh
|
8695 |
|
|
if (this.options.top.match(/^(-|)(\d+)vh$/)) {
|
8696 |
|
|
top = window.innerHeight * parseInt(this.options.top, 10)/100;
|
8697 |
|
|
// e.g. #elementId, or .class-1,class-2,.class-3 (first found is used)
|
8698 |
|
|
} else {
|
8699 |
|
|
|
8700 |
|
|
var topElement = UI.$(this.options.top).first();
|
8701 |
|
|
|
8702 |
|
|
if (topElement.length && topElement.is(':visible')) {
|
8703 |
|
|
top = -1 * ((topElement.offset().top + topElement.outerHeight()) - this.wrapper.offset().top);
|
8704 |
|
|
}
|
8705 |
|
|
}
|
8706 |
|
|
|
8707 |
|
|
}
|
8708 |
|
|
|
8709 |
|
|
this.top = top;
|
8710 |
|
|
},
|
8711 |
|
|
|
8712 |
|
|
reset: function(force) {
|
8713 |
|
|
|
8714 |
|
|
this.calcTop();
|
8715 |
|
|
|
8716 |
|
|
var finalize = function() {
|
8717 |
|
|
this.element.css({position:'', top:'', width:'', left:'', margin:'0'});
|
8718 |
|
|
this.element.removeClass([this.options.animation, 'uk-animation-reverse', this.options.clsactive].join(' '));
|
8719 |
|
|
this.element.addClass(this.options.clsinactive);
|
8720 |
|
|
this.element.trigger('inactive.uk.sticky');
|
8721 |
|
|
|
8722 |
|
|
this.currentTop = null;
|
8723 |
|
|
this.animate = false;
|
8724 |
|
|
|
8725 |
|
|
}.bind(this);
|
8726 |
|
|
|
8727 |
|
|
|
8728 |
|
|
if (!force && this.options.animation && UI.support.animation && !UI.Utils.isInView(this.wrapper)) {
|
8729 |
|
|
|
8730 |
|
|
this.animate = true;
|
8731 |
|
|
|
8732 |
|
|
this.element.removeClass(this.options.animation).one(UI.support.animation.end, function(){
|
8733 |
|
|
finalize();
|
8734 |
|
|
}).width(); // force redraw
|
8735 |
|
|
|
8736 |
|
|
this.element.addClass(this.options.animation+' '+'uk-animation-reverse');
|
8737 |
|
|
} else {
|
8738 |
|
|
finalize();
|
8739 |
|
|
}
|
8740 |
|
|
},
|
8741 |
|
|
|
8742 |
|
|
check: function() {
|
8743 |
|
|
|
8744 |
|
|
if (this.options.disabled) {
|
8745 |
|
|
return false;
|
8746 |
|
|
}
|
8747 |
|
|
|
8748 |
|
|
if (this.options.media) {
|
8749 |
|
|
|
8750 |
|
|
switch(typeof(this.options.media)) {
|
8751 |
|
|
case 'number':
|
8752 |
|
|
if (window.innerWidth < this.options.media) {
|
8753 |
|
|
return false;
|
8754 |
|
|
}
|
8755 |
|
|
break;
|
8756 |
|
|
case 'string':
|
8757 |
|
|
if (window.matchMedia && !window.matchMedia(this.options.media).matches) {
|
8758 |
|
|
return false;
|
8759 |
|
|
}
|
8760 |
|
|
break;
|
8761 |
|
|
}
|
8762 |
|
|
}
|
8763 |
|
|
|
8764 |
|
|
var scrollTop = $win.scrollTop(),
|
8765 |
|
|
documentHeight = $doc.height(),
|
8766 |
|
|
dwh = documentHeight - window.innerHeight,
|
8767 |
|
|
extra = (scrollTop > dwh) ? dwh - scrollTop : 0,
|
8768 |
|
|
elementTop = this.wrapper.offset().top,
|
8769 |
|
|
etse = elementTop - this.top - extra,
|
8770 |
|
|
active = (scrollTop >= etse);
|
8771 |
|
|
|
8772 |
|
|
if (active && this.options.showup) {
|
8773 |
|
|
|
8774 |
|
|
// set inactiv if scrolling down
|
8775 |
|
|
if (direction == 1) {
|
8776 |
|
|
active = false;
|
8777 |
|
|
}
|
8778 |
|
|
|
8779 |
|
|
// set inactive when wrapper is still in view
|
8780 |
|
|
if (direction == -1 && !this.element.hasClass(this.options.clsactive) && UI.Utils.isInView(this.wrapper)) {
|
8781 |
|
|
active = false;
|
8782 |
|
|
}
|
8783 |
|
|
}
|
8784 |
|
|
|
8785 |
|
|
return active;
|
8786 |
|
|
}
|
8787 |
|
|
};
|
8788 |
|
|
|
8789 |
|
|
this.sticky.calcTop();
|
8790 |
|
|
|
8791 |
|
|
sticked.push(this.sticky);
|
8792 |
|
|
},
|
8793 |
|
|
|
8794 |
|
|
update: function() {
|
8795 |
|
|
checkscrollposition(this.sticky);
|
8796 |
|
|
},
|
8797 |
|
|
|
8798 |
|
|
enable: function() {
|
8799 |
|
|
this.options.disabled = false;
|
8800 |
|
|
this.update();
|
8801 |
|
|
},
|
8802 |
|
|
|
8803 |
|
|
disable: function(force) {
|
8804 |
|
|
this.options.disabled = true;
|
8805 |
|
|
this.sticky.reset(force);
|
8806 |
|
|
},
|
8807 |
|
|
|
8808 |
|
|
computeWrapper: function() {
|
8809 |
|
|
|
8810 |
|
|
this.wrapper.css({
|
8811 |
|
|
'height' : ['absolute','fixed'].indexOf(this.element.css('position')) == -1 ? this.element.outerHeight() : '',
|
8812 |
|
|
'float' : this.element.css('float') != 'none' ? this.element.css('float') : ''
|
8813 |
|
|
});
|
8814 |
|
|
|
8815 |
|
|
if (this.element.css('position') == 'fixed') {
|
8816 |
|
|
this.element.css({
|
8817 |
|
|
width: this.sticky.getWidthFrom.length ? this.sticky.getWidthFrom.width() : this.element.width()
|
8818 |
|
|
});
|
8819 |
|
|
}
|
8820 |
|
|
}
|
8821 |
|
|
});
|
8822 |
|
|
|
8823 |
|
|
function checkscrollposition(direction) {
|
8824 |
|
|
|
8825 |
|
|
var stickies = arguments.length ? arguments : sticked;
|
8826 |
|
|
|
8827 |
|
|
if (!stickies.length || $win.scrollTop() < 0) return;
|
8828 |
|
|
|
8829 |
|
|
var scrollTop = $win.scrollTop(),
|
8830 |
|
|
documentHeight = $doc.height(),
|
8831 |
|
|
windowHeight = $win.height(),
|
8832 |
|
|
dwh = documentHeight - windowHeight,
|
8833 |
|
|
extra = (scrollTop > dwh) ? dwh - scrollTop : 0,
|
8834 |
|
|
newTop, containerBottom, stickyHeight, sticky;
|
8835 |
|
|
|
8836 |
|
|
for (var i = 0; i < stickies.length; i++) {
|
8837 |
|
|
|
8838 |
|
|
sticky = stickies[i];
|
8839 |
|
|
|
8840 |
|
|
if (!sticky.element.is(':visible') || sticky.animate) {
|
8841 |
|
|
continue;
|
8842 |
|
|
}
|
8843 |
|
|
|
8844 |
|
|
if (!sticky.check()) {
|
8845 |
|
|
|
8846 |
|
|
if (sticky.currentTop !== null) {
|
8847 |
|
|
sticky.reset();
|
8848 |
|
|
}
|
8849 |
|
|
|
8850 |
|
|
} else {
|
8851 |
|
|
|
8852 |
|
|
if (sticky.top < 0) {
|
8853 |
|
|
newTop = 0;
|
8854 |
|
|
} else {
|
8855 |
|
|
stickyHeight = sticky.element.outerHeight();
|
8856 |
|
|
newTop = documentHeight - stickyHeight - sticky.top - sticky.options.bottom - scrollTop - extra;
|
8857 |
|
|
newTop = newTop < 0 ? newTop + sticky.top : sticky.top;
|
8858 |
|
|
}
|
8859 |
|
|
|
8860 |
|
|
if (sticky.boundary && sticky.boundary.length) {
|
8861 |
|
|
|
8862 |
|
|
var bTop = sticky.boundary.offset().top;
|
8863 |
|
|
|
8864 |
|
|
if (sticky.boundtoparent) {
|
8865 |
|
|
containerBottom = documentHeight - (bTop + sticky.boundary.outerHeight()) + parseInt(sticky.boundary.css('padding-bottom'));
|
8866 |
|
|
} else {
|
8867 |
|
|
containerBottom = documentHeight - bTop;
|
8868 |
|
|
}
|
8869 |
|
|
|
8870 |
|
|
newTop = (scrollTop + stickyHeight) > (documentHeight - containerBottom - (sticky.top < 0 ? 0 : sticky.top)) ? (documentHeight - containerBottom) - (scrollTop + stickyHeight) : newTop;
|
8871 |
|
|
}
|
8872 |
|
|
|
8873 |
|
|
|
8874 |
|
|
if (sticky.currentTop != newTop) {
|
8875 |
|
|
|
8876 |
|
|
sticky.element.css({
|
8877 |
|
|
position : 'fixed',
|
8878 |
|
|
top : newTop,
|
8879 |
|
|
width : sticky.getWidthFrom.length ? sticky.getWidthFrom.width() : sticky.element.width()
|
8880 |
|
|
});
|
8881 |
|
|
|
8882 |
|
|
if (!sticky.init) {
|
8883 |
|
|
|
8884 |
|
|
sticky.element.addClass(sticky.options.clsinit);
|
8885 |
|
|
|
8886 |
|
|
if (location.hash && scrollTop > 0 && sticky.options.target) {
|
8887 |
|
|
|
8888 |
|
|
var $target = UI.$(location.hash);
|
8889 |
|
|
|
8890 |
|
|
if ($target.length) {
|
8891 |
|
|
|
8892 |
|
|
setTimeout((function($target, sticky){
|
8893 |
|
|
|
8894 |
|
|
return function() {
|
8895 |
|
|
|
8896 |
|
|
sticky.element.width(); // force redraw
|
8897 |
|
|
|
8898 |
|
|
var offset = $target.offset(),
|
8899 |
|
|
maxoffset = offset.top + $target.outerHeight(),
|
8900 |
|
|
stickyOffset = sticky.element.offset(),
|
8901 |
|
|
stickyHeight = sticky.element.outerHeight(),
|
8902 |
|
|
stickyMaxOffset = stickyOffset.top + stickyHeight;
|
8903 |
|
|
|
8904 |
|
|
if (stickyOffset.top < maxoffset && offset.top < stickyMaxOffset) {
|
8905 |
|
|
scrollTop = offset.top - stickyHeight - sticky.options.target;
|
8906 |
|
|
window.scrollTo(0, scrollTop);
|
8907 |
|
|
}
|
8908 |
|
|
};
|
8909 |
|
|
|
8910 |
|
|
})($target, sticky), 0);
|
8911 |
|
|
}
|
8912 |
|
|
}
|
8913 |
|
|
}
|
8914 |
|
|
|
8915 |
|
|
sticky.element.addClass(sticky.options.clsactive).removeClass(sticky.options.clsinactive);
|
8916 |
|
|
sticky.element.trigger('active.uk.sticky');
|
8917 |
|
|
sticky.element.css('margin', '');
|
8918 |
|
|
|
8919 |
|
|
if (sticky.options.animation && sticky.init && !UI.Utils.isInView(sticky.wrapper)) {
|
8920 |
|
|
sticky.element.addClass(sticky.options.animation);
|
8921 |
|
|
}
|
8922 |
|
|
|
8923 |
|
|
sticky.currentTop = newTop;
|
8924 |
|
|
}
|
8925 |
|
|
}
|
8926 |
|
|
|
8927 |
|
|
sticky.init = true;
|
8928 |
|
|
}
|
8929 |
|
|
}
|
8930 |
|
|
|
8931 |
|
|
return UI.sticky;
|
8932 |
|
|
});
|
8933 |
|
|
|
8934 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
8935 |
|
|
(function(addon) {
|
8936 |
|
|
var component;
|
8937 |
|
|
|
8938 |
|
|
if (window.UIkit2) {
|
8939 |
|
|
component = addon(UIkit2);
|
8940 |
|
|
}
|
8941 |
|
|
|
8942 |
|
|
if (typeof define == 'function' && define.amd) {
|
8943 |
|
|
define('uikit-tooltip', ['uikit'], function(){
|
8944 |
|
|
return component || addon(UIkit2);
|
8945 |
|
|
});
|
8946 |
|
|
}
|
8947 |
|
|
|
8948 |
|
|
})(function(UI){
|
8949 |
|
|
|
8950 |
|
|
"use strict";
|
8951 |
|
|
|
8952 |
|
|
var $tooltip, // tooltip container
|
8953 |
|
|
tooltipdelay, checkIdle;
|
8954 |
|
|
|
8955 |
|
|
UI.component('tooltip', {
|
8956 |
|
|
|
8957 |
|
|
defaults: {
|
8958 |
|
|
offset: 5,
|
8959 |
|
|
pos: 'top',
|
8960 |
|
|
animation: false,
|
8961 |
|
|
delay: 0, // in miliseconds
|
8962 |
|
|
cls: '',
|
8963 |
|
|
activeClass: 'uk-active',
|
8964 |
|
|
src: function(ele) {
|
8965 |
|
|
var title = ele.attr('title');
|
8966 |
|
|
|
8967 |
|
|
if (title !== undefined) {
|
8968 |
|
|
ele.data('cached-title', title).removeAttr('title');
|
8969 |
|
|
}
|
8970 |
|
|
|
8971 |
|
|
return ele.data("cached-title");
|
8972 |
|
|
}
|
8973 |
|
|
},
|
8974 |
|
|
|
8975 |
|
|
tip: '',
|
8976 |
|
|
|
8977 |
|
|
boot: function() {
|
8978 |
|
|
|
8979 |
|
|
// init code
|
8980 |
|
|
UI.$html.on('mouseenter.tooltip.uikit focus.tooltip.uikit', '[data-uk-tooltip]', function(e) {
|
8981 |
|
|
var ele = UI.$(this);
|
8982 |
|
|
|
8983 |
|
|
if (!ele.data('tooltip')) {
|
8984 |
|
|
UI.tooltip(ele, UI.Utils.options(ele.attr('data-uk-tooltip')));
|
8985 |
|
|
ele.trigger('mouseenter');
|
8986 |
|
|
}
|
8987 |
|
|
});
|
8988 |
|
|
},
|
8989 |
|
|
|
8990 |
|
|
init: function() {
|
8991 |
|
|
|
8992 |
|
|
var $this = this;
|
8993 |
|
|
|
8994 |
|
|
if (!$tooltip) {
|
8995 |
|
|
$tooltip = UI.$('<div class="uk-tooltip"></div>').appendTo("body");
|
8996 |
|
|
}
|
8997 |
|
|
|
8998 |
|
|
this.on({
|
8999 |
|
|
focus : function(e) { $this.show(); },
|
9000 |
|
|
blur : function(e) { $this.hide(); },
|
9001 |
|
|
mouseenter : function(e) { $this.show(); },
|
9002 |
|
|
mouseleave : function(e) { $this.hide(); }
|
9003 |
|
|
});
|
9004 |
|
|
},
|
9005 |
|
|
|
9006 |
|
|
show: function() {
|
9007 |
|
|
|
9008 |
|
|
this.tip = typeof(this.options.src) === 'function' ? this.options.src(this.element) : this.options.src;
|
9009 |
|
|
|
9010 |
|
|
if (tooltipdelay) clearTimeout(tooltipdelay);
|
9011 |
|
|
if (checkIdle) clearInterval(checkIdle);
|
9012 |
|
|
|
9013 |
|
|
if (typeof(this.tip) === 'string' ? !this.tip.length:true) return;
|
9014 |
|
|
|
9015 |
|
|
$tooltip.stop().css({top: -2000, visibility: 'hidden'}).removeClass(this.options.activeClass).show();
|
9016 |
|
|
$tooltip.html('<div class="uk-tooltip-inner">' + this.tip + '</div>');
|
9017 |
|
|
|
9018 |
|
|
var $this = this,
|
9019 |
|
|
pos = UI.$.extend({}, this.element.offset(), {width: this.element[0].offsetWidth, height: this.element[0].offsetHeight}),
|
9020 |
|
|
width = $tooltip[0].offsetWidth,
|
9021 |
|
|
height = $tooltip[0].offsetHeight,
|
9022 |
|
|
offset = typeof(this.options.offset) === "function" ? this.options.offset.call(this.element) : this.options.offset,
|
9023 |
|
|
position = typeof(this.options.pos) === "function" ? this.options.pos.call(this.element) : this.options.pos,
|
9024 |
|
|
tmppos = position.split("-"),
|
9025 |
|
|
tcss = {
|
9026 |
|
|
display : 'none',
|
9027 |
|
|
visibility : 'visible',
|
9028 |
|
|
top : (pos.top + pos.height + height),
|
9029 |
|
|
left : pos.left
|
9030 |
|
|
};
|
9031 |
|
|
|
9032 |
|
|
|
9033 |
|
|
// prevent strange position
|
9034 |
|
|
// when tooltip is in offcanvas etc.
|
9035 |
|
|
if (UI.$html.css('position')=='fixed' || UI.$body.css('position')=='fixed'){
|
9036 |
|
|
var bodyoffset = UI.$('body').offset(),
|
9037 |
|
|
htmloffset = UI.$('html').offset(),
|
9038 |
|
|
docoffset = {top: (htmloffset.top + bodyoffset.top), left: (htmloffset.left + bodyoffset.left)};
|
9039 |
|
|
|
9040 |
|
|
pos.left -= docoffset.left;
|
9041 |
|
|
pos.top -= docoffset.top;
|
9042 |
|
|
}
|
9043 |
|
|
|
9044 |
|
|
|
9045 |
|
|
if ((tmppos[0] == 'left' || tmppos[0] == 'right') && UI.langdirection == 'right') {
|
9046 |
|
|
tmppos[0] = tmppos[0] == 'left' ? 'right' : 'left';
|
9047 |
|
|
}
|
9048 |
|
|
|
9049 |
|
|
var variants = {
|
9050 |
|
|
bottom : {top: pos.top + pos.height + offset, left: pos.left + pos.width / 2 - width / 2},
|
9051 |
|
|
top : {top: pos.top - height - offset, left: pos.left + pos.width / 2 - width / 2},
|
9052 |
|
|
left : {top: pos.top + pos.height / 2 - height / 2, left: pos.left - width - offset},
|
9053 |
|
|
right : {top: pos.top + pos.height / 2 - height / 2, left: pos.left + pos.width + offset}
|
9054 |
|
|
};
|
9055 |
|
|
|
9056 |
|
|
UI.$.extend(tcss, variants[tmppos[0]]);
|
9057 |
|
|
|
9058 |
|
|
if (tmppos.length == 2) tcss.left = (tmppos[1] == 'left') ? (pos.left) : ((pos.left + pos.width) - width);
|
9059 |
|
|
|
9060 |
|
|
var boundary = this.checkBoundary(tcss.left, tcss.top, width, height);
|
9061 |
|
|
|
9062 |
|
|
if(boundary) {
|
9063 |
|
|
|
9064 |
|
|
switch(boundary) {
|
9065 |
|
|
case 'x':
|
9066 |
|
|
|
9067 |
|
|
if (tmppos.length == 2) {
|
9068 |
|
|
position = tmppos[0]+"-"+(tcss.left < 0 ? 'left': 'right');
|
9069 |
|
|
} else {
|
9070 |
|
|
position = tcss.left < 0 ? 'right': 'left';
|
9071 |
|
|
}
|
9072 |
|
|
|
9073 |
|
|
break;
|
9074 |
|
|
|
9075 |
|
|
case 'y':
|
9076 |
|
|
if (tmppos.length == 2) {
|
9077 |
|
|
position = (tcss.top < 0 ? 'bottom': 'top')+'-'+tmppos[1];
|
9078 |
|
|
} else {
|
9079 |
|
|
position = (tcss.top < 0 ? 'bottom': 'top');
|
9080 |
|
|
}
|
9081 |
|
|
|
9082 |
|
|
break;
|
9083 |
|
|
|
9084 |
|
|
case 'xy':
|
9085 |
|
|
if (tmppos.length == 2) {
|
9086 |
|
|
position = (tcss.top < 0 ? 'bottom': 'top')+'-'+(tcss.left < 0 ? 'left': 'right');
|
9087 |
|
|
} else {
|
9088 |
|
|
position = tcss.left < 0 ? 'right': 'left';
|
9089 |
|
|
}
|
9090 |
|
|
|
9091 |
|
|
break;
|
9092 |
|
|
|
9093 |
|
|
}
|
9094 |
|
|
|
9095 |
|
|
tmppos = position.split('-');
|
9096 |
|
|
|
9097 |
|
|
UI.$.extend(tcss, variants[tmppos[0]]);
|
9098 |
|
|
|
9099 |
|
|
if (tmppos.length == 2) tcss.left = (tmppos[1] == 'left') ? (pos.left) : ((pos.left + pos.width) - width);
|
9100 |
|
|
}
|
9101 |
|
|
|
9102 |
|
|
|
9103 |
|
|
tcss.left -= UI.$body.position().left;
|
9104 |
|
|
|
9105 |
|
|
tooltipdelay = setTimeout(function(){
|
9106 |
|
|
|
9107 |
|
|
$tooltip.css(tcss).attr('class', ['uk-tooltip', 'uk-tooltip-'+position, $this.options.cls].join(' '));
|
9108 |
|
|
|
9109 |
|
|
if ($this.options.animation) {
|
9110 |
|
|
$tooltip.css({opacity: 0, display: 'block'}).addClass($this.options.activeClass).animate({opacity: 1}, parseInt($this.options.animation, 10) || 400);
|
9111 |
|
|
} else {
|
9112 |
|
|
$tooltip.show().addClass($this.options.activeClass);
|
9113 |
|
|
}
|
9114 |
|
|
|
9115 |
|
|
tooltipdelay = false;
|
9116 |
|
|
|
9117 |
|
|
// close tooltip if element was removed or hidden
|
9118 |
|
|
checkIdle = setInterval(function(){
|
9119 |
|
|
if(!$this.element.is(':visible')) $this.hide();
|
9120 |
|
|
}, 150);
|
9121 |
|
|
|
9122 |
|
|
}, parseInt(this.options.delay, 10) || 0);
|
9123 |
|
|
},
|
9124 |
|
|
|
9125 |
|
|
hide: function() {
|
9126 |
|
|
|
9127 |
|
|
if (this.element.is('input') && this.element[0]===document.activeElement) return;
|
9128 |
|
|
|
9129 |
|
|
if (tooltipdelay) clearTimeout(tooltipdelay);
|
9130 |
|
|
if (checkIdle) clearInterval(checkIdle);
|
9131 |
|
|
|
9132 |
|
|
$tooltip.stop();
|
9133 |
|
|
|
9134 |
|
|
if (this.options.animation) {
|
9135 |
|
|
|
9136 |
|
|
var $this = this;
|
9137 |
|
|
|
9138 |
|
|
$tooltip.fadeOut(parseInt(this.options.animation, 10) || 400, function(){
|
9139 |
|
|
$tooltip.removeClass($this.options.activeClass)
|
9140 |
|
|
});
|
9141 |
|
|
|
9142 |
|
|
} else {
|
9143 |
|
|
$tooltip.hide().removeClass(this.options.activeClass);
|
9144 |
|
|
}
|
9145 |
|
|
},
|
9146 |
|
|
|
9147 |
|
|
content: function() {
|
9148 |
|
|
return this.tip;
|
9149 |
|
|
},
|
9150 |
|
|
|
9151 |
|
|
checkBoundary: function(left, top, width, height) {
|
9152 |
|
|
|
9153 |
|
|
var axis = "";
|
9154 |
|
|
|
9155 |
|
|
if(left < 0 || ((left - UI.$win.scrollLeft())+width) > window.innerWidth) {
|
9156 |
|
|
axis += "x";
|
9157 |
|
|
}
|
9158 |
|
|
|
9159 |
|
|
if(top < 0 || ((top - UI.$win.scrollTop())+height) > window.innerHeight) {
|
9160 |
|
|
axis += "y";
|
9161 |
|
|
}
|
9162 |
|
|
|
9163 |
|
|
return axis;
|
9164 |
|
|
}
|
9165 |
|
|
});
|
9166 |
|
|
|
9167 |
|
|
return UI.tooltip;
|
9168 |
|
|
});
|
9169 |
|
|
|
9170 |
|
|
/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
9171 |
|
|
(function(addon) {
|
9172 |
|
|
|
9173 |
|
|
var component;
|
9174 |
|
|
|
9175 |
|
|
if (window.UIkit) {
|
9176 |
|
|
component = addon(UIkit);
|
9177 |
|
|
}
|
9178 |
|
|
|
9179 |
|
|
if (typeof define == "function" && define.amd) {
|
9180 |
|
|
define("uikit-timepicker", ["uikit"], function(){
|
9181 |
|
|
return component || addon(UIkit);
|
9182 |
|
|
});
|
9183 |
|
|
}
|
9184 |
|
|
|
9185 |
|
|
})(function(UI){
|
9186 |
|
|
|
9187 |
|
|
"use strict";
|
9188 |
|
|
|
9189 |
|
|
|
9190 |
|
|
UI.component('timepicker', {
|
9191 |
|
|
|
9192 |
|
|
defaults: {
|
9193 |
|
|
format : '24h',
|
9194 |
|
|
delay : 0,
|
9195 |
|
|
start : 0,
|
9196 |
|
|
end : 24
|
9197 |
|
|
},
|
9198 |
|
|
|
9199 |
|
|
boot: function() {
|
9200 |
|
|
|
9201 |
|
|
// init code
|
9202 |
|
|
UI.$html.on("focus.timepicker.uikit", "[data-uk-timepicker]", function(e) {
|
9203 |
|
|
|
9204 |
|
|
var ele = UI.$(this);
|
9205 |
|
|
|
9206 |
|
|
if (!ele.data("timepicker")) {
|
9207 |
|
|
var obj = UI.timepicker(ele, UI.Utils.options(ele.attr("data-uk-timepicker")));
|
9208 |
|
|
|
9209 |
|
|
setTimeout(function(){
|
9210 |
|
|
obj.autocomplete.input.focus();
|
9211 |
|
|
}, 40);
|
9212 |
|
|
}
|
9213 |
|
|
});
|
9214 |
|
|
},
|
9215 |
|
|
|
9216 |
|
|
init: function() {
|
9217 |
|
|
|
9218 |
|
|
var $this = this, times = getTimeRange(this.options.start, this.options.end), container;
|
9219 |
|
|
|
9220 |
|
|
this.options.minLength = 0;
|
9221 |
|
|
this.options.template = '<ul class="uk-nav uk-nav-autocomplete uk-autocomplete-results">{{~items}}<li data-value="{{$item.value}}"><a class="needsclick">{{$item.value}}</a></li>{{/items}}</ul>';
|
9222 |
|
|
|
9223 |
|
|
this.options.source = function(release) {
|
9224 |
|
|
release(times[$this.options.format] || times['12h']);
|
9225 |
|
|
};
|
9226 |
|
|
|
9227 |
|
|
if (this.element.is('input')) {
|
9228 |
|
|
this.element.wrap('<div class="uk-autocomplete"></div>');
|
9229 |
|
|
container = this.element.parent();
|
9230 |
|
|
} else {
|
9231 |
|
|
container = this.element.addClass('uk-autocomplete');
|
9232 |
|
|
}
|
9233 |
|
|
|
9234 |
|
|
this.autocomplete = UI.autocomplete(container, this.options);
|
9235 |
|
|
this.autocomplete.dropdown.addClass('uk-dropdown-small uk-dropdown-scrollable');
|
9236 |
|
|
|
9237 |
|
|
this.autocomplete.on('show.uk.autocomplete', function() {
|
9238 |
|
|
|
9239 |
|
|
var selected = $this.autocomplete.dropdown.find('[data-value="'+$this.autocomplete.input.val()+'"]');
|
9240 |
|
|
|
9241 |
|
|
setTimeout(function(){
|
9242 |
|
|
$this.autocomplete.pick(selected, true);
|
9243 |
|
|
}, 10);
|
9244 |
|
|
});
|
9245 |
|
|
|
9246 |
|
|
this.autocomplete.input.on('focus', function(){
|
9247 |
|
|
|
9248 |
|
|
$this.autocomplete.value = Math.random();
|
9249 |
|
|
$this.autocomplete.triggercomplete();
|
9250 |
|
|
|
9251 |
|
|
}).on('blur', UI.Utils.debounce(function() {
|
9252 |
|
|
$this.checkTime();
|
9253 |
|
|
}, 100));
|
9254 |
|
|
|
9255 |
|
|
this.element.data("timepicker", this);
|
9256 |
|
|
},
|
9257 |
|
|
|
9258 |
|
|
checkTime: function() {
|
9259 |
|
|
|
9260 |
|
|
var arr, timeArray, meridian = 'AM', hour, minute, time = this.autocomplete.input.val();
|
9261 |
|
|
|
9262 |
|
|
if (this.options.format == '12h') {
|
9263 |
|
|
arr = time.split(' ');
|
9264 |
|
|
timeArray = arr[0].split(':');
|
9265 |
|
|
meridian = arr[1];
|
9266 |
|
|
} else {
|
9267 |
|
|
timeArray = time.split(':');
|
9268 |
|
|
}
|
9269 |
|
|
|
9270 |
|
|
hour = parseInt(timeArray[0], 10);
|
9271 |
|
|
minute = parseInt(timeArray[1], 10);
|
9272 |
|
|
|
9273 |
|
|
if (isNaN(hour)) hour = 0;
|
9274 |
|
|
if (isNaN(minute)) minute = 0;
|
9275 |
|
|
|
9276 |
|
|
if (this.options.format == '12h') {
|
9277 |
|
|
if (hour > 12) {
|
9278 |
|
|
hour = 12;
|
9279 |
|
|
} else if (hour < 0) {
|
9280 |
|
|
hour = 12;
|
9281 |
|
|
}
|
9282 |
|
|
|
9283 |
|
|
if (meridian === 'am' || meridian === 'a') {
|
9284 |
|
|
meridian = 'AM';
|
9285 |
|
|
} else if (meridian === 'pm' || meridian === 'p') {
|
9286 |
|
|
meridian = 'PM';
|
9287 |
|
|
}
|
9288 |
|
|
|
9289 |
|
|
if (meridian !== 'AM' && meridian !== 'PM') {
|
9290 |
|
|
meridian = 'AM';
|
9291 |
|
|
}
|
9292 |
|
|
|
9293 |
|
|
} else {
|
9294 |
|
|
|
9295 |
|
|
if (hour >= 24) {
|
9296 |
|
|
hour = 23;
|
9297 |
|
|
} else if (hour < 0) {
|
9298 |
|
|
hour = 0;
|
9299 |
|
|
}
|
9300 |
|
|
}
|
9301 |
|
|
|
9302 |
|
|
if (minute < 0) {
|
9303 |
|
|
minute = 0;
|
9304 |
|
|
} else if (minute >= 60) {
|
9305 |
|
|
minute = 0;
|
9306 |
|
|
}
|
9307 |
|
|
|
9308 |
|
|
this.autocomplete.input.val(this.formatTime(hour, minute, meridian)).trigger('change');
|
9309 |
|
|
},
|
9310 |
|
|
|
9311 |
|
|
formatTime: function(hour, minute, meridian) {
|
9312 |
|
|
hour = hour < 10 ? '0' + hour : hour;
|
9313 |
|
|
minute = minute < 10 ? '0' + minute : minute;
|
9314 |
|
|
return hour + ':' + minute + (this.options.format == '12h' ? ' ' + meridian : '');
|
9315 |
|
|
}
|
9316 |
|
|
});
|
9317 |
|
|
|
9318 |
|
|
// helper
|
9319 |
|
|
|
9320 |
|
|
function getTimeRange(start, end) {
|
9321 |
|
|
|
9322 |
|
|
start = start || 0;
|
9323 |
|
|
end = end || 24;
|
9324 |
|
|
|
9325 |
|
|
var times = {'12h':[], '24h':[]}, i, h;
|
9326 |
|
|
|
9327 |
|
|
for (i = start, h=''; i<end; i++) {
|
9328 |
|
|
|
9329 |
|
|
h = ''+i;
|
9330 |
|
|
|
9331 |
|
|
if (i<10) h = '0'+h;
|
9332 |
|
|
|
9333 |
|
|
times['24h'].push({value: (h+':00')});
|
9334 |
|
|
times['24h'].push({value: (h+':30')});
|
9335 |
|
|
|
9336 |
|
|
if (i === 0) {
|
9337 |
|
|
h = 12;
|
9338 |
|
|
times['12h'].push({value: (h+':00 AM')});
|
9339 |
|
|
times['12h'].push({value: (h+':30 AM')});
|
9340 |
|
|
}
|
9341 |
|
|
|
9342 |
|
|
if (i > 0 && i<13 && i!==12) {
|
9343 |
|
|
times['12h'].push({value: (h+':00 AM')});
|
9344 |
|
|
times['12h'].push({value: (h+':30 AM')});
|
9345 |
|
|
}
|
9346 |
|
|
|
9347 |
|
|
if (i >= 12) {
|
9348 |
|
|
|
9349 |
|
|
h = h-12;
|
9350 |
|
|
if (h === 0) h = 12;
|
9351 |
|
|
if (h < 10) h = '0'+String(h);
|
9352 |
|
|
|
9353 |
|
|
times['12h'].push({value: (h+':00 PM')});
|
9354 |
|
|
times['12h'].push({value: (h+':30 PM')});
|
9355 |
|
|
}
|
9356 |
|
|
}
|
9357 |
|
|
|
9358 |
|
|
return times;
|
9359 |
|
|
}
|
9360 |
|
|
|
9361 |
|
|
});
|
9362 |
|
|
|
9363 |
|
|
/*! UIkit 2.27.5 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
|
9364 |
|
|
(function(addon) {
|
9365 |
|
|
|
9366 |
|
|
var component;
|
9367 |
|
|
|
9368 |
|
|
if (window.UIkit2) {
|
9369 |
|
|
component = addon(UIkit2);
|
9370 |
|
|
}
|
9371 |
|
|
|
9372 |
|
|
if (typeof define == 'function' && define.amd) {
|
9373 |
|
|
define('uikit-upload', ['uikit'], function(){
|
9374 |
|
|
return component || addon(UIkit2);
|
9375 |
|
|
});
|
9376 |
|
|
}
|
9377 |
|
|
|
9378 |
|
|
})(function(UI){
|
9379 |
|
|
|
9380 |
|
|
"use strict";
|
9381 |
|
|
|
9382 |
|
|
UI.component('uploadSelect', {
|
9383 |
|
|
|
9384 |
|
|
init: function() {
|
9385 |
|
|
|
9386 |
|
|
var $this = this;
|
9387 |
|
|
|
9388 |
|
|
this.on('change', function() {
|
9389 |
|
|
xhrupload($this.element[0].files, $this.options);
|
9390 |
|
|
var twin = $this.element.clone(true).data('uploadSelect', $this);
|
9391 |
|
|
$this.element.replaceWith(twin);
|
9392 |
|
|
$this.element = twin;
|
9393 |
|
|
});
|
9394 |
|
|
}
|
9395 |
|
|
});
|
9396 |
|
|
|
9397 |
|
|
UI.component('uploadDrop', {
|
9398 |
|
|
|
9399 |
|
|
defaults: {
|
9400 |
|
|
'dragoverClass': 'uk-dragover'
|
9401 |
|
|
},
|
9402 |
|
|
|
9403 |
|
|
init: function() {
|
9404 |
|
|
|
9405 |
|
|
var $this = this, hasdragCls = false;
|
9406 |
|
|
|
9407 |
|
|
this.on('drop', function(e){
|
9408 |
|
|
|
9409 |
|
|
if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files) {
|
9410 |
|
|
|
9411 |
|
|
e.stopPropagation();
|
9412 |
|
|
e.preventDefault();
|
9413 |
|
|
|
9414 |
|
|
$this.element.removeClass($this.options.dragoverClass);
|
9415 |
|
|
$this.element.trigger('dropped.uk.upload', [e.originalEvent.dataTransfer.files]);
|
9416 |
|
|
|
9417 |
|
|
xhrupload(e.originalEvent.dataTransfer.files, $this.options);
|
9418 |
|
|
}
|
9419 |
|
|
|
9420 |
|
|
}).on('dragenter', function(e){
|
9421 |
|
|
e.stopPropagation();
|
9422 |
|
|
e.preventDefault();
|
9423 |
|
|
}).on('dragover', function(e){
|
9424 |
|
|
e.stopPropagation();
|
9425 |
|
|
e.preventDefault();
|
9426 |
|
|
|
9427 |
|
|
if (!hasdragCls) {
|
9428 |
|
|
$this.element.addClass($this.options.dragoverClass);
|
9429 |
|
|
hasdragCls = true;
|
9430 |
|
|
}
|
9431 |
|
|
}).on('dragleave', function(e){
|
9432 |
|
|
e.stopPropagation();
|
9433 |
|
|
e.preventDefault();
|
9434 |
|
|
$this.element.removeClass($this.options.dragoverClass);
|
9435 |
|
|
hasdragCls = false;
|
9436 |
|
|
});
|
9437 |
|
|
}
|
9438 |
|
|
});
|
9439 |
|
|
|
9440 |
|
|
|
9441 |
|
|
UI.support.ajaxupload = (function() {
|
9442 |
|
|
|
9443 |
|
|
function supportFileAPI() {
|
9444 |
|
|
var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi;
|
9445 |
|
|
}
|
9446 |
|
|
|
9447 |
|
|
function supportAjaxUploadProgressEvents() {
|
9448 |
|
|
var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
|
9449 |
|
|
}
|
9450 |
|
|
|
9451 |
|
|
function supportFormData() {
|
9452 |
|
|
return !! window.FormData;
|
9453 |
|
|
}
|
9454 |
|
|
|
9455 |
|
|
return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData();
|
9456 |
|
|
})();
|
9457 |
|
|
|
9458 |
|
|
|
9459 |
|
|
function xhrupload(files, settings) {
|
9460 |
|
|
|
9461 |
|
|
if (!UI.support.ajaxupload){
|
9462 |
|
|
return this;
|
9463 |
|
|
}
|
9464 |
|
|
|
9465 |
|
|
settings = UI.$.extend({}, xhrupload.defaults, settings);
|
9466 |
|
|
|
9467 |
|
|
if (!files.length){
|
9468 |
|
|
return;
|
9469 |
|
|
}
|
9470 |
|
|
|
9471 |
|
|
if (settings.allow !== '*.*') {
|
9472 |
|
|
|
9473 |
|
|
for(var i=0,file;file=files[i];i++) {
|
9474 |
|
|
|
9475 |
|
|
if(!matchName(settings.allow, file.name)) {
|
9476 |
|
|
|
9477 |
|
|
if(typeof(settings.notallowed) == 'string') {
|
9478 |
|
|
alert(settings.notallowed);
|
9479 |
|
|
} else {
|
9480 |
|
|
settings.notallowed(file, settings);
|
9481 |
|
|
}
|
9482 |
|
|
return;
|
9483 |
|
|
}
|
9484 |
|
|
}
|
9485 |
|
|
}
|
9486 |
|
|
|
9487 |
|
|
var complete = settings.complete;
|
9488 |
|
|
|
9489 |
|
|
if (settings.single){
|
9490 |
|
|
|
9491 |
|
|
var count = files.length,
|
9492 |
|
|
uploaded = 0,
|
9493 |
|
|
allow = true;
|
9494 |
|
|
|
9495 |
|
|
settings.beforeAll(files);
|
9496 |
|
|
|
9497 |
|
|
settings.complete = function(response, xhr){
|
9498 |
|
|
|
9499 |
|
|
uploaded = uploaded + 1;
|
9500 |
|
|
|
9501 |
|
|
complete(response, xhr);
|
9502 |
|
|
|
9503 |
|
|
if (settings.filelimit && uploaded >= settings.filelimit){
|
9504 |
|
|
allow = false;
|
9505 |
|
|
}
|
9506 |
|
|
|
9507 |
|
|
if (allow && uploaded<count){
|
9508 |
|
|
upload([files[uploaded]], settings);
|
9509 |
|
|
} else {
|
9510 |
|
|
settings.allcomplete(response, xhr);
|
9511 |
|
|
}
|
9512 |
|
|
};
|
9513 |
|
|
|
9514 |
|
|
upload([files[0]], settings);
|
9515 |
|
|
|
9516 |
|
|
} else {
|
9517 |
|
|
|
9518 |
|
|
settings.complete = function(response, xhr){
|
9519 |
|
|
complete(response, xhr);
|
9520 |
|
|
settings.allcomplete(response, xhr);
|
9521 |
|
|
};
|
9522 |
|
|
|
9523 |
|
|
upload(files, settings);
|
9524 |
|
|
}
|
9525 |
|
|
|
9526 |
|
|
function upload(files, settings){
|
9527 |
|
|
|
9528 |
|
|
// upload all at once
|
9529 |
|
|
var formData = new FormData(), xhr = new XMLHttpRequest();
|
9530 |
|
|
|
9531 |
|
|
if (settings.before(settings, files)===false) return;
|
9532 |
|
|
|
9533 |
|
|
for (var i = 0, f; f = files[i]; i++) { formData.append(settings.param, f); }
|
9534 |
|
|
for (var p in settings.params) { formData.append(p, settings.params[p]); }
|
9535 |
|
|
|
9536 |
|
|
// Add any event handlers here...
|
9537 |
|
|
xhr.upload.addEventListener('progress', function(e){
|
9538 |
|
|
var percent = (e.loaded / e.total)*100;
|
9539 |
|
|
settings.progress(percent, e);
|
9540 |
|
|
}, false);
|
9541 |
|
|
|
9542 |
|
|
xhr.addEventListener('loadstart', function(e){ settings.loadstart(e); }, false);
|
9543 |
|
|
xhr.addEventListener('load', function(e){ settings.load(e); }, false);
|
9544 |
|
|
xhr.addEventListener('loadend', function(e){ settings.loadend(e); }, false);
|
9545 |
|
|
xhr.addEventListener('error', function(e){ settings.error(e); }, false);
|
9546 |
|
|
xhr.addEventListener('abort', function(e){ settings.abort(e); }, false);
|
9547 |
|
|
|
9548 |
|
|
xhr.open(settings.method, settings.action, true);
|
9549 |
|
|
|
9550 |
|
|
if (settings.type=='json') {
|
9551 |
|
|
xhr.setRequestHeader('Accept', 'application/json');
|
9552 |
|
|
}
|
9553 |
|
|
|
9554 |
|
|
for (var h in settings.headers) {
|
9555 |
|
|
xhr.setRequestHeader(h, settings.headers[h]);
|
9556 |
|
|
}
|
9557 |
|
|
|
9558 |
|
|
xhr.onreadystatechange = function() {
|
9559 |
|
|
|
9560 |
|
|
settings.readystatechange(xhr);
|
9561 |
|
|
|
9562 |
|
|
if (xhr.readyState==4){
|
9563 |
|
|
|
9564 |
|
|
var response = xhr.responseText;
|
9565 |
|
|
|
9566 |
|
|
if (settings.type=='json') {
|
9567 |
|
|
try {
|
9568 |
|
|
response = UI.$.parseJSON(response);
|
9569 |
|
|
} catch(e) {
|
9570 |
|
|
response = false;
|
9571 |
|
|
}
|
9572 |
|
|
}
|
9573 |
|
|
|
9574 |
|
|
settings.complete(response, xhr);
|
9575 |
|
|
}
|
9576 |
|
|
};
|
9577 |
|
|
settings.beforeSend(xhr);
|
9578 |
|
|
xhr.send(formData);
|
9579 |
|
|
}
|
9580 |
|
|
}
|
9581 |
|
|
|
9582 |
|
|
xhrupload.defaults = {
|
9583 |
|
|
action: '',
|
9584 |
|
|
single: true,
|
9585 |
|
|
method: 'POST',
|
9586 |
|
|
param : 'files[]',
|
9587 |
|
|
params: {},
|
9588 |
|
|
allow : '*.*',
|
9589 |
|
|
type : 'text',
|
9590 |
|
|
filelimit: false,
|
9591 |
|
|
headers: {},
|
9592 |
|
|
|
9593 |
|
|
// events
|
9594 |
|
|
before : function(o){},
|
9595 |
|
|
beforeSend : function(xhr){},
|
9596 |
|
|
beforeAll : function(){},
|
9597 |
|
|
loadstart : function(){},
|
9598 |
|
|
load : function(){},
|
9599 |
|
|
loadend : function(){},
|
9600 |
|
|
error : function(){},
|
9601 |
|
|
abort : function(){},
|
9602 |
|
|
progress : function(){},
|
9603 |
|
|
complete : function(){},
|
9604 |
|
|
allcomplete : function(){},
|
9605 |
|
|
readystatechange: function(){},
|
9606 |
|
|
notallowed : function(file, settings){ alert('Only the following file types are allowed: '+settings.allow); }
|
9607 |
|
|
};
|
9608 |
|
|
|
9609 |
|
|
function matchName(pattern, path) {
|
9610 |
|
|
|
9611 |
|
|
var parsedPattern = '^' + pattern.replace(/\//g, '\\/').
|
9612 |
|
|
replace(/\*\*/g, '(\\/[^\\/]+)*').
|
9613 |
|
|
replace(/\*/g, '[^\\/]+').
|
9614 |
|
|
replace(/((?!\\))\?/g, '$1.') + '$';
|
9615 |
|
|
|
9616 |
|
|
parsedPattern = '^' + parsedPattern + '$';
|
9617 |
|
|
|
9618 |
|
|
return (path.match(new RegExp(parsedPattern, 'i')) !== null);
|
9619 |
|
|
}
|
9620 |
|
|
|
9621 |
|
|
UI.Utils.xhrupload = xhrupload;
|
9622 |
|
|
|
9623 |
|
|
return xhrupload;
|
9624 |
|
|
});
|
9625 |
|
|
|
9626 |
|
|
// http://getuikit.com/docs/documentation_javascript.html#js-override
|
9627 |
|
|
|
9628 |
|
|
if (typeof UIkit !== 'undefined') {
|
9629 |
|
|
|
9630 |
|
|
var $body = $('body');
|
9631 |
|
|
|
9632 |
|
|
UIkit.on('beforeready.uk.dom', function () {
|
9633 |
|
|
|
9634 |
|
|
// accrodion
|
9635 |
|
|
if (typeof UIkit.components.accordion !== "undefined") { // check if accordion component is defined
|
9636 |
|
|
$.extend(UIkit.components.accordion.prototype.defaults, {
|
9637 |
|
|
easing: $.bez([ 0.35,0,0.25,1 ]),
|
9638 |
|
|
duration: 200
|
9639 |
|
|
});
|
9640 |
|
|
}
|
9641 |
|
|
|
9642 |
|
|
// dropdown
|
9643 |
|
|
if (typeof UIkit.components.dropdown.prototype !== "undefined") { // check if dropdown component is defined
|
9644 |
|
|
|
9645 |
|
|
$.extend(UIkit.components.dropdown.prototype.defaults, {
|
9646 |
|
|
remaintime: 150,
|
9647 |
|
|
delay: 50
|
9648 |
|
|
});
|
9649 |
|
|
|
9650 |
|
|
(function() {
|
9651 |
|
|
var old_show_function = UIkit.components.dropdown.prototype.show;
|
9652 |
|
|
|
9653 |
|
|
UIkit.components.dropdown.prototype.show = function() {
|
9654 |
|
|
|
9655 |
|
|
this.dropdown
|
9656 |
|
|
.css({
|
9657 |
|
|
'min-width': this.dropdown.outerWidth()
|
9658 |
|
|
})
|
9659 |
|
|
.addClass('uk-dropdown-active uk-dropdown-shown');
|
9660 |
|
|
|
9661 |
|
|
return old_show_function.apply(this, arguments);
|
9662 |
|
|
}
|
9663 |
|
|
})();
|
9664 |
|
|
|
9665 |
|
|
(function() {
|
9666 |
|
|
var old_hide_function = UIkit.components.dropdown.prototype.hide;
|
9667 |
|
|
|
9668 |
|
|
UIkit.components.dropdown.prototype.hide = function() {
|
9669 |
|
|
|
9670 |
|
|
var this_dropdown = this.dropdown;
|
9671 |
|
|
|
9672 |
|
|
this_dropdown.removeClass('uk-dropdown-shown');
|
9673 |
|
|
|
9674 |
|
|
var dropdown_timeout = setTimeout(function() {
|
9675 |
|
|
this_dropdown.removeClass('uk-dropdown-active')
|
9676 |
|
|
},280);
|
9677 |
|
|
|
9678 |
|
|
return old_hide_function.apply(this, arguments);
|
9679 |
|
|
}
|
9680 |
|
|
})();
|
9681 |
|
|
|
9682 |
|
|
}
|
9683 |
|
|
|
9684 |
|
|
// modal
|
9685 |
|
|
if (typeof UIkit.components.modal !== "undefined") { // check if modal component is defined
|
9686 |
|
|
$.extend(UIkit.components.modal.prototype.defaults, {
|
9687 |
|
|
center: true
|
9688 |
|
|
});
|
9689 |
|
|
|
9690 |
|
|
UIkit.modal.dialog.template = '<div class="uk-modal uk-modal-dialog-replace"><div class="uk-modal-dialog" style="min-height:0;"></div></div>';
|
9691 |
|
|
$body
|
9692 |
|
|
.on('show.uk.modal', '.uk-modal-dialog-replace', function () {
|
9693 |
|
|
// customize uikit dialog
|
9694 |
|
|
setTimeout(function () {
|
9695 |
|
|
var dialogReplace = $('.uk-modal-dialog-replace');
|
9696 |
|
|
if (dialogReplace.find('.uk-button-primary').length) {
|
9697 |
|
|
var actionBtn = dialogReplace.find('.uk-button-primary').toggleClass('uk-button-primary md-btn-flat-primary');
|
9698 |
|
|
if (actionBtn.next('button')) {
|
9699 |
|
|
actionBtn.next('button').after(actionBtn);
|
9700 |
|
|
}
|
9701 |
|
|
}
|
9702 |
|
|
if (dialogReplace.find('.uk-button').length) {
|
9703 |
|
|
dialogReplace.find('.uk-button').toggleClass('uk-button md-btn md-btn-flat');
|
9704 |
|
|
}
|
9705 |
|
|
if (dialogReplace.find('.uk-margin-small-top').length) {
|
9706 |
|
|
dialogReplace.find('.uk-margin-small-top').toggleClass('uk-margin-small-top uk-margin-top');
|
9707 |
|
|
}
|
9708 |
|
|
if (dialogReplace.find('input.uk-width-1-1').length) {
|
9709 |
|
|
dialogReplace.find('input.uk-width-1-1').toggleClass('uk-width-1-1 md-input');
|
9710 |
|
|
// reinitialize md inputs
|
9711 |
|
|
altair_md.inputs();
|
9712 |
|
|
}
|
9713 |
|
|
if (dialogReplace.find('.uk-form').length) {
|
9714 |
|
|
dialogReplace.find('.uk-form').removeClass('uk-form');
|
9715 |
|
|
}
|
9716 |
|
|
}, 50)
|
9717 |
|
|
});
|
9718 |
|
|
}
|
9719 |
|
|
|
9720 |
|
|
// tabs
|
9721 |
|
|
if (typeof UIkit.components.tab !== "undefined") { // check if tab component is defined
|
9722 |
|
|
$.extend(UIkit.components.tab.prototype.defaults, {
|
9723 |
|
|
swiping: false
|
9724 |
|
|
});
|
9725 |
|
|
}
|
9726 |
|
|
|
9727 |
|
|
// tooltip
|
9728 |
|
|
if (typeof UIkit.components.tooltip !== "undefined") { // check if tooltip component is defined
|
9729 |
|
|
$.extend(UIkit.components.tooltip.prototype.defaults, {
|
9730 |
|
|
animation: UIkit.support.touch ? false : 280,
|
9731 |
|
|
offset: 8
|
9732 |
|
|
});
|
9733 |
|
|
}
|
9734 |
|
|
|
9735 |
|
|
|
9736 |
|
|
// sortable
|
9737 |
|
|
if (typeof UIkit.components.sortable !== "undefined") { // check if sortable component is defined
|
9738 |
|
|
if(Modernizr.touch) {
|
9739 |
|
|
$('[data-uk-sortable]').children().addClass('needsclick');
|
9740 |
|
|
}
|
9741 |
|
|
}
|
9742 |
|
|
|
9743 |
|
|
});
|
9744 |
|
|
}
|