uikit-rails 0.0.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -3
  3. data/Gemfile +2 -1
  4. data/LICENSE.txt +21 -0
  5. data/README.md +65 -0
  6. data/Rakefile +0 -1
  7. data/assets/fonts/FontAwesome.otf +0 -0
  8. data/assets/fonts/fontawesome-webfont.ttf +0 -0
  9. data/assets/fonts/fontawesome-webfont.woff +0 -0
  10. data/assets/fonts/fontawesome-webfont.woff2 +0 -0
  11. data/assets/javascripts/components/accordion.js +174 -0
  12. data/assets/javascripts/components/accordion.min.js +2 -0
  13. data/assets/javascripts/components/autocomplete.js +334 -0
  14. data/assets/javascripts/components/autocomplete.min.js +2 -0
  15. data/assets/javascripts/components/datepicker.js +3166 -0
  16. data/assets/javascripts/components/datepicker.min.js +3 -0
  17. data/assets/javascripts/components/form-password.js +67 -0
  18. data/assets/javascripts/components/form-password.min.js +2 -0
  19. data/assets/javascripts/components/form-select.js +70 -0
  20. data/assets/javascripts/components/form-select.min.js +2 -0
  21. data/assets/javascripts/components/grid.js +527 -0
  22. data/assets/javascripts/components/grid.min.js +2 -0
  23. data/assets/javascripts/components/htmleditor.js +623 -0
  24. data/assets/javascripts/components/htmleditor.min.js +2 -0
  25. data/assets/javascripts/components/lightbox.js +555 -0
  26. data/assets/javascripts/components/lightbox.min.js +2 -0
  27. data/assets/javascripts/components/nestable.js +638 -0
  28. data/assets/javascripts/components/nestable.min.js +2 -0
  29. data/assets/javascripts/components/notify.js +189 -0
  30. data/assets/javascripts/components/notify.min.js +2 -0
  31. data/assets/javascripts/components/pagination.js +147 -0
  32. data/assets/javascripts/components/pagination.min.js +2 -0
  33. data/assets/javascripts/components/parallax.js +435 -0
  34. data/assets/javascripts/components/parallax.min.js +2 -0
  35. data/assets/javascripts/components/search.js +92 -0
  36. data/assets/javascripts/components/search.min.js +2 -0
  37. data/assets/javascripts/components/slider.js +531 -0
  38. data/assets/javascripts/components/slider.min.js +2 -0
  39. data/assets/javascripts/components/slideset.js +506 -0
  40. data/assets/javascripts/components/slideset.min.js +2 -0
  41. data/assets/javascripts/components/slideshow-fx.js +375 -0
  42. data/assets/javascripts/components/slideshow-fx.min.js +2 -0
  43. data/assets/javascripts/components/slideshow.js +562 -0
  44. data/assets/javascripts/components/slideshow.min.js +2 -0
  45. data/assets/javascripts/components/sortable.js +688 -0
  46. data/assets/javascripts/components/sortable.min.js +2 -0
  47. data/assets/javascripts/components/sticky.js +359 -0
  48. data/assets/javascripts/components/sticky.min.js +2 -0
  49. data/assets/javascripts/components/timepicker.js +192 -0
  50. data/assets/javascripts/components/timepicker.min.js +2 -0
  51. data/assets/javascripts/components/tooltip.js +234 -0
  52. data/assets/javascripts/components/tooltip.min.js +2 -0
  53. data/assets/javascripts/components/upload.js +260 -0
  54. data/assets/javascripts/components/upload.min.js +2 -0
  55. data/assets/javascripts/core/alert.js +66 -0
  56. data/assets/javascripts/core/alert.min.js +2 -0
  57. data/assets/javascripts/core/button.js +157 -0
  58. data/assets/javascripts/core/button.min.js +2 -0
  59. data/assets/javascripts/core/core.js +730 -0
  60. data/assets/javascripts/core/core.min.js +2 -0
  61. data/assets/javascripts/core/cover.js +95 -0
  62. data/assets/javascripts/core/cover.min.js +2 -0
  63. data/assets/javascripts/core/dropdown.js +514 -0
  64. data/assets/javascripts/core/dropdown.min.js +2 -0
  65. data/assets/javascripts/core/grid.js +114 -0
  66. data/assets/javascripts/core/grid.min.js +2 -0
  67. data/assets/javascripts/core/modal.js +384 -0
  68. data/assets/javascripts/core/modal.min.js +2 -0
  69. data/assets/javascripts/core/nav.js +136 -0
  70. data/assets/javascripts/core/nav.min.js +2 -0
  71. data/assets/javascripts/core/offcanvas.js +180 -0
  72. data/assets/javascripts/core/offcanvas.min.js +2 -0
  73. data/assets/javascripts/core/scrollspy.js +208 -0
  74. data/assets/javascripts/core/scrollspy.min.js +2 -0
  75. data/assets/javascripts/core/smooth-scroll.js +62 -0
  76. data/assets/javascripts/core/smooth-scroll.min.js +2 -0
  77. data/assets/javascripts/core/switcher.js +309 -0
  78. data/assets/javascripts/core/switcher.min.js +2 -0
  79. data/assets/javascripts/core/tab.js +167 -0
  80. data/assets/javascripts/core/tab.min.js +2 -0
  81. data/assets/javascripts/core/toggle.js +120 -0
  82. data/assets/javascripts/core/toggle.min.js +2 -0
  83. data/assets/javascripts/core/touch.js +175 -0
  84. data/assets/javascripts/core/touch.min.js +2 -0
  85. data/assets/javascripts/core/utility.js +289 -0
  86. data/assets/javascripts/core/utility.min.js +2 -0
  87. data/assets/javascripts/uikit-components.js +23 -0
  88. data/assets/javascripts/uikit.js +3706 -0
  89. data/assets/javascripts/uikit.min.js +3 -0
  90. data/assets/stylesheets/components/accordion.scss +94 -0
  91. data/assets/stylesheets/components/autocomplete.scss +102 -0
  92. data/assets/stylesheets/components/datepicker.scss +197 -0
  93. data/assets/stylesheets/components/dotnav.scss +212 -0
  94. data/assets/stylesheets/components/form-advanced.scss +128 -0
  95. data/assets/stylesheets/components/form-file.scss +63 -0
  96. data/assets/stylesheets/components/form-password.scss +74 -0
  97. data/assets/stylesheets/components/form-select.scss +66 -0
  98. data/assets/stylesheets/components/htmleditor.scss +269 -0
  99. data/assets/stylesheets/components/nestable.scss +229 -0
  100. data/assets/stylesheets/components/notify.scss +190 -0
  101. data/assets/stylesheets/components/placeholder.scss +66 -0
  102. data/assets/stylesheets/components/progress.scss +173 -0
  103. data/assets/stylesheets/components/search.scss +309 -0
  104. data/assets/stylesheets/components/slidenav.scss +183 -0
  105. data/assets/stylesheets/components/slider.scss +131 -0
  106. data/assets/stylesheets/components/slideshow.scss +208 -0
  107. data/assets/stylesheets/components/sortable.scss +122 -0
  108. data/assets/stylesheets/components/sticky.scss +64 -0
  109. data/assets/stylesheets/components/tooltip.scss +177 -0
  110. data/assets/stylesheets/components/upload.scss +34 -0
  111. data/assets/stylesheets/core/alert.scss +141 -0
  112. data/assets/stylesheets/core/animation.scss +599 -0
  113. data/assets/stylesheets/core/article.scss +139 -0
  114. data/assets/stylesheets/core/badge.scss +110 -0
  115. data/assets/stylesheets/core/base-noconflict.scss +397 -0
  116. data/assets/stylesheets/core/base.scss +541 -0
  117. data/assets/stylesheets/core/block.scss +153 -0
  118. data/assets/stylesheets/core/breadcrumb.scss +86 -0
  119. data/assets/stylesheets/core/button.scss +406 -0
  120. data/assets/stylesheets/core/close.scss +132 -0
  121. data/assets/stylesheets/core/column.scss +209 -0
  122. data/assets/stylesheets/core/comment.scss +172 -0
  123. data/assets/stylesheets/core/contrast.scss +493 -0
  124. data/assets/stylesheets/core/cover.scss +70 -0
  125. data/assets/stylesheets/core/description-list.scss +71 -0
  126. data/assets/stylesheets/core/dropdown.scss +280 -0
  127. data/assets/stylesheets/core/flex.scss +320 -0
  128. data/assets/stylesheets/core/form.scss +627 -0
  129. data/assets/stylesheets/core/grid.scss +688 -0
  130. data/assets/stylesheets/core/icon.scss +897 -0
  131. data/assets/stylesheets/core/list.scss +102 -0
  132. data/assets/stylesheets/core/modal.scss +341 -0
  133. data/assets/stylesheets/core/nav.scss +468 -0
  134. data/assets/stylesheets/core/navbar.scss +325 -0
  135. data/assets/stylesheets/core/offcanvas.scss +168 -0
  136. data/assets/stylesheets/core/overlay.scss +534 -0
  137. data/assets/stylesheets/core/pagination.scss +197 -0
  138. data/assets/stylesheets/core/panel.scss +332 -0
  139. data/assets/stylesheets/core/print.scss +59 -0
  140. data/assets/stylesheets/core/subnav.scss +213 -0
  141. data/assets/stylesheets/core/switcher.scss +38 -0
  142. data/assets/stylesheets/core/tab.scss +368 -0
  143. data/assets/stylesheets/core/table.scss +147 -0
  144. data/assets/stylesheets/core/text.scss +128 -0
  145. data/assets/stylesheets/core/thumbnail.scss +122 -0
  146. data/assets/stylesheets/core/thumbnav.scss +122 -0
  147. data/assets/stylesheets/core/utility.scss +606 -0
  148. data/assets/stylesheets/core/variables.scss +23 -0
  149. data/assets/stylesheets/uikit-components.scss +22 -0
  150. data/assets/stylesheets/uikit-mixins.scss +327 -0
  151. data/assets/stylesheets/uikit-variables.scss +817 -0
  152. data/assets/stylesheets/uikit.scss +56 -0
  153. data/lib/uikit-rails.rb +2 -2
  154. data/lib/uikit-rails/engine.rb +11 -1
  155. data/lib/uikit-rails/version.rb +1 -3
  156. data/uikit-rails.gemspec +15 -16
  157. metadata +169 -44
  158. data/README.rb +0 -1
  159. data/vendor/assets/javascripts/ui.card.js +0 -115
  160. data/vendor/assets/javascripts/ui.color-picker.js +0 -351
  161. data/vendor/assets/javascripts/ui.confirmation.js +0 -133
  162. data/vendor/assets/javascripts/ui.dialog.js +0 -252
  163. data/vendor/assets/javascripts/ui.emitter.js +0 -99
  164. data/vendor/assets/javascripts/ui.js +0 -1641
  165. data/vendor/assets/javascripts/ui.menu.js +0 -238
  166. data/vendor/assets/javascripts/ui.notification.js +0 -240
  167. data/vendor/assets/javascripts/ui.overlay.js +0 -79
  168. data/vendor/assets/javascripts/ui.split-button.js +0 -108
  169. data/vendor/assets/stylesheets/ui.card.css +0 -55
  170. data/vendor/assets/stylesheets/ui.color-picker.css +0 -6
  171. data/vendor/assets/stylesheets/ui.confirmation.css +0 -7
  172. data/vendor/assets/stylesheets/ui.css +0 -337
  173. data/vendor/assets/stylesheets/ui.dialog.css +0 -92
  174. data/vendor/assets/stylesheets/ui.menu.css +0 -32
  175. data/vendor/assets/stylesheets/ui.notification.css +0 -107
  176. data/vendor/assets/stylesheets/ui.overlay.css +0 -16
  177. data/vendor/assets/stylesheets/ui.split-button.css +0 -27
@@ -0,0 +1,2 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ !function(e){var t;window.UIkit&&(t=e(UIkit)),"function"==typeof define&&define.amd&&define("uikit-upload",["uikit"],function(){return t||e(UIkit)})}(function(e){"use strict";function t(o,a){function r(t,n){var o=new FormData,a=new XMLHttpRequest;if(n.before(n,t)!==!1){for(var r,i=0;r=t[i];i++)o.append(n.param,r);for(var l in n.params)o.append(l,n.params[l]);a.upload.addEventListener("progress",function(e){var t=e.loaded/e.total*100;n.progress(t,e)},!1),a.addEventListener("loadstart",function(e){n.loadstart(e)},!1),a.addEventListener("load",function(e){n.load(e)},!1),a.addEventListener("loadend",function(e){n.loadend(e)},!1),a.addEventListener("error",function(e){n.error(e)},!1),a.addEventListener("abort",function(e){n.abort(e)},!1),a.open(n.method,n.action,!0),"json"==n.type&&a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(n.readystatechange(a),4==a.readyState){var t=a.responseText;if("json"==n.type)try{t=e.$.parseJSON(t)}catch(o){t=!1}n.complete(t,a)}},n.beforeSend(a),a.send(o)}}if(!e.support.ajaxupload)return this;if(a=e.$.extend({},t.defaults,a),o.length){if("*.*"!==a.allow)for(var i,l=0;i=o[l];l++)if(!n(a.allow,i.name))return"string"==typeof a.notallowed?alert(a.notallowed):a.notallowed(i,a),void 0;var s=a.complete;if(a.single){var d=o.length,f=0,p=!0;a.beforeAll(o),a.complete=function(e,t){f+=1,s(e,t),a.filelimit&&f>=a.filelimit&&(p=!1),p&&d>f?r([o[f]],a):a.allcomplete(e,t)},r([o[0]],a)}else a.complete=function(e,t){s(e,t),a.allcomplete(e,t)},r(o,a)}}function n(e,t){var n="^"+e.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$";return n="^"+n+"$",null!==t.match(new RegExp(n,"i"))}return e.component("uploadSelect",{init:function(){var e=this;this.on("change",function(){t(e.element[0].files,e.options);var n=e.element.clone(!0).data("uploadSelect",e);e.element.replaceWith(n),e.element=n})}}),e.component("uploadDrop",{defaults:{dragoverClass:"uk-dragover"},init:function(){var e=this,n=!1;this.on("drop",function(n){n.dataTransfer&&n.dataTransfer.files&&(n.stopPropagation(),n.preventDefault(),e.element.removeClass(e.options.dragoverClass),e.element.trigger("dropped.uk.upload",[n.dataTransfer.files]),t(n.dataTransfer.files,e.options))}).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}).on("dragover",function(t){t.stopPropagation(),t.preventDefault(),n||(e.element.addClass(e.options.dragoverClass),n=!0)}).on("dragleave",function(t){t.stopPropagation(),t.preventDefault(),e.element.removeClass(e.options.dragoverClass),n=!1})}}),e.support.ajaxupload=function(){function e(){var e=document.createElement("INPUT");return e.type="file","files"in e}function t(){var e=new XMLHttpRequest;return!!(e&&"upload"in e&&"onprogress"in e.upload)}function n(){return!!window.FormData}return e()&&t()&&n()}(),e.support.ajaxupload&&e.$.event.props.push("dataTransfer"),t.defaults={action:"",single:!0,method:"POST",param:"files[]",params:{},allow:"*.*",type:"text",filelimit:!1,before:function(){},beforeSend:function(){},beforeAll:function(){},loadstart:function(){},load:function(){},loadend:function(){},error:function(){},abort:function(){},progress:function(){},complete:function(){},allcomplete:function(){},readystatechange:function(){},notallowed:function(e,t){alert("Only the following file types are allowed: "+t.allow)}},e.Utils.xhrupload=t,t});
@@ -0,0 +1,66 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ (function(UI) {
3
+
4
+ "use strict";
5
+
6
+ UI.component('alert', {
7
+
8
+ defaults: {
9
+ "fade": true,
10
+ "duration": 200,
11
+ "trigger": ".uk-alert-close"
12
+ },
13
+
14
+ boot: function() {
15
+
16
+ // init code
17
+ UI.$html.on("click.alert.uikit", "[data-uk-alert]", function(e) {
18
+
19
+ var ele = UI.$(this);
20
+
21
+ if (!ele.data("alert")) {
22
+
23
+ var alert = UI.alert(ele, UI.Utils.options(ele.attr("data-uk-alert")));
24
+
25
+ if (UI.$(e.target).is(alert.options.trigger)) {
26
+ e.preventDefault();
27
+ alert.close();
28
+ }
29
+ }
30
+ });
31
+ },
32
+
33
+ init: function() {
34
+
35
+ var $this = this;
36
+
37
+ this.on("click", this.options.trigger, function(e) {
38
+ e.preventDefault();
39
+ $this.close();
40
+ });
41
+ },
42
+
43
+ close: function() {
44
+
45
+ var element = this.trigger("close.uk.alert"),
46
+ removeElement = function () {
47
+ this.trigger("closed.uk.alert").remove();
48
+ }.bind(this);
49
+
50
+ if (this.options.fade) {
51
+ element.css("overflow", "hidden").css("max-height", element.height()).animate({
52
+ "height" : 0,
53
+ "opacity" : 0,
54
+ "padding-top" : 0,
55
+ "padding-bottom" : 0,
56
+ "margin-top" : 0,
57
+ "margin-bottom" : 0
58
+ }, this.options.duration, removeElement);
59
+ } else {
60
+ removeElement();
61
+ }
62
+ }
63
+
64
+ });
65
+
66
+ })(UIkit);
@@ -0,0 +1,2 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ !function(t){"use strict";t.component("alert",{defaults:{fade:!0,duration:200,trigger:".uk-alert-close"},boot:function(){t.$html.on("click.alert.uikit","[data-uk-alert]",function(i){var o=t.$(this);if(!o.data("alert")){var e=t.alert(o,t.Utils.options(o.attr("data-uk-alert")));t.$(i.target).is(e.options.trigger)&&(i.preventDefault(),e.close())}})},init:function(){var t=this;this.on("click",this.options.trigger,function(i){i.preventDefault(),t.close()})},close:function(){var t=this.trigger("close.uk.alert"),i=function(){this.trigger("closed.uk.alert").remove()}.bind(this);this.options.fade?t.css("overflow","hidden").css("max-height",t.height()).animate({height:0,opacity:0,"padding-top":0,"padding-bottom":0,"margin-top":0,"margin-bottom":0},this.options.duration,i):i()}})}(UIkit);
@@ -0,0 +1,157 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ (function(UI) {
3
+
4
+ "use strict";
5
+
6
+ UI.component('buttonRadio', {
7
+
8
+ defaults: {
9
+ "activeClass": 'uk-active',
10
+ "target": ".uk-button"
11
+ },
12
+
13
+ boot: function() {
14
+
15
+ // init code
16
+ UI.$html.on("click.buttonradio.uikit", "[data-uk-button-radio]", function(e) {
17
+
18
+ var ele = UI.$(this);
19
+
20
+ if (!ele.data("buttonRadio")) {
21
+
22
+ var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr("data-uk-button-radio"))),
23
+ target = UI.$(e.target);
24
+
25
+ if (target.is(obj.options.target)) {
26
+ target.trigger("click");
27
+ }
28
+ }
29
+ });
30
+ },
31
+
32
+ init: function() {
33
+
34
+ var $this = this;
35
+
36
+ // Init ARIA
37
+ this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
38
+
39
+ this.on("click", this.options.target, function(e) {
40
+
41
+ var ele = UI.$(this);
42
+
43
+ if (ele.is('a[href="#"]')) e.preventDefault();
44
+
45
+ $this.find($this.options.target).not(ele).removeClass($this.options.activeClass).blur();
46
+ ele.addClass($this.options.activeClass);
47
+
48
+ // Update ARIA
49
+ $this.find($this.options.target).not(ele).attr('aria-checked', 'false');
50
+ ele.attr('aria-checked', 'true');
51
+
52
+ $this.trigger("change.uk.button", [ele]);
53
+ });
54
+
55
+ },
56
+
57
+ getSelected: function() {
58
+ return this.find('.' + this.options.activeClass);
59
+ }
60
+ });
61
+
62
+ UI.component('buttonCheckbox', {
63
+
64
+ defaults: {
65
+ "activeClass": 'uk-active',
66
+ "target": ".uk-button"
67
+ },
68
+
69
+ boot: function() {
70
+
71
+ UI.$html.on("click.buttoncheckbox.uikit", "[data-uk-button-checkbox]", function(e) {
72
+ var ele = UI.$(this);
73
+
74
+ if (!ele.data("buttonCheckbox")) {
75
+
76
+ var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr("data-uk-button-checkbox"))),
77
+ target = UI.$(e.target);
78
+
79
+ if (target.is(obj.options.target)) {
80
+ target.trigger("click");
81
+ }
82
+ }
83
+ });
84
+ },
85
+
86
+ init: function() {
87
+
88
+ var $this = this;
89
+
90
+ // Init ARIA
91
+ this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true');
92
+
93
+ this.on("click", this.options.target, function(e) {
94
+ var ele = UI.$(this);
95
+
96
+ if (ele.is('a[href="#"]')) e.preventDefault();
97
+
98
+ ele.toggleClass($this.options.activeClass).blur();
99
+
100
+ // Update ARIA
101
+ ele.attr('aria-checked', ele.hasClass($this.options.activeClass));
102
+
103
+ $this.trigger("change.uk.button", [ele]);
104
+ });
105
+
106
+ },
107
+
108
+ getSelected: function() {
109
+ return this.find('.' + this.options.activeClass);
110
+ }
111
+ });
112
+
113
+
114
+ UI.component('button', {
115
+
116
+ defaults: {},
117
+
118
+ boot: function() {
119
+
120
+ UI.$html.on("click.button.uikit", "[data-uk-button]", function(e) {
121
+ var ele = UI.$(this);
122
+
123
+ if (!ele.data("button")) {
124
+
125
+ var obj = UI.button(ele, UI.Utils.options(ele.attr("data-uk-button")));
126
+ ele.trigger("click");
127
+ }
128
+ });
129
+ },
130
+
131
+ init: function() {
132
+
133
+ var $this = this;
134
+
135
+ // Init ARIA
136
+ this.element.attr('aria-pressed', this.element.hasClass("uk-active"));
137
+
138
+ this.on("click", function(e) {
139
+
140
+ if ($this.element.is('a[href="#"]')) e.preventDefault();
141
+
142
+ $this.toggle();
143
+ $this.trigger("change.uk.button", [$this.element.blur().hasClass("uk-active")]);
144
+ });
145
+
146
+ },
147
+
148
+ toggle: function() {
149
+ this.element.toggleClass("uk-active");
150
+
151
+ // Update ARIA
152
+ this.element.attr('aria-pressed', this.element.hasClass("uk-active"));
153
+ }
154
+ });
155
+
156
+ })(UIkit);
157
+
@@ -0,0 +1,2 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ !function(t){"use strict";t.component("buttonRadio",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttonradio.uikit","[data-uk-button-radio]",function(i){var a=t.$(this);if(!a.data("buttonRadio")){var e=t.buttonRadio(a,t.Utils.options(a.attr("data-uk-button-radio"))),o=t.$(i.target);o.is(e.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(a){var e=t.$(this);e.is('a[href="#"]')&&a.preventDefault(),i.find(i.options.target).not(e).removeClass(i.options.activeClass).blur(),e.addClass(i.options.activeClass),i.find(i.options.target).not(e).attr("aria-checked","false"),e.attr("aria-checked","true"),i.trigger("change.uk.button",[e])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("buttonCheckbox",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttoncheckbox.uikit","[data-uk-button-checkbox]",function(i){var a=t.$(this);if(!a.data("buttonCheckbox")){var e=t.buttonCheckbox(a,t.Utils.options(a.attr("data-uk-button-checkbox"))),o=t.$(i.target);o.is(e.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(a){var e=t.$(this);e.is('a[href="#"]')&&a.preventDefault(),e.toggleClass(i.options.activeClass).blur(),e.attr("aria-checked",e.hasClass(i.options.activeClass)),i.trigger("change.uk.button",[e])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("button",{defaults:{},boot:function(){t.$html.on("click.button.uikit","[data-uk-button]",function(){var i=t.$(this);if(!i.data("button")){{t.button(i,t.Utils.options(i.attr("data-uk-button")))}i.trigger("click")}})},init:function(){var t=this;this.element.attr("aria-pressed",this.element.hasClass("uk-active")),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle(),t.trigger("change.uk.button",[t.element.blur().hasClass("uk-active")])})},toggle:function(){this.element.toggleClass("uk-active"),this.element.attr("aria-pressed",this.element.hasClass("uk-active"))}})}(UIkit);
@@ -0,0 +1,730 @@
1
+ /*! UIkit 2.24.2 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2
+ (function(core) {
3
+
4
+ if (typeof define == "function" && define.amd) { // AMD
5
+
6
+ define("uikit", function(){
7
+
8
+ var uikit = window.UIkit || core(window, window.jQuery, window.document);
9
+
10
+ uikit.load = function(res, req, onload, config) {
11
+
12
+ var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : "").replace(/\/+$/g, "");
13
+
14
+ if (!base) {
15
+ throw new Error( "Please define base path to UIkit in the requirejs config." );
16
+ }
17
+
18
+ for (i = 0; i < resources.length; i += 1) {
19
+ var resource = resources[i].replace(/\./g, '/');
20
+ load.push(base+'/components/'+resource);
21
+ }
22
+
23
+ req(load, function() {
24
+ onload(uikit);
25
+ });
26
+ };
27
+
28
+ return uikit;
29
+ });
30
+ }
31
+
32
+ if (!window.jQuery) {
33
+ throw new Error( "UIkit requires jQuery" );
34
+ }
35
+
36
+ if (window && window.jQuery) {
37
+ core(window, window.jQuery, window.document);
38
+ }
39
+
40
+
41
+ })(function(global, $, doc) {
42
+
43
+ "use strict";
44
+
45
+ var UI = {}, _UI = global.UIkit ? Object.create(global.UIkit) : undefined;
46
+
47
+ UI.version = '2.24.2';
48
+
49
+ UI.noConflict = function() {
50
+ // restore UIkit version
51
+ if (_UI) {
52
+ global.UIkit = _UI;
53
+ $.UIkit = _UI;
54
+ $.fn.uk = _UI.fn;
55
+ }
56
+
57
+ return UI;
58
+ };
59
+
60
+ UI.prefix = function(str) {
61
+ return str;
62
+ };
63
+
64
+ // cache jQuery
65
+ UI.$ = $;
66
+
67
+ UI.$doc = UI.$(document);
68
+ UI.$win = UI.$(window);
69
+ UI.$html = UI.$('html');
70
+
71
+ UI.support = {};
72
+ UI.support.transition = (function() {
73
+
74
+ var transitionEnd = (function() {
75
+
76
+ var element = doc.body || doc.documentElement,
77
+ transEndEventNames = {
78
+ WebkitTransition : 'webkitTransitionEnd',
79
+ MozTransition : 'transitionend',
80
+ OTransition : 'oTransitionEnd otransitionend',
81
+ transition : 'transitionend'
82
+ }, name;
83
+
84
+ for (name in transEndEventNames) {
85
+ if (element.style[name] !== undefined) return transEndEventNames[name];
86
+ }
87
+ }());
88
+
89
+ return transitionEnd && { end: transitionEnd };
90
+ })();
91
+
92
+ UI.support.animation = (function() {
93
+
94
+ var animationEnd = (function() {
95
+
96
+ var element = doc.body || doc.documentElement,
97
+ animEndEventNames = {
98
+ WebkitAnimation : 'webkitAnimationEnd',
99
+ MozAnimation : 'animationend',
100
+ OAnimation : 'oAnimationEnd oanimationend',
101
+ animation : 'animationend'
102
+ }, name;
103
+
104
+ for (name in animEndEventNames) {
105
+ if (element.style[name] !== undefined) return animEndEventNames[name];
106
+ }
107
+ }());
108
+
109
+ return animationEnd && { end: animationEnd };
110
+ })();
111
+
112
+ // requestAnimationFrame polyfill
113
+ //https://github.com/darius/requestAnimationFrame
114
+ (function() {
115
+
116
+ Date.now = Date.now || function() { return new Date().getTime(); };
117
+
118
+ var vendors = ['webkit', 'moz'];
119
+ for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
120
+ var vp = vendors[i];
121
+ window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];
122
+ window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']
123
+ || window[vp+'CancelRequestAnimationFrame']);
124
+ }
125
+ if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy
126
+ || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
127
+ var lastTime = 0;
128
+ window.requestAnimationFrame = function(callback) {
129
+ var now = Date.now();
130
+ var nextTime = Math.max(lastTime + 16, now);
131
+ return setTimeout(function() { callback(lastTime = nextTime); },
132
+ nextTime - now);
133
+ };
134
+ window.cancelAnimationFrame = clearTimeout;
135
+ }
136
+ }());
137
+
138
+ UI.support.touch = (
139
+ ('ontouchstart' in document) ||
140
+ (global.DocumentTouch && document instanceof global.DocumentTouch) ||
141
+ (global.navigator.msPointerEnabled && global.navigator.msMaxTouchPoints > 0) || //IE 10
142
+ (global.navigator.pointerEnabled && global.navigator.maxTouchPoints > 0) || //IE >=11
143
+ false
144
+ );
145
+
146
+ UI.support.mutationobserver = (global.MutationObserver || global.WebKitMutationObserver || null);
147
+
148
+ UI.Utils = {};
149
+
150
+ UI.Utils.isFullscreen = function() {
151
+ return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false;
152
+ };
153
+
154
+ UI.Utils.str2json = function(str, notevil) {
155
+ try {
156
+ if (notevil) {
157
+ return JSON.parse(str
158
+ // wrap keys without quote with valid double quote
159
+ .replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":';})
160
+ // replacing single quote wrapped ones to double quote
161
+ .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"';})
162
+ );
163
+ } else {
164
+ return (new Function("", "var json = " + str + "; return JSON.parse(JSON.stringify(json));"))();
165
+ }
166
+ } catch(e) { return false; }
167
+ };
168
+
169
+ UI.Utils.debounce = function(func, wait, immediate) {
170
+ var timeout;
171
+ return function() {
172
+ var context = this, args = arguments;
173
+ var later = function() {
174
+ timeout = null;
175
+ if (!immediate) func.apply(context, args);
176
+ };
177
+ var callNow = immediate && !timeout;
178
+ clearTimeout(timeout);
179
+ timeout = setTimeout(later, wait);
180
+ if (callNow) func.apply(context, args);
181
+ };
182
+ };
183
+
184
+ UI.Utils.removeCssRules = function(selectorRegEx) {
185
+ var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref;
186
+
187
+ if(!selectorRegEx) return;
188
+
189
+ setTimeout(function(){
190
+ try {
191
+ _ref = document.styleSheets;
192
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
193
+ stylesheet = _ref[_i];
194
+ idxs = [];
195
+ stylesheet.cssRules = stylesheet.cssRules;
196
+ for (idx = _j = 0, _len1 = stylesheet.cssRules.length; _j < _len1; idx = ++_j) {
197
+ if (stylesheet.cssRules[idx].type === CSSRule.STYLE_RULE && selectorRegEx.test(stylesheet.cssRules[idx].selectorText)) {
198
+ idxs.unshift(idx);
199
+ }
200
+ }
201
+ for (_k = 0, _len2 = idxs.length; _k < _len2; _k++) {
202
+ stylesheet.deleteRule(idxs[_k]);
203
+ }
204
+ }
205
+ } catch (_error) {}
206
+ }, 0);
207
+ };
208
+
209
+ UI.Utils.isInView = function(element, options) {
210
+
211
+ var $element = $(element);
212
+
213
+ if (!$element.is(':visible')) {
214
+ return false;
215
+ }
216
+
217
+ var window_left = UI.$win.scrollLeft(), window_top = UI.$win.scrollTop(), offset = $element.offset(), left = offset.left, top = offset.top;
218
+
219
+ options = $.extend({topoffset:0, leftoffset:0}, options);
220
+
221
+ if (top + $element.height() >= window_top && top - options.topoffset <= window_top + UI.$win.height() &&
222
+ left + $element.width() >= window_left && left - options.leftoffset <= window_left + UI.$win.width()) {
223
+ return true;
224
+ } else {
225
+ return false;
226
+ }
227
+ };
228
+
229
+ UI.Utils.checkDisplay = function(context, initanimation) {
230
+
231
+ var elements = UI.$('[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]', context || document), animated;
232
+
233
+ if (context && !elements.length) {
234
+ elements = $(context);
235
+ }
236
+
237
+ elements.trigger('display.uk.check');
238
+
239
+ // fix firefox / IE animations
240
+ if (initanimation) {
241
+
242
+ if (typeof(initanimation)!='string') {
243
+ initanimation = '[class*="uk-animation-"]';
244
+ }
245
+
246
+ elements.find(initanimation).each(function(){
247
+
248
+ var ele = UI.$(this),
249
+ cls = ele.attr('class'),
250
+ anim = cls.match(/uk\-animation\-(.+)/);
251
+
252
+ ele.removeClass(anim[0]).width();
253
+
254
+ ele.addClass(anim[0]);
255
+ });
256
+ }
257
+
258
+ return elements;
259
+ };
260
+
261
+ UI.Utils.options = function(string) {
262
+
263
+ if ($.isPlainObject(string)) return string;
264
+
265
+ var start = (string ? string.indexOf("{") : -1), options = {};
266
+
267
+ if (start != -1) {
268
+ try {
269
+ options = UI.Utils.str2json(string.substr(start));
270
+ } catch (e) {}
271
+ }
272
+
273
+ return options;
274
+ };
275
+
276
+ UI.Utils.animate = function(element, cls) {
277
+
278
+ var d = $.Deferred();
279
+
280
+ element = UI.$(element);
281
+ cls = cls;
282
+
283
+ element.css('display', 'none').addClass(cls).one(UI.support.animation.end, function() {
284
+ element.removeClass(cls);
285
+ d.resolve();
286
+ }).width();
287
+
288
+ element.css('display', '');
289
+
290
+ return d.promise();
291
+ };
292
+
293
+ UI.Utils.uid = function(prefix) {
294
+ return (prefix || 'id') + (new Date().getTime())+"RAND"+(Math.ceil(Math.random() * 100000));
295
+ };
296
+
297
+ UI.Utils.template = function(str, data) {
298
+
299
+ var tokens = str.replace(/\n/g, '\\n').replace(/\{\{\{\s*(.+?)\s*\}\}\}/g, "{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),
300
+ i=0, toc, cmd, prop, val, fn, output = [], openblocks = 0;
301
+
302
+ while(i < tokens.length) {
303
+
304
+ toc = tokens[i];
305
+
306
+ if(toc.match(/\{\{\s*(.+?)\s*\}\}/)) {
307
+ i = i + 1;
308
+ toc = tokens[i];
309
+ cmd = toc[0];
310
+ prop = toc.substring(toc.match(/^(\^|\#|\!|\~|\:)/) ? 1:0);
311
+
312
+ switch(cmd) {
313
+ case '~':
314
+ output.push("for(var $i=0;$i<"+prop+".length;$i++) { var $item = "+prop+"[$i];");
315
+ openblocks++;
316
+ break;
317
+ case ':':
318
+ output.push("for(var $key in "+prop+") { var $val = "+prop+"[$key];");
319
+ openblocks++;
320
+ break;
321
+ case '#':
322
+ output.push("if("+prop+") {");
323
+ openblocks++;
324
+ break;
325
+ case '^':
326
+ output.push("if(!"+prop+") {");
327
+ openblocks++;
328
+ break;
329
+ case '/':
330
+ output.push("}");
331
+ openblocks--;
332
+ break;
333
+ case '!':
334
+ output.push("__ret.push("+prop+");");
335
+ break;
336
+ default:
337
+ output.push("__ret.push(escape("+prop+"));");
338
+ break;
339
+ }
340
+ } else {
341
+ output.push("__ret.push('"+toc.replace(/\'/g, "\\'")+"');");
342
+ }
343
+ i = i + 1;
344
+ }
345
+
346
+ fn = new Function('$data', [
347
+ 'var __ret = [];',
348
+ 'try {',
349
+ 'with($data){', (!openblocks ? output.join('') : '__ret = ["Not all blocks are closed correctly."]'), '};',
350
+ '}catch(e){__ret = [e.message];}',
351
+ 'return __ret.join("").replace(/\\n\\n/g, "\\n");',
352
+ "function escape(html) { return String(html).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');}"
353
+ ].join("\n"));
354
+
355
+ return data ? fn(data) : fn;
356
+ };
357
+
358
+ UI.Utils.events = {};
359
+ UI.Utils.events.click = UI.support.touch ? 'tap' : 'click';
360
+
361
+ global.UIkit = UI;
362
+
363
+ // deprecated
364
+
365
+ UI.fn = function(command, options) {
366
+
367
+ var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2];
368
+
369
+ if (!UI[component]) {
370
+ $.error("UIkit component [" + component + "] does not exist.");
371
+ return this;
372
+ }
373
+
374
+ return this.each(function() {
375
+ var $this = $(this), data = $this.data(component);
376
+ if (!data) $this.data(component, (data = UI[component](this, method ? undefined : options)));
377
+ if (method) data[method].apply(data, Array.prototype.slice.call(args, 1));
378
+ });
379
+ };
380
+
381
+ $.UIkit = UI;
382
+ $.fn.uk = UI.fn;
383
+
384
+ UI.langdirection = UI.$html.attr("dir") == "rtl" ? "right" : "left";
385
+
386
+ UI.components = {};
387
+
388
+ UI.component = function(name, def) {
389
+
390
+ var fn = function(element, options) {
391
+
392
+ var $this = this;
393
+
394
+ this.UIkit = UI;
395
+ this.element = element ? UI.$(element) : null;
396
+ this.options = $.extend(true, {}, this.defaults, options);
397
+ this.plugins = {};
398
+
399
+ if (this.element) {
400
+ this.element.data(name, this);
401
+ }
402
+
403
+ this.init();
404
+
405
+ (this.options.plugins.length ? this.options.plugins : Object.keys(fn.plugins)).forEach(function(plugin) {
406
+
407
+ if (fn.plugins[plugin].init) {
408
+ fn.plugins[plugin].init($this);
409
+ $this.plugins[plugin] = true;
410
+ }
411
+
412
+ });
413
+
414
+ this.trigger('init.uk.component', [name, this]);
415
+
416
+ return this;
417
+ };
418
+
419
+ fn.plugins = {};
420
+
421
+ $.extend(true, fn.prototype, {
422
+
423
+ defaults : {plugins: []},
424
+
425
+ boot: function(){},
426
+ init: function(){},
427
+
428
+ on: function(a1,a2,a3){
429
+ return UI.$(this.element || this).on(a1,a2,a3);
430
+ },
431
+
432
+ one: function(a1,a2,a3){
433
+ return UI.$(this.element || this).one(a1,a2,a3);
434
+ },
435
+
436
+ off: function(evt){
437
+ return UI.$(this.element || this).off(evt);
438
+ },
439
+
440
+ trigger: function(evt, params) {
441
+ return UI.$(this.element || this).trigger(evt, params);
442
+ },
443
+
444
+ find: function(selector) {
445
+ return UI.$(this.element ? this.element: []).find(selector);
446
+ },
447
+
448
+ proxy: function(obj, methods) {
449
+
450
+ var $this = this;
451
+
452
+ methods.split(' ').forEach(function(method) {
453
+ if (!$this[method]) $this[method] = function() { return obj[method].apply(obj, arguments); };
454
+ });
455
+ },
456
+
457
+ mixin: function(obj, methods) {
458
+
459
+ var $this = this;
460
+
461
+ methods.split(' ').forEach(function(method) {
462
+ if (!$this[method]) $this[method] = obj[method].bind($this);
463
+ });
464
+ },
465
+
466
+ option: function() {
467
+
468
+ if (arguments.length == 1) {
469
+ return this.options[arguments[0]] || undefined;
470
+ } else if (arguments.length == 2) {
471
+ this.options[arguments[0]] = arguments[1];
472
+ }
473
+ }
474
+
475
+ }, def);
476
+
477
+ this.components[name] = fn;
478
+
479
+ this[name] = function() {
480
+
481
+ var element, options;
482
+
483
+ if (arguments.length) {
484
+
485
+ switch(arguments.length) {
486
+ case 1:
487
+
488
+ if (typeof arguments[0] === "string" || arguments[0].nodeType || arguments[0] instanceof jQuery) {
489
+ element = $(arguments[0]);
490
+ } else {
491
+ options = arguments[0];
492
+ }
493
+
494
+ break;
495
+ case 2:
496
+
497
+ element = $(arguments[0]);
498
+ options = arguments[1];
499
+ break;
500
+ }
501
+ }
502
+
503
+ if (element && element.data(name)) {
504
+ return element.data(name);
505
+ }
506
+
507
+ return (new UI.components[name](element, options));
508
+ };
509
+
510
+ if (UI.domready) {
511
+ UI.component.boot(name);
512
+ }
513
+
514
+ return fn;
515
+ };
516
+
517
+ UI.plugin = function(component, name, def) {
518
+ this.components[component].plugins[name] = def;
519
+ };
520
+
521
+ UI.component.boot = function(name) {
522
+
523
+ if (UI.components[name].prototype && UI.components[name].prototype.boot && !UI.components[name].booted) {
524
+ UI.components[name].prototype.boot.apply(UI, []);
525
+ UI.components[name].booted = true;
526
+ }
527
+ };
528
+
529
+ UI.component.bootComponents = function() {
530
+
531
+ for (var component in UI.components) {
532
+ UI.component.boot(component);
533
+ }
534
+ };
535
+
536
+
537
+ // DOM mutation save ready helper function
538
+
539
+ UI.domObservers = [];
540
+ UI.domready = false;
541
+
542
+ UI.ready = function(fn) {
543
+
544
+ UI.domObservers.push(fn);
545
+
546
+ if (UI.domready) {
547
+ fn(document);
548
+ }
549
+ };
550
+
551
+ UI.on = function(a1,a2,a3){
552
+
553
+ if (a1 && a1.indexOf('ready.uk.dom') > -1 && UI.domready) {
554
+ a2.apply(UI.$doc);
555
+ }
556
+
557
+ return UI.$doc.on(a1,a2,a3);
558
+ };
559
+
560
+ UI.one = function(a1,a2,a3){
561
+
562
+ if (a1 && a1.indexOf('ready.uk.dom') > -1 && UI.domready) {
563
+ a2.apply(UI.$doc);
564
+ return UI.$doc;
565
+ }
566
+
567
+ return UI.$doc.one(a1,a2,a3);
568
+ };
569
+
570
+ UI.trigger = function(evt, params) {
571
+ return UI.$doc.trigger(evt, params);
572
+ };
573
+
574
+ UI.domObserve = function(selector, fn) {
575
+
576
+ if(!UI.support.mutationobserver) return;
577
+
578
+ fn = fn || function() {};
579
+
580
+ UI.$(selector).each(function() {
581
+
582
+ var element = this,
583
+ $element = UI.$(element);
584
+
585
+ if ($element.data('observer')) {
586
+ return;
587
+ }
588
+
589
+ try {
590
+
591
+ var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) {
592
+ fn.apply(element, []);
593
+ $element.trigger('changed.uk.dom');
594
+ }, 50));
595
+
596
+ // pass in the target node, as well as the observer options
597
+ observer.observe(element, { childList: true, subtree: true });
598
+
599
+ $element.data('observer', observer);
600
+
601
+ } catch(e) {}
602
+ });
603
+ };
604
+
605
+ UI.init = function(root) {
606
+
607
+ root = root || document;
608
+
609
+ UI.domObservers.forEach(function(fn){
610
+ fn(root);
611
+ });
612
+ };
613
+
614
+ UI.on('domready.uk.dom', function(){
615
+
616
+ UI.init();
617
+
618
+ if (UI.domready) UI.Utils.checkDisplay();
619
+ });
620
+
621
+ $(function(){
622
+
623
+ UI.$body = UI.$('body');
624
+
625
+ UI.ready(function(context){
626
+ UI.domObserve('[data-uk-observe]');
627
+ });
628
+
629
+ UI.on('changed.uk.dom', function(e) {
630
+ UI.init(e.target);
631
+ UI.Utils.checkDisplay(e.target);
632
+ });
633
+
634
+ UI.trigger('beforeready.uk.dom');
635
+
636
+ UI.component.bootComponents();
637
+
638
+ // custom scroll observer
639
+ requestAnimationFrame((function(){
640
+
641
+ var memory = {x: window.pageXOffset, y:window.pageYOffset}, dir;
642
+
643
+ var fn = function(){
644
+
645
+ if (memory.x != window.pageXOffset || memory.y != window.pageYOffset) {
646
+
647
+ dir = {x: 0 , y: 0};
648
+
649
+ if (window.pageXOffset != memory.x) dir.x = window.pageXOffset > memory.x ? 1:-1;
650
+ if (window.pageYOffset != memory.y) dir.y = window.pageYOffset > memory.y ? 1:-1;
651
+
652
+ memory = {
653
+ "dir": dir, "x": window.pageXOffset, "y": window.pageYOffset
654
+ };
655
+
656
+ UI.$doc.trigger('scrolling.uk.document', [memory]);
657
+ }
658
+
659
+ requestAnimationFrame(fn);
660
+ };
661
+
662
+ if (UI.support.touch) {
663
+ UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn);
664
+ }
665
+
666
+ if (memory.x || memory.y) fn();
667
+
668
+ return fn;
669
+
670
+ })());
671
+
672
+ // run component init functions on dom
673
+ UI.trigger('domready.uk.dom');
674
+
675
+ if (UI.support.touch) {
676
+
677
+ // remove css hover rules for touch devices
678
+ // UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/);
679
+
680
+ // viewport unit fix for uk-height-viewport - should be fixed in iOS 8
681
+ if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
682
+
683
+ UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){
684
+
685
+ var fn = function() {
686
+ $('.uk-height-viewport').css('height', window.innerHeight);
687
+ return fn;
688
+ };
689
+
690
+ return fn();
691
+
692
+ })(), 100));
693
+ }
694
+ }
695
+
696
+ UI.trigger('afterready.uk.dom');
697
+
698
+ // mark that domready is left behind
699
+ UI.domready = true;
700
+ });
701
+
702
+ // add touch identifier class
703
+ UI.$html.addClass(UI.support.touch ? "uk-touch" : "uk-notouch");
704
+
705
+ // add uk-hover class on tap to support overlays on touch devices
706
+ if (UI.support.touch) {
707
+
708
+ var hoverset = false,
709
+ exclude,
710
+ hovercls = 'uk-hover',
711
+ selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover';
712
+
713
+ UI.$html.on('mouseenter touchstart MSPointerDown pointerdown', selector, function() {
714
+
715
+ if (hoverset) $('.'+hovercls).removeClass(hovercls);
716
+
717
+ hoverset = $(this).addClass(hovercls);
718
+
719
+ }).on('mouseleave touchend MSPointerUp pointerup', function(e) {
720
+
721
+ exclude = $(e.target).parents(selector);
722
+
723
+ if (hoverset) {
724
+ hoverset.not(exclude).removeClass(hovercls);
725
+ }
726
+ });
727
+ }
728
+
729
+ return UI;
730
+ });