semantic_ui_rails 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +20 -0
  5. data/README.md +4 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/fonts/semantic/icons.eot +0 -0
  8. data/app/assets/fonts/semantic/icons.svg +450 -0
  9. data/app/assets/fonts/semantic/icons.ttf +0 -0
  10. data/app/assets/fonts/semantic/icons.woff +0 -0
  11. data/app/assets/images/semantic/loader-large-inverted.gif +0 -0
  12. data/app/assets/images/semantic/loader-large.gif +0 -0
  13. data/app/assets/images/semantic/loader-medium-inverted.gif +0 -0
  14. data/app/assets/images/semantic/loader-medium.gif +0 -0
  15. data/app/assets/images/semantic/loader-mini-inverted.gif +0 -0
  16. data/app/assets/images/semantic/loader-mini.gif +0 -0
  17. data/app/assets/images/semantic/loader-small-inverted.gif +0 -0
  18. data/app/assets/images/semantic/loader-small.gif +0 -0
  19. data/app/assets/javascript/semantic/accordion.js +411 -0
  20. data/app/assets/javascript/semantic/behavior/api.js +666 -0
  21. data/app/assets/javascript/semantic/behavior/colorize.js +271 -0
  22. data/app/assets/javascript/semantic/behavior/form.js +703 -0
  23. data/app/assets/javascript/semantic/behavior/state.js +752 -0
  24. data/app/assets/javascript/semantic/chatroom.js +766 -0
  25. data/app/assets/javascript/semantic/checkbox.js +348 -0
  26. data/app/assets/javascript/semantic/dimmer.js +524 -0
  27. data/app/assets/javascript/semantic/dropdown.js +707 -0
  28. data/app/assets/javascript/semantic/modal.js +478 -0
  29. data/app/assets/javascript/semantic/nag.js +542 -0
  30. data/app/assets/javascript/semantic/popup.js +721 -0
  31. data/app/assets/javascript/semantic/rating.js +358 -0
  32. data/app/assets/javascript/semantic/search.js +769 -0
  33. data/app/assets/javascript/semantic/shape.js +776 -0
  34. data/app/assets/javascript/semantic/sidebar.js +489 -0
  35. data/app/assets/javascript/semantic/tab.js +674 -0
  36. data/app/assets/javascript/semantic/transition.js +650 -0
  37. data/app/assets/javascript/semantic/video.js +459 -0
  38. data/app/assets/stylesheets/semantic/accordion.css +97 -0
  39. data/app/assets/stylesheets/semantic/breadcrumb.css +66 -0
  40. data/app/assets/stylesheets/semantic/button.css +993 -0
  41. data/app/assets/stylesheets/semantic/chatroom.css +242 -0
  42. data/app/assets/stylesheets/semantic/checkbox.css +300 -0
  43. data/app/assets/stylesheets/semantic/comment.css +178 -0
  44. data/app/assets/stylesheets/semantic/dimmer.css +185 -0
  45. data/app/assets/stylesheets/semantic/divider.css +155 -0
  46. data/app/assets/stylesheets/semantic/dropdown.css +415 -0
  47. data/app/assets/stylesheets/semantic/feed.css +126 -0
  48. data/app/assets/stylesheets/semantic/form.css +427 -0
  49. data/app/assets/stylesheets/semantic/grid.css +561 -0
  50. data/app/assets/stylesheets/semantic/header.css +277 -0
  51. data/app/assets/stylesheets/semantic/icon.css +811 -0
  52. data/app/assets/stylesheets/semantic/image.css +143 -0
  53. data/app/assets/stylesheets/semantic/input.css +225 -0
  54. data/app/assets/stylesheets/semantic/item.css +564 -0
  55. data/app/assets/stylesheets/semantic/label.css +687 -0
  56. data/app/assets/stylesheets/semantic/list.css +418 -0
  57. data/app/assets/stylesheets/semantic/loader.css +148 -0
  58. data/app/assets/stylesheets/semantic/menu.css +1409 -0
  59. data/app/assets/stylesheets/semantic/message.css +242 -0
  60. data/app/assets/stylesheets/semantic/modal.css +123 -0
  61. data/app/assets/stylesheets/semantic/nag.css +130 -0
  62. data/app/assets/stylesheets/semantic/popup.css +209 -0
  63. data/app/assets/stylesheets/semantic/progress.css +257 -0
  64. data/app/assets/stylesheets/semantic/rating.css +120 -0
  65. data/app/assets/stylesheets/semantic/reveal.css +283 -0
  66. data/app/assets/stylesheets/semantic/search.css +222 -0
  67. data/app/assets/stylesheets/semantic/segment.css +362 -0
  68. data/app/assets/stylesheets/semantic/shape.css +87 -0
  69. data/app/assets/stylesheets/semantic/sidebar.css +100 -0
  70. data/app/assets/stylesheets/semantic/step.css +240 -0
  71. data/app/assets/stylesheets/semantic/tab.css +52 -0
  72. data/app/assets/stylesheets/semantic/table.css +468 -0
  73. data/app/assets/stylesheets/semantic/transition.css +867 -0
  74. data/app/assets/stylesheets/semantic/video.css +81 -0
  75. data/lib/semantic_ui_rails/version.rb +3 -0
  76. data/lib/semantic_ui_rails.rb +7 -0
  77. data/semantic_ui_rails.gemspec +23 -0
  78. metadata +149 -0
@@ -0,0 +1,707 @@
1
+ /* ******************************
2
+ Semantic dropdown: Dropdown
3
+ Author: Jack Lukic
4
+ Notes: First Commit May 25, 2013
5
+
6
+ ****************************** */
7
+
8
+ ;(function ( $, window, document, undefined ) {
9
+
10
+ $.fn.dropdown = function(parameters) {
11
+ var
12
+ $allDropdowns = $(this),
13
+ $document = $(document),
14
+
15
+ settings = ( $.isPlainObject(parameters) )
16
+ ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
17
+ : $.fn.dropdown.settings,
18
+
19
+ className = settings.className,
20
+ metadata = settings.metadata,
21
+ namespace = settings.namespace,
22
+ selector = settings.selector,
23
+ error = settings.error,
24
+
25
+ eventNamespace = '.' + namespace,
26
+ dropdownNamespace = 'module-' + namespace,
27
+ dropdownSelector = $allDropdowns.selector || '',
28
+
29
+ time = new Date().getTime(),
30
+ performance = [],
31
+
32
+ query = arguments[0],
33
+ methodInvoked = (typeof query == 'string'),
34
+ queryArguments = [].slice.call(arguments, 1),
35
+ invokedResponse
36
+ ;
37
+
38
+ $allDropdowns
39
+ .each(function() {
40
+ var
41
+ $dropdown = $(this),
42
+ $item = $dropdown.find(selector.item),
43
+ $text = $dropdown.find(selector.text),
44
+ $input = $dropdown.find(selector.input),
45
+
46
+ $menu = $dropdown.children(selector.menu),
47
+
48
+ isTouchDevice = ('ontouchstart' in document.documentElement),
49
+
50
+ element = this,
51
+ instance = $dropdown.data(dropdownNamespace),
52
+ dropdown
53
+ ;
54
+
55
+ dropdown = {
56
+
57
+ initialize: function() {
58
+ dropdown.debug('Initializing dropdown', settings);
59
+ if(isTouchDevice) {
60
+ $dropdown
61
+ .on('touchstart' + eventNamespace, dropdown.event.test.toggle)
62
+ ;
63
+ }
64
+ else if(settings.on == 'click') {
65
+ $dropdown
66
+ .on('click' + eventNamespace, dropdown.event.test.toggle)
67
+ ;
68
+ }
69
+ else if(settings.on == 'hover') {
70
+ $dropdown
71
+ .on('mouseenter' + eventNamespace, dropdown.delay.show)
72
+ .on('mouseleave' + eventNamespace, dropdown.delay.hide)
73
+ ;
74
+ }
75
+ else {
76
+ $dropdown
77
+ .on(settings.on + eventNamespace, dropdown.toggle)
78
+ ;
79
+ }
80
+ if(settings.action == 'form') {
81
+ dropdown.set.selected();
82
+ }
83
+ $item
84
+ .on('mouseenter' + eventNamespace, dropdown.event.item.mouseenter)
85
+ .on('mouseleave' + eventNamespace, dropdown.event.item.mouseleave)
86
+ .on(dropdown.get.selectEvent() + eventNamespace, dropdown.event.item.click)
87
+ ;
88
+ dropdown.instantiate();
89
+ },
90
+
91
+ instantiate: function() {
92
+ dropdown.verbose('Storing instance of dropdown', dropdown);
93
+ $dropdown
94
+ .data(dropdownNamespace, dropdown)
95
+ ;
96
+ },
97
+
98
+ destroy: function() {
99
+ dropdown.verbose('Destroying previous dropdown for', $dropdown);
100
+ $item
101
+ .off(eventNamespace)
102
+ ;
103
+ $dropdown
104
+ .off(eventNamespace)
105
+ .removeData(dropdownNamespace)
106
+ ;
107
+ },
108
+
109
+ event: {
110
+
111
+ stopPropagation: function(event) {
112
+ event.stopPropagation();
113
+ },
114
+
115
+ test: {
116
+ toggle: function(event) {
117
+ dropdown.determine.intent(event, dropdown.toggle);
118
+ event.stopImmediatePropagation();
119
+ },
120
+ hide: function(event) {
121
+ dropdown.determine.intent(event, dropdown.hide);
122
+ event.stopPropagation();
123
+ }
124
+ },
125
+
126
+ item: {
127
+
128
+ mouseenter: function(event) {
129
+ var
130
+ $currentMenu = $(this).find(selector.menu),
131
+ $otherMenus = $(this).siblings(selector.item).children(selector.menu)
132
+ ;
133
+ if( $currentMenu.size() > 0 ) {
134
+ clearTimeout(dropdown.itemTimer);
135
+ dropdown.itemTimer = setTimeout(function() {
136
+ dropdown.animate.hide(false, $otherMenus);
137
+ dropdown.verbose('Showing sub-menu', $currentMenu);
138
+ dropdown.animate.show(false, $currentMenu);
139
+ }, settings.delay.show * 2);
140
+ }
141
+ },
142
+
143
+ mouseleave: function(event) {
144
+ var
145
+ $currentMenu = $(this).find(selector.menu)
146
+ ;
147
+ if($currentMenu.size() > 0) {
148
+ clearTimeout(dropdown.itemTimer);
149
+ dropdown.itemTimer = setTimeout(function() {
150
+ dropdown.verbose('Hiding sub-menu', $currentMenu);
151
+ dropdown.animate.hide(false, $currentMenu);
152
+ }, settings.delay.hide);
153
+ }
154
+ },
155
+
156
+ click: function (event) {
157
+ var
158
+ $choice = $(this),
159
+ text = $choice.data(metadata.text) || $choice.text(),
160
+ value = $choice.data(metadata.value) || text
161
+ ;
162
+ if( $choice.find(selector.menu).size() === 0 ) {
163
+ dropdown.verbose('Adding active state to selected item');
164
+ $item
165
+ .removeClass(className.active)
166
+ ;
167
+ $choice
168
+ .addClass(className.active)
169
+ ;
170
+ dropdown.determine.selectAction(text, value);
171
+ $.proxy(settings.onChange, element)(value, text);
172
+ event.stopPropagation();
173
+ }
174
+ }
175
+
176
+ },
177
+
178
+ resetStyle: function() {
179
+ $(this).removeAttr('style');
180
+ }
181
+
182
+ },
183
+
184
+ determine: {
185
+ selectAction: function(text, value) {
186
+ dropdown.verbose('Determining action', settings.action);
187
+ if( $.isFunction( dropdown[settings.action] ) ) {
188
+ dropdown.verbose('Triggering preset action', settings.action);
189
+ dropdown[ settings.action ](text, value);
190
+ }
191
+ else if( $.isFunction(settings.action) ) {
192
+ dropdown.verbose('Triggering user action', settings.action);
193
+ settings.action(text, value);
194
+ }
195
+ else {
196
+ dropdown.error(error.action);
197
+ }
198
+ },
199
+ intent: function(event, callback) {
200
+ dropdown.debug('Determining whether event occurred in dropdown', event.target);
201
+ callback = callback || function(){};
202
+ if( $(event.target).closest($menu).size() === 0 ) {
203
+ dropdown.verbose('Triggering event', callback);
204
+ callback();
205
+ }
206
+ else {
207
+ dropdown.verbose('Event occurred in dropdown, canceling callback');
208
+ }
209
+ }
210
+ },
211
+
212
+ bind: {
213
+ intent: function() {
214
+ dropdown.verbose('Binding hide intent event to document');
215
+ $document
216
+ .on(dropdown.get.selectEvent(), dropdown.event.test.hide)
217
+ ;
218
+ }
219
+ },
220
+
221
+ unbind: {
222
+ intent: function() {
223
+ dropdown.verbose('Removing hide intent event from document');
224
+ $document
225
+ .off(dropdown.get.selectEvent())
226
+ ;
227
+ }
228
+ },
229
+
230
+ nothing: function() {},
231
+
232
+ changeText: function(text, value) {
233
+ dropdown.set.text(text);
234
+ dropdown.hide();
235
+ },
236
+
237
+ updateForm: function(text, value) {
238
+ dropdown.set.text(text);
239
+ dropdown.set.value(value);
240
+ dropdown.hide();
241
+ },
242
+
243
+ get: {
244
+ selectEvent: function() {
245
+ return (isTouchDevice)
246
+ ? 'touchstart'
247
+ : 'click'
248
+ ;
249
+ },
250
+ text: function() {
251
+ return $text.text();
252
+ },
253
+ value: function() {
254
+ return $input.val();
255
+ },
256
+ item: function(value) {
257
+ var
258
+ $selectedItem
259
+ ;
260
+ value = value || $input.val();
261
+ $item
262
+ .each(function() {
263
+ if( $(this).data(metadata.value) == value ) {
264
+ $selectedItem = $(this);
265
+ }
266
+ })
267
+ ;
268
+ return $selectedItem || false;
269
+ }
270
+ },
271
+
272
+ set: {
273
+ text: function(text) {
274
+ dropdown.debug('Changing text', text, $text);
275
+ $text.removeClass(className.placeholder);
276
+ $text.text(text);
277
+ },
278
+ value: function(value) {
279
+ dropdown.debug('Adding selected value to hidden input', value, $input);
280
+ $input.val(value);
281
+ },
282
+ active: function() {
283
+ $dropdown.addClass(className.active);
284
+ },
285
+ visible: function() {
286
+ $dropdown.addClass(className.visible);
287
+ },
288
+ selected: function(value) {
289
+ var
290
+ $selectedItem = dropdown.get.item(value),
291
+ selectedText
292
+ ;
293
+ if($selectedItem) {
294
+ dropdown.debug('Setting selected menu item to', $selectedItem);
295
+ selectedText = $selectedItem.data(metadata.text) || $selectedItem.text();
296
+ $item
297
+ .removeClass(className.active)
298
+ ;
299
+ $selectedItem
300
+ .addClass(className.active)
301
+ ;
302
+ dropdown.set.text(selectedText);
303
+ }
304
+ }
305
+ },
306
+
307
+ remove: {
308
+ active: function() {
309
+ $dropdown.removeClass(className.active);
310
+ },
311
+ visible: function() {
312
+ $dropdown.removeClass(className.visible);
313
+ }
314
+ },
315
+
316
+ is: {
317
+ visible: function($subMenu) {
318
+ return ($subMenu)
319
+ ? $subMenu.is(':animated, :visible')
320
+ : $menu.is(':animated, :visible')
321
+ ;
322
+ },
323
+ hidden: function($subMenu) {
324
+ return ($subMenu)
325
+ ? $subMenu.is(':not(:animated, :visible)')
326
+ : $menu.is(':not(:animated, :visible)')
327
+ ;
328
+ }
329
+ },
330
+
331
+ can: {
332
+ click: function() {
333
+ return (isTouchDevice || settings.on == 'click');
334
+ },
335
+ show: function() {
336
+ return !$dropdown.hasClass(className.disabled);
337
+ }
338
+ },
339
+
340
+ animate: {
341
+ show: function(callback, $subMenu) {
342
+ var
343
+ $currentMenu = $subMenu || $menu
344
+ ;
345
+ callback = callback || function(){};
346
+ if( dropdown.is.hidden($currentMenu) ) {
347
+ dropdown.verbose('Doing menu show animation', $currentMenu);
348
+ if(settings.transition == 'none') {
349
+ callback();
350
+ }
351
+ else if($.fn.transition !== undefined) {
352
+ $currentMenu.transition({
353
+ animation : settings.transition + ' in',
354
+ duration : settings.duration,
355
+ complete : callback,
356
+ queue : false
357
+ })
358
+ }
359
+ else if(settings.transition == 'slide down') {
360
+ $currentMenu
361
+ .hide()
362
+ .clearQueue()
363
+ .children()
364
+ .clearQueue()
365
+ .css('opacity', 0)
366
+ .delay(50)
367
+ .animate({
368
+ opacity : 1
369
+ }, settings.duration, 'easeOutQuad', dropdown.event.resetStyle)
370
+ .end()
371
+ .slideDown(100, 'easeOutQuad', function() {
372
+ $.proxy(dropdown.event.resetStyle, this)();
373
+ callback();
374
+ })
375
+ ;
376
+ }
377
+ else if(settings.transition == 'fade') {
378
+ $currentMenu
379
+ .hide()
380
+ .clearQueue()
381
+ .fadeIn(settings.duration, function() {
382
+ $.proxy(dropdown.event.resetStyle, this)();
383
+ callback();
384
+ })
385
+ ;
386
+ }
387
+ else {
388
+ dropdown.error(error.transition);
389
+ }
390
+ }
391
+ },
392
+ hide: function(callback, $subMenu) {
393
+ var
394
+ $currentMenu = $subMenu || $menu
395
+ ;
396
+ callback = callback || function(){};
397
+ if(dropdown.is.visible($currentMenu) ) {
398
+ dropdown.verbose('Doing menu hide animation', $currentMenu);
399
+ if($.fn.transition !== undefined) {
400
+ $currentMenu.transition({
401
+ animation : settings.transition + ' out',
402
+ duration : settings.duration,
403
+ complete : callback,
404
+ queue : false
405
+ })
406
+ }
407
+ else if(settings.transition == 'none') {
408
+ callback();
409
+ }
410
+ else if(settings.transition == 'slide down') {
411
+ $currentMenu
412
+ .show()
413
+ .clearQueue()
414
+ .children()
415
+ .clearQueue()
416
+ .css('opacity', 1)
417
+ .animate({
418
+ opacity : 0
419
+ }, 100, 'easeOutQuad', dropdown.event.resetStyle)
420
+ .end()
421
+ .delay(50)
422
+ .slideUp(100, 'easeOutQuad', function() {
423
+ $.proxy(dropdown.event.resetStyle, this)();
424
+ callback();
425
+ })
426
+ ;
427
+ }
428
+ else if(settings.transition == 'fade') {
429
+ $currentMenu
430
+ .show()
431
+ .clearQueue()
432
+ .fadeOut(150, function() {
433
+ $.proxy(dropdown.event.resetStyle, this)();
434
+ callback();
435
+ })
436
+ ;
437
+ }
438
+ else {
439
+ dropdown.error(error.transition);
440
+ }
441
+ }
442
+ }
443
+ },
444
+
445
+ show: function() {
446
+ dropdown.debug('Checking if dropdown can show');
447
+ if( dropdown.is.hidden() ) {
448
+ dropdown.hideOthers();
449
+ dropdown.set.active();
450
+ dropdown.animate.show(dropdown.set.visible);
451
+ if( dropdown.can.click() ) {
452
+ dropdown.bind.intent();
453
+ }
454
+ $.proxy(settings.onShow, element)();
455
+ }
456
+ },
457
+
458
+ hide: function() {
459
+ if( dropdown.is.visible() ) {
460
+ dropdown.debug('Hiding dropdown');
461
+ if( dropdown.can.click() ) {
462
+ dropdown.unbind.intent();
463
+ }
464
+ dropdown.remove.active();
465
+ dropdown.animate.hide(dropdown.remove.visible);
466
+ $.proxy(settings.onHide, element)();
467
+ }
468
+ },
469
+
470
+ delay: {
471
+ show: function() {
472
+ dropdown.verbose('Delaying show event to ensure user intent');
473
+ clearTimeout(dropdown.timer);
474
+ dropdown.timer = setTimeout(dropdown.show, settings.delay.show);
475
+ },
476
+ hide: function() {
477
+ dropdown.verbose('Delaying hide event to ensure user intent');
478
+ clearTimeout(dropdown.timer);
479
+ dropdown.timer = setTimeout(dropdown.hide, settings.delay.hide);
480
+ }
481
+ },
482
+
483
+ hideOthers: function() {
484
+ dropdown.verbose('Finding other dropdowns to hide');
485
+ $allDropdowns
486
+ .not($dropdown)
487
+ .has(selector.menu + ':visible')
488
+ .dropdown('hide')
489
+ ;
490
+ },
491
+
492
+ toggle: function() {
493
+ dropdown.verbose('Toggling menu visibility');
494
+ if( dropdown.is.hidden() ) {
495
+ dropdown.show();
496
+ }
497
+ else {
498
+ dropdown.hide();
499
+ }
500
+ },
501
+
502
+ setting: function(name, value) {
503
+ if(value !== undefined) {
504
+ if( $.isPlainObject(name) ) {
505
+ $.extend(true, settings, name);
506
+ }
507
+ else {
508
+ settings[name] = value;
509
+ }
510
+ }
511
+ else {
512
+ return settings[name];
513
+ }
514
+ },
515
+ internal: function(name, value) {
516
+ if(value !== undefined) {
517
+ if( $.isPlainObject(name) ) {
518
+ $.extend(true, dropdown, name);
519
+ }
520
+ else {
521
+ dropdown[name] = value;
522
+ }
523
+ }
524
+ else {
525
+ return dropdown[name];
526
+ }
527
+ },
528
+ debug: function() {
529
+ if(settings.debug) {
530
+ if(settings.performance) {
531
+ dropdown.performance.log(arguments);
532
+ }
533
+ else {
534
+ dropdown.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
535
+ dropdown.debug.apply(console, arguments);
536
+ }
537
+ }
538
+ },
539
+ verbose: function() {
540
+ if(settings.verbose && settings.debug) {
541
+ if(settings.performance) {
542
+ dropdown.performance.log(arguments);
543
+ }
544
+ else {
545
+ dropdown.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
546
+ dropdown.verbose.apply(console, arguments);
547
+ }
548
+ }
549
+ },
550
+ error: function() {
551
+ dropdown.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
552
+ dropdown.error.apply(console, arguments);
553
+ },
554
+ performance: {
555
+ log: function(message) {
556
+ var
557
+ currentTime,
558
+ executionTime,
559
+ previousTime
560
+ ;
561
+ if(settings.performance) {
562
+ currentTime = new Date().getTime();
563
+ previousTime = time || currentTime;
564
+ executionTime = currentTime - previousTime;
565
+ time = currentTime;
566
+ performance.push({
567
+ 'Element' : element,
568
+ 'Name' : message[0],
569
+ 'Arguments' : [].slice.call(message, 1) || '',
570
+ 'Execution Time' : executionTime
571
+ });
572
+ }
573
+ clearTimeout(dropdown.performance.timer);
574
+ dropdown.performance.timer = setTimeout(dropdown.performance.display, 100);
575
+ },
576
+ display: function() {
577
+ var
578
+ title = settings.name + ':',
579
+ totalTime = 0
580
+ ;
581
+ time = false;
582
+ clearTimeout(dropdown.performance.timer);
583
+ $.each(performance, function(index, data) {
584
+ totalTime += data['Execution Time'];
585
+ });
586
+ title += ' ' + totalTime + 'ms';
587
+ if(dropdownSelector) {
588
+ title += ' \'' + dropdownSelector + '\'';
589
+ }
590
+ title += ' ' + '(' + $allDropdowns.size() + ')';
591
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
592
+ console.groupCollapsed(title);
593
+ if(console.table) {
594
+ console.table(performance);
595
+ }
596
+ else {
597
+ $.each(performance, function(index, data) {
598
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
599
+ });
600
+ }
601
+ console.groupEnd();
602
+ }
603
+ performance = [];
604
+ }
605
+ },
606
+ invoke: function(query, passedArguments, context) {
607
+ var
608
+ maxDepth,
609
+ found
610
+ ;
611
+ passedArguments = passedArguments || queryArguments;
612
+ context = element || context;
613
+ if(typeof query == 'string' && instance !== undefined) {
614
+ query = query.split(/[\. ]/);
615
+ maxDepth = query.length - 1;
616
+ $.each(query, function(depth, value) {
617
+ if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
618
+ instance = instance[value];
619
+ }
620
+ else if( instance[value] !== undefined ) {
621
+ found = instance[value];
622
+ }
623
+ else {
624
+ dropdown.error(error.method);
625
+ }
626
+ });
627
+ }
628
+ if ( $.isFunction( found ) ) {
629
+ return found.apply(context, passedArguments);
630
+ }
631
+ return found || false;
632
+ }
633
+ };
634
+
635
+ if(methodInvoked) {
636
+ if(instance === undefined) {
637
+ dropdown.initialize();
638
+ }
639
+ invokedResponse = dropdown.invoke(query);
640
+ }
641
+ else {
642
+ if(instance !== undefined) {
643
+ dropdown.destroy();
644
+ }
645
+ dropdown.initialize();
646
+ }
647
+ })
648
+ ;
649
+
650
+ return (invokedResponse)
651
+ ? invokedResponse
652
+ : this
653
+ ;
654
+ };
655
+
656
+ $.fn.dropdown.settings = {
657
+
658
+ name : 'Dropdown',
659
+ namespace : 'dropdown',
660
+
661
+ verbose : true,
662
+ debug : true,
663
+ performance : true,
664
+
665
+ on : 'click',
666
+ action : 'hide',
667
+
668
+ delay: {
669
+ show: 200,
670
+ hide: 300
671
+ },
672
+
673
+ transition : 'slide down',
674
+ duration : 250,
675
+
676
+ onChange : function(){},
677
+ onShow : function(){},
678
+ onHide : function(){},
679
+
680
+ error : {
681
+ action : 'You called a dropdown action that was not defined',
682
+ method : 'The method you called is not defined.',
683
+ transition : 'The requested transition was not found'
684
+ },
685
+
686
+ metadata: {
687
+ text : 'text',
688
+ value : 'value'
689
+ },
690
+
691
+ selector : {
692
+ menu : '.menu',
693
+ item : '.menu > .item',
694
+ text : '> .text',
695
+ input : '> input[type="hidden"]'
696
+ },
697
+
698
+ className : {
699
+ active : 'active',
700
+ placeholder : 'default',
701
+ disabled : 'disabled',
702
+ visible : 'visible'
703
+ }
704
+
705
+ };
706
+
707
+ })( jQuery, window , document );