card 1.92.2 → 1.93.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (965) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +3 -3
  3. data/VERSION +1 -1
  4. data/card.gemspec +1 -1
  5. data/config/initializers/01_core_extensions/array.rb +1 -1
  6. data/config/initializers/01_core_extensions/object.rb +9 -0
  7. data/config/initializers/01_core_extensions/persistent_identifiers.rb +1 -1
  8. data/config/initializers/02_patches/action_dispatch.rb +1 -0
  9. data/config/initializers/02_patches/active_record.rb +42 -0
  10. data/config/initializers/02_patches/active_support.rb +13 -0
  11. data/config/initializers/deck_config.rb +3 -0
  12. data/config/initializers/patches.rb +37 -6
  13. data/config/locales/de.yml +1 -3
  14. data/config/locales/en.yml +1 -3
  15. data/db/migrate_core_cards/20120611203506_rails_inflection_updates.rb +3 -3
  16. data/db/migrate_core_cards/20130823192433_add_style_cards.rb +1 -1
  17. data/db/migrate_core_cards/20130920214038_jsonize_tinymce.rb +1 -1
  18. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +4 -4
  19. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +1 -1
  20. data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +1 -1
  21. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +1 -1
  22. data/db/migrate_core_cards/20150429090551_search_card_context.rb +2 -2
  23. data/db/migrate_core_cards/20150501010515_responsive_sidebar.rb +1 -1
  24. data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +2 -2
  25. data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +2 -2
  26. data/db/migrate_core_cards/20160811115836_rename_stats_to_admin.rb +1 -1
  27. data/db/migrate_core_cards/20160914132636_fix_mod_files.rb +3 -3
  28. data/db/migrate_core_cards/20170830210517_correct_signup_success_message.rb +2 -2
  29. data/db/migrate_core_cards/data/cards.yml +2 -2
  30. data/db/migrate_core_cards/data/cards/*header +1 -1
  31. data/lib/card.rb +53 -34
  32. data/lib/card/act_manager.rb +64 -10
  33. data/lib/card/act_manager/stage_director.rb +13 -2
  34. data/lib/card/act_manager/stage_director/phases.rb +6 -4
  35. data/lib/card/auth.rb +3 -1
  36. data/lib/card/cache.rb +8 -2
  37. data/lib/card/cache/persistent.rb +23 -10
  38. data/lib/card/codename.rb +59 -18
  39. data/lib/card/dirty.rb +39 -0
  40. data/lib/card/env/location.rb +1 -1
  41. data/lib/card/env/location_history.rb +1 -1
  42. data/lib/card/env/success.rb +1 -1
  43. data/lib/card/error.rb +3 -0
  44. data/lib/card/format.rb +55 -21
  45. data/lib/card/format/content.rb +1 -1
  46. data/lib/card/format/context_names.rb +2 -2
  47. data/lib/card/format/nest.rb +2 -2
  48. data/lib/card/format/nest/fetch.rb +1 -1
  49. data/lib/card/format/nest/subformat.rb +1 -1
  50. data/lib/card/format/render.rb +4 -18
  51. data/lib/card/migration.rb +1 -1
  52. data/lib/card/migration/import.rb +1 -1
  53. data/lib/card/migration/import/import_data.rb +5 -12
  54. data/lib/card/migration/import/import_data/card_attributes.rb +3 -4
  55. data/lib/card/mod.rb +4 -3
  56. data/lib/card/mod/dirs.rb +21 -10
  57. data/lib/card/mod/loader.rb +1 -1
  58. data/lib/card/model/save_helper.rb +1 -1
  59. data/lib/card/name.rb +8 -6
  60. data/lib/card/name/fields_and_traits.rb +5 -10
  61. data/lib/card/query.rb +1 -1
  62. data/lib/card/reference.rb +1 -1
  63. data/lib/card/set.rb +7 -14
  64. data/lib/card/set/advanced_api.rb +1 -0
  65. data/lib/card/set/event.rb +19 -109
  66. data/lib/card/set/event/delayed_event.rb +104 -0
  67. data/lib/card/set/format.rb +2 -2
  68. data/lib/card/set_pattern.rb +4 -4
  69. data/lib/card/subcards.rb +22 -35
  70. data/lib/card/tasks/card.rake +1 -2
  71. data/lib/card/view.rb +1 -2
  72. data/lib/card/view/cache.rb +1 -1
  73. data/lib/card/view/cache_action.rb +1 -1
  74. data/lib/card/view/options.rb +1 -1
  75. data/lib/card/view/stub.rb +5 -1
  76. data/lib/cardio.rb +50 -22
  77. data/mod/Modfile +1 -0
  78. data/mod/account/set/all/account.rb +2 -2
  79. data/mod/account/set/right/account.rb +4 -2
  80. data/mod/account/set/right/email.rb +1 -1
  81. data/mod/account/set/self/account_links.rb +2 -2
  82. data/mod/account/set/self/signin.rb +3 -3
  83. data/mod/account/spec/set/right/account_spec.rb +2 -2
  84. data/mod/account/spec/set/right/email_spec.rb +1 -1
  85. data/mod/account/spec/set/right/password_spec.rb +1 -1
  86. data/mod/account/spec/set/right/salt_spec.rb +1 -1
  87. data/mod/account/spec/set/type/signup_spec.rb +1 -1
  88. data/mod/basic_formats/format/css_format.rb +1 -2
  89. data/mod/basic_formats/format/csv_format.rb +1 -1
  90. data/mod/basic_formats/format/js_format.rb +4 -0
  91. data/mod/basic_formats/set/all/all_css.rb +3 -3
  92. data/mod/basic_formats/set/all/all_js.rb +1 -1
  93. data/mod/basic_formats/set/all/base.rb +5 -5
  94. data/mod/basic_formats/set/all/json.rb +4 -4
  95. data/mod/basic_formats/set/all/rss.rb +3 -3
  96. data/mod/basic_formats/set/self/head.rb +12 -7
  97. data/mod/bootstrap/db/migrate_cards/20170719163710_update_bootswatch_themes_to_4_beta.rb +115 -0
  98. data/mod/bootstrap/db/migrate_cards/20170726145012_select2.rb +7 -7
  99. data/mod/bootstrap/lib/bootstrap/component/panel.rb +1 -1
  100. data/mod/bootstrap/lib/javascript/script_load_select2.js.coffee +2 -0
  101. data/mod/bootstrap/lib/stylesheets/bootstrap_cards.scss +2 -8
  102. data/mod/bootstrap/lib/stylesheets/style_select2_bootstrap.scss +546 -628
  103. data/mod/bootstrap/set/abstract/bootstrap_code_file.rb +9 -6
  104. data/mod/bootstrap/set/all/bootstrap/accordion.rb +3 -3
  105. data/mod/bootstrap/set/all/bootstrap/helper.rb +58 -15
  106. data/mod/bootstrap/set/all/bootstrap/tabs.rb +2 -2
  107. data/mod/bootstrap/set/all/bootstrap/wrapper.rb +1 -1
  108. data/mod/bootstrap/set/self/bootstrap_js.rb +7 -1
  109. data/mod/bootstrap/set/self/bootswatch_shared.rb +8 -17
  110. data/mod/bootstrap/set/self/script_select2.rb +9 -0
  111. data/mod/bootstrap/set/self/style_select2.rb +1 -1
  112. data/mod/bootstrap/set/self/style_select2_bootstrap.rb +1 -0
  113. data/mod/bootstrap/vendor/bootstrap/.editorconfig +17 -0
  114. data/mod/bootstrap/vendor/bootstrap/.gitattributes +15 -0
  115. data/mod/bootstrap/vendor/bootstrap/.gitignore +41 -0
  116. data/mod/bootstrap/vendor/bootstrap/.hound.yml +12 -0
  117. data/mod/bootstrap/vendor/bootstrap/.travis.yml +45 -0
  118. data/mod/bootstrap/vendor/bootstrap/CHANGELOG.md +5 -0
  119. data/mod/bootstrap/vendor/bootstrap/CNAME +1 -0
  120. data/mod/bootstrap/vendor/bootstrap/CONTRIBUTING.md +270 -0
  121. data/mod/bootstrap/vendor/bootstrap/Gemfile +6 -0
  122. data/mod/bootstrap/vendor/bootstrap/Gemfile.lock +49 -0
  123. data/mod/bootstrap/vendor/bootstrap/Gruntfile.js +511 -0
  124. data/mod/bootstrap/vendor/bootstrap/ISSUE_TEMPLATE.md +22 -0
  125. data/mod/bootstrap/vendor/bootstrap/LICENSE +21 -0
  126. data/mod/bootstrap/vendor/bootstrap/README.md +142 -0
  127. data/mod/bootstrap/vendor/bootstrap/_config.yml +42 -0
  128. data/mod/bootstrap/vendor/bootstrap/bower.json +34 -0
  129. data/mod/bootstrap/vendor/bootstrap/composer.json +37 -0
  130. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap-theme.css +587 -0
  131. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap-theme.css.map +0 -0
  132. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap-theme.min.css +6 -0
  133. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap-theme.min.css.map +0 -0
  134. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap.css +6757 -0
  135. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap.css.map +0 -0
  136. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap.min.css +6 -0
  137. data/mod/bootstrap/vendor/bootstrap/dist/css/bootstrap.min.css.map +0 -0
  138. data/mod/bootstrap/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  139. data/mod/bootstrap/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +288 -0
  140. data/mod/bootstrap/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  141. data/mod/bootstrap/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  142. data/mod/bootstrap/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  143. data/mod/bootstrap/vendor/bootstrap/dist/js/bootstrap.js +2377 -0
  144. data/mod/bootstrap/vendor/bootstrap/dist/js/bootstrap.min.js +7 -0
  145. data/mod/bootstrap/vendor/bootstrap/dist/js/npm.js +13 -0
  146. data/mod/bootstrap/vendor/bootstrap/docs/LICENSE +319 -0
  147. data/mod/bootstrap/vendor/bootstrap/docs/_data/browser-bugs.yml +433 -0
  148. data/mod/bootstrap/vendor/bootstrap/docs/_data/browser-features.yml +109 -0
  149. data/mod/bootstrap/vendor/bootstrap/docs/_data/core-team.yml +27 -0
  150. data/mod/bootstrap/vendor/bootstrap/docs/_data/glyphicons.yml +266 -0
  151. data/mod/bootstrap/vendor/bootstrap/docs/_data/sass-team.yml +7 -0
  152. data/mod/bootstrap/vendor/bootstrap/docs/_data/showcase.yml +19 -0
  153. data/mod/bootstrap/vendor/bootstrap/docs/_data/translations.yml +64 -0
  154. data/mod/bootstrap/vendor/bootstrap/docs/_includes/ads.html +1 -0
  155. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/alerts.html +89 -0
  156. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/badges.html +45 -0
  157. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/breadcrumbs.html +27 -0
  158. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/button-dropdowns.html +321 -0
  159. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/button-groups.html +268 -0
  160. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/dropdowns.html +156 -0
  161. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/glyphicons.html +91 -0
  162. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/input-groups.html +365 -0
  163. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/jumbotron.html +27 -0
  164. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/labels.html +40 -0
  165. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/list-group.html +188 -0
  166. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/media.html +207 -0
  167. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/navbar.html +461 -0
  168. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/navs.html +189 -0
  169. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/page-header.html +15 -0
  170. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/pagination.html +202 -0
  171. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/panels.html +279 -0
  172. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/progress-bars.html +214 -0
  173. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/responsive-embed.html +23 -0
  174. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/thumbnails.html +94 -0
  175. data/mod/bootstrap/vendor/bootstrap/docs/_includes/components/wells.html +33 -0
  176. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/buttons.html +189 -0
  177. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/code.html +52 -0
  178. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/forms.html +1029 -0
  179. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/grid.html +560 -0
  180. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/helpers.html +207 -0
  181. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/images.html +31 -0
  182. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/less.html +499 -0
  183. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/overview.html +52 -0
  184. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/responsive-utilities.html +258 -0
  185. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/sass.html +52 -0
  186. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/tables.html +467 -0
  187. data/mod/bootstrap/vendor/bootstrap/docs/_includes/css/type.html +461 -0
  188. data/mod/bootstrap/vendor/bootstrap/docs/_includes/customizer-variables.html +1892 -0
  189. data/mod/bootstrap/vendor/bootstrap/docs/_includes/footer.html +67 -0
  190. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/accessibility.html +37 -0
  191. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/browser-device-support.html +237 -0
  192. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/community.html +13 -0
  193. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/disabling-responsiveness.html +22 -0
  194. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/download.html +63 -0
  195. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/examples.html +161 -0
  196. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/grunt.html +35 -0
  197. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/license.html +34 -0
  198. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/template.html +37 -0
  199. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/third-party-support.html +51 -0
  200. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/tools.html +6 -0
  201. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/translations.html +12 -0
  202. data/mod/bootstrap/vendor/bootstrap/docs/_includes/getting-started/whats-included.html +55 -0
  203. data/mod/bootstrap/vendor/bootstrap/docs/_includes/header.html +58 -0
  204. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/affix.html +129 -0
  205. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/alerts.html +73 -0
  206. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/buttons.html +139 -0
  207. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/carousel.html +260 -0
  208. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/collapse.html +277 -0
  209. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/dropdowns.html +201 -0
  210. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/modal.html +520 -0
  211. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/overview.html +86 -0
  212. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/popovers.html +309 -0
  213. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/scrollspy.html +151 -0
  214. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/tabs.html +147 -0
  215. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/tooltips.html +276 -0
  216. data/mod/bootstrap/vendor/bootstrap/docs/_includes/js/transitions.html +15 -0
  217. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/about.html +9 -0
  218. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/components.html +146 -0
  219. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/css.html +136 -0
  220. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/customize.html +47 -0
  221. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/getting-started.html +76 -0
  222. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/javascript.html +124 -0
  223. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/main.html +37 -0
  224. data/mod/bootstrap/vendor/bootstrap/docs/_includes/nav/migration.html +12 -0
  225. data/mod/bootstrap/vendor/bootstrap/docs/_layouts/default.html +65 -0
  226. data/mod/bootstrap/vendor/bootstrap/docs/_layouts/home.html +19 -0
  227. data/mod/bootstrap/vendor/bootstrap/docs/_plugins/bridge.rb +9 -0
  228. data/mod/bootstrap/vendor/bootstrap/docs/_plugins/bugify.rb +26 -0
  229. data/mod/bootstrap/vendor/bootstrap/docs/_pug/customizer-nav.pug +17 -0
  230. data/mod/bootstrap/vendor/bootstrap/docs/_pug/customizer-variables.pug +25 -0
  231. data/mod/bootstrap/vendor/bootstrap/docs/about.html +127 -0
  232. data/mod/bootstrap/vendor/bootstrap/docs/apple-touch-icon.png +0 -0
  233. data/mod/bootstrap/vendor/bootstrap/docs/assets/brand/bootstrap-outline.svg +20 -0
  234. data/mod/bootstrap/vendor/bootstrap/docs/assets/brand/bootstrap-punchout.svg +18 -0
  235. data/mod/bootstrap/vendor/bootstrap/docs/assets/brand/bootstrap-solid.svg +17 -0
  236. data/mod/bootstrap/vendor/bootstrap/docs/assets/css/docs.min.css +11 -0
  237. data/mod/bootstrap/vendor/bootstrap/docs/assets/css/docs.min.css.map +0 -0
  238. data/mod/bootstrap/vendor/bootstrap/docs/assets/css/ie10-viewport-bug-workaround.css +13 -0
  239. data/mod/bootstrap/vendor/bootstrap/docs/assets/css/src/docs.css +1632 -0
  240. data/mod/bootstrap/vendor/bootstrap/docs/assets/css/src/pygments-manni.css +66 -0
  241. data/mod/bootstrap/vendor/bootstrap/docs/assets/flash/ZeroClipboard.swf +0 -0
  242. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/components.png +0 -0
  243. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/devices.png +0 -0
  244. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/expo-lyft.jpg +0 -0
  245. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/expo-newsweek.jpg +0 -0
  246. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/expo-riot.jpg +0 -0
  247. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/expo-vogue.jpg +0 -0
  248. data/mod/bootstrap/vendor/bootstrap/docs/assets/img/sass-less.png +0 -0
  249. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/customize.min.js +91 -0
  250. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/docs.min.js +26 -0
  251. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/ie-emulation-modes-warning.js +51 -0
  252. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/ie10-viewport-bug-workaround.js +23 -0
  253. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/ie8-responsive-file-warning.js +13 -0
  254. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/raw-files.min.js +8 -0
  255. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/src/application.js +183 -0
  256. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/src/customizer.js +520 -0
  257. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/Blob.js +211 -0
  258. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/FileSaver.js +248 -0
  259. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/ZeroClipboard.min.js +9 -0
  260. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/anchor.min.js +6 -0
  261. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/autoprefixer.js +21114 -0
  262. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/holder.min.js +12 -0
  263. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/jquery.min.js +5 -0
  264. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/jszip.min.js +14 -0
  265. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/less.min.js +16 -0
  266. data/mod/bootstrap/vendor/bootstrap/docs/assets/js/vendor/uglify.min.js +6 -0
  267. data/mod/bootstrap/vendor/bootstrap/docs/browser-bugs.html +75 -0
  268. data/mod/bootstrap/vendor/bootstrap/docs/components.html +29 -0
  269. data/mod/bootstrap/vendor/bootstrap/docs/css.html +20 -0
  270. data/mod/bootstrap/vendor/bootstrap/docs/customize.html +385 -0
  271. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap-theme.css +587 -0
  272. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap-theme.css.map +0 -0
  273. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap-theme.min.css +6 -0
  274. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap-theme.min.css.map +0 -0
  275. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap.css +6757 -0
  276. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap.css.map +0 -0
  277. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap.min.css +6 -0
  278. data/mod/bootstrap/vendor/bootstrap/docs/dist/css/bootstrap.min.css.map +0 -0
  279. data/mod/bootstrap/vendor/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  280. data/mod/bootstrap/vendor/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.svg +288 -0
  281. data/mod/bootstrap/vendor/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  282. data/mod/bootstrap/vendor/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  283. data/mod/bootstrap/vendor/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  284. data/mod/bootstrap/vendor/bootstrap/docs/dist/js/bootstrap.js +2377 -0
  285. data/mod/bootstrap/vendor/bootstrap/docs/dist/js/bootstrap.min.js +7 -0
  286. data/mod/bootstrap/vendor/bootstrap/docs/dist/js/npm.js +13 -0
  287. data/mod/bootstrap/vendor/bootstrap/docs/examples/blog/blog.css +166 -0
  288. data/mod/bootstrap/vendor/bootstrap/docs/examples/blog/index.html +180 -0
  289. data/mod/bootstrap/vendor/bootstrap/docs/examples/carousel/carousel.css +134 -0
  290. data/mod/bootstrap/vendor/bootstrap/docs/examples/carousel/index.html +220 -0
  291. data/mod/bootstrap/vendor/bootstrap/docs/examples/cover/cover.css +163 -0
  292. data/mod/bootstrap/vendor/bootstrap/docs/examples/cover/index.html +84 -0
  293. data/mod/bootstrap/vendor/bootstrap/docs/examples/dashboard/dashboard.css +105 -0
  294. data/mod/bootstrap/vendor/bootstrap/docs/examples/dashboard/index.html +252 -0
  295. data/mod/bootstrap/vendor/bootstrap/docs/examples/grid/grid.css +23 -0
  296. data/mod/bootstrap/vendor/bootstrap/docs/examples/grid/index.html +156 -0
  297. data/mod/bootstrap/vendor/bootstrap/docs/examples/jumbotron-narrow/index.html +88 -0
  298. data/mod/bootstrap/vendor/bootstrap/docs/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
  299. data/mod/bootstrap/vendor/bootstrap/docs/examples/jumbotron/index.html +107 -0
  300. data/mod/bootstrap/vendor/bootstrap/docs/examples/jumbotron/jumbotron.css +5 -0
  301. data/mod/bootstrap/vendor/bootstrap/docs/examples/justified-nav/index.html +92 -0
  302. data/mod/bootstrap/vendor/bootstrap/docs/examples/justified-nav/justified-nav.css +88 -0
  303. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar-fixed-top/index.html +99 -0
  304. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
  305. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar-static-top/index.html +100 -0
  306. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar-static-top/navbar-static-top.css +7 -0
  307. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar/index.html +98 -0
  308. data/mod/bootstrap/vendor/bootstrap/docs/examples/navbar/navbar.css +8 -0
  309. data/mod/bootstrap/vendor/bootstrap/docs/examples/non-responsive/index.html +115 -0
  310. data/mod/bootstrap/vendor/bootstrap/docs/examples/non-responsive/non-responsive.css +262 -0
  311. data/mod/bootstrap/vendor/bootstrap/docs/examples/offcanvas/index.html +137 -0
  312. data/mod/bootstrap/vendor/bootstrap/docs/examples/offcanvas/offcanvas.css +59 -0
  313. data/mod/bootstrap/vendor/bootstrap/docs/examples/offcanvas/offcanvas.js +5 -0
  314. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/blog.jpg +0 -0
  315. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/carousel.jpg +0 -0
  316. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/cover.jpg +0 -0
  317. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/dashboard.jpg +0 -0
  318. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/equal-height-columns.jpg +0 -0
  319. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/grid.jpg +0 -0
  320. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/jumbotron-narrow.jpg +0 -0
  321. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/jumbotron.jpg +0 -0
  322. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/justified-nav.jpg +0 -0
  323. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/navbar-fixed.jpg +0 -0
  324. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/navbar-static.jpg +0 -0
  325. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/navbar.jpg +0 -0
  326. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/non-responsive.jpg +0 -0
  327. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/offcanvas.jpg +0 -0
  328. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/sign-in.jpg +0 -0
  329. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/starter-template.jpg +0 -0
  330. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/sticky-footer-navbar.jpg +0 -0
  331. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/sticky-footer.jpg +0 -0
  332. data/mod/bootstrap/vendor/bootstrap/docs/examples/screenshots/theme.jpg +0 -0
  333. data/mod/bootstrap/vendor/bootstrap/docs/examples/signin/index.html +58 -0
  334. data/mod/bootstrap/vendor/bootstrap/docs/examples/signin/signin.css +40 -0
  335. data/mod/bootstrap/vendor/bootstrap/docs/examples/starter-template/index.html +76 -0
  336. data/mod/bootstrap/vendor/bootstrap/docs/examples/starter-template/starter-template.css +7 -0
  337. data/mod/bootstrap/vendor/bootstrap/docs/examples/sticky-footer-navbar/index.html +95 -0
  338. data/mod/bootstrap/vendor/bootstrap/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css +39 -0
  339. data/mod/bootstrap/vendor/bootstrap/docs/examples/sticky-footer/index.html +55 -0
  340. data/mod/bootstrap/vendor/bootstrap/docs/examples/sticky-footer/sticky-footer.css +32 -0
  341. data/mod/bootstrap/vendor/bootstrap/docs/examples/theme/index.html +644 -0
  342. data/mod/bootstrap/vendor/bootstrap/docs/examples/theme/theme.css +18 -0
  343. data/mod/bootstrap/vendor/bootstrap/docs/examples/tooltip-viewport/index.html +62 -0
  344. data/mod/bootstrap/vendor/bootstrap/docs/examples/tooltip-viewport/tooltip-viewport.css +26 -0
  345. data/mod/bootstrap/vendor/bootstrap/docs/examples/tooltip-viewport/tooltip-viewport.js +18 -0
  346. data/mod/bootstrap/vendor/bootstrap/docs/favicon.ico +0 -0
  347. data/mod/bootstrap/vendor/bootstrap/docs/getting-started.html +28 -0
  348. data/mod/bootstrap/vendor/bootstrap/docs/index.html +73 -0
  349. data/mod/bootstrap/vendor/bootstrap/docs/javascript.html +21 -0
  350. data/mod/bootstrap/vendor/bootstrap/docs/migration.html +445 -0
  351. data/mod/bootstrap/vendor/bootstrap/docs/robots.txt +9 -0
  352. data/mod/bootstrap/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  353. data/mod/bootstrap/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  354. data/mod/bootstrap/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  355. data/mod/bootstrap/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  356. data/mod/bootstrap/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  357. data/mod/bootstrap/vendor/bootstrap/grunt/.jshintrc +7 -0
  358. data/mod/bootstrap/vendor/bootstrap/grunt/bs-commonjs-generator.js +30 -0
  359. data/mod/bootstrap/vendor/bootstrap/grunt/bs-glyphicons-data-generator.js +42 -0
  360. data/mod/bootstrap/vendor/bootstrap/grunt/bs-lessdoc-parser.js +237 -0
  361. data/mod/bootstrap/vendor/bootstrap/grunt/bs-raw-files-generator.js +44 -0
  362. data/mod/bootstrap/vendor/bootstrap/grunt/change-version.js +109 -0
  363. data/mod/bootstrap/vendor/bootstrap/grunt/configBridge.json +46 -0
  364. data/mod/bootstrap/vendor/bootstrap/grunt/npm-shrinkwrap.json +2679 -0
  365. data/mod/bootstrap/vendor/bootstrap/grunt/sauce_browsers.yml +82 -0
  366. data/mod/bootstrap/vendor/bootstrap/js/.jscsrc +42 -0
  367. data/mod/bootstrap/vendor/bootstrap/js/.jshintrc +15 -0
  368. data/mod/bootstrap/vendor/bootstrap/js/affix.js +162 -0
  369. data/mod/bootstrap/vendor/bootstrap/js/alert.js +94 -0
  370. data/mod/bootstrap/vendor/bootstrap/js/button.js +125 -0
  371. data/mod/bootstrap/vendor/bootstrap/js/carousel.js +239 -0
  372. data/mod/bootstrap/vendor/bootstrap/js/collapse.js +212 -0
  373. data/mod/bootstrap/vendor/bootstrap/js/dropdown.js +165 -0
  374. data/mod/bootstrap/vendor/bootstrap/js/modal.js +339 -0
  375. data/mod/bootstrap/vendor/bootstrap/js/popover.js +108 -0
  376. data/mod/bootstrap/vendor/bootstrap/js/scrollspy.js +172 -0
  377. data/mod/bootstrap/vendor/bootstrap/js/tab.js +155 -0
  378. data/mod/bootstrap/vendor/bootstrap/js/tests/README.md +62 -0
  379. data/mod/bootstrap/vendor/bootstrap/js/tests/index.html +169 -0
  380. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/.jshintrc +6 -0
  381. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/affix.js +107 -0
  382. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/alert.js +78 -0
  383. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/button.js +168 -0
  384. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/carousel.js +718 -0
  385. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/collapse.js +443 -0
  386. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/dropdown.js +423 -0
  387. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/modal.js +377 -0
  388. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/phantom.js +72 -0
  389. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/popover.js +290 -0
  390. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/scrollspy.js +278 -0
  391. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/tab.js +216 -0
  392. data/mod/bootstrap/vendor/bootstrap/js/tests/unit/tooltip.js +1325 -0
  393. data/mod/bootstrap/vendor/bootstrap/js/tests/vendor/jquery.min.js +5 -0
  394. data/mod/bootstrap/vendor/bootstrap/js/tests/vendor/qunit.css +305 -0
  395. data/mod/bootstrap/vendor/bootstrap/js/tests/vendor/qunit.js +4204 -0
  396. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/affix-with-sticky-footer.html +317 -0
  397. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/affix.html +306 -0
  398. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/alert.html +48 -0
  399. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/button.html +79 -0
  400. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/carousel.html +58 -0
  401. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/collapse.html +78 -0
  402. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/dropdown.html +108 -0
  403. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/modal.html +205 -0
  404. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/popover.html +54 -0
  405. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/scrollspy.html +109 -0
  406. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/tab.html +172 -0
  407. data/mod/bootstrap/vendor/bootstrap/js/tests/visual/tooltip.html +50 -0
  408. data/mod/bootstrap/vendor/bootstrap/js/tooltip.js +520 -0
  409. data/mod/bootstrap/vendor/bootstrap/js/transition.js +59 -0
  410. data/mod/bootstrap/vendor/bootstrap/less/.csscomb.json +304 -0
  411. data/mod/bootstrap/vendor/bootstrap/less/.csslintrc +19 -0
  412. data/mod/bootstrap/vendor/bootstrap/less/alerts.less +73 -0
  413. data/mod/bootstrap/vendor/bootstrap/less/badges.less +66 -0
  414. data/mod/bootstrap/vendor/bootstrap/less/bootstrap.less +56 -0
  415. data/mod/bootstrap/vendor/bootstrap/less/breadcrumbs.less +26 -0
  416. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/_button-group.scss → vendor/bootstrap/less/button-groups.less} +100 -58
  417. data/mod/bootstrap/vendor/bootstrap/less/buttons.less +166 -0
  418. data/mod/bootstrap/vendor/bootstrap/less/carousel.less +270 -0
  419. data/mod/bootstrap/vendor/bootstrap/less/close.less +34 -0
  420. data/mod/bootstrap/vendor/bootstrap/less/code.less +69 -0
  421. data/mod/bootstrap/vendor/bootstrap/less/component-animations.less +33 -0
  422. data/mod/bootstrap/vendor/bootstrap/less/dropdowns.less +216 -0
  423. data/mod/bootstrap/vendor/bootstrap/less/forms.less +613 -0
  424. data/mod/bootstrap/vendor/bootstrap/less/glyphicons.less +305 -0
  425. data/mod/bootstrap/vendor/bootstrap/less/grid.less +84 -0
  426. data/mod/bootstrap/vendor/bootstrap/less/input-groups.less +171 -0
  427. data/mod/bootstrap/vendor/bootstrap/less/jumbotron.less +54 -0
  428. data/mod/bootstrap/vendor/bootstrap/less/labels.less +64 -0
  429. data/mod/bootstrap/vendor/bootstrap/less/list-group.less +130 -0
  430. data/mod/bootstrap/vendor/bootstrap/less/media.less +66 -0
  431. data/mod/bootstrap/vendor/bootstrap/less/mixins.less +40 -0
  432. data/mod/bootstrap/vendor/bootstrap/less/mixins/alerts.less +14 -0
  433. data/mod/bootstrap/vendor/bootstrap/less/mixins/background-variant.less +9 -0
  434. data/mod/bootstrap/vendor/bootstrap/less/mixins/border-radius.less +18 -0
  435. data/mod/bootstrap/vendor/bootstrap/less/mixins/buttons.less +65 -0
  436. data/mod/bootstrap/vendor/bootstrap/less/mixins/center-block.less +7 -0
  437. data/mod/bootstrap/vendor/bootstrap/less/mixins/clearfix.less +22 -0
  438. data/mod/bootstrap/vendor/bootstrap/less/mixins/forms.less +85 -0
  439. data/mod/bootstrap/vendor/bootstrap/less/mixins/gradients.less +59 -0
  440. data/mod/bootstrap/vendor/bootstrap/less/mixins/grid-framework.less +91 -0
  441. data/mod/bootstrap/vendor/bootstrap/less/mixins/grid.less +122 -0
  442. data/mod/bootstrap/vendor/bootstrap/less/mixins/hide-text.less +21 -0
  443. data/mod/bootstrap/vendor/bootstrap/less/mixins/image.less +33 -0
  444. data/mod/bootstrap/vendor/bootstrap/less/mixins/labels.less +12 -0
  445. data/mod/bootstrap/vendor/bootstrap/less/mixins/list-group.less +30 -0
  446. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/mixins/_nav-divider.scss → vendor/bootstrap/less/mixins/nav-divider.less} +3 -3
  447. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/mixins/_navbar-align.scss → vendor/bootstrap/less/mixins/nav-vertical-align.less} +4 -4
  448. data/mod/bootstrap/vendor/bootstrap/less/mixins/opacity.less +8 -0
  449. data/mod/bootstrap/vendor/bootstrap/less/mixins/pagination.less +24 -0
  450. data/mod/bootstrap/vendor/bootstrap/less/mixins/panels.less +24 -0
  451. data/mod/bootstrap/vendor/bootstrap/less/mixins/progress-bar.less +10 -0
  452. data/mod/bootstrap/vendor/bootstrap/less/mixins/reset-filter.less +8 -0
  453. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/mixins/_reset-text.scss → vendor/bootstrap/less/mixins/reset-text.less} +6 -5
  454. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/mixins/_resize.scss → vendor/bootstrap/less/mixins/resize.less} +2 -2
  455. data/mod/bootstrap/vendor/bootstrap/less/mixins/responsive-visibility.less +15 -0
  456. data/mod/bootstrap/vendor/bootstrap/less/mixins/size.less +10 -0
  457. data/mod/bootstrap/vendor/bootstrap/less/mixins/tab-focus.less +9 -0
  458. data/mod/bootstrap/vendor/bootstrap/less/mixins/table-row.less +28 -0
  459. data/mod/bootstrap/vendor/bootstrap/less/mixins/text-emphasis.less +9 -0
  460. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/mixins/_text-truncate.scss → vendor/bootstrap/less/mixins/text-overflow.less} +3 -3
  461. data/mod/bootstrap/vendor/bootstrap/less/mixins/vendor-prefixes.less +227 -0
  462. data/mod/bootstrap/vendor/bootstrap/less/modals.less +150 -0
  463. data/mod/bootstrap/vendor/bootstrap/less/navbar.less +660 -0
  464. data/mod/bootstrap/vendor/bootstrap/less/navs.less +242 -0
  465. data/mod/bootstrap/vendor/bootstrap/less/normalize.less +424 -0
  466. data/mod/bootstrap/vendor/bootstrap/less/pager.less +54 -0
  467. data/mod/bootstrap/vendor/bootstrap/less/pagination.less +89 -0
  468. data/mod/bootstrap/vendor/bootstrap/less/panels.less +271 -0
  469. data/mod/bootstrap/vendor/bootstrap/less/popovers.less +131 -0
  470. data/mod/bootstrap/vendor/bootstrap/less/print.less +101 -0
  471. data/mod/bootstrap/vendor/bootstrap/less/progress-bars.less +87 -0
  472. data/mod/bootstrap/{lib/stylesheets/bootstrap/scss/_responsive-embed.scss → vendor/bootstrap/less/responsive-embed.less} +9 -26
  473. data/mod/bootstrap/vendor/bootstrap/less/responsive-utilities.less +194 -0
  474. data/mod/bootstrap/vendor/bootstrap/less/scaffolding.less +161 -0
  475. data/mod/bootstrap/vendor/bootstrap/less/tables.less +234 -0
  476. data/mod/bootstrap/vendor/bootstrap/less/theme.less +291 -0
  477. data/mod/bootstrap/vendor/bootstrap/less/thumbnails.less +36 -0
  478. data/mod/bootstrap/vendor/bootstrap/less/tooltip.less +101 -0
  479. data/mod/bootstrap/vendor/bootstrap/less/type.less +302 -0
  480. data/mod/bootstrap/vendor/bootstrap/less/utilities.less +55 -0
  481. data/mod/bootstrap/vendor/bootstrap/less/variables.less +869 -0
  482. data/mod/bootstrap/vendor/bootstrap/less/wells.less +29 -0
  483. data/mod/bootstrap/vendor/bootstrap/nuget/MyGet.ps1 +8 -0
  484. data/mod/bootstrap/vendor/bootstrap/nuget/bootstrap.less.nuspec +28 -0
  485. data/mod/bootstrap/vendor/bootstrap/nuget/bootstrap.nuspec +28 -0
  486. data/mod/bootstrap/vendor/bootstrap/package.js +32 -0
  487. data/mod/bootstrap/vendor/bootstrap/package.json +89 -0
  488. data/mod/bootstrap/vendor/bootswatch/README.md +63 -0
  489. data/mod/bootstrap/vendor/bootswatch/swatchmaker/README.md +1 -0
  490. data/mod/bootstrap/vendor/select2/.editorconfig +6 -0
  491. data/mod/bootstrap/vendor/select2/.github/CONTRIBUTING.md +203 -0
  492. data/mod/bootstrap/vendor/select2/.github/ISSUE_TEMPLATE.md +20 -0
  493. data/mod/bootstrap/vendor/select2/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  494. data/mod/bootstrap/vendor/select2/.gitignore +3 -0
  495. data/mod/bootstrap/vendor/select2/.jshintignore +4 -0
  496. data/mod/bootstrap/vendor/select2/.jshintrc +25 -0
  497. data/mod/bootstrap/vendor/select2/.travis.yml +22 -0
  498. data/mod/bootstrap/vendor/select2/CHANGELOG.md +272 -0
  499. data/mod/bootstrap/vendor/select2/Gruntfile.js +380 -0
  500. data/mod/bootstrap/vendor/select2/LICENSE.md +21 -0
  501. data/mod/bootstrap/vendor/select2/README.md +123 -0
  502. data/mod/bootstrap/vendor/select2/bower.json +13 -0
  503. data/mod/bootstrap/vendor/select2/component.json +19 -0
  504. data/mod/bootstrap/vendor/select2/composer.json +25 -0
  505. data/mod/bootstrap/{lib/stylesheets/style_select2.css → vendor/select2/dist/css/select2.css} +0 -0
  506. data/mod/bootstrap/{lib/stylesheets → vendor/select2/dist/css}/select2.min.css +0 -0
  507. data/mod/bootstrap/vendor/select2/dist/js/i18n/af.js +3 -0
  508. data/mod/bootstrap/vendor/select2/dist/js/i18n/ar.js +3 -0
  509. data/mod/bootstrap/vendor/select2/dist/js/i18n/az.js +3 -0
  510. data/mod/bootstrap/vendor/select2/dist/js/i18n/bg.js +3 -0
  511. data/mod/bootstrap/vendor/select2/dist/js/i18n/bs.js +3 -0
  512. data/mod/bootstrap/vendor/select2/dist/js/i18n/ca.js +3 -0
  513. data/mod/bootstrap/vendor/select2/dist/js/i18n/cs.js +3 -0
  514. data/mod/bootstrap/vendor/select2/dist/js/i18n/da.js +3 -0
  515. data/mod/bootstrap/vendor/select2/dist/js/i18n/de.js +3 -0
  516. data/mod/bootstrap/vendor/select2/dist/js/i18n/dsb.js +3 -0
  517. data/mod/bootstrap/vendor/select2/dist/js/i18n/el.js +3 -0
  518. data/mod/bootstrap/vendor/select2/dist/js/i18n/en.js +3 -0
  519. data/mod/bootstrap/vendor/select2/dist/js/i18n/es.js +3 -0
  520. data/mod/bootstrap/vendor/select2/dist/js/i18n/et.js +3 -0
  521. data/mod/bootstrap/vendor/select2/dist/js/i18n/eu.js +3 -0
  522. data/mod/bootstrap/vendor/select2/dist/js/i18n/fa.js +3 -0
  523. data/mod/bootstrap/vendor/select2/dist/js/i18n/fi.js +3 -0
  524. data/mod/bootstrap/vendor/select2/dist/js/i18n/fr.js +3 -0
  525. data/mod/bootstrap/vendor/select2/dist/js/i18n/gl.js +3 -0
  526. data/mod/bootstrap/vendor/select2/dist/js/i18n/he.js +3 -0
  527. data/mod/bootstrap/vendor/select2/dist/js/i18n/hi.js +3 -0
  528. data/mod/bootstrap/vendor/select2/dist/js/i18n/hr.js +3 -0
  529. data/mod/bootstrap/vendor/select2/dist/js/i18n/hsb.js +3 -0
  530. data/mod/bootstrap/vendor/select2/dist/js/i18n/hu.js +3 -0
  531. data/mod/bootstrap/vendor/select2/dist/js/i18n/hy.js +3 -0
  532. data/mod/bootstrap/vendor/select2/dist/js/i18n/id.js +3 -0
  533. data/mod/bootstrap/vendor/select2/dist/js/i18n/is.js +3 -0
  534. data/mod/bootstrap/vendor/select2/dist/js/i18n/it.js +3 -0
  535. data/mod/bootstrap/vendor/select2/dist/js/i18n/ja.js +3 -0
  536. data/mod/bootstrap/vendor/select2/dist/js/i18n/km.js +3 -0
  537. data/mod/bootstrap/vendor/select2/dist/js/i18n/ko.js +3 -0
  538. data/mod/bootstrap/vendor/select2/dist/js/i18n/lt.js +3 -0
  539. data/mod/bootstrap/vendor/select2/dist/js/i18n/lv.js +3 -0
  540. data/mod/bootstrap/vendor/select2/dist/js/i18n/mk.js +3 -0
  541. data/mod/bootstrap/vendor/select2/dist/js/i18n/ms.js +3 -0
  542. data/mod/bootstrap/vendor/select2/dist/js/i18n/nb.js +3 -0
  543. data/mod/bootstrap/vendor/select2/dist/js/i18n/nl.js +3 -0
  544. data/mod/bootstrap/vendor/select2/dist/js/i18n/pl.js +3 -0
  545. data/mod/bootstrap/vendor/select2/dist/js/i18n/ps.js +3 -0
  546. data/mod/bootstrap/vendor/select2/dist/js/i18n/pt-BR.js +3 -0
  547. data/mod/bootstrap/vendor/select2/dist/js/i18n/pt.js +3 -0
  548. data/mod/bootstrap/vendor/select2/dist/js/i18n/ro.js +3 -0
  549. data/mod/bootstrap/vendor/select2/dist/js/i18n/ru.js +3 -0
  550. data/mod/bootstrap/vendor/select2/dist/js/i18n/sk.js +3 -0
  551. data/mod/bootstrap/vendor/select2/dist/js/i18n/sl.js +3 -0
  552. data/mod/bootstrap/vendor/select2/dist/js/i18n/sr-Cyrl.js +3 -0
  553. data/mod/bootstrap/vendor/select2/dist/js/i18n/sr.js +3 -0
  554. data/mod/bootstrap/vendor/select2/dist/js/i18n/sv.js +3 -0
  555. data/mod/bootstrap/vendor/select2/dist/js/i18n/th.js +3 -0
  556. data/mod/bootstrap/vendor/select2/dist/js/i18n/tr.js +3 -0
  557. data/mod/bootstrap/vendor/select2/dist/js/i18n/uk.js +3 -0
  558. data/mod/bootstrap/vendor/select2/dist/js/i18n/vi.js +3 -0
  559. data/mod/bootstrap/vendor/select2/dist/js/i18n/zh-CN.js +3 -0
  560. data/mod/bootstrap/vendor/select2/dist/js/i18n/zh-TW.js +3 -0
  561. data/mod/bootstrap/vendor/select2/dist/js/select2.full.js +6457 -0
  562. data/mod/bootstrap/vendor/select2/dist/js/select2.full.min.js +1 -0
  563. data/mod/bootstrap/{lib/javascript/script_select2.js → vendor/select2/dist/js/select2.js} +90 -69
  564. data/mod/bootstrap/vendor/select2/dist/js/select2.min.js +1 -0
  565. data/mod/bootstrap/vendor/select2/docs/README.md +1 -0
  566. data/mod/bootstrap/vendor/select2/docs/announcements-4.0.html +12 -0
  567. data/mod/bootstrap/vendor/select2/docs/community.html +12 -0
  568. data/mod/bootstrap/vendor/select2/docs/examples.html +12 -0
  569. data/mod/bootstrap/vendor/select2/docs/index.html +12 -0
  570. data/mod/bootstrap/vendor/select2/docs/options-old.html +12 -0
  571. data/mod/bootstrap/vendor/select2/docs/options.html +12 -0
  572. data/mod/bootstrap/vendor/select2/package.json +73 -0
  573. data/mod/bootstrap/vendor/select2/select2.jquery.json +32 -0
  574. data/mod/bootstrap/vendor/select2/src/js/banner.end.js +6 -0
  575. data/mod/bootstrap/vendor/select2/src/js/banner.start.js +6 -0
  576. data/mod/bootstrap/vendor/select2/src/js/jquery.mousewheel.shim.js +6 -0
  577. data/mod/bootstrap/vendor/select2/src/js/jquery.select2.js +57 -0
  578. data/mod/bootstrap/vendor/select2/src/js/jquery.shim.js +14 -0
  579. data/mod/bootstrap/vendor/select2/src/js/select2/compat/containerCss.js +56 -0
  580. data/mod/bootstrap/vendor/select2/src/js/select2/compat/dropdownCss.js +56 -0
  581. data/mod/bootstrap/vendor/select2/src/js/select2/compat/initSelection.js +42 -0
  582. data/mod/bootstrap/vendor/select2/src/js/select2/compat/inputData.js +127 -0
  583. data/mod/bootstrap/vendor/select2/src/js/select2/compat/matcher.js +42 -0
  584. data/mod/bootstrap/vendor/select2/src/js/select2/compat/query.js +26 -0
  585. data/mod/bootstrap/vendor/select2/src/js/select2/compat/utils.js +43 -0
  586. data/mod/bootstrap/vendor/select2/src/js/select2/core.js +612 -0
  587. data/mod/bootstrap/vendor/select2/src/js/select2/data/ajax.js +109 -0
  588. data/mod/bootstrap/vendor/select2/src/js/select2/data/array.js +79 -0
  589. data/mod/bootstrap/vendor/select2/src/js/select2/data/base.js +40 -0
  590. data/mod/bootstrap/vendor/select2/src/js/select2/data/maximumInputLength.js +31 -0
  591. data/mod/bootstrap/vendor/select2/src/js/select2/data/maximumSelectionLength.js +31 -0
  592. data/mod/bootstrap/vendor/select2/src/js/select2/data/minimumInputLength.js +30 -0
  593. data/mod/bootstrap/vendor/select2/src/js/select2/data/select.js +285 -0
  594. data/mod/bootstrap/vendor/select2/src/js/select2/data/tags.js +128 -0
  595. data/mod/bootstrap/vendor/select2/src/js/select2/data/tokenizer.js +116 -0
  596. data/mod/bootstrap/vendor/select2/src/js/select2/defaults.js +396 -0
  597. data/mod/bootstrap/vendor/select2/src/js/select2/diacritics.js +847 -0
  598. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown.js +42 -0
  599. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/attachBody.js +222 -0
  600. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/attachContainer.js +18 -0
  601. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/closeOnSelect.js +35 -0
  602. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/hidePlaceholder.js +42 -0
  603. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/infiniteScroll.js +89 -0
  604. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/minimumResultsForSearch.js +39 -0
  605. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/search.js +101 -0
  606. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/selectOnClose.js +50 -0
  607. data/mod/bootstrap/vendor/select2/src/js/select2/dropdown/stopPropagation.js +38 -0
  608. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/af.js +44 -0
  609. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ar.js +30 -0
  610. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/az.js +27 -0
  611. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/bg.js +47 -0
  612. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/bs.js +55 -0
  613. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ca.js +52 -0
  614. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/cs.js +61 -0
  615. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/da.js +36 -0
  616. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/de.js +40 -0
  617. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/dsb.js +48 -0
  618. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/el.js +52 -0
  619. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/en.js +44 -0
  620. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/es.js +52 -0
  621. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/et.js +53 -0
  622. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/eu.js +51 -0
  623. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/fa.js +38 -0
  624. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/fi.js +30 -0
  625. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/fr.js +33 -0
  626. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/gl.js +39 -0
  627. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/he.js +56 -0
  628. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/hi.js +39 -0
  629. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/hr.js +44 -0
  630. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/hsb.js +48 -0
  631. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/hu.js +30 -0
  632. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/hy.js +38 -0
  633. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/id.js +30 -0
  634. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/is.js +41 -0
  635. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/it.js +48 -0
  636. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ja.js +36 -0
  637. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/km.js +36 -0
  638. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ko.js +36 -0
  639. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/lt.js +52 -0
  640. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/lv.js +51 -0
  641. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/mk.js +47 -0
  642. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ms.js +30 -0
  643. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/nb.js +32 -0
  644. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/nl.js +43 -0
  645. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/pl.js +45 -0
  646. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ps.js +45 -0
  647. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/pt-BR.js +46 -0
  648. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/pt.js +40 -0
  649. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ro.js +46 -0
  650. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/ru.js +58 -0
  651. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/sk.js +59 -0
  652. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/sl.js +54 -0
  653. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/sr-Cyrl.js +55 -0
  654. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/sr.js +55 -0
  655. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/sv.js +37 -0
  656. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/th.js +36 -0
  657. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/tr.js +36 -0
  658. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/uk.js +43 -0
  659. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/vi.js +37 -0
  660. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/zh-CN.js +36 -0
  661. data/mod/bootstrap/vendor/select2/src/js/select2/i18n/zh-TW.js +33 -0
  662. data/mod/bootstrap/vendor/select2/src/js/select2/keys.js +25 -0
  663. data/mod/bootstrap/vendor/select2/src/js/select2/options.js +122 -0
  664. data/mod/bootstrap/vendor/select2/src/js/select2/results.js +523 -0
  665. data/mod/bootstrap/vendor/select2/src/js/select2/selection/allowClear.js +97 -0
  666. data/mod/bootstrap/vendor/select2/src/js/select2/selection/base.js +158 -0
  667. data/mod/bootstrap/vendor/select2/src/js/select2/selection/clickMask.js +29 -0
  668. data/mod/bootstrap/vendor/select2/src/js/select2/selection/eventRelay.js +45 -0
  669. data/mod/bootstrap/vendor/select2/src/js/select2/selection/multiple.js +109 -0
  670. data/mod/bootstrap/vendor/select2/src/js/select2/selection/placeholder.js +49 -0
  671. data/mod/bootstrap/vendor/select2/src/js/select2/selection/search.js +222 -0
  672. data/mod/bootstrap/vendor/select2/src/js/select2/selection/single.js +99 -0
  673. data/mod/bootstrap/vendor/select2/src/js/select2/selection/stopPropagation.js +38 -0
  674. data/mod/bootstrap/vendor/select2/src/js/select2/translation.js +36 -0
  675. data/mod/bootstrap/vendor/select2/src/js/select2/utils.js +276 -0
  676. data/mod/bootstrap/vendor/select2/src/js/wrapper.end.js +12 -0
  677. data/mod/bootstrap/vendor/select2/src/js/wrapper.start.js +38 -0
  678. data/mod/bootstrap/vendor/select2/src/scss/_dropdown.scss +73 -0
  679. data/mod/bootstrap/vendor/select2/src/scss/_multiple.scss +35 -0
  680. data/mod/bootstrap/vendor/select2/src/scss/_single.scss +34 -0
  681. data/mod/bootstrap/vendor/select2/src/scss/core.scss +48 -0
  682. data/mod/bootstrap/vendor/select2/src/scss/mixins/_gradients.scss +13 -0
  683. data/mod/bootstrap/vendor/select2/src/scss/theme/classic/_defaults.scss +34 -0
  684. data/mod/bootstrap/vendor/select2/src/scss/theme/classic/_multiple.scss +93 -0
  685. data/mod/bootstrap/vendor/select2/src/scss/theme/classic/_single.scss +124 -0
  686. data/mod/bootstrap/vendor/select2/src/scss/theme/classic/layout.scss +64 -0
  687. data/mod/bootstrap/vendor/select2/src/scss/theme/default/_multiple.scss +98 -0
  688. data/mod/bootstrap/vendor/select2/src/scss/theme/default/_single.scss +83 -0
  689. data/mod/bootstrap/vendor/select2/src/scss/theme/default/layout.scss +97 -0
  690. data/mod/bootstrap/vendor/select2/tests/a11y/search-tests.js +51 -0
  691. data/mod/bootstrap/vendor/select2/tests/a11y/selection-tests.js +154 -0
  692. data/mod/bootstrap/vendor/select2/tests/data/array-tests.js +318 -0
  693. data/mod/bootstrap/vendor/select2/tests/data/base-tests.js +29 -0
  694. data/mod/bootstrap/vendor/select2/tests/data/inputData-tests.js +158 -0
  695. data/mod/bootstrap/vendor/select2/tests/data/maximumInputLength-tests.js +138 -0
  696. data/mod/bootstrap/vendor/select2/tests/data/maximumSelectionLength-tests.js +202 -0
  697. data/mod/bootstrap/vendor/select2/tests/data/minimumInputLength-tests.js +138 -0
  698. data/mod/bootstrap/vendor/select2/tests/data/select-tests.js +489 -0
  699. data/mod/bootstrap/vendor/select2/tests/data/tags-tests.js +276 -0
  700. data/mod/bootstrap/vendor/select2/tests/data/tokenizer-tests.js +219 -0
  701. data/mod/bootstrap/vendor/select2/tests/dropdown/dropdownCss-tests.js +104 -0
  702. data/mod/bootstrap/vendor/select2/tests/dropdown/positioning-tests.js +177 -0
  703. data/mod/bootstrap/vendor/select2/tests/dropdown/selectOnClose-tests.js +137 -0
  704. data/mod/bootstrap/vendor/select2/tests/dropdown/stopPropagation-tests.js +33 -0
  705. data/mod/bootstrap/vendor/select2/tests/helpers.js +46 -0
  706. data/mod/bootstrap/vendor/select2/tests/integration.html +21 -0
  707. data/mod/bootstrap/vendor/select2/tests/integration/dom-changes.js +257 -0
  708. data/mod/bootstrap/vendor/select2/tests/integration/jquery-calls.js +30 -0
  709. data/mod/bootstrap/vendor/select2/tests/integration/select2-methods.js +139 -0
  710. data/mod/bootstrap/vendor/select2/tests/options/ajax-tests.js +32 -0
  711. data/mod/bootstrap/vendor/select2/tests/options/data-tests.js +44 -0
  712. data/mod/bootstrap/vendor/select2/tests/options/deprecated-tests.js +250 -0
  713. data/mod/bootstrap/vendor/select2/tests/options/translation-tests.js +28 -0
  714. data/mod/bootstrap/vendor/select2/tests/options/width-tests.js +66 -0
  715. data/mod/bootstrap/vendor/select2/tests/results/focusing-tests.js +138 -0
  716. data/mod/bootstrap/vendor/select2/tests/selection/allowClear-tests.js +218 -0
  717. data/mod/bootstrap/vendor/select2/tests/selection/containerCss-tests.js +104 -0
  718. data/mod/bootstrap/vendor/select2/tests/selection/multiple-tests.js +149 -0
  719. data/mod/bootstrap/vendor/select2/tests/selection/placeholder-tests.js +74 -0
  720. data/mod/bootstrap/vendor/select2/tests/selection/search-tests.js +191 -0
  721. data/mod/bootstrap/vendor/select2/tests/selection/single-tests.js +117 -0
  722. data/mod/bootstrap/vendor/select2/tests/selection/stopPropagation-tests.js +33 -0
  723. data/mod/bootstrap/vendor/select2/tests/unit.html +95 -0
  724. data/mod/bootstrap/vendor/select2/tests/utils/decorator-tests.js +189 -0
  725. data/mod/bootstrap/vendor/select2/tests/utils/escapeMarkup-tests.js +36 -0
  726. data/mod/bootstrap/vendor/select2/tests/vendor/jquery-1.7.2.js +9404 -0
  727. data/mod/bootstrap/vendor/select2/tests/vendor/qunit-1.23.1.css +305 -0
  728. data/mod/bootstrap/vendor/select2/tests/vendor/qunit-1.23.1.js +4334 -0
  729. data/mod/bootstrap/vendor/select2/vendor/jquery-2.1.0.js +9111 -0
  730. data/mod/carrierwave/lib/carrier_wave/cardmount.rb +6 -1
  731. data/mod/carrierwave/lib/carrier_wave/file_card_uploader.rb +4 -0
  732. data/mod/carrierwave/set/abstract/attachment.rb +13 -6
  733. data/mod/carrierwave/set/abstract/attachment/storage_type.rb +15 -12
  734. data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +2 -3
  735. data/mod/carrierwave/set/type/file.rb +17 -17
  736. data/mod/carrierwave/set/type/image.rb +40 -37
  737. data/mod/carrierwave/spec/set/type/file_spec.rb +15 -15
  738. data/mod/carrierwave/spec/set/type/image_spec.rb +3 -3
  739. data/mod/core/chunk/reference.rb +3 -3
  740. data/mod/core/chunk/view_stub.rb +12 -4
  741. data/mod/core/format/html_format.rb +1 -1
  742. data/mod/core/format/text_format.rb +5 -0
  743. data/mod/core/set/abstract/code_file.rb +8 -3
  744. data/mod/core/set/all/actify.rb +8 -50
  745. data/mod/core/set/all/assign_attributes.rb +1 -1
  746. data/mod/core/set/all/cache.rb +1 -1
  747. data/mod/core/set/all/collection.rb +7 -7
  748. data/mod/core/set/all/content.rb +12 -6
  749. data/mod/core/set/all/fetch.rb +23 -15
  750. data/mod/core/set/all/fetch_helper.rb +11 -9
  751. data/mod/core/set/all/haml.rb +4 -0
  752. data/mod/core/set/all/initialize.rb +2 -2
  753. data/mod/core/set/all/mark.rb +17 -35
  754. data/mod/core/set/all/name.rb +25 -25
  755. data/mod/core/set/all/name_validations.rb +6 -6
  756. data/mod/core/set/all/permissions.rb +1 -1
  757. data/mod/core/set/all/phases.rb +3 -3
  758. data/mod/core/set/all/references.rb +4 -4
  759. data/mod/core/set/all/rename.rb +6 -7
  760. data/mod/core/set/all/rules.rb +2 -2
  761. data/mod/core/set/all/stages.rb +2 -11
  762. data/mod/core/set/all/subcards.rb +1 -1
  763. data/mod/core/set/all/templating.rb +4 -4
  764. data/mod/core/set/all/type.rb +2 -2
  765. data/mod/core/set/all/update_read_rules.rb +2 -56
  766. data/mod/core/set_pattern/04_star.rb +1 -1
  767. data/mod/core/set_pattern/05_rstar.rb +1 -1
  768. data/mod/core/set_pattern/06_right.rb +1 -1
  769. data/mod/core/set_pattern/07_type_plus_right.rb +2 -3
  770. data/mod/core/spec/format/html_format_spec.rb +4 -4
  771. data/mod/core/spec/set/all/actify_spec.rb +107 -42
  772. data/mod/core/spec/set/all/event_conditions_spec.rb +1 -1
  773. data/mod/core/spec/set/all/fetch_spec.rb +57 -13
  774. data/mod/core/spec/set/all/name_spec.rb +1 -1
  775. data/mod/core/spec/set/all/permissions/reader_rules_spec.rb +1 -1
  776. data/mod/core/spec/set/all/permissions_spec.rb +2 -2
  777. data/mod/core/spec/set/all/rename_spec.rb +7 -5
  778. data/mod/core/spec/set/all/templating_spec.rb +5 -5
  779. data/mod/core/spec/set/all/type_spec.rb +1 -1
  780. data/mod/developer/set/all/event_viz.rb +1 -3
  781. data/mod/history/lib/card/act.rb +2 -6
  782. data/mod/history/lib/card/act/act_renderer.rb +6 -11
  783. data/mod/history/lib/card/action/action_renderer.rb +1 -1
  784. data/mod/history/lib/card/change.rb +1 -1
  785. data/mod/history/set/all/action_view.rb +1 -1
  786. data/mod/history/set/all/actions.rb +10 -1
  787. data/mod/history/set/all/content_history.rb +9 -9
  788. data/mod/history/set/all/history.rb +40 -27
  789. data/mod/machines/lib/javascript/decko.js.coffee +1 -1
  790. data/mod/machines/lib/javascript/decko_filter.js.coffee +40 -0
  791. data/mod/machines/lib/javascript/decko_layout.js.coffee +16 -8
  792. data/mod/machines/lib/stylesheets/style_cards.scss +9 -0
  793. data/mod/machines/set/abstract/machine.rb +12 -9
  794. data/mod/machines/set/abstract/script.rb +4 -0
  795. data/mod/machines/set/self/script_slot.rb +2 -1
  796. data/mod/machines/set/type/css.rb +4 -0
  797. data/mod/machines/spec/set/type/skin_spec.rb +2 -2
  798. data/mod/machines/spec/shared_examples/machine_input.rb +3 -3
  799. data/mod/notifications/format/email_html_format.rb +4 -0
  800. data/mod/notifications/set/all/follow.rb +1 -1
  801. data/mod/notifications/set/all/send_notifications.rb +18 -17
  802. data/mod/notifications/set/right/bcc.rb +1 -1
  803. data/mod/notifications/set/right/follow.rb +3 -3
  804. data/mod/notifications/set/right/followers.rb +1 -1
  805. data/mod/notifications/set/right/following.rb +2 -2
  806. data/mod/notifications/set/right/html_message.rb +0 -5
  807. data/mod/notifications/set/right/text_message.rb +0 -5
  808. data/mod/notifications/set/self/follow_defaults.rb +3 -3
  809. data/mod/notifications/set/type_plus_right/user/follow.rb +1 -1
  810. data/mod/notifications/spec/set/right/followers_spec.rb +1 -1
  811. data/mod/pointer/set/abstract/01_paging.rb +1 -1
  812. data/mod/pointer/set/abstract/02_pointer.rb +2 -2
  813. data/mod/pointer/set/abstract/02_pointer/edit.rb +10 -8
  814. data/mod/pointer/set/abstract/code_pointer.rb +1 -1
  815. data/mod/pointer/set/self/input_options.rb +1 -1
  816. data/mod/pointer/spec/set/type/pointer_spec.rb +1 -1
  817. data/mod/prosemirror_editor/set/abstract/prosemirror_editor.rb +1 -1
  818. data/mod/{standard → search}/set/abstract/01_search_params.rb +0 -0
  819. data/mod/{standard → search}/set/abstract/search.rb +1 -1
  820. data/mod/{standard → search}/set/abstract/wql_search.rb +2 -2
  821. data/mod/search/set/all/filter.rb +12 -0
  822. data/mod/{standard → search}/set/self/navbox.rb +1 -1
  823. data/mod/{standard → search}/set/self/recent.rb +1 -1
  824. data/mod/{standard → search}/set/self/search.rb +2 -2
  825. data/mod/{standard → search}/set/type/search_type.rb +2 -2
  826. data/mod/search/spec/set/all/filter_spec.rb +37 -0
  827. data/mod/{standard → search}/spec/set/self/navbox_spec.rb +0 -0
  828. data/mod/{standard → search}/spec/set/self/recent_spec.rb +0 -0
  829. data/mod/{standard → search}/spec/set/self/search_spec.rb +0 -0
  830. data/mod/search/template/all/filter/_filter_input.haml +8 -0
  831. data/mod/search/template/all/filter/filter_form.haml +32 -0
  832. data/mod/settings/lib/card/setting.rb +11 -11
  833. data/mod/settings/set/abstract/permission.rb +3 -3
  834. data/mod/settings/set/right/read.rb +56 -0
  835. data/mod/settings/set/type/setting.rb +1 -1
  836. data/mod/solid_cache/set/right/solid_cache.rb +1 -1
  837. data/mod/standard/set/abstract/toolbar_split_button.rb +1 -1
  838. data/mod/standard/set/all/error.rb +1 -1
  839. data/mod/standard/set/all/links.rb +3 -3
  840. data/mod/standard/set/all/list_changes.rb +7 -3
  841. data/mod/standard/set/all/rich_html/content.rb +17 -17
  842. data/mod/standard/set/all/rich_html/editing.rb +3 -3
  843. data/mod/standard/set/all/rich_html/editor.rb +1 -1
  844. data/mod/standard/set/all/rich_html/form.rb +2 -2
  845. data/mod/standard/set/all/rich_html/formgroup.rb +1 -1
  846. data/mod/standard/set/all/rich_html/header.rb +3 -3
  847. data/mod/standard/set/all/rich_html/menu.rb +7 -7
  848. data/mod/standard/set/all/rich_html/modal.rb +3 -3
  849. data/mod/standard/set/all/rich_html/new.rb +3 -3
  850. data/mod/standard/set/all/rich_html/toolbar.rb +16 -14
  851. data/mod/standard/set/all/rich_html/wrapper.rb +7 -7
  852. data/mod/standard/set/rstar/rules.rb +5 -5
  853. data/mod/standard/set/rstar/rules_editor.rb +5 -5
  854. data/mod/standard/set/type/cardtype.rb +1 -1
  855. data/mod/standard/set/type/list.rb +6 -6
  856. data/mod/standard/set/type/listed_by.rb +29 -24
  857. data/mod/standard/set/type/session.rb +0 -4
  858. data/mod/standard/set/type/set.rb +23 -26
  859. data/mod/standard/set/type/toggle.rb +2 -2
  860. data/mod/standard/spec/set/all/history_spec.rb +1 -0
  861. data/mod/standard/spec/set/all/rich_html/editing_spec.rb +1 -1
  862. data/mod/standard/spec/set/all/rich_html/wrapper_spec.rb +2 -2
  863. data/mod/standard/spec/set/type/list_spec.rb +7 -3
  864. data/mod/standard/spec/set/type/listed_by_spec.rb +3 -2
  865. data/mod/standard/spec/set/type/uri_spec.rb +8 -8
  866. data/spec/config/initializers/core_extensions_spec.rb +2 -2
  867. data/spec/lib/card/cache_spec.rb +3 -3
  868. data/spec/lib/card/codename_spec.rb +40 -2
  869. data/spec/lib/card/format_spec.rb +6 -6
  870. data/spec/lib/card/query_spec.rb +0 -2
  871. data/spec/lib/card/reference_spec.rb +3 -3
  872. data/spec/lib/card/stage_director_spec.rb +52 -17
  873. data/spec/lib/card/success_spec.rb +1 -1
  874. data/spec/models/card/trash_spec.rb +1 -1
  875. data/spec/models/card_spec.rb +3 -3
  876. data/spec/support/helper/event_helper.rb +14 -0
  877. data/spec/support/helper/render_helper.rb +1 -1
  878. data/spec/support/matchers/card_matchers.rb +7 -9
  879. metadata +643 -111
  880. data/lib/active_record/connection_adapters_ext.rb +0 -52
  881. data/lib/active_support/callbacks_ext.rb +0 -9
  882. data/lib/card/name/view_name.rb +0 -50
  883. data/mod/bootstrap/db/migrate_cards/20170719163701_update_bootswatch_themes.rb +0 -80
  884. data/mod/bootstrap/lib/javascript/bootstrap.js +0 -3535
  885. data/mod/bootstrap/lib/javascript/bootstrap.min.js +0 -7
  886. data/mod/bootstrap/lib/javascript/select2.min.js +0 -3
  887. data/mod/bootstrap/lib/javascript/tether.min.js +0 -1
  888. data/mod/bootstrap/lib/stylesheets/bootstrap.css +0 -9320
  889. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/.scss-lint.yml +0 -548
  890. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_alert.scss +0 -55
  891. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_badge.scss +0 -77
  892. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_breadcrumb.scss +0 -38
  893. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_buttons.scss +0 -170
  894. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_card.scss +0 -276
  895. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_carousel.scss +0 -178
  896. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_close.scss +0 -31
  897. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_code.scss +0 -64
  898. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_custom-forms.scss +0 -263
  899. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_custom.scss +0 -4
  900. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_dropdown.scss +0 -161
  901. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_forms.scss +0 -388
  902. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_grid.scss +0 -52
  903. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_images.scss +0 -43
  904. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_input-group.scss +0 -178
  905. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_jumbotron.scss +0 -20
  906. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_list-group.scss +0 -141
  907. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_media.scss +0 -8
  908. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_mixins.scss +0 -57
  909. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_modal.scss +0 -142
  910. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_nav.scss +0 -119
  911. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_navbar.scss +0 -268
  912. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_normalize.scss +0 -461
  913. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_pagination.scss +0 -67
  914. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_popover.scss +0 -171
  915. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_print.scss +0 -119
  916. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_progress.scss +0 -32
  917. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_reboot.scss +0 -389
  918. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_tables.scss +0 -153
  919. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_tooltip.scss +0 -90
  920. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_transitions.scss +0 -34
  921. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_type.scss +0 -143
  922. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_utilities.scss +0 -13
  923. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/_variables.scss +0 -961
  924. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/bootstrap-grid.scss +0 -43
  925. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/bootstrap-reboot.scss +0 -10
  926. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/bootstrap.scss +0 -54
  927. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_alert.scss +0 -14
  928. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_background-variant.scss +0 -12
  929. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_badge.scss +0 -11
  930. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_border-radius.scss +0 -35
  931. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_breakpoints.scss +0 -95
  932. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_buttons.scss +0 -86
  933. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_cards.scss +0 -47
  934. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_clearfix.scss +0 -7
  935. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_float.scss +0 -9
  936. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_forms.scss +0 -79
  937. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_gradients.scss +0 -37
  938. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_grid-framework.scss +0 -65
  939. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_grid.scss +0 -100
  940. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_hover.scss +0 -60
  941. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_image.scss +0 -36
  942. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_list-group.scss +0 -28
  943. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_lists.scss +0 -7
  944. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_pagination.scss +0 -21
  945. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_screen-reader.scss +0 -32
  946. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_size.scss +0 -6
  947. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_table-row.scss +0 -30
  948. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_text-emphasis.scss +0 -12
  949. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_text-hide.scss +0 -8
  950. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_transforms.scss +0 -14
  951. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/mixins/_visibility.scss +0 -5
  952. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_align.scss +0 -6
  953. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_background.scss +0 -19
  954. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_borders.scss +0 -37
  955. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_clearfix.scss +0 -3
  956. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_display.scss +0 -18
  957. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_flex.scss +0 -48
  958. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_float.scss +0 -9
  959. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_position.scss +0 -23
  960. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_screenreaders.scss +0 -11
  961. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_sizing.scss +0 -10
  962. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_spacing.scss +0 -43
  963. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_text.scss +0 -61
  964. data/mod/bootstrap/lib/stylesheets/bootstrap/scss/utilities/_visibility.scss +0 -55
  965. data/mod/bootstrap/lib/stylesheets/select2-boostrap-v4-alpha-6.scss +0 -828
@@ -0,0 +1,1325 @@
1
+ $(function () {
2
+ 'use strict';
3
+
4
+ QUnit.module('tooltip plugin')
5
+
6
+ QUnit.test('should be defined on jquery object', function (assert) {
7
+ assert.expect(1)
8
+ assert.ok($(document.body).tooltip, 'tooltip method is defined')
9
+ })
10
+
11
+ QUnit.module('tooltip', {
12
+ beforeEach: function () {
13
+ // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
14
+ $.fn.bootstrapTooltip = $.fn.tooltip.noConflict()
15
+ },
16
+ afterEach: function () {
17
+ $.fn.tooltip = $.fn.bootstrapTooltip
18
+ delete $.fn.bootstrapTooltip
19
+ }
20
+ })
21
+
22
+ QUnit.test('should provide no conflict', function (assert) {
23
+ assert.expect(1)
24
+ assert.strictEqual($.fn.tooltip, undefined, 'tooltip was set back to undefined (org value)')
25
+ })
26
+
27
+ QUnit.test('should return jquery collection containing the element', function (assert) {
28
+ assert.expect(2)
29
+ var $el = $('<div/>')
30
+ var $tooltip = $el.bootstrapTooltip()
31
+ assert.ok($tooltip instanceof $, 'returns jquery collection')
32
+ assert.strictEqual($tooltip[0], $el[0], 'collection contains element')
33
+ })
34
+
35
+ QUnit.test('should expose default settings', function (assert) {
36
+ assert.expect(1)
37
+ assert.ok($.fn.bootstrapTooltip.Constructor.DEFAULTS, 'defaults is defined')
38
+ })
39
+
40
+ QUnit.test('should empty title attribute', function (assert) {
41
+ assert.expect(1)
42
+ var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>').bootstrapTooltip()
43
+ assert.strictEqual($trigger.attr('title'), '', 'title attribute was emptied')
44
+ })
45
+
46
+ QUnit.test('should add data attribute for referencing original title', function (assert) {
47
+ assert.expect(1)
48
+ var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>').bootstrapTooltip()
49
+ assert.strictEqual($trigger.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')
50
+ })
51
+
52
+ QUnit.test('should add aria-describedby to the trigger on show', function (assert) {
53
+ assert.expect(3)
54
+ var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
55
+ .bootstrapTooltip()
56
+ .appendTo('#qunit-fixture')
57
+ .bootstrapTooltip('show')
58
+
59
+ var id = $('.tooltip').attr('id')
60
+
61
+ assert.strictEqual($('#' + id).length, 1, 'has a unique id')
62
+ assert.strictEqual($('.tooltip').attr('aria-describedby'), $trigger.attr('id'), 'tooltip id and aria-describedby on trigger match')
63
+ assert.ok($trigger[0].hasAttribute('aria-describedby'), 'trigger has aria-describedby')
64
+ })
65
+
66
+ QUnit.test('should remove aria-describedby from trigger on hide', function (assert) {
67
+ assert.expect(2)
68
+ var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
69
+ .bootstrapTooltip()
70
+ .appendTo('#qunit-fixture')
71
+
72
+ $trigger.bootstrapTooltip('show')
73
+ assert.ok($trigger[0].hasAttribute('aria-describedby'), 'trigger has aria-describedby')
74
+
75
+ $trigger.bootstrapTooltip('hide')
76
+ assert.ok(!$trigger[0].hasAttribute('aria-describedby'), 'trigger does not have aria-describedby')
77
+ })
78
+
79
+ QUnit.test('should assign a unique id tooltip element', function (assert) {
80
+ assert.expect(2)
81
+ $('<a href="#" rel="tooltip" title="Another tooltip"/>')
82
+ .appendTo('#qunit-fixture')
83
+ .bootstrapTooltip('show')
84
+
85
+ var id = $('.tooltip').attr('id')
86
+
87
+ assert.strictEqual($('#' + id).length, 1, 'tooltip has unique id')
88
+ assert.strictEqual(id.indexOf('tooltip'), 0, 'tooltip id has prefix')
89
+ })
90
+
91
+ QUnit.test('should place tooltips relative to placement option', function (assert) {
92
+ assert.expect(2)
93
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
94
+ .appendTo('#qunit-fixture')
95
+ .bootstrapTooltip({ placement: 'bottom' })
96
+
97
+ $tooltip.bootstrapTooltip('show')
98
+ assert.ok($('.tooltip').is('.fade.bottom.in'), 'has correct classes applied')
99
+
100
+ $tooltip.bootstrapTooltip('hide')
101
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed')
102
+ })
103
+
104
+ QUnit.test('should allow html entities', function (assert) {
105
+ assert.expect(2)
106
+ var $tooltip = $('<a href="#" rel="tooltip" title="&lt;b&gt;@fat&lt;/b&gt;"/>')
107
+ .appendTo('#qunit-fixture')
108
+ .bootstrapTooltip({ html: true })
109
+
110
+ $tooltip.bootstrapTooltip('show')
111
+ assert.notEqual($('.tooltip b').length, 0, 'b tag was inserted')
112
+
113
+ $tooltip.bootstrapTooltip('hide')
114
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed')
115
+ })
116
+
117
+ QUnit.test('should respect custom classes', function (assert) {
118
+ assert.expect(2)
119
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
120
+ .appendTo('#qunit-fixture')
121
+ .bootstrapTooltip({ template: '<div class="tooltip some-class"><div class="tooltip-arrow"/><div class="tooltip-inner"/></div>' })
122
+
123
+ $tooltip.bootstrapTooltip('show')
124
+ assert.ok($('.tooltip').hasClass('some-class'), 'custom class is present')
125
+
126
+ $tooltip.bootstrapTooltip('hide')
127
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed')
128
+ })
129
+
130
+ QUnit.test('should fire show event', function (assert) {
131
+ assert.expect(1)
132
+ var done = assert.async()
133
+
134
+ $('<div title="tooltip title"/>')
135
+ .on('show.bs.tooltip', function () {
136
+ assert.ok(true, 'show event fired')
137
+ done()
138
+ })
139
+ .bootstrapTooltip('show')
140
+ })
141
+
142
+ QUnit.test('should fire inserted event', function (assert) {
143
+ assert.expect(2)
144
+ var done = assert.async()
145
+
146
+ $('<div title="tooltip title"/>')
147
+ .appendTo('#qunit-fixture')
148
+ .on('inserted.bs.tooltip', function () {
149
+ assert.notEqual($('.tooltip').length, 0, 'tooltip was inserted')
150
+ assert.ok(true, 'inserted event fired')
151
+ done()
152
+ })
153
+ .bootstrapTooltip('show')
154
+ })
155
+
156
+ QUnit.test('should fire shown event', function (assert) {
157
+ assert.expect(1)
158
+ var done = assert.async()
159
+
160
+ $('<div title="tooltip title"></div>')
161
+ .appendTo('#qunit-fixture')
162
+ .on('shown.bs.tooltip', function () {
163
+ assert.ok(true, 'shown was called')
164
+ done()
165
+ })
166
+ .bootstrapTooltip('show')
167
+ })
168
+
169
+ QUnit.test('should not fire shown event when show was prevented', function (assert) {
170
+ assert.expect(1)
171
+ var done = assert.async()
172
+
173
+ $('<div title="tooltip title"/>')
174
+ .on('show.bs.tooltip', function (e) {
175
+ e.preventDefault()
176
+ assert.ok(true, 'show event fired')
177
+ done()
178
+ })
179
+ .on('shown.bs.tooltip', function () {
180
+ assert.ok(false, 'shown event fired')
181
+ })
182
+ .bootstrapTooltip('show')
183
+ })
184
+
185
+ QUnit.test('should fire hide event', function (assert) {
186
+ assert.expect(1)
187
+ var done = assert.async()
188
+
189
+ $('<div title="tooltip title"/>')
190
+ .appendTo('#qunit-fixture')
191
+ .on('shown.bs.tooltip', function () {
192
+ $(this).bootstrapTooltip('hide')
193
+ })
194
+ .on('hide.bs.tooltip', function () {
195
+ assert.ok(true, 'hide event fired')
196
+ done()
197
+ })
198
+ .bootstrapTooltip('show')
199
+ })
200
+
201
+ QUnit.test('should fire hidden event', function (assert) {
202
+ assert.expect(1)
203
+ var done = assert.async()
204
+
205
+ $('<div title="tooltip title"/>')
206
+ .appendTo('#qunit-fixture')
207
+ .on('shown.bs.tooltip', function () {
208
+ $(this).bootstrapTooltip('hide')
209
+ })
210
+ .on('hidden.bs.tooltip', function () {
211
+ assert.ok(true, 'hidden event fired')
212
+ done()
213
+ })
214
+ .bootstrapTooltip('show')
215
+ })
216
+
217
+ QUnit.test('should not fire hidden event when hide was prevented', function (assert) {
218
+ assert.expect(1)
219
+ var done = assert.async()
220
+
221
+ $('<div title="tooltip title"/>')
222
+ .appendTo('#qunit-fixture')
223
+ .on('shown.bs.tooltip', function () {
224
+ $(this).bootstrapTooltip('hide')
225
+ })
226
+ .on('hide.bs.tooltip', function (e) {
227
+ e.preventDefault()
228
+ assert.ok(true, 'hide event fired')
229
+ done()
230
+ })
231
+ .on('hidden.bs.tooltip', function () {
232
+ assert.ok(false, 'hidden event fired')
233
+ })
234
+ .bootstrapTooltip('show')
235
+ })
236
+
237
+ QUnit.test('should destroy tooltip', function (assert) {
238
+ assert.expect(7)
239
+ var $tooltip = $('<div/>')
240
+ .bootstrapTooltip()
241
+ .on('click.foo', function () {})
242
+
243
+ assert.ok($tooltip.data('bs.tooltip'), 'tooltip has data')
244
+ assert.ok($._data($tooltip[0], 'events').mouseover && $._data($tooltip[0], 'events').mouseout, 'tooltip has hover events')
245
+ assert.strictEqual($._data($tooltip[0], 'events').click[0].namespace, 'foo', 'tooltip has extra click.foo event')
246
+
247
+ $tooltip.bootstrapTooltip('show')
248
+ $tooltip.bootstrapTooltip('destroy')
249
+
250
+ assert.ok(!$tooltip.hasClass('in'), 'tooltip is hidden')
251
+ assert.ok(!$._data($tooltip[0], 'bs.tooltip'), 'tooltip does not have data')
252
+ assert.strictEqual($._data($tooltip[0], 'events').click[0].namespace, 'foo', 'tooltip still has click.foo')
253
+ assert.ok(!$._data($tooltip[0], 'events').mouseover && !$._data($tooltip[0], 'events').mouseout, 'tooltip does not have hover events')
254
+ })
255
+
256
+ QUnit.test('should show tooltip with delegate selector on click', function (assert) {
257
+ assert.expect(2)
258
+ var $div = $('<div><a href="#" rel="tooltip" title="Another tooltip"/></div>')
259
+ .appendTo('#qunit-fixture')
260
+ .bootstrapTooltip({
261
+ selector: 'a[rel="tooltip"]',
262
+ trigger: 'click'
263
+ })
264
+
265
+ $div.find('a').trigger('click')
266
+ assert.ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
267
+
268
+ $div.find('a').trigger('click')
269
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip was removed from dom')
270
+ })
271
+
272
+ QUnit.test('should show tooltip when toggle is called', function (assert) {
273
+ assert.expect(1)
274
+ $('<a href="#" rel="tooltip" title="tooltip on toggle"/>')
275
+ .appendTo('#qunit-fixture')
276
+ .bootstrapTooltip({ trigger: 'manual' })
277
+ .bootstrapTooltip('toggle')
278
+
279
+ assert.ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
280
+ })
281
+
282
+ QUnit.test('should hide previously shown tooltip when toggle is called on tooltip', function (assert) {
283
+ assert.expect(1)
284
+ $('<a href="#" rel="tooltip" title="tooltip on toggle">@ResentedHook</a>')
285
+ .appendTo('#qunit-fixture')
286
+ .bootstrapTooltip({ trigger: 'manual' })
287
+ .bootstrapTooltip('show')
288
+
289
+ $('.tooltip').bootstrapTooltip('toggle')
290
+ assert.ok($('.tooltip').not('.fade.in'), 'tooltip was faded out')
291
+ })
292
+
293
+ QUnit.test('should place tooltips inside body when container is body', function (assert) {
294
+ assert.expect(3)
295
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
296
+ .appendTo('#qunit-fixture')
297
+ .bootstrapTooltip({ container: 'body' })
298
+ .bootstrapTooltip('show')
299
+
300
+ assert.notEqual($('body > .tooltip').length, 0, 'tooltip is direct descendant of body')
301
+ assert.strictEqual($('#qunit-fixture > .tooltip').length, 0, 'tooltip is not in parent')
302
+
303
+ $tooltip.bootstrapTooltip('hide')
304
+ assert.strictEqual($('body > .tooltip').length, 0, 'tooltip was removed from dom')
305
+ })
306
+
307
+ QUnit.test('should add position class before positioning so that position-specific styles are taken into account', function (assert) {
308
+ assert.expect(1)
309
+ var styles = '<style>'
310
+ + '.tooltip.right { white-space: nowrap; }'
311
+ + '.tooltip.right .tooltip-inner { max-width: none; }'
312
+ + '</style>'
313
+ var $styles = $(styles).appendTo('head')
314
+
315
+ var $container = $('<div/>').appendTo('#qunit-fixture')
316
+ var $target = $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"/>')
317
+ .appendTo($container)
318
+ .bootstrapTooltip({
319
+ placement: 'right',
320
+ viewport: null
321
+ })
322
+ .bootstrapTooltip('show')
323
+ var $tooltip = $container.find('.tooltip')
324
+
325
+ // this is some dumb hack shit because sub pixels in firefox
326
+ var top = Math.round($target.offset().top + ($target[0].offsetHeight / 2) - ($tooltip[0].offsetHeight / 2))
327
+ var top2 = Math.round($tooltip.offset().top)
328
+ var topDiff = top - top2
329
+ assert.ok(topDiff <= 1 && topDiff >= -1)
330
+ $target.bootstrapTooltip('hide')
331
+
332
+ $container.remove()
333
+ $styles.remove()
334
+ })
335
+
336
+ QUnit.test('should use title attribute for tooltip text', function (assert) {
337
+ assert.expect(2)
338
+ var $tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip"/>')
339
+ .appendTo('#qunit-fixture')
340
+ .bootstrapTooltip()
341
+
342
+ $tooltip.bootstrapTooltip('show')
343
+ assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title from title attribute is set')
344
+
345
+ $tooltip.bootstrapTooltip('hide')
346
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
347
+ })
348
+
349
+ QUnit.test('should prefer title attribute over title option', function (assert) {
350
+ assert.expect(2)
351
+ var $tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip"/>')
352
+ .appendTo('#qunit-fixture')
353
+ .bootstrapTooltip({
354
+ title: 'This is a tooltip with some content'
355
+ })
356
+
357
+ $tooltip.bootstrapTooltip('show')
358
+ assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title is set from title attribute while preferred over title option')
359
+
360
+ $tooltip.bootstrapTooltip('hide')
361
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
362
+ })
363
+
364
+ QUnit.test('should use title option', function (assert) {
365
+ assert.expect(2)
366
+ var $tooltip = $('<a href="#" rel="tooltip"/>')
367
+ .appendTo('#qunit-fixture')
368
+ .bootstrapTooltip({
369
+ title: 'This is a tooltip with some content'
370
+ })
371
+
372
+ $tooltip.bootstrapTooltip('show')
373
+ assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'This is a tooltip with some content', 'title from title option is set')
374
+
375
+ $tooltip.bootstrapTooltip('hide')
376
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
377
+ })
378
+
379
+ QUnit.test('should be placed dynamically to viewport with the dynamic placement option', function (assert) {
380
+ assert.expect(6)
381
+ var $style = $('<style> div[rel="tooltip"] { position: absolute; } #qunit-fixture { top: inherit; left: inherit } </style>').appendTo('head')
382
+ var $container = $('<div/>')
383
+ .css({
384
+ position: 'relative',
385
+ height: '100%'
386
+ })
387
+ .appendTo('#qunit-fixture')
388
+
389
+ var $topTooltip = $('<div style="left: 0; top: 0;" rel="tooltip" title="Top tooltip">Top Dynamic Tooltip</div>')
390
+ .appendTo($container)
391
+ .bootstrapTooltip({ placement: 'auto', viewport: '#qunit-fixture' })
392
+
393
+ $topTooltip.bootstrapTooltip('show')
394
+ assert.ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned to bottom')
395
+
396
+ $topTooltip.bootstrapTooltip('hide')
397
+ assert.strictEqual($('.tooltip').length, 0, 'top positioned tooltip removed from dom')
398
+
399
+ var $rightTooltip = $('<div style="right: 0;" rel="tooltip" title="Right tooltip">Right Dynamic Tooltip</div>')
400
+ .appendTo($container)
401
+ .bootstrapTooltip({ placement: 'right auto', viewport: '#qunit-fixture' })
402
+
403
+ $rightTooltip.bootstrapTooltip('show')
404
+ assert.ok($('.tooltip').is('.left'), 'right positioned tooltip is dynamically positioned left')
405
+
406
+ $rightTooltip.bootstrapTooltip('hide')
407
+ assert.strictEqual($('.tooltip').length, 0, 'right positioned tooltip removed from dom')
408
+
409
+ var $leftTooltip = $('<div style="left: 0;" rel="tooltip" title="Left tooltip">Left Dynamic Tooltip</div>')
410
+ .appendTo($container)
411
+ .bootstrapTooltip({ placement: 'auto left', viewport: '#qunit-fixture' })
412
+
413
+ $leftTooltip.bootstrapTooltip('show')
414
+ assert.ok($('.tooltip').is('.right'), 'left positioned tooltip is dynamically positioned right')
415
+
416
+ $leftTooltip.bootstrapTooltip('hide')
417
+ assert.strictEqual($('.tooltip').length, 0, 'left positioned tooltip removed from dom')
418
+
419
+ $container.remove()
420
+ $style.remove()
421
+ })
422
+
423
+ QUnit.test('should position tip on top if viewport has enough space and placement is "auto top"', function (assert) {
424
+ assert.expect(2)
425
+ var styles = '<style>'
426
+ + 'body { padding-top: 100px; }'
427
+ + '#section { height: 300px; border: 1px solid red; padding-top: 50px }'
428
+ + 'div[rel="tooltip"] { width: 150px; border: 1px solid blue; }'
429
+ + '</style>'
430
+ var $styles = $(styles).appendTo('head')
431
+
432
+ var $container = $('<div id="section"/>').appendTo('#qunit-fixture')
433
+ var $target = $('<div rel="tooltip" title="tip"/>')
434
+ .appendTo($container)
435
+ .bootstrapTooltip({
436
+ placement: 'auto top',
437
+ viewport: '#section'
438
+ })
439
+
440
+ $target.bootstrapTooltip('show')
441
+ assert.ok($('.tooltip').is('.top'), 'top positioned tooltip is dynamically positioned to top')
442
+
443
+ $target.bootstrapTooltip('hide')
444
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
445
+
446
+ $styles.remove()
447
+ })
448
+
449
+ QUnit.test('should position tip on top if viewport has enough space and is not parent', function (assert) {
450
+ assert.expect(2)
451
+ var styles = '<style>'
452
+ + '#section { height: 300px; border: 1px solid red; margin-top: 100px; }'
453
+ + 'div[rel="tooltip"] { width: 150px; border: 1px solid blue; }'
454
+ + '</style>'
455
+ var $styles = $(styles).appendTo('head')
456
+
457
+ var $container = $('<div id="section"/>').appendTo('#qunit-fixture')
458
+ var $target = $('<div rel="tooltip" title="tip"/>')
459
+ .appendTo($container)
460
+ .bootstrapTooltip({
461
+ placement: 'auto top',
462
+ viewport: '#qunit-fixture'
463
+ })
464
+
465
+ $target.bootstrapTooltip('show')
466
+ assert.ok($('.tooltip').is('.top'), 'top positioned tooltip is dynamically positioned to top')
467
+
468
+ $target.bootstrapTooltip('hide')
469
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
470
+
471
+ $styles.remove()
472
+ })
473
+
474
+ QUnit.test('should position tip on bottom if the tip\'s dimension exceeds the viewport area and placement is "auto top"', function (assert) {
475
+ assert.expect(2)
476
+ var styles = '<style>'
477
+ + 'body { padding-top: 100px; }'
478
+ + '#section { height: 300px; border: 1px solid red; }'
479
+ + 'div[rel="tooltip"] { width: 150px; border: 1px solid blue; }'
480
+ + '</style>'
481
+ var $styles = $(styles).appendTo('head')
482
+
483
+ var $container = $('<div id="section"/>').appendTo('#qunit-fixture')
484
+ var $target = $('<div rel="tooltip" title="tip"/>')
485
+ .appendTo($container)
486
+ .bootstrapTooltip({
487
+ placement: 'auto top',
488
+ viewport: '#section'
489
+ })
490
+
491
+ $target.bootstrapTooltip('show')
492
+ assert.ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned to bottom')
493
+
494
+ $target.bootstrapTooltip('hide')
495
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
496
+
497
+ $styles.remove()
498
+ })
499
+
500
+ QUnit.test('should display the tip on top whenever scrollable viewport has enough room if the given placement is "auto top"', function (assert) {
501
+ assert.expect(2)
502
+ var styles = '<style>'
503
+ + '#scrollable-div { height: 200px; overflow: auto; }'
504
+ + '.tooltip-item { margin: 200px 0 400px; width: 150px; }'
505
+ + '</style>'
506
+ var $styles = $(styles).appendTo('head')
507
+
508
+ var $container = $('<div id="scrollable-div"/>').appendTo('#qunit-fixture')
509
+ var $target = $('<div rel="tooltip" title="tip" class="tooltip-item">Tooltip Item</div>')
510
+ .appendTo($container)
511
+ .bootstrapTooltip({
512
+ placement: 'top auto',
513
+ viewport: '#scrollable-div'
514
+ })
515
+
516
+ $('#scrollable-div').scrollTop(100)
517
+
518
+ $target.bootstrapTooltip('show')
519
+ assert.ok($('.tooltip').is('.fade.top.in'), 'has correct classes applied')
520
+
521
+ $target.bootstrapTooltip('hide')
522
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
523
+
524
+ $styles.remove()
525
+ })
526
+
527
+ QUnit.test('should display the tip on bottom whenever scrollable viewport doesn\'t have enough room if the given placement is "auto top"', function (assert) {
528
+ assert.expect(2)
529
+ var styles = '<style>'
530
+ + '#scrollable-div { height: 200px; overflow: auto; }'
531
+ + '.tooltip-item { padding: 200px 0 400px; width: 150px; }'
532
+ + '</style>'
533
+ var $styles = $(styles).appendTo('head')
534
+
535
+ var $container = $('<div id="scrollable-div"/>').appendTo('#qunit-fixture')
536
+ var $target = $('<div rel="tooltip" title="tip" class="tooltip-item">Tooltip Item</div>')
537
+ .appendTo($container)
538
+ .bootstrapTooltip({
539
+ placement: 'top auto',
540
+ viewport: '#scrollable-div'
541
+ })
542
+
543
+ $('#scrollable-div').scrollTop(200)
544
+
545
+ $target.bootstrapTooltip('show')
546
+ assert.ok($('.tooltip').is('.fade.bottom.in'), 'has correct classes applied')
547
+
548
+ $target.bootstrapTooltip('hide')
549
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
550
+
551
+ $styles.remove()
552
+ })
553
+
554
+ QUnit.test('should display the tip on bottom whenever scrollable viewport has enough room if the given placement is "auto bottom"', function (assert) {
555
+ assert.expect(2)
556
+ var styles = '<style>'
557
+ + '#scrollable-div { height: 200px; overflow: auto; }'
558
+ + '.spacer { height: 400px; }'
559
+ + '.spacer:first-child { height: 200px; }'
560
+ + '.tooltip-item { width: 150px; }'
561
+ + '</style>'
562
+ var $styles = $(styles).appendTo('head')
563
+
564
+ var $container = $('<div id="scrollable-div"/>').appendTo('#qunit-fixture')
565
+ var $target = $('<div rel="tooltip" title="tip" class="tooltip-item">Tooltip Item</div>')
566
+ .appendTo($container)
567
+ .before('<div class="spacer"/>')
568
+ .after('<div class="spacer"/>')
569
+ .bootstrapTooltip({
570
+ placement: 'bottom auto',
571
+ viewport: '#scrollable-div'
572
+ })
573
+
574
+ $('#scrollable-div').scrollTop(200)
575
+
576
+ $target.bootstrapTooltip('show')
577
+ assert.ok($('.tooltip').is('.fade.bottom.in'), 'has correct classes applied')
578
+
579
+ $target.bootstrapTooltip('hide')
580
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
581
+
582
+ $styles.remove()
583
+ })
584
+
585
+ QUnit.test('should display the tip on top whenever scrollable viewport doesn\'t have enough room if the given placement is "auto bottom"', function (assert) {
586
+ assert.expect(2)
587
+ var styles = '<style>'
588
+ + '#scrollable-div { height: 200px; overflow: auto; }'
589
+ + '.tooltip-item { margin-top: 400px; width: 150px; }'
590
+ + '</style>'
591
+ var $styles = $(styles).appendTo('head')
592
+
593
+ var $container = $('<div id="scrollable-div"/>').appendTo('#qunit-fixture')
594
+ var $target = $('<div rel="tooltip" title="tip" class="tooltip-item">Tooltip Item</div>')
595
+ .appendTo($container)
596
+ .bootstrapTooltip({
597
+ placement: 'bottom auto',
598
+ viewport: '#scrollable-div'
599
+ })
600
+
601
+ $('#scrollable-div').scrollTop(400)
602
+
603
+ $target.bootstrapTooltip('show')
604
+ assert.ok($('.tooltip').is('.fade.top.in'), 'has correct classes applied')
605
+
606
+ $target.bootstrapTooltip('hide')
607
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
608
+
609
+ $styles.remove()
610
+ })
611
+
612
+ QUnit.test('should adjust the tip\'s top position when up against the top of the viewport', function (assert) {
613
+ assert.expect(2)
614
+ var styles = '<style>'
615
+ + '.tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
616
+ + 'a[rel="tooltip"] { position: fixed; }'
617
+ + '</style>'
618
+ var $styles = $(styles).appendTo('head')
619
+
620
+ var $container = $('<div/>').appendTo('#qunit-fixture')
621
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="top: 0px; left: 0px;"/>')
622
+ .appendTo($container)
623
+ .bootstrapTooltip({
624
+ placement: 'right',
625
+ viewport: {
626
+ selector: 'body',
627
+ padding: 12
628
+ }
629
+ })
630
+
631
+ $target.bootstrapTooltip('show')
632
+ assert.strictEqual(Math.round($container.find('.tooltip').offset().top), 12)
633
+
634
+ $target.bootstrapTooltip('hide')
635
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
636
+
637
+ $styles.remove()
638
+ })
639
+
640
+ QUnit.test('should adjust the tip\'s top position when up against the bottom of the viewport', function (assert) {
641
+ assert.expect(2)
642
+ var styles = '<style>'
643
+ + '.tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
644
+ + 'a[rel="tooltip"] { position: fixed; }'
645
+ + '</style>'
646
+ var $styles = $(styles).appendTo('head')
647
+
648
+ var $container = $('<div/>').appendTo('#qunit-fixture')
649
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="bottom: 0px; left: 0px;"/>')
650
+ .appendTo($container)
651
+ .bootstrapTooltip({
652
+ placement: 'right',
653
+ viewport: {
654
+ selector: 'body',
655
+ padding: 12
656
+ }
657
+ })
658
+
659
+ $target.bootstrapTooltip('show')
660
+ var $tooltip = $container.find('.tooltip')
661
+ assert.strictEqual(Math.round($tooltip.offset().top), Math.round($(window).height() - 12 - $tooltip[0].offsetHeight))
662
+
663
+ $target.bootstrapTooltip('hide')
664
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
665
+
666
+ $container.remove()
667
+ $styles.remove()
668
+ })
669
+
670
+ QUnit.test('should adjust the tip\'s left position when up against the left of the viewport', function (assert) {
671
+ assert.expect(2)
672
+ var styles = '<style>'
673
+ + '.tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
674
+ + 'a[rel="tooltip"] { position: fixed; }'
675
+ + '</style>'
676
+ var $styles = $(styles).appendTo('head')
677
+
678
+ var $container = $('<div/>').appendTo('#qunit-fixture')
679
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="top: 0px; left: 0px;"/>')
680
+ .appendTo($container)
681
+ .bootstrapTooltip({
682
+ placement: 'bottom',
683
+ viewport: {
684
+ selector: 'body',
685
+ padding: 12
686
+ }
687
+ })
688
+
689
+ $target.bootstrapTooltip('show')
690
+ assert.strictEqual(Math.round($container.find('.tooltip').offset().left), 12)
691
+
692
+ $target.bootstrapTooltip('hide')
693
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
694
+
695
+ $container.remove()
696
+ $styles.remove()
697
+ })
698
+
699
+ QUnit.test('should adjust the tip\'s left position when up against the right of the viewport', function (assert) {
700
+ assert.expect(2)
701
+ var styles = '<style>'
702
+ + '.tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
703
+ + 'a[rel="tooltip"] { position: fixed; }'
704
+ + '</style>'
705
+ var $styles = $(styles).appendTo('head')
706
+
707
+ var $container = $('<div/>').appendTo('body')
708
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="top: 0px; right: 0px;"/>')
709
+ .appendTo($container)
710
+ .bootstrapTooltip({
711
+ placement: 'bottom',
712
+ viewport: {
713
+ selector: 'body',
714
+ padding: 12
715
+ }
716
+ })
717
+
718
+ $target.bootstrapTooltip('show')
719
+ var $tooltip = $container.find('.tooltip')
720
+ assert.strictEqual(Math.round($tooltip.offset().left), Math.round($(window).width() - 12 - $tooltip[0].offsetWidth))
721
+
722
+ $target.bootstrapTooltip('hide')
723
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
724
+
725
+ $container.remove()
726
+ $styles.remove()
727
+ })
728
+
729
+ QUnit.test('should adjust the tip when up against the right of an arbitrary viewport', function (assert) {
730
+ assert.expect(2)
731
+ var styles = '<style>'
732
+ + '.tooltip, .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
733
+ + '.container-viewport { position: absolute; top: 50px; left: 60px; width: 300px; height: 300px; }'
734
+ + 'a[rel="tooltip"] { position: fixed; }'
735
+ + '</style>'
736
+ var $styles = $(styles).appendTo('head')
737
+
738
+ var $container = $('<div class="container-viewport"/>').appendTo(document.body)
739
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="top: 50px; left: 350px;"/>')
740
+ .appendTo($container)
741
+ .bootstrapTooltip({
742
+ placement: 'bottom',
743
+ viewport: '.container-viewport'
744
+ })
745
+
746
+ $target.bootstrapTooltip('show')
747
+ var $tooltip = $container.find('.tooltip')
748
+ assert.strictEqual(Math.round($tooltip.offset().left), Math.round(60 + $container.width() - $tooltip[0].offsetWidth))
749
+
750
+ $target.bootstrapTooltip('hide')
751
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
752
+
753
+ $container.remove()
754
+ $styles.remove()
755
+ })
756
+
757
+ QUnit.test('should get viewport element from function', function (assert) {
758
+ assert.expect(3)
759
+ var styles = '<style>'
760
+ + '.tooltip, .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; }'
761
+ + '.container-viewport { position: absolute; top: 50px; left: 60px; width: 300px; height: 300px; }'
762
+ + 'a[rel="tooltip"] { position: fixed; }'
763
+ + '</style>'
764
+ var $styles = $(styles).appendTo('head')
765
+
766
+ var $container = $('<div class="container-viewport"/>').appendTo(document.body)
767
+ var $target = $('<a href="#" rel="tooltip" title="tip" style="top: 50px; left: 350px;"/>').appendTo($container)
768
+ $target
769
+ .bootstrapTooltip({
770
+ placement: 'bottom',
771
+ viewport: function ($element) {
772
+ assert.strictEqual($element[0], $target[0], 'viewport function was passed target as argument')
773
+ return ($element.closest('.container-viewport'))
774
+ }
775
+ })
776
+
777
+ $target.bootstrapTooltip('show')
778
+ var $tooltip = $container.find('.tooltip')
779
+ assert.strictEqual(Math.round($tooltip.offset().left), Math.round(60 + $container.width() - $tooltip[0].offsetWidth))
780
+
781
+ $target.bootstrapTooltip('hide')
782
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
783
+
784
+ $container.remove()
785
+ $styles.remove()
786
+ })
787
+
788
+ QUnit.test('should not misplace the tip when the right edge offset is greater or equal than the viewport width', function (assert) {
789
+ assert.expect(2)
790
+ var styles = '<style>'
791
+ + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
792
+ + '.container-viewport, .container-viewport *, .container-viewport *:before, .container-viewport *:after { box-sizing: border-box; }'
793
+ + '.tooltip, .tooltip .tooltip-inner { width: 50px; height: 50px; max-width: none; background: red; }'
794
+ + '.container-viewport { padding: 100px; margin-left: 100px; width: 100px; }'
795
+ + '</style>'
796
+ var $styles = $(styles).appendTo('head')
797
+
798
+ var $container = $('<div class="container-viewport"/>').appendTo(document.body)
799
+ var $target = $('<a href="#" rel="tooltip" title="tip">foobar</a>')
800
+ .appendTo($container)
801
+ .bootstrapTooltip({
802
+ viewport: '.container-viewport'
803
+ })
804
+
805
+ $target.bootstrapTooltip('show')
806
+ var $tooltip = $container.find('.tooltip')
807
+ assert.strictEqual(Math.round($tooltip.offset().left), Math.round($target.position().left + $target.width() / 2 - $tooltip[0].offsetWidth / 2))
808
+
809
+ $target.bootstrapTooltip('hide')
810
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
811
+
812
+ $container.remove()
813
+ $styles.remove()
814
+ })
815
+
816
+ QUnit.test('should not error when trying to show an auto-placed tooltip that has been removed from the dom', function (assert) {
817
+ assert.expect(1)
818
+ var passed = true
819
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
820
+ .appendTo('#qunit-fixture')
821
+ .one('show.bs.tooltip', function () {
822
+ $(this).remove()
823
+ })
824
+ .bootstrapTooltip({ placement: 'auto' })
825
+
826
+ try {
827
+ $tooltip.bootstrapTooltip('show')
828
+ } catch (err) {
829
+ passed = false
830
+ console.log(err)
831
+ }
832
+
833
+ assert.ok(passed, '.tooltip(\'show\') should not throw an error if element no longer is in dom')
834
+ })
835
+
836
+ QUnit.test('should place tooltip on top of element', function (assert) {
837
+ assert.expect(1)
838
+ var done = assert.async()
839
+
840
+ var containerHTML = '<div>'
841
+ + '<p style="margin-top: 200px">'
842
+ + '<a href="#" title="very very very very very very very long tooltip">Hover me</a>'
843
+ + '</p>'
844
+ + '</div>'
845
+
846
+ var $container = $(containerHTML)
847
+ .css({
848
+ position: 'absolute',
849
+ bottom: 0,
850
+ left: 0,
851
+ textAlign: 'right',
852
+ width: 300,
853
+ height: 300
854
+ })
855
+ .appendTo('#qunit-fixture')
856
+
857
+ var $trigger = $container
858
+ .find('a')
859
+ .css('margin-top', 200)
860
+ .bootstrapTooltip({
861
+ placement: 'top',
862
+ animate: false
863
+ })
864
+ .bootstrapTooltip('show')
865
+
866
+ var $tooltip = $container.find('.tooltip')
867
+
868
+ setTimeout(function () {
869
+ assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) <= Math.round($trigger.offset().top))
870
+ done()
871
+ }, 0)
872
+ })
873
+
874
+ QUnit.test('should place tooltip inside viewport', function (assert) {
875
+ assert.expect(1)
876
+ var done = assert.async()
877
+
878
+ var $container = $('<div/>')
879
+ .css({
880
+ position: 'absolute',
881
+ width: 200,
882
+ height: 200,
883
+ bottom: 0,
884
+ left: 0
885
+ })
886
+ .appendTo('#qunit-fixture')
887
+
888
+ $('<a href="#" title="Very very very very very very very very long tooltip">Hover me</a>')
889
+ .css({
890
+ position: 'absolute',
891
+ top: 0,
892
+ left: 0
893
+ })
894
+ .appendTo($container)
895
+ .bootstrapTooltip({
896
+ placement: 'top'
897
+ })
898
+ .bootstrapTooltip('show')
899
+
900
+ setTimeout(function () {
901
+ assert.ok($('.tooltip').offset().left >= 0)
902
+ done()
903
+ }, 0)
904
+ })
905
+
906
+ QUnit.test('should show tooltip if leave event hasn\'t occurred before delay expires', function (assert) {
907
+ assert.expect(2)
908
+ var done = assert.async()
909
+
910
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
911
+ .appendTo('#qunit-fixture')
912
+ .bootstrapTooltip({ delay: 150 })
913
+
914
+ setTimeout(function () {
915
+ assert.ok(!$('.tooltip').is('.fade.in'), '100ms: tooltip is not faded in')
916
+ }, 100)
917
+
918
+ setTimeout(function () {
919
+ assert.ok($('.tooltip').is('.fade.in'), '200ms: tooltip is faded in')
920
+ done()
921
+ }, 200)
922
+
923
+ $tooltip.trigger('mouseenter')
924
+ })
925
+
926
+ QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
927
+ assert.expect(2)
928
+ var done = assert.async()
929
+
930
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
931
+ .appendTo('#qunit-fixture')
932
+ .bootstrapTooltip({ delay: 150 })
933
+
934
+ setTimeout(function () {
935
+ assert.ok(!$('.tooltip').is('.fade.in'), '100ms: tooltip not faded in')
936
+ $tooltip.trigger('mouseout')
937
+ }, 100)
938
+
939
+ setTimeout(function () {
940
+ assert.ok(!$('.tooltip').is('.fade.in'), '200ms: tooltip not faded in')
941
+ done()
942
+ }, 200)
943
+
944
+ $tooltip.trigger('mouseenter')
945
+ })
946
+
947
+ QUnit.test('should not hide tooltip if leave event occurs and enter event occurs within the hide delay', function (assert) {
948
+ assert.expect(3)
949
+ var done = assert.async()
950
+
951
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
952
+ .appendTo('#qunit-fixture')
953
+ .bootstrapTooltip({ delay: { show: 0, hide: 150 }})
954
+
955
+ setTimeout(function () {
956
+ assert.ok($('.tooltip').is('.fade.in'), '1ms: tooltip faded in')
957
+ $tooltip.trigger('mouseout')
958
+
959
+ setTimeout(function () {
960
+ assert.ok($('.tooltip').is('.fade.in'), '100ms: tooltip still faded in')
961
+ $tooltip.trigger('mouseenter')
962
+ }, 100)
963
+
964
+ setTimeout(function () {
965
+ assert.ok($('.tooltip').is('.fade.in'), '200ms: tooltip still faded in')
966
+ done()
967
+ }, 200)
968
+ }, 0)
969
+
970
+ $tooltip.trigger('mouseenter')
971
+ })
972
+
973
+ QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
974
+ assert.expect(2)
975
+ var done = assert.async()
976
+
977
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
978
+ .appendTo('#qunit-fixture')
979
+ .bootstrapTooltip({ delay: 150 })
980
+
981
+ setTimeout(function () {
982
+ assert.ok(!$('.tooltip').is('.fade.in'), '100ms: tooltip not faded in')
983
+ $tooltip.trigger('mouseout')
984
+ }, 100)
985
+
986
+ setTimeout(function () {
987
+ assert.ok(!$('.tooltip').is('.fade.in'), '200ms: tooltip not faded in')
988
+ done()
989
+ }, 200)
990
+
991
+ $tooltip.trigger('mouseenter')
992
+ })
993
+
994
+ QUnit.test('should not show tooltip if leave event occurs before delay expires, even if hide delay is 0', function (assert) {
995
+ assert.expect(2)
996
+ var done = assert.async()
997
+
998
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
999
+ .appendTo('#qunit-fixture')
1000
+ .bootstrapTooltip({ delay: { show: 150, hide: 0 }})
1001
+
1002
+ setTimeout(function () {
1003
+ assert.ok(!$('.tooltip').is('.fade.in'), '100ms: tooltip not faded in')
1004
+ $tooltip.trigger('mouseout')
1005
+ }, 100)
1006
+
1007
+ setTimeout(function () {
1008
+ assert.ok(!$('.tooltip').is('.fade.in'), '250ms: tooltip not faded in')
1009
+ done()
1010
+ }, 250)
1011
+
1012
+ $tooltip.trigger('mouseenter')
1013
+ })
1014
+
1015
+ QUnit.test('should wait 200ms before hiding the tooltip', function (assert) {
1016
+ assert.expect(3)
1017
+ var done = assert.async()
1018
+
1019
+ var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
1020
+ .appendTo('#qunit-fixture')
1021
+ .bootstrapTooltip({ delay: { show: 0, hide: 150 }})
1022
+
1023
+ setTimeout(function () {
1024
+ assert.ok($tooltip.data('bs.tooltip').$tip.is('.fade.in'), '1ms: tooltip faded in')
1025
+
1026
+ $tooltip.trigger('mouseout')
1027
+
1028
+ setTimeout(function () {
1029
+ assert.ok($tooltip.data('bs.tooltip').$tip.is('.fade.in'), '100ms: tooltip still faded in')
1030
+ }, 100)
1031
+
1032
+ setTimeout(function () {
1033
+ assert.ok(!$tooltip.data('bs.tooltip').$tip.is('.in'), '200ms: tooltip removed')
1034
+ done()
1035
+ }, 200)
1036
+
1037
+ }, 0)
1038
+
1039
+ $tooltip.trigger('mouseenter')
1040
+ })
1041
+
1042
+ QUnit.test('should correctly position tooltips on SVG elements', function (assert) {
1043
+ if (!window.SVGElement) {
1044
+ // Skip IE8 since it doesn't support SVG
1045
+ assert.expect(0)
1046
+ return
1047
+ }
1048
+ assert.expect(2)
1049
+
1050
+ var done = assert.async()
1051
+
1052
+ var styles = '<style>'
1053
+ + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
1054
+ + '.tooltip { position: absolute; }'
1055
+ + '.tooltip .tooltip-inner { width: 24px; height: 24px; font-family: Helvetica; }'
1056
+ + '</style>'
1057
+ var $styles = $(styles).appendTo('head')
1058
+
1059
+ $('#qunit-fixture').append(
1060
+ '<div style="position: fixed; top: 0; left: 0;">'
1061
+ + ' <svg width="200" height="200">'
1062
+ + ' <circle cx="100" cy="100" r="10" title="m" id="theCircle" />'
1063
+ + ' </svg>'
1064
+ + '</div>')
1065
+ var $circle = $('#theCircle')
1066
+
1067
+ $circle
1068
+ .on('shown.bs.tooltip', function () {
1069
+ var offset = $('.tooltip').offset()
1070
+ $styles.remove()
1071
+ assert.ok(Math.abs(offset.left - 88) <= 1, 'tooltip has correct horizontal location')
1072
+ $circle.bootstrapTooltip('hide')
1073
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
1074
+ done()
1075
+ })
1076
+ .bootstrapTooltip({ container: 'body', placement: 'top', trigger: 'manual' })
1077
+
1078
+ $circle.bootstrapTooltip('show')
1079
+ })
1080
+
1081
+ QUnit.test('should correctly determine auto placement based on container rather than parent', function (assert) {
1082
+ assert.expect(2)
1083
+ var done = assert.async()
1084
+
1085
+ var styles = '<style>'
1086
+ + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
1087
+ + '.tooltip { position: absolute; display: block; font-size: 12px; line-height: 1.4; }'
1088
+ + '.tooltip .tooltip-inner { max-width: 200px; padding: 3px 8px; font-family: Helvetica; text-align: center; }'
1089
+ + '#trigger-parent {'
1090
+ + ' position: fixed;'
1091
+ + ' top: 100px;'
1092
+ + ' right: 17px;'
1093
+ + '}'
1094
+ + '</style>'
1095
+ var $styles = $(styles).appendTo('head')
1096
+
1097
+ $('#qunit-fixture').append('<span id="trigger-parent"><a id="tt-trigger" title="If a_larger_text is written here, it won\'t fit using older broken version of BS">HOVER OVER ME</a></span>')
1098
+ var $trigger = $('#tt-trigger')
1099
+
1100
+ $trigger
1101
+ .on('shown.bs.tooltip', function () {
1102
+ var $tip = $('.tooltip-inner')
1103
+ var tipXrightEdge = $tip.offset().left + $tip.width()
1104
+ var triggerXleftEdge = $trigger.offset().left
1105
+ assert.ok(tipXrightEdge < triggerXleftEdge, 'tooltip with auto left placement, when near the right edge of the viewport, gets left placement')
1106
+ $trigger.bootstrapTooltip('hide')
1107
+ })
1108
+ .on('hidden.bs.tooltip', function () {
1109
+ $styles.remove()
1110
+ $(this).remove()
1111
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
1112
+ done()
1113
+ })
1114
+ .bootstrapTooltip({
1115
+ container: 'body',
1116
+ placement: 'auto left',
1117
+ trigger: 'manual'
1118
+ })
1119
+
1120
+ $trigger.bootstrapTooltip('show')
1121
+ })
1122
+
1123
+ QUnit.test('should not reload the tooltip on subsequent mouseenter events', function (assert) {
1124
+ assert.expect(1)
1125
+ var titleHtml = function () {
1126
+ var uid = $.fn.bootstrapTooltip.Constructor.prototype.getUID('tooltip')
1127
+ return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
1128
+ }
1129
+
1130
+ var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
1131
+ .appendTo('#qunit-fixture')
1132
+
1133
+ $tooltip.bootstrapTooltip({
1134
+ html: true,
1135
+ animation: false,
1136
+ trigger: 'hover',
1137
+ delay: { show: 0, hide: 500 },
1138
+ container: $tooltip,
1139
+ title: titleHtml
1140
+ })
1141
+
1142
+ $('#tt-outer').trigger('mouseenter')
1143
+
1144
+ var currentUid = $('#tt-content').text()
1145
+
1146
+ $('#tt-content').trigger('mouseenter')
1147
+ assert.strictEqual(currentUid, $('#tt-content').text())
1148
+ })
1149
+
1150
+ QUnit.test('should not reload the tooltip if the mouse leaves and re-enters before hiding', function (assert) {
1151
+ assert.expect(4)
1152
+ var titleHtml = function () {
1153
+ var uid = $.fn.bootstrapTooltip.Constructor.prototype.getUID('tooltip')
1154
+ return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
1155
+ }
1156
+
1157
+ var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
1158
+ .appendTo('#qunit-fixture')
1159
+
1160
+ $tooltip.bootstrapTooltip({
1161
+ html: true,
1162
+ animation: false,
1163
+ trigger: 'hover',
1164
+ delay: { show: 0, hide: 500 },
1165
+ container: $tooltip,
1166
+ title: titleHtml
1167
+ })
1168
+
1169
+ var obj = $tooltip.data('bs.tooltip')
1170
+
1171
+ $('#tt-outer').trigger('mouseenter')
1172
+
1173
+ var currentUid = $('#tt-content').text()
1174
+
1175
+ $('#tt-outer').trigger('mouseleave')
1176
+ assert.strictEqual(currentUid, $('#tt-content').text())
1177
+
1178
+ assert.ok(obj.hoverState == 'out', 'the tooltip hoverState should be set to "out"')
1179
+
1180
+ $('#tt-content').trigger('mouseenter')
1181
+ assert.ok(obj.hoverState == 'in', 'the tooltip hoverState should be set to "in"')
1182
+
1183
+ assert.strictEqual(currentUid, $('#tt-content').text())
1184
+ })
1185
+
1186
+ QUnit.test('should position arrow correctly when tooltip is moved to not appear offscreen', function (assert) {
1187
+ assert.expect(2)
1188
+ var done = assert.async()
1189
+
1190
+ var styles = '<style>'
1191
+ + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
1192
+ + '.tooltip { position: absolute; }'
1193
+ + '.tooltip-arrow { position: absolute; width: 0; height: 0; }'
1194
+ + '.tooltip .tooltip-inner { max-width: 200px; padding: 3px 8px; }'
1195
+ + '</style>'
1196
+ var $styles = $(styles).appendTo('head')
1197
+
1198
+ $('<a href="#" title="tooltip title" style="position: absolute; bottom: 0; right: 0;">Foobar</a>')
1199
+ .appendTo('body')
1200
+ .on('shown.bs.tooltip', function () {
1201
+ var arrowStyles = $(this).data('bs.tooltip').$tip.find('.tooltip-arrow').attr('style')
1202
+ assert.ok(/left/i.test(arrowStyles) && !/top/i.test(arrowStyles), 'arrow positioned correctly')
1203
+ $(this).bootstrapTooltip('hide')
1204
+ })
1205
+ .on('hidden.bs.tooltip', function () {
1206
+ $styles.remove()
1207
+ $(this).remove()
1208
+ assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
1209
+ done()
1210
+ })
1211
+ .bootstrapTooltip({
1212
+ container: 'body',
1213
+ placement: 'top',
1214
+ trigger: 'manual'
1215
+ })
1216
+ .bootstrapTooltip('show')
1217
+ })
1218
+
1219
+ QUnit.test('should correctly position tooltips on transformed elements', function (assert) {
1220
+ var styleProps = document.documentElement.style
1221
+ if (!('transform' in styleProps) && !('webkitTransform' in styleProps) && !('msTransform' in styleProps)) {
1222
+ assert.expect(0)
1223
+ return
1224
+ }
1225
+ assert.expect(2)
1226
+
1227
+ var done = assert.async()
1228
+
1229
+ var styles = '<style>'
1230
+ + '#qunit-fixture { top: 0; left: 0; }'
1231
+ + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
1232
+ + '.tooltip { position: absolute; }'
1233
+ + '.tooltip .tooltip-inner { width: 24px; height: 24px; font-family: Helvetica; }'
1234
+ + '#target { position: absolute; top: 100px; left: 50px; width: 100px; height: 200px; -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); }'
1235
+ + '</style>'
1236
+ var $styles = $(styles).appendTo('head')
1237
+
1238
+ var $element = $('<div id="target" title="1"/>').appendTo('#qunit-fixture')
1239
+
1240
+ $element
1241
+ .on('shown.bs.tooltip', function () {
1242
+ var offset = $('.tooltip').offset()
1243
+ $styles.remove()
1244
+ assert.ok(Math.abs(offset.left - 88) <= 1, 'tooltip has correct horizontal location')
1245
+ assert.ok(Math.abs(offset.top - 126) <= 1, 'tooltip has correct vertical location')
1246
+ $element.bootstrapTooltip('hide')
1247
+ done()
1248
+ })
1249
+ .bootstrapTooltip({
1250
+ container: 'body',
1251
+ placement: 'top',
1252
+ trigger: 'manual'
1253
+ })
1254
+
1255
+ $element.bootstrapTooltip('show')
1256
+ })
1257
+
1258
+ QUnit.test('should throw an error when initializing tooltip on the document object without specifying a delegation selector', function (assert) {
1259
+ assert.expect(1)
1260
+ assert.throws(function () {
1261
+ $(document).bootstrapTooltip({ title: 'What am I on?' })
1262
+ }, new Error('`selector` option must be specified when initializing tooltip on the window.document object!'))
1263
+ })
1264
+
1265
+ QUnit.test('should do nothing when an attempt is made to hide an uninitialized tooltip', function (assert) {
1266
+ assert.expect(1)
1267
+
1268
+ var $tooltip = $('<span data-toggle="tooltip" title="some tip">some text</span>')
1269
+ .appendTo('#qunit-fixture')
1270
+ .on('hidden.bs.tooltip shown.bs.tooltip', function () {
1271
+ assert.ok(false, 'should not fire any tooltip events')
1272
+ })
1273
+ .bootstrapTooltip('hide')
1274
+ assert.strictEqual($tooltip.data('bs.tooltip'), undefined, 'should not initialize the tooltip')
1275
+ })
1276
+
1277
+ QUnit.test('should throw an error when template contains multiple top-level elements', function (assert) {
1278
+ assert.expect(1)
1279
+ assert.throws(function () {
1280
+ $('<a href="#" data-toggle="tooltip" title="Another tooltip"></a>')
1281
+ .appendTo('#qunit-fixture')
1282
+ .bootstrapTooltip({ template: '<div>Foo</div><div>Bar</div>' })
1283
+ .bootstrapTooltip('show')
1284
+ }, new Error('tooltip `template` option must consist of exactly 1 top-level element!'))
1285
+ })
1286
+
1287
+ QUnit.test('should not remove tooltip if multiple triggers are set and one is still active', function (assert) {
1288
+ assert.expect(41)
1289
+ var $el = $('<button>Trigger</button>')
1290
+ .appendTo('#qunit-fixture')
1291
+ .bootstrapTooltip({ trigger: 'click hover focus', animation: false })
1292
+ var tooltip = $el.data('bs.tooltip')
1293
+ var $tooltip = tooltip.tip()
1294
+
1295
+ function showingTooltip() { return $tooltip.hasClass('in') || tooltip.hoverState == 'in' }
1296
+
1297
+ var tests = [
1298
+ ['mouseenter', 'mouseleave'],
1299
+
1300
+ ['focusin', 'focusout'],
1301
+
1302
+ ['click', 'click'],
1303
+
1304
+ ['mouseenter', 'focusin', 'focusout', 'mouseleave'],
1305
+ ['mouseenter', 'focusin', 'mouseleave', 'focusout'],
1306
+
1307
+ ['focusin', 'mouseenter', 'mouseleave', 'focusout'],
1308
+ ['focusin', 'mouseenter', 'focusout', 'mouseleave'],
1309
+
1310
+ ['click', 'focusin', 'mouseenter', 'focusout', 'mouseleave', 'click'],
1311
+ ['mouseenter', 'click', 'focusin', 'focusout', 'mouseleave', 'click'],
1312
+ ['mouseenter', 'focusin', 'click', 'click', 'mouseleave', 'focusout']
1313
+ ]
1314
+
1315
+ assert.ok(!showingTooltip())
1316
+
1317
+ $.each(tests, function (idx, triggers) {
1318
+ for (var i = 0, len = triggers.length; i < len; i++) {
1319
+ $el.trigger(triggers[i]);
1320
+ assert.equal(i < (len - 1), showingTooltip())
1321
+ }
1322
+ })
1323
+ })
1324
+
1325
+ })