iqvoc 4.12.1 → 4.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (977) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile +26 -42
  4. data/Gemfile.lock +372 -340
  5. data/README.md +3 -3
  6. data/{vendor → app}/assets/images/ajax-loader.gif +0 -0
  7. data/{vendor → app}/assets/images/treeview-default-line.gif +0 -0
  8. data/app/assets/javascripts/framework.js +5 -9
  9. data/app/assets/javascripts/iqvoc/autocomplete.js +2 -0
  10. data/app/assets/javascripts/iqvoc/concept_mapping_manager.js +141 -123
  11. data/app/assets/javascripts/iqvoc/create_note.js +52 -0
  12. data/app/assets/javascripts/iqvoc/debounce.js +21 -0
  13. data/app/assets/javascripts/iqvoc/{entityselect.js.erb → entityselect.js} +7 -5
  14. data/app/assets/javascripts/iqvoc/entityselect_qualified.js +51 -0
  15. data/app/assets/javascripts/iqvoc/federated_concept_mapper.js +126 -56
  16. data/app/assets/javascripts/iqvoc/iqvoc.js +16 -115
  17. data/app/assets/javascripts/iqvoc/label_resolver.js +35 -30
  18. data/app/assets/javascripts/iqvoc/langselect.js +2 -2
  19. data/app/assets/javascripts/iqvoc/manifest.js +11 -12
  20. data/app/assets/javascripts/iqvoc/treeview.js +227 -228
  21. data/app/assets/javascripts/manifest.js +2 -2
  22. data/app/assets/stylesheets/_framework.scss +3 -4
  23. data/app/assets/stylesheets/iqvoc/{settings/_bootstrap.scss → _bootstrap_overrides.scss} +54 -6
  24. data/app/assets/stylesheets/iqvoc/_manifest.scss +15 -17
  25. data/app/assets/stylesheets/iqvoc/components/_components.scss +31 -50
  26. data/app/assets/stylesheets/iqvoc/components/_entity_select.scss +0 -1
  27. data/app/assets/stylesheets/iqvoc/components/_label-list.scss +3 -3
  28. data/app/assets/stylesheets/iqvoc/components/_modals.scss +3 -5
  29. data/app/assets/stylesheets/iqvoc/components/_notes.scss +5 -0
  30. data/app/assets/stylesheets/iqvoc/components/_onebox.scss +18 -0
  31. data/app/assets/stylesheets/iqvoc/components/_sidebars.scss +6 -2
  32. data/app/assets/stylesheets/iqvoc/components/_simplete.scss +37 -0
  33. data/app/assets/stylesheets/iqvoc/components/{_treeview.scss.erb → _treeview.scss} +11 -3
  34. data/app/assets/stylesheets/iqvoc/components/typeahead.scss +4 -2
  35. data/app/assets/stylesheets/iqvoc/settings/_bootstrap-variables.scss +1 -853
  36. data/app/assets/stylesheets/iqvoc/settings/_fonts.scss +35 -35
  37. data/app/assets/stylesheets/iqvoc/settings/_manifest.scss +4 -0
  38. data/app/assets/stylesheets/iqvoc/{mixins → settings}/_mixins.scss +4 -0
  39. data/app/assets/stylesheets/{manifest.css.scss → manifest.scss} +1 -1
  40. data/app/controllers/collections_controller.rb +6 -3
  41. data/app/controllers/concepts/alphabetical_controller.rb +18 -16
  42. data/app/controllers/concepts/expired_controller.rb +9 -10
  43. data/app/controllers/concepts/hierarchical_controller.rb +1 -3
  44. data/app/controllers/concepts/scheme_controller.rb +4 -1
  45. data/app/controllers/concepts/untranslated_controller.rb +1 -1
  46. data/app/controllers/concepts/versions_controller.rb +1 -0
  47. data/app/controllers/concepts_controller.rb +4 -0
  48. data/app/controllers/concerns/controller_extensions.rb +37 -3
  49. data/app/controllers/errors_controller.rb +8 -0
  50. data/app/controllers/exports_controller.rb +1 -1
  51. data/app/controllers/frontpage_controller.rb +8 -1
  52. data/app/controllers/hierarchy_controller.rb +7 -1
  53. data/app/controllers/imports_controller.rb +1 -1
  54. data/app/controllers/rdf_controller.rb +3 -0
  55. data/app/controllers/search_results_controller.rb +7 -1
  56. data/app/controllers/user_sessions_controller.rb +5 -3
  57. data/app/controllers/users_controller.rb +2 -2
  58. data/app/helpers/application_helper.rb +1 -1
  59. data/app/helpers/concepts_helper.rb +2 -1
  60. data/app/helpers/dashboard_helper.rb +6 -2
  61. data/app/helpers/form_helper.rb +1 -1
  62. data/app/helpers/navigation_helper.rb +20 -9
  63. data/app/helpers/rdf_helper.rb +14 -0
  64. data/app/helpers/search_results_helper.rb +1 -1
  65. data/app/models/ability.rb +3 -0
  66. data/app/models/abstract_user.rb +19 -7
  67. data/app/models/application_record.rb +3 -0
  68. data/app/models/collection/base.rb +9 -9
  69. data/app/models/collection/member/base.rb +6 -3
  70. data/app/models/concept/base.rb +102 -32
  71. data/app/models/concept/relation/base.rb +3 -3
  72. data/app/models/concept/skos/base.rb +10 -0
  73. data/app/models/concerns/search_extension.rb +1 -1
  74. data/app/models/concerns/versioning.rb +11 -4
  75. data/app/models/configuration_setting.rb +1 -1
  76. data/app/models/dataset/iqvoc_dataset.rb +3 -2
  77. data/app/models/export.rb +2 -2
  78. data/app/models/import.rb +1 -1
  79. data/app/models/label/base.rb +26 -7
  80. data/app/models/labeling/base.rb +1 -1
  81. data/app/models/labeling/skos/alt_label.rb +4 -0
  82. data/app/models/labeling/skos/base.rb +1 -1
  83. data/app/models/labeling/skos/hidden_label.rb +2 -2
  84. data/app/models/match/base.rb +5 -3
  85. data/app/models/notation/base.rb +4 -1
  86. data/app/models/note/annotated/base.rb +1 -1
  87. data/app/models/note/base.rb +23 -5
  88. data/app/views/collections/_data.html.erb +16 -2
  89. data/app/views/collections/_form.html.erb +2 -2
  90. data/app/views/collections/_sidebar.html.erb +16 -8
  91. data/app/views/collections/show_published.html.erb +4 -4
  92. data/app/views/collections/show_unpublished.html.erb +6 -6
  93. data/app/views/concepts/_form.html.erb +2 -3
  94. data/app/views/concepts/alphabetical/_search_result.html.erb +10 -11
  95. data/app/views/concepts/alphabetical/index.html.erb +7 -2
  96. data/app/views/concepts/expired/index.html.erb +10 -5
  97. data/app/views/concepts/glance.html.erb +5 -4
  98. data/app/views/concepts/scheme/edit.html.erb +1 -1
  99. data/app/views/concepts/scheme/show.html.erb +2 -2
  100. data/app/views/concepts/scheme/show.iqrdf +1 -6
  101. data/app/views/concepts/show_published.html.erb +4 -4
  102. data/app/views/concepts/show_unpublished.html.erb +6 -6
  103. data/app/views/concepts/sidebars/_plural.html.erb +7 -2
  104. data/app/views/concepts/sidebars/_singular.html.erb +12 -7
  105. data/app/views/dashboard/_sidebar.html.erb +3 -0
  106. data/app/views/dashboard/_table.html.erb +20 -9
  107. data/app/views/dashboard/glance.html.erb +5 -4
  108. data/app/views/dashboard/index.html.erb +4 -1
  109. data/app/views/errors/access_denied.html.erb +17 -2
  110. data/app/views/errors/not_found.html.erb +17 -3
  111. data/app/views/errors/server_error.html.erb +38 -0
  112. data/app/views/frontpage/index.html.erb +28 -7
  113. data/app/views/instance_configuration/index.html.erb +4 -4
  114. data/app/views/kaminari/_first_page.html.erb +13 -0
  115. data/app/views/kaminari/_gap.html.erb +10 -0
  116. data/app/views/kaminari/_last_page.html.erb +13 -0
  117. data/app/views/kaminari/_next_page.html.erb +13 -0
  118. data/app/views/kaminari/_page.html.erb +18 -0
  119. data/app/views/kaminari/_paginator.html.erb +25 -0
  120. data/app/views/kaminari/_prev_page.html.erb +13 -0
  121. data/app/views/layouts/_controls.html.erb +30 -27
  122. data/app/views/layouts/_navigation.html.erb +15 -15
  123. data/app/views/layouts/_sections.html.erb +3 -1
  124. data/app/views/layouts/_user_navigation.html.erb +24 -34
  125. data/app/views/layouts/application.html.erb +41 -41
  126. data/app/views/pages/components.html.erb +5 -5
  127. data/app/views/pages/version.html.erb +12 -14
  128. data/app/views/partials/collection/_new_link_base.html.erb +5 -3
  129. data/app/views/partials/concept/_new_link_base.html.erb +5 -3
  130. data/app/views/partials/labeling/skos/_edit_base.html.erb +3 -1
  131. data/app/views/partials/match/_edit_base.html.erb +1 -1
  132. data/app/views/partials/notation/_edit_base.html.erb +1 -1
  133. data/app/views/partials/note/_edit_base.html.erb +19 -6
  134. data/app/views/partials/note/_note.html.erb +1 -1
  135. data/app/views/partials/note/_search_result.html.erb +1 -1
  136. data/app/views/partials/note/skos/_edit_change_note.html.erb +1 -0
  137. data/app/views/partials/note/skos/change_note/_search_result.html.erb +1 -1
  138. data/app/views/partials/note/skos/definition/_search_result.html.erb +1 -1
  139. data/app/views/search_results/_form.html.erb +4 -4
  140. data/app/views/search_results/_result_list.html.erb +15 -0
  141. data/app/views/search_results/_sidebar.html.erb +2 -0
  142. data/app/views/search_results/index.html.erb +1 -11
  143. data/app/views/search_results/index.iqrdf +2 -2
  144. data/app/views/search_results/sections/_change_note.html.erb +8 -8
  145. data/app/views/search_results/sections/_collection.html.erb +2 -2
  146. data/app/views/search_results/sections/_datasets.html.erb +9 -6
  147. data/app/views/search_results/sections/_klass.html.erb +2 -2
  148. data/app/views/search_results/sections/_languages.html.erb +11 -8
  149. data/app/views/search_results/sections/_mode.html.erb +2 -2
  150. data/app/views/search_results/sections/_note.html.erb +1 -1
  151. data/app/views/search_results/sections/_terms.html.erb +10 -11
  152. data/app/views/search_results/sections/_type.html.erb +14 -11
  153. data/app/views/triplestore_sync/index.html.erb +1 -1
  154. data/app/views/users/_form.html.erb +3 -1
  155. data/app/views/users/index.html.erb +8 -5
  156. data/config/application.rb +19 -32
  157. data/config/boot.rb +2 -17
  158. data/config/cable.yml +10 -0
  159. data/config/database.yml +12 -11
  160. data/config/database.yml.postgresql +14 -12
  161. data/config/engine.rb +4 -10
  162. data/config/environment.rb +4 -20
  163. data/config/environments/heroku.rb +0 -13
  164. data/config/initializers/apipie.rb +2 -0
  165. data/config/initializers/application_controller_renderer.rb +8 -0
  166. data/config/initializers/backtrace_silencers.rb +0 -16
  167. data/config/initializers/content_security_policy.rb +25 -0
  168. data/config/initializers/cookies_serializer.rb +2 -0
  169. data/config/initializers/delayed_job.rb +0 -1
  170. data/config/initializers/inflections.rb +0 -16
  171. data/config/initializers/iqvoc.rb +0 -2
  172. data/config/initializers/linked_data.rb +5 -0
  173. data/config/initializers/mime_types.rb +0 -16
  174. data/config/initializers/new_framework_defaults_5_1.rb +14 -0
  175. data/config/initializers/session_store.rb +0 -16
  176. data/config/initializers/sqlite3_booleans.rb +1 -0
  177. data/config/initializers/wrap_parameters.rb +2 -2
  178. data/config/locales/activerecord.de.yml +8 -7
  179. data/config/locales/activerecord.en.yml +2 -0
  180. data/config/locales/de.yml +25 -17
  181. data/config/locales/en.yml +15 -3
  182. data/config/puma.rb +37 -0
  183. data/config/routes.rb +3 -0
  184. data/config/secrets.yml +24 -0
  185. data/config/storage.yml +34 -0
  186. data/db/migrate/20100927101502_create_schema.rb +1 -1
  187. data/db/migrate/20101125141218_add_collection_tables.rb +1 -1
  188. data/db/migrate/20101129161528_add_type_to_collections.rb +1 -1
  189. data/db/migrate/20101202094602_add_origin_to_collections.rb +1 -1
  190. data/db/migrate/20101202135420_rename_collection_contents_to_collection_members.rb +1 -1
  191. data/db/migrate/20101208103531_add_type_to_collection_contents.rb +1 -1
  192. data/db/migrate/20101210153916_add_indexes_to_collections.rb +1 -1
  193. data/db/migrate/20110204121244_create_collection_labels.rb +1 -1
  194. data/db/migrate/20110208084250_change_origin_lengths.rb +1 -1
  195. data/db/migrate/20110328124300_discard_collection_specifics.rb +1 -1
  196. data/db/migrate/20110408120357_remove_classifications_and_classifiers.rb +1 -1
  197. data/db/migrate/20110408120740_remove_xl_specfic_stuff.rb +1 -1
  198. data/db/migrate/20110420133640_change_value_in_notes.rb +1 -1
  199. data/db/migrate/20110427120534_add_published_at_to_labels.rb +1 -1
  200. data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +1 -1
  201. data/db/migrate/20110512132624_extend_notes_value_field_length.rb +1 -1
  202. data/db/migrate/20110525103100_separate_note_annotation_predicates.rb +1 -1
  203. data/db/migrate/20110615134040_change_umt_note_annotations_to_dct.rb +1 -1
  204. data/db/migrate/20120119000000_create_configuration_settings.rb +1 -1
  205. data/db/migrate/20120201120736_add_top_term_to_concepts.rb +1 -1
  206. data/db/migrate/20120326102037_add_rank_to_concept_relations.rb +1 -1
  207. data/db/migrate/20130227145825_fix_collection_type.rb +1 -1
  208. data/db/migrate/20130315093255_add_notations.rb +1 -1
  209. data/db/migrate/20130315141952_add_indexes_to_notations.rb +1 -1
  210. data/db/migrate/20130418093837_add_language_to_note_annotations.rb +1 -1
  211. data/db/migrate/20130502151221_fix_collection_member_types.rb +1 -1
  212. data/db/migrate/20130508103137_adjust_note_languages_setting.rb +2 -2
  213. data/db/migrate/20131220134356_create_delayed_jobs.rb +1 -1
  214. data/db/migrate/20131220144601_create_imports.rb +1 -1
  215. data/db/migrate/20140423095147_create_exports.rb +1 -1
  216. data/db/migrate/20140425130615_add_fk_indexes_to_exports_and_imports.rb +1 -1
  217. data/db/migrate/20140505144919_add_import_file_to_imports.rb +1 -1
  218. data/db/migrate/20140506073428_add_missing_imports_attributes.rb +1 -1
  219. data/db/migrate/20140506133619_add_namespace_to_exports.rb +1 -1
  220. data/db/migrate/20140730132113_add_type_to_users.rb +1 -1
  221. data/db/migrate/20140807072457_create_job_relations.rb +1 -1
  222. data/db/migrate/20140807123413_add_response_error_to_job_relation.rb +1 -1
  223. data/db/migrate/20141204151558_add_foreign_key_constraints.rb +1 -1
  224. data/db/migrate/20150316103756_delayed_jobs_optimizations.rb +1 -1
  225. data/db/migrate/20150317162953_drop_job_relation.rb +1 -1
  226. data/db/migrate/20170608093748_extend_job_output_log.rb +1 -1
  227. data/db/migrate/20170626074649_add_note_annotations_index.rb +1 -1
  228. data/db/migrate/20180430163647_utf8mb4_conversion.rb +1 -1
  229. data/db/migrate/20180525135715_fix_note_annotations_index.rb +1 -1
  230. data/db/migrate/20190403133600_change_collation.rb +1 -1
  231. data/db/migrate/20200220134024_add_position_to_notes.rb +5 -0
  232. data/db/migrate/20200529053158_extend_users.rb +14 -0
  233. data/db/migrate/20200901143030_add_collection_type_index.rb +5 -0
  234. data/db/schema.rb +120 -123
  235. data/iqvoc.gemspec +15 -13
  236. data/lib/iqvoc/configuration/core.rb +1 -3
  237. data/lib/iqvoc/configuration/navigation.rb +6 -0
  238. data/lib/iqvoc/environments/development.rb +29 -47
  239. data/lib/iqvoc/environments/production.rb +37 -30
  240. data/lib/iqvoc/environments/test.rb +11 -9
  241. data/lib/iqvoc/version.rb +1 -1
  242. data/lib/tasks/cleanup.rake +37 -0
  243. data/lib/tasks/db.rake +32 -0
  244. data/public/assets/fonts/FiraMono-Regular-0b6138c5b386dc9125473fd851926f29.ttf +0 -0
  245. data/public/assets/fonts/FiraMono-Regular-690950e8d89c92cba41eeeb13f1de93e.woff +0 -0
  246. data/public/assets/fonts/FiraMono-Regular-98f97ed2dbf9d94d4fa5df048434b88d.eot +0 -0
  247. data/public/assets/fonts/FiraMono-Regular.eot +0 -0
  248. data/public/assets/fonts/FiraMono-Regular.ttf +0 -0
  249. data/public/assets/fonts/FiraMono-Regular.woff +0 -0
  250. data/public/assets/fonts/FiraSans-Bold-0de5f536bd0dc370449c0c67a49a6fe7.eot +0 -0
  251. data/public/assets/fonts/FiraSans-Bold-25037ef8d155e38b5df0c242a4c6cf2d.ttf +0 -0
  252. data/public/assets/fonts/FiraSans-Bold-494219a9639084eb9528ff47f79fcda1.woff +0 -0
  253. data/public/assets/fonts/FiraSans-Bold.eot +0 -0
  254. data/public/assets/fonts/FiraSans-Bold.ttf +0 -0
  255. data/public/assets/fonts/FiraSans-Bold.woff +0 -0
  256. data/public/assets/fonts/FiraSans-BoldItalic-5b3b812df9e1cb2b1f34baad65a2bdfb.ttf +0 -0
  257. data/public/assets/fonts/FiraSans-BoldItalic-90b8087c48feff2e828f658c49de5399.eot +0 -0
  258. data/public/assets/fonts/FiraSans-BoldItalic-b10e46158d50bf9b78968112acf87310.woff +0 -0
  259. data/public/assets/fonts/FiraSans-BoldItalic.eot +0 -0
  260. data/public/assets/fonts/FiraSans-BoldItalic.ttf +0 -0
  261. data/public/assets/fonts/FiraSans-BoldItalic.woff +0 -0
  262. data/public/assets/fonts/FiraSans-Book-659d252627051e785260ba445da8930f.woff +0 -0
  263. data/public/assets/fonts/FiraSans-Book-abc65ceb7bfaed729bff7a9d1367b7d4.eot +0 -0
  264. data/public/assets/fonts/FiraSans-Book-f0410501d5ecc5fe66bcdbc02b482c81.ttf +0 -0
  265. data/public/assets/fonts/FiraSans-Book.eot +0 -0
  266. data/public/assets/fonts/FiraSans-Book.ttf +0 -0
  267. data/public/assets/fonts/FiraSans-Book.woff +0 -0
  268. data/public/assets/fonts/FiraSans-ExtraLight-140f15ee97cb2099ff01c2b57dcd1a24.woff +0 -0
  269. data/public/assets/fonts/FiraSans-ExtraLight-28e5c2679df66406ebd117fbdded6753.eot +0 -0
  270. data/public/assets/fonts/FiraSans-ExtraLight-c15de70ebceffce178cbd2e82aa2c373.ttf +0 -0
  271. data/public/assets/fonts/FiraSans-ExtraLight.eot +0 -0
  272. data/public/assets/fonts/FiraSans-ExtraLight.ttf +0 -0
  273. data/public/assets/fonts/FiraSans-ExtraLight.woff +0 -0
  274. data/public/assets/fonts/FiraSans-Italic-ac4cb18fe14a7c90f29cdd2ce499ba59.woff +0 -0
  275. data/public/assets/fonts/FiraSans-Italic-bdea00fee0da5ca9176061e00c26a0da.eot +0 -0
  276. data/public/assets/fonts/FiraSans-Italic-e7e76a0ee170fd29b5d8100753eff569.ttf +0 -0
  277. data/public/assets/fonts/FiraSans-Italic.eot +0 -0
  278. data/public/assets/fonts/FiraSans-Italic.ttf +0 -0
  279. data/public/assets/fonts/FiraSans-Italic.woff +0 -0
  280. data/public/assets/fonts/FiraSans-Light-20adaf630b690c3e3184daaeae585f22.woff +0 -0
  281. data/public/assets/fonts/FiraSans-Light-3689e18b38d335ec0c43823adb6a2984.eot +0 -0
  282. data/public/assets/fonts/FiraSans-Light-55b04531e7a9ecdf58090d70b94b68e2.ttf +0 -0
  283. data/public/assets/fonts/FiraSans-Light-SC-098407a72b7ad46f7c2480d7ac11baf2.eot +0 -0
  284. data/public/assets/fonts/FiraSans-Light-SC-82763fe2ce9e6b897556c6f3c2aceb29.woff2 +0 -0
  285. data/public/assets/fonts/FiraSans-Light-SC-c73985985f0501c1845a5185b180fe6b.woff +0 -0
  286. data/public/assets/fonts/FiraSans-Light-SC-c9563f48d9cccd91f07e46801c27130f.ttf +0 -0
  287. data/public/assets/fonts/FiraSans-Light-SC.eot +0 -0
  288. data/public/assets/fonts/FiraSans-Light-SC.ttf +0 -0
  289. data/public/assets/fonts/FiraSans-Light-SC.woff +0 -0
  290. data/public/assets/fonts/FiraSans-Light-SC.woff2 +0 -0
  291. data/public/assets/fonts/FiraSans-Light.eot +0 -0
  292. data/public/assets/fonts/FiraSans-Light.ttf +0 -0
  293. data/public/assets/fonts/FiraSans-Light.woff +0 -0
  294. data/public/assets/fonts/FiraSans-Medium-082fab59048189168006bf2e914ba8b7.woff +0 -0
  295. data/public/assets/fonts/FiraSans-Medium-11706edfe8651c355b413bd24b4b5e10.eot +0 -0
  296. data/public/assets/fonts/FiraSans-Medium-3a0dacdeaba1b4c054f2d6cb5061965d.ttf +0 -0
  297. data/public/assets/fonts/FiraSans-Medium.eot +0 -0
  298. data/public/assets/fonts/FiraSans-Medium.ttf +0 -0
  299. data/public/assets/fonts/FiraSans-Medium.woff +0 -0
  300. data/public/assets/fonts/FiraSans-MediumItalic-6c8a2646d72641226527d574a8485b66.woff +0 -0
  301. data/public/assets/fonts/FiraSans-MediumItalic-b81e92794a6878b6c578d97b3ad5e6d7.ttf +0 -0
  302. data/public/assets/fonts/FiraSans-MediumItalic-eae7f4a3c4db9fe83025909ebfae5ad9.eot +0 -0
  303. data/public/assets/fonts/FiraSans-MediumItalic.eot +0 -0
  304. data/public/assets/fonts/FiraSans-MediumItalic.ttf +0 -0
  305. data/public/assets/fonts/FiraSans-MediumItalic.woff +0 -0
  306. data/public/assets/fonts/FiraSans-Regular-537188a19aeebdd74a92e114af7a02cb.ttf +0 -0
  307. data/public/assets/fonts/FiraSans-Regular-5d6a923de9be80ff5c2995cc03d93127.woff +0 -0
  308. data/public/assets/fonts/FiraSans-Regular-db689e5fea21ed4b7890811151968dc6.eot +0 -0
  309. data/public/assets/fonts/FiraSans-Regular.eot +0 -0
  310. data/public/assets/fonts/FiraSans-Regular.ttf +0 -0
  311. data/public/assets/fonts/FiraSans-Regular.woff +0 -0
  312. data/public/assets/fonts/FiraSans-UltraLight-3baefce4c224a0f0b26cdafe37dfa55d.eot +0 -0
  313. data/public/assets/fonts/FiraSans-UltraLight-e3909a352b87f853bb464836adfd602a.ttf +0 -0
  314. data/public/assets/fonts/FiraSans-UltraLight-f7289beeaa2353caf487553ee8b8ef03.woff +0 -0
  315. data/public/assets/fonts/FiraSans-UltraLight.eot +0 -0
  316. data/public/assets/fonts/FiraSans-UltraLight.ttf +0 -0
  317. data/public/assets/fonts/FiraSans-UltraLight.woff +0 -0
  318. data/public/assets/fonts/FontAwesome.otf +0 -0
  319. data/public/assets/fonts/fontawesome-webfont.eot +0 -0
  320. data/public/assets/fonts/fontawesome-webfont.svg +2671 -0
  321. data/public/assets/fonts/fontawesome-webfont.ttf +0 -0
  322. data/public/assets/fonts/fontawesome-webfont.woff +0 -0
  323. data/public/assets/fonts/fontawesome-webfont.woff2 +0 -0
  324. data/public/assets/images/ajax-loader-30d8e72bfdae694b1938658e1b087df0.gif +0 -0
  325. data/public/assets/images/ajax-loader.gif +0 -0
  326. data/public/assets/images/iqvoc_logo-165f17a46cf0a1bf9464db9d136fb843.svg +41 -0
  327. data/public/assets/images/iqvoc_logo.svg +41 -0
  328. data/public/assets/images/treeview-default-line-5e3c0e0c48f48c23c45aef7b72c739c0.gif +0 -0
  329. data/public/assets/images/treeview-default-line.gif +0 -0
  330. data/public/assets/javascripts/bootstrap.bundle.min-68b3c2f1c1f636f947fff1229d3ffbf5.js +7 -0
  331. data/public/assets/javascripts/bootstrap.bundle.min.js +42 -0
  332. data/public/assets/javascripts/jquery-17e41799d7fba03a313ca6b67d8a0954.js +26 -0
  333. data/public/assets/javascripts/jquery-d52dc3a9171f1fc89dd0f8e35e42c9d2.js +26 -0
  334. data/{vendor/assets/bower_components/jquery/dist → public/assets/javascripts}/jquery.js +5142 -3472
  335. data/public/assets/javascripts/manifest-7708201f7c24d5186cd075c3317f9b70.js +7311 -0
  336. data/public/assets/javascripts/manifest-89894d9f630fa57378a0c28e2a3d9ea9.js +7325 -0
  337. data/public/assets/javascripts/manifest.js +5660 -0
  338. data/public/assets/manifest.json +1 -0
  339. data/public/assets/stylesheets/manifest-893c7de3dee9ed1295bc1b5b4c1f0c34.css +13 -0
  340. data/public/assets/stylesheets/manifest-94b7be92a9b1cfeafea4ea71af910324.css +13 -0
  341. data/public/assets/stylesheets/manifest-e576edf92efaaad86b15b565fa473d0b.css +7 -0
  342. data/public/assets/stylesheets/manifest.css +14314 -0
  343. data/public/export/{192518761412858257538294365837284445543.nt → 12750.nt} +0 -0
  344. data/public/export/{222655544999381011796369687711131211507.nt → 17385303752427181100115432751692126521.nt} +0 -0
  345. data/public/export/{28094.nt → 181196830007276319343907883650755121680.nt} +0 -0
  346. data/public/export/{317743731342877661346578631544287380698.nt → 194669028845730209313058462140064732442.nt} +0 -0
  347. data/public/export/{59040722386799844495905115730928244680.nt → 21988.nt} +0 -0
  348. data/public/export/{65316.nt → 230655012044692637365356891394989635995.nt} +0 -0
  349. data/public/export/233590502327750705645106563554497694497.nt +28 -0
  350. data/public/export/245884359537367641918690456207690070316.nt +28 -0
  351. data/public/export/250386066048669747259363837063223215204.nt +28 -0
  352. data/public/export/256041066575224861739818511470898486442.nt +28 -0
  353. data/public/export/287138383024694264939471429022965897163.nt +28 -0
  354. data/public/export/31892.nt +28 -0
  355. data/public/export/333774437366008328346740356666975078086.nt +28 -0
  356. data/public/export/34639390376251419382098415225771775708.nt +28 -0
  357. data/public/export/4098.nt +28 -0
  358. data/public/export/47070.nt +28 -0
  359. data/public/export/49947.nt +28 -0
  360. data/public/export/5793.nt +28 -0
  361. data/public/export/64089124325772410079516909502763866955.nt +28 -0
  362. data/public/export/64718.nt +28 -0
  363. data/public/export/71200590939430584664474292378126383577.nt +28 -0
  364. data/public/export/81965533953024918329855744567916239964.nt +28 -0
  365. data/public/uploads/import/{0090c45f8a575ba948e9e1f9346e8bd8.nt → 213b73161661ebbad4e5ee3f543ae617.nt} +0 -0
  366. data/public/uploads/import/{10b55d476cc7905edd5bf2ea3339266f.nt → 22ad4d7419b7914c7319c46a66839f77.nt} +0 -0
  367. data/public/uploads/import/{29f4bdb935b9ba14344c38808e2fc172.nt → 22b78e01b9b5876851578cf9a8373c07.nt} +0 -0
  368. data/public/uploads/import/{5686fe12a4157c537fe4f83de393e436.nt → 2ab75781f8141010699dd272f681b245.nt} +0 -0
  369. data/public/uploads/import/{a46e5777d14959f0a264fc27170a9aca.nt → 4c7fe47a2c21a681fd8f0eb3af0ebf19.nt} +0 -0
  370. data/public/uploads/import/{f47c4c34a7652d03188ef8815667a546.nt → 5265d7cb194f017c592a68914ecf8d9f.nt} +0 -0
  371. data/public/uploads/{tmp/1565090696-8977-0904/hobbies.nt → import/5cb5414a66e4ae5dbe05eb763c367bd1.nt} +0 -0
  372. data/public/uploads/{tmp/1565092660-26284-7315/hobbies.nt → import/6b042e00c2e2abf9241d2ece3e67ed27.nt} +0 -0
  373. data/public/uploads/{tmp/1565092837-26720-3638/hobbies.nt → import/749edd3918db157202b00f89418b87d1.nt} +0 -0
  374. data/public/uploads/{tmp/1565093111-27724-9556/hobbies.nt → import/7aeb9d76b78ba67674caa53a96e1caa0.nt} +0 -0
  375. data/public/uploads/{tmp/1565093198-28993-6950/hobbies.nt → import/7b7fc425b8926e586ca10d0f1385aa4e.nt} +0 -0
  376. data/public/uploads/{tmp/1565093353-29520-6028/hobbies.nt → import/8319d34702375718b20e72a6af71c503.nt} +0 -0
  377. data/public/uploads/import/9ec48f5aaece8d2a8770439e34199b19.nt +259 -0
  378. data/public/uploads/import/a22750632c35587057285920142c2db8.nt +259 -0
  379. data/public/uploads/import/a6d9eeb5e76ce0032614c8142a33c90b.nt +259 -0
  380. data/public/uploads/import/a7ec826e32e80d1fc61f5e89f7442199.nt +259 -0
  381. data/public/uploads/import/af2ac8cb84a194da9871ea701f915a25.nt +259 -0
  382. data/public/uploads/import/b50c67ef8cb51fa12812ac2601faaa75.nt +259 -0
  383. data/public/uploads/import/b66560ac9cc4aecd50f82d4fcec8bde4.nt +259 -0
  384. data/public/uploads/import/c1a12245a41d9105585fb48a0b5244ab.nt +259 -0
  385. data/public/uploads/import/c4b23750b9f72a7f93bcd979a9afded3.nt +259 -0
  386. data/public/uploads/import/d1edac76626a35a6e72a592c98e97b1a.nt +259 -0
  387. data/public/uploads/import/eca92dbeff4aec30e3072103bb5f565f.nt +259 -0
  388. data/public/uploads/import/f7996f8826062cd8dcfc8fac70e830b9.nt +259 -0
  389. data/public/uploads/tmp/1609926599-187261935008931-0002-5418/hobbies.nt +259 -0
  390. data/public/uploads/tmp/1610450700-516890595554445-0002-2685/hobbies.nt +259 -0
  391. data/public/uploads/tmp/1610450844-597126333235543-0001-0714/hobbies.nt +259 -0
  392. data/public/uploads/tmp/1611054155-443031323634581-0001-9192/hobbies.nt +259 -0
  393. data/public/uploads/tmp/1611225485-767301590714814-0002-6904/hobbies.nt +259 -0
  394. data/public/uploads/tmp/1611225661-919900076415463-0002-0657/hobbies.nt +259 -0
  395. data/public/uploads/tmp/1611227389-36557097935032-0002-4613/hobbies.nt +259 -0
  396. data/public/uploads/tmp/1611585376-822293462114758-0001-9752/hobbies.nt +259 -0
  397. data/public/uploads/tmp/1611585431-703460698560673-0002-7522/hobbies.nt +259 -0
  398. data/public/uploads/tmp/1611586554-483369300394995-0002-0872/hobbies.nt +259 -0
  399. data/public/uploads/tmp/1619777137-609890333749067-0002-0264/hobbies.nt +259 -0
  400. data/public/uploads/tmp/1627291050-163284787457980-0001-2701/hobbies.nt +259 -0
  401. data/public/uploads/tmp/1627291589-952446089963663-0002-3171/hobbies.nt +259 -0
  402. data/public/uploads/tmp/1627291819-788250283200541-0002-2503/hobbies.nt +259 -0
  403. data/public/uploads/tmp/1627292534-103362378955855-0001-7089/hobbies.nt +259 -0
  404. data/public/uploads/tmp/1627293799-506613299368066-0002-1247/hobbies.nt +259 -0
  405. data/public/uploads/tmp/1627293863-868842521367397-0001-4656/hobbies.nt +259 -0
  406. data/public/uploads/tmp/1636993960-338364327912413-0002-8049/hobbies.nt +259 -0
  407. data/public/uploads/tmp/1641550181-434480636271400-0002-7928/hobbies.nt +259 -0
  408. data/public/uploads/tmp/1641550416-6444469569098-0002-2156/hobbies.nt +259 -0
  409. data/public/uploads/tmp/1641550691-848542458162760-0002-6815/hobbies.nt +259 -0
  410. data/public/uploads/tmp/1641550716-647719127292471-0002-9954/hobbies.nt +259 -0
  411. data/public/uploads/tmp/1641551058-78248622355227-0002-3663/hobbies.nt +259 -0
  412. data/public/uploads/tmp/1641551220-744894908610606-0001-3879/hobbies.nt +259 -0
  413. data/test/controllers/concepts_movement_controller_test.rb +41 -36
  414. data/test/controllers/hierarchy_test.rb +38 -43
  415. data/test/controllers/rdf_rendering_test.rb +2 -4
  416. data/test/controllers/reverse_match_test.rb +49 -39
  417. data/test/integration/authentication_test.rb +1 -1
  418. data/test/integration/browse_concepts_and_labels_test.rb +3 -1
  419. data/test/integration/client_edit_concept_test.rb +1 -1
  420. data/test/integration/export_test.rb +2 -2
  421. data/test/integration/import_test.rb +2 -2
  422. data/test/integration/instance_configuration_browsing_test.rb +2 -2
  423. data/test/integration/navigation_test.rb +30 -3
  424. data/test/integration/note_annotations_test.rb +1 -1
  425. data/test/integration/search_test.rb +2 -2
  426. data/test/integration_test_helper.rb +1 -0
  427. data/test/models/hygiene_test.rb +1 -1
  428. data/test/test_helper.rb +0 -5
  429. metadata +305 -645
  430. data/app/assets/javascripts/iqvoc/concept_mapper.js +0 -73
  431. data/app/assets/javascripts/iqvoc/entityselect_qualified.js.erb +0 -45
  432. data/app/assets/javascripts/iqvoc/moving_sidebar.js +0 -37
  433. data/app/assets/javascripts/iqvoc/onebox.js.erb +0 -62
  434. data/app/assets/javascripts/iqvoc/quicksearch.js +0 -59
  435. data/app/assets/stylesheets/iqvoc/ie_fixes.css.scss +0 -6
  436. data/app/models/concerns/deep_cloning.rb +0 -94
  437. data/config/initializers/assets.rb +0 -5
  438. data/config/initializers/mysql_column_limit.rb +0 -14
  439. data/config/travis/database.yml.mysql +0 -9
  440. data/config/travis/database.yml.postgresql +0 -7
  441. data/config/travis/database.yml.sqlite +0 -5
  442. data/public/404.html +0 -58
  443. data/public/500.html +0 -57
  444. data/vendor/assets/bower_components/URIjs/LICENSE.txt +0 -21
  445. data/vendor/assets/bower_components/URIjs/README.md +0 -496
  446. data/vendor/assets/bower_components/URIjs/bower.json +0 -29
  447. data/vendor/assets/bower_components/URIjs/contributing.md +0 -19
  448. data/vendor/assets/bower_components/URIjs/src/IPv6.js +0 -188
  449. data/vendor/assets/bower_components/URIjs/src/SecondLevelDomains.js +0 -241
  450. data/vendor/assets/bower_components/URIjs/src/URI.fragmentQuery.js +0 -104
  451. data/vendor/assets/bower_components/URIjs/src/URI.fragmentURI.js +0 -97
  452. data/vendor/assets/bower_components/URIjs/src/URI.js +0 -2002
  453. data/vendor/assets/bower_components/URIjs/src/URI.min.js +0 -84
  454. data/vendor/assets/bower_components/URIjs/src/URITemplate.js +0 -499
  455. data/vendor/assets/bower_components/URIjs/src/jquery.URI.js +0 -235
  456. data/vendor/assets/bower_components/URIjs/src/jquery.URI.min.js +0 -7
  457. data/vendor/assets/bower_components/URIjs/src/punycode.js +0 -508
  458. data/vendor/assets/bower_components/bootstrap-sass/CHANGELOG.md +0 -189
  459. data/vendor/assets/bower_components/bootstrap-sass/CONTRIBUTING.md +0 -86
  460. data/vendor/assets/bower_components/bootstrap-sass/LICENSE +0 -21
  461. data/vendor/assets/bower_components/bootstrap-sass/README.md +0 -352
  462. data/vendor/assets/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  463. data/vendor/assets/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -288
  464. data/vendor/assets/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  465. data/vendor/assets/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  466. data/vendor/assets/bower_components/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  467. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/affix.js +0 -162
  468. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/alert.js +0 -94
  469. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/button.js +0 -116
  470. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/carousel.js +0 -237
  471. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/collapse.js +0 -211
  472. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/dropdown.js +0 -161
  473. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/modal.js +0 -339
  474. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/popover.js +0 -108
  475. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/scrollspy.js +0 -172
  476. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/tab.js +0 -153
  477. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js +0 -476
  478. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap/transition.js +0 -59
  479. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap-sprockets.js +0 -12
  480. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap.js +0 -2317
  481. data/vendor/assets/bower_components/bootstrap-sass/assets/javascripts/bootstrap.min.js +0 -7
  482. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap-compass.scss +0 -9
  483. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap-mincer.scss +0 -19
  484. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap-sprockets.scss +0 -9
  485. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss +0 -50
  486. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss +0 -73
  487. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss +0 -68
  488. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss +0 -26
  489. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss +0 -243
  490. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss +0 -160
  491. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss +0 -269
  492. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss +0 -36
  493. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss +0 -69
  494. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss +0 -37
  495. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss +0 -214
  496. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss +0 -578
  497. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_glyphicons.scss +0 -305
  498. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss +0 -84
  499. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss +0 -166
  500. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss +0 -50
  501. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss +0 -66
  502. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss +0 -124
  503. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss +0 -61
  504. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_mixins.scss +0 -39
  505. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss +0 -150
  506. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss +0 -662
  507. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss +0 -242
  508. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss +0 -427
  509. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss +0 -54
  510. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss +0 -88
  511. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss +0 -265
  512. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss +0 -135
  513. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss +0 -107
  514. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss +0 -87
  515. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss +0 -35
  516. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss +0 -177
  517. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss +0 -162
  518. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss +0 -234
  519. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_theme.scss +0 -273
  520. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss +0 -38
  521. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss +0 -102
  522. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss +0 -298
  523. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss +0 -55
  524. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss +0 -866
  525. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss +0 -29
  526. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss +0 -14
  527. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -11
  528. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss +0 -18
  529. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss +0 -52
  530. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss +0 -7
  531. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss +0 -22
  532. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss +0 -88
  533. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss +0 -58
  534. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -81
  535. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss +0 -122
  536. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss +0 -21
  537. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss +0 -33
  538. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss +0 -12
  539. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss +0 -31
  540. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  541. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  542. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss +0 -8
  543. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss +0 -23
  544. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss +0 -24
  545. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +0 -10
  546. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +0 -8
  547. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_resize.scss +0 -6
  548. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +0 -21
  549. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_size.scss +0 -10
  550. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +0 -9
  551. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -28
  552. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -11
  553. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +0 -8
  554. data/vendor/assets/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +0 -222
  555. data/vendor/assets/bower_components/bootstrap-sass/bower.json +0 -40
  556. data/vendor/assets/bower_components/bootstrap-sass/composer.json +0 -35
  557. data/vendor/assets/bower_components/bootstrap-sass/package.json +0 -30
  558. data/vendor/assets/bower_components/bootstrap-sass/sache.json +0 -5
  559. data/vendor/assets/bower_components/html5shiv/Gruntfile.js +0 -61
  560. data/vendor/assets/bower_components/html5shiv/bower.json +0 -15
  561. data/vendor/assets/bower_components/html5shiv/dist/html5shiv-printshiv.js +0 -520
  562. data/vendor/assets/bower_components/html5shiv/dist/html5shiv-printshiv.min.js +0 -4
  563. data/vendor/assets/bower_components/html5shiv/dist/html5shiv.js +0 -322
  564. data/vendor/assets/bower_components/html5shiv/dist/html5shiv.min.js +0 -4
  565. data/vendor/assets/bower_components/html5shiv/package.json +0 -16
  566. data/vendor/assets/bower_components/html5shiv/readme.md +0 -152
  567. data/vendor/assets/bower_components/jqtree/LICENSE +0 -202
  568. data/vendor/assets/bower_components/jqtree/README.md +0 -24
  569. data/vendor/assets/bower_components/jqtree/_config.yml +0 -18
  570. data/vendor/assets/bower_components/jqtree/_entries/01_general.md +0 -7
  571. data/vendor/assets/bower_components/jqtree/_entries/02_introduction.md +0 -9
  572. data/vendor/assets/bower_components/jqtree/_entries/03_features.md +0 -15
  573. data/vendor/assets/bower_components/jqtree/_entries/04_demo.html +0 -34
  574. data/vendor/assets/bower_components/jqtree/_entries/05_requirements.md +0 -6
  575. data/vendor/assets/bower_components/jqtree/_entries/06_downloads.md +0 -9
  576. data/vendor/assets/bower_components/jqtree/_entries/07_tutorial.md +0 -77
  577. data/vendor/assets/bower_components/jqtree/_entries/08_examples.md +0 -8
  578. data/vendor/assets/bower_components/jqtree/_entries/09_changelog.md +0 -179
  579. data/vendor/assets/bower_components/jqtree/_entries/10_options.md +0 -6
  580. data/vendor/assets/bower_components/jqtree/_entries/11_autoescape.md +0 -6
  581. data/vendor/assets/bower_components/jqtree/_entries/12_autoopen.md +0 -28
  582. data/vendor/assets/bower_components/jqtree/_entries/13_closedicon.md +0 -12
  583. data/vendor/assets/bower_components/jqtree/_entries/14_data.md +0 -41
  584. data/vendor/assets/bower_components/jqtree/_entries/15_datafilter.md +0 -17
  585. data/vendor/assets/bower_components/jqtree/_entries/16_data-url.md +0 -21
  586. data/vendor/assets/bower_components/jqtree/_entries/17_draganddrop.md +0 -18
  587. data/vendor/assets/bower_components/jqtree/_entries/18_keyboardsupport.md +0 -14
  588. data/vendor/assets/bower_components/jqtree/_entries/19_oncanmove.md +0 -22
  589. data/vendor/assets/bower_components/jqtree/_entries/20_oncanmoveto.md +0 -22
  590. data/vendor/assets/bower_components/jqtree/_entries/21_oncanselectnode.md +0 -26
  591. data/vendor/assets/bower_components/jqtree/_entries/22_oncreateli.md +0 -16
  592. data/vendor/assets/bower_components/jqtree/_entries/23_onismovehandle.md +0 -17
  593. data/vendor/assets/bower_components/jqtree/_entries/24_onloadfailed.md +0 -15
  594. data/vendor/assets/bower_components/jqtree/_entries/25_openedicon.md +0 -12
  595. data/vendor/assets/bower_components/jqtree/_entries/26_openfolderdelay.md +0 -13
  596. data/vendor/assets/bower_components/jqtree/_entries/27_savestate.md +0 -42
  597. data/vendor/assets/bower_components/jqtree/_entries/28_selectable.md +0 -18
  598. data/vendor/assets/bower_components/jqtree/_entries/29_slide.md +0 -12
  599. data/vendor/assets/bower_components/jqtree/_entries/30_usecontextmenu.md +0 -14
  600. data/vendor/assets/bower_components/jqtree/_entries/31_functions.md +0 -6
  601. data/vendor/assets/bower_components/jqtree/_entries/32_addnodeafter.md +0 -20
  602. data/vendor/assets/bower_components/jqtree/_entries/33_addnodebefore.md +0 -8
  603. data/vendor/assets/bower_components/jqtree/_entries/34_appendnode.md +0 -33
  604. data/vendor/assets/bower_components/jqtree/_entries/35_closenode.md +0 -23
  605. data/vendor/assets/bower_components/jqtree/_entries/36_getnodebyid.md +0 -21
  606. data/vendor/assets/bower_components/jqtree/_entries/37_getselectednode.md +0 -10
  607. data/vendor/assets/bower_components/jqtree/_entries/38_getstate.md +0 -19
  608. data/vendor/assets/bower_components/jqtree/_entries/39_gettree.md +0 -8
  609. data/vendor/assets/bower_components/jqtree/_entries/40_loaddata.md +0 -46
  610. data/vendor/assets/bower_components/jqtree/_entries/41_loaddatafromurl.md +0 -55
  611. data/vendor/assets/bower_components/jqtree/_entries/42_movedown.md +0 -8
  612. data/vendor/assets/bower_components/jqtree/_entries/43_movenode.md +0 -15
  613. data/vendor/assets/bower_components/jqtree/_entries/44_moveup.md +0 -8
  614. data/vendor/assets/bower_components/jqtree/_entries/45_opennode.md +0 -29
  615. data/vendor/assets/bower_components/jqtree/_entries/46_addparentnode.md +0 -20
  616. data/vendor/assets/bower_components/jqtree/_entries/47_reload.md +0 -12
  617. data/vendor/assets/bower_components/jqtree/_entries/48_removenode.md +0 -12
  618. data/vendor/assets/bower_components/jqtree/_entries/49_selectnode.md +0 -24
  619. data/vendor/assets/bower_components/jqtree/_entries/50_scrolltonode.md +0 -13
  620. data/vendor/assets/bower_components/jqtree/_entries/51_setoption.md +0 -12
  621. data/vendor/assets/bower_components/jqtree/_entries/52_setstate.md +0 -8
  622. data/vendor/assets/bower_components/jqtree/_entries/53_toggle.md +0 -8
  623. data/vendor/assets/bower_components/jqtree/_entries/54_tojson.md +0 -13
  624. data/vendor/assets/bower_components/jqtree/_entries/55_updatenode.md +0 -33
  625. data/vendor/assets/bower_components/jqtree/_entries/56_events.md +0 -6
  626. data/vendor/assets/bower_components/jqtree/_entries/57_tree-click.md +0 -37
  627. data/vendor/assets/bower_components/jqtree/_entries/58_tree-close.md +0 -15
  628. data/vendor/assets/bower_components/jqtree/_entries/59_tree-contextmenu.md +0 -21
  629. data/vendor/assets/bower_components/jqtree/_entries/60_tree-dblclick.md +0 -19
  630. data/vendor/assets/bower_components/jqtree/_entries/61_tree-init.md +0 -15
  631. data/vendor/assets/bower_components/jqtree/_entries/62_tree-move.md +0 -71
  632. data/vendor/assets/bower_components/jqtree/_entries/63_tree-open.md +0 -15
  633. data/vendor/assets/bower_components/jqtree/_entries/64_tree-select.md +0 -28
  634. data/vendor/assets/bower_components/jqtree/_entries/65_multiple-selection.md +0 -9
  635. data/vendor/assets/bower_components/jqtree/_entries/66_add-to-selection.md +0 -11
  636. data/vendor/assets/bower_components/jqtree/_entries/67_get-selected-nodes.md +0 -10
  637. data/vendor/assets/bower_components/jqtree/_entries/68_is-node-selected.md +0 -11
  638. data/vendor/assets/bower_components/jqtree/_entries/69_remove-from-selection.md +0 -11
  639. data/vendor/assets/bower_components/jqtree/_entries/70_node-functions.md +0 -13
  640. data/vendor/assets/bower_components/jqtree/_entries/71_children.md +0 -12
  641. data/vendor/assets/bower_components/jqtree/_entries/72_getdata.md +0 -10
  642. data/vendor/assets/bower_components/jqtree/_entries/73_getlevel.md +0 -13
  643. data/vendor/assets/bower_components/jqtree/_entries/74_getnextnode.md +0 -12
  644. data/vendor/assets/bower_components/jqtree/_entries/75_getnextsibling.md +0 -10
  645. data/vendor/assets/bower_components/jqtree/_entries/76_getpreviousnode.md +0 -12
  646. data/vendor/assets/bower_components/jqtree/_entries/77_getprevioussibling.md +0 -10
  647. data/vendor/assets/bower_components/jqtree/_entries/78_parent.md +0 -10
  648. data/vendor/assets/bower_components/jqtree/_examples/01_load_json_data.html +0 -47
  649. data/vendor/assets/bower_components/jqtree/_examples/02_load_json_data_from_server.html +0 -31
  650. data/vendor/assets/bower_components/jqtree/_examples/03_drag_and_drop.html +0 -45
  651. data/vendor/assets/bower_components/jqtree/_examples/04_save_state.html +0 -52
  652. data/vendor/assets/bower_components/jqtree/_examples/05_load_on_demand.html +0 -70
  653. data/vendor/assets/bower_components/jqtree/_examples/06_autoescape.html +0 -47
  654. data/vendor/assets/bower_components/jqtree/_examples/07_autoscroll.html +0 -23
  655. data/vendor/assets/bower_components/jqtree/_examples/08_multiple_select.html +0 -72
  656. data/vendor/assets/bower_components/jqtree/_examples/09_custom_html.html +0 -68
  657. data/vendor/assets/bower_components/jqtree/_examples/10_icon_buttons.html +0 -27
  658. data/vendor/assets/bower_components/jqtree/_layouts/base.html +0 -48
  659. data/vendor/assets/bower_components/jqtree/_layouts/frontpage.html +0 -20
  660. data/vendor/assets/bower_components/jqtree/_layouts/page.html +0 -7
  661. data/vendor/assets/bower_components/jqtree/bower.json +0 -12
  662. data/vendor/assets/bower_components/jqtree/gulpfile.coffee +0 -30
  663. data/vendor/assets/bower_components/jqtree/gulpfile.js +0 -2
  664. data/vendor/assets/bower_components/jqtree/index.html +0 -48
  665. data/vendor/assets/bower_components/jqtree/jqtree-circle.png +0 -0
  666. data/vendor/assets/bower_components/jqtree/jqtree.css +0 -143
  667. data/vendor/assets/bower_components/jqtree/jqtree.jquery.json +0 -23
  668. data/vendor/assets/bower_components/jqtree/package.json +0 -23
  669. data/vendor/assets/bower_components/jqtree/phantomjs/runner.js +0 -193
  670. data/vendor/assets/bower_components/jqtree/phantomjs/server.js +0 -14
  671. data/vendor/assets/bower_components/jqtree/screenshot.png +0 -0
  672. data/vendor/assets/bower_components/jqtree/sitemap.txt +0 -11
  673. data/vendor/assets/bower_components/jqtree/src/drag_and_drop_handler.coffee +0 -466
  674. data/vendor/assets/bower_components/jqtree/src/elements_renderer.coffee +0 -198
  675. data/vendor/assets/bower_components/jqtree/src/key_handler.coffee +0 -92
  676. data/vendor/assets/bower_components/jqtree/src/mouse.widget.coffee +0 -181
  677. data/vendor/assets/bower_components/jqtree/src/node.coffee +0 -431
  678. data/vendor/assets/bower_components/jqtree/src/node_element.coffee +0 -144
  679. data/vendor/assets/bower_components/jqtree/src/save_state_handler.coffee +0 -191
  680. data/vendor/assets/bower_components/jqtree/src/scroll_handler.coffee +0 -100
  681. data/vendor/assets/bower_components/jqtree/src/select_node_handler.coffee +0 -76
  682. data/vendor/assets/bower_components/jqtree/src/simple.widget.coffee +0 -102
  683. data/vendor/assets/bower_components/jqtree/src/test.js +0 -1945
  684. data/vendor/assets/bower_components/jqtree/src/tree.jquery.coffee +0 -772
  685. data/vendor/assets/bower_components/jqtree/src/util.coffee +0 -117
  686. data/vendor/assets/bower_components/jqtree/src/version.coffee +0 -1
  687. data/vendor/assets/bower_components/jqtree/static/bower.json +0 -13
  688. data/vendor/assets/bower_components/jqtree/static/bower_components/blanket/dist/qunit/blanket.js +0 -5430
  689. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +0 -5
  690. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/css/bootstrap.min.css +0 -5
  691. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  692. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +0 -229
  693. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  694. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  695. data/vendor/assets/bower_components/jqtree/static/bower_components/bootstrap/dist/js/bootstrap.min.js +0 -7
  696. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/css/font-awesome.min.css +0 -4
  697. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/fonts/FontAwesome.otf +0 -0
  698. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/fonts/fontawesome-webfont.eot +0 -0
  699. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/fonts/fontawesome-webfont.svg +0 -520
  700. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/fonts/fontawesome-webfont.ttf +0 -0
  701. data/vendor/assets/bower_components/jqtree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff +0 -0
  702. data/vendor/assets/bower_components/jqtree/static/bower_components/jquery/dist/jquery.min.js +0 -5
  703. data/vendor/assets/bower_components/jqtree/static/bower_components/jquery-cookie/jquery.cookie.js +0 -117
  704. data/vendor/assets/bower_components/jqtree/static/bower_components/jquery-mockjax/jquery.mockjax.js +0 -692
  705. data/vendor/assets/bower_components/jqtree/static/bower_components/pygments/css/monokai.css +0 -63
  706. data/vendor/assets/bower_components/jqtree/static/bower_components/qunit/qunit/qunit.css +0 -264
  707. data/vendor/assets/bower_components/jqtree/static/bower_components/qunit/qunit/qunit.js +0 -2819
  708. data/vendor/assets/bower_components/jqtree/static/documentation.css +0 -165
  709. data/vendor/assets/bower_components/jqtree/static/documentation.js +0 -51
  710. data/vendor/assets/bower_components/jqtree/static/example.css +0 -53
  711. data/vendor/assets/bower_components/jqtree/static/example_data.js +0 -128
  712. data/vendor/assets/bower_components/jqtree/static/examples/autoescape.js +0 -19
  713. data/vendor/assets/bower_components/jqtree/static/examples/autoscroll.js +0 -8
  714. data/vendor/assets/bower_components/jqtree/static/examples/custom_html.js +0 -32
  715. data/vendor/assets/bower_components/jqtree/static/examples/drag_and_drop.js +0 -15
  716. data/vendor/assets/bower_components/jqtree/static/examples/icon_buttons.js +0 -14
  717. data/vendor/assets/bower_components/jqtree/static/examples/load_json_data.js +0 -21
  718. data/vendor/assets/bower_components/jqtree/static/examples/load_json_data_from_server.js +0 -11
  719. data/vendor/assets/bower_components/jqtree/static/examples/load_on_demand.js +0 -20
  720. data/vendor/assets/bower_components/jqtree/static/examples/multiple_select.js +0 -27
  721. data/vendor/assets/bower_components/jqtree/static/examples/save_state.js +0 -13
  722. data/vendor/assets/bower_components/jqtree/static/jquery-1.11.2.min.js +0 -4
  723. data/vendor/assets/bower_components/jqtree/static/spinner.gif +0 -0
  724. data/vendor/assets/bower_components/jqtree/test/test.html +0 -23
  725. data/vendor/assets/bower_components/jqtree/test/test.js +0 -2604
  726. data/vendor/assets/bower_components/jqtree/tree.jquery.js +0 -3388
  727. data/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +0 -21
  728. data/vendor/assets/bower_components/jquery/bower.json +0 -27
  729. data/vendor/assets/bower_components/jquery/dist/jquery.min.js +0 -5
  730. data/vendor/assets/bower_components/jquery/dist/jquery.min.map +0 -1
  731. data/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +0 -89
  732. data/vendor/assets/bower_components/jquery/src/ajax/load.js +0 -75
  733. data/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +0 -13
  734. data/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +0 -28
  735. data/vendor/assets/bower_components/jquery/src/ajax/script.js +0 -64
  736. data/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +0 -5
  737. data/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +0 -3
  738. data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +0 -136
  739. data/vendor/assets/bower_components/jquery/src/ajax.js +0 -786
  740. data/vendor/assets/bower_components/jquery/src/attributes/attr.js +0 -141
  741. data/vendor/assets/bower_components/jquery/src/attributes/classes.js +0 -158
  742. data/vendor/assets/bower_components/jquery/src/attributes/prop.js +0 -94
  743. data/vendor/assets/bower_components/jquery/src/attributes/support.js +0 -35
  744. data/vendor/assets/bower_components/jquery/src/attributes/val.js +0 -161
  745. data/vendor/assets/bower_components/jquery/src/attributes.js +0 -11
  746. data/vendor/assets/bower_components/jquery/src/callbacks.js +0 -205
  747. data/vendor/assets/bower_components/jquery/src/core/access.js +0 -60
  748. data/vendor/assets/bower_components/jquery/src/core/init.js +0 -123
  749. data/vendor/assets/bower_components/jquery/src/core/parseHTML.js +0 -39
  750. data/vendor/assets/bower_components/jquery/src/core/ready.js +0 -97
  751. data/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +0 -4
  752. data/vendor/assets/bower_components/jquery/src/core.js +0 -497
  753. data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +0 -22
  754. data/vendor/assets/bower_components/jquery/src/css/curCSS.js +0 -57
  755. data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +0 -70
  756. data/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +0 -15
  757. data/vendor/assets/bower_components/jquery/src/css/support.js +0 -96
  758. data/vendor/assets/bower_components/jquery/src/css/swap.js +0 -28
  759. data/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +0 -3
  760. data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +0 -12
  761. data/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +0 -13
  762. data/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +0 -3
  763. data/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +0 -5
  764. data/vendor/assets/bower_components/jquery/src/css.js +0 -450
  765. data/vendor/assets/bower_components/jquery/src/data/Data.js +0 -181
  766. data/vendor/assets/bower_components/jquery/src/data/accepts.js +0 -20
  767. data/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +0 -5
  768. data/vendor/assets/bower_components/jquery/src/data/var/data_user.js +0 -5
  769. data/vendor/assets/bower_components/jquery/src/data.js +0 -178
  770. data/vendor/assets/bower_components/jquery/src/deferred.js +0 -149
  771. data/vendor/assets/bower_components/jquery/src/deprecated.js +0 -13
  772. data/vendor/assets/bower_components/jquery/src/dimensions.js +0 -50
  773. data/vendor/assets/bower_components/jquery/src/effects/Tween.js +0 -114
  774. data/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +0 -13
  775. data/vendor/assets/bower_components/jquery/src/effects.js +0 -648
  776. data/vendor/assets/bower_components/jquery/src/event/ajax.js +0 -13
  777. data/vendor/assets/bower_components/jquery/src/event/alias.js +0 -39
  778. data/vendor/assets/bower_components/jquery/src/event/support.js +0 -9
  779. data/vendor/assets/bower_components/jquery/src/event.js +0 -868
  780. data/vendor/assets/bower_components/jquery/src/exports/amd.js +0 -24
  781. data/vendor/assets/bower_components/jquery/src/exports/global.js +0 -32
  782. data/vendor/assets/bower_components/jquery/src/intro.js +0 -44
  783. data/vendor/assets/bower_components/jquery/src/jquery.js +0 -37
  784. data/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +0 -18
  785. data/vendor/assets/bower_components/jquery/src/manipulation/support.js +0 -32
  786. data/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +0 -3
  787. data/vendor/assets/bower_components/jquery/src/manipulation.js +0 -580
  788. data/vendor/assets/bower_components/jquery/src/offset.js +0 -207
  789. data/vendor/assets/bower_components/jquery/src/outro.js +0 -1
  790. data/vendor/assets/bower_components/jquery/src/queue/delay.js +0 -22
  791. data/vendor/assets/bower_components/jquery/src/queue.js +0 -142
  792. data/vendor/assets/bower_components/jquery/src/selector-native.js +0 -172
  793. data/vendor/assets/bower_components/jquery/src/selector-sizzle.js +0 -14
  794. data/vendor/assets/bower_components/jquery/src/selector.js +0 -1
  795. data/vendor/assets/bower_components/jquery/src/serialize.js +0 -111
  796. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +0 -2067
  797. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +0 -3
  798. data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +0 -1
  799. data/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +0 -100
  800. data/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +0 -6
  801. data/vendor/assets/bower_components/jquery/src/traversing.js +0 -199
  802. data/vendor/assets/bower_components/jquery/src/var/arr.js +0 -3
  803. data/vendor/assets/bower_components/jquery/src/var/class2type.js +0 -4
  804. data/vendor/assets/bower_components/jquery/src/var/concat.js +0 -5
  805. data/vendor/assets/bower_components/jquery/src/var/hasOwn.js +0 -5
  806. data/vendor/assets/bower_components/jquery/src/var/indexOf.js +0 -5
  807. data/vendor/assets/bower_components/jquery/src/var/pnum.js +0 -3
  808. data/vendor/assets/bower_components/jquery/src/var/push.js +0 -5
  809. data/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +0 -3
  810. data/vendor/assets/bower_components/jquery/src/var/slice.js +0 -5
  811. data/vendor/assets/bower_components/jquery/src/var/strundefined.js +0 -3
  812. data/vendor/assets/bower_components/jquery/src/var/support.js +0 -4
  813. data/vendor/assets/bower_components/jquery/src/var/toString.js +0 -5
  814. data/vendor/assets/bower_components/jquery/src/wrap.js +0 -79
  815. data/vendor/assets/bower_components/jquery-ujs/CHANGELOG.md +0 -24
  816. data/vendor/assets/bower_components/jquery-ujs/MIT-LICENSE.txt +0 -20
  817. data/vendor/assets/bower_components/jquery-ujs/README.md +0 -72
  818. data/vendor/assets/bower_components/jquery-ujs/bower.json +0 -20
  819. data/vendor/assets/bower_components/jquery-ujs/src/rails.js +0 -469
  820. data/vendor/assets/bower_components/typeahead.js/CHANGELOG.md +0 -222
  821. data/vendor/assets/bower_components/typeahead.js/CONTRIBUTING.md +0 -120
  822. data/vendor/assets/bower_components/typeahead.js/Gruntfile.js +0 -265
  823. data/vendor/assets/bower_components/typeahead.js/LICENSE +0 -19
  824. data/vendor/assets/bower_components/typeahead.js/README.md +0 -188
  825. data/vendor/assets/bower_components/typeahead.js/bower.json +0 -13
  826. data/vendor/assets/bower_components/typeahead.js/composer.json +0 -17
  827. data/vendor/assets/bower_components/typeahead.js/dist/bloodhound.js +0 -727
  828. data/vendor/assets/bower_components/typeahead.js/dist/bloodhound.min.js +0 -7
  829. data/vendor/assets/bower_components/typeahead.js/dist/typeahead.bundle.js +0 -1782
  830. data/vendor/assets/bower_components/typeahead.js/dist/typeahead.bundle.min.js +0 -7
  831. data/vendor/assets/bower_components/typeahead.js/dist/typeahead.jquery.js +0 -1184
  832. data/vendor/assets/bower_components/typeahead.js/dist/typeahead.jquery.min.js +0 -7
  833. data/vendor/assets/bower_components/typeahead.js/doc/bloodhound.md +0 -279
  834. data/vendor/assets/bower_components/typeahead.js/doc/jquery_typeahead.md +0 -383
  835. data/vendor/assets/bower_components/typeahead.js/doc/migration/0.10.0.md +0 -234
  836. data/vendor/assets/bower_components/typeahead.js/karma.conf.js +0 -98
  837. data/vendor/assets/bower_components/typeahead.js/package.json +0 -57
  838. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/bloodhound.js +0 -234
  839. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/lru_cache.js +0 -99
  840. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/options_parser.js +0 -89
  841. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/persistent_storage.js +0 -131
  842. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/search_index.js +0 -169
  843. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/tokenizers.js +0 -44
  844. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/transport.js +0 -152
  845. data/vendor/assets/bower_components/typeahead.js/src/bloodhound/version.js +0 -7
  846. data/vendor/assets/bower_components/typeahead.js/src/common/utils.js +0 -152
  847. data/vendor/assets/bower_components/typeahead.js/src/typeahead/css.js +0 -77
  848. data/vendor/assets/bower_components/typeahead.js/src/typeahead/dataset.js +0 -210
  849. data/vendor/assets/bower_components/typeahead.js/src/typeahead/dropdown.js +0 -245
  850. data/vendor/assets/bower_components/typeahead.js/src/typeahead/event_bus.js +0 -38
  851. data/vendor/assets/bower_components/typeahead.js/src/typeahead/event_emitter.js +0 -119
  852. data/vendor/assets/bower_components/typeahead.js/src/typeahead/highlight.js +0 -84
  853. data/vendor/assets/bower_components/typeahead.js/src/typeahead/html.js +0 -15
  854. data/vendor/assets/bower_components/typeahead.js/src/typeahead/input.js +0 -311
  855. data/vendor/assets/bower_components/typeahead.js/src/typeahead/plugin.js +0 -129
  856. data/vendor/assets/bower_components/typeahead.js/src/typeahead/typeahead.js +0 -391
  857. data/vendor/assets/bower_components/typeahead.js/test/bloodhound_spec.js +0 -592
  858. data/vendor/assets/bower_components/typeahead.js/test/ci +0 -12
  859. data/vendor/assets/bower_components/typeahead.js/test/dataset_view_spec.js +0 -222
  860. data/vendor/assets/bower_components/typeahead.js/test/dropdown_view_spec.js +0 -353
  861. data/vendor/assets/bower_components/typeahead.js/test/event_emitter_spec.js +0 -111
  862. data/vendor/assets/bower_components/typeahead.js/test/fixtures/ajax_responses.js +0 -19
  863. data/vendor/assets/bower_components/typeahead.js/test/fixtures/data.js +0 -116
  864. data/vendor/assets/bower_components/typeahead.js/test/fixtures/html.js +0 -17
  865. data/vendor/assets/bower_components/typeahead.js/test/helpers/typeahead_mocks.js +0 -71
  866. data/vendor/assets/bower_components/typeahead.js/test/highlight_spec.js +0 -117
  867. data/vendor/assets/bower_components/typeahead.js/test/input_view_spec.js +0 -449
  868. data/vendor/assets/bower_components/typeahead.js/test/integration/test.html +0 -112
  869. data/vendor/assets/bower_components/typeahead.js/test/integration/test.js +0 -397
  870. data/vendor/assets/bower_components/typeahead.js/test/lru_cache_spec.js +0 -42
  871. data/vendor/assets/bower_components/typeahead.js/test/persistent_storage_spec.js +0 -131
  872. data/vendor/assets/bower_components/typeahead.js/test/playground.html +0 -347
  873. data/vendor/assets/bower_components/typeahead.js/test/search_index_spec.js +0 -60
  874. data/vendor/assets/bower_components/typeahead.js/test/tokenizers_spec.js +0 -60
  875. data/vendor/assets/bower_components/typeahead.js/test/transport_spec.js +0 -197
  876. data/vendor/assets/bower_components/typeahead.js/test/typeahead_view_spec.js +0 -570
  877. data/vendor/assets/bower_components/typeahead.js/typeahead.js.jquery.json +0 -40
  878. data/vendor/assets/images/animated-overlay.gif +0 -0
  879. data/vendor/assets/images/file.gif +0 -0
  880. data/vendor/assets/images/folder-closed.gif +0 -0
  881. data/vendor/assets/images/folder.gif +0 -0
  882. data/vendor/assets/images/minus.gif +0 -0
  883. data/vendor/assets/images/plus.gif +0 -0
  884. data/vendor/assets/images/treeview-black-line.gif +0 -0
  885. data/vendor/assets/images/treeview-black.gif +0 -0
  886. data/vendor/assets/images/treeview-default.gif +0 -0
  887. data/vendor/assets/images/treeview-famfamfam-line.gif +0 -0
  888. data/vendor/assets/images/treeview-famfamfam.gif +0 -0
  889. data/vendor/assets/images/treeview-gray-line.gif +0 -0
  890. data/vendor/assets/images/treeview-gray.gif +0 -0
  891. data/vendor/assets/images/treeview-red-line.gif +0 -0
  892. data/vendor/assets/images/treeview-red.gif +0 -0
  893. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.css +0 -471
  894. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.css.map +0 -1
  895. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.min.css +0 -9
  896. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.min.css.map +0 -1
  897. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.standalone.css +0 -504
  898. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.standalone.css.map +0 -1
  899. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.standalone.min.css +0 -9
  900. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker.standalone.min.css.map +0 -1
  901. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.css +0 -678
  902. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.css.map +0 -1
  903. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.min.css +0 -9
  904. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.min.css.map +0 -1
  905. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.standalone.css +0 -707
  906. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.standalone.css.map +0 -1
  907. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.standalone.min.css +0 -9
  908. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/css/bootstrap-datepicker3.standalone.min.css.map +0 -1
  909. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/js/bootstrap-datepicker.js +0 -2096
  910. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/js/bootstrap-datepicker.min.js +0 -9
  911. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ar.min.js +0 -1
  912. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.az.min.js +0 -1
  913. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.bg.min.js +0 -1
  914. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.bs.min.js +0 -1
  915. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ca.min.js +0 -1
  916. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.cs.min.js +0 -1
  917. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.cy.min.js +0 -1
  918. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.da.min.js +0 -1
  919. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.de.min.js +0 -1
  920. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.el.min.js +0 -1
  921. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.en-AU.min.js +0 -1
  922. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.en-GB.min.js +0 -1
  923. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.eo.min.js +0 -1
  924. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.es.min.js +0 -1
  925. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.et.min.js +0 -1
  926. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.eu.min.js +0 -1
  927. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.fa.min.js +0 -1
  928. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.fi.min.js +0 -1
  929. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.fo.min.js +0 -1
  930. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.fr-CH.min.js +0 -1
  931. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.fr.min.js +0 -1
  932. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.gl.min.js +0 -1
  933. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.he.min.js +0 -1
  934. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.hr.min.js +0 -1
  935. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.hu.min.js +0 -1
  936. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.hy.min.js +0 -1
  937. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.id.min.js +0 -1
  938. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.is.min.js +0 -1
  939. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.it-CH.min.js +0 -1
  940. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.it.min.js +0 -1
  941. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ja.min.js +0 -1
  942. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ka.min.js +0 -1
  943. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.kh.min.js +0 -1
  944. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.kk.min.js +0 -1
  945. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ko.min.js +0 -1
  946. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.kr.min.js +0 -1
  947. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.lt.min.js +0 -1
  948. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.lv.min.js +0 -1
  949. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.me.min.js +0 -1
  950. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.mk.min.js +0 -1
  951. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.mn.min.js +0 -1
  952. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ms.min.js +0 -1
  953. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.nb.min.js +0 -1
  954. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.nl-BE.min.js +0 -1
  955. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.nl.min.js +0 -1
  956. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.no.min.js +0 -1
  957. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.pl.min.js +0 -1
  958. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.pt-BR.min.js +0 -1
  959. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.pt.min.js +0 -1
  960. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ro.min.js +0 -1
  961. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.rs-latin.min.js +0 -1
  962. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.rs.min.js +0 -1
  963. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.ru.min.js +0 -1
  964. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sk.min.js +0 -1
  965. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sl.min.js +0 -1
  966. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sq.min.js +0 -1
  967. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sr-latin.min.js +0 -1
  968. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sr.min.js +0 -1
  969. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sv.min.js +0 -1
  970. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.sw.min.js +0 -1
  971. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.th.min.js +0 -1
  972. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.tr.min.js +0 -1
  973. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.uk.min.js +0 -1
  974. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.vi.min.js +0 -1
  975. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.zh-CN.min.js +0 -1
  976. data/vendor/assets/javascripts/bootstrap-datepicker-1.6.4-dist/locales/bootstrap-datepicker.zh-TW.min.js +0 -1
  977. data/vendor/assets/javascripts/storage.js +0 -122
@@ -1,2096 +0,0 @@
1
- /*!
2
- * Datepicker for Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker)
3
- *
4
- * Copyright 2012 Stefan Petre
5
- * Improvements by Andrew Rowls
6
- * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
7
- */(function(factory){
8
- if (typeof define === "function" && define.amd) {
9
- define(["jquery"], factory);
10
- } else if (typeof exports === 'object') {
11
- factory(require('jquery'));
12
- } else {
13
- factory(jQuery);
14
- }
15
- }(function($, undefined){
16
-
17
- function UTCDate(){
18
- return new Date(Date.UTC.apply(Date, arguments));
19
- }
20
- function UTCToday(){
21
- var today = new Date();
22
- return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
23
- }
24
- function isUTCEquals(date1, date2) {
25
- return (
26
- date1.getUTCFullYear() === date2.getUTCFullYear() &&
27
- date1.getUTCMonth() === date2.getUTCMonth() &&
28
- date1.getUTCDate() === date2.getUTCDate()
29
- );
30
- }
31
- function alias(method){
32
- return function(){
33
- return this[method].apply(this, arguments);
34
- };
35
- }
36
- function isValidDate(d) {
37
- return d && !isNaN(d.getTime());
38
- }
39
-
40
- var DateArray = (function(){
41
- var extras = {
42
- get: function(i){
43
- return this.slice(i)[0];
44
- },
45
- contains: function(d){
46
- // Array.indexOf is not cross-browser;
47
- // $.inArray doesn't work with Dates
48
- var val = d && d.valueOf();
49
- for (var i=0, l=this.length; i < l; i++)
50
- if (this[i].valueOf() === val)
51
- return i;
52
- return -1;
53
- },
54
- remove: function(i){
55
- this.splice(i,1);
56
- },
57
- replace: function(new_array){
58
- if (!new_array)
59
- return;
60
- if (!$.isArray(new_array))
61
- new_array = [new_array];
62
- this.clear();
63
- this.push.apply(this, new_array);
64
- },
65
- clear: function(){
66
- this.length = 0;
67
- },
68
- copy: function(){
69
- var a = new DateArray();
70
- a.replace(this);
71
- return a;
72
- }
73
- };
74
-
75
- return function(){
76
- var a = [];
77
- a.push.apply(a, arguments);
78
- $.extend(a, extras);
79
- return a;
80
- };
81
- })();
82
-
83
-
84
- // Picker object
85
-
86
- var Datepicker = function(element, options){
87
- $(element).data('datepicker', this);
88
- this._process_options(options);
89
-
90
- this.dates = new DateArray();
91
- this.viewDate = this.o.defaultViewDate;
92
- this.focusDate = null;
93
-
94
- this.element = $(element);
95
- this.isInput = this.element.is('input');
96
- this.inputField = this.isInput ? this.element : this.element.find('input');
97
- this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
98
- this.hasInput = this.component && this.inputField.length;
99
- if (this.component && this.component.length === 0)
100
- this.component = false;
101
- this.isInline = !this.component && this.element.is('div');
102
-
103
- this.picker = $(DPGlobal.template);
104
-
105
- // Checking templates and inserting
106
- if (this._check_template(this.o.templates.leftArrow)) {
107
- this.picker.find('.prev').html(this.o.templates.leftArrow);
108
- }
109
- if (this._check_template(this.o.templates.rightArrow)) {
110
- this.picker.find('.next').html(this.o.templates.rightArrow);
111
- }
112
-
113
- this._buildEvents();
114
- this._attachEvents();
115
-
116
- if (this.isInline){
117
- this.picker.addClass('datepicker-inline').appendTo(this.element);
118
- }
119
- else {
120
- this.picker.addClass('datepicker-dropdown dropdown-menu');
121
- }
122
-
123
- if (this.o.rtl){
124
- this.picker.addClass('datepicker-rtl');
125
- }
126
-
127
- this.viewMode = this.o.startView;
128
-
129
- if (this.o.calendarWeeks)
130
- this.picker.find('thead .datepicker-title, tfoot .today, tfoot .clear')
131
- .attr('colspan', function(i, val){
132
- return parseInt(val) + 1;
133
- });
134
-
135
- this._allow_update = false;
136
-
137
- this.setStartDate(this._o.startDate);
138
- this.setEndDate(this._o.endDate);
139
- this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
140
- this.setDaysOfWeekHighlighted(this.o.daysOfWeekHighlighted);
141
- this.setDatesDisabled(this.o.datesDisabled);
142
-
143
- this.fillDow();
144
- this.fillMonths();
145
-
146
- this._allow_update = true;
147
-
148
- this.update();
149
- this.showMode();
150
-
151
- if (this.isInline){
152
- this.show();
153
- }
154
- };
155
-
156
- Datepicker.prototype = {
157
- constructor: Datepicker,
158
-
159
- _resolveViewName: function(view, default_value){
160
- if (view === 0 || view === 'days' || view === 'month') {
161
- return 0;
162
- }
163
- if (view === 1 || view === 'months' || view === 'year') {
164
- return 1;
165
- }
166
- if (view === 2 || view === 'years' || view === 'decade') {
167
- return 2;
168
- }
169
- if (view === 3 || view === 'decades' || view === 'century') {
170
- return 3;
171
- }
172
- if (view === 4 || view === 'centuries' || view === 'millennium') {
173
- return 4;
174
- }
175
- return default_value === undefined ? false : default_value;
176
- },
177
-
178
- _check_template: function(tmp){
179
- try {
180
- // If empty
181
- if (tmp === undefined || tmp === "") {
182
- return false;
183
- }
184
- // If no html, everything ok
185
- if ((tmp.match(/[<>]/g) || []).length <= 0) {
186
- return true;
187
- }
188
- // Checking if html is fine
189
- var jDom = $(tmp);
190
- return jDom.length > 0;
191
- }
192
- catch (ex) {
193
- return false;
194
- }
195
- },
196
-
197
- _process_options: function(opts){
198
- // Store raw options for reference
199
- this._o = $.extend({}, this._o, opts);
200
- // Processed options
201
- var o = this.o = $.extend({}, this._o);
202
-
203
- // Check if "de-DE" style date is available, if not language should
204
- // fallback to 2 letter code eg "de"
205
- var lang = o.language;
206
- if (!dates[lang]){
207
- lang = lang.split('-')[0];
208
- if (!dates[lang])
209
- lang = defaults.language;
210
- }
211
- o.language = lang;
212
-
213
- // Retrieve view index from any aliases
214
- o.startView = this._resolveViewName(o.startView, 0);
215
- o.minViewMode = this._resolveViewName(o.minViewMode, 0);
216
- o.maxViewMode = this._resolveViewName(o.maxViewMode, 4);
217
-
218
- // Check that the start view is between min and max
219
- o.startView = Math.min(o.startView, o.maxViewMode);
220
- o.startView = Math.max(o.startView, o.minViewMode);
221
-
222
- // true, false, or Number > 0
223
- if (o.multidate !== true){
224
- o.multidate = Number(o.multidate) || false;
225
- if (o.multidate !== false)
226
- o.multidate = Math.max(0, o.multidate);
227
- }
228
- o.multidateSeparator = String(o.multidateSeparator);
229
-
230
- o.weekStart %= 7;
231
- o.weekEnd = (o.weekStart + 6) % 7;
232
-
233
- var format = DPGlobal.parseFormat(o.format);
234
- if (o.startDate !== -Infinity){
235
- if (!!o.startDate){
236
- if (o.startDate instanceof Date)
237
- o.startDate = this._local_to_utc(this._zero_time(o.startDate));
238
- else
239
- o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);
240
- }
241
- else {
242
- o.startDate = -Infinity;
243
- }
244
- }
245
- if (o.endDate !== Infinity){
246
- if (!!o.endDate){
247
- if (o.endDate instanceof Date)
248
- o.endDate = this._local_to_utc(this._zero_time(o.endDate));
249
- else
250
- o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);
251
- }
252
- else {
253
- o.endDate = Infinity;
254
- }
255
- }
256
-
257
- o.daysOfWeekDisabled = o.daysOfWeekDisabled||[];
258
- if (!$.isArray(o.daysOfWeekDisabled))
259
- o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/);
260
- o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){
261
- return parseInt(d, 10);
262
- });
263
-
264
- o.daysOfWeekHighlighted = o.daysOfWeekHighlighted||[];
265
- if (!$.isArray(o.daysOfWeekHighlighted))
266
- o.daysOfWeekHighlighted = o.daysOfWeekHighlighted.split(/[,\s]*/);
267
- o.daysOfWeekHighlighted = $.map(o.daysOfWeekHighlighted, function(d){
268
- return parseInt(d, 10);
269
- });
270
-
271
- o.datesDisabled = o.datesDisabled||[];
272
- if (!$.isArray(o.datesDisabled)) {
273
- o.datesDisabled = [
274
- o.datesDisabled
275
- ];
276
- }
277
- o.datesDisabled = $.map(o.datesDisabled,function(d){
278
- return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);
279
- });
280
-
281
- var plc = String(o.orientation).toLowerCase().split(/\s+/g),
282
- _plc = o.orientation.toLowerCase();
283
- plc = $.grep(plc, function(word){
284
- return /^auto|left|right|top|bottom$/.test(word);
285
- });
286
- o.orientation = {x: 'auto', y: 'auto'};
287
- if (!_plc || _plc === 'auto')
288
- ; // no action
289
- else if (plc.length === 1){
290
- switch (plc[0]){
291
- case 'top':
292
- case 'bottom':
293
- o.orientation.y = plc[0];
294
- break;
295
- case 'left':
296
- case 'right':
297
- o.orientation.x = plc[0];
298
- break;
299
- }
300
- }
301
- else {
302
- _plc = $.grep(plc, function(word){
303
- return /^left|right$/.test(word);
304
- });
305
- o.orientation.x = _plc[0] || 'auto';
306
-
307
- _plc = $.grep(plc, function(word){
308
- return /^top|bottom$/.test(word);
309
- });
310
- o.orientation.y = _plc[0] || 'auto';
311
- }
312
- if (o.defaultViewDate) {
313
- var year = o.defaultViewDate.year || new Date().getFullYear();
314
- var month = o.defaultViewDate.month || 0;
315
- var day = o.defaultViewDate.day || 1;
316
- o.defaultViewDate = UTCDate(year, month, day);
317
- } else {
318
- o.defaultViewDate = UTCToday();
319
- }
320
- },
321
- _events: [],
322
- _secondaryEvents: [],
323
- _applyEvents: function(evs){
324
- for (var i=0, el, ch, ev; i < evs.length; i++){
325
- el = evs[i][0];
326
- if (evs[i].length === 2){
327
- ch = undefined;
328
- ev = evs[i][1];
329
- }
330
- else if (evs[i].length === 3){
331
- ch = evs[i][1];
332
- ev = evs[i][2];
333
- }
334
- el.on(ev, ch);
335
- }
336
- },
337
- _unapplyEvents: function(evs){
338
- for (var i=0, el, ev, ch; i < evs.length; i++){
339
- el = evs[i][0];
340
- if (evs[i].length === 2){
341
- ch = undefined;
342
- ev = evs[i][1];
343
- }
344
- else if (evs[i].length === 3){
345
- ch = evs[i][1];
346
- ev = evs[i][2];
347
- }
348
- el.off(ev, ch);
349
- }
350
- },
351
- _buildEvents: function(){
352
- var events = {
353
- keyup: $.proxy(function(e){
354
- if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)
355
- this.update();
356
- }, this),
357
- keydown: $.proxy(this.keydown, this),
358
- paste: $.proxy(this.paste, this)
359
- };
360
-
361
- if (this.o.showOnFocus === true) {
362
- events.focus = $.proxy(this.show, this);
363
- }
364
-
365
- if (this.isInput) { // single input
366
- this._events = [
367
- [this.element, events]
368
- ];
369
- }
370
- else if (this.component && this.hasInput) { // component: input + button
371
- this._events = [
372
- // For components that are not readonly, allow keyboard nav
373
- [this.inputField, events],
374
- [this.component, {
375
- click: $.proxy(this.show, this)
376
- }]
377
- ];
378
- }
379
- else {
380
- this._events = [
381
- [this.element, {
382
- click: $.proxy(this.show, this),
383
- keydown: $.proxy(this.keydown, this)
384
- }]
385
- ];
386
- }
387
- this._events.push(
388
- // Component: listen for blur on element descendants
389
- [this.element, '*', {
390
- blur: $.proxy(function(e){
391
- this._focused_from = e.target;
392
- }, this)
393
- }],
394
- // Input: listen for blur on element
395
- [this.element, {
396
- blur: $.proxy(function(e){
397
- this._focused_from = e.target;
398
- }, this)
399
- }]
400
- );
401
-
402
- if (this.o.immediateUpdates) {
403
- // Trigger input updates immediately on changed year/month
404
- this._events.push([this.element, {
405
- 'changeYear changeMonth': $.proxy(function(e){
406
- this.update(e.date);
407
- }, this)
408
- }]);
409
- }
410
-
411
- this._secondaryEvents = [
412
- [this.picker, {
413
- click: $.proxy(this.click, this)
414
- }],
415
- [$(window), {
416
- resize: $.proxy(this.place, this)
417
- }],
418
- [$(document), {
419
- mousedown: $.proxy(function(e){
420
- // Clicked outside the datepicker, hide it
421
- if (!(
422
- this.element.is(e.target) ||
423
- this.element.find(e.target).length ||
424
- this.picker.is(e.target) ||
425
- this.picker.find(e.target).length ||
426
- this.isInline
427
- )){
428
- this.hide();
429
- }
430
- }, this)
431
- }]
432
- ];
433
- },
434
- _attachEvents: function(){
435
- this._detachEvents();
436
- this._applyEvents(this._events);
437
- },
438
- _detachEvents: function(){
439
- this._unapplyEvents(this._events);
440
- },
441
- _attachSecondaryEvents: function(){
442
- this._detachSecondaryEvents();
443
- this._applyEvents(this._secondaryEvents);
444
- },
445
- _detachSecondaryEvents: function(){
446
- this._unapplyEvents(this._secondaryEvents);
447
- },
448
- _trigger: function(event, altdate){
449
- var date = altdate || this.dates.get(-1),
450
- local_date = this._utc_to_local(date);
451
-
452
- this.element.trigger({
453
- type: event,
454
- date: local_date,
455
- dates: $.map(this.dates, this._utc_to_local),
456
- format: $.proxy(function(ix, format){
457
- if (arguments.length === 0){
458
- ix = this.dates.length - 1;
459
- format = this.o.format;
460
- }
461
- else if (typeof ix === 'string'){
462
- format = ix;
463
- ix = this.dates.length - 1;
464
- }
465
- format = format || this.o.format;
466
- var date = this.dates.get(ix);
467
- return DPGlobal.formatDate(date, format, this.o.language);
468
- }, this)
469
- });
470
- },
471
-
472
- show: function(){
473
- if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
474
- return;
475
- if (!this.isInline)
476
- this.picker.appendTo(this.o.container);
477
- this.place();
478
- this.picker.show();
479
- this._attachSecondaryEvents();
480
- this._trigger('show');
481
- if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {
482
- $(this.element).blur();
483
- }
484
- return this;
485
- },
486
-
487
- hide: function(){
488
- if (this.isInline || !this.picker.is(':visible'))
489
- return this;
490
- this.focusDate = null;
491
- this.picker.hide().detach();
492
- this._detachSecondaryEvents();
493
- this.viewMode = this.o.startView;
494
- this.showMode();
495
-
496
- if (this.o.forceParse && this.inputField.val())
497
- this.setValue();
498
- this._trigger('hide');
499
- return this;
500
- },
501
-
502
- destroy: function(){
503
- this.hide();
504
- this._detachEvents();
505
- this._detachSecondaryEvents();
506
- this.picker.remove();
507
- delete this.element.data().datepicker;
508
- if (!this.isInput){
509
- delete this.element.data().date;
510
- }
511
- return this;
512
- },
513
-
514
- paste: function(evt){
515
- var dateString;
516
- if (evt.originalEvent.clipboardData && evt.originalEvent.clipboardData.types
517
- && $.inArray('text/plain', evt.originalEvent.clipboardData.types) !== -1) {
518
- dateString = evt.originalEvent.clipboardData.getData('text/plain');
519
- }
520
- else if (window.clipboardData) {
521
- dateString = window.clipboardData.getData('Text');
522
- }
523
- else {
524
- return;
525
- }
526
- this.setDate(dateString);
527
- this.update();
528
- evt.preventDefault();
529
- },
530
-
531
- _utc_to_local: function(utc){
532
- return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));
533
- },
534
- _local_to_utc: function(local){
535
- return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
536
- },
537
- _zero_time: function(local){
538
- return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
539
- },
540
- _zero_utc_time: function(utc){
541
- return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));
542
- },
543
-
544
- getDates: function(){
545
- return $.map(this.dates, this._utc_to_local);
546
- },
547
-
548
- getUTCDates: function(){
549
- return $.map(this.dates, function(d){
550
- return new Date(d);
551
- });
552
- },
553
-
554
- getDate: function(){
555
- return this._utc_to_local(this.getUTCDate());
556
- },
557
-
558
- getUTCDate: function(){
559
- var selected_date = this.dates.get(-1);
560
- if (typeof selected_date !== 'undefined') {
561
- return new Date(selected_date);
562
- } else {
563
- return null;
564
- }
565
- },
566
-
567
- clearDates: function(){
568
- if (this.inputField) {
569
- this.inputField.val('');
570
- }
571
-
572
- this.update();
573
- this._trigger('changeDate');
574
-
575
- if (this.o.autoclose) {
576
- this.hide();
577
- }
578
- },
579
- setDates: function(){
580
- var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
581
- this.update.apply(this, args);
582
- this._trigger('changeDate');
583
- this.setValue();
584
- return this;
585
- },
586
-
587
- setUTCDates: function(){
588
- var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
589
- this.update.apply(this, $.map(args, this._utc_to_local));
590
- this._trigger('changeDate');
591
- this.setValue();
592
- return this;
593
- },
594
-
595
- setDate: alias('setDates'),
596
- setUTCDate: alias('setUTCDates'),
597
- remove: alias('destroy'),
598
-
599
- setValue: function(){
600
- var formatted = this.getFormattedDate();
601
- this.inputField.val(formatted);
602
- return this;
603
- },
604
-
605
- getFormattedDate: function(format){
606
- if (format === undefined)
607
- format = this.o.format;
608
-
609
- var lang = this.o.language;
610
- return $.map(this.dates, function(d){
611
- return DPGlobal.formatDate(d, format, lang);
612
- }).join(this.o.multidateSeparator);
613
- },
614
-
615
- getStartDate: function(){
616
- return this.o.startDate;
617
- },
618
-
619
- setStartDate: function(startDate){
620
- this._process_options({startDate: startDate});
621
- this.update();
622
- this.updateNavArrows();
623
- return this;
624
- },
625
-
626
- getEndDate: function(){
627
- return this.o.endDate;
628
- },
629
-
630
- setEndDate: function(endDate){
631
- this._process_options({endDate: endDate});
632
- this.update();
633
- this.updateNavArrows();
634
- return this;
635
- },
636
-
637
- setDaysOfWeekDisabled: function(daysOfWeekDisabled){
638
- this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
639
- this.update();
640
- this.updateNavArrows();
641
- return this;
642
- },
643
-
644
- setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){
645
- this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});
646
- this.update();
647
- return this;
648
- },
649
-
650
- setDatesDisabled: function(datesDisabled){
651
- this._process_options({datesDisabled: datesDisabled});
652
- this.update();
653
- this.updateNavArrows();
654
- },
655
-
656
- place: function(){
657
- if (this.isInline)
658
- return this;
659
- var calendarWidth = this.picker.outerWidth(),
660
- calendarHeight = this.picker.outerHeight(),
661
- visualPadding = 10,
662
- container = $(this.o.container),
663
- windowWidth = container.width(),
664
- scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),
665
- appendOffset = container.offset();
666
-
667
- var parentsZindex = [];
668
- this.element.parents().each(function(){
669
- var itemZIndex = $(this).css('z-index');
670
- if (itemZIndex !== 'auto' && itemZIndex !== 0) parentsZindex.push(parseInt(itemZIndex));
671
- });
672
- var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;
673
- var offset = this.component ? this.component.parent().offset() : this.element.offset();
674
- var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
675
- var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
676
- var left = offset.left - appendOffset.left,
677
- top = offset.top - appendOffset.top;
678
-
679
- if (this.o.container !== 'body') {
680
- top += scrollTop;
681
- }
682
-
683
- this.picker.removeClass(
684
- 'datepicker-orient-top datepicker-orient-bottom '+
685
- 'datepicker-orient-right datepicker-orient-left'
686
- );
687
-
688
- if (this.o.orientation.x !== 'auto'){
689
- this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
690
- if (this.o.orientation.x === 'right')
691
- left -= calendarWidth - width;
692
- }
693
- // auto x orientation is best-placement: if it crosses a window
694
- // edge, fudge it sideways
695
- else {
696
- if (offset.left < 0) {
697
- // component is outside the window on the left side. Move it into visible range
698
- this.picker.addClass('datepicker-orient-left');
699
- left -= offset.left - visualPadding;
700
- } else if (left + calendarWidth > windowWidth) {
701
- // the calendar passes the widow right edge. Align it to component right side
702
- this.picker.addClass('datepicker-orient-right');
703
- left += width - calendarWidth;
704
- } else {
705
- // Default to left
706
- this.picker.addClass('datepicker-orient-left');
707
- }
708
- }
709
-
710
- // auto y orientation is best-situation: top or bottom, no fudging,
711
- // decision based on which shows more of the calendar
712
- var yorient = this.o.orientation.y,
713
- top_overflow;
714
- if (yorient === 'auto'){
715
- top_overflow = -scrollTop + top - calendarHeight;
716
- yorient = top_overflow < 0 ? 'bottom' : 'top';
717
- }
718
-
719
- this.picker.addClass('datepicker-orient-' + yorient);
720
- if (yorient === 'top')
721
- top -= calendarHeight + parseInt(this.picker.css('padding-top'));
722
- else
723
- top += height;
724
-
725
- if (this.o.rtl) {
726
- var right = windowWidth - (left + width);
727
- this.picker.css({
728
- top: top,
729
- right: right,
730
- zIndex: zIndex
731
- });
732
- } else {
733
- this.picker.css({
734
- top: top,
735
- left: left,
736
- zIndex: zIndex
737
- });
738
- }
739
- return this;
740
- },
741
-
742
- _allow_update: true,
743
- update: function(){
744
- if (!this._allow_update)
745
- return this;
746
-
747
- var oldDates = this.dates.copy(),
748
- dates = [],
749
- fromArgs = false;
750
- if (arguments.length){
751
- $.each(arguments, $.proxy(function(i, date){
752
- if (date instanceof Date)
753
- date = this._local_to_utc(date);
754
- dates.push(date);
755
- }, this));
756
- fromArgs = true;
757
- }
758
- else {
759
- dates = this.isInput
760
- ? this.element.val()
761
- : this.element.data('date') || this.inputField.val();
762
- if (dates && this.o.multidate)
763
- dates = dates.split(this.o.multidateSeparator);
764
- else
765
- dates = [dates];
766
- delete this.element.data().date;
767
- }
768
-
769
- dates = $.map(dates, $.proxy(function(date){
770
- return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);
771
- }, this));
772
- dates = $.grep(dates, $.proxy(function(date){
773
- return (
774
- !this.dateWithinRange(date) ||
775
- !date
776
- );
777
- }, this), true);
778
- this.dates.replace(dates);
779
-
780
- if (this.dates.length)
781
- this.viewDate = new Date(this.dates.get(-1));
782
- else if (this.viewDate < this.o.startDate)
783
- this.viewDate = new Date(this.o.startDate);
784
- else if (this.viewDate > this.o.endDate)
785
- this.viewDate = new Date(this.o.endDate);
786
- else
787
- this.viewDate = this.o.defaultViewDate;
788
-
789
- if (fromArgs){
790
- // setting date by clicking
791
- this.setValue();
792
- }
793
- else if (dates.length){
794
- // setting date by typing
795
- if (String(oldDates) !== String(this.dates))
796
- this._trigger('changeDate');
797
- }
798
- if (!this.dates.length && oldDates.length)
799
- this._trigger('clearDate');
800
-
801
- this.fill();
802
- this.element.change();
803
- return this;
804
- },
805
-
806
- fillDow: function(){
807
- var dowCnt = this.o.weekStart,
808
- html = '<tr>';
809
- if (this.o.calendarWeeks){
810
- this.picker.find('.datepicker-days .datepicker-switch')
811
- .attr('colspan', function(i, val){
812
- return parseInt(val) + 1;
813
- });
814
- html += '<th class="cw">&#160;</th>';
815
- }
816
- while (dowCnt < this.o.weekStart + 7){
817
- html += '<th class="dow';
818
- if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) > -1)
819
- html += ' disabled';
820
- html += '">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
821
- }
822
- html += '</tr>';
823
- this.picker.find('.datepicker-days thead').append(html);
824
- },
825
-
826
- fillMonths: function(){
827
- var localDate = this._utc_to_local(this.viewDate);
828
- var html = '',
829
- i = 0;
830
- while (i < 12){
831
- var focused = localDate && localDate.getMonth() === i ? ' focused' : '';
832
- html += '<span class="month' + focused + '">' + dates[this.o.language].monthsShort[i++]+'</span>';
833
- }
834
- this.picker.find('.datepicker-months td').html(html);
835
- },
836
-
837
- setRange: function(range){
838
- if (!range || !range.length)
839
- delete this.range;
840
- else
841
- this.range = $.map(range, function(d){
842
- return d.valueOf();
843
- });
844
- this.fill();
845
- },
846
-
847
- getClassNames: function(date){
848
- var cls = [],
849
- year = this.viewDate.getUTCFullYear(),
850
- month = this.viewDate.getUTCMonth(),
851
- today = new Date();
852
- if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
853
- cls.push('old');
854
- }
855
- else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
856
- cls.push('new');
857
- }
858
- if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
859
- cls.push('focused');
860
- // Compare internal UTC date with local today, not UTC today
861
- if (this.o.todayHighlight &&
862
- date.getUTCFullYear() === today.getFullYear() &&
863
- date.getUTCMonth() === today.getMonth() &&
864
- date.getUTCDate() === today.getDate()){
865
- cls.push('today');
866
- }
867
- if (this.dates.contains(date) !== -1)
868
- cls.push('active');
869
- if (!this.dateWithinRange(date)){
870
- cls.push('disabled');
871
- }
872
- if (this.dateIsDisabled(date)){
873
- cls.push('disabled', 'disabled-date');
874
- }
875
- if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){
876
- cls.push('highlighted');
877
- }
878
-
879
- if (this.range){
880
- if (date > this.range[0] && date < this.range[this.range.length-1]){
881
- cls.push('range');
882
- }
883
- if ($.inArray(date.valueOf(), this.range) !== -1){
884
- cls.push('selected');
885
- }
886
- if (date.valueOf() === this.range[0]){
887
- cls.push('range-start');
888
- }
889
- if (date.valueOf() === this.range[this.range.length-1]){
890
- cls.push('range-end');
891
- }
892
- }
893
- return cls;
894
- },
895
-
896
- _fill_yearsView: function(selector, cssClass, factor, step, currentYear, startYear, endYear, callback){
897
- var html, view, year, steps, startStep, endStep, thisYear, i, classes, tooltip, before;
898
-
899
- html = '';
900
- view = this.picker.find(selector);
901
- year = parseInt(currentYear / factor, 10) * factor;
902
- startStep = parseInt(startYear / step, 10) * step;
903
- endStep = parseInt(endYear / step, 10) * step;
904
- steps = $.map(this.dates, function(d){
905
- return parseInt(d.getUTCFullYear() / step, 10) * step;
906
- });
907
-
908
- view.find('.datepicker-switch').text(year + '-' + (year + step * 9));
909
-
910
- thisYear = year - step;
911
- for (i = -1; i < 11; i += 1) {
912
- classes = [cssClass];
913
- tooltip = null;
914
-
915
- if (i === -1) {
916
- classes.push('old');
917
- } else if (i === 10) {
918
- classes.push('new');
919
- }
920
- if ($.inArray(thisYear, steps) !== -1) {
921
- classes.push('active');
922
- }
923
- if (thisYear < startStep || thisYear > endStep) {
924
- classes.push('disabled');
925
- }
926
- if (thisYear === this.viewDate.getFullYear()) {
927
- classes.push('focused');
928
- }
929
-
930
- if (callback !== $.noop) {
931
- before = callback(new Date(thisYear, 0, 1));
932
- if (before === undefined) {
933
- before = {};
934
- } else if (typeof(before) === 'boolean') {
935
- before = {enabled: before};
936
- } else if (typeof(before) === 'string') {
937
- before = {classes: before};
938
- }
939
- if (before.enabled === false) {
940
- classes.push('disabled');
941
- }
942
- if (before.classes) {
943
- classes = classes.concat(before.classes.split(/\s+/));
944
- }
945
- if (before.tooltip) {
946
- tooltip = before.tooltip;
947
- }
948
- }
949
-
950
- html += '<span class="' + classes.join(' ') + '"' + (tooltip ? ' title="' + tooltip + '"' : '') + '>' + thisYear + '</span>';
951
- thisYear += step;
952
- }
953
- view.find('td').html(html);
954
- },
955
-
956
- fill: function(){
957
- var d = new Date(this.viewDate),
958
- year = d.getUTCFullYear(),
959
- month = d.getUTCMonth(),
960
- startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
961
- startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
962
- endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
963
- endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
964
- todaytxt = dates[this.o.language].today || dates['en'].today || '',
965
- cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
966
- titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
967
- tooltip,
968
- before;
969
- if (isNaN(year) || isNaN(month))
970
- return;
971
- this.picker.find('.datepicker-days .datepicker-switch')
972
- .text(DPGlobal.formatDate(d, titleFormat, this.o.language));
973
- this.picker.find('tfoot .today')
974
- .text(todaytxt)
975
- .toggle(this.o.todayBtn !== false);
976
- this.picker.find('tfoot .clear')
977
- .text(cleartxt)
978
- .toggle(this.o.clearBtn !== false);
979
- this.picker.find('thead .datepicker-title')
980
- .text(this.o.title)
981
- .toggle(this.o.title !== '');
982
- this.updateNavArrows();
983
- this.fillMonths();
984
- var prevMonth = UTCDate(year, month-1, 28),
985
- day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
986
- prevMonth.setUTCDate(day);
987
- prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
988
- var nextMonth = new Date(prevMonth);
989
- if (prevMonth.getUTCFullYear() < 100){
990
- nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());
991
- }
992
- nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
993
- nextMonth = nextMonth.valueOf();
994
- var html = [];
995
- var clsName;
996
- while (prevMonth.valueOf() < nextMonth){
997
- if (prevMonth.getUTCDay() === this.o.weekStart){
998
- html.push('<tr>');
999
- if (this.o.calendarWeeks){
1000
- // ISO 8601: First week contains first thursday.
1001
- // ISO also states week starts on Monday, but we can be more abstract here.
1002
- var
1003
- // Start of current week: based on weekstart/current date
1004
- ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
1005
- // Thursday of this week
1006
- th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
1007
- // First Thursday of year, year from thursday
1008
- yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
1009
- // Calendar week: ms between thursdays, div ms per day, div 7 days
1010
- calWeek = (th - yth) / 864e5 / 7 + 1;
1011
- html.push('<td class="cw">'+ calWeek +'</td>');
1012
- }
1013
- }
1014
- clsName = this.getClassNames(prevMonth);
1015
- clsName.push('day');
1016
-
1017
- if (this.o.beforeShowDay !== $.noop){
1018
- before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
1019
- if (before === undefined)
1020
- before = {};
1021
- else if (typeof(before) === 'boolean')
1022
- before = {enabled: before};
1023
- else if (typeof(before) === 'string')
1024
- before = {classes: before};
1025
- if (before.enabled === false)
1026
- clsName.push('disabled');
1027
- if (before.classes)
1028
- clsName = clsName.concat(before.classes.split(/\s+/));
1029
- if (before.tooltip)
1030
- tooltip = before.tooltip;
1031
- }
1032
-
1033
- //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)
1034
- //Fallback to unique function for older jquery versions
1035
- if ($.isFunction($.uniqueSort)) {
1036
- clsName = $.uniqueSort(clsName);
1037
- } else {
1038
- clsName = $.unique(clsName);
1039
- }
1040
-
1041
- html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>');
1042
- tooltip = null;
1043
- if (prevMonth.getUTCDay() === this.o.weekEnd){
1044
- html.push('</tr>');
1045
- }
1046
- prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
1047
- }
1048
- this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
1049
-
1050
- var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';
1051
- var months = this.picker.find('.datepicker-months')
1052
- .find('.datepicker-switch')
1053
- .text(this.o.maxViewMode < 2 ? monthsTitle : year)
1054
- .end()
1055
- .find('span').removeClass('active');
1056
-
1057
- $.each(this.dates, function(i, d){
1058
- if (d.getUTCFullYear() === year)
1059
- months.eq(d.getUTCMonth()).addClass('active');
1060
- });
1061
-
1062
- if (year < startYear || year > endYear){
1063
- months.addClass('disabled');
1064
- }
1065
- if (year === startYear){
1066
- months.slice(0, startMonth).addClass('disabled');
1067
- }
1068
- if (year === endYear){
1069
- months.slice(endMonth+1).addClass('disabled');
1070
- }
1071
-
1072
- if (this.o.beforeShowMonth !== $.noop){
1073
- var that = this;
1074
- $.each(months, function(i, month){
1075
- var moDate = new Date(year, i, 1);
1076
- var before = that.o.beforeShowMonth(moDate);
1077
- if (before === undefined)
1078
- before = {};
1079
- else if (typeof(before) === 'boolean')
1080
- before = {enabled: before};
1081
- else if (typeof(before) === 'string')
1082
- before = {classes: before};
1083
- if (before.enabled === false && !$(month).hasClass('disabled'))
1084
- $(month).addClass('disabled');
1085
- if (before.classes)
1086
- $(month).addClass(before.classes);
1087
- if (before.tooltip)
1088
- $(month).prop('title', before.tooltip);
1089
- });
1090
- }
1091
-
1092
- // Generating decade/years picker
1093
- this._fill_yearsView(
1094
- '.datepicker-years',
1095
- 'year',
1096
- 10,
1097
- 1,
1098
- year,
1099
- startYear,
1100
- endYear,
1101
- this.o.beforeShowYear
1102
- );
1103
-
1104
- // Generating century/decades picker
1105
- this._fill_yearsView(
1106
- '.datepicker-decades',
1107
- 'decade',
1108
- 100,
1109
- 10,
1110
- year,
1111
- startYear,
1112
- endYear,
1113
- this.o.beforeShowDecade
1114
- );
1115
-
1116
- // Generating millennium/centuries picker
1117
- this._fill_yearsView(
1118
- '.datepicker-centuries',
1119
- 'century',
1120
- 1000,
1121
- 100,
1122
- year,
1123
- startYear,
1124
- endYear,
1125
- this.o.beforeShowCentury
1126
- );
1127
- },
1128
-
1129
- updateNavArrows: function(){
1130
- if (!this._allow_update)
1131
- return;
1132
-
1133
- var d = new Date(this.viewDate),
1134
- year = d.getUTCFullYear(),
1135
- month = d.getUTCMonth();
1136
- switch (this.viewMode){
1137
- case 0:
1138
- if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){
1139
- this.picker.find('.prev').css({visibility: 'hidden'});
1140
- }
1141
- else {
1142
- this.picker.find('.prev').css({visibility: 'visible'});
1143
- }
1144
- if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){
1145
- this.picker.find('.next').css({visibility: 'hidden'});
1146
- }
1147
- else {
1148
- this.picker.find('.next').css({visibility: 'visible'});
1149
- }
1150
- break;
1151
- case 1:
1152
- case 2:
1153
- case 3:
1154
- case 4:
1155
- if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() || this.o.maxViewMode < 2){
1156
- this.picker.find('.prev').css({visibility: 'hidden'});
1157
- }
1158
- else {
1159
- this.picker.find('.prev').css({visibility: 'visible'});
1160
- }
1161
- if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() || this.o.maxViewMode < 2){
1162
- this.picker.find('.next').css({visibility: 'hidden'});
1163
- }
1164
- else {
1165
- this.picker.find('.next').css({visibility: 'visible'});
1166
- }
1167
- break;
1168
- }
1169
- },
1170
-
1171
- click: function(e){
1172
- e.preventDefault();
1173
- e.stopPropagation();
1174
-
1175
- var target, dir, day, year, month, monthChanged, yearChanged;
1176
- target = $(e.target);
1177
-
1178
- // Clicked on the switch
1179
- if (target.hasClass('datepicker-switch')){
1180
- this.showMode(1);
1181
- }
1182
-
1183
- // Clicked on prev or next
1184
- var navArrow = target.closest('.prev, .next');
1185
- if (navArrow.length > 0) {
1186
- dir = DPGlobal.modes[this.viewMode].navStep * (navArrow.hasClass('prev') ? -1 : 1);
1187
- if (this.viewMode === 0){
1188
- this.viewDate = this.moveMonth(this.viewDate, dir);
1189
- this._trigger('changeMonth', this.viewDate);
1190
- } else {
1191
- this.viewDate = this.moveYear(this.viewDate, dir);
1192
- if (this.viewMode === 1){
1193
- this._trigger('changeYear', this.viewDate);
1194
- }
1195
- }
1196
- this.fill();
1197
- }
1198
-
1199
- // Clicked on today button
1200
- if (target.hasClass('today') && !target.hasClass('day')){
1201
- this.showMode(-2);
1202
- this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');
1203
- }
1204
-
1205
- // Clicked on clear button
1206
- if (target.hasClass('clear')){
1207
- this.clearDates();
1208
- }
1209
-
1210
- if (!target.hasClass('disabled')){
1211
- // Clicked on a day
1212
- if (target.hasClass('day')){
1213
- day = parseInt(target.text(), 10) || 1;
1214
- year = this.viewDate.getUTCFullYear();
1215
- month = this.viewDate.getUTCMonth();
1216
-
1217
- // From last month
1218
- if (target.hasClass('old')){
1219
- if (month === 0) {
1220
- month = 11;
1221
- year = year - 1;
1222
- monthChanged = true;
1223
- yearChanged = true;
1224
- } else {
1225
- month = month - 1;
1226
- monthChanged = true;
1227
- }
1228
- }
1229
-
1230
- // From next month
1231
- if (target.hasClass('new')) {
1232
- if (month === 11){
1233
- month = 0;
1234
- year = year + 1;
1235
- monthChanged = true;
1236
- yearChanged = true;
1237
- } else {
1238
- month = month + 1;
1239
- monthChanged = true;
1240
- }
1241
- }
1242
- this._setDate(UTCDate(year, month, day));
1243
- if (yearChanged) {
1244
- this._trigger('changeYear', this.viewDate);
1245
- }
1246
- if (monthChanged) {
1247
- this._trigger('changeMonth', this.viewDate);
1248
- }
1249
- }
1250
-
1251
- // Clicked on a month
1252
- if (target.hasClass('month')) {
1253
- this.viewDate.setUTCDate(1);
1254
- day = 1;
1255
- month = target.parent().find('span').index(target);
1256
- year = this.viewDate.getUTCFullYear();
1257
- this.viewDate.setUTCMonth(month);
1258
- this._trigger('changeMonth', this.viewDate);
1259
- if (this.o.minViewMode === 1){
1260
- this._setDate(UTCDate(year, month, day));
1261
- this.showMode();
1262
- } else {
1263
- this.showMode(-1);
1264
- }
1265
- this.fill();
1266
- }
1267
-
1268
- // Clicked on a year
1269
- if (target.hasClass('year')
1270
- || target.hasClass('decade')
1271
- || target.hasClass('century')) {
1272
- this.viewDate.setUTCDate(1);
1273
-
1274
- day = 1;
1275
- month = 0;
1276
- year = parseInt(target.text(), 10)||0;
1277
- this.viewDate.setUTCFullYear(year);
1278
-
1279
- if (target.hasClass('year')){
1280
- this._trigger('changeYear', this.viewDate);
1281
- if (this.o.minViewMode === 2){
1282
- this._setDate(UTCDate(year, month, day));
1283
- }
1284
- }
1285
- if (target.hasClass('decade')){
1286
- this._trigger('changeDecade', this.viewDate);
1287
- if (this.o.minViewMode === 3){
1288
- this._setDate(UTCDate(year, month, day));
1289
- }
1290
- }
1291
- if (target.hasClass('century')){
1292
- this._trigger('changeCentury', this.viewDate);
1293
- if (this.o.minViewMode === 4){
1294
- this._setDate(UTCDate(year, month, day));
1295
- }
1296
- }
1297
-
1298
- this.showMode(-1);
1299
- this.fill();
1300
- }
1301
- }
1302
-
1303
- if (this.picker.is(':visible') && this._focused_from){
1304
- $(this._focused_from).focus();
1305
- }
1306
- delete this._focused_from;
1307
- },
1308
-
1309
- _toggle_multidate: function(date){
1310
- var ix = this.dates.contains(date);
1311
- if (!date){
1312
- this.dates.clear();
1313
- }
1314
-
1315
- if (ix !== -1){
1316
- if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){
1317
- this.dates.remove(ix);
1318
- }
1319
- } else if (this.o.multidate === false) {
1320
- this.dates.clear();
1321
- this.dates.push(date);
1322
- }
1323
- else {
1324
- this.dates.push(date);
1325
- }
1326
-
1327
- if (typeof this.o.multidate === 'number')
1328
- while (this.dates.length > this.o.multidate)
1329
- this.dates.remove(0);
1330
- },
1331
-
1332
- _setDate: function(date, which){
1333
- if (!which || which === 'date')
1334
- this._toggle_multidate(date && new Date(date));
1335
- if (!which || which === 'view')
1336
- this.viewDate = date && new Date(date);
1337
-
1338
- this.fill();
1339
- this.setValue();
1340
- if (!which || which !== 'view') {
1341
- this._trigger('changeDate');
1342
- }
1343
- if (this.inputField){
1344
- this.inputField.change();
1345
- }
1346
- if (this.o.autoclose && (!which || which === 'date')){
1347
- this.hide();
1348
- }
1349
- },
1350
-
1351
- moveDay: function(date, dir){
1352
- var newDate = new Date(date);
1353
- newDate.setUTCDate(date.getUTCDate() + dir);
1354
-
1355
- return newDate;
1356
- },
1357
-
1358
- moveWeek: function(date, dir){
1359
- return this.moveDay(date, dir * 7);
1360
- },
1361
-
1362
- moveMonth: function(date, dir){
1363
- if (!isValidDate(date))
1364
- return this.o.defaultViewDate;
1365
- if (!dir)
1366
- return date;
1367
- var new_date = new Date(date.valueOf()),
1368
- day = new_date.getUTCDate(),
1369
- month = new_date.getUTCMonth(),
1370
- mag = Math.abs(dir),
1371
- new_month, test;
1372
- dir = dir > 0 ? 1 : -1;
1373
- if (mag === 1){
1374
- test = dir === -1
1375
- // If going back one month, make sure month is not current month
1376
- // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
1377
- ? function(){
1378
- return new_date.getUTCMonth() === month;
1379
- }
1380
- // If going forward one month, make sure month is as expected
1381
- // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
1382
- : function(){
1383
- return new_date.getUTCMonth() !== new_month;
1384
- };
1385
- new_month = month + dir;
1386
- new_date.setUTCMonth(new_month);
1387
- // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
1388
- if (new_month < 0 || new_month > 11)
1389
- new_month = (new_month + 12) % 12;
1390
- }
1391
- else {
1392
- // For magnitudes >1, move one month at a time...
1393
- for (var i=0; i < mag; i++)
1394
- // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
1395
- new_date = this.moveMonth(new_date, dir);
1396
- // ...then reset the day, keeping it in the new month
1397
- new_month = new_date.getUTCMonth();
1398
- new_date.setUTCDate(day);
1399
- test = function(){
1400
- return new_month !== new_date.getUTCMonth();
1401
- };
1402
- }
1403
- // Common date-resetting loop -- if date is beyond end of month, make it
1404
- // end of month
1405
- while (test()){
1406
- new_date.setUTCDate(--day);
1407
- new_date.setUTCMonth(new_month);
1408
- }
1409
- return new_date;
1410
- },
1411
-
1412
- moveYear: function(date, dir){
1413
- return this.moveMonth(date, dir*12);
1414
- },
1415
-
1416
- moveAvailableDate: function(date, dir, fn){
1417
- do {
1418
- date = this[fn](date, dir);
1419
-
1420
- if (!this.dateWithinRange(date))
1421
- return false;
1422
-
1423
- fn = 'moveDay';
1424
- }
1425
- while (this.dateIsDisabled(date));
1426
-
1427
- return date;
1428
- },
1429
-
1430
- weekOfDateIsDisabled: function(date){
1431
- return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;
1432
- },
1433
-
1434
- dateIsDisabled: function(date){
1435
- return (
1436
- this.weekOfDateIsDisabled(date) ||
1437
- $.grep(this.o.datesDisabled, function(d){
1438
- return isUTCEquals(date, d);
1439
- }).length > 0
1440
- );
1441
- },
1442
-
1443
- dateWithinRange: function(date){
1444
- return date >= this.o.startDate && date <= this.o.endDate;
1445
- },
1446
-
1447
- keydown: function(e){
1448
- if (!this.picker.is(':visible')){
1449
- if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker
1450
- this.show();
1451
- e.stopPropagation();
1452
- }
1453
- return;
1454
- }
1455
- var dateChanged = false,
1456
- dir, newViewDate,
1457
- focusDate = this.focusDate || this.viewDate;
1458
- switch (e.keyCode){
1459
- case 27: // escape
1460
- if (this.focusDate){
1461
- this.focusDate = null;
1462
- this.viewDate = this.dates.get(-1) || this.viewDate;
1463
- this.fill();
1464
- }
1465
- else
1466
- this.hide();
1467
- e.preventDefault();
1468
- e.stopPropagation();
1469
- break;
1470
- case 37: // left
1471
- case 38: // up
1472
- case 39: // right
1473
- case 40: // down
1474
- if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)
1475
- break;
1476
- dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;
1477
- if (this.viewMode === 0) {
1478
- if (e.ctrlKey){
1479
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
1480
-
1481
- if (newViewDate)
1482
- this._trigger('changeYear', this.viewDate);
1483
- }
1484
- else if (e.shiftKey){
1485
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
1486
-
1487
- if (newViewDate)
1488
- this._trigger('changeMonth', this.viewDate);
1489
- }
1490
- else if (e.keyCode === 37 || e.keyCode === 39){
1491
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');
1492
- }
1493
- else if (!this.weekOfDateIsDisabled(focusDate)){
1494
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');
1495
- }
1496
- } else if (this.viewMode === 1) {
1497
- if (e.keyCode === 38 || e.keyCode === 40) {
1498
- dir = dir * 4;
1499
- }
1500
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
1501
- } else if (this.viewMode === 2) {
1502
- if (e.keyCode === 38 || e.keyCode === 40) {
1503
- dir = dir * 4;
1504
- }
1505
- newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
1506
- }
1507
- if (newViewDate){
1508
- this.focusDate = this.viewDate = newViewDate;
1509
- this.setValue();
1510
- this.fill();
1511
- e.preventDefault();
1512
- }
1513
- break;
1514
- case 13: // enter
1515
- if (!this.o.forceParse)
1516
- break;
1517
- focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
1518
- if (this.o.keyboardNavigation) {
1519
- this._toggle_multidate(focusDate);
1520
- dateChanged = true;
1521
- }
1522
- this.focusDate = null;
1523
- this.viewDate = this.dates.get(-1) || this.viewDate;
1524
- this.setValue();
1525
- this.fill();
1526
- if (this.picker.is(':visible')){
1527
- e.preventDefault();
1528
- e.stopPropagation();
1529
- if (this.o.autoclose)
1530
- this.hide();
1531
- }
1532
- break;
1533
- case 9: // tab
1534
- this.focusDate = null;
1535
- this.viewDate = this.dates.get(-1) || this.viewDate;
1536
- this.fill();
1537
- this.hide();
1538
- break;
1539
- }
1540
- if (dateChanged){
1541
- if (this.dates.length)
1542
- this._trigger('changeDate');
1543
- else
1544
- this._trigger('clearDate');
1545
- if (this.inputField){
1546
- this.inputField.change();
1547
- }
1548
- }
1549
- },
1550
-
1551
- showMode: function(dir){
1552
- if (dir){
1553
- this.viewMode = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, this.viewMode + dir));
1554
- }
1555
- this.picker
1556
- .children('div')
1557
- .hide()
1558
- .filter('.datepicker-' + DPGlobal.modes[this.viewMode].clsName)
1559
- .show();
1560
- this.updateNavArrows();
1561
- }
1562
- };
1563
-
1564
- var DateRangePicker = function(element, options){
1565
- $(element).data('datepicker', this);
1566
- this.element = $(element);
1567
- this.inputs = $.map(options.inputs, function(i){
1568
- return i.jquery ? i[0] : i;
1569
- });
1570
- delete options.inputs;
1571
-
1572
- datepickerPlugin.call($(this.inputs), options)
1573
- .on('changeDate', $.proxy(this.dateUpdated, this));
1574
-
1575
- this.pickers = $.map(this.inputs, function(i){
1576
- return $(i).data('datepicker');
1577
- });
1578
- this.updateDates();
1579
- };
1580
- DateRangePicker.prototype = {
1581
- updateDates: function(){
1582
- this.dates = $.map(this.pickers, function(i){
1583
- return i.getUTCDate();
1584
- });
1585
- this.updateRanges();
1586
- },
1587
- updateRanges: function(){
1588
- var range = $.map(this.dates, function(d){
1589
- return d.valueOf();
1590
- });
1591
- $.each(this.pickers, function(i, p){
1592
- p.setRange(range);
1593
- });
1594
- },
1595
- dateUpdated: function(e){
1596
- // `this.updating` is a workaround for preventing infinite recursion
1597
- // between `changeDate` triggering and `setUTCDate` calling. Until
1598
- // there is a better mechanism.
1599
- if (this.updating)
1600
- return;
1601
- this.updating = true;
1602
-
1603
- var dp = $(e.target).data('datepicker');
1604
-
1605
- if (typeof(dp) === "undefined") {
1606
- return;
1607
- }
1608
-
1609
- var new_date = dp.getUTCDate(),
1610
- i = $.inArray(e.target, this.inputs),
1611
- j = i - 1,
1612
- k = i + 1,
1613
- l = this.inputs.length;
1614
- if (i === -1)
1615
- return;
1616
-
1617
- $.each(this.pickers, function(i, p){
1618
- if (!p.getUTCDate())
1619
- p.setUTCDate(new_date);
1620
- });
1621
-
1622
- if (new_date < this.dates[j]){
1623
- // Date being moved earlier/left
1624
- while (j >= 0 && new_date < this.dates[j]){
1625
- this.pickers[j--].setUTCDate(new_date);
1626
- }
1627
- }
1628
- else if (new_date > this.dates[k]){
1629
- // Date being moved later/right
1630
- while (k < l && new_date > this.dates[k]){
1631
- this.pickers[k++].setUTCDate(new_date);
1632
- }
1633
- }
1634
- this.updateDates();
1635
-
1636
- delete this.updating;
1637
- },
1638
- remove: function(){
1639
- $.map(this.pickers, function(p){ p.remove(); });
1640
- delete this.element.data().datepicker;
1641
- }
1642
- };
1643
-
1644
- function opts_from_el(el, prefix){
1645
- // Derive options from element data-attrs
1646
- var data = $(el).data(),
1647
- out = {}, inkey,
1648
- replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
1649
- prefix = new RegExp('^' + prefix.toLowerCase());
1650
- function re_lower(_,a){
1651
- return a.toLowerCase();
1652
- }
1653
- for (var key in data)
1654
- if (prefix.test(key)){
1655
- inkey = key.replace(replace, re_lower);
1656
- out[inkey] = data[key];
1657
- }
1658
- return out;
1659
- }
1660
-
1661
- function opts_from_locale(lang){
1662
- // Derive options from locale plugins
1663
- var out = {};
1664
- // Check if "de-DE" style date is available, if not language should
1665
- // fallback to 2 letter code eg "de"
1666
- if (!dates[lang]){
1667
- lang = lang.split('-')[0];
1668
- if (!dates[lang])
1669
- return;
1670
- }
1671
- var d = dates[lang];
1672
- $.each(locale_opts, function(i,k){
1673
- if (k in d)
1674
- out[k] = d[k];
1675
- });
1676
- return out;
1677
- }
1678
-
1679
- var old = $.fn.datepicker;
1680
- var datepickerPlugin = function(option){
1681
- var args = Array.apply(null, arguments);
1682
- args.shift();
1683
- var internal_return;
1684
- this.each(function(){
1685
- var $this = $(this),
1686
- data = $this.data('datepicker'),
1687
- options = typeof option === 'object' && option;
1688
- if (!data){
1689
- var elopts = opts_from_el(this, 'date'),
1690
- // Preliminary otions
1691
- xopts = $.extend({}, defaults, elopts, options),
1692
- locopts = opts_from_locale(xopts.language),
1693
- // Options priority: js args, data-attrs, locales, defaults
1694
- opts = $.extend({}, defaults, locopts, elopts, options);
1695
- if ($this.hasClass('input-daterange') || opts.inputs){
1696
- $.extend(opts, {
1697
- inputs: opts.inputs || $this.find('input').toArray()
1698
- });
1699
- data = new DateRangePicker(this, opts);
1700
- }
1701
- else {
1702
- data = new Datepicker(this, opts);
1703
- }
1704
- $this.data('datepicker', data);
1705
- }
1706
- if (typeof option === 'string' && typeof data[option] === 'function'){
1707
- internal_return = data[option].apply(data, args);
1708
- }
1709
- });
1710
-
1711
- if (
1712
- internal_return === undefined ||
1713
- internal_return instanceof Datepicker ||
1714
- internal_return instanceof DateRangePicker
1715
- )
1716
- return this;
1717
-
1718
- if (this.length > 1)
1719
- throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');
1720
- else
1721
- return internal_return;
1722
- };
1723
- $.fn.datepicker = datepickerPlugin;
1724
-
1725
- var defaults = $.fn.datepicker.defaults = {
1726
- assumeNearbyYear: false,
1727
- autoclose: false,
1728
- beforeShowDay: $.noop,
1729
- beforeShowMonth: $.noop,
1730
- beforeShowYear: $.noop,
1731
- beforeShowDecade: $.noop,
1732
- beforeShowCentury: $.noop,
1733
- calendarWeeks: false,
1734
- clearBtn: false,
1735
- toggleActive: false,
1736
- daysOfWeekDisabled: [],
1737
- daysOfWeekHighlighted: [],
1738
- datesDisabled: [],
1739
- endDate: Infinity,
1740
- forceParse: true,
1741
- format: 'mm/dd/yyyy',
1742
- keyboardNavigation: true,
1743
- language: 'en',
1744
- minViewMode: 0,
1745
- maxViewMode: 4,
1746
- multidate: false,
1747
- multidateSeparator: ',',
1748
- orientation: "auto",
1749
- rtl: false,
1750
- startDate: -Infinity,
1751
- startView: 0,
1752
- todayBtn: false,
1753
- todayHighlight: false,
1754
- weekStart: 0,
1755
- disableTouchKeyboard: false,
1756
- enableOnReadonly: true,
1757
- showOnFocus: true,
1758
- zIndexOffset: 10,
1759
- container: 'body',
1760
- immediateUpdates: false,
1761
- title: '',
1762
- templates: {
1763
- leftArrow: '&laquo;',
1764
- rightArrow: '&raquo;'
1765
- }
1766
- };
1767
- var locale_opts = $.fn.datepicker.locale_opts = [
1768
- 'format',
1769
- 'rtl',
1770
- 'weekStart'
1771
- ];
1772
- $.fn.datepicker.Constructor = Datepicker;
1773
- var dates = $.fn.datepicker.dates = {
1774
- en: {
1775
- days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
1776
- daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
1777
- daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
1778
- months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
1779
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
1780
- today: "Today",
1781
- clear: "Clear",
1782
- titleFormat: "MM yyyy"
1783
- }
1784
- };
1785
-
1786
- var DPGlobal = {
1787
- modes: [
1788
- {
1789
- clsName: 'days',
1790
- navFnc: 'Month',
1791
- navStep: 1
1792
- },
1793
- {
1794
- clsName: 'months',
1795
- navFnc: 'FullYear',
1796
- navStep: 1
1797
- },
1798
- {
1799
- clsName: 'years',
1800
- navFnc: 'FullYear',
1801
- navStep: 10
1802
- },
1803
- {
1804
- clsName: 'decades',
1805
- navFnc: 'FullDecade',
1806
- navStep: 100
1807
- },
1808
- {
1809
- clsName: 'centuries',
1810
- navFnc: 'FullCentury',
1811
- navStep: 1000
1812
- }],
1813
- isLeapYear: function(year){
1814
- return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
1815
- },
1816
- getDaysInMonth: function(year, month){
1817
- return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
1818
- },
1819
- validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
1820
- nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,
1821
- parseFormat: function(format){
1822
- if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')
1823
- return format;
1824
- // IE treats \0 as a string end in inputs (truncating the value),
1825
- // so it's a bad format delimiter, anyway
1826
- var separators = format.replace(this.validParts, '\0').split('\0'),
1827
- parts = format.match(this.validParts);
1828
- if (!separators || !separators.length || !parts || parts.length === 0){
1829
- throw new Error("Invalid date format.");
1830
- }
1831
- return {separators: separators, parts: parts};
1832
- },
1833
- parseDate: function(date, format, language, assumeNearby){
1834
- if (!date)
1835
- return undefined;
1836
- if (date instanceof Date)
1837
- return date;
1838
- if (typeof format === 'string')
1839
- format = DPGlobal.parseFormat(format);
1840
- if (format.toValue)
1841
- return format.toValue(date, format, language);
1842
- var part_re = /([\-+]\d+)([dmwy])/,
1843
- parts = date.match(/([\-+]\d+)([dmwy])/g),
1844
- fn_map = {
1845
- d: 'moveDay',
1846
- m: 'moveMonth',
1847
- w: 'moveWeek',
1848
- y: 'moveYear'
1849
- },
1850
- dateAliases = {
1851
- yesterday: '-1d',
1852
- today: '+0d',
1853
- tomorrow: '+1d'
1854
- },
1855
- part, dir, i, fn;
1856
- if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
1857
- date = new Date();
1858
- for (i=0; i < parts.length; i++){
1859
- part = part_re.exec(parts[i]);
1860
- dir = parseInt(part[1]);
1861
- fn = fn_map[part[2]];
1862
- date = Datepicker.prototype[fn](date, dir);
1863
- }
1864
- return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
1865
- }
1866
-
1867
- if (typeof dateAliases[date] !== 'undefined') {
1868
- date = dateAliases[date];
1869
- parts = date.match(/([\-+]\d+)([dmwy])/g);
1870
-
1871
- if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
1872
- date = new Date();
1873
- for (i=0; i < parts.length; i++){
1874
- part = part_re.exec(parts[i]);
1875
- dir = parseInt(part[1]);
1876
- fn = fn_map[part[2]];
1877
- date = Datepicker.prototype[fn](date, dir);
1878
- }
1879
-
1880
- return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
1881
- }
1882
- }
1883
-
1884
- parts = date && date.match(this.nonpunctuation) || [];
1885
- date = new Date();
1886
-
1887
- function applyNearbyYear(year, threshold){
1888
- if (threshold === true)
1889
- threshold = 10;
1890
-
1891
- // if year is 2 digits or less, than the user most likely is trying to get a recent century
1892
- if (year < 100){
1893
- year += 2000;
1894
- // if the new year is more than threshold years in advance, use last century
1895
- if (year > ((new Date()).getFullYear()+threshold)){
1896
- year -= 100;
1897
- }
1898
- }
1899
-
1900
- return year;
1901
- }
1902
-
1903
- var parsed = {},
1904
- setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
1905
- setters_map = {
1906
- yyyy: function(d,v){
1907
- return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
1908
- },
1909
- yy: function(d,v){
1910
- return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
1911
- },
1912
- m: function(d,v){
1913
- if (isNaN(d))
1914
- return d;
1915
- v -= 1;
1916
- while (v < 0) v += 12;
1917
- v %= 12;
1918
- d.setUTCMonth(v);
1919
- while (d.getUTCMonth() !== v)
1920
- d.setUTCDate(d.getUTCDate()-1);
1921
- return d;
1922
- },
1923
- d: function(d,v){
1924
- return d.setUTCDate(v);
1925
- }
1926
- },
1927
- val, filtered;
1928
- setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
1929
- setters_map['dd'] = setters_map['d'];
1930
- date = UTCToday();
1931
- var fparts = format.parts.slice();
1932
- // Remove noop parts
1933
- if (parts.length !== fparts.length){
1934
- fparts = $(fparts).filter(function(i,p){
1935
- return $.inArray(p, setters_order) !== -1;
1936
- }).toArray();
1937
- }
1938
- // Process remainder
1939
- function match_part(){
1940
- var m = this.slice(0, parts[i].length),
1941
- p = parts[i].slice(0, m.length);
1942
- return m.toLowerCase() === p.toLowerCase();
1943
- }
1944
- if (parts.length === fparts.length){
1945
- var cnt;
1946
- for (i=0, cnt = fparts.length; i < cnt; i++){
1947
- val = parseInt(parts[i], 10);
1948
- part = fparts[i];
1949
- if (isNaN(val)){
1950
- switch (part){
1951
- case 'MM':
1952
- filtered = $(dates[language].months).filter(match_part);
1953
- val = $.inArray(filtered[0], dates[language].months) + 1;
1954
- break;
1955
- case 'M':
1956
- filtered = $(dates[language].monthsShort).filter(match_part);
1957
- val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
1958
- break;
1959
- }
1960
- }
1961
- parsed[part] = val;
1962
- }
1963
- var _date, s;
1964
- for (i=0; i < setters_order.length; i++){
1965
- s = setters_order[i];
1966
- if (s in parsed && !isNaN(parsed[s])){
1967
- _date = new Date(date);
1968
- setters_map[s](_date, parsed[s]);
1969
- if (!isNaN(_date))
1970
- date = _date;
1971
- }
1972
- }
1973
- }
1974
- return date;
1975
- },
1976
- formatDate: function(date, format, language){
1977
- if (!date)
1978
- return '';
1979
- if (typeof format === 'string')
1980
- format = DPGlobal.parseFormat(format);
1981
- if (format.toDisplay)
1982
- return format.toDisplay(date, format, language);
1983
- var val = {
1984
- d: date.getUTCDate(),
1985
- D: dates[language].daysShort[date.getUTCDay()],
1986
- DD: dates[language].days[date.getUTCDay()],
1987
- m: date.getUTCMonth() + 1,
1988
- M: dates[language].monthsShort[date.getUTCMonth()],
1989
- MM: dates[language].months[date.getUTCMonth()],
1990
- yy: date.getUTCFullYear().toString().substring(2),
1991
- yyyy: date.getUTCFullYear()
1992
- };
1993
- val.dd = (val.d < 10 ? '0' : '') + val.d;
1994
- val.mm = (val.m < 10 ? '0' : '') + val.m;
1995
- date = [];
1996
- var seps = $.extend([], format.separators);
1997
- for (var i=0, cnt = format.parts.length; i <= cnt; i++){
1998
- if (seps.length)
1999
- date.push(seps.shift());
2000
- date.push(val[format.parts[i]]);
2001
- }
2002
- return date.join('');
2003
- },
2004
- headTemplate: '<thead>'+
2005
- '<tr>'+
2006
- '<th colspan="7" class="datepicker-title"></th>'+
2007
- '</tr>'+
2008
- '<tr>'+
2009
- '<th class="prev">&laquo;</th>'+
2010
- '<th colspan="5" class="datepicker-switch"></th>'+
2011
- '<th class="next">&raquo;</th>'+
2012
- '</tr>'+
2013
- '</thead>',
2014
- contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
2015
- footTemplate: '<tfoot>'+
2016
- '<tr>'+
2017
- '<th colspan="7" class="today"></th>'+
2018
- '</tr>'+
2019
- '<tr>'+
2020
- '<th colspan="7" class="clear"></th>'+
2021
- '</tr>'+
2022
- '</tfoot>'
2023
- };
2024
- DPGlobal.template = '<div class="datepicker">'+
2025
- '<div class="datepicker-days">'+
2026
- '<table class="table-condensed">'+
2027
- DPGlobal.headTemplate+
2028
- '<tbody></tbody>'+
2029
- DPGlobal.footTemplate+
2030
- '</table>'+
2031
- '</div>'+
2032
- '<div class="datepicker-months">'+
2033
- '<table class="table-condensed">'+
2034
- DPGlobal.headTemplate+
2035
- DPGlobal.contTemplate+
2036
- DPGlobal.footTemplate+
2037
- '</table>'+
2038
- '</div>'+
2039
- '<div class="datepicker-years">'+
2040
- '<table class="table-condensed">'+
2041
- DPGlobal.headTemplate+
2042
- DPGlobal.contTemplate+
2043
- DPGlobal.footTemplate+
2044
- '</table>'+
2045
- '</div>'+
2046
- '<div class="datepicker-decades">'+
2047
- '<table class="table-condensed">'+
2048
- DPGlobal.headTemplate+
2049
- DPGlobal.contTemplate+
2050
- DPGlobal.footTemplate+
2051
- '</table>'+
2052
- '</div>'+
2053
- '<div class="datepicker-centuries">'+
2054
- '<table class="table-condensed">'+
2055
- DPGlobal.headTemplate+
2056
- DPGlobal.contTemplate+
2057
- DPGlobal.footTemplate+
2058
- '</table>'+
2059
- '</div>'+
2060
- '</div>';
2061
-
2062
- $.fn.datepicker.DPGlobal = DPGlobal;
2063
-
2064
-
2065
- /* DATEPICKER NO CONFLICT
2066
- * =================== */
2067
-
2068
- $.fn.datepicker.noConflict = function(){
2069
- $.fn.datepicker = old;
2070
- return this;
2071
- };
2072
-
2073
- /* DATEPICKER VERSION
2074
- * =================== */
2075
- $.fn.datepicker.version = '1.6.4';
2076
-
2077
- /* DATEPICKER DATA-API
2078
- * ================== */
2079
-
2080
- $(document).on(
2081
- 'focus.datepicker.data-api click.datepicker.data-api',
2082
- '[data-provide="datepicker"]',
2083
- function(e){
2084
- var $this = $(this);
2085
- if ($this.data('datepicker'))
2086
- return;
2087
- e.preventDefault();
2088
- // component click requires us to explicitly show it
2089
- datepickerPlugin.call($this, 'show');
2090
- }
2091
- );
2092
- $(function(){
2093
- datepickerPlugin.call($('[data-provide="datepicker-inline"]'));
2094
- });
2095
-
2096
- }));