less-rails-semantic_ui 1.0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +13 -0
  4. data/Appraisals +7 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +65 -0
  8. data/Rakefile +9 -0
  9. data/assets/fonts/semantic_ui/themes/basic/assets/fonts/icons.eot +0 -0
  10. data/assets/fonts/semantic_ui/themes/basic/assets/fonts/icons.svg +450 -0
  11. data/assets/fonts/semantic_ui/themes/basic/assets/fonts/icons.ttf +0 -0
  12. data/assets/fonts/semantic_ui/themes/basic/assets/fonts/icons.woff +0 -0
  13. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.eot +0 -0
  14. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.otf +0 -0
  15. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.svg +504 -0
  16. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.ttf +0 -0
  17. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.woff +0 -0
  18. data/assets/images/semantic_ui/themes/default/assets/images/flags.png +0 -0
  19. data/assets/javascripts/semantic_ui/definitions/behaviors/api.js +839 -0
  20. data/assets/javascripts/semantic_ui/definitions/behaviors/colorize.js +272 -0
  21. data/assets/javascripts/semantic_ui/definitions/behaviors/form.js +795 -0
  22. data/assets/javascripts/semantic_ui/definitions/behaviors/state.js +690 -0
  23. data/assets/javascripts/semantic_ui/definitions/behaviors/visibility.js +951 -0
  24. data/assets/javascripts/semantic_ui/definitions/behaviors/visit.js +516 -0
  25. data/assets/javascripts/semantic_ui/definitions/globals/site.js +487 -0
  26. data/assets/javascripts/semantic_ui/definitions/modules/accordion.js +504 -0
  27. data/assets/javascripts/semantic_ui/definitions/modules/checkbox.js +469 -0
  28. data/assets/javascripts/semantic_ui/definitions/modules/dimmer.js +626 -0
  29. data/assets/javascripts/semantic_ui/definitions/modules/dropdown.js +1496 -0
  30. data/assets/javascripts/semantic_ui/definitions/modules/modal.js +809 -0
  31. data/assets/javascripts/semantic_ui/definitions/modules/nag.js +480 -0
  32. data/assets/javascripts/semantic_ui/definitions/modules/popup.js +1050 -0
  33. data/assets/javascripts/semantic_ui/definitions/modules/progress.js +652 -0
  34. data/assets/javascripts/semantic_ui/definitions/modules/rating.js +451 -0
  35. data/assets/javascripts/semantic_ui/definitions/modules/search.js +886 -0
  36. data/assets/javascripts/semantic_ui/definitions/modules/shape.js +830 -0
  37. data/assets/javascripts/semantic_ui/definitions/modules/sidebar.js +976 -0
  38. data/assets/javascripts/semantic_ui/definitions/modules/sticky.js +768 -0
  39. data/assets/javascripts/semantic_ui/definitions/modules/tab.js +801 -0
  40. data/assets/javascripts/semantic_ui/definitions/modules/transition.js +865 -0
  41. data/assets/javascripts/semantic_ui/definitions/modules/video.js +539 -0
  42. data/assets/stylesheets/semantic_ui/definitions/collections/breadcrumb.less +128 -0
  43. data/assets/stylesheets/semantic_ui/definitions/collections/form.less +839 -0
  44. data/assets/stylesheets/semantic_ui/definitions/collections/grid.less +1201 -0
  45. data/assets/stylesheets/semantic_ui/definitions/collections/menu.less +1600 -0
  46. data/assets/stylesheets/semantic_ui/definitions/collections/message.less +448 -0
  47. data/assets/stylesheets/semantic_ui/definitions/collections/table.less +877 -0
  48. data/assets/stylesheets/semantic_ui/definitions/elements/button.less +2396 -0
  49. data/assets/stylesheets/semantic_ui/definitions/elements/divider.less +262 -0
  50. data/assets/stylesheets/semantic_ui/definitions/elements/flag.less +52 -0
  51. data/assets/stylesheets/semantic_ui/definitions/elements/header.less +564 -0
  52. data/assets/stylesheets/semantic_ui/definitions/elements/icon.less +351 -0
  53. data/assets/stylesheets/semantic_ui/definitions/elements/image.less +267 -0
  54. data/assets/stylesheets/semantic_ui/definitions/elements/input.less +448 -0
  55. data/assets/stylesheets/semantic_ui/definitions/elements/label.less +959 -0
  56. data/assets/stylesheets/semantic_ui/definitions/elements/list.less +896 -0
  57. data/assets/stylesheets/semantic_ui/definitions/elements/loader.less +268 -0
  58. data/assets/stylesheets/semantic_ui/definitions/elements/rail.less +132 -0
  59. data/assets/stylesheets/semantic_ui/definitions/elements/reveal.less +263 -0
  60. data/assets/stylesheets/semantic_ui/definitions/elements/segment.less +603 -0
  61. data/assets/stylesheets/semantic_ui/definitions/elements/step.less +358 -0
  62. data/assets/stylesheets/semantic_ui/definitions/globals/reset.less +45 -0
  63. data/assets/stylesheets/semantic_ui/definitions/globals/site.less +138 -0
  64. data/assets/stylesheets/semantic_ui/definitions/modules/accordion.less +221 -0
  65. data/assets/stylesheets/semantic_ui/definitions/modules/checkbox.less +468 -0
  66. data/assets/stylesheets/semantic_ui/definitions/modules/dimmer.less +186 -0
  67. data/assets/stylesheets/semantic_ui/definitions/modules/dropdown.less +914 -0
  68. data/assets/stylesheets/semantic_ui/definitions/modules/modal.less +447 -0
  69. data/assets/stylesheets/semantic_ui/definitions/modules/nag.less +165 -0
  70. data/assets/stylesheets/semantic_ui/definitions/modules/popup.less +296 -0
  71. data/assets/stylesheets/semantic_ui/definitions/modules/progress.less +404 -0
  72. data/assets/stylesheets/semantic_ui/definitions/modules/rating.less +204 -0
  73. data/assets/stylesheets/semantic_ui/definitions/modules/search.less +344 -0
  74. data/assets/stylesheets/semantic_ui/definitions/modules/shape.less +158 -0
  75. data/assets/stylesheets/semantic_ui/definitions/modules/sidebar.less +464 -0
  76. data/assets/stylesheets/semantic_ui/definitions/modules/sticky.less +80 -0
  77. data/assets/stylesheets/semantic_ui/definitions/modules/tab.less +100 -0
  78. data/assets/stylesheets/semantic_ui/definitions/modules/transition.less +95 -0
  79. data/assets/stylesheets/semantic_ui/definitions/modules/video.less +131 -0
  80. data/assets/stylesheets/semantic_ui/definitions/views/ad.less +272 -0
  81. data/assets/stylesheets/semantic_ui/definitions/views/card.less +751 -0
  82. data/assets/stylesheets/semantic_ui/definitions/views/comment.less +262 -0
  83. data/assets/stylesheets/semantic_ui/definitions/views/feed.less +278 -0
  84. data/assets/stylesheets/semantic_ui/definitions/views/item.less +472 -0
  85. data/assets/stylesheets/semantic_ui/definitions/views/statistic.less +422 -0
  86. data/assets/stylesheets/semantic_ui/theme.less +48 -0
  87. data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.overrides +46 -0
  88. data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.variables +57 -0
  89. data/assets/stylesheets/semantic_ui/themes/basic/collections/table.overrides +4 -0
  90. data/assets/stylesheets/semantic_ui/themes/basic/collections/table.variables +10 -0
  91. data/assets/stylesheets/semantic_ui/themes/basic/elements/button.overrides +4 -0
  92. data/assets/stylesheets/semantic_ui/themes/basic/elements/button.variables +44 -0
  93. data/assets/stylesheets/semantic_ui/themes/basic/elements/icon.overrides +189 -0
  94. data/assets/stylesheets/semantic_ui/themes/basic/elements/icon.variables +5 -0
  95. data/assets/stylesheets/semantic_ui/themes/basic/elements/step.overrides +7 -0
  96. data/assets/stylesheets/semantic_ui/themes/basic/elements/step.variables +10 -0
  97. data/assets/stylesheets/semantic_ui/themes/basic/globals/reset.overrides +5 -0
  98. data/assets/stylesheets/semantic_ui/themes/basic/globals/reset.variables +3 -0
  99. data/assets/stylesheets/semantic_ui/themes/basic/modules/progress.overrides +3 -0
  100. data/assets/stylesheets/semantic_ui/themes/basic/modules/progress.variables +15 -0
  101. data/assets/stylesheets/semantic_ui/themes/basic/views/card.overrides +4 -0
  102. data/assets/stylesheets/semantic_ui/themes/basic/views/card.variables +34 -0
  103. data/assets/stylesheets/semantic_ui/themes/bookish/elements/header.overrides +15 -0
  104. data/assets/stylesheets/semantic_ui/themes/bookish/elements/header.variables +37 -0
  105. data/assets/stylesheets/semantic_ui/themes/bootstrap3/elements/button.overrides +0 -0
  106. data/assets/stylesheets/semantic_ui/themes/bootstrap3/elements/button.variables +63 -0
  107. data/assets/stylesheets/semantic_ui/themes/chubby/collections/form.overrides +8 -0
  108. data/assets/stylesheets/semantic_ui/themes/chubby/collections/form.variables +9 -0
  109. data/assets/stylesheets/semantic_ui/themes/chubby/elements/button.overrides +21 -0
  110. data/assets/stylesheets/semantic_ui/themes/chubby/elements/button.variables +57 -0
  111. data/assets/stylesheets/semantic_ui/themes/chubby/elements/header.overrides +5 -0
  112. data/assets/stylesheets/semantic_ui/themes/chubby/elements/header.variables +21 -0
  113. data/assets/stylesheets/semantic_ui/themes/chubby/modules/accordion.overrides +7 -0
  114. data/assets/stylesheets/semantic_ui/themes/chubby/modules/accordion.variables +15 -0
  115. data/assets/stylesheets/semantic_ui/themes/chubby/views/comment.overrides +12 -0
  116. data/assets/stylesheets/semantic_ui/themes/chubby/views/comment.variables +46 -0
  117. data/assets/stylesheets/semantic_ui/themes/classic/collections/table.overrides +3 -0
  118. data/assets/stylesheets/semantic_ui/themes/classic/collections/table.variables +14 -0
  119. data/assets/stylesheets/semantic_ui/themes/classic/elements/button.overrides +3 -0
  120. data/assets/stylesheets/semantic_ui/themes/classic/elements/button.variables +96 -0
  121. data/assets/stylesheets/semantic_ui/themes/classic/elements/header.overrides +3 -0
  122. data/assets/stylesheets/semantic_ui/themes/classic/elements/header.variables +12 -0
  123. data/assets/stylesheets/semantic_ui/themes/classic/modules/progress.overrides +3 -0
  124. data/assets/stylesheets/semantic_ui/themes/classic/modules/progress.variables +8 -0
  125. data/assets/stylesheets/semantic_ui/themes/classic/views/card.overrides +98 -0
  126. data/assets/stylesheets/semantic_ui/themes/classic/views/card.variables +22 -0
  127. data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.overrides +3 -0
  128. data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.variables +43 -0
  129. data/assets/stylesheets/semantic_ui/themes/default/collections/form.overrides +3 -0
  130. data/assets/stylesheets/semantic_ui/themes/default/collections/form.variables +189 -0
  131. data/assets/stylesheets/semantic_ui/themes/default/collections/grid.overrides +4 -0
  132. data/assets/stylesheets/semantic_ui/themes/default/collections/grid.variables +93 -0
  133. data/assets/stylesheets/semantic_ui/themes/default/collections/menu.overrides +3 -0
  134. data/assets/stylesheets/semantic_ui/themes/default/collections/menu.variables +322 -0
  135. data/assets/stylesheets/semantic_ui/themes/default/collections/message.overrides +3 -0
  136. data/assets/stylesheets/semantic_ui/themes/default/collections/message.variables +88 -0
  137. data/assets/stylesheets/semantic_ui/themes/default/collections/table.overrides +3 -0
  138. data/assets/stylesheets/semantic_ui/themes/default/collections/table.variables +228 -0
  139. data/assets/stylesheets/semantic_ui/themes/default/elements/button.overrides +3 -0
  140. data/assets/stylesheets/semantic_ui/themes/default/elements/button.variables +260 -0
  141. data/assets/stylesheets/semantic_ui/themes/default/elements/divider.overrides +3 -0
  142. data/assets/stylesheets/semantic_ui/themes/default/elements/divider.variables +54 -0
  143. data/assets/stylesheets/semantic_ui/themes/default/elements/flag.overrides +979 -0
  144. data/assets/stylesheets/semantic_ui/themes/default/elements/flag.variables +13 -0
  145. data/assets/stylesheets/semantic_ui/themes/default/elements/header.overrides +4 -0
  146. data/assets/stylesheets/semantic_ui/themes/default/elements/header.variables +126 -0
  147. data/assets/stylesheets/semantic_ui/themes/default/elements/icon.overrides +661 -0
  148. data/assets/stylesheets/semantic_ui/themes/default/elements/icon.variables +34 -0
  149. data/assets/stylesheets/semantic_ui/themes/default/elements/image.overrides +3 -0
  150. data/assets/stylesheets/semantic_ui/themes/default/elements/image.variables +42 -0
  151. data/assets/stylesheets/semantic_ui/themes/default/elements/input.overrides +3 -0
  152. data/assets/stylesheets/semantic_ui/themes/default/elements/input.variables +114 -0
  153. data/assets/stylesheets/semantic_ui/themes/default/elements/label.overrides +3 -0
  154. data/assets/stylesheets/semantic_ui/themes/default/elements/label.variables +164 -0
  155. data/assets/stylesheets/semantic_ui/themes/default/elements/list.overrides +3 -0
  156. data/assets/stylesheets/semantic_ui/themes/default/elements/list.variables +204 -0
  157. data/assets/stylesheets/semantic_ui/themes/default/elements/loader.overrides +3 -0
  158. data/assets/stylesheets/semantic_ui/themes/default/elements/loader.variables +61 -0
  159. data/assets/stylesheets/semantic_ui/themes/default/elements/rail.overrides +3 -0
  160. data/assets/stylesheets/semantic_ui/themes/default/elements/rail.variables +24 -0
  161. data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.overrides +3 -0
  162. data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.variables +15 -0
  163. data/assets/stylesheets/semantic_ui/themes/default/elements/segment.overrides +3 -0
  164. data/assets/stylesheets/semantic_ui/themes/default/elements/segment.variables +100 -0
  165. data/assets/stylesheets/semantic_ui/themes/default/elements/step.overrides +16 -0
  166. data/assets/stylesheets/semantic_ui/themes/default/elements/step.variables +94 -0
  167. data/assets/stylesheets/semantic_ui/themes/default/globals/reset.overrides +434 -0
  168. data/assets/stylesheets/semantic_ui/themes/default/globals/reset.variables +3 -0
  169. data/assets/stylesheets/semantic_ui/themes/default/globals/site.overrides +3 -0
  170. data/assets/stylesheets/semantic_ui/themes/default/globals/site.variables +599 -0
  171. data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.overrides +28 -0
  172. data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.variables +101 -0
  173. data/assets/stylesheets/semantic_ui/themes/default/modules/chatroom.overrides +3 -0
  174. data/assets/stylesheets/semantic_ui/themes/default/modules/chatroom.variables +3 -0
  175. data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.overrides +33 -0
  176. data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.variables +139 -0
  177. data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.overrides +3 -0
  178. data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.variables +51 -0
  179. data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.overrides +57 -0
  180. data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.variables +237 -0
  181. data/assets/stylesheets/semantic_ui/themes/default/modules/modal.overrides +3 -0
  182. data/assets/stylesheets/semantic_ui/themes/default/modules/modal.variables +147 -0
  183. data/assets/stylesheets/semantic_ui/themes/default/modules/nag.overrides +3 -0
  184. data/assets/stylesheets/semantic_ui/themes/default/modules/nag.variables +74 -0
  185. data/assets/stylesheets/semantic_ui/themes/default/modules/popup.overrides +3 -0
  186. data/assets/stylesheets/semantic_ui/themes/default/modules/popup.variables +95 -0
  187. data/assets/stylesheets/semantic_ui/themes/default/modules/progress.overrides +3 -0
  188. data/assets/stylesheets/semantic_ui/themes/default/modules/progress.variables +99 -0
  189. data/assets/stylesheets/semantic_ui/themes/default/modules/rating.overrides +69 -0
  190. data/assets/stylesheets/semantic_ui/themes/default/modules/rating.variables +65 -0
  191. data/assets/stylesheets/semantic_ui/themes/default/modules/search.overrides +3 -0
  192. data/assets/stylesheets/semantic_ui/themes/default/modules/search.variables +140 -0
  193. data/assets/stylesheets/semantic_ui/themes/default/modules/shape.overrides +3 -0
  194. data/assets/stylesheets/semantic_ui/themes/default/modules/shape.variables +35 -0
  195. data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.overrides +3 -0
  196. data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.variables +39 -0
  197. data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.overrides +3 -0
  198. data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.variables +12 -0
  199. data/assets/stylesheets/semantic_ui/themes/default/modules/tab.overrides +3 -0
  200. data/assets/stylesheets/semantic_ui/themes/default/modules/tab.variables +13 -0
  201. data/assets/stylesheets/semantic_ui/themes/default/modules/transition.overrides +445 -0
  202. data/assets/stylesheets/semantic_ui/themes/default/modules/transition.variables +10 -0
  203. data/assets/stylesheets/semantic_ui/themes/default/modules/video.overrides +3 -0
  204. data/assets/stylesheets/semantic_ui/themes/default/modules/video.variables +16 -0
  205. data/assets/stylesheets/semantic_ui/themes/default/views/ad.overrides +3 -0
  206. data/assets/stylesheets/semantic_ui/themes/default/views/ad.variables +13 -0
  207. data/assets/stylesheets/semantic_ui/themes/default/views/card.overrides +3 -0
  208. data/assets/stylesheets/semantic_ui/themes/default/views/card.variables +185 -0
  209. data/assets/stylesheets/semantic_ui/themes/default/views/comment.overrides +3 -0
  210. data/assets/stylesheets/semantic_ui/themes/default/views/comment.variables +104 -0
  211. data/assets/stylesheets/semantic_ui/themes/default/views/feed.overrides +3 -0
  212. data/assets/stylesheets/semantic_ui/themes/default/views/feed.variables +149 -0
  213. data/assets/stylesheets/semantic_ui/themes/default/views/item.overrides +3 -0
  214. data/assets/stylesheets/semantic_ui/themes/default/views/item.variables +152 -0
  215. data/assets/stylesheets/semantic_ui/themes/default/views/statistic.overrides +3 -0
  216. data/assets/stylesheets/semantic_ui/themes/default/views/statistic.variables +97 -0
  217. data/assets/stylesheets/semantic_ui/themes/duo/elements/loader.overrides +3 -0
  218. data/assets/stylesheets/semantic_ui/themes/duo/elements/loader.variables +6 -0
  219. data/assets/stylesheets/semantic_ui/themes/fixed-width/collections/grid.overrides +3 -0
  220. data/assets/stylesheets/semantic_ui/themes/fixed-width/collections/grid.variables +25 -0
  221. data/assets/stylesheets/semantic_ui/themes/fixed-width/modules/modal.overrides +3 -0
  222. data/assets/stylesheets/semantic_ui/themes/fixed-width/modules/modal.variables +37 -0
  223. data/assets/stylesheets/semantic_ui/themes/flat/collections/form.overrides +24 -0
  224. data/assets/stylesheets/semantic_ui/themes/flat/collections/form.variables +74 -0
  225. data/assets/stylesheets/semantic_ui/themes/flat/globals/site.overrides +3 -0
  226. data/assets/stylesheets/semantic_ui/themes/flat/globals/site.variables +106 -0
  227. data/assets/stylesheets/semantic_ui/themes/github/collections/form.overrides +16 -0
  228. data/assets/stylesheets/semantic_ui/themes/github/collections/form.variables +40 -0
  229. data/assets/stylesheets/semantic_ui/themes/github/collections/menu.overrides +7 -0
  230. data/assets/stylesheets/semantic_ui/themes/github/collections/menu.variables +66 -0
  231. data/assets/stylesheets/semantic_ui/themes/github/collections/message.overrides +11 -0
  232. data/assets/stylesheets/semantic_ui/themes/github/collections/message.variables +29 -0
  233. data/assets/stylesheets/semantic_ui/themes/github/elements/button.overrides +4 -0
  234. data/assets/stylesheets/semantic_ui/themes/github/elements/button.variables +77 -0
  235. data/assets/stylesheets/semantic_ui/themes/github/elements/segment.overrides +3 -0
  236. data/assets/stylesheets/semantic_ui/themes/github/elements/segment.variables +41 -0
  237. data/assets/stylesheets/semantic_ui/themes/github/elements/step.overrides +26 -0
  238. data/assets/stylesheets/semantic_ui/themes/github/elements/step.variables +20 -0
  239. data/assets/stylesheets/semantic_ui/themes/gmail/collections/message.overrides +0 -0
  240. data/assets/stylesheets/semantic_ui/themes/gmail/collections/message.variables +15 -0
  241. data/assets/stylesheets/semantic_ui/themes/material/elements/button.overrides +23 -0
  242. data/assets/stylesheets/semantic_ui/themes/material/elements/button.variables +87 -0
  243. data/assets/stylesheets/semantic_ui/themes/material/elements/header.overrides +15 -0
  244. data/assets/stylesheets/semantic_ui/themes/material/elements/header.variables +21 -0
  245. data/assets/stylesheets/semantic_ui/themes/material/globals/site.overrides +0 -0
  246. data/assets/stylesheets/semantic_ui/themes/material/globals/site.variables +119 -0
  247. data/assets/stylesheets/semantic_ui/themes/material/modules/modal.overrides +6 -0
  248. data/assets/stylesheets/semantic_ui/themes/material/modules/modal.variables +15 -0
  249. data/assets/stylesheets/semantic_ui/themes/pulsar/elements/loader.overrides +70 -0
  250. data/assets/stylesheets/semantic_ui/themes/pulsar/elements/loader.variables +7 -0
  251. data/assets/stylesheets/semantic_ui/themes/raised/elements/button.overrides +3 -0
  252. data/assets/stylesheets/semantic_ui/themes/raised/elements/button.variables +26 -0
  253. data/assets/stylesheets/semantic_ui/themes/resetcss/globals/reset.overrides +52 -0
  254. data/assets/stylesheets/semantic_ui/themes/resetcss/globals/reset.variables +3 -0
  255. data/assets/stylesheets/semantic_ui/themes/round/elements/button.overrides +0 -0
  256. data/assets/stylesheets/semantic_ui/themes/round/elements/button.variables +138 -0
  257. data/assets/stylesheets/semantic_ui/themes/striped/modules/progress.overrides +29 -0
  258. data/assets/stylesheets/semantic_ui/themes/striped/modules/progress.variables +3 -0
  259. data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.overrides +35 -0
  260. data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.variables +40 -0
  261. data/assets/stylesheets/semantic_ui/themes/twitter/elements/button.overrides +13 -0
  262. data/assets/stylesheets/semantic_ui/themes/twitter/elements/button.variables +45 -0
  263. data/less-rails-semantic_ui.gemspec +28 -0
  264. data/lib/generators/semantic_ui/install/install_generator.rb +20 -0
  265. data/lib/generators/semantic_ui/install/templates/config/collections/breadcrumb.overrides +3 -0
  266. data/lib/generators/semantic_ui/install/templates/config/collections/breadcrumb.variables +3 -0
  267. data/lib/generators/semantic_ui/install/templates/config/collections/form.overrides +3 -0
  268. data/lib/generators/semantic_ui/install/templates/config/collections/form.variables +3 -0
  269. data/lib/generators/semantic_ui/install/templates/config/collections/grid.overrides +3 -0
  270. data/lib/generators/semantic_ui/install/templates/config/collections/grid.variables +3 -0
  271. data/lib/generators/semantic_ui/install/templates/config/collections/menu.overrides +3 -0
  272. data/lib/generators/semantic_ui/install/templates/config/collections/menu.variables +3 -0
  273. data/lib/generators/semantic_ui/install/templates/config/collections/message.overrides +3 -0
  274. data/lib/generators/semantic_ui/install/templates/config/collections/message.variables +3 -0
  275. data/lib/generators/semantic_ui/install/templates/config/collections/table.overrides +3 -0
  276. data/lib/generators/semantic_ui/install/templates/config/collections/table.variables +3 -0
  277. data/lib/generators/semantic_ui/install/templates/config/elements/button.overrides +3 -0
  278. data/lib/generators/semantic_ui/install/templates/config/elements/button.variables +3 -0
  279. data/lib/generators/semantic_ui/install/templates/config/elements/divider.overrides +3 -0
  280. data/lib/generators/semantic_ui/install/templates/config/elements/divider.variables +3 -0
  281. data/lib/generators/semantic_ui/install/templates/config/elements/flag.overrides +3 -0
  282. data/lib/generators/semantic_ui/install/templates/config/elements/flag.variables +3 -0
  283. data/lib/generators/semantic_ui/install/templates/config/elements/header.overrides +3 -0
  284. data/lib/generators/semantic_ui/install/templates/config/elements/header.variables +3 -0
  285. data/lib/generators/semantic_ui/install/templates/config/elements/icon.overrides +3 -0
  286. data/lib/generators/semantic_ui/install/templates/config/elements/icon.variables +3 -0
  287. data/lib/generators/semantic_ui/install/templates/config/elements/image.overrides +3 -0
  288. data/lib/generators/semantic_ui/install/templates/config/elements/image.variables +3 -0
  289. data/lib/generators/semantic_ui/install/templates/config/elements/input.overrides +3 -0
  290. data/lib/generators/semantic_ui/install/templates/config/elements/input.variables +3 -0
  291. data/lib/generators/semantic_ui/install/templates/config/elements/label.overrides +3 -0
  292. data/lib/generators/semantic_ui/install/templates/config/elements/label.variables +3 -0
  293. data/lib/generators/semantic_ui/install/templates/config/elements/list.overrides +3 -0
  294. data/lib/generators/semantic_ui/install/templates/config/elements/list.variables +3 -0
  295. data/lib/generators/semantic_ui/install/templates/config/elements/loader.overrides +3 -0
  296. data/lib/generators/semantic_ui/install/templates/config/elements/loader.variables +3 -0
  297. data/lib/generators/semantic_ui/install/templates/config/elements/rail.overrides +3 -0
  298. data/lib/generators/semantic_ui/install/templates/config/elements/rail.variables +3 -0
  299. data/lib/generators/semantic_ui/install/templates/config/elements/reveal.overrides +3 -0
  300. data/lib/generators/semantic_ui/install/templates/config/elements/reveal.variables +3 -0
  301. data/lib/generators/semantic_ui/install/templates/config/elements/segment.overrides +3 -0
  302. data/lib/generators/semantic_ui/install/templates/config/elements/segment.variables +3 -0
  303. data/lib/generators/semantic_ui/install/templates/config/elements/step.overrides +3 -0
  304. data/lib/generators/semantic_ui/install/templates/config/elements/step.variables +3 -0
  305. data/lib/generators/semantic_ui/install/templates/config/globals/reset.overrides +3 -0
  306. data/lib/generators/semantic_ui/install/templates/config/globals/reset.variables +3 -0
  307. data/lib/generators/semantic_ui/install/templates/config/globals/site.overrides +3 -0
  308. data/lib/generators/semantic_ui/install/templates/config/globals/site.variables +3 -0
  309. data/lib/generators/semantic_ui/install/templates/config/modules/accordion.overrides +3 -0
  310. data/lib/generators/semantic_ui/install/templates/config/modules/accordion.variables +3 -0
  311. data/lib/generators/semantic_ui/install/templates/config/modules/chatroom.overrides +3 -0
  312. data/lib/generators/semantic_ui/install/templates/config/modules/chatroom.variables +3 -0
  313. data/lib/generators/semantic_ui/install/templates/config/modules/checkbox.overrides +3 -0
  314. data/lib/generators/semantic_ui/install/templates/config/modules/checkbox.variables +3 -0
  315. data/lib/generators/semantic_ui/install/templates/config/modules/dimmer.overrides +3 -0
  316. data/lib/generators/semantic_ui/install/templates/config/modules/dimmer.variables +3 -0
  317. data/lib/generators/semantic_ui/install/templates/config/modules/dropdown.overrides +3 -0
  318. data/lib/generators/semantic_ui/install/templates/config/modules/dropdown.variables +3 -0
  319. data/lib/generators/semantic_ui/install/templates/config/modules/modal.overrides +3 -0
  320. data/lib/generators/semantic_ui/install/templates/config/modules/modal.variables +3 -0
  321. data/lib/generators/semantic_ui/install/templates/config/modules/nag.overrides +3 -0
  322. data/lib/generators/semantic_ui/install/templates/config/modules/nag.variables +3 -0
  323. data/lib/generators/semantic_ui/install/templates/config/modules/popup.overrides +3 -0
  324. data/lib/generators/semantic_ui/install/templates/config/modules/popup.variables +3 -0
  325. data/lib/generators/semantic_ui/install/templates/config/modules/progress.overrides +3 -0
  326. data/lib/generators/semantic_ui/install/templates/config/modules/progress.variables +3 -0
  327. data/lib/generators/semantic_ui/install/templates/config/modules/rating.overrides +3 -0
  328. data/lib/generators/semantic_ui/install/templates/config/modules/rating.variables +3 -0
  329. data/lib/generators/semantic_ui/install/templates/config/modules/search.overrides +3 -0
  330. data/lib/generators/semantic_ui/install/templates/config/modules/search.variables +3 -0
  331. data/lib/generators/semantic_ui/install/templates/config/modules/shape.overrides +3 -0
  332. data/lib/generators/semantic_ui/install/templates/config/modules/shape.variables +3 -0
  333. data/lib/generators/semantic_ui/install/templates/config/modules/sidebar.overrides +3 -0
  334. data/lib/generators/semantic_ui/install/templates/config/modules/sidebar.variables +3 -0
  335. data/lib/generators/semantic_ui/install/templates/config/modules/sticky.overrides +3 -0
  336. data/lib/generators/semantic_ui/install/templates/config/modules/sticky.variables +3 -0
  337. data/lib/generators/semantic_ui/install/templates/config/modules/tab.overrides +3 -0
  338. data/lib/generators/semantic_ui/install/templates/config/modules/tab.variables +3 -0
  339. data/lib/generators/semantic_ui/install/templates/config/modules/transition.overrides +3 -0
  340. data/lib/generators/semantic_ui/install/templates/config/modules/transition.variables +3 -0
  341. data/lib/generators/semantic_ui/install/templates/config/modules/video.overrides +3 -0
  342. data/lib/generators/semantic_ui/install/templates/config/modules/video.variables +0 -0
  343. data/lib/generators/semantic_ui/install/templates/config/views/ad.overrides +3 -0
  344. data/lib/generators/semantic_ui/install/templates/config/views/ad.variables +3 -0
  345. data/lib/generators/semantic_ui/install/templates/config/views/card.overrides +3 -0
  346. data/lib/generators/semantic_ui/install/templates/config/views/card.variables +3 -0
  347. data/lib/generators/semantic_ui/install/templates/config/views/comment.overrides +3 -0
  348. data/lib/generators/semantic_ui/install/templates/config/views/comment.variables +3 -0
  349. data/lib/generators/semantic_ui/install/templates/config/views/feed.overrides +3 -0
  350. data/lib/generators/semantic_ui/install/templates/config/views/feed.variables +3 -0
  351. data/lib/generators/semantic_ui/install/templates/config/views/item.overrides +3 -0
  352. data/lib/generators/semantic_ui/install/templates/config/views/item.variables +3 -0
  353. data/lib/generators/semantic_ui/install/templates/config/views/statistic.overrides +3 -0
  354. data/lib/generators/semantic_ui/install/templates/config/views/statistic.variables +3 -0
  355. data/lib/generators/semantic_ui/install/templates/semantic_ui.css +52 -0
  356. data/lib/generators/semantic_ui/install/templates/semantic_ui.js +27 -0
  357. data/lib/generators/semantic_ui/install/templates/theme.config +87 -0
  358. data/lib/less/rails/semantic_ui.rb +2 -0
  359. data/lib/less/rails/semantic_ui/engine.rb +18 -0
  360. data/spec/dummy_app/.gitignore +1 -0
  361. data/spec/dummy_app/app/assets/javascripts/application.js +1 -0
  362. data/spec/dummy_app/app/assets/stylesheets/application.css +4 -0
  363. data/spec/dummy_app/init.rb +20 -0
  364. data/spec/generators/install_generator_spec.rb +80 -0
  365. data/spec/spec_helper.rb +1 -0
  366. data/tasks/templates/semantic_ui.css.erb +11 -0
  367. data/tasks/templates/semantic_ui.js.erb +7 -0
  368. data/tasks/update.rake +245 -0
  369. metadata +547 -0
@@ -0,0 +1,1496 @@
1
+ /*
2
+ * # Semantic - Dropdown
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2014 Contributor
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+ ;(function ( $, window, document, undefined ) {
13
+
14
+ "use strict";
15
+
16
+ $.fn.dropdown = function(parameters) {
17
+ var
18
+ $allModules = $(this),
19
+ $document = $(document),
20
+
21
+ moduleSelector = $allModules.selector || '',
22
+
23
+ hasTouch = ('ontouchstart' in document.documentElement),
24
+ time = new Date().getTime(),
25
+ performance = [],
26
+
27
+ query = arguments[0],
28
+ methodInvoked = (typeof query == 'string'),
29
+ queryArguments = [].slice.call(arguments, 1),
30
+ returnedValue
31
+ ;
32
+
33
+ $allModules
34
+ .each(function() {
35
+ var
36
+ settings = ( $.isPlainObject(parameters) )
37
+ ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
38
+ : $.extend({}, $.fn.dropdown.settings),
39
+
40
+ className = settings.className,
41
+ metadata = settings.metadata,
42
+ namespace = settings.namespace,
43
+ selector = settings.selector,
44
+ error = settings.error,
45
+
46
+ eventNamespace = '.' + namespace,
47
+ moduleNamespace = 'module-' + namespace,
48
+
49
+ $module = $(this),
50
+ $text = $module.find(selector.text),
51
+ $search = $module.find(selector.search),
52
+ $input = $module.find(selector.input),
53
+
54
+ $combo = ($module.prev().find(selector.text).size() > 0)
55
+ ? $module.prev().find(selector.text)
56
+ : $module.prev(),
57
+
58
+ $menu = $module.children(selector.menu),
59
+ $item = $menu.find(selector.item),
60
+
61
+ activated = false,
62
+ itemActivated = false,
63
+
64
+ element = this,
65
+ instance = $module.data(moduleNamespace),
66
+ observer,
67
+ module
68
+ ;
69
+
70
+ module = {
71
+
72
+ initialize: function() {
73
+ module.debug('Initializing dropdown', settings);
74
+ module.setup.layout();
75
+ module.save.defaults();
76
+ module.set.selected();
77
+
78
+ if(hasTouch) {
79
+ module.bind.touchEvents();
80
+ }
81
+ module.bind.mouseEvents();
82
+ module.bind.keyboardEvents();
83
+
84
+ module.observeChanges();
85
+ module.instantiate();
86
+ },
87
+
88
+ instantiate: function() {
89
+ module.verbose('Storing instance of dropdown', module);
90
+ instance = module;
91
+ $module
92
+ .data(moduleNamespace, module)
93
+ ;
94
+ },
95
+
96
+ destroy: function() {
97
+ module.verbose('Destroying previous dropdown for', $module);
98
+ module.remove.tabbable();
99
+ $module
100
+ .off(eventNamespace)
101
+ .removeData(moduleNamespace)
102
+ ;
103
+ },
104
+
105
+ observeChanges: function() {
106
+ if('MutationObserver' in window) {
107
+ observer = new MutationObserver(function(mutations) {
108
+ module.debug('DOM tree modified, updating selector cache');
109
+ module.refresh();
110
+ });
111
+ observer.observe(element, {
112
+ childList : true,
113
+ subtree : true
114
+ });
115
+ module.debug('Setting up mutation observer', observer);
116
+ }
117
+ },
118
+
119
+ setup: {
120
+
121
+ layout: function() {
122
+ if( $module.is('select') ) {
123
+ module.setup.select();
124
+ }
125
+ if( module.is.search() && !module.is.searchable() ) {
126
+ $search = $('<input />')
127
+ .addClass(className.search)
128
+ .insertBefore($text)
129
+ ;
130
+ }
131
+ if(settings.allowTab) {
132
+ module.set.tabbable();
133
+ }
134
+ },
135
+ select: function() {
136
+ var
137
+ selectValues = module.get.selectValues()
138
+ ;
139
+ module.debug('Dropdown initialized on a select', selectValues);
140
+ // see if select exists inside a dropdown
141
+ $input = $module;
142
+ if($input.parents(selector.dropdown).size() > 0) {
143
+ module.debug('Creating dropdown menu only from template');
144
+ $module = $input.closest(selector.dropdown);
145
+ if($module.find('.' + className.dropdown).size() === 0) {
146
+ $('<div />')
147
+ .addClass(className.menu)
148
+ .html( settings.templates.menu( selectValues ))
149
+ .appendTo($module)
150
+ ;
151
+ }
152
+ }
153
+ else {
154
+ module.debug('Creating entire dropdown from template');
155
+ $module = $('<div />')
156
+ .attr('class', $input.attr('class') )
157
+ .addClass(className.selection)
158
+ .addClass(className.dropdown)
159
+ .html( settings.templates.dropdown(selectValues) )
160
+ .insertBefore($input)
161
+ ;
162
+ $input
163
+ .removeAttr('class')
164
+ .prependTo($module)
165
+ ;
166
+ }
167
+ module.refresh();
168
+ }
169
+ },
170
+
171
+ refresh: function() {
172
+ $text = $module.find(selector.text);
173
+ $search = $module.find(selector.search);
174
+ $input = $module.find(selector.input);
175
+ $menu = $module.children(selector.menu);
176
+ $item = $menu.find(selector.item);
177
+ },
178
+
179
+ toggle: function() {
180
+ module.verbose('Toggling menu visibility');
181
+ if( !module.is.active() ) {
182
+ module.show();
183
+ }
184
+ else {
185
+ module.hide();
186
+ }
187
+ },
188
+
189
+ show: function() {
190
+ module.debug('Checking if dropdown can show');
191
+ if( !module.is.active() ) {
192
+ module.animate.show(function() {
193
+ if( module.can.click() ) {
194
+ module.bind.intent();
195
+ }
196
+ module.set.visible();
197
+ });
198
+ $.proxy(settings.onShow, element)();
199
+ }
200
+ },
201
+
202
+ hide: function() {
203
+ if( module.is.active() ) {
204
+ module.debug('Hiding dropdown');
205
+ module.animate.hide(function() {
206
+ module.remove.visible();
207
+ });
208
+ $.proxy(settings.onHide, element)();
209
+ }
210
+ },
211
+
212
+ hideOthers: function() {
213
+ module.verbose('Finding other dropdowns to hide');
214
+ $allModules
215
+ .not($module)
216
+ .has(selector.menu + ':visible:not(.' + className.animating + ')')
217
+ .dropdown('hide')
218
+ ;
219
+ },
220
+
221
+ hideSubMenus: function() {
222
+ var
223
+ $subMenus = $menu.find(selector.menu),
224
+ $activeSubMenu = $subMenus.has(selector.item + '.' + className.active)
225
+ ;
226
+ $subMenus
227
+ .not($activeSubMenu)
228
+ .removeClass(className.visible)
229
+ .removeAttr('style')
230
+ ;
231
+ },
232
+
233
+ bind: {
234
+ keyboardEvents: function() {
235
+ module.debug('Binding keyboard events');
236
+ $module
237
+ .on('keydown' + eventNamespace, module.event.keydown)
238
+ ;
239
+ if( module.is.searchable() ) {
240
+ $module
241
+ .on(module.get.inputEvent(), selector.search, module.event.input)
242
+ ;
243
+ }
244
+ },
245
+ touchEvents: function() {
246
+ module.debug('Touch device detected binding additional touch events');
247
+ if( module.is.searchSelection() ) {
248
+ // do nothing special yet
249
+ }
250
+ else {
251
+ $module
252
+ .on('touchstart' + eventNamespace, module.event.test.toggle)
253
+ ;
254
+ }
255
+ $menu
256
+ .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
257
+ ;
258
+ },
259
+ mouseEvents: function() {
260
+ module.verbose('Mouse detected binding mouse events');
261
+ if( module.is.searchSelection() ) {
262
+ $module
263
+ .on('mousedown' + eventNamespace, selector.menu, module.event.menu.activate)
264
+ .on('mouseup' + eventNamespace, selector.menu, module.event.menu.deactivate)
265
+ .on('focus' + eventNamespace, selector.search, module.event.searchFocus)
266
+ .on('click' + eventNamespace, selector.search, module.show)
267
+ .on('blur' + eventNamespace, selector.search, module.event.searchBlur)
268
+ ;
269
+ }
270
+ else {
271
+ if(settings.on == 'click') {
272
+ $module
273
+ .on('click' + eventNamespace, module.event.test.toggle)
274
+ ;
275
+ }
276
+ else if(settings.on == 'hover') {
277
+ $module
278
+ .on('mouseenter' + eventNamespace, module.delay.show)
279
+ .on('mouseleave' + eventNamespace, module.delay.hide)
280
+ ;
281
+ }
282
+ else {
283
+ $module
284
+ .on(settings.on + eventNamespace, module.toggle)
285
+ ;
286
+ }
287
+ $module
288
+ .on('mousedown' + eventNamespace, module.event.mousedown)
289
+ .on('mouseup' + eventNamespace, module.event.mouseup)
290
+ .on('focus' + eventNamespace, module.event.focus)
291
+ .on('blur' + eventNamespace, module.event.blur)
292
+ ;
293
+ }
294
+ $menu
295
+ .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
296
+ .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
297
+ .on('click' + eventNamespace, selector.item, module.event.item.click)
298
+ ;
299
+ },
300
+ intent: function() {
301
+ module.verbose('Binding hide intent event to document');
302
+ if(hasTouch) {
303
+ $document
304
+ .on('touchstart' + eventNamespace, module.event.test.touch)
305
+ .on('touchmove' + eventNamespace, module.event.test.touch)
306
+ ;
307
+ }
308
+ $document
309
+ .on('click' + eventNamespace, module.event.test.hide)
310
+ ;
311
+ }
312
+ },
313
+
314
+ unbind: {
315
+ intent: function() {
316
+ module.verbose('Removing hide intent event from document');
317
+ if(hasTouch) {
318
+ $document
319
+ .off('touchstart' + eventNamespace)
320
+ .off('touchmove' + eventNamespace)
321
+ ;
322
+ }
323
+ $document
324
+ .off('click' + eventNamespace)
325
+ ;
326
+ }
327
+ },
328
+
329
+ filter: function(searchTerm) {
330
+ var
331
+ $results = $(),
332
+ exactRegExp = new RegExp('(?:\s|^)' + searchTerm, 'i'),
333
+ fullTextRegExp = new RegExp(searchTerm, 'i'),
334
+ allItemsFiltered,
335
+ $filteredItems
336
+ ;
337
+ $item
338
+ .each(function(){
339
+ var
340
+ $choice = $(this),
341
+ text = ( $choice.data(metadata.text) !== undefined )
342
+ ? $choice.data(metadata.text)
343
+ : (settings.preserveHTML)
344
+ ? $choice.html()
345
+ : $choice.text(),
346
+ value = ( $choice.data(metadata.value) !== undefined)
347
+ ? $choice.data(metadata.value)
348
+ : (typeof text === 'string')
349
+ ? text.toLowerCase()
350
+ : text
351
+ ;
352
+ if( exactRegExp.test( text ) || exactRegExp.test( value ) ) {
353
+ $results = $results.add($choice);
354
+ }
355
+ else if(settings.fullTextSearch) {
356
+ if( fullTextRegExp.test( text ) || fullTextRegExp.test( value ) ) {
357
+ $results = $results.add($choice);
358
+ }
359
+ }
360
+ })
361
+ ;
362
+ $filteredItems = $item.not($results);
363
+ allItemsFiltered = ($filteredItems.size() == $item.size());
364
+
365
+ module.remove.filteredItem();
366
+ module.remove.selectedItem();
367
+ $filteredItems
368
+ .addClass(className.filtered)
369
+ ;
370
+ $item
371
+ .not('.' + className.filtered)
372
+ .eq(0)
373
+ .addClass(className.selected)
374
+ ;
375
+ if(allItemsFiltered) {
376
+ module.hide();
377
+ }
378
+ },
379
+
380
+ focusSearch: function() {
381
+ if( module.is.search() ) {
382
+ $search
383
+ .focus()
384
+ ;
385
+ }
386
+ },
387
+
388
+ event: {
389
+ // prevents focus callback from occuring on mousedown
390
+ mousedown: function() {
391
+ activated = true;
392
+ },
393
+ mouseup: function() {
394
+ activated = false;
395
+ },
396
+ focus: function() {
397
+ if(!activated && module.is.hidden()) {
398
+ module.show();
399
+ }
400
+ },
401
+ blur: function(event) {
402
+ if(!activated) {
403
+ module.hide();
404
+ }
405
+ },
406
+ searchFocus: function() {
407
+ activated = true;
408
+ module.show();
409
+ },
410
+ searchBlur: function(event) {
411
+ if(!itemActivated) {
412
+ module.hide();
413
+ }
414
+ },
415
+ input: function(event) {
416
+ var
417
+ query = $search.val()
418
+ ;
419
+ if(module.is.searchSelection()) {
420
+ if( module.can.show() ) {
421
+ module.show();
422
+ }
423
+ module.set.filtered();
424
+ }
425
+ module.filter(query);
426
+ },
427
+ keydown: function(event) {
428
+ var
429
+ $selectedItem = $item.not(className.filtered).filter('.' + className.selected).eq(0),
430
+ $visibleItems = $item.not('.' + className.filtered),
431
+ pressedKey = event.which,
432
+ keys = {
433
+ enter : 13,
434
+ escape : 27,
435
+ upArrow : 38,
436
+ downArrow : 40
437
+ },
438
+ selectedClass = className.selected,
439
+ currentIndex = $visibleItems.index( $selectedItem ),
440
+ hasSelectedItem = ($selectedItem.size() > 0),
441
+ $nextItem,
442
+ newIndex
443
+ ;
444
+ // default to activated choice if no selection present
445
+ if(!hasSelectedItem) {
446
+ $selectedItem = $item.filter('.' + className.active).eq(0);
447
+ hasSelectedItem = ($selectedItem.size() > 0);
448
+ }
449
+ // close shortcuts
450
+ if(pressedKey == keys.escape) {
451
+ module.verbose('Escape key pressed, closing dropdown');
452
+ module.hide();
453
+ }
454
+ // result shortcuts
455
+ if(module.is.visible()) {
456
+ if(pressedKey == keys.enter && hasSelectedItem) {
457
+ module.verbose('Enter key pressed, choosing selected item');
458
+ $.proxy(module.event.item.click, $selectedItem)(event);
459
+ event.preventDefault();
460
+ return false;
461
+ }
462
+ else if(pressedKey == keys.upArrow) {
463
+ if(!hasSelectedItem) {
464
+ $nextItem = $visibleItems.eq(0);
465
+ }
466
+ else {
467
+ $nextItem = $selectedItem.prevAll(selector.item + ':not(.' + className.filtered + ')').eq(0);
468
+ }
469
+ if(currentIndex !== 0) {
470
+ module.verbose('Up key pressed, changing active item');
471
+ $item
472
+ .removeClass(selectedClass)
473
+ ;
474
+ $nextItem
475
+ .addClass(selectedClass)
476
+ ;
477
+ module.set.scrollPosition($nextItem);
478
+ }
479
+ event.preventDefault();
480
+ }
481
+ else if(pressedKey == keys.downArrow) {
482
+ if(!hasSelectedItem) {
483
+ $nextItem = $visibleItems.eq(0);
484
+ }
485
+ else {
486
+ $nextItem = $selectedItem.nextAll(selector.item + ':not(.' + className.filtered + ')').eq(0);
487
+ }
488
+ if(currentIndex + 1 < $visibleItems.size() ) {
489
+ module.verbose('Down key pressed, changing active item');
490
+ $item
491
+ .removeClass(selectedClass)
492
+ ;
493
+ $nextItem
494
+ .addClass(selectedClass)
495
+ ;
496
+ module.set.scrollPosition($nextItem);
497
+ }
498
+ event.preventDefault();
499
+ }
500
+ }
501
+ else {
502
+ if(pressedKey == keys.enter) {
503
+ module.show();
504
+ }
505
+ }
506
+ },
507
+ test: {
508
+ toggle: function(event) {
509
+ if( module.determine.eventInMenu(event, module.toggle) ) {
510
+ event.preventDefault();
511
+ }
512
+ },
513
+ touch: function(event) {
514
+ module.determine.eventInMenu(event, function() {
515
+ if(event.type == 'touchstart') {
516
+ module.timer = setTimeout(module.hide, settings.delay.touch);
517
+ }
518
+ else if(event.type == 'touchmove') {
519
+ clearTimeout(module.timer);
520
+ }
521
+ });
522
+ event.stopPropagation();
523
+ },
524
+ hide: function(event) {
525
+ module.determine.eventInModule(event, module.hide);
526
+ }
527
+ },
528
+
529
+ menu: {
530
+ activate: function() {
531
+ itemActivated = true;
532
+ },
533
+ deactivate: function() {
534
+ itemActivated = false;
535
+ }
536
+ },
537
+ item: {
538
+ mouseenter: function(event) {
539
+ var
540
+ $currentMenu = $(this).find(selector.menu),
541
+ $otherMenus = $(this).siblings(selector.item).children(selector.menu)
542
+ ;
543
+ if( $currentMenu.size() > 0 ) {
544
+ clearTimeout(module.itemTimer);
545
+ module.itemTimer = setTimeout(function() {
546
+ module.animate.hide(false, $otherMenus);
547
+ module.verbose('Showing sub-menu', $currentMenu);
548
+ module.animate.show(false, $currentMenu);
549
+ }, settings.delay.show * 2);
550
+ event.preventDefault();
551
+ }
552
+ },
553
+
554
+ mouseleave: function(event) {
555
+ var
556
+ $currentMenu = $(this).find(selector.menu)
557
+ ;
558
+ if($currentMenu.size() > 0) {
559
+ clearTimeout(module.itemTimer);
560
+ module.itemTimer = setTimeout(function() {
561
+ module.verbose('Hiding sub-menu', $currentMenu);
562
+ module.animate.hide(false, $currentMenu);
563
+ }, settings.delay.hide);
564
+ }
565
+ },
566
+
567
+ click: function (event) {
568
+ var
569
+ $choice = $(this),
570
+ text = ( $choice.data(metadata.text) !== undefined )
571
+ ? $choice.data(metadata.text)
572
+ : (settings.preserveHTML)
573
+ ? $choice.html()
574
+ : $choice.text(),
575
+ value = ( $choice.data(metadata.value) !== undefined)
576
+ ? $choice.data(metadata.value)
577
+ : (typeof text === 'string')
578
+ ? text.toLowerCase()
579
+ : text,
580
+ callback = function() {
581
+ module.remove.searchTerm();
582
+ module.remove.filteredItem();
583
+ module.determine.selectAction(text, value);
584
+ $.proxy(settings.onChange, element)(value, text, $choice);
585
+ },
586
+ openingSubMenu = ($choice.find(selector.menu).size() > 0)
587
+ ;
588
+ if( !openingSubMenu ) {
589
+ callback();
590
+ }
591
+ }
592
+
593
+ },
594
+
595
+ resetStyle: function() {
596
+ $(this).removeAttr('style');
597
+ }
598
+
599
+ },
600
+
601
+ determine: {
602
+ selectAction: function(text, value) {
603
+ module.verbose('Determining action', settings.action);
604
+ if( $.isFunction( module.action[settings.action] ) ) {
605
+ module.verbose('Triggering preset action', settings.action, text, value);
606
+ module.action[ settings.action ](text, value);
607
+ }
608
+ else if( $.isFunction(settings.action) ) {
609
+ module.verbose('Triggering user action', settings.action, text, value);
610
+ settings.action(text, value);
611
+ }
612
+ else {
613
+ module.error(error.action, settings.action);
614
+ }
615
+ },
616
+ eventInModule: function(event, callback) {
617
+ callback = callback || function(){};
618
+ if( $(event.target).closest($module).size() === 0 ) {
619
+ module.verbose('Triggering event', callback);
620
+ callback();
621
+ return true;
622
+ }
623
+ else {
624
+ module.verbose('Event occurred in dropdown, canceling callback');
625
+ return false;
626
+ }
627
+ },
628
+ eventInMenu: function(event, callback) {
629
+ callback = callback || function(){};
630
+ if( $(event.target).closest($menu).size() === 0 ) {
631
+ module.verbose('Triggering event', callback);
632
+ callback();
633
+ return true;
634
+ }
635
+ else {
636
+ module.verbose('Event occurred in dropdown menu, canceling callback');
637
+ return false;
638
+ }
639
+ }
640
+ },
641
+
642
+ action: {
643
+
644
+ nothing: function() {},
645
+
646
+ hide: function() {
647
+ module.hide();
648
+ },
649
+
650
+ select: function(text, value) {
651
+ value = (value !== undefined)
652
+ ? value
653
+ : text
654
+ ;
655
+ module.set.selected(value);
656
+ module.set.value(value);
657
+ module.hide();
658
+ },
659
+
660
+ activate: function(text, value) {
661
+ value = (value !== undefined)
662
+ ? value
663
+ : text
664
+ ;
665
+ module.set.selected(value);
666
+ module.set.value(value);
667
+ module.hide();
668
+ },
669
+
670
+ combo: function(text, value) {
671
+ value = (value !== undefined)
672
+ ? value
673
+ : text
674
+ ;
675
+ module.set.selected(value);
676
+ module.set.value(value);
677
+ module.hide();
678
+ }
679
+
680
+ },
681
+
682
+ get: {
683
+ text: function() {
684
+ return $text.text();
685
+ },
686
+ value: function() {
687
+ return ($input.size() > 0)
688
+ ? $input.val()
689
+ : $module.data(metadata.value)
690
+ ;
691
+ },
692
+ inputEvent: function() {
693
+ var
694
+ input = $search[0]
695
+ ;
696
+ if(input) {
697
+ return (input.oninput !== undefined)
698
+ ? 'input'
699
+ : (input.onpropertychange !== undefined)
700
+ ? 'propertychange'
701
+ : 'keyup'
702
+ ;
703
+ }
704
+ return false;
705
+ },
706
+ selectValues: function() {
707
+ var
708
+ select = {
709
+ values : {}
710
+ }
711
+ ;
712
+ $module
713
+ .find('option')
714
+ .each(function() {
715
+ var
716
+ name = $(this).html(),
717
+ value = ( $(this).attr('value') !== undefined )
718
+ ? $(this).attr('value')
719
+ : name
720
+ ;
721
+ if(value === '') {
722
+ select.placeholder = name;
723
+ }
724
+ else {
725
+ select.values[value] = name;
726
+ }
727
+ })
728
+ ;
729
+ module.debug('Retrieved values from select', select);
730
+ return select;
731
+ },
732
+ item: function(value, strict) {
733
+ var
734
+ $selectedItem = false
735
+ ;
736
+ value = (value !== undefined)
737
+ ? value
738
+ : ( module.get.value() !== undefined)
739
+ ? module.get.value()
740
+ : module.get.text()
741
+ ;
742
+ strict = (value === '' || value === 0)
743
+ ? true
744
+ : strict || false
745
+ ;
746
+ if(value !== undefined) {
747
+ $item
748
+ .each(function() {
749
+ var
750
+ $choice = $(this),
751
+ optionText = ( $choice.data(metadata.text) !== undefined )
752
+ ? $choice.data(metadata.text)
753
+ : (settings.preserveHTML)
754
+ ? $choice.html()
755
+ : $choice.text(),
756
+ optionValue = ( $choice.data(metadata.value) !== undefined )
757
+ ? $choice.data(metadata.value)
758
+ : (typeof optionText === 'string')
759
+ ? optionText.toLowerCase()
760
+ : optionText
761
+ ;
762
+ if(strict) {
763
+ module.verbose('Ambiguous dropdown value using strict type check', $choice, value);
764
+ if( optionValue === value ) {
765
+ $selectedItem = $(this);
766
+ }
767
+ else if( !$selectedItem && optionText === value ) {
768
+ $selectedItem = $(this);
769
+ }
770
+ }
771
+ else {
772
+ if( optionValue == value ) {
773
+ module.verbose('Found select item by value', optionValue, value);
774
+ $selectedItem = $(this);
775
+ }
776
+ else if( !$selectedItem && optionText == value ) {
777
+ module.verbose('Found select item by text', optionText, value);
778
+ $selectedItem = $(this);
779
+ }
780
+ }
781
+ })
782
+ ;
783
+ }
784
+ else {
785
+ value = module.get.text();
786
+ }
787
+ return $selectedItem || false;
788
+ }
789
+ },
790
+
791
+ restore: {
792
+ defaults: function() {
793
+ module.restore.defaultText();
794
+ module.restore.defaultValue();
795
+ },
796
+ defaultText: function() {
797
+ var
798
+ defaultText = $module.data(metadata.defaultText)
799
+ ;
800
+ module.debug('Restoring default text', defaultText);
801
+ module.set.text(defaultText);
802
+ },
803
+ defaultValue: function() {
804
+ var
805
+ defaultValue = $module.data(metadata.defaultValue)
806
+ ;
807
+ if(defaultValue !== undefined) {
808
+ module.debug('Restoring default value', defaultValue);
809
+ module.set.selected(defaultValue);
810
+ module.set.value(defaultValue);
811
+ }
812
+ }
813
+ },
814
+
815
+ save: {
816
+ defaults: function() {
817
+ module.save.defaultText();
818
+ module.save.defaultValue();
819
+ },
820
+ defaultValue: function() {
821
+ $module.data(metadata.defaultValue, module.get.value() );
822
+ },
823
+ defaultText: function() {
824
+ $module.data(metadata.defaultText, $text.text() );
825
+ }
826
+ },
827
+
828
+ set: {
829
+ filtered: function() {
830
+ $text.addClass(className.filtered);
831
+ },
832
+ tabbable: function() {
833
+ if( module.is.searchable() ) {
834
+ module.debug('Searchable dropdown initialized');
835
+ $search
836
+ .val('')
837
+ .attr('tabindex', 0)
838
+ ;
839
+ $menu
840
+ .attr('tabindex', '-1')
841
+ ;
842
+ }
843
+ else {
844
+ module.debug('Simple selection dropdown initialized');
845
+ if(!$module.attr('tabindex') ) {
846
+ $module
847
+ .attr('tabindex', 0)
848
+ ;
849
+ $menu
850
+ .attr('tabindex', '-1')
851
+ ;
852
+ }
853
+ }
854
+ },
855
+ scrollPosition: function($item) {
856
+ var
857
+ $item = $item || module.get.item(),
858
+ hasActive = ($item && $item.size() > 0),
859
+ edgeTolerance = 5,
860
+ offset,
861
+ itemHeight,
862
+ itemOffset,
863
+ menuOffset,
864
+ menuScroll,
865
+ menuHeight,
866
+ abovePage,
867
+ belowPage
868
+ ;
869
+ if($item && hasActive) {
870
+ menuHeight = $menu.height();
871
+ itemHeight = $item.height();
872
+ menuScroll = $menu.scrollTop();
873
+ menuOffset = $menu.offset().top;
874
+ itemOffset = $item.offset().top;
875
+ offset = menuScroll - menuOffset + itemOffset;
876
+ belowPage = menuScroll + menuHeight < (offset + edgeTolerance);
877
+ abovePage = ((offset - edgeTolerance) < menuScroll);
878
+ if(abovePage || belowPage) {
879
+ module.debug('Scrolling to active item');
880
+ $menu
881
+ .scrollTop(offset)
882
+ ;
883
+ }
884
+ }
885
+ },
886
+ text: function(text) {
887
+ if(settings.action == 'combo') {
888
+ module.debug('Changing combo button text', text, $combo);
889
+ if(settings.preserveHTML) {
890
+ $combo.html(text);
891
+ }
892
+ else {
893
+ $combo.text(text);
894
+ }
895
+ }
896
+ else if(settings.action !== 'select') {
897
+ module.debug('Changing text', text, $text);
898
+ $text
899
+ .removeClass(className.filtered)
900
+ .removeClass(className.placeholder)
901
+ ;
902
+ if(settings.preserveHTML) {
903
+ $text.html(text);
904
+ }
905
+ else {
906
+ $text.text(text);
907
+ }
908
+ }
909
+ },
910
+ value: function(value) {
911
+ module.debug('Adding selected value to hidden input', value, $input);
912
+ if($input.size() > 0) {
913
+ $input
914
+ .val(value)
915
+ .trigger('change')
916
+ ;
917
+ }
918
+ else {
919
+ $module.data(metadata.value, value);
920
+ }
921
+ },
922
+ active: function() {
923
+ $module
924
+ .addClass(className.active)
925
+ ;
926
+ },
927
+ visible: function() {
928
+ $module.addClass(className.visible);
929
+ },
930
+ selected: function(value) {
931
+ var
932
+ $selectedItem = module.get.item(value),
933
+ selectedText
934
+ ;
935
+ if($selectedItem) {
936
+ module.debug('Setting selected menu item to', $selectedItem);
937
+ selectedText = ($selectedItem.data(metadata.text) !== undefined)
938
+ ? $selectedItem.data(metadata.text)
939
+ : (settings.preserveHTML)
940
+ ? $selectedItem.html()
941
+ : $selectedItem.text()
942
+ ;
943
+ module.remove.activeItem();
944
+ module.remove.selectedItem();
945
+ $selectedItem
946
+ .addClass(className.active)
947
+ .addClass(className.selected)
948
+ ;
949
+ module.set.text(selectedText);
950
+ }
951
+ }
952
+ },
953
+
954
+ remove: {
955
+ active: function() {
956
+ $module.removeClass(className.active);
957
+ },
958
+ visible: function() {
959
+ $module.removeClass(className.visible);
960
+ },
961
+ activeItem: function() {
962
+ $item.removeClass(className.active);
963
+ },
964
+ filteredItem: function() {
965
+ $item.removeClass(className.filtered);
966
+ },
967
+ searchTerm: function() {
968
+ $search.val('');
969
+ },
970
+ selectedItem: function() {
971
+ $item.removeClass(className.selected);
972
+ },
973
+ tabbable: function() {
974
+ if( module.is.searchable() ) {
975
+ module.debug('Searchable dropdown initialized');
976
+ $search
977
+ .attr('tabindex', '-1')
978
+ ;
979
+ $menu
980
+ .attr('tabindex', '-1')
981
+ ;
982
+ }
983
+ else {
984
+ module.debug('Simple selection dropdown initialized');
985
+ $module
986
+ .attr('tabindex', '-1')
987
+ ;
988
+ $menu
989
+ .attr('tabindex', '-1')
990
+ ;
991
+ }
992
+ }
993
+ },
994
+
995
+ is: {
996
+ search: function() {
997
+ return $module.hasClass(className.search);
998
+ },
999
+ searchable: function() {
1000
+ return ($search.size() > 0);
1001
+ },
1002
+ searchSelection: function() {
1003
+ return ( module.is.searchable() && $search.parent().is($module) );
1004
+ },
1005
+ selection: function() {
1006
+ return $module.hasClass(className.selection);
1007
+ },
1008
+ animated: function($subMenu) {
1009
+ return ($subMenu)
1010
+ ? $subMenu.is(':animated') || $subMenu.transition && $subMenu.transition('is animating')
1011
+ : $menu.is(':animated') || $menu.transition && $menu.transition('is animating')
1012
+ ;
1013
+ },
1014
+ active: function() {
1015
+ return $module.hasClass(className.active);
1016
+ },
1017
+ visible: function($subMenu) {
1018
+ return ($subMenu)
1019
+ ? $subMenu.is(':visible')
1020
+ : $menu.is(':visible')
1021
+ ;
1022
+ },
1023
+ hidden: function($subMenu) {
1024
+ return ($subMenu)
1025
+ ? $subMenu.is(':hidden')
1026
+ : $menu.is(':hidden')
1027
+ ;
1028
+ }
1029
+ },
1030
+
1031
+ can: {
1032
+ click: function() {
1033
+ return (hasTouch || settings.on == 'click');
1034
+ },
1035
+ show: function() {
1036
+ return !$module.hasClass(className.disabled);
1037
+ }
1038
+ },
1039
+
1040
+ animate: {
1041
+ show: function(callback, $subMenu) {
1042
+ var
1043
+ $currentMenu = $subMenu || $menu,
1044
+ start = ($subMenu)
1045
+ ? function() {}
1046
+ : function() {
1047
+ module.hideOthers();
1048
+ module.set.active();
1049
+ module.set.scrollPosition();
1050
+ }
1051
+ ;
1052
+ callback = callback || function(){};
1053
+ module.verbose('Doing menu show animation', $currentMenu);
1054
+ if( module.is.hidden($currentMenu) ) {
1055
+ if(settings.transition == 'none') {
1056
+ $.proxy(callback, element)();
1057
+ }
1058
+ else if($.fn.transition !== undefined && $module.transition('is supported')) {
1059
+ $currentMenu
1060
+ .transition({
1061
+ animation : settings.transition + ' in',
1062
+ debug : settings.debug,
1063
+ verbose : settings.verbose,
1064
+ duration : settings.duration,
1065
+ queue : true,
1066
+ onStart : start,
1067
+ onComplete : function() {
1068
+ $.proxy(callback, element)();
1069
+ }
1070
+ })
1071
+ ;
1072
+ }
1073
+ else if(settings.transition == 'slide down') {
1074
+ start();
1075
+ $currentMenu
1076
+ .hide()
1077
+ .clearQueue()
1078
+ .children()
1079
+ .clearQueue()
1080
+ .css('opacity', 0)
1081
+ .delay(50)
1082
+ .animate({
1083
+ opacity : 1
1084
+ }, settings.duration, 'easeOutQuad', module.event.resetStyle)
1085
+ .end()
1086
+ .slideDown(100, 'easeOutQuad', function() {
1087
+ $.proxy(module.event.resetStyle, this)();
1088
+ $.proxy(callback, element)();
1089
+ })
1090
+ ;
1091
+ }
1092
+ else if(settings.transition == 'fade') {
1093
+ start();
1094
+ $currentMenu
1095
+ .hide()
1096
+ .clearQueue()
1097
+ .fadeIn(settings.duration, function() {
1098
+ $.proxy(module.event.resetStyle, this)();
1099
+ $.proxy(callback, element)();
1100
+ })
1101
+ ;
1102
+ }
1103
+ else {
1104
+ module.error(error.transition, settings.transition);
1105
+ }
1106
+ }
1107
+ },
1108
+ hide: function(callback, $subMenu) {
1109
+ var
1110
+ $currentMenu = $subMenu || $menu,
1111
+ start = ($subMenu)
1112
+ ? function() {}
1113
+ : function() {
1114
+ if( module.can.click() ) {
1115
+ module.unbind.intent();
1116
+ }
1117
+ module.focusSearch();
1118
+ module.hideSubMenus();
1119
+ module.remove.active();
1120
+ }
1121
+ ;
1122
+ callback = callback || function(){};
1123
+ if( module.is.visible($currentMenu) ) {
1124
+ module.verbose('Doing menu hide animation', $currentMenu);
1125
+
1126
+ if(settings.transition == 'none') {
1127
+ $.proxy(callback, element)();
1128
+ }
1129
+ else if($.fn.transition !== undefined && $module.transition('is supported')) {
1130
+ $currentMenu
1131
+ .transition({
1132
+ animation : settings.transition + ' out',
1133
+ duration : settings.duration,
1134
+ debug : settings.debug,
1135
+ verbose : settings.verbose,
1136
+ queue : true,
1137
+ onStart : start,
1138
+ onComplete : function() {
1139
+ $.proxy(callback, element)();
1140
+ }
1141
+ })
1142
+ ;
1143
+ }
1144
+ else if(settings.transition == 'slide down') {
1145
+ start();
1146
+ $currentMenu
1147
+ .show()
1148
+ .clearQueue()
1149
+ .children()
1150
+ .clearQueue()
1151
+ .css('opacity', 1)
1152
+ .animate({
1153
+ opacity : 0
1154
+ }, 100, 'easeOutQuad', module.event.resetStyle)
1155
+ .end()
1156
+ .delay(50)
1157
+ .slideUp(100, 'easeOutQuad', function() {
1158
+ $.proxy(module.event.resetStyle, this)();
1159
+ $.proxy(callback, element)();
1160
+ })
1161
+ ;
1162
+ }
1163
+ else if(settings.transition == 'fade') {
1164
+ start();
1165
+ $currentMenu
1166
+ .show()
1167
+ .clearQueue()
1168
+ .fadeOut(150, function() {
1169
+ $.proxy(module.event.resetStyle, this)();
1170
+ $.proxy(callback, element)();
1171
+ })
1172
+ ;
1173
+ }
1174
+ else {
1175
+ module.error(error.transition);
1176
+ }
1177
+ }
1178
+ }
1179
+ },
1180
+
1181
+ delay: {
1182
+ show: function() {
1183
+ module.verbose('Delaying show event to ensure user intent');
1184
+ clearTimeout(module.timer);
1185
+ module.timer = setTimeout(module.show, settings.delay.show);
1186
+ },
1187
+ hide: function() {
1188
+ module.verbose('Delaying hide event to ensure user intent');
1189
+ clearTimeout(module.timer);
1190
+ module.timer = setTimeout(module.hide, settings.delay.hide);
1191
+ }
1192
+ },
1193
+
1194
+ setting: function(name, value) {
1195
+ module.debug('Changing setting', name, value);
1196
+ if( $.isPlainObject(name) ) {
1197
+ $.extend(true, settings, name);
1198
+ }
1199
+ else if(value !== undefined) {
1200
+ settings[name] = value;
1201
+ }
1202
+ else {
1203
+ return settings[name];
1204
+ }
1205
+ },
1206
+ internal: function(name, value) {
1207
+ if( $.isPlainObject(name) ) {
1208
+ $.extend(true, module, name);
1209
+ }
1210
+ else if(value !== undefined) {
1211
+ module[name] = value;
1212
+ }
1213
+ else {
1214
+ return module[name];
1215
+ }
1216
+ },
1217
+ debug: function() {
1218
+ if(settings.debug) {
1219
+ if(settings.performance) {
1220
+ module.performance.log(arguments);
1221
+ }
1222
+ else {
1223
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
1224
+ module.debug.apply(console, arguments);
1225
+ }
1226
+ }
1227
+ },
1228
+ verbose: function() {
1229
+ if(settings.verbose && settings.debug) {
1230
+ if(settings.performance) {
1231
+ module.performance.log(arguments);
1232
+ }
1233
+ else {
1234
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
1235
+ module.verbose.apply(console, arguments);
1236
+ }
1237
+ }
1238
+ },
1239
+ error: function() {
1240
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
1241
+ module.error.apply(console, arguments);
1242
+ },
1243
+ performance: {
1244
+ log: function(message) {
1245
+ var
1246
+ currentTime,
1247
+ executionTime,
1248
+ previousTime
1249
+ ;
1250
+ if(settings.performance) {
1251
+ currentTime = new Date().getTime();
1252
+ previousTime = time || currentTime;
1253
+ executionTime = currentTime - previousTime;
1254
+ time = currentTime;
1255
+ performance.push({
1256
+ 'Name' : message[0],
1257
+ 'Arguments' : [].slice.call(message, 1) || '',
1258
+ 'Element' : element,
1259
+ 'Execution Time' : executionTime
1260
+ });
1261
+ }
1262
+ clearTimeout(module.performance.timer);
1263
+ module.performance.timer = setTimeout(module.performance.display, 100);
1264
+ },
1265
+ display: function() {
1266
+ var
1267
+ title = settings.name + ':',
1268
+ totalTime = 0
1269
+ ;
1270
+ time = false;
1271
+ clearTimeout(module.performance.timer);
1272
+ $.each(performance, function(index, data) {
1273
+ totalTime += data['Execution Time'];
1274
+ });
1275
+ title += ' ' + totalTime + 'ms';
1276
+ if(moduleSelector) {
1277
+ title += ' \'' + moduleSelector + '\'';
1278
+ }
1279
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
1280
+ console.groupCollapsed(title);
1281
+ if(console.table) {
1282
+ console.table(performance);
1283
+ }
1284
+ else {
1285
+ $.each(performance, function(index, data) {
1286
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
1287
+ });
1288
+ }
1289
+ console.groupEnd();
1290
+ }
1291
+ performance = [];
1292
+ }
1293
+ },
1294
+ invoke: function(query, passedArguments, context) {
1295
+ var
1296
+ object = instance,
1297
+ maxDepth,
1298
+ found,
1299
+ response
1300
+ ;
1301
+ passedArguments = passedArguments || queryArguments;
1302
+ context = element || context;
1303
+ if(typeof query == 'string' && object !== undefined) {
1304
+ query = query.split(/[\. ]/);
1305
+ maxDepth = query.length - 1;
1306
+ $.each(query, function(depth, value) {
1307
+ var camelCaseValue = (depth != maxDepth)
1308
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1309
+ : query
1310
+ ;
1311
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
1312
+ object = object[camelCaseValue];
1313
+ }
1314
+ else if( object[camelCaseValue] !== undefined ) {
1315
+ found = object[camelCaseValue];
1316
+ return false;
1317
+ }
1318
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
1319
+ object = object[value];
1320
+ }
1321
+ else if( object[value] !== undefined ) {
1322
+ found = object[value];
1323
+ return false;
1324
+ }
1325
+ else {
1326
+ module.error(error.method, query);
1327
+ return false;
1328
+ }
1329
+ });
1330
+ }
1331
+ if ( $.isFunction( found ) ) {
1332
+ response = found.apply(context, passedArguments);
1333
+ }
1334
+ else if(found !== undefined) {
1335
+ response = found;
1336
+ }
1337
+ if($.isArray(returnedValue)) {
1338
+ returnedValue.push(response);
1339
+ }
1340
+ else if(returnedValue !== undefined) {
1341
+ returnedValue = [returnedValue, response];
1342
+ }
1343
+ else if(response !== undefined) {
1344
+ returnedValue = response;
1345
+ }
1346
+ return found;
1347
+ }
1348
+ };
1349
+
1350
+ if(methodInvoked) {
1351
+ if(instance === undefined) {
1352
+ module.initialize();
1353
+ }
1354
+ module.invoke(query);
1355
+ }
1356
+ else {
1357
+ if(instance !== undefined) {
1358
+ module.destroy();
1359
+ }
1360
+ module.initialize();
1361
+ }
1362
+ })
1363
+ ;
1364
+
1365
+ return (returnedValue !== undefined)
1366
+ ? returnedValue
1367
+ : this
1368
+ ;
1369
+ };
1370
+
1371
+ $.fn.dropdown.settings = {
1372
+
1373
+ debug : false,
1374
+ verbose : true,
1375
+ performance : true,
1376
+
1377
+ on : 'click',
1378
+ action : 'activate',
1379
+
1380
+ allowTab : true,
1381
+ fullTextSearch : true,
1382
+ preserveHTML : true,
1383
+
1384
+ delay : {
1385
+ show : 200,
1386
+ hide : 300,
1387
+ touch : 50
1388
+ },
1389
+
1390
+ transition : 'slide down',
1391
+ duration : 250,
1392
+
1393
+ /* Callbacks */
1394
+
1395
+ onChange : function(value, text){},
1396
+ onShow : function(){},
1397
+ onHide : function(){},
1398
+
1399
+ /* Component */
1400
+
1401
+ name : 'Dropdown',
1402
+ namespace : 'dropdown',
1403
+
1404
+ error : {
1405
+ action : 'You called a dropdown action that was not defined',
1406
+ method : 'The method you called is not defined.',
1407
+ transition : 'The requested transition was not found'
1408
+ },
1409
+
1410
+ metadata: {
1411
+ defaultText : 'defaultText',
1412
+ defaultValue : 'defaultValue',
1413
+ text : 'text',
1414
+ value : 'value'
1415
+ },
1416
+
1417
+ selector : {
1418
+ dropdown : '.ui.dropdown',
1419
+ text : '> .text:not(.icon)',
1420
+ input : '> input[type="hidden"], > select',
1421
+ search : '> input.search, .menu > .search > input, .menu > input.search',
1422
+ menu : '.menu',
1423
+ item : '.item'
1424
+ },
1425
+
1426
+ className : {
1427
+ active : 'active',
1428
+ animating : 'animating',
1429
+ disabled : 'disabled',
1430
+ dropdown : 'ui dropdown',
1431
+ filtered : 'filtered',
1432
+ menu : 'menu',
1433
+ placeholder : 'default',
1434
+ search : 'search',
1435
+ selected : 'selected',
1436
+ selection : 'selection',
1437
+ visible : 'visible'
1438
+ }
1439
+
1440
+ };
1441
+
1442
+ /* Templates */
1443
+ $.fn.dropdown.settings.templates = {
1444
+ menu: function(select) {
1445
+ var
1446
+ placeholder = select.placeholder || false,
1447
+ values = select.values || {},
1448
+ html = ''
1449
+ ;
1450
+ $.each(select.values, function(value, name) {
1451
+ if(value === name) {
1452
+ html += '<div class="item">' + name + '</div>';
1453
+ }
1454
+ else {
1455
+ html += '<div class="item" data-value="' + value + '">' + name + '</div>';
1456
+ }
1457
+ });
1458
+ return html;
1459
+ },
1460
+ dropdown: function(select) {
1461
+ var
1462
+ placeholder = select.placeholder || false,
1463
+ values = select.values || {},
1464
+ html = ''
1465
+ ;
1466
+ html += '<i class="dropdown icon"></i>';
1467
+ if(select.placeholder) {
1468
+ html += '<div class="default text">' + placeholder + '</div>';
1469
+ }
1470
+ else {
1471
+ html += '<div class="text"></div>';
1472
+ }
1473
+ html += '<div class="menu">';
1474
+ $.each(select.values, function(value, name) {
1475
+ if(value === name) {
1476
+ html += '<div class="item">' + name + '</div>';
1477
+ }
1478
+ else {
1479
+ html += '<div class="item" data-value="' + value + '">' + name + '</div>';
1480
+ }
1481
+ });
1482
+ html += '</div>';
1483
+ return html;
1484
+ }
1485
+ };
1486
+
1487
+
1488
+ /* Dependencies */
1489
+ $.extend( $.easing, {
1490
+ easeOutQuad: function (x, t, b, c, d) {
1491
+ return -c *(t/=d)*(t-2) + b;
1492
+ },
1493
+ });
1494
+
1495
+
1496
+ })( jQuery, window , document );