ServState 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2078 +0,0 @@
1
- /*! UIkit 1.2.0 | http://www.getuikit.com | (c) 2013 YOOtheme | MIT License */
2
-
3
- (function($, doc) {
4
-
5
- "use strict";
6
-
7
- var UI = $.UIkit || {};
8
-
9
- if (UI.fn) {
10
- return;
11
- }
12
-
13
- UI.fn = function(command, options) {
14
-
15
- var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2];
16
-
17
- if (!UI[component]) {
18
- $.error("UIkit component [" + component + "] does not exist.");
19
- return this;
20
- }
21
-
22
- return this.each(function() {
23
- var $this = $(this), data = $this.data(component);
24
- if (!data) $this.data(component, (data = new UI[component](this, method ? undefined : options)));
25
- if (method) data[method].apply(data, Array.prototype.slice.call(args, 1));
26
- });
27
- };
28
-
29
- UI.version = '1.2.0';
30
-
31
- UI.support = {};
32
- UI.support.transition = (function() {
33
-
34
- var transitionEnd = (function() {
35
-
36
- var element = doc.body || doc.documentElement,
37
- transEndEventNames = {
38
- WebkitTransition: 'webkitTransitionEnd',
39
- MozTransition: 'transitionend',
40
- OTransition: 'oTransitionEnd otransitionend',
41
- transition: 'transitionend'
42
- }, name;
43
-
44
- for (name in transEndEventNames) {
45
- if (element.style[name] !== undefined) {
46
- return transEndEventNames[name];
47
- }
48
- }
49
-
50
- }());
51
-
52
- return transitionEnd && { end: transitionEnd };
53
-
54
- })();
55
-
56
- UI.support.touch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);
57
- UI.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver || null);
58
-
59
-
60
- UI.Utils = {};
61
-
62
- UI.Utils.debounce = function(func, wait, immediate) {
63
- var timeout;
64
- return function() {
65
- var context = this, args = arguments;
66
- var later = function() {
67
- timeout = null;
68
- if (!immediate) func.apply(context, args);
69
- };
70
- var callNow = immediate && !timeout;
71
- clearTimeout(timeout);
72
- timeout = setTimeout(later, wait);
73
- if (callNow) func.apply(context, args);
74
- };
75
- };
76
-
77
- UI.Utils.options = function(string) {
78
-
79
- if ($.isPlainObject(string)) return string;
80
-
81
- var start = (string ? string.indexOf("{") : -1), options = {};
82
-
83
- if (start != -1) {
84
- try {
85
- options = (new Function("", "var json = " + string.substr(start) + "; return JSON.parse(JSON.stringify(json));"))();
86
- } catch (e) {}
87
- }
88
-
89
- return options;
90
- };
91
-
92
- $.UIkit = UI;
93
- $.fn.uk = UI.fn;
94
-
95
- $.UIkit.langdirection = $("html").attr("dir") == "rtl" ? "right" : "left";
96
-
97
- $(function(){
98
-
99
- $(doc).trigger("uk-domready");
100
-
101
- // Check for dom modifications
102
- if(!UI.support.mutationobserver) return;
103
-
104
- var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) {
105
- $(doc).trigger("uk-domready");
106
- }, 300));
107
-
108
- // pass in the target node, as well as the observer options
109
- observer.observe(document.body, { childList: true, subtree: true });
110
- });
111
-
112
-
113
- })(jQuery, document);
114
-
115
- ;(function($){
116
- var touch = {},
117
- touchTimeout, tapTimeout, swipeTimeout,
118
- longTapDelay = 750, longTapTimeout;
119
-
120
- function parentIfText(node) {
121
- return 'tagName' in node ? node : node.parentNode;
122
- }
123
-
124
- function swipeDirection(x1, x2, y1, y2) {
125
- var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2);
126
- return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down');
127
- }
128
-
129
- function longTap() {
130
- longTapTimeout = null;
131
- if (touch.last) {
132
- touch.el.trigger('longTap');
133
- touch = {};
134
- }
135
- }
136
-
137
- function cancelLongTap() {
138
- if (longTapTimeout) clearTimeout(longTapTimeout);
139
- longTapTimeout = null;
140
- }
141
-
142
- function cancelAll() {
143
- if (touchTimeout) clearTimeout(touchTimeout);
144
- if (tapTimeout) clearTimeout(tapTimeout);
145
- if (swipeTimeout) clearTimeout(swipeTimeout);
146
- if (longTapTimeout) clearTimeout(longTapTimeout);
147
- touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null;
148
- touch = {};
149
- }
150
-
151
- $(document).ready(function(){
152
- var now, delta;
153
-
154
- $(document.body)
155
- .bind('touchstart', function(e){
156
- now = Date.now();
157
- delta = now - (touch.last || now);
158
- touch.el = $(parentIfText(e.originalEvent.touches[0].target));
159
- if(touchTimeout) clearTimeout(touchTimeout);
160
- touch.x1 = e.originalEvent.touches[0].pageX;
161
- touch.y1 = e.originalEvent.touches[0].pageY;
162
- if (delta > 0 && delta <= 250) touch.isDoubleTap = true;
163
- touch.last = now;
164
- longTapTimeout = setTimeout(longTap, longTapDelay);
165
- })
166
- .bind('touchmove', function(e){
167
- cancelLongTap();
168
- touch.x2 = e.originalEvent.touches[0].pageX;
169
- touch.y2 = e.originalEvent.touches[0].pageY;
170
- })
171
- .bind('touchend', function(e){
172
- cancelLongTap();
173
-
174
- // swipe
175
- if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
176
-
177
- swipeTimeout = setTimeout(function() {
178
- touch.el.trigger('swipe');
179
- touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)));
180
- touch = {};
181
- }, 0);
182
-
183
- // normal tap
184
- else if ('last' in touch)
185
-
186
- // delay by one tick so we can cancel the 'tap' event if 'scroll' fires
187
- // ('tap' fires before 'scroll')
188
- tapTimeout = setTimeout(function() {
189
-
190
- // trigger universal 'tap' with the option to cancelTouch()
191
- // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
192
- var event = $.Event('tap');
193
- event.cancelTouch = cancelAll;
194
- touch.el.trigger(event);
195
-
196
- // trigger double tap immediately
197
- if (touch.isDoubleTap) {
198
- touch.el.trigger('doubleTap');
199
- touch = {};
200
- }
201
-
202
- // trigger single tap after 250ms of inactivity
203
- else {
204
- touchTimeout = setTimeout(function(){
205
- touchTimeout = null;
206
- touch.el.trigger('singleTap');
207
- touch = {};
208
- }, 250);
209
- }
210
-
211
- }, 0);
212
-
213
- })
214
- .bind('touchcancel', cancelAll);
215
-
216
- $(window).bind('scroll', cancelAll);
217
- });
218
-
219
- ['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){
220
- $.fn[m] = function(callback){ return this.bind(m, callback); };
221
- });
222
- })(jQuery);
223
-
224
- (function($, UI) {
225
-
226
- "use strict";
227
-
228
- var Alert = function(element, options) {
229
-
230
- var $this = this;
231
-
232
- this.options = $.extend({}, this.options, options);
233
- this.element = $(element);
234
-
235
- if(this.element.data("alert")) return;
236
-
237
- this.element.on("click", this.options.trigger, function(e) {
238
- e.preventDefault();
239
- $this.close();
240
- });
241
-
242
- this.element.data("alert", this);
243
- };
244
-
245
- $.extend(Alert.prototype, {
246
-
247
- options: {
248
- "fade": true,
249
- "duration": 200,
250
- "trigger": ".uk-alert-close"
251
- },
252
-
253
- close: function() {
254
-
255
- var element = this.element.trigger("close");
256
-
257
- if (this.options.fade) {
258
- element.css("overflow", "hidden").css("max-height", element.height()).animate({
259
- "height": 0,
260
- "opacity": 0,
261
- "padding-top": 0,
262
- "padding-bottom": 0,
263
- "margin-top": 0,
264
- "margin-bottom": 0
265
- }, this.options.duration, removeElement);
266
- } else {
267
- removeElement();
268
- }
269
-
270
- function removeElement() {
271
- element.trigger("closed").remove();
272
- }
273
- }
274
-
275
- });
276
-
277
- UI["alert"] = Alert;
278
-
279
- // init code
280
- $(document).on("click.alert.uikit", "[data-uk-alert]", function(e) {
281
-
282
- var ele = $(this);
283
- if (!ele.data("alert")) {
284
-
285
- var alert = new Alert(ele, UI.Utils.options(ele.data("uk-alert")));
286
-
287
- if ($(e.target).is(ele.data("alert").options.trigger)) {
288
- e.preventDefault();
289
- alert.close();
290
- }
291
- }
292
- });
293
-
294
- })(jQuery, jQuery.UIkit);
295
-
296
- (function($, UI) {
297
-
298
- "use strict";
299
-
300
- var ButtonRadio = function(element, options) {
301
-
302
- var $this = this, $element = $(element);
303
-
304
- if($element.data("buttonRadio")) return;
305
-
306
- this.options = $.extend({}, this.options, options);
307
- this.element = $element.on("click", this.options.target, function(e) {
308
- e.preventDefault();
309
- $element.find($this.options.target).not(this).removeClass("uk-active").blur();
310
- $element.trigger("change", [$(this).addClass("uk-active")]);
311
- });
312
-
313
- this.element.data("buttonRadio", this);
314
- };
315
-
316
- $.extend(ButtonRadio.prototype, {
317
-
318
- options: {
319
- "target": ".uk-button"
320
- },
321
-
322
- getSelected: function() {
323
- this.element.find(".uk-active");
324
- }
325
-
326
- });
327
-
328
- var ButtonCheckbox = function(element, options) {
329
-
330
- var $element = $(element);
331
-
332
- if($element.data("buttonCheckbox")) return;
333
-
334
- this.options = $.extend({}, this.options, options);
335
- this.element = $element.on("click", this.options.target, function(e) {
336
- e.preventDefault();
337
- $element.trigger("change", [$(this).toggleClass("uk-active").blur()]);
338
- });
339
-
340
- this.element.data("buttonCheckbox", this);
341
- };
342
-
343
- $.extend(ButtonCheckbox.prototype, {
344
-
345
- options: {
346
- "target": ".uk-button"
347
- },
348
-
349
- getSelected: function() {
350
- this.element.find(".uk-active");
351
- }
352
-
353
- });
354
-
355
- var Button = function(element, options) {
356
-
357
- var $this = this, $element = $(element);
358
-
359
- if($element.data("button")) return;
360
-
361
- this.options = $.extend({}, this.options, options);
362
- this.element = $element.on("click", function(e) {
363
- e.preventDefault();
364
- $this.toggle();
365
- $this.element.blur();
366
- });
367
-
368
- this.element.data("button", this);
369
- };
370
-
371
- $.extend(Button.prototype, {
372
-
373
- options: {},
374
-
375
- toggle: function() {
376
- this.element.toggleClass("uk-active");
377
- }
378
-
379
- });
380
-
381
- UI["button"] = Button;
382
- UI["buttonCheckbox"] = ButtonCheckbox;
383
- UI["buttonRadio"] = ButtonRadio;
384
-
385
- // init code
386
- $(document).on("click.buttonradio.uikit", "[data-uk-button-radio]", function(e) {
387
- var ele = $(this);
388
-
389
- if (!ele.data("buttonRadio")) {
390
- var obj = new ButtonRadio(ele, UI.Utils.options(ele.attr("data-uk-button-radio")));
391
-
392
- if ($(e.target).is(obj.options.target)) {
393
- $(e.target).trigger("click");
394
- }
395
- }
396
- });
397
-
398
- $(document).on("click.buttoncheckbox.uikit", "[data-uk-button-checkbox]", function(e) {
399
- var ele = $(this);
400
-
401
- if (!ele.data("buttonCheckbox")) {
402
- var obj = new ButtonCheckbox(ele, UI.Utils.options(ele.attr("data-uk-button-checkbox")));
403
-
404
- if ($(e.target).is(obj.options.target)) {
405
- $(e.target).trigger("click");
406
- }
407
- }
408
- });
409
-
410
- $(document).on("click.button.uikit", "[data-uk-button]", function(e) {
411
- var ele = $(this);
412
-
413
- if (!ele.data("button")) {
414
-
415
- var obj = new Button(ele, ele.attr("data-uk-button"));
416
- ele.trigger("click");
417
- }
418
- });
419
-
420
- })(jQuery, jQuery.UIkit);
421
-
422
- (function($, UI) {
423
-
424
- "use strict";
425
-
426
- var active = false,
427
- Dropdown = function(element, options) {
428
-
429
- var $this = this, $element = $(element);
430
-
431
- if($element.data("dropdown")) return;
432
-
433
- this.options = $.extend({}, this.options, options);
434
- this.element = $element;
435
- this.dropdown = this.element.find(".uk-dropdown");
436
-
437
- this.centered = this.dropdown.hasClass("uk-dropdown-center");
438
- this.justified = this.options.justify ? $(this.options.justify) : false;
439
-
440
- this.boundary = $(this.options.boundary);
441
-
442
- if(!this.boundary.length) {
443
- this.boundary = $(window);
444
- }
445
-
446
- if (this.options.mode == "click") {
447
-
448
- this.element.on("click", function(e) {
449
-
450
- if (!$(e.target).parents(".uk-dropdown").length) {
451
- e.preventDefault();
452
- }
453
-
454
- if (active && active[0] != $this.element[0]) {
455
- active.removeClass("uk-open");
456
- }
457
-
458
- if (!$this.element.hasClass("uk-open")) {
459
-
460
- $this.checkDimensions();
461
-
462
- $this.element.addClass("uk-open");
463
-
464
- active = $this.element;
465
-
466
- $(document).off("click.outer.dropdown");
467
-
468
- setTimeout(function() {
469
- $(document).on("click.outer.dropdown", function(e) {
470
-
471
- if (active && active[0] == $this.element[0] && ($(e.target).is("a") || !$this.element.find(".uk-dropdown").find(e.target).length)) {
472
- active.removeClass("uk-open");
473
-
474
- $(document).off("click.outer.dropdown");
475
- }
476
- });
477
- }, 10);
478
-
479
- } else {
480
-
481
- if ($(e.target).is("a") || !$this.element.find(".uk-dropdown").find(e.target).length) {
482
- $this.element.removeClass("uk-open");
483
- active = false;
484
- }
485
- }
486
- });
487
-
488
- } else {
489
-
490
- this.element.on("mouseenter", function(e) {
491
-
492
- if ($this.remainIdle) {
493
- clearTimeout($this.remainIdle);
494
- }
495
-
496
- if (active && active[0] != $this.element[0]) {
497
- active.removeClass("uk-open");
498
- }
499
-
500
- $this.checkDimensions();
501
-
502
- $this.element.addClass("uk-open");
503
- active = $this.element;
504
-
505
- }).on("mouseleave", function() {
506
-
507
- $this.remainIdle = setTimeout(function() {
508
-
509
- $this.element.removeClass("uk-open");
510
- $this.remainIdle = false;
511
-
512
- if (active && active[0] == $this.element[0]) active = false;
513
-
514
- }, $this.options.remaintime);
515
- });
516
- }
517
-
518
- this.element.data("dropdown", this);
519
-
520
- };
521
-
522
- $.extend(Dropdown.prototype, {
523
-
524
- remainIdle: false,
525
-
526
- options: {
527
- "mode": "hover",
528
- "remaintime": 800,
529
- "justify": false,
530
- "boundary": $(window)
531
- },
532
-
533
- checkDimensions: function() {
534
-
535
- if(!this.dropdown.length) return;
536
-
537
- var dropdown = this.dropdown.css("margin-" + $.UIkit.langdirection, "").css("min-width", ""),
538
- offset = dropdown.show().offset(),
539
- width = dropdown.outerWidth(),
540
- boundarywidth = this.boundary.width(),
541
- boundaryoffset = this.boundary.offset() ? this.boundary.offset().left:0;
542
-
543
- // centered dropdown
544
- if (this.centered) {
545
- dropdown.css("margin-" + $.UIkit.langdirection, (parseFloat(width) / 2 - dropdown.parent().width() / 2) * -1);
546
- offset = dropdown.offset();
547
-
548
- // reset dropdown
549
- if ((width + offset.left) > boundarywidth || offset.left < 0) {
550
- dropdown.css("margin-" + $.UIkit.langdirection, "");
551
- offset = dropdown.offset();
552
- }
553
- }
554
-
555
- // justify dropdown
556
- if (this.justified && this.justified.length) {
557
-
558
- var jwidth = this.justified.outerWidth();
559
-
560
- dropdown.css("min-width", jwidth);
561
-
562
- if ($.UIkit.langdirection == 'right') {
563
-
564
- var right1 = boundarywidth - (this.justified.offset().left + jwidth),
565
- right2 = boundarywidth - (dropdown.offset().left + dropdown.outerWidth());
566
-
567
- dropdown.css("margin-right", right1 - right2);
568
-
569
- } else {
570
- dropdown.css("margin-left", this.justified.offset().left - offset.left);
571
- }
572
-
573
- offset = dropdown.offset();
574
-
575
- }
576
-
577
- if ((width + (offset.left-boundaryoffset)) > boundarywidth) {
578
- dropdown.addClass("uk-dropdown-flip");
579
- offset = dropdown.offset();
580
- }
581
-
582
- if (offset.left < 0) {
583
- dropdown.addClass("uk-dropdown-stack");
584
- }
585
-
586
- dropdown.css("display", "");
587
- }
588
-
589
- });
590
-
591
- UI["dropdown"] = Dropdown;
592
-
593
-
594
- var triggerevent = UI.support.touch ? "touchstart":"mouseenter";
595
-
596
- // init code
597
- $(document).on(triggerevent+".dropdown.uikit", "[data-uk-dropdown]", function(e) {
598
- var ele = $(this);
599
-
600
- if (!ele.data("dropdown")) {
601
-
602
- var dropdown = new Dropdown(ele, UI.Utils.options(ele.data("uk-dropdown")));
603
-
604
- if(triggerevent == "mouseenter" && dropdown.options.mode == "hover") {
605
- ele.trigger("mouseenter");
606
- }
607
- }
608
- });
609
-
610
- })(jQuery, jQuery.UIkit);
611
-
612
- (function($, UI) {
613
-
614
- "use strict";
615
-
616
- var win = $(window),
617
- event = 'resize orientationchange',
618
-
619
- GridMatch = function(element, options) {
620
-
621
- var $this = this, $element = $(element);
622
-
623
- if($element.data("gridMatchHeight")) return;
624
-
625
- this.options = $.extend({}, this.options, options);
626
-
627
- this.element = $element;
628
- this.columns = this.element.children();
629
- this.elements = this.options.target ? this.element.find(this.options.target) : this.columns;
630
-
631
- if (!this.columns.length) return;
632
-
633
- win.on(event, (function() {
634
- var fn = function() {
635
- $this.match();
636
- };
637
-
638
- $(function() {
639
- fn();
640
- win.on("load", fn);
641
- });
642
-
643
- return UI.Utils.debounce(fn, 150);
644
- })());
645
-
646
- $(document).on("uk-domready", function(e) {
647
- $this.columns = $this.element.children();
648
- $this.elements = $this.options.target ? $this.element.find($this.options.target) : $this.columns;
649
- $this.match();
650
- });
651
-
652
- this.element.data("gridMatch", this);
653
- };
654
-
655
- $.extend(GridMatch.prototype, {
656
-
657
- options: {
658
- "target": false
659
- },
660
-
661
- match: function() {
662
-
663
- this.revert();
664
-
665
- var firstvisible = this.columns.filter(":visible:first");
666
-
667
- if (!firstvisible.length) return;
668
-
669
- var stacked = Math.ceil(100 * parseFloat(firstvisible.css('width')) / parseFloat(firstvisible.parent().css('width'))) >= 100 ? true : false,
670
- max = 0,
671
- $this = this;
672
-
673
- if (stacked) return;
674
-
675
- this.elements.each(function() {
676
- max = Math.max(max, $(this).outerHeight());
677
- }).each(function(i) {
678
-
679
- var element = $(this),
680
- boxheight = element.css("box-sizing") == "border-box" ? "outerHeight" : "height",
681
- box = $this.columns.eq(i),
682
- height = (element.height() + (max - box[boxheight]()));
683
-
684
- element.css('min-height', height + 'px');
685
- });
686
-
687
- return this;
688
- },
689
-
690
- revert: function() {
691
- this.elements.css('min-height', '');
692
- return this;
693
- }
694
-
695
- });
696
-
697
- var GridMargin = function(element) {
698
-
699
- var $this = this, $element = $(element);
700
-
701
- if($element.data("gridMargin")) return;
702
-
703
- this.element = $element;
704
- this.columns = this.element.children();
705
-
706
- if (!this.columns.length) return;
707
-
708
- win.on(event, (function() {
709
- var fn = function() {
710
- $this.process();
711
- };
712
-
713
- $(function() {
714
- fn();
715
- win.on("load", fn);
716
- });
717
-
718
- return UI.Utils.debounce(fn, 150);
719
- })());
720
-
721
- $(document).on("uk-domready", function(e) {
722
- $this.columns = $this.element.children();
723
- $this.process();
724
- });
725
-
726
- this.element.data("gridMargin", this);
727
- };
728
-
729
- $.extend(GridMargin.prototype, {
730
-
731
- process: function() {
732
-
733
- this.revert();
734
-
735
- var skip = false,
736
- firstvisible = this.columns.filter(":visible:first"),
737
- offset = firstvisible.length ? firstvisible.offset().top : false;
738
-
739
- if (offset === false) return;
740
-
741
- this.columns.each(function() {
742
-
743
- var column = $(this);
744
-
745
- if (column.is(":visible")) {
746
-
747
- if (skip) {
748
- column.addClass("uk-grid-margin");
749
- } else {
750
- if (column.offset().top != offset) {
751
- column.addClass("uk-grid-margin");
752
- skip = true;
753
- }
754
- }
755
- }
756
-
757
- });
758
-
759
- return this;
760
- },
761
-
762
- revert: function() {
763
- this.columns.removeClass('uk-grid-margin');
764
- return this;
765
- }
766
-
767
- });
768
-
769
- UI["gridMatch"] = GridMatch;
770
- UI["gridMargin"] = GridMargin;
771
-
772
- // init code
773
- $(document).on("uk-domready", function(e) {
774
- $("[data-uk-grid-match],[data-uk-grid-margin]").each(function() {
775
- var grid = $(this), obj;
776
-
777
- if (grid.is("[data-uk-grid-match]") && !grid.data("gridMatch")) {
778
- obj = new GridMatch(grid, UI.Utils.options(grid.attr("data-uk-grid-match")));
779
- }
780
-
781
- if (grid.is("[data-uk-grid-margin]") && !grid.data("gridMargin")) {
782
- obj = new GridMargin(grid, UI.Utils.options(grid.attr("data-uk-grid-margin")));
783
- }
784
- });
785
- });
786
-
787
- })(jQuery, jQuery.UIkit);
788
-
789
- (function($, UI, $win) {
790
-
791
- "use strict";
792
-
793
- var active = false,
794
- html = $("html"),
795
-
796
- Modal = function(element, options) {
797
-
798
- var $this = this;
799
-
800
- this.element = $(element);
801
- this.options = $.extend({
802
- keyboard: true,
803
- show: false,
804
- bgclose: true
805
- }, options);
806
-
807
- this.transition = UI.support.transition;
808
- this.dialog = this.element.find(".uk-modal-dialog");
809
-
810
- this.element.on("click", ".uk-modal-close", function(e) {
811
- e.preventDefault();
812
- $this.hide();
813
-
814
- }).on("click", function(e) {
815
-
816
- var target = $(e.target);
817
-
818
- if (target[0] == $this.element[0] && $this.options.bgclose) {
819
- $this.hide();
820
- }
821
-
822
- });
823
-
824
- if (this.options.keyboard) {
825
- $(document).on('keyup.ui.modal.escape', function(e) {
826
- if (active && e.which == 27 && $this.isActive()) $this.hide();
827
- });
828
- }
829
- };
830
-
831
- $.extend(Modal.prototype, {
832
-
833
- transition: false,
834
-
835
- toggle: function() {
836
- this[this.isActive() ? "hide" : "show"]();
837
- },
838
-
839
- show: function() {
840
-
841
- var $this = this;
842
-
843
- if (this.isActive()) return;
844
- if (active) active.hide(true);
845
-
846
- this.resize();
847
-
848
- this.element.removeClass("uk-open").show();
849
-
850
- active = this;
851
- html.addClass("uk-modal-page").height(); // force browser engine redraw
852
-
853
- this.element.addClass("uk-open").trigger("uk.modal.show");
854
- },
855
-
856
- hide: function(force) {
857
-
858
- if (!this.isActive()) return;
859
-
860
- if (!force && UI.support.transition) {
861
-
862
- var $this = this;
863
-
864
- this.element.one(UI.support.transition.end, function() {
865
- $this._hide();
866
- }).removeClass("uk-open");
867
-
868
- } else {
869
-
870
- this._hide();
871
- }
872
- },
873
-
874
- resize: function() {
875
-
876
- this.dialog.css("margin-left", "");
877
-
878
- var modalwidth = parseInt(this.dialog.css("width"), 10),
879
- inview = (modalwidth + parseInt(this.dialog.css("margin-left"),10) + parseInt(this.dialog.css("margin-right"),10)) < $win.width();
880
-
881
- this.dialog.css("margin-left", modalwidth && inview ? -1*Math.ceil(modalwidth/2) : "");
882
- },
883
-
884
- _hide: function() {
885
-
886
- this.element.hide().removeClass("uk-open");
887
-
888
- html.removeClass("uk-modal-page");
889
-
890
- if(active===this) active = false;
891
-
892
- this.element.trigger("uk.modal.hide");
893
- },
894
-
895
- isActive: function() {
896
- return (active == this);
897
- }
898
-
899
- });
900
-
901
- var ModalTrigger = function(element, options) {
902
-
903
- var $this = this,
904
- $element = $(element);
905
-
906
- if($element.data("modal")) return;
907
-
908
- this.options = $.extend({
909
- "target": $element.is("a") ? $element.attr("href") : false
910
- }, options);
911
-
912
- this.element = $element;
913
-
914
- this.modal = new Modal(this.options.target, options);
915
-
916
- $element.on("click", function(e) {
917
- e.preventDefault();
918
- $this.show();
919
- });
920
-
921
- //methods
922
-
923
- $.each(["show", "hide", "isActive"], function(index, method) {
924
- $this[method] = function() { return $this.modal[method](); };
925
- });
926
-
927
- this.element.data("modal", this);
928
- };
929
-
930
- ModalTrigger.Modal = Modal;
931
-
932
- UI["modal"] = ModalTrigger;
933
-
934
- // init code
935
- $(document).on("click.modal.uikit", "[data-uk-modal]", function(e) {
936
- var ele = $(this);
937
-
938
- if (!ele.data("modal")) {
939
- var modal = new ModalTrigger(ele, UI.Utils.options(ele.attr("data-uk-modal")));
940
- modal.show();
941
- }
942
-
943
- });
944
-
945
- $win.on("resize orientationchange", UI.Utils.debounce(function(){
946
-
947
- if(active) active.resize();
948
-
949
- }, 150));
950
-
951
- })(jQuery, jQuery.UIkit, jQuery(window));
952
-
953
- (function($, UI) {
954
-
955
- "use strict";
956
-
957
- if (UI.support.touch) {
958
- $("html").addClass("uk-touch");
959
- }
960
-
961
- var $win = $(window),
962
- $doc = $(document),
963
- Offcanvas = {
964
-
965
- show: function(element) {
966
-
967
- element = $(element);
968
-
969
- if (!element.length) return;
970
-
971
- var doc = $("html"),
972
- bar = element.find(".uk-offcanvas-bar:first"),
973
- dir = bar.hasClass("uk-offcanvas-bar-flip") ? -1 : 1,
974
- scrollbar = dir == -1 && $win.width() < window.innerWidth ? (window.innerWidth - $win.width()) : 0;
975
-
976
- scrollpos = {x: window.scrollX, y: window.scrollY};
977
-
978
- element.addClass("uk-active");
979
-
980
- doc.css({"width": window.innerWidth, "height": window.innerHeight}).addClass("uk-offcanvas-page");
981
- doc.css("margin-left", ((bar.outerWidth() - scrollbar) * dir)).width(); // .width() - force redraw
982
-
983
- bar.addClass("uk-offcanvas-bar-show").width();
984
-
985
- element.off(".ukoffcanvas").on("click.ukoffcanvas swipeRight.ukoffcanvas swipeLeft.ukoffcanvas", function(e) {
986
-
987
- var target = $(e.target);
988
-
989
- if (!e.type.match(/swipe/)) {
990
- if (target.hasClass("uk-offcanvas-bar")) return;
991
- if (target.parents(".uk-offcanvas-bar:first").length) return;
992
- }
993
-
994
- e.stopImmediatePropagation();
995
-
996
- Offcanvas.hide();
997
- });
998
-
999
- $doc.on('keydown.offcanvas', function(e) {
1000
- if (e.keyCode === 27) { // ESC
1001
- Offcanvas.hide();
1002
- }
1003
- });
1004
- },
1005
-
1006
- hide: function(force) {
1007
-
1008
- var doc = $("html"),
1009
- panel = $(".uk-offcanvas.uk-active"),
1010
- bar = panel.find(".uk-offcanvas-bar:first");
1011
-
1012
- if (!panel.length) return;
1013
-
1014
- if ($.UIkit.support.transition && !force) {
1015
-
1016
-
1017
- doc.one($.UIkit.support.transition.end, function() {
1018
- doc.removeClass("uk-offcanvas-page").attr("style", "");
1019
- panel.removeClass("uk-active");
1020
- window.scrollTo(scrollpos.x, scrollpos.y);
1021
- }).css("margin-left", "");
1022
-
1023
- setTimeout(function(){
1024
- bar.removeClass("uk-offcanvas-bar-show");
1025
- }, 50);
1026
-
1027
- } else {
1028
- doc.removeClass("uk-offcanvas-page").attr("style", "");
1029
- panel.removeClass("uk-active");
1030
- bar.removeClass("uk-offcanvas-bar-show");
1031
- window.scrollTo(scrollpos.x, scrollpos.y);
1032
- }
1033
-
1034
- panel.off(".ukoffcanvas");
1035
- $doc.off(".ukoffcanvas");
1036
- }
1037
-
1038
- }, scrollpos;
1039
-
1040
-
1041
- var OffcanvasTrigger = function(element, options) {
1042
-
1043
- var $this = this,
1044
- $element = $(element);
1045
-
1046
- if($element.data("offcanvas")) return;
1047
-
1048
- this.options = $.extend({
1049
- "target": $element.is("a") ? $element.attr("href") : false
1050
- }, options);
1051
-
1052
- this.element = $element;
1053
-
1054
- $element.on("click", function(e) {
1055
- e.preventDefault();
1056
- Offcanvas.show($this.options.target);
1057
- });
1058
-
1059
- this.element.data("offcanvas", this);
1060
- };
1061
-
1062
- OffcanvasTrigger.offcanvas = Offcanvas;
1063
-
1064
- UI["offcanvas"] = OffcanvasTrigger;
1065
-
1066
-
1067
- // init code
1068
- $doc.on("click.offcanvas.uikit", "[data-uk-offcanvas]", function(e) {
1069
-
1070
- e.preventDefault();
1071
-
1072
- var ele = $(this);
1073
-
1074
- if (!ele.data("offcanvas")) {
1075
- var obj = new OffcanvasTrigger(ele, UI.Utils.options(ele.attr("data-uk-offcanvas")));
1076
- ele.trigger("click");
1077
- }
1078
- });
1079
-
1080
- })(jQuery, jQuery.UIkit);
1081
-
1082
- (function($, UI) {
1083
-
1084
- "use strict";
1085
-
1086
- var Nav = function(element, options) {
1087
-
1088
- var $this = this, $element = $(element);
1089
-
1090
- if($element.data("nav")) return;
1091
-
1092
- this.options = $.extend({}, this.options, options);
1093
- this.element = $element.on("click", this.options.toggler, function(e) {
1094
- e.preventDefault();
1095
-
1096
- var ele = $(this);
1097
-
1098
- $this.open(ele.parent()[0] == $this.element[0] ? ele : ele.parent("li"));
1099
- });
1100
-
1101
- this.element.find(this.options.lists).each(function() {
1102
- var $ele = $(this),
1103
- parent = $ele.parent(),
1104
- active = parent.hasClass("uk-active");
1105
-
1106
- $ele.wrap('<div style="overflow:hidden;height:0;position:relative;"></div>');
1107
- parent.data("list-container", $ele.parent());
1108
-
1109
- if (active) $this.open(parent, true);
1110
- });
1111
-
1112
- this.element.data("nav", this);
1113
- };
1114
-
1115
- $.extend(Nav.prototype, {
1116
-
1117
- options: {
1118
- "toggler": ">li.uk-parent > a[href='#']",
1119
- "lists": ">li.uk-parent > ul",
1120
- "multiple": false
1121
- },
1122
-
1123
- open: function(li, noanimation) {
1124
-
1125
- var element = this.element, $li = $(li);
1126
-
1127
- if (!this.options.multiple) {
1128
-
1129
- element.children(".uk-open").not(li).each(function() {
1130
- if ($(this).data("list-container")) {
1131
- $(this).data("list-container").stop().animate({height: 0}, function() {
1132
- $(this).parent().removeClass("uk-open");
1133
- });
1134
- }
1135
- });
1136
- }
1137
-
1138
- $li.toggleClass("uk-open");
1139
-
1140
- if ($li.data("list-container")) {
1141
- if (noanimation) {
1142
- $li.data('list-container').stop().height($li.hasClass("uk-open") ? "auto" : 0);
1143
- } else {
1144
- $li.data('list-container').stop().animate({
1145
- height: ($li.hasClass("uk-open") ? getHeight($li.data('list-container').find('ul:first')) : 0)
1146
- });
1147
- }
1148
- }
1149
- }
1150
-
1151
- });
1152
-
1153
- UI["nav"] = Nav;
1154
-
1155
- // helper
1156
-
1157
- function getHeight(ele) {
1158
- var $ele = $(ele), height = "auto";
1159
-
1160
- if ($ele.is(":visible")) {
1161
- height = $ele.outerHeight();
1162
- } else {
1163
- var tmp = {
1164
- position: $ele.css("position"),
1165
- visibility: $ele.css("visibility"),
1166
- display: $ele.css("display")
1167
- };
1168
-
1169
- height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight();
1170
-
1171
- $ele.css(tmp); // reset element
1172
- }
1173
-
1174
- return height;
1175
- }
1176
-
1177
- // init code
1178
- $(document).on("uk-domready", function(e) {
1179
- $("[data-uk-nav]").each(function() {
1180
- var nav = $(this);
1181
-
1182
- if (!nav.data("nav")) {
1183
- var obj = new Nav(nav, UI.Utils.options(nav.attr("data-uk-nav")));
1184
- }
1185
- });
1186
- });
1187
-
1188
- })(jQuery, jQuery.UIkit);
1189
-
1190
- (function($, UI) {
1191
-
1192
- "use strict";
1193
-
1194
- var $tooltip, // tooltip container
1195
- tooltipdelay;
1196
-
1197
-
1198
- var Tooltip = function(element, options) {
1199
-
1200
- var $this = this, $element = $(element);
1201
-
1202
- if($element.data("tooltip")) return;
1203
-
1204
- this.options = $.extend({}, Tooltip.defaults, options);
1205
-
1206
- this.element = $element.on({
1207
- "focus" : function(e) { $this.show(); },
1208
- "blur" : function(e) { $this.hide(); },
1209
- "mouseenter": function(e) { $this.show(); },
1210
- "mouseleave": function(e) { $this.hide(); }
1211
- });
1212
-
1213
- this.tip = typeof(this.options.src) === "function" ? this.options.src.call(this.element) : this.options.src;
1214
-
1215
- // disable title attribute
1216
- this.element.attr("data-cached-title", this.element.attr("title")).attr("title", "");
1217
-
1218
- this.element.data("tooltip", this);
1219
- };
1220
-
1221
- $.extend(Tooltip.prototype, {
1222
-
1223
- tip: "",
1224
-
1225
- show: function() {
1226
-
1227
- if (tooltipdelay) clearTimeout(tooltipdelay);
1228
- if (!this.tip.length) return;
1229
-
1230
- $tooltip.stop().css({"top": -2000, "visibility": "hidden"}).show();
1231
- $tooltip.html('<div class="uk-tooltip-inner">' + this.tip + '</div>');
1232
-
1233
- var $this = this,
1234
- pos = $.extend({}, this.element.offset(), {width: this.element[0].offsetWidth, height: this.element[0].offsetHeight}),
1235
- width = $tooltip[0].offsetWidth,
1236
- height = $tooltip[0].offsetHeight,
1237
- offset = typeof(this.options.offset) === "function" ? this.options.offset.call(this.element) : this.options.offset,
1238
- position = typeof(this.options.pos) === "function" ? this.options.pos.call(this.element) : this.options.pos,
1239
- tcss = {
1240
- "display": "none",
1241
- "visibility": "visible",
1242
- "top": (pos.top + pos.height + height),
1243
- "left": pos.left
1244
- },
1245
- tmppos = position.split("-");
1246
-
1247
- if ((tmppos[0] == "left" || tmppos[0] == "right") && $.UIkit.langdirection == 'right') {
1248
- tmppos[0] = tmppos[0] == "left" ? "right" : "left";
1249
- }
1250
-
1251
- var variants = {
1252
- "bottom" : {top: pos.top + pos.height + offset, left: pos.left + pos.width / 2 - width / 2},
1253
- "top" : {top: pos.top - height - offset, left: pos.left + pos.width / 2 - width / 2},
1254
- "left" : {top: pos.top + pos.height / 2 - height / 2, left: pos.left - width - offset},
1255
- "right" : {top: pos.top + pos.height / 2 - height / 2, left: pos.left + pos.width + offset}
1256
- };
1257
-
1258
- $.extend(tcss, variants[tmppos[0]]);
1259
-
1260
- if (tmppos.length == 2) tcss.left = (tmppos[1] == 'left') ? (pos.left) : ((pos.left + pos.width) - width);
1261
-
1262
- var boundary = this.checkBoundary(tcss.left, tcss.top, width, height);
1263
-
1264
- if(boundary) {
1265
-
1266
- switch(boundary) {
1267
- case "x":
1268
-
1269
- if (tmppos.length == 2) {
1270
- position = tmppos[0]+"-"+(tcss.left < 0 ? "left": "right");
1271
- } else {
1272
- position = tcss.left < 0 ? "right": "left";
1273
- }
1274
-
1275
- break;
1276
-
1277
- case "y":
1278
- if (tmppos.length == 2) {
1279
- position = (tcss.top < 0 ? "bottom": "top")+"-"+tmppos[1];
1280
- } else {
1281
- position = (tcss.top < 0 ? "bottom": "top");
1282
- }
1283
-
1284
- break;
1285
-
1286
- case "xy":
1287
- if (tmppos.length == 2) {
1288
- position = (tcss.top < 0 ? "bottom": "top")+"-"+(tcss.left < 0 ? "left": "right");
1289
- } else {
1290
- position = tcss.left < 0 ? "right": "left";
1291
- }
1292
-
1293
- break;
1294
-
1295
- }
1296
-
1297
- tmppos = position.split("-");
1298
-
1299
- $.extend(tcss, variants[tmppos[0]]);
1300
-
1301
- if (tmppos.length == 2) tcss.left = (tmppos[1] == 'left') ? (pos.left) : ((pos.left + pos.width) - width);
1302
- }
1303
-
1304
- tooltipdelay = setTimeout(function(){
1305
-
1306
- $tooltip.css(tcss).attr("class", "uk-tooltip uk-tooltip-" + position);
1307
-
1308
- if ($this.options.animation) {
1309
- $tooltip.css({opacity: 0, display: 'block'}).animate({opacity: 1}, parseInt($this.options.animation, 10) || 400);
1310
- } else {
1311
- $tooltip.show();
1312
- }
1313
-
1314
- tooltipdelay = false;
1315
- }, parseInt(this.options.delay, 10) || 0);
1316
- },
1317
-
1318
- hide: function() {
1319
- if(this.element.is("input") && this.element[0]===document.activeElement) return;
1320
-
1321
- if(tooltipdelay) clearTimeout(tooltipdelay);
1322
-
1323
- $tooltip.stop();
1324
-
1325
- if (this.options.animation) {
1326
- $tooltip.fadeOut(parseInt(this.options.animation, 10) || 400);
1327
- } else {
1328
- $tooltip.hide();
1329
- }
1330
- },
1331
-
1332
- content: function() {
1333
- return this.tip;
1334
- },
1335
-
1336
- checkBoundary: function(left, top, width, height) {
1337
-
1338
- var axis = "";
1339
-
1340
- if(left < 0 || left+width > window.innerWidth) {
1341
- axis += "x";
1342
- }
1343
-
1344
- if(top < 0 || top+height > window.innerHeight) {
1345
- axis += "y";
1346
- }
1347
-
1348
- return axis;
1349
- }
1350
-
1351
- });
1352
-
1353
- Tooltip.defaults = {
1354
- "offset": 5,
1355
- "pos": "top",
1356
- "animation": false,
1357
- "delay": 0, // in miliseconds
1358
- "src": function() { return this.attr("title"); }
1359
- };
1360
-
1361
- UI["tooltip"] = Tooltip;
1362
-
1363
- $(function() {
1364
- $tooltip = $('<div class="uk-tooltip"></div>').appendTo("body");
1365
- });
1366
-
1367
- // init code
1368
- $(document).on("mouseenter.tooltip.uikit focus.tooltip.uikit", "[data-uk-tooltip]", function(e) {
1369
- var ele = $(this);
1370
-
1371
- if (!ele.data("tooltip")) {
1372
- var obj = new Tooltip(ele, UI.Utils.options(ele.attr("data-uk-tooltip")));
1373
- ele.trigger("mouseenter");
1374
- }
1375
- });
1376
-
1377
- })(jQuery, jQuery.UIkit);
1378
-
1379
- (function($, UI) {
1380
-
1381
- "use strict";
1382
-
1383
- var Switcher = function(element, options) {
1384
-
1385
- var $this = this, $element = $(element);
1386
-
1387
- if($element.data("switcher")) return;
1388
-
1389
- this.options = $.extend({}, this.options, options);
1390
-
1391
- this.element = $element.on("click", this.options.toggler, function(e) {
1392
- e.preventDefault();
1393
- $this.show(this);
1394
- });
1395
-
1396
- if (this.options.connect) {
1397
-
1398
- this.connect = $(this.options.connect).find(".uk-active").removeClass(".uk-active").end();
1399
-
1400
- var active = this.element.find(this.options.toggler).filter(".uk-active");
1401
-
1402
- if (active.length) {
1403
- this.show(active);
1404
- }
1405
- }
1406
-
1407
- this.element.data("switcher", this);
1408
- };
1409
-
1410
- $.extend(Switcher.prototype, {
1411
-
1412
- options: {
1413
- connect: false,
1414
- toggler: ">*"
1415
- },
1416
-
1417
- show: function(tab) {
1418
-
1419
- tab = isNaN(tab) ? $(tab) : this.element.find(this.options.toggler).eq(tab);
1420
-
1421
- var active = tab;
1422
-
1423
- if (active.hasClass("uk-disabled")) return;
1424
-
1425
- this.element.find(this.options.toggler).filter(".uk-active").removeClass("uk-active");
1426
- active.addClass("uk-active");
1427
-
1428
- if (this.options.connect && this.connect.length) {
1429
-
1430
- var index = this.element.find(this.options.toggler).index(active);
1431
-
1432
- this.connect.children().removeClass("uk-active").eq(index).addClass("uk-active");
1433
- }
1434
-
1435
- this.element.trigger("uk.switcher.show", [active]);
1436
- }
1437
-
1438
- });
1439
-
1440
- UI["switcher"] = Switcher;
1441
-
1442
- // init code
1443
- $(document).on("uk-domready", function(e) {
1444
- $("[data-uk-switcher]").each(function() {
1445
- var switcher = $(this);
1446
-
1447
- if (!switcher.data("switcher")) {
1448
- var obj = new Switcher(switcher, UI.Utils.options(switcher.attr("data-uk-switcher")));
1449
- }
1450
- });
1451
- });
1452
-
1453
- })(jQuery, jQuery.UIkit);
1454
-
1455
- (function($, UI) {
1456
-
1457
- "use strict";
1458
-
1459
- var Tab = function(element, options) {
1460
-
1461
- var $this = this, $element = $(element);
1462
-
1463
- if($element.data("tab")) return;
1464
-
1465
- this.element = $element;
1466
- this.options = $.extend({
1467
- connect: false
1468
- }, this.options, options);
1469
-
1470
- if (this.options.connect) {
1471
- this.connect = $(this.options.connect);
1472
- }
1473
-
1474
- if (window.location.hash) {
1475
- var active = this.element.children().filter(window.location.hash);
1476
-
1477
- if (active.length) {
1478
- this.element.children().removeClass('uk-active').filter(active).addClass("uk-active");
1479
- }
1480
- }
1481
-
1482
- var mobiletab = $('<li class="uk-tab-responsive uk-active"><a href="javascript:void(0);"></a></li>'),
1483
- caption = mobiletab.find("a:first"),
1484
- dropdown = $('<div class="uk-dropdown uk-dropdown-small"><ul class="uk-nav uk-nav-dropdown"></ul><div>'),
1485
- ul = dropdown.find("ul");
1486
-
1487
- caption.html(this.element.find("li.uk-active:first").find("a").text());
1488
-
1489
- if (this.element.hasClass("uk-tab-bottom")) dropdown.addClass("uk-dropdown-up");
1490
- if (this.element.hasClass("uk-tab-flip")) dropdown.addClass("uk-dropdown-flip");
1491
-
1492
- this.element.find("a").each(function(i) {
1493
-
1494
- var tab = $(this).parent(),
1495
- item = $('<li><a href="javascript:void(0);">' + tab.text() + '</a></li>').on("click", function(e) {
1496
- $this.element.data("switcher").show(i);
1497
- });
1498
-
1499
- if (!$(this).parents(".uk-disabled:first").length) ul.append(item);
1500
- });
1501
-
1502
- this.element.uk("switcher", {"toggler": ">li:not(.uk-tab-responsive)", "connect": this.options.connect});
1503
-
1504
- mobiletab.append(dropdown).uk("dropdown", {"mode": "click"});
1505
-
1506
- this.element.append(mobiletab).data({
1507
- "dropdown": mobiletab.data("dropdown"),
1508
- "mobilecaption": caption
1509
- }).on("uk.switcher.show", function(e, tab) {
1510
- mobiletab.addClass("uk-active");
1511
- caption.html(tab.find("a").text());
1512
- });
1513
-
1514
- this.element.data("tab", this);
1515
- };
1516
-
1517
- $(document).on("uk-domready", function(e) {
1518
-
1519
- $("[data-uk-tab]").each(function() {
1520
- var tab = $(this);
1521
-
1522
- if (!tab.data("tab")) {
1523
- var obj = new Tab(tab, UI.Utils.options(tab.attr("data-uk-tab")));
1524
- }
1525
- });
1526
- });
1527
-
1528
- })(jQuery, jQuery.UIkit);
1529
-
1530
- (function($, UI) {
1531
-
1532
- "use strict";
1533
-
1534
- var renderers = {},
1535
-
1536
- Search = function(element, options) {
1537
-
1538
- var $this = this, $element = $(element);
1539
-
1540
- if($element.data("search")) return;
1541
-
1542
- this.options = $.extend({}, this.options, options);
1543
-
1544
- this.element = $element;
1545
-
1546
- this.timer = null;
1547
- this.value = null;
1548
- this.input = this.element.find(".uk-search-field");
1549
- this.form = this.input.length ? $(this.input.get(0).form) : $();
1550
- this.input.attr('autocomplete', 'off');
1551
-
1552
- this.input.on({
1553
- keydown: function(event) {
1554
- $this.form[($this.input.val()) ? 'addClass' : 'removeClass']($this.options.filledClass);
1555
-
1556
- if (event && event.which && !event.shiftKey) {
1557
-
1558
- switch (event.which) {
1559
- case 13: // enter
1560
- $this.done($this.selected);
1561
- event.preventDefault();
1562
- break;
1563
- case 38: // up
1564
- $this.pick('prev');
1565
- event.preventDefault();
1566
- break;
1567
- case 40: // down
1568
- $this.pick('next');
1569
- event.preventDefault();
1570
- break;
1571
- case 27:
1572
- case 9: // esc, tab
1573
- $this.hide();
1574
- break;
1575
- default:
1576
- break;
1577
- }
1578
- }
1579
-
1580
- },
1581
- keyup: function(event) {
1582
- $this.trigger();
1583
- },
1584
- blur: function(event) {
1585
- setTimeout(function() { $this.hide(event); }, 200);
1586
- }
1587
- });
1588
-
1589
- this.form.find('button[type=reset]').bind('click', function() {
1590
- $this.form.removeClass("uk-open").removeClass("uk-loading").removeClass("uk-active");
1591
- $this.value = null;
1592
- $this.input.focus();
1593
- });
1594
-
1595
- this.dropdown = $('<div class="uk-dropdown uk-dropdown-search"><ul class="uk-nav uk-nav-search"></ul></div>').appendTo(this.form).find('.uk-nav-search');
1596
-
1597
- if (this.options.flipDropdown) {
1598
- this.dropdown.parent().addClass('uk-dropdown-flip');
1599
- }
1600
-
1601
- this.dropdown.on("mouseover", ">li", function(){
1602
- $this.pick($(this));
1603
- });
1604
-
1605
- this.renderer = new renderers[this.options.renderer](this);
1606
-
1607
- this.element.data("search", this);
1608
- };
1609
-
1610
- $.extend(Search.prototype, {
1611
-
1612
- options: {
1613
- source: false,
1614
- param: 'search',
1615
- method: 'post',
1616
- minLength: 3,
1617
- delay: 300,
1618
- flipDropdown: false,
1619
- match: ':not(.uk-skip)',
1620
- skipClass: 'uk-skip',
1621
- loadingClass: 'uk-loading',
1622
- filledClass: 'uk-active',
1623
- listClass: 'results',
1624
- hoverClass: 'uk-active',
1625
- onLoadedResults: function(results) { return results; },
1626
- renderer: "default"
1627
- },
1628
-
1629
- request: function(options) {
1630
- var $this = this;
1631
-
1632
- this.form.addClass(this.options.loadingClass);
1633
-
1634
- if (this.options.source) {
1635
-
1636
- $.ajax($.extend({
1637
- url: this.options.source,
1638
- type: this.options.method,
1639
- dataType: 'json',
1640
- success: function(data) {
1641
- data = $this.options.onLoadedResults.apply(this, [data]);
1642
- $this.form.removeClass($this.options.loadingClass);
1643
- $this.suggest(data);
1644
- }
1645
- }, options));
1646
-
1647
- } else {
1648
- this.form.removeClass($this.options.loadingClass);
1649
- }
1650
- },
1651
-
1652
- pick: function(item) {
1653
- var selected = false;
1654
-
1655
- if (typeof item !== "string" && !item.hasClass(this.options.skipClass)) {
1656
- selected = item;
1657
- }
1658
-
1659
- if (item == 'next' || item == 'prev') {
1660
-
1661
- var items = this.dropdown.children().filter(this.options.match);
1662
-
1663
- if (this.selected) {
1664
- var index = items.index(this.selected);
1665
-
1666
- if (item == 'next') {
1667
- selected = items.eq(index + 1 < items.length ? index + 1 : 0);
1668
- } else {
1669
- selected = items.eq(index - 1 < 0 ? items.length - 1 : index - 1);
1670
- }
1671
-
1672
- } else {
1673
- selected = items[(item == 'next') ? 'first' : 'last']();
1674
- }
1675
-
1676
- }
1677
-
1678
- if (selected && selected.length) {
1679
- this.selected = selected;
1680
- this.dropdown.children().removeClass(this.options.hoverClass);
1681
- this.selected.addClass(this.options.hoverClass);
1682
- }
1683
- },
1684
-
1685
- trigger: function() {
1686
-
1687
- var $this = this, old = this.value, data = {};
1688
-
1689
- this.value = this.input.val();
1690
-
1691
- if (this.value.length < this.options.minLength) {
1692
- return this.hide();
1693
- }
1694
-
1695
- if (this.value != old) {
1696
-
1697
- if (this.timer) window.clearTimeout(this.timer);
1698
-
1699
- this.timer = window.setTimeout(function() {
1700
- data[$this.options.param] = $this.value;
1701
- $this.request({'data': data});
1702
- }, this.options.delay, this);
1703
- }
1704
-
1705
- return this;
1706
- },
1707
-
1708
- done: function(selected) {
1709
-
1710
- this.renderer.done(selected);
1711
- },
1712
-
1713
- suggest: function(data) {
1714
-
1715
- if (!data) return;
1716
-
1717
- if (data === false) {
1718
- this.hide();
1719
- } else {
1720
-
1721
- this.selected = null;
1722
-
1723
- this.dropdown.empty();
1724
-
1725
- this.renderer.suggest(data);
1726
-
1727
- this.show();
1728
- }
1729
- },
1730
-
1731
- show: function() {
1732
- if (this.visible) return;
1733
- this.visible = true;
1734
- this.form.addClass("uk-open");
1735
- },
1736
-
1737
- hide: function() {
1738
- if (!this.visible)
1739
- return;
1740
- this.visible = false;
1741
- this.form.removeClass(this.options.loadingClass).removeClass("uk-open");
1742
- }
1743
- });
1744
-
1745
- Search.addRenderer = function(name, klass) {
1746
- renderers[name] = klass;
1747
- };
1748
-
1749
-
1750
- var DefaultRenderer = function(search) {
1751
- this.search = search;
1752
- this.options = $.extend({}, DefaultRenderer.defaults, search.options);
1753
- };
1754
-
1755
- $.extend(DefaultRenderer.prototype, {
1756
-
1757
- done: function(selected) {
1758
-
1759
- if (!selected) {
1760
- this.search.form.submit();
1761
- return;
1762
- }
1763
-
1764
- if (selected.hasClass(this.options.moreResultsClass)) {
1765
- this.search.form.submit();
1766
- } else if (selected.data('choice')) {
1767
- window.location = selected.data('choice').url;
1768
- }
1769
-
1770
- this.search.hide();
1771
- },
1772
-
1773
- suggest: function(data) {
1774
-
1775
- var $this = this,
1776
- events = {
1777
- 'click': function(e) {
1778
- e.preventDefault();
1779
- $this.done($(this).parent());
1780
- }
1781
- };
1782
-
1783
- if (this.options.msgResultsHeader) {
1784
- $('<li>').addClass(this.options.resultsHeaderClass + ' ' + this.options.skipClass).html(this.options.msgResultsHeader).appendTo(this.search.dropdown);
1785
- }
1786
-
1787
- if (data.results && data.results.length > 0) {
1788
-
1789
- $(data.results).each(function(i) {
1790
-
1791
- var item = $('<li><a href="#">' + this.title + '</a></li>').data('choice', this);
1792
-
1793
- if (this["text"]) {
1794
- item.find("a").append('<div>' + this.text + '</div>');
1795
- }
1796
-
1797
- $this.search.dropdown.append(item);
1798
- });
1799
-
1800
- if (this.options.msgMoreResults) {
1801
- $('<li>').addClass('uk-nav-divider ' + $this.options.skipClass).appendTo($this.dropdown);
1802
- $('<li>').addClass($this.options.moreResultsClass).html('<a href="#">' + $this.options.msgMoreResults + '</a>').appendTo($this.search.dropdown).on(events);
1803
- }
1804
-
1805
- $this.search.dropdown.find("li>a").on(events);
1806
-
1807
- } else if (this.options.msgNoResults) {
1808
- $('<li>').addClass(this.options.noResultsClass + ' ' + this.options.skipClass).html('<a>' + this.options.msgNoResults + '</a>').appendTo($this.search.dropdown);
1809
- }
1810
- }
1811
- });
1812
-
1813
- DefaultRenderer.defaults = {
1814
- resultsHeaderClass: 'uk-nav-header',
1815
- moreResultsClass: '',
1816
- noResultsClass: '',
1817
- msgResultsHeader: 'Search Results',
1818
- msgMoreResults: 'More Results',
1819
- msgNoResults: 'No results found'
1820
- };
1821
-
1822
- Search.addRenderer("default", DefaultRenderer);
1823
-
1824
- UI["search"] = Search;
1825
-
1826
- // init code
1827
- $(document).on("focus.search.uikit", "[data-uk-search]", function(e) {
1828
- var ele = $(this);
1829
-
1830
- if (!ele.data("search")) {
1831
- var obj = new Search(ele, UI.Utils.options(ele.attr("data-uk-search")));
1832
- }
1833
- });
1834
-
1835
- })(jQuery, jQuery.UIkit);
1836
-
1837
- (function($, UI) {
1838
-
1839
- "use strict";
1840
-
1841
- var $win = $(window),
1842
-
1843
- ScrollSpy = function(element, options) {
1844
-
1845
- var $element = $(element);
1846
-
1847
- if($element.data("scrollspy")) return;
1848
-
1849
- this.options = $.extend({}, ScrollSpy.defaults, options);
1850
- this.element = $(element);
1851
-
1852
- var $this = this, idle, inviewstate, initinview,
1853
- fn = function(){
1854
-
1855
- var inview = isInView($this.element, $this.options);
1856
-
1857
- if(inview && !inviewstate) {
1858
-
1859
- if(idle) clearTimeout(idle);
1860
-
1861
- if(!initinview) {
1862
- $this.element.addClass($this.options.initcls);
1863
- $this.offset = $this.element.offset();
1864
- initinview = true;
1865
-
1866
- $this.element.trigger("uk-scrollspy-init");
1867
- }
1868
-
1869
- idle = setTimeout(function(){
1870
-
1871
- if(inview) {
1872
- $this.element.addClass("uk-scrollspy-inview").addClass($this.options.cls).width();
1873
- }
1874
-
1875
- }, $this.options.delay);
1876
-
1877
- inviewstate = true;
1878
- $this.element.trigger("uk.scrollspy.inview");
1879
- }
1880
-
1881
- if (!inview && inviewstate && $this.options.repeat) {
1882
- $this.element.removeClass("uk-scrollspy-inview").removeClass($this.options.cls);
1883
- inviewstate = false;
1884
-
1885
- $this.element.trigger("uk.scrollspy.outview");
1886
- }
1887
- };
1888
-
1889
- $win.on("scroll", fn).on("resize orientationchange", UI.Utils.debounce(fn, 50));
1890
-
1891
- fn();
1892
-
1893
- this.element.data("scrollspy", this);
1894
- };
1895
-
1896
- ScrollSpy.defaults = {
1897
- "cls" : "uk-scrollspy-inview",
1898
- "initcls" : "uk-scrollspy-init-inview",
1899
- "topoffset" : 0,
1900
- "leftoffset" : 0,
1901
- "repeat" : false,
1902
- "delay" : 0
1903
- };
1904
-
1905
- UI["scrollspy"] = ScrollSpy;
1906
-
1907
- var ScrollSpyNav = function(element, options) {
1908
-
1909
- var $element = $(element);
1910
-
1911
- if($element.data("scrollspynav")) return;
1912
-
1913
- this.element = $element;
1914
- this.options = $.extend({}, ScrollSpyNav.defaults, options);
1915
-
1916
- var ids = [],
1917
- links = this.element.find("a[href^='#']").each(function(){ ids.push($(this).attr("href")); }),
1918
- targets = $(ids.join(","));
1919
-
1920
- var $this = this, inviews, fn = function(){
1921
-
1922
- inviews = [];
1923
-
1924
- for(var i=0 ; i < targets.length ; i++) {
1925
- if(isInView(targets.eq(i), $this.options)) {
1926
- inviews.push(targets.eq(i));
1927
- }
1928
- }
1929
-
1930
- if(inviews.length) {
1931
-
1932
- var scrollTop = $win.scrollTop(),
1933
- target = (function(){
1934
- for(var i=0; i< inviews.length;i++){
1935
- if(inviews[i].offset().top >= scrollTop){
1936
- return inviews[i];
1937
- }
1938
- }
1939
- })();
1940
-
1941
- if(!target) return;
1942
-
1943
- if($this.options.closest) {
1944
- links.closest($this.options.closest).removeClass($this.options.cls).end().filter("a[href='#"+target.attr("id")+"']").closest($this.options.closest).addClass($this.options.cls);
1945
- } else {
1946
- links.removeClass($this.options.cls).filter("a[href='#"+target.attr("id")+"']").addClass($this.options.cls);
1947
- }
1948
- }
1949
- };
1950
-
1951
- if(this.options.smoothscroll && UI["smoothScroll"]) {
1952
- links.each(function(){
1953
- new UI["smoothScroll"](this, $this.options.smoothscroll);
1954
- });
1955
- }
1956
-
1957
- fn();
1958
-
1959
- $win.on("scroll", fn).on("resize orientationchange", UI.Utils.debounce(fn, 50));
1960
-
1961
- this.element.data("scrollspynav", this);
1962
- };
1963
-
1964
- ScrollSpyNav.defaults = {
1965
- "cls" : 'uk-active',
1966
- "closest" : false,
1967
- "topoffset" : 0,
1968
- "leftoffset" : 0,
1969
- "smoothscroll" : false
1970
- };
1971
-
1972
- UI["scrollspynav"] = ScrollSpyNav;
1973
-
1974
- // helper
1975
-
1976
- function isInView(element, options) {
1977
-
1978
- var $element = element;
1979
-
1980
- if (!$element.is(':visible')) {
1981
- return false;
1982
- }
1983
-
1984
- var window_left = $win.scrollLeft(), window_top = $win.scrollTop(), offset = $element.offset(), left = offset.left, top = offset.top;
1985
-
1986
- if (top + $element.height() >= window_top && top - options.topoffset <= window_top + $win.height() &&
1987
- left + $element.width() >= window_left && left - options.leftoffset <= window_left + $win.width()) {
1988
- return true;
1989
- } else {
1990
- return false;
1991
- }
1992
- }
1993
-
1994
- ScrollSpy.isInView = isInView;
1995
-
1996
- // init code
1997
- $(document).on("uk-domready", function(e) {
1998
- $("[data-uk-scrollspy]").each(function() {
1999
-
2000
- var element = $(this);
2001
-
2002
- if (!element.data("scrollspy")) {
2003
- var obj = new ScrollSpy(element, UI.Utils.options(element.attr("data-uk-scrollspy")));
2004
- }
2005
- });
2006
-
2007
- $("[data-uk-scrollspy-nav]").each(function() {
2008
-
2009
- var element = $(this);
2010
-
2011
- if (!element.data("scrollspynav")) {
2012
- var obj = new ScrollSpyNav(element, UI.Utils.options(element.attr("data-uk-scrollspy-nav")));
2013
- }
2014
- });
2015
- });
2016
-
2017
- })(jQuery, jQuery.UIkit);
2018
-
2019
- (function($, UI) {
2020
-
2021
- "use strict";
2022
-
2023
- var SmoothScroll = function(element, options) {
2024
-
2025
- var $this = this, $element = $(element);
2026
-
2027
- if($element.data("smoothScroll")) return;
2028
-
2029
- this.options = $.extend({}, SmoothScroll.defaults, options);
2030
-
2031
- this.element = $element.on("click", function(e) {
2032
-
2033
- // get / set parameters
2034
- var ele = ($(this.hash).length ? $(this.hash) : $("body")),
2035
- target = ele.offset().top - $this.options.offset,
2036
- docheight = $(document).height(),
2037
- winheight = $(window).height(),
2038
- eleheight = ele.outerHeight();
2039
-
2040
- if ((target + winheight) > docheight) {
2041
- target = docheight - winheight;
2042
- }
2043
-
2044
- // animate to target and set the hash to the window.location after the animation
2045
- $("html,body").stop().animate({scrollTop: target}, $this.options.duration, $this.options.transition);
2046
-
2047
- // cancel default click action
2048
- return false;
2049
- });
2050
-
2051
- this.element.data("smoothScroll", this);
2052
- };
2053
-
2054
- SmoothScroll.defaults = {
2055
- duration: 1000,
2056
- transition: 'easeOutExpo',
2057
- offset: 0
2058
- };
2059
-
2060
- UI["smoothScroll"] = SmoothScroll;
2061
-
2062
-
2063
- if (!$.easing['easeOutExpo']) {
2064
- $.easing['easeOutExpo'] = function(x, t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; };
2065
- }
2066
-
2067
-
2068
- // init code
2069
- $(document).on("click.smooth-scroll.uikit", "[data-uk-smooth-scroll]", function(e) {
2070
- var ele = $(this);
2071
-
2072
- if (!ele.data("smoothScroll")) {
2073
- var obj = new SmoothScroll(ele, UI.Utils.options(ele.attr("data-uk-smooth-scroll")));
2074
- ele.trigger("click");
2075
- }
2076
- });
2077
-
2078
- })(jQuery, jQuery.UIkit);