flatui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.md +29 -0
- data/lib/flatui.rb +8 -0
- data/lib/flatui/version.rb +5 -0
- data/vendor/assets/javascripts/bootstrap-tooltip.js +353 -0
- data/vendor/assets/javascripts/custom_checkbox_and_radio.js +53 -0
- data/vendor/assets/javascripts/custom_radio.js +28 -0
- data/vendor/assets/javascripts/flat-ui-app.js +51 -0
- data/vendor/assets/javascripts/html5shiv.js +8 -0
- data/vendor/assets/javascripts/icon-font-ie7.js +44 -0
- data/vendor/assets/javascripts/jquery.dropkick-1.0.0.js +400 -0
- data/vendor/assets/javascripts/jquery.placeholder.js +157 -0
- data/vendor/assets/javascripts/jquery.tagsinput.js +354 -0
- data/vendor/assets/javascripts/lte-ie7-24.js +44 -0
- data/vendor/assets/stylesheets/bootstrap.css +6041 -0
- data/vendor/assets/stylesheets/flat-ui.css +2535 -0
- metadata +110 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
var toggleHandler = function(toggle) {
|
2
|
+
var toggle = toggle;
|
3
|
+
var radio = $(toggle).find("input");
|
4
|
+
|
5
|
+
var checkToggleState = function() {
|
6
|
+
if (radio.eq(0).is(":checked")) {
|
7
|
+
$(toggle).removeClass("toggle-off");
|
8
|
+
} else {
|
9
|
+
$(toggle).addClass("toggle-off");
|
10
|
+
}
|
11
|
+
};
|
12
|
+
|
13
|
+
checkToggleState();
|
14
|
+
|
15
|
+
radio.eq(0).click(function() {
|
16
|
+
$(toggle).toggleClass("toggle-off");
|
17
|
+
});
|
18
|
+
|
19
|
+
radio.eq(1).click(function() {
|
20
|
+
$(toggle).toggleClass("toggle-off");
|
21
|
+
});
|
22
|
+
};
|
23
|
+
|
24
|
+
$(document).ready(function() {
|
25
|
+
$(".toggle").each(function(index, toggle) {
|
26
|
+
toggleHandler(toggle);
|
27
|
+
});
|
28
|
+
});
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// Some general UI pack related JS
|
2
|
+
|
3
|
+
$(function () {
|
4
|
+
// Custom selects
|
5
|
+
$("select").dropkick();
|
6
|
+
});
|
7
|
+
|
8
|
+
$(document).ready(function() {
|
9
|
+
// Todo list
|
10
|
+
$(".todo li").click(function() {
|
11
|
+
$(this).toggleClass("todo-done");
|
12
|
+
});
|
13
|
+
|
14
|
+
// Init tooltips
|
15
|
+
$("[data-toggle=tooltip]").tooltip("show");
|
16
|
+
|
17
|
+
// Init tags input
|
18
|
+
$("#tagsinput").tagsInput();
|
19
|
+
|
20
|
+
// Init jQuery UI slider
|
21
|
+
$("#slider").slider({
|
22
|
+
min: 1,
|
23
|
+
max: 5,
|
24
|
+
value: 2,
|
25
|
+
orientation: "horizontal",
|
26
|
+
range: "min",
|
27
|
+
});
|
28
|
+
|
29
|
+
// JS input/textarea placeholder
|
30
|
+
$("input, textarea").placeholder();
|
31
|
+
|
32
|
+
// Make pagination demo work
|
33
|
+
$(".pagination a").click(function() {
|
34
|
+
if (!$(this).parent().hasClass("previous") && !$(this).parent().hasClass("next")) {
|
35
|
+
$(this).parent().siblings("li").removeClass("active");
|
36
|
+
$(this).parent().addClass("active");
|
37
|
+
}
|
38
|
+
});
|
39
|
+
|
40
|
+
$(".btn-group a").click(function() {
|
41
|
+
$(this).siblings().removeClass("active");
|
42
|
+
$(this).addClass("active");
|
43
|
+
});
|
44
|
+
|
45
|
+
// Disable link click not scroll top
|
46
|
+
$("a[href='#']").click(function() {
|
47
|
+
return false
|
48
|
+
});
|
49
|
+
|
50
|
+
});
|
51
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
/*
|
2
|
+
HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
3
|
+
*/
|
4
|
+
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
|
5
|
+
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
|
6
|
+
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
|
7
|
+
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
|
8
|
+
for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
|
@@ -0,0 +1,44 @@
|
|
1
|
+
/* Use this script if you need to support IE 7 and IE 6. */
|
2
|
+
|
3
|
+
window.onload = function() {
|
4
|
+
function addIcon(el, entity) {
|
5
|
+
var html = el.innerHTML;
|
6
|
+
el.innerHTML = '<span style="font-family: \'Flat-UI-Icons-16\'">' + entity + '</span>' + html;
|
7
|
+
}
|
8
|
+
var icons = {
|
9
|
+
'fui-volume-16' : '',
|
10
|
+
'fui-video-16' : '',
|
11
|
+
'fui-time-16' : '',
|
12
|
+
'fui-settings-16' : '',
|
13
|
+
'fui-plus-16' : '',
|
14
|
+
'fui-new-16' : '',
|
15
|
+
'fui-menu-16' : '',
|
16
|
+
'fui-man-16' : '',
|
17
|
+
'fui-mail-16' : '',
|
18
|
+
'fui-lock-16' : '',
|
19
|
+
'fui-location-16' : '',
|
20
|
+
'fui-heart-16' : '',
|
21
|
+
'fui-eye-16' : '',
|
22
|
+
'fui-cross-16' : '',
|
23
|
+
'fui-cmd-16' : '',
|
24
|
+
'fui-checkround-16' : '',
|
25
|
+
'fui-checkmark-16' : '',
|
26
|
+
'fui-camera-16' : '',
|
27
|
+
'fui-calendar-16' : '',
|
28
|
+
'fui-bubble-16' : ''
|
29
|
+
},
|
30
|
+
els = document.getElementsByTagName('*'),
|
31
|
+
i, attr, html, c, el;
|
32
|
+
for (i = 0; i < els.length; i += 1) {
|
33
|
+
el = els[i];
|
34
|
+
attr = el.getAttribute('data-icon');
|
35
|
+
if (attr) {
|
36
|
+
addIcon(el, attr);
|
37
|
+
}
|
38
|
+
c = el.className;
|
39
|
+
c = c.match(/fui-[^\s'"]+/);
|
40
|
+
if (c && icons[c[0]]) {
|
41
|
+
addIcon(el, icons[c[0]]);
|
42
|
+
}
|
43
|
+
}
|
44
|
+
};
|
@@ -0,0 +1,400 @@
|
|
1
|
+
/**
|
2
|
+
* DropKick
|
3
|
+
*
|
4
|
+
* Highly customizable <select> lists
|
5
|
+
* https://github.com/JamieLottering/DropKick
|
6
|
+
*
|
7
|
+
* © 2011 Jamie Lottering <http://github.com/JamieLottering>
|
8
|
+
* <http://twitter.com/JamieLottering>
|
9
|
+
*
|
10
|
+
*/
|
11
|
+
(function ($, window, document) {
|
12
|
+
|
13
|
+
document.documentElement.className = document.documentElement.className + ' dk_fouc';
|
14
|
+
|
15
|
+
var
|
16
|
+
// Public methods exposed to $.fn.dropkick()
|
17
|
+
methods = {},
|
18
|
+
|
19
|
+
// Cache every <select> element that gets dropkicked
|
20
|
+
lists = [],
|
21
|
+
|
22
|
+
// Convenience keys for keyboard navigation
|
23
|
+
keyMap = {
|
24
|
+
'left' : 37,
|
25
|
+
'up' : 38,
|
26
|
+
'right' : 39,
|
27
|
+
'down' : 40,
|
28
|
+
'enter' : 13
|
29
|
+
},
|
30
|
+
|
31
|
+
// HTML template for the dropdowns
|
32
|
+
dropdownTemplate = [
|
33
|
+
'<div class="dk_container {{ classname }}" id="dk_container_{{ id }}" tabindex="{{ tabindex }}">',
|
34
|
+
'<a class="dk_toggle">',
|
35
|
+
'<span class="dk_label">{{ label }}</span>',
|
36
|
+
'<span class="select-icon"></span>',
|
37
|
+
'</a>',
|
38
|
+
'<div class="dk_options">',
|
39
|
+
'<ul class="dk_options_inner">',
|
40
|
+
'</ul>',
|
41
|
+
'</div>',
|
42
|
+
'</div>'
|
43
|
+
].join(''),
|
44
|
+
|
45
|
+
// HTML template for dropdown options
|
46
|
+
optionTemplate = '<li class="{{ current }}"><a data-dk-dropdown-value="{{ value }}">{{ text }}</a></li>',
|
47
|
+
|
48
|
+
// Some nice default values
|
49
|
+
defaults = {
|
50
|
+
startSpeed : 100, // I recommend a high value here, I feel it makes the changes less noticeable to the user
|
51
|
+
theme : false,
|
52
|
+
change : false
|
53
|
+
},
|
54
|
+
|
55
|
+
// Make sure we only bind keydown on the document once
|
56
|
+
keysBound = false
|
57
|
+
;
|
58
|
+
|
59
|
+
// Called by using $('foo').dropkick();
|
60
|
+
methods.init = function (settings) {
|
61
|
+
settings = $.extend({}, defaults, settings);
|
62
|
+
|
63
|
+
return this.each(function () {
|
64
|
+
var
|
65
|
+
// The current <select> element
|
66
|
+
$select = $(this),
|
67
|
+
|
68
|
+
// Store a reference to the originally selected <option> element
|
69
|
+
$original = $select.find(':selected').first(),
|
70
|
+
|
71
|
+
// Save all of the <option> elements
|
72
|
+
$options = $select.find('option'),
|
73
|
+
|
74
|
+
// We store lots of great stuff using jQuery data
|
75
|
+
data = $select.data('dropkick') || {},
|
76
|
+
|
77
|
+
// This gets applied to the 'dk_container' element
|
78
|
+
id = $select.attr('id') || $select.attr('name'),
|
79
|
+
|
80
|
+
// This gets updated to be equal to the longest <option> element
|
81
|
+
width = settings.width || $select.outerWidth(),
|
82
|
+
|
83
|
+
// Check if we have a tabindex set or not
|
84
|
+
tabindex = $select.attr('tabindex') ? $select.attr('tabindex') : '',
|
85
|
+
|
86
|
+
// Check if we have a class name set or not
|
87
|
+
classname = $select.attr('class') ? $select.attr('class') : '',
|
88
|
+
|
89
|
+
// The completed dk_container element
|
90
|
+
$dk = false,
|
91
|
+
|
92
|
+
theme
|
93
|
+
;
|
94
|
+
|
95
|
+
// Dont do anything if we've already setup dropkick on this element
|
96
|
+
if (data.id) {
|
97
|
+
return $select;
|
98
|
+
} else {
|
99
|
+
data.settings = settings;
|
100
|
+
data.tabindex = tabindex;
|
101
|
+
data.classname = classname;
|
102
|
+
data.id = id;
|
103
|
+
data.$original = $original;
|
104
|
+
data.$select = $select;
|
105
|
+
data.value = _notBlank($select.val()) || _notBlank($original.attr('value'));
|
106
|
+
data.label = $original.text();
|
107
|
+
data.options = $options;
|
108
|
+
}
|
109
|
+
|
110
|
+
// Build the dropdown HTML
|
111
|
+
$dk = _build(dropdownTemplate, data);
|
112
|
+
|
113
|
+
// Make the dropdown fixed width if desired
|
114
|
+
$dk.find('.dk_toggle').css({
|
115
|
+
// Disable inline width since it should fill all available parrent space
|
116
|
+
// 'width' : width + 'px'
|
117
|
+
});
|
118
|
+
|
119
|
+
// Hide the <select> list and place our new one in front of it
|
120
|
+
$select.before($dk);
|
121
|
+
|
122
|
+
// Update the reference to $dk
|
123
|
+
$dk = $('#dk_container_' + id).addClass('dk_shown');
|
124
|
+
|
125
|
+
// Save the current theme
|
126
|
+
theme = settings.theme ? settings.theme : 'default';
|
127
|
+
$dk.addClass('dk_theme_' + theme);
|
128
|
+
data.theme = theme;
|
129
|
+
|
130
|
+
// Save the updated $dk reference into our data object
|
131
|
+
data.$dk = $dk;
|
132
|
+
|
133
|
+
// Save the dropkick data onto the <select> element
|
134
|
+
$select.data('dropkick', data);
|
135
|
+
|
136
|
+
// Do the same for the dropdown, but add a few helpers
|
137
|
+
$dk.data('dropkick', data);
|
138
|
+
|
139
|
+
lists[lists.length] = $select;
|
140
|
+
|
141
|
+
// Focus events
|
142
|
+
$dk.bind('focus.dropkick', function (e) {
|
143
|
+
$dk.addClass('dk_focus');
|
144
|
+
}).bind('blur.dropkick', function (e) {
|
145
|
+
$dk.removeClass('dk_open dk_focus');
|
146
|
+
});
|
147
|
+
|
148
|
+
setTimeout(function () {
|
149
|
+
$select.hide();
|
150
|
+
}, 0);
|
151
|
+
});
|
152
|
+
};
|
153
|
+
|
154
|
+
// Allows dynamic theme changes
|
155
|
+
methods.theme = function (newTheme) {
|
156
|
+
var
|
157
|
+
$select = $(this),
|
158
|
+
list = $select.data('dropkick'),
|
159
|
+
$dk = list.$dk,
|
160
|
+
oldtheme = 'dk_theme_' + list.theme
|
161
|
+
;
|
162
|
+
|
163
|
+
$dk.removeClass(oldtheme).addClass('dk_theme_' + newTheme);
|
164
|
+
|
165
|
+
list.theme = newTheme;
|
166
|
+
};
|
167
|
+
|
168
|
+
// Reset all <selects and dropdowns in our lists array
|
169
|
+
methods.reset = function () {
|
170
|
+
for (var i = 0, l = lists.length; i < l; i++) {
|
171
|
+
var
|
172
|
+
listData = lists[i].data('dropkick'),
|
173
|
+
$dk = listData.$dk,
|
174
|
+
$current = $dk.find('li').first()
|
175
|
+
;
|
176
|
+
|
177
|
+
$dk.find('.dk_label').text(listData.label);
|
178
|
+
$dk.find('.dk_options_inner').animate({ scrollTop: 0 }, 0);
|
179
|
+
|
180
|
+
_setCurrent($current, $dk);
|
181
|
+
_updateFields($current, $dk, true);
|
182
|
+
}
|
183
|
+
};
|
184
|
+
|
185
|
+
// Expose the plugin
|
186
|
+
$.fn.dropkick = function (method) {
|
187
|
+
if (methods[method]) {
|
188
|
+
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
189
|
+
} else if (typeof method === 'object' || ! method) {
|
190
|
+
return methods.init.apply(this, arguments);
|
191
|
+
}
|
192
|
+
};
|
193
|
+
|
194
|
+
// private
|
195
|
+
function _handleKeyBoardNav(e, $dk) {
|
196
|
+
var
|
197
|
+
code = e.keyCode,
|
198
|
+
data = $dk.data('dropkick'),
|
199
|
+
options = $dk.find('.dk_options'),
|
200
|
+
open = $dk.hasClass('dk_open'),
|
201
|
+
current = $dk.find('.dk_option_current'),
|
202
|
+
first = options.find('li').first(),
|
203
|
+
last = options.find('li').last(),
|
204
|
+
next,
|
205
|
+
prev
|
206
|
+
;
|
207
|
+
|
208
|
+
switch (code) {
|
209
|
+
case keyMap.enter:
|
210
|
+
if (open) {
|
211
|
+
_updateFields(current.find('a'), $dk);
|
212
|
+
_closeDropdown($dk);
|
213
|
+
} else {
|
214
|
+
_openDropdown($dk);
|
215
|
+
}
|
216
|
+
e.preventDefault();
|
217
|
+
break;
|
218
|
+
|
219
|
+
case keyMap.up:
|
220
|
+
prev = current.prev('li');
|
221
|
+
if (open) {
|
222
|
+
if (prev.length) {
|
223
|
+
_setCurrent(prev, $dk);
|
224
|
+
} else {
|
225
|
+
_setCurrent(last, $dk);
|
226
|
+
}
|
227
|
+
} else {
|
228
|
+
_openDropdown($dk);
|
229
|
+
}
|
230
|
+
e.preventDefault();
|
231
|
+
break;
|
232
|
+
|
233
|
+
case keyMap.down:
|
234
|
+
if (open) {
|
235
|
+
next = current.next('li').first();
|
236
|
+
if (next.length) {
|
237
|
+
_setCurrent(next, $dk);
|
238
|
+
} else {
|
239
|
+
_setCurrent(first, $dk);
|
240
|
+
}
|
241
|
+
} else {
|
242
|
+
_openDropdown($dk);
|
243
|
+
}
|
244
|
+
e.preventDefault();
|
245
|
+
break;
|
246
|
+
|
247
|
+
default:
|
248
|
+
break;
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
// Update the <select> value, and the dropdown label
|
253
|
+
function _updateFields(option, $dk, reset) {
|
254
|
+
var value, label, data;
|
255
|
+
|
256
|
+
value = option.attr('data-dk-dropdown-value');
|
257
|
+
label = option.text();
|
258
|
+
data = $dk.data('dropkick');
|
259
|
+
|
260
|
+
$select = data.$select;
|
261
|
+
$select.val(value);
|
262
|
+
|
263
|
+
$dk.find('.dk_label').text(label);
|
264
|
+
|
265
|
+
reset = reset || false;
|
266
|
+
|
267
|
+
if (data.settings.change && !reset) {
|
268
|
+
data.settings.change.call($select, value, label);
|
269
|
+
}
|
270
|
+
}
|
271
|
+
|
272
|
+
// Set the currently selected option
|
273
|
+
function _setCurrent($current, $dk) {
|
274
|
+
$dk.find('.dk_option_current').removeClass('dk_option_current');
|
275
|
+
$current.addClass('dk_option_current');
|
276
|
+
|
277
|
+
_setScrollPos($dk, $current);
|
278
|
+
}
|
279
|
+
|
280
|
+
function _setScrollPos($dk, anchor) {
|
281
|
+
var height = anchor.prevAll('li').outerHeight() * anchor.prevAll('li').length;
|
282
|
+
$dk.find('.dk_options_inner').animate({ scrollTop: height + 'px' }, 0);
|
283
|
+
}
|
284
|
+
|
285
|
+
// Close a dropdown
|
286
|
+
function _closeDropdown($dk) {
|
287
|
+
$dk.removeClass('dk_open');
|
288
|
+
}
|
289
|
+
|
290
|
+
// Open a dropdown
|
291
|
+
function _openDropdown($dk) {
|
292
|
+
var data = $dk.data('dropkick');
|
293
|
+
$dk.find('.dk_options').css({ top : $dk.find('.dk_toggle').outerHeight() - 1 });
|
294
|
+
$dk.toggleClass('dk_open');
|
295
|
+
|
296
|
+
}
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Turn the dropdownTemplate into a jQuery object and fill in the variables.
|
300
|
+
*/
|
301
|
+
function _build (tpl, view) {
|
302
|
+
var
|
303
|
+
// Template for the dropdown
|
304
|
+
template = tpl,
|
305
|
+
// Holder of the dropdowns options
|
306
|
+
options = [],
|
307
|
+
$dk
|
308
|
+
;
|
309
|
+
|
310
|
+
template = template.replace('{{ id }}', view.id);
|
311
|
+
template = template.replace('{{ label }}', view.label);
|
312
|
+
template = template.replace('{{ tabindex }}', view.tabindex);
|
313
|
+
template = template.replace('{{ classname }}', view.classname);
|
314
|
+
|
315
|
+
if (view.options && view.options.length) {
|
316
|
+
for (var i = 0, l = view.options.length; i < l; i++) {
|
317
|
+
var
|
318
|
+
$option = $(view.options[i]),
|
319
|
+
current = 'dk_option_current',
|
320
|
+
oTemplate = optionTemplate
|
321
|
+
;
|
322
|
+
|
323
|
+
oTemplate = oTemplate.replace('{{ value }}', $option.val());
|
324
|
+
oTemplate = oTemplate.replace('{{ current }}', (_notBlank($option.val()) === view.value) ? current : '');
|
325
|
+
oTemplate = oTemplate.replace('{{ text }}', $option.text());
|
326
|
+
|
327
|
+
options[options.length] = oTemplate;
|
328
|
+
}
|
329
|
+
}
|
330
|
+
|
331
|
+
$dk = $(template);
|
332
|
+
$dk.find('.dk_options_inner').html(options.join(''));
|
333
|
+
|
334
|
+
return $dk;
|
335
|
+
}
|
336
|
+
|
337
|
+
function _notBlank(text) {
|
338
|
+
return ($.trim(text).length > 0) ? text : false;
|
339
|
+
}
|
340
|
+
|
341
|
+
$(function () {
|
342
|
+
|
343
|
+
// Handle click events on the dropdown toggler
|
344
|
+
$(document).on('click', '.dk_toggle', function (e) {
|
345
|
+
var $dk = $(this).parents('.dk_container').first();
|
346
|
+
|
347
|
+
_openDropdown($dk);
|
348
|
+
|
349
|
+
if ("ontouchstart" in window) {
|
350
|
+
$dk.addClass('dk_touch');
|
351
|
+
$dk.find('.dk_options_inner').addClass('scrollable vertical');
|
352
|
+
}
|
353
|
+
|
354
|
+
e.preventDefault();
|
355
|
+
return false;
|
356
|
+
});
|
357
|
+
|
358
|
+
// Handle click events on individual dropdown options
|
359
|
+
$(document).on('click', '.dk_options a', function (e) {
|
360
|
+
var
|
361
|
+
$option = $(this),
|
362
|
+
$dk = $option.parents('.dk_container').first(),
|
363
|
+
data = $dk.data('dropkick')
|
364
|
+
;
|
365
|
+
|
366
|
+
_closeDropdown($dk);
|
367
|
+
_updateFields($option, $dk);
|
368
|
+
_setCurrent($option.parent(), $dk);
|
369
|
+
|
370
|
+
e.preventDefault();
|
371
|
+
return false;
|
372
|
+
});
|
373
|
+
|
374
|
+
// Setup keyboard nav
|
375
|
+
$(document).bind('keydown.dk_nav', function (e) {
|
376
|
+
var
|
377
|
+
// Look for an open dropdown...
|
378
|
+
$open = $('.dk_container.dk_open'),
|
379
|
+
|
380
|
+
// Look for a focused dropdown
|
381
|
+
$focused = $('.dk_container.dk_focus'),
|
382
|
+
|
383
|
+
// Will be either $open, $focused, or null
|
384
|
+
$dk = null
|
385
|
+
;
|
386
|
+
|
387
|
+
// If we have an open dropdown, key events should get sent to that one
|
388
|
+
if ($open.length) {
|
389
|
+
$dk = $open;
|
390
|
+
} else if ($focused.length && !$open.length) {
|
391
|
+
// But if we have no open dropdowns, use the focused dropdown instead
|
392
|
+
$dk = $focused;
|
393
|
+
}
|
394
|
+
|
395
|
+
if ($dk) {
|
396
|
+
_handleKeyBoardNav(e, $dk);
|
397
|
+
}
|
398
|
+
});
|
399
|
+
});
|
400
|
+
})(jQuery, window, document);
|