decidim-core 0.24.3 → 0.25.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-core might be problematic. Click here for more details.

Files changed (764) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +8 -0
  3. data/app/cells/decidim/announcement/show.erb +1 -1
  4. data/app/cells/decidim/author/comments.erb +2 -2
  5. data/app/cells/decidim/author/profile_inline.erb +3 -3
  6. data/app/cells/decidim/author_cell.rb +2 -1
  7. data/app/cells/decidim/coauthorships_cell.rb +2 -2
  8. data/app/cells/decidim/content_blocks/cta_cell.rb +1 -1
  9. data/app/cells/decidim/content_blocks/hero_cell.rb +1 -1
  10. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
  11. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +4 -4
  12. data/app/cells/decidim/content_blocks/stats/show.erb +8 -3
  13. data/app/cells/decidim/content_blocks/sub_hero/show.erb +1 -1
  14. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +10 -0
  15. data/app/cells/decidim/{date → date_range}/show.erb +0 -0
  16. data/app/cells/decidim/{date_cell.rb → date_range_cell.rb} +1 -1
  17. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +0 -1
  18. data/app/cells/decidim/flag_modal/show.erb +11 -8
  19. data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +2 -2
  20. data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +2 -2
  21. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +2 -2
  22. data/app/cells/decidim/notifications/show.erb +0 -2
  23. data/app/cells/decidim/profile/invalid.erb +9 -0
  24. data/app/cells/decidim/profile_cell.rb +4 -5
  25. data/app/cells/decidim/public_participation/show.erb +4 -0
  26. data/app/cells/decidim/public_participation_cell.rb +12 -0
  27. data/app/cells/decidim/represent_user_group/show.erb +0 -1
  28. data/app/cells/decidim/statistic/homepage.erb +9 -0
  29. data/app/cells/decidim/statistic/show.erb +9 -0
  30. data/app/cells/decidim/statistic_cell.rb +22 -0
  31. data/app/cells/decidim/statistics/show.erb +19 -0
  32. data/app/cells/decidim/statistics_cell.rb +36 -0
  33. data/app/cells/decidim/user_activity/show.erb +0 -1
  34. data/app/cells/decidim/user_conversation/conversation_header.erb +2 -2
  35. data/app/cells/decidim/user_conversation/messages.erb +1 -1
  36. data/app/cells/decidim/user_conversation_cell.rb +11 -2
  37. data/app/cells/decidim/user_conversations/add_conversation_users.erb +0 -1
  38. data/app/cells/decidim/user_conversations/conversation_item.erb +1 -1
  39. data/app/cells/decidim/user_conversations/show.erb +0 -1
  40. data/app/cells/decidim/user_conversations_cell.rb +10 -2
  41. data/app/cells/decidim/user_profile/unlinked_user_data.erb +3 -3
  42. data/app/cells/decidim/user_profile/user_data.erb +3 -3
  43. data/app/cells/decidim/user_profile_cell.rb +2 -1
  44. data/app/cells/decidim/version_author/show.erb +4 -4
  45. data/app/cells/decidim/version_author_cell.rb +11 -0
  46. data/app/cells/decidim/versions_list_item/show.erb +1 -1
  47. data/app/commands/decidim/attachment_attributes_methods.rb +18 -0
  48. data/app/commands/decidim/attachment_methods.rb +2 -1
  49. data/app/commands/decidim/create_follow.rb +4 -1
  50. data/app/commands/decidim/create_omniauth_registration.rb +6 -1
  51. data/app/commands/decidim/destroy_account.rb +1 -1
  52. data/app/commands/decidim/gallery_methods.rb +2 -1
  53. data/app/commands/decidim/messaging/start_conversation.rb +2 -2
  54. data/app/commands/decidim/multiple_attachments_methods.rb +2 -1
  55. data/app/commands/decidim/update_account.rb +6 -2
  56. data/app/commands/decidim/update_user_group.rb +1 -2
  57. data/app/controllers/concerns/decidim/amendments_controller.rb +1 -0
  58. data/app/controllers/concerns/decidim/force_authentication.rb +0 -1
  59. data/app/controllers/concerns/decidim/impersonate_users.rb +12 -4
  60. data/app/controllers/concerns/decidim/needs_permission.rb +1 -0
  61. data/app/controllers/decidim/account_controller.rb +2 -2
  62. data/app/controllers/decidim/application_controller.rb +2 -0
  63. data/app/controllers/decidim/data_portability_controller.rb +2 -14
  64. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
  65. data/app/controllers/decidim/free_resource_authorization_modals_controller.rb +33 -0
  66. data/app/controllers/decidim/links_controller.rb +42 -0
  67. data/app/controllers/decidim/messaging/conversations_controller.rb +5 -2
  68. data/app/controllers/decidim/open_data_controller.rb +3 -9
  69. data/app/controllers/decidim/profiles_controller.rb +1 -7
  70. data/app/controllers/decidim/timeouts_controller.rb +10 -5
  71. data/app/controllers/decidim/user_activities_controller.rb +1 -0
  72. data/app/forms/decidim/account_form.rb +2 -1
  73. data/app/forms/decidim/messaging/conversation_form.rb +1 -1
  74. data/app/forms/decidim/notifications_settings_form.rb +3 -14
  75. data/app/forms/url_validator.rb +2 -0
  76. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +5 -2
  77. data/app/helpers/decidim/action_authorization_helper.rb +7 -2
  78. data/app/helpers/decidim/amendments_helper.rb +0 -10
  79. data/app/helpers/decidim/attachments_helper.rb +1 -1
  80. data/app/helpers/decidim/check_boxes_tree_helper.rb +28 -10
  81. data/app/helpers/decidim/decidim_form_helper.rb +0 -4
  82. data/app/helpers/decidim/external_domain_helper.rb +13 -0
  83. data/app/helpers/decidim/layout_helper.rb +30 -8
  84. data/app/helpers/decidim/map_helper.rb +4 -3
  85. data/app/helpers/decidim/menu_helper.rb +4 -2
  86. data/app/helpers/decidim/user_group_helper.rb +22 -0
  87. data/app/jobs/decidim/application_job.rb +5 -0
  88. data/app/jobs/decidim/data_portability_export_job.rb +1 -2
  89. data/app/jobs/decidim/export_job.rb +1 -1
  90. data/app/jobs/decidim/export_participatory_space_job.rb +1 -1
  91. data/app/jobs/decidim/machine_translation_fields_job.rb +1 -1
  92. data/app/jobs/decidim/machine_translation_resource_job.rb +10 -6
  93. data/app/jobs/decidim/machine_translation_save_job.rb +1 -1
  94. data/app/jobs/decidim/open_data_job.rb +2 -2
  95. data/app/mailers/decidim/application_mailer.rb +1 -1
  96. data/app/mailers/decidim/reported_mailer.rb +1 -1
  97. data/app/models/decidim/attachment.rb +18 -11
  98. data/app/models/decidim/authorization.rb +3 -5
  99. data/app/models/decidim/content_block.rb +30 -44
  100. data/app/models/decidim/content_block_attachment.rb +35 -0
  101. data/app/models/decidim/impersonation_log.rb +8 -0
  102. data/app/models/decidim/messaging/conversation.rb +2 -0
  103. data/app/models/decidim/messaging/message.rb +2 -0
  104. data/app/models/decidim/messaging/participation.rb +2 -0
  105. data/app/models/decidim/messaging/receipt.rb +2 -0
  106. data/app/models/decidim/oauth_application.rb +2 -2
  107. data/app/models/decidim/organization.rb +16 -20
  108. data/app/models/decidim/user.rb +16 -12
  109. data/app/models/decidim/user_base_entity.rb +2 -2
  110. data/app/models/decidim/user_group.rb +20 -1
  111. data/app/packs/entrypoints/decidim_conference_diploma.js +2 -0
  112. data/app/packs/entrypoints/decidim_conference_diploma.scss +1 -0
  113. data/app/packs/entrypoints/decidim_core.js +69 -0
  114. data/app/packs/entrypoints/decidim_core.scss +1 -0
  115. data/app/packs/entrypoints/decidim_email.js +1 -0
  116. data/app/packs/entrypoints/decidim_email.scss +1 -0
  117. data/app/packs/entrypoints/decidim_geocoding_provider_here.js +1 -0
  118. data/app/packs/entrypoints/decidim_geocoding_provider_photon.js +1 -0
  119. data/app/packs/entrypoints/decidim_map.js +1 -0
  120. data/app/packs/entrypoints/decidim_map.scss +1 -0
  121. data/app/packs/entrypoints/decidim_map_provider_default.js +2 -0
  122. data/app/packs/entrypoints/decidim_map_provider_here.js +2 -0
  123. data/app/packs/entrypoints/decidim_widget.js +1 -0
  124. data/app/{assets → packs}/fonts/decidim/Roboto-Regular.eot +0 -0
  125. data/app/{assets → packs}/fonts/decidim/Roboto-Regular.svg +0 -0
  126. data/app/{assets → packs}/fonts/decidim/Roboto-Regular.ttf +0 -0
  127. data/app/{assets → packs}/fonts/decidim/Roboto-Regular.woff +0 -0
  128. data/app/{assets → packs}/fonts/decidim/Roboto-Regular.woff2 +0 -0
  129. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_400.eot +0 -0
  130. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_400.svg +0 -0
  131. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_400.ttf +0 -0
  132. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_400.woff +0 -0
  133. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_400.woff2 +0 -0
  134. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_600.eot +0 -0
  135. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_600.svg +0 -0
  136. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_600.ttf +0 -0
  137. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_600.woff +0 -0
  138. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_600.woff2 +0 -0
  139. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_900.eot +0 -0
  140. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_900.svg +0 -0
  141. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_900.ttf +0 -0
  142. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_900.woff +0 -0
  143. data/app/{assets → packs}/fonts/decidim/Source_Sans_Pro_900.woff2 +0 -0
  144. data/app/{assets → packs}/images/decidim/avatar-multiuser.png +0 -0
  145. data/app/{assets → packs}/images/decidim/brands/google.svg +0 -0
  146. data/app/{assets → packs}/images/decidim/cc-badge.png +0 -0
  147. data/app/{assets → packs}/images/decidim/decidim-logo.svg +0 -0
  148. data/app/{assets → packs}/images/decidim/default-avatar.svg +0 -0
  149. data/app/{assets/images/decidim/gamification/badges/followers.svg → packs/images/decidim/gamification/badges/decidim_gamification_badges_followers.svg} +0 -0
  150. data/app/{assets/images/decidim/gamification/badges/invitations.svg → packs/images/decidim/gamification/badges/decidim_gamification_badges_invitations.svg} +0 -0
  151. data/app/{assets → packs}/images/decidim/icons.svg +0 -0
  152. data/app/{assets → packs}/images/decidim/pattern.png +0 -0
  153. data/app/{assets → packs}/images/decidim/placeholder.jpg +0 -0
  154. data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
  155. data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
  156. data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
  157. data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
  158. data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
  159. data/app/packs/images/decidim/vendor/social-share-button/delicious.svg +13 -0
  160. data/app/packs/images/decidim/vendor/social-share-button/douban.svg +8 -0
  161. data/app/packs/images/decidim/vendor/social-share-button/email.svg +8 -0
  162. data/app/packs/images/decidim/vendor/social-share-button/facebook.svg +8 -0
  163. data/app/packs/images/decidim/vendor/social-share-button/google_bookmark.svg +8 -0
  164. data/app/packs/images/decidim/vendor/social-share-button/google_plus.svg +10 -0
  165. data/app/packs/images/decidim/vendor/social-share-button/hacker_news.svg +69 -0
  166. data/app/packs/images/decidim/vendor/social-share-button/linkedin.svg +8 -0
  167. data/app/packs/images/decidim/vendor/social-share-button/odnoklassniki.svg +1 -0
  168. data/app/packs/images/decidim/vendor/social-share-button/pinterest.svg +8 -0
  169. data/app/packs/images/decidim/vendor/social-share-button/qq.svg +8 -0
  170. data/app/packs/images/decidim/vendor/social-share-button/reddit.svg +6 -0
  171. data/app/packs/images/decidim/vendor/social-share-button/telegram.svg +12 -0
  172. data/app/packs/images/decidim/vendor/social-share-button/tumblr.svg +8 -0
  173. data/app/packs/images/decidim/vendor/social-share-button/twitter.svg +8 -0
  174. data/app/packs/images/decidim/vendor/social-share-button/vkontakte.svg +23 -0
  175. data/app/packs/images/decidim/vendor/social-share-button/wechat.svg +8 -0
  176. data/app/packs/images/decidim/vendor/social-share-button/weibo.svg +10 -0
  177. data/app/packs/images/decidim/vendor/social-share-button/whatsapp.svg +10 -0
  178. data/app/packs/images/decidim/vendor/social-share-button/xing.svg +79 -0
  179. data/app/{assets/javascripts/decidim/account_form.js.es6 → packs/src/decidim/account_form.js} +0 -0
  180. data/app/{assets/javascripts/decidim/ajax_modals.js.es6 → packs/src/decidim/ajax_modals.js} +0 -0
  181. data/app/packs/src/decidim/append_elements.js +6 -0
  182. data/app/{assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 → packs/src/decidim/append_redirect_url_to_modals.js} +0 -1
  183. data/app/packs/src/decidim/callout.js +16 -0
  184. data/app/packs/src/decidim/check_boxes_tree.js +185 -0
  185. data/app/packs/src/decidim/clipboard.js +119 -0
  186. data/app/packs/src/decidim/conferences.js +15 -0
  187. data/app/packs/src/decidim/configuration.js +17 -0
  188. data/app/packs/src/decidim/confirm.js +171 -0
  189. data/app/{assets/javascripts/decidim/conversations.js.es6 → packs/src/decidim/conversations.js} +2 -2
  190. data/app/packs/src/decidim/data_picker.js +272 -0
  191. data/app/packs/src/decidim/decidim_application.js +0 -0
  192. data/app/packs/src/decidim/delayed.js +23 -0
  193. data/app/{assets/javascripts/decidim/diff_mode_dropdown.js.es6 → packs/src/decidim/diff_mode_dropdown.js} +0 -0
  194. data/app/packs/src/decidim/dropdowns_menus.js +29 -0
  195. data/app/packs/src/decidim/editor.js +72 -0
  196. data/app/packs/src/decidim/editor/attribute_diff.js +28 -0
  197. data/app/packs/src/decidim/editor/history_override.js +110 -0
  198. data/app/packs/src/decidim/editor/linebreak_module.js +183 -0
  199. data/app/packs/src/decidim/editor/modified_backspace_offset1.js +96 -0
  200. data/app/packs/src/decidim/editor/modified_backspace_offset_any.js +46 -0
  201. data/app/packs/src/decidim/editor/modified_enter.js +116 -0
  202. data/app/packs/src/decidim/external_domain_warning.js +33 -0
  203. data/app/packs/src/decidim/external_link.js +56 -0
  204. data/app/{assets/javascripts/decidim/floating_help.js.es6 → packs/src/decidim/floating_help.js} +0 -0
  205. data/app/packs/src/decidim/form_datepicker.js +21 -0
  206. data/app/{assets/javascripts → packs/src}/decidim/form_filter.component.test.js +8 -9
  207. data/app/packs/src/decidim/form_filter.component_for_testing.js +7 -0
  208. data/app/packs/src/decidim/form_filter.js +319 -0
  209. data/app/packs/src/decidim/form_validator.js +56 -0
  210. data/app/packs/src/decidim/foundation_datepicker_locales.js +65 -0
  211. data/app/{assets/javascripts/decidim/gallery.js.es6 → packs/src/decidim/gallery.js} +0 -0
  212. data/app/packs/src/decidim/geocoding.js +54 -0
  213. data/app/packs/src/decidim/geocoding/attach_input.js +127 -0
  214. data/app/packs/src/decidim/geocoding/coordinate_input.js +21 -0
  215. data/app/packs/src/decidim/geocoding/format_address.js +27 -0
  216. data/app/packs/src/decidim/geocoding/provider/here.js +101 -0
  217. data/app/packs/src/decidim/geocoding/provider/photon.js +71 -0
  218. data/app/packs/src/decidim/history.js +44 -0
  219. data/app/packs/src/decidim/icon.js +51 -0
  220. data/app/{assets/javascripts/decidim/identity_selector_dialog.js.es6 → packs/src/decidim/identity_selector_dialog.js} +2 -3
  221. data/app/packs/src/decidim/impersonation.js +23 -0
  222. data/app/packs/src/decidim/index.js +69 -0
  223. data/app/packs/src/decidim/input_autojump.js +38 -0
  224. data/app/packs/src/decidim/input_character_counter.js +121 -0
  225. data/app/packs/src/decidim/input_emoji.js +33 -0
  226. data/app/{assets/javascripts/decidim/input_hashtags.js.es6 → packs/src/decidim/input_hashtags.js} +2 -1
  227. data/app/{assets/javascripts/decidim/input_mentions.js.es6 → packs/src/decidim/input_mentions.js} +10 -3
  228. data/app/{assets/javascripts/decidim/input_multiple_mentions.js.es6 → packs/src/decidim/input_multiple_mentions.js} +5 -3
  229. data/app/{assets/javascripts/decidim/input_tags.js.es6 → packs/src/decidim/input_tags.js} +1 -1
  230. data/app/packs/src/decidim/map.js +37 -0
  231. data/app/packs/src/decidim/map/controller.js +78 -0
  232. data/app/packs/src/decidim/map/controller/drag_marker.js +50 -0
  233. data/app/packs/src/decidim/map/controller/markers.js +75 -0
  234. data/app/packs/src/decidim/map/controller/static.js +44 -0
  235. data/app/packs/src/decidim/map/controller_registry.js +17 -0
  236. data/app/packs/src/decidim/map/factory.js +44 -0
  237. data/app/packs/src/decidim/map/icon.js +31 -0
  238. data/app/packs/src/decidim/map/integration/forms.js +29 -0
  239. data/app/packs/src/decidim/map/legacy.js +80 -0
  240. data/app/packs/src/decidim/map/provider/default.js +12 -0
  241. data/app/packs/src/decidim/map/provider/here.js +13 -0
  242. data/app/{assets/javascripts/decidim/notifications.js.es6 → packs/src/decidim/notifications.js} +0 -0
  243. data/app/{assets/javascripts/decidim/represent_user_group.js.es6 → packs/src/decidim/represent_user_group.js} +0 -0
  244. data/app/{assets/javascripts/decidim/responsive_horizontal_tabs.js.es6 → packs/src/decidim/responsive_horizontal_tabs.js} +0 -0
  245. data/app/packs/src/decidim/results_listing.js +41 -0
  246. data/app/packs/src/decidim/security/selfxss_warning.js +16 -0
  247. data/app/packs/src/decidim/session_timeouter.js +133 -0
  248. data/app/{assets/javascripts/decidim/slug_form.js.es6 → packs/src/decidim/slug_form.js} +0 -0
  249. data/app/{assets/javascripts → packs/src}/decidim/start_conversation_dialog.js +1 -1
  250. data/app/{assets/javascripts/decidim/tooltip_keep_on_hover.js.es6 → packs/src/decidim/tooltip_keep_on_hover.js} +0 -0
  251. data/app/{assets/javascripts/decidim/user_registrations.js.es6 → packs/src/decidim/user_registrations.js} +0 -0
  252. data/app/packs/src/decidim/vendor/foundation-datepicker.js +1431 -0
  253. data/app/packs/src/decidim/vendor/jquery-tmpl.js +488 -0
  254. data/{vendor/assets/javascripts → app/packs/src/decidim/vendor}/leaflet-tilelayer-here.js +1 -0
  255. data/{vendor/assets/javascripts → app/packs/src/decidim/vendor}/modernizr.js +3 -1
  256. data/{vendor/assets/javascripts → app/packs/src/decidim/vendor}/tribute.js +2 -0
  257. data/app/packs/src/decidim/vizzs.js +1 -0
  258. data/app/{assets/javascripts/decidim/vizzs/areachart.js.es6 → packs/src/decidim/vizzs/areachart.js} +4 -3
  259. data/app/{assets/javascripts/decidim/vizzs/linechart.js.es6 → packs/src/decidim/vizzs/linechart.js} +3 -3
  260. data/app/{assets/javascripts/decidim/vizzs/metrics.js.es6 → packs/src/decidim/vizzs/metrics.js} +3 -3
  261. data/app/packs/src/decidim/vizzs/renders.js +9 -0
  262. data/app/{assets/javascripts/decidim/vizzs/rowchart.js.es6 → packs/src/decidim/vizzs/rowchart.js} +3 -3
  263. data/app/{assets/javascripts/decidim/widget.js.es6 → packs/src/decidim/widget.js} +0 -0
  264. data/app/{assets → packs}/stylesheets/decidim/_decidim-settings.scss +2 -0
  265. data/app/packs/stylesheets/decidim/_decidim.scss +19 -0
  266. data/app/{assets/stylesheets/decidim/editor.scss → packs/stylesheets/decidim/_editor.scss} +3 -3
  267. data/app/{assets → packs}/stylesheets/decidim/_properties.scss +0 -0
  268. data/app/{assets → packs}/stylesheets/decidim/_variables.scss +2 -2
  269. data/app/packs/stylesheets/decidim/application.scss +9 -0
  270. data/app/{assets/stylesheets/decidim/conference-diploma.css.scss → packs/stylesheets/decidim/conference-diploma.scss} +8 -8
  271. data/app/packs/stylesheets/decidim/decidim_application.scss +7 -0
  272. data/app/{assets → packs}/stylesheets/decidim/email.scss +1 -1
  273. data/app/{assets → packs}/stylesheets/decidim/extras/_add_comments.scss +0 -0
  274. data/app/{assets → packs}/stylesheets/decidim/extras/_announcement.scss +0 -0
  275. data/app/{assets → packs}/stylesheets/decidim/extras/_collection-sort-controls.scss +0 -0
  276. data/app/{assets → packs}/stylesheets/decidim/extras/_embed.scss +0 -0
  277. data/app/{assets → packs}/stylesheets/decidim/extras/_external-links.scss +16 -0
  278. data/app/packs/stylesheets/decidim/extras/_extras.scss +16 -0
  279. data/app/{assets → packs}/stylesheets/decidim/extras/_impersonation-bar.scss +0 -0
  280. data/app/{assets → packs}/stylesheets/decidim/extras/_label-required.scss +0 -0
  281. data/app/{assets → packs}/stylesheets/decidim/extras/_leaflet.scss +0 -0
  282. data/app/{assets → packs}/stylesheets/decidim/extras/_meeting-registrations.scss +5 -0
  283. data/app/{assets → packs}/stylesheets/decidim/extras/_proposal_form.scss +0 -0
  284. data/app/{assets → packs}/stylesheets/decidim/extras/_quill.scss +0 -0
  285. data/app/{assets → packs}/stylesheets/decidim/extras/_reference.scss +0 -0
  286. data/app/{assets → packs}/stylesheets/decidim/extras/_results-per-page.scss +0 -0
  287. data/app/{assets → packs}/stylesheets/decidim/extras/_social_icons_mini.scss +0 -0
  288. data/app/{assets/stylesheets/decidim/extras/_social_share.css.scss → packs/stylesheets/decidim/extras/_social_share.scss} +6 -3
  289. data/app/{assets → packs}/stylesheets/decidim/extras/_status-labels.scss +0 -0
  290. data/app/{assets → packs}/stylesheets/decidim/layouts/_highlighted_banner.scss +0 -0
  291. data/app/{assets → packs}/stylesheets/decidim/layouts/_home.scss +35 -46
  292. data/app/packs/stylesheets/decidim/layouts/_layouts.scss +5 -0
  293. data/app/{assets → packs}/stylesheets/decidim/layouts/_logo.scss +0 -0
  294. data/app/{assets → packs}/stylesheets/decidim/layouts/_user.scss +0 -0
  295. data/app/{assets → packs}/stylesheets/decidim/layouts/_view.scss +0 -0
  296. data/app/packs/stylesheets/decidim/map.scss +3 -0
  297. data/app/{assets → packs}/stylesheets/decidim/modules/_address.scss +0 -0
  298. data/app/{assets → packs}/stylesheets/decidim/modules/_author-avatar.scss +1 -1
  299. data/app/{assets → packs}/stylesheets/decidim/modules/_badges.scss +0 -0
  300. data/app/{assets → packs}/stylesheets/decidim/modules/_block-banner.scss +0 -0
  301. data/app/{assets → packs}/stylesheets/decidim/modules/_buttons.scss +1 -1
  302. data/app/{assets → packs}/stylesheets/decidim/modules/_callout.scss +0 -0
  303. data/app/{assets → packs}/stylesheets/decidim/modules/_card-grid.scss +0 -0
  304. data/app/{assets → packs}/stylesheets/decidim/modules/_cards.scss +8 -8
  305. data/app/{assets → packs}/stylesheets/decidim/modules/_collapsible-list.scss +0 -0
  306. data/app/{assets → packs}/stylesheets/decidim/modules/_comments.scss +46 -12
  307. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-diploma.scss +9 -9
  308. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-media.scss +3 -1
  309. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-nav.scss +0 -0
  310. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-programme.scss +0 -0
  311. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-registration.scss +0 -0
  312. data/app/{assets → packs}/stylesheets/decidim/modules/_conference-speaker.scss +0 -0
  313. data/app/{assets → packs}/stylesheets/decidim/modules/_confirm.scss +0 -0
  314. data/app/{assets → packs}/stylesheets/decidim/modules/_conversation.scss +6 -1
  315. data/app/{assets → packs}/stylesheets/decidim/modules/_cookie-bar.scss +0 -0
  316. data/app/{assets → packs}/stylesheets/decidim/modules/_data-picker.scss +0 -0
  317. data/app/{assets → packs}/stylesheets/decidim/modules/_datepicker.scss +0 -0
  318. data/app/{assets → packs}/stylesheets/decidim/modules/_definition-data.scss +0 -0
  319. data/app/{assets → packs}/stylesheets/decidim/modules/_docs-manager.scss +0 -0
  320. data/app/{assets → packs}/stylesheets/decidim/modules/_extra.scss +0 -0
  321. data/app/{assets → packs}/stylesheets/decidim/modules/_filter-tags.scss +0 -0
  322. data/app/{assets → packs}/stylesheets/decidim/modules/_filters.scss +1 -1
  323. data/app/{assets → packs}/stylesheets/decidim/modules/_fingerprint.scss +0 -0
  324. data/app/{assets → packs}/stylesheets/decidim/modules/_flag.scss +0 -0
  325. data/app/{assets → packs}/stylesheets/decidim/modules/_floating-helper.scss +2 -2
  326. data/app/{assets → packs}/stylesheets/decidim/modules/_footer.scss +0 -0
  327. data/app/{assets → packs}/stylesheets/decidim/modules/_forms.scss +18 -1
  328. data/app/{assets → packs}/stylesheets/decidim/modules/_help.scss +0 -0
  329. data/app/{assets → packs}/stylesheets/decidim/modules/_horizontal-tabs.scss +1 -1
  330. data/app/{assets → packs}/stylesheets/decidim/modules/_hover-section.scss +0 -0
  331. data/app/{assets → packs}/stylesheets/decidim/modules/_icons.scss +0 -0
  332. data/app/{assets → packs}/stylesheets/decidim/modules/_inline-filters.scss +1 -1
  333. data/app/{assets → packs}/stylesheets/decidim/modules/_input-gallery.scss +0 -0
  334. data/app/{assets → packs}/stylesheets/decidim/modules/_input-mentions.scss +1 -1
  335. data/app/{assets → packs}/stylesheets/decidim/modules/_input-multiple-mentions.scss +1 -1
  336. data/app/{assets → packs}/stylesheets/decidim/modules/_input-tags.scss +2 -2
  337. data/app/{assets → packs}/stylesheets/decidim/modules/_layout.scss +0 -0
  338. data/app/{assets → packs}/stylesheets/decidim/modules/_list-docs.scss +0 -0
  339. data/app/{assets → packs}/stylesheets/decidim/modules/_list-request.scss +1 -1
  340. data/app/{assets → packs}/stylesheets/decidim/modules/_loading-spinner.scss +0 -0
  341. data/app/{assets → packs}/stylesheets/decidim/modules/_main-container.scss +0 -0
  342. data/app/{assets → packs}/stylesheets/decidim/modules/_map.scss +1 -1
  343. data/app/{assets → packs}/stylesheets/decidim/modules/_margins.scss +0 -0
  344. data/app/{assets → packs}/stylesheets/decidim/modules/_messages.scss +0 -0
  345. data/app/packs/stylesheets/decidim/modules/_modules.scss +92 -0
  346. data/app/{assets → packs}/stylesheets/decidim/modules/_navbar.scss +3 -3
  347. data/app/{assets → packs}/stylesheets/decidim/modules/_notification.scss +0 -0
  348. data/app/{assets → packs}/stylesheets/decidim/modules/_omnipresent_banner.scss +0 -0
  349. data/app/{assets → packs}/stylesheets/decidim/modules/_opinion-toggle.scss +0 -0
  350. data/app/{assets → packs}/stylesheets/decidim/modules/_order-by.scss +0 -4
  351. data/app/{assets → packs}/stylesheets/decidim/modules/_pagination.scss +0 -0
  352. data/app/{assets → packs}/stylesheets/decidim/modules/_process-header.scss +0 -0
  353. data/app/{assets → packs}/stylesheets/decidim/modules/_process-info.scss +0 -0
  354. data/app/{assets → packs}/stylesheets/decidim/modules/_process-nav.scss +3 -3
  355. data/app/{assets → packs}/stylesheets/decidim/modules/_process-phase.scss +1 -1
  356. data/app/{assets → packs}/stylesheets/decidim/modules/_progress-bar.scss +0 -0
  357. data/app/{assets → packs}/stylesheets/decidim/modules/_reference.scss +0 -0
  358. data/app/{assets → packs}/stylesheets/decidim/modules/_reveal.scss +15 -0
  359. data/app/{assets → packs}/stylesheets/decidim/modules/_share.scss +0 -0
  360. data/app/{assets → packs}/stylesheets/decidim/modules/_signup.scss +0 -0
  361. data/app/{assets → packs}/stylesheets/decidim/modules/_space-stats.scss +0 -0
  362. data/app/{assets → packs}/stylesheets/decidim/modules/_static-pages.scss +0 -0
  363. data/app/packs/stylesheets/decidim/modules/_statistics.scss +53 -0
  364. data/app/{assets → packs}/stylesheets/decidim/modules/_status-labels.scss +0 -0
  365. data/app/{assets → packs}/stylesheets/decidim/modules/_sticky.scss +0 -0
  366. data/app/{assets → packs}/stylesheets/decidim/modules/_tags.scss +0 -0
  367. data/app/{assets → packs}/stylesheets/decidim/modules/_timeline.scss +2 -2
  368. data/app/{assets → packs}/stylesheets/decidim/modules/_title-action.scss +0 -0
  369. data/app/packs/stylesheets/decidim/modules/_toggle.scss +9 -0
  370. data/app/{assets → packs}/stylesheets/decidim/modules/_typography.scss +5 -4
  371. data/app/{assets → packs}/stylesheets/decidim/modules/_user-form.scss +0 -0
  372. data/app/{assets → packs}/stylesheets/decidim/modules/_versions.scss +0 -0
  373. data/app/{assets → packs}/stylesheets/decidim/modules/_video.scss +0 -0
  374. data/app/{assets → packs}/stylesheets/decidim/modules/_wizard-steps.scss +0 -0
  375. data/app/packs/stylesheets/decidim/plugins/MarkerCluster.Default.scss +67 -0
  376. data/app/packs/stylesheets/decidim/plugins/MarkerCluster.scss +15 -0
  377. data/app/packs/stylesheets/decidim/plugins/leaflet.scss +700 -0
  378. data/app/packs/stylesheets/decidim/utils/_fontface.scss +29 -0
  379. data/app/{assets → packs}/stylesheets/decidim/utils/_helpers.scss +13 -0
  380. data/app/{assets → packs}/stylesheets/decidim/utils/_keyframes.scss +0 -0
  381. data/app/{assets → packs}/stylesheets/decidim/utils/_mixins.scss +5 -5
  382. data/app/{assets → packs}/stylesheets/decidim/utils/_settings.scss +10 -4
  383. data/app/{assets → packs}/stylesheets/decidim/utils/_toggle-expand.scss +0 -0
  384. data/app/packs/stylesheets/decidim/vendor/_social_share_button.scss +129 -0
  385. data/app/packs/stylesheets/decidim/vizzs.scss +8 -0
  386. data/app/{assets → packs}/stylesheets/decidim/vizzs/_areachart.scss +0 -0
  387. data/app/{assets → packs}/stylesheets/decidim/vizzs/_chart-tooltip.scss +0 -0
  388. data/app/{assets → packs}/stylesheets/decidim/vizzs/_linechart.scss +1 -1
  389. data/app/{assets → packs}/stylesheets/decidim/vizzs/_orgchart.scss +0 -0
  390. data/app/{assets → packs}/stylesheets/decidim/vizzs/_rowchart.scss +1 -1
  391. data/app/packs/stylesheets/decidim/vizzs/_vizzs.scss +5 -0
  392. data/app/{assets → packs}/stylesheets/foundation-overrides/components/_button-group.scss +3 -1
  393. data/app/presenters/decidim/attachment_presenter.rb +1 -6
  394. data/app/presenters/decidim/home_stats_presenter.rb +6 -35
  395. data/app/presenters/decidim/menu_item_presenter.rb +12 -12
  396. data/app/presenters/decidim/menu_presenter.rb +2 -3
  397. data/app/presenters/decidim/nil_presenter.rb +1 -1
  398. data/app/presenters/decidim/official_author_presenter.rb +1 -1
  399. data/app/presenters/decidim/stats_presenter.rb +32 -0
  400. data/app/presenters/decidim/user_group_presenter.rb +0 -2
  401. data/app/presenters/decidim/user_presenter.rb +14 -2
  402. data/app/queries/decidim/metric_manage.rb +3 -3
  403. data/app/queries/decidim/similar_emendations.rb +1 -1
  404. data/app/queries/decidim/stats_users_count.rb +1 -2
  405. data/app/serializers/decidim/exporters/participatory_space_components_serializer.rb +2 -1
  406. data/app/serializers/decidim/exporters/serializer.rb +29 -0
  407. data/app/services/decidim/action_authorizer.rb +3 -2
  408. data/app/services/decidim/activity_search.rb +46 -1
  409. data/app/services/decidim/data_portability_exporter.rb +1 -1
  410. data/app/services/decidim/zip_stream/writer.rb +39 -0
  411. data/app/uploaders/decidim/application_uploader.rb +68 -27
  412. data/app/uploaders/decidim/attachment_uploader.rb +11 -57
  413. data/app/uploaders/decidim/avatar_uploader.rb +8 -14
  414. data/app/uploaders/decidim/cw/application_uploader.rb +77 -0
  415. data/app/uploaders/decidim/cw/attachment_uploader.rb +56 -0
  416. data/app/uploaders/decidim/cw/avatar_uploader.rb +24 -0
  417. data/app/uploaders/decidim/cw/banner_image_uploader.rb +7 -0
  418. data/app/uploaders/decidim/{data_portability_uploader.rb → cw/data_portability_uploader.rb} +1 -1
  419. data/app/uploaders/decidim/cw/downloader.rb +9 -0
  420. data/app/uploaders/decidim/cw/hero_image_uploader.rb +10 -0
  421. data/app/uploaders/decidim/cw/homepage_image_uploader.rb +14 -0
  422. data/app/uploaders/decidim/cw/image_uploader.rb +78 -0
  423. data/app/uploaders/decidim/cw/newsletter_template_image_uploader.rb +38 -0
  424. data/app/uploaders/decidim/cw/oauth_application_logo_uploader.rb +10 -0
  425. data/app/uploaders/decidim/cw/official_image_footer_uploader.rb +10 -0
  426. data/app/uploaders/decidim/cw/official_image_header_uploader.rb +10 -0
  427. data/app/uploaders/decidim/{open_data_uploader.rb → cw/open_data_uploader.rb} +1 -1
  428. data/app/uploaders/decidim/cw/organization_favicon_uploader.rb +18 -0
  429. data/app/uploaders/decidim/cw/organization_logo_uploader.rb +10 -0
  430. data/app/uploaders/decidim/cw/record_image_uploader.rb +15 -0
  431. data/app/uploaders/decidim/hero_image_uploader.rb +3 -1
  432. data/app/uploaders/decidim/homepage_image_uploader.rb +2 -2
  433. data/app/uploaders/decidim/image_uploader.rb +11 -47
  434. data/app/uploaders/decidim/newsletter_template_image_uploader.rb +3 -1
  435. data/app/uploaders/decidim/oauth_application_logo_uploader.rb +3 -1
  436. data/app/uploaders/decidim/official_image_footer_uploader.rb +3 -1
  437. data/app/uploaders/decidim/official_image_header_uploader.rb +3 -1
  438. data/app/uploaders/decidim/organization_favicon_uploader.rb +3 -3
  439. data/app/uploaders/decidim/organization_logo_uploader.rb +2 -2
  440. data/app/validators/organization_present_validator.rb +15 -0
  441. data/app/validators/uploader_content_type_validator.rb +2 -4
  442. data/app/validators/uploader_image_dimensions_validator.rb +49 -0
  443. data/app/views/decidim/account/show.html.erb +9 -1
  444. data/app/views/decidim/amendments/edit_draft.html.erb +1 -1
  445. data/app/views/decidim/amendments/new.html.erb +1 -1
  446. data/app/views/decidim/application/_attachments.html.erb +2 -2
  447. data/app/views/decidim/application/_collection.html.erb +8 -2
  448. data/app/views/decidim/application/_document.html.erb +2 -2
  449. data/app/views/decidim/application/_documents.html.erb +5 -3
  450. data/app/views/decidim/application/_photos.html.erb +1 -1
  451. data/app/views/decidim/block_user_mailer/notify.html.erb +4 -4
  452. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +1 -1
  453. data/app/views/decidim/export_mailer/data_portability_export.html.erb +7 -2
  454. data/app/views/decidim/export_mailer/export.html.erb +3 -1
  455. data/app/views/decidim/homepage/show.html.erb +1 -0
  456. data/app/views/decidim/last_activities/index.html.erb +0 -2
  457. data/app/views/decidim/links/_modal.html.erb +22 -0
  458. data/app/views/decidim/links/_warning.html.erb +4 -0
  459. data/app/views/decidim/links/new.html.erb +22 -0
  460. data/app/views/decidim/links/new.js.erb +8 -0
  461. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_conversation.html.erb +5 -5
  462. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_message.html.erb +5 -5
  463. data/app/views/decidim/messaging/conversation_mailer/new_conversation.html.erb +4 -4
  464. data/app/views/decidim/messaging/conversation_mailer/new_group_conversation.html.erb +5 -5
  465. data/app/views/decidim/messaging/conversation_mailer/new_group_message.html.erb +5 -5
  466. data/app/views/decidim/messaging/conversation_mailer/new_message.html.erb +4 -4
  467. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +0 -1
  468. data/app/views/decidim/messaging/conversations/_conversation.html.erb +2 -2
  469. data/app/views/decidim/messaging/conversations/_messages.html.erb +1 -1
  470. data/app/views/decidim/messaging/conversations/_new_conversation_button.html.erb +0 -1
  471. data/app/views/decidim/messaging/conversations/_reply.html.erb +3 -2
  472. data/app/views/decidim/messaging/conversations/_show.html.erb +9 -7
  473. data/app/views/decidim/messaging/conversations/_start.html.erb +3 -2
  474. data/app/views/decidim/newsletters_opt_in_mailer/notify.html.erb +6 -6
  475. data/app/views/decidim/notification_mailer/event_received.html.erb +24 -7
  476. data/app/views/decidim/pages/_standalone.html.erb +8 -10
  477. data/app/views/decidim/reported_mailer/hide.html.erb +3 -3
  478. data/app/views/decidim/reported_mailer/report.html.erb +3 -3
  479. data/app/views/decidim/searches/index.html.erb +0 -2
  480. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +3 -3
  481. data/app/views/decidim/shared/_orders.html.erb +6 -6
  482. data/app/views/decidim/shared/_results_per_page.html.erb +6 -6
  483. data/app/views/decidim/shared/_share_modal.html.erb +13 -4
  484. data/app/views/decidim/shared/participatory_space_filters/_filters.html.erb +7 -4
  485. data/app/views/decidim/shared/participatory_space_filters/_show.html.erb +8 -6
  486. data/app/views/decidim/user_report_mailer/notify.html.erb +4 -4
  487. data/app/views/devise/mailer/confirmation_instructions.html.erb +4 -3
  488. data/app/views/devise/mailer/invitation_instructions.html.erb +5 -5
  489. data/app/views/devise/mailer/invite_admin.html.erb +5 -5
  490. data/app/views/devise/mailer/invite_collaborator.html.erb +5 -5
  491. data/app/views/devise/mailer/invite_private_user.html.erb +5 -5
  492. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +6 -5
  493. data/app/views/devise/mailer/password_change.html.erb +2 -2
  494. data/app/views/devise/mailer/reset_password_instructions.html.erb +6 -5
  495. data/app/views/devise/mailer/unlock_instructions.html.erb +4 -4
  496. data/app/views/layouts/decidim/_application.html.erb +3 -2
  497. data/app/views/layouts/decidim/_cookie_warning.html.erb +1 -1
  498. data/app/views/layouts/decidim/_cors.html.erb +8 -0
  499. data/app/views/layouts/decidim/_head.html.erb +2 -4
  500. data/app/views/layouts/decidim/_impersonation_warning.html.erb +0 -1
  501. data/app/views/layouts/decidim/_js_configuration.html.erb +12 -2
  502. data/app/views/layouts/decidim/_language_chooser.html.erb +5 -5
  503. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  504. data/app/views/layouts/decidim/_mailer_logo.html.erb +6 -2
  505. data/app/views/layouts/decidim/_main_footer.html.erb +2 -2
  506. data/app/views/layouts/decidim/_mini_footer.html.erb +2 -2
  507. data/app/views/layouts/decidim/_timeout_modal.html.erb +4 -3
  508. data/app/views/layouts/decidim/_user_menu.html.erb +6 -6
  509. data/app/views/layouts/decidim/_wrapper.html.erb +65 -60
  510. data/app/views/layouts/decidim/mailer.html.erb +3 -3
  511. data/app/views/layouts/decidim/newsletter_base.html.erb +1 -1
  512. data/app/views/layouts/decidim/widget.html.erb +4 -3
  513. data/config/assets.rb +16 -0
  514. data/config/initializers/devise.rb +1 -1
  515. data/config/locales/ar.yml +2 -18
  516. data/config/locales/bg.yml +2 -18
  517. data/config/locales/ca.yml +38 -18
  518. data/config/locales/cs.yml +40 -18
  519. data/config/locales/de.yml +25 -18
  520. data/config/locales/el.yml +2 -18
  521. data/config/locales/en.yml +41 -19
  522. data/config/locales/eo.yml +0 -2
  523. data/config/locales/es-MX.yml +25 -18
  524. data/config/locales/es-PY.yml +25 -18
  525. data/config/locales/es.yml +25 -18
  526. data/config/locales/eu.yml +2 -17
  527. data/config/locales/fi-plain.yml +40 -18
  528. data/config/locales/fi.yml +41 -19
  529. data/config/locales/fr-CA.yml +20 -18
  530. data/config/locales/fr-LU.yml +1676 -0
  531. data/config/locales/fr.yml +20 -18
  532. data/config/locales/gl.yml +36 -17
  533. data/config/locales/hu.yml +2 -18
  534. data/config/locales/id-ID.yml +2 -17
  535. data/config/locales/is-IS.yml +0 -7
  536. data/config/locales/it.yml +59 -19
  537. data/config/locales/ja.yml +132 -27
  538. data/config/locales/lb-LU.yml +1 -0
  539. data/config/locales/lv.yml +2 -17
  540. data/config/locales/nl.yml +32 -18
  541. data/config/locales/no.yml +2 -18
  542. data/config/locales/pl.yml +42 -33
  543. data/config/locales/pt-BR.yml +480 -20
  544. data/config/locales/pt.yml +2 -18
  545. data/config/locales/ro-RO.yml +40 -18
  546. data/config/locales/ru.yml +2 -15
  547. data/config/locales/sk.yml +2 -18
  548. data/config/locales/sl.yml +0 -3
  549. data/config/locales/sv.yml +25 -18
  550. data/config/locales/tr-TR.yml +2 -18
  551. data/config/locales/uk.yml +2 -14
  552. data/config/locales/zh-CN.yml +2 -18
  553. data/config/routes.rb +7 -0
  554. data/db/migrate/20170605162500_add_hierarchy_to_scopes.rb +1 -1
  555. data/db/migrate/20180810092428_move_organization_fields_to_hero_content_block.rb +5 -4
  556. data/db/migrate/20210210114657_add_external_domain_whitelist_to_organization.rb +15 -0
  557. data/db/migrate/20210309190009_create_active_storage_tables.active_storage.rb +29 -0
  558. data/db/migrate/20210407190753_allow_null_organization_logo_column_in_oauth_applications_table.rb +7 -0
  559. data/db/migrate/20210412120115_add_enable_participatory_space_filters_to_organization.rb +7 -0
  560. data/db/migrate/20210419165805_create_decidim_content_block_attachments.rb +10 -0
  561. data/db/migrate/20210629172525_fix_blocked_user_names_in_action_log.rb +45 -0
  562. data/db/seeds.rb +10 -3
  563. data/lib/decidim/action_authorization.rb +1 -1
  564. data/lib/decidim/api/functions/category_list.rb +31 -0
  565. data/lib/decidim/api/input_filters/category_input_filter.rb +18 -0
  566. data/lib/decidim/api/interfaces/categories_container_interface.rb +19 -0
  567. data/lib/decidim/carrier_wave_migrator_service.rb +295 -0
  568. data/lib/decidim/core.rb +27 -8
  569. data/lib/decidim/core/api.rb +3 -0
  570. data/lib/decidim/core/engine.rb +65 -56
  571. data/lib/decidim/core/test.rb +4 -0
  572. data/lib/decidim/core/test/factories.rb +2 -0
  573. data/lib/decidim/core/test/shared_examples/admin_log_presenter_examples.rb +3 -1
  574. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +2 -2
  575. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +34 -0
  576. data/lib/decidim/core/test/shared_examples/categories_container_examples.rb +22 -0
  577. data/lib/decidim/core/test/shared_examples/comments_examples.rb +189 -6
  578. data/lib/decidim/core/test/shared_examples/comments_reports_examples.rb +68 -0
  579. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +3 -3
  580. data/lib/decidim/core/test/shared_examples/has_attachments.rb +2 -2
  581. data/lib/decidim/core/test/shared_examples/logo_email.rb +3 -2
  582. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +1 -1
  583. data/lib/decidim/core/test/shared_examples/map_examples.rb +28 -11
  584. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +1 -0
  585. data/lib/decidim/core/test/shared_examples/share_link_examples.rb +50 -0
  586. data/lib/decidim/core/version.rb +1 -1
  587. data/lib/decidim/data_portability_serializers/data_portability_conversation_serializer.rb +1 -0
  588. data/lib/decidim/diffy_extension.rb +1 -1
  589. data/lib/decidim/events/email_event.rb +12 -0
  590. data/lib/decidim/exporters/csv.rb +1 -1
  591. data/lib/decidim/exporters/excel.rb +24 -20
  592. data/lib/decidim/exporters/json.rb +1 -1
  593. data/lib/decidim/file_validator_humanizer.rb +3 -2
  594. data/lib/decidim/filter_form_builder.rb +2 -2
  595. data/lib/decidim/fingerprintable.rb +2 -2
  596. data/lib/decidim/form_builder.rb +26 -20
  597. data/lib/decidim/gamification/badge.rb +1 -1
  598. data/lib/decidim/has_upload_validations.rb +37 -4
  599. data/lib/decidim/map/dynamic_map.rb +2 -2
  600. data/lib/decidim/map/provider/autocomplete/here.rb +1 -1
  601. data/lib/decidim/map/provider/autocomplete/osm.rb +1 -1
  602. data/lib/decidim/map/provider/dynamic_map/here.rb +1 -1
  603. data/lib/decidim/menu.rb +64 -1
  604. data/lib/decidim/menu_item.rb +5 -2
  605. data/lib/decidim/middleware/current_organization.rb +57 -0
  606. data/lib/decidim/middleware/strip_x_forwarded_host.rb +16 -0
  607. data/lib/decidim/participable.rb +41 -33
  608. data/lib/decidim/rails.rb +21 -0
  609. data/lib/decidim/resource_manifest.rb +13 -0
  610. data/lib/decidim/resourceable.rb +8 -0
  611. data/lib/decidim/searchable.rb +1 -1
  612. data/lib/decidim/traceable.rb +2 -3
  613. data/lib/decidim/translatable_resource.rb +1 -1
  614. data/lib/decidim/view_model.rb +1 -0
  615. data/lib/decidim/webpacker.rb +32 -0
  616. data/lib/decidim/webpacker/configuration.rb +89 -0
  617. data/lib/decidim/webpacker/postcss.config.js +16 -0
  618. data/lib/decidim/webpacker/runner.rb +24 -0
  619. data/lib/decidim/webpacker/webpack/base.js +6 -0
  620. data/lib/decidim/webpacker/webpack/custom.js +97 -0
  621. data/lib/decidim/webpacker/webpack/development.js +7 -0
  622. data/lib/decidim/webpacker/webpack/production.js +7 -0
  623. data/lib/decidim/webpacker/webpack/test.js +7 -0
  624. data/lib/decidim/webpacker/webpacker.yml +68 -0
  625. data/lib/gem_overrides/webpacker/runner.rb +9 -0
  626. data/lib/tasks/decidim_active_storage_migration_tasks.rake +43 -0
  627. data/lib/tasks/decidim_data_portability_tasks.rake +13 -67
  628. data/lib/tasks/decidim_tasks.rake +1 -1
  629. data/lib/tasks/decidim_webpacker_tasks.rake +166 -0
  630. metadata +417 -431
  631. data/app/assets/config/decidim_core_manifest.js +0 -25
  632. data/app/assets/javascripts/decidim.js.es6 +0 -82
  633. data/app/assets/javascripts/decidim/append_elements.js.es6 +0 -8
  634. data/app/assets/javascripts/decidim/assets.js.erb +0 -5
  635. data/app/assets/javascripts/decidim/callout.js.es6 +0 -18
  636. data/app/assets/javascripts/decidim/check_boxes_tree.js.es6 +0 -190
  637. data/app/assets/javascripts/decidim/conferences.js.es6 +0 -16
  638. data/app/assets/javascripts/decidim/configuration.js.es6 +0 -23
  639. data/app/assets/javascripts/decidim/confirm.js.es6 +0 -179
  640. data/app/assets/javascripts/decidim/core/bundle.js +0 -2
  641. data/app/assets/javascripts/decidim/core/bundle.js.map +0 -1
  642. data/app/assets/javascripts/decidim/core/extrapoly.js +0 -6
  643. data/app/assets/javascripts/decidim/data_picker.js.es6 +0 -273
  644. data/app/assets/javascripts/decidim/delayed.js.es6 +0 -26
  645. data/app/assets/javascripts/decidim/dropdowns_menus.js.es6 +0 -32
  646. data/app/assets/javascripts/decidim/editor.js.es6 +0 -83
  647. data/app/assets/javascripts/decidim/editor/history_override.js.es6 +0 -117
  648. data/app/assets/javascripts/decidim/editor/linebreak_module.js.es6 +0 -187
  649. data/app/assets/javascripts/decidim/editor/modified_backspace_offset1.js.es6 +0 -98
  650. data/app/assets/javascripts/decidim/editor/modified_backspace_offset_any.js.es6 +0 -48
  651. data/app/assets/javascripts/decidim/editor/modified_backspace_utils.js.es6 +0 -31
  652. data/app/assets/javascripts/decidim/editor/modified_enter.js.es6 +0 -123
  653. data/app/assets/javascripts/decidim/external_link.js.es6 +0 -69
  654. data/app/assets/javascripts/decidim/filters.js.es6 +0 -16
  655. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +0 -315
  656. data/app/assets/javascripts/decidim/form_validator.es6 +0 -61
  657. data/app/assets/javascripts/decidim/foundation.js.es6 +0 -28
  658. data/app/assets/javascripts/decidim/geocoding.js.es6 +0 -60
  659. data/app/assets/javascripts/decidim/geocoding/attach_input.js.es6 +0 -143
  660. data/app/assets/javascripts/decidim/geocoding/format_address.js.es6 +0 -29
  661. data/app/assets/javascripts/decidim/geocoding/provider/here.js.es6 +0 -107
  662. data/app/assets/javascripts/decidim/geocoding/provider/photon.js.es6 +0 -77
  663. data/app/assets/javascripts/decidim/history.js.es6 +0 -53
  664. data/app/assets/javascripts/decidim/icon.js.es6 +0 -42
  665. data/app/assets/javascripts/decidim/impersonation.js.es6 +0 -16
  666. data/app/assets/javascripts/decidim/input_character_counter.js.es6 +0 -120
  667. data/app/assets/javascripts/decidim/map.js.es6 +0 -46
  668. data/app/assets/javascripts/decidim/map/controller.js.es6 +0 -92
  669. data/app/assets/javascripts/decidim/map/controller/markers.js.es6 +0 -95
  670. data/app/assets/javascripts/decidim/map/controller/static.es6 +0 -48
  671. data/app/assets/javascripts/decidim/map/factory.js.es6 +0 -51
  672. data/app/assets/javascripts/decidim/map/icon.js.es6 +0 -31
  673. data/app/assets/javascripts/decidim/map/legacy.js.es6 +0 -87
  674. data/app/assets/javascripts/decidim/map/provider/default.js.es6 +0 -22
  675. data/app/assets/javascripts/decidim/map/provider/here.js.es6 +0 -22
  676. data/app/assets/javascripts/decidim/orders.js.es6 +0 -9
  677. data/app/assets/javascripts/decidim/results_listing.js.es6 +0 -44
  678. data/app/assets/javascripts/decidim/security/selfxss_warning.js.es6 +0 -19
  679. data/app/assets/javascripts/decidim/session_timeouter.js.es6 +0 -78
  680. data/app/assets/javascripts/decidim/social_share.js +0 -2
  681. data/app/assets/javascripts/decidim/vizzs.js.es6 +0 -1
  682. data/app/assets/javascripts/decidim/vizzs/renders.js.es6 +0 -11
  683. data/app/assets/stylesheets/decidim/_decidim.scss +0 -19
  684. data/app/assets/stylesheets/decidim/application.scss.erb +0 -10
  685. data/app/assets/stylesheets/decidim/extras/_extras.scss +0 -17
  686. data/app/assets/stylesheets/decidim/extras/_process_stats.scss +0 -45
  687. data/app/assets/stylesheets/decidim/layouts/_layouts.scss +0 -5
  688. data/app/assets/stylesheets/decidim/map.css +0 -5
  689. data/app/assets/stylesheets/decidim/modules/_modules.scss +0 -92
  690. data/app/assets/stylesheets/decidim/modules/_toggle.scss +0 -9
  691. data/app/assets/stylesheets/decidim/utils/_fontface.scss +0 -39
  692. data/app/assets/stylesheets/decidim/vizzs.scss +0 -8
  693. data/app/assets/stylesheets/decidim/vizzs/_vizzs.scss +0 -5
  694. data/app/frontend/entry.ts +0 -1
  695. data/app/middleware/decidim/current_organization.rb +0 -55
  696. data/app/middleware/decidim/strip_x_forwarded_host.rb +0 -14
  697. data/app/services/decidim/zip_stream/zip_stream_writer.rb +0 -56
  698. data/config/locales/ja-JP.yml +0 -1587
  699. data/lib/decidim/messaging.rb +0 -9
  700. data/vendor/assets/javascripts/appendAround.js +0 -41
  701. data/vendor/assets/javascripts/d3.js +0 -17813
  702. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ar.js +0 -16
  703. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.bg.js +0 -14
  704. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ca.js +0 -16
  705. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.cs.js +0 -14
  706. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.da.js +0 -14
  707. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.de.js +0 -14
  708. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.el.js +0 -14
  709. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.eo.js +0 -17
  710. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es-MX.js +0 -15
  711. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es-PY.js +0 -15
  712. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es.js +0 -15
  713. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.et.js +0 -18
  714. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.eu.js +0 -15
  715. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fi-pl.js +0 -14
  716. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fi.js +0 -14
  717. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fr-CA.js +0 -16
  718. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fr.js +0 -16
  719. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ga.js +0 -15
  720. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.gl.js +0 -12
  721. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.hr.js +0 -13
  722. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.hu.js +0 -16
  723. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.id.js +0 -13
  724. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.is.js +0 -14
  725. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.it.js +0 -14
  726. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ja.js +0 -16
  727. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ko.js +0 -18
  728. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.lt.js +0 -16
  729. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.lv.js +0 -17
  730. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.mt.js +0 -15
  731. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.nl.js +0 -14
  732. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.no.js +0 -13
  733. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pl.js +0 -15
  734. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt-BR.js +0 -14
  735. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt.js +0 -17
  736. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ro.js +0 -15
  737. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ru.js +0 -16
  738. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sk.js +0 -14
  739. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sl.js +0 -14
  740. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sr.js +0 -16
  741. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sv.js +0 -14
  742. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.tr.js +0 -14
  743. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.uk.js +0 -16
  744. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.vi.js +0 -14
  745. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.zh-CN.js +0 -14
  746. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.zh-TW.js +0 -14
  747. data/vendor/assets/javascripts/form_datepicker.js.es6 +0 -24
  748. data/vendor/assets/javascripts/foundation-datepicker.js +0 -1425
  749. data/vendor/assets/javascripts/leaflet-svg-icon.js +0 -179
  750. data/vendor/assets/javascripts/leaflet.js +0 -9
  751. data/vendor/assets/javascripts/leaflet.markercluster.js +0 -7
  752. data/vendor/assets/javascripts/morphdom.js +0 -688
  753. data/vendor/assets/javascripts/quill.min.js +0 -8
  754. data/vendor/assets/javascripts/quill.min.js.map +0 -1
  755. data/vendor/assets/javascripts/svg4everybody.min.js +0 -1
  756. data/vendor/assets/javascripts/tagsinput.js +0 -683
  757. data/vendor/assets/stylesheets/MarkerCluster.Default.css +0 -60
  758. data/vendor/assets/stylesheets/MarkerCluster.css +0 -14
  759. data/vendor/assets/stylesheets/leaflet.css +0 -624
  760. data/vendor/assets/stylesheets/quill.bubble.css +0 -952
  761. data/vendor/assets/stylesheets/quill.core.css +0 -397
  762. data/vendor/assets/stylesheets/quill.snow.css +0 -945
  763. data/vendor/assets/stylesheets/tagsinput.css +0 -55
  764. data/vendor/assets/stylesheets/tribute.css +0 -27
@@ -1,17 +0,0 @@
1
- /**
2
- * Latvian translation for foundation-datepicker
3
- * Artis Avotins <artis@apit.lv>
4
- */
5
-
6
- ;(function($){
7
- $.fn.fdatepicker.dates['lv'] = {
8
- days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
9
- daysShort: ["Svētd", "Pirmd", "Otrd", "Trešd", "Ceturtd", "Piektd", "Sestd"],
10
- daysMin: ["S", "P", "O", "T", "C", "P", "S"],
11
- months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Décembris"],
12
- monthsShort: ["Janv", "Febr", "Marts", "Apr", "Maijs", "Jūn", "Jūl", "Aug", "Sept", "Okt", "Nov", "Dec"],
13
- today: "Šodien",
14
- clear: "Izdzēst",
15
- weekStart: 1
16
- };
17
- }(jQuery));
@@ -1,15 +0,0 @@
1
- /**
2
- * Maltese translation for foundation-datepicker.
3
- */
4
- ; (function ($) {
5
- $.fn.fdatepicker.dates['mt'] = {
6
- days: ["Ħadd", "It-Tnejn", "It-Tlieta", "L-Erbgħa", "Il-Ħamis", "Nhar il-Ġimgħa", "Is-Sibt"],
7
- daysShort: ["Ħadd", "It-Tnejn", "dimatri", "L-Erbgħa", "Il-Ħamis", "Nhar il-Ġimgħa", "Is-Sibt"],
8
- daysMin: ["Ħadd", "It-Tnejn", "dimatri", "L-Erbgħa", "Il-Ħamis", "Nhar il-Ġimgħa", "Is-Sibt"],
9
- months: ["Ġeneru", "Frar", "Marzu", "April", "Mejju", "Ġunju", "Lulju", "Awissu", "Settembru", "Ottubru", "Novembru", "Diċembru"],
10
- monthsShort: ["Ġeneru", "Frar", "Marzu", "April", "Mejju", "Ġunju", "Lulju", "Awissu", "Settembru", "Ottubru", "Novembru", "Diċembru"],
11
- today: "illum",
12
- clear: "Ħassar",
13
- weekStart: 1
14
- };
15
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Dutch translation for foundation-datepicker
3
- * Reinier Goltstein <mrgoltstein@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['nl'] = {
7
- days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"],
8
- daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
9
- daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
10
- months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
11
- monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12
- today: "Vandaag"
13
- };
14
- }(jQuery));
@@ -1,13 +0,0 @@
1
- /**
2
- * Norwegian translation for foundation-datepicker
3
- */
4
- ;(function($){
5
- $.fn.fdatepicker.dates['no'] = {
6
- days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
7
- daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
8
- daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
9
- months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
10
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
11
- today: "I dag"
12
- };
13
- }(jQuery));
@@ -1,15 +0,0 @@
1
- /**
2
- * Polish translation for foundation-datepicker
3
- * Robert <rtpm@gazeta.pl>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['pl'] = {
7
- days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"],
8
- daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
9
- daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
10
- months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
11
- monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"],
12
- today: "Dzisiaj",
13
- weekStart: 1
14
- };
15
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Brazilian translation for foundation-datepicker
3
- * Cauan Cabral <cauan@radig.com.br>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['pt-br'] = {
7
- days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
8
- daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
9
- daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
10
- months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
11
- monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
12
- today: "Hoje"
13
- };
14
- }(jQuery));
@@ -1,17 +0,0 @@
1
- /**
2
- * Portuguese translation for foundation-datepicker
3
- * Original code: Cauan Cabral <cauan@radig.com.br>
4
- * Tiago Melo <tiago.blackcode@gmail.com>
5
- */
6
- ;(function($){
7
- $.fn.fdatepicker.dates['pt'] = {
8
- days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
9
- daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
10
- daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
11
- months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
12
- monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
13
- today: "Hoje",
14
- clear: "Limpar",
15
- weekStart: 1
16
- };
17
- }(jQuery));
@@ -1,15 +0,0 @@
1
- /**
2
- * Romanian translation for foundation-datepicker
3
- * Cristian Vasile <cristi.mie@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['ro'] = {
7
- days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"],
8
- daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
9
- daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
10
- months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
11
- monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
12
- today: "Astăzi",
13
- weekStart: 1
14
- };
15
- }(jQuery));
@@ -1,16 +0,0 @@
1
- /**
2
- * Russian translation for foundation-datepicker
3
- * Dmytro Ivakhnenko <aavuso@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['ru'] = {
7
- days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
8
- daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
9
- daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
10
- months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
11
- monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
12
- today: "Сегодня",
13
- clear: "Очистить",
14
- weekStart: 1
15
- };
16
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Slovak translation for foundation-datepicker
3
- * Peter Beňo <najlepsiwebdesigner@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates["sk"] = {
7
- days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"],
8
- daysShort: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"],
9
- daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"],
10
- months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
11
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
12
- today: "Dnes"
13
- };
14
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Slovene translation for foundation-datepicker
3
- * Gregor Rudolf <gregor.rudolf@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['sl'] = {
7
- days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"],
8
- daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
9
- daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
10
- months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
11
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12
- today: "Danes"
13
- };
14
- }(jQuery));
@@ -1,16 +0,0 @@
1
- /**
2
- * Serbian latin translation for foundation-datepicker, language file from bootstrap-datepicker
3
- * Bojan Milosavlević <milboj@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['sr-latin'] = {
7
- days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"],
8
- daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
9
- daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
10
- months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
11
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12
- today: "Danas",
13
- weekStart: 1,
14
- format: "dd.mm.yyyy"
15
- };
16
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Swedish translation for foundation-datepicker
3
- * Patrik Ragnarsson <patrik@starkast.net>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['sv'] = {
7
- days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"],
8
- daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
9
- daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
10
- months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
11
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12
- today: "I Dag"
13
- };
14
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Turkish translation for foundation-datepicker
3
- * Serkan Algur <kaisercrazy_2@hotmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['tr'] = {
7
- days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"],
8
- daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
9
- daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
10
- months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
11
- monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
12
- today: "Bugün"
13
- };
14
- }(jQuery));
@@ -1,16 +0,0 @@
1
- /**
2
- * Ukrainian translation for foundation-datepicker
3
- * Dmytro Ivakhnenko <aavuso@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['uk'] = {
7
- days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"],
8
- daysShort: ["Нед", "Пон", "Вівт", "Сер", "Четв", "П'ятн", "Суб", "Нед"],
9
- daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
10
- months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
11
- monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Серп", "Вер", "Жовт", "Лист", "Гру"],
12
- today: "Сьогодні",
13
- clear: "Очистити",
14
- weekStart: 1
15
- };
16
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Vietnamese translation for foundation-datepicker
3
- * thanks! https://github.com/handleror
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['vi'] = {
7
- days: ["Chủ Nhật","Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "Chủ Nhật"],
8
- daysShort: ["CN", "T2", "T3", "T4", "T5", "T6", "T7", "CN"],
9
- daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7", "CN"],
10
- months: ["Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"],
11
- monthsShort: ["Thg1", "Thg2", "Thg3", "Thg4", "Thg5", "Thg6", "Thg7", "Thg8", "Thg9", "Thg10", "Thg11", "Thg12"],
12
- today: "Hôm nay"
13
- };
14
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Simplified Chinese translation for foundation-datepicker
3
- * Yuan Cheung <advanimal@gmail.com>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['zh-CN'] = {
7
- days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
8
- daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
9
- daysMin: ["日", "一", "二", "三", "四", "五", "六"],
10
- months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11
- monthsShort: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
12
- today: '今天'
13
- };
14
- }(jQuery));
@@ -1,14 +0,0 @@
1
- /**
2
- * Traditional Chinese translation for fondation-datepicker
3
- * Rung-Sheng Jang <daniel@i-trend.co.cc>
4
- */
5
- ;(function($){
6
- $.fn.fdatepicker.dates['zh-TW'] = {
7
- days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
8
- daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
9
- daysMin: ["日", "一", "二", "三", "四", "五", "六"],
10
- months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11
- monthsShort: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
12
- today: '今天'
13
- };
14
- }(jQuery));
@@ -1,24 +0,0 @@
1
- ((exports) => {
2
- const formDatePicker = () => {
3
- $("[data-datepicker]").each((_index, node) => {
4
- const language = $("html").attr("lang") || "en";
5
- const initialDate = $(node).data("startdate") || "";
6
- const pickTime = $(node).data("timepicker") === "";
7
- const languageProps = $(node).fdatepicker.dates[language] && $(node).fdatepicker.dates[language].format;
8
- let format = $(node).data("date-format") || languageProps || "mm/dd/yyyy";
9
-
10
- $(node).fdatepicker({
11
- format,
12
- initialDate,
13
- language,
14
- pickTime,
15
- disableDblClickSelection: true,
16
- leftArrow: "<<",
17
- rightArrow: ">>"
18
- });
19
- });
20
- };
21
-
22
- exports.Decidim = exports.Decidim || {};
23
- exports.Decidim.formDatePicker = formDatePicker;
24
- })(window);
@@ -1,1425 +0,0 @@
1
- /* =========================================================
2
- * foundation-datepicker.js
3
- * Copyright 2015 Peter Beno, najlepsiwebdesigner@gmail.com, @benopeter
4
- * project website http://foundation-datepicker.peterbeno.com
5
- * ========================================================= */
6
- ! function($) {
7
-
8
- function UTCDate() {
9
- return new Date(Date.UTC.apply(Date, arguments));
10
- }
11
-
12
- function UTCToday() {
13
- var today = new Date();
14
- return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate());
15
- }
16
-
17
- var Datepicker = function(element, options) {
18
- var that = this;
19
-
20
- this.element = $(element);
21
- this.autoShow = (options.autoShow == undefined ? true : options.autoShow);
22
- this.appendTo = options.appendTo || 'body';
23
- this.closeButton = options.closeButton;
24
- this.language = options.language || this.element.data('date-language') || "en";
25
- this.language = this.language in dates ? this.language : this.language.split('-')[0]; //Check if "de-DE" style date is available, if not language should fallback to 2 letter code eg "de"
26
- this.language = this.language in dates ? this.language : "en";
27
- this.isRTL = dates[this.language].rtl || false;
28
- this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || 'mm/dd/yyyy');
29
- this.formatText = options.format || this.element.data('date-format') || dates[this.language].format || 'mm/dd/yyyy';
30
- this.isInline = false;
31
- this.isInput = this.element.is('input');
32
- this.component = this.element.is('.date') ? this.element.find('.prefix, .postfix') : false;
33
- this.hasInput = this.component && this.element.find('input').length;
34
- this.disableDblClickSelection = options.disableDblClickSelection;
35
- this.onRender = options.onRender || function() {};
36
- if (this.component && this.component.length === 0) {
37
- this.component = false;
38
- }
39
- this.linkField = options.linkField || this.element.data('link-field') || false;
40
- this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || 'yyyy-mm-dd hh:ii:ss');
41
- this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;
42
- this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';
43
- this.initialDate = options.initialDate || null;
44
- this.faCSSprefix = options.faCSSprefix || 'fa';
45
- this.leftArrow = options.leftArrow || '<i class="' + this.faCSSprefix + ' ' + this.faCSSprefix + '-chevron-left fi-arrow-left"/>';
46
- this.rightArrow = options.rightArrow || '<i class="' + this.faCSSprefix + ' ' + this.faCSSprefix + '-chevron-right fi-arrow-right"/>';
47
- this.closeIcon = options.closeIcon || '<i class="' + this.faCSSprefix + ' ' + this.faCSSprefix + '-remove ' + this.faCSSprefix + '-times fi-x"></i>';
48
-
49
-
50
-
51
- this.minView = 0;
52
- if ('minView' in options) {
53
- this.minView = options.minView;
54
- } else if ('minView' in this.element.data()) {
55
- this.minView = this.element.data('min-view');
56
- }
57
- this.minView = DPGlobal.convertViewMode(this.minView);
58
-
59
- this.maxView = DPGlobal.modes.length - 1;
60
- if ('maxView' in options) {
61
- this.maxView = options.maxView;
62
- } else if ('maxView' in this.element.data()) {
63
- this.maxView = this.element.data('max-view');
64
- }
65
- this.maxView = DPGlobal.convertViewMode(this.maxView);
66
-
67
- this.startViewMode = 'month';
68
- if ('startView' in options) {
69
- this.startViewMode = options.startView;
70
- } else if ('startView' in this.element.data()) {
71
- this.startViewMode = this.element.data('start-view');
72
- }
73
- this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);
74
- this.viewMode = this.startViewMode;
75
-
76
- if (!('minView' in options) && !('maxView' in options) && !(this.element.data('min-view')) && !(this.element.data('max-view'))) {
77
- this.pickTime = false;
78
- if ('pickTime' in options) {
79
- this.pickTime = options.pickTime;
80
- }
81
- if (this.pickTime == true) {
82
- this.minView = 0;
83
- this.maxView = 4;
84
- } else {
85
- this.minView = 2;
86
- this.maxView = 4;
87
- }
88
- }
89
-
90
- this.forceParse = true;
91
- if ('forceParse' in options) {
92
- this.forceParse = options.forceParse;
93
- } else if ('dateForceParse' in this.element.data()) {
94
- this.forceParse = this.element.data('date-force-parse');
95
- }
96
-
97
-
98
- this.picker = $(DPGlobal.template(this.leftArrow, this.rightArrow, this.closeIcon))
99
- .appendTo(this.isInline ? this.element : this.appendTo)
100
- .on({
101
- click: $.proxy(this.click, this),
102
- mousedown: $.proxy(this.mousedown, this)
103
- });
104
- if (this.closeButton) {
105
- this.picker.find('a.datepicker-close').show();
106
- } else {
107
- this.picker.find('a.datepicker-close').hide();
108
- }
109
-
110
- if (this.isInline) {
111
- this.picker.addClass('datepicker-inline');
112
- } else {
113
- this.picker.addClass('datepicker-dropdown dropdown-menu');
114
- }
115
- if (this.isRTL) {
116
- this.picker.addClass('datepicker-rtl');
117
-
118
- this.picker.find('.date-switch').each(function(){
119
- $(this).parent().prepend($(this).siblings('.next'));
120
- $(this).parent().append($(this).siblings('.prev'));
121
- })
122
- this.picker.find('.prev, .next').toggleClass('prev next');
123
-
124
- }
125
- $(document).on('mousedown', function(e) {
126
- if (that.isInput && e.target === that.element[0]) {
127
- return;
128
- }
129
-
130
- // Clicked outside the datepicker, hide it
131
- if ($(e.target).closest('.datepicker.datepicker-inline, .datepicker.datepicker-dropdown').length === 0) {
132
- that.hide();
133
- }
134
- });
135
-
136
- this.autoclose = true;
137
- if ('autoclose' in options) {
138
- this.autoclose = options.autoclose;
139
- } else if ('dateAutoclose' in this.element.data()) {
140
- this.autoclose = this.element.data('date-autoclose');
141
- }
142
-
143
- this.keyboardNavigation = true;
144
- if ('keyboardNavigation' in options) {
145
- this.keyboardNavigation = options.keyboardNavigation;
146
- } else if ('dateKeyboardNavigation' in this.element.data()) {
147
- this.keyboardNavigation = this.element.data('date-keyboard-navigation');
148
- }
149
-
150
- this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);
151
- this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);
152
-
153
- this.calendarWeeks = false;
154
- if ('calendarWeeks' in options) {
155
- this.calendarWeeks = options.calendarWeeks;
156
- } else if ('dateCalendarWeeks' in this.element.data()) {
157
- this.calendarWeeks = this.element.data('date-calendar-weeks');
158
- }
159
- if (this.calendarWeeks)
160
- this.picker.find('tfoot th.today')
161
- .attr('colspan', function(i, val) {
162
- return parseInt(val) + 1;
163
- });
164
-
165
- this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7);
166
- this.weekEnd = ((this.weekStart + 6) % 7);
167
- this.startDate = -Infinity;
168
- this.endDate = Infinity;
169
- this.daysOfWeekDisabled = [];
170
- this.datesDisabled = [];
171
- this.setStartDate(options.startDate || this.element.data('date-startdate'));
172
- this.setEndDate(options.endDate || this.element.data('date-enddate'));
173
- this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));
174
- this.setDatesDisabled(options.datesDisabled || this.element.data('dates-disabled'));
175
-
176
- if (this.initialDate != null) {
177
- this.date = this.viewDate = DPGlobal.parseDate(this.initialDate, this.format, this.language);
178
- this.setValue();
179
- }
180
-
181
- this.fillDow();
182
- this.fillMonths();
183
- this.update();
184
-
185
- this.showMode();
186
-
187
- if (this.isInline) {
188
- this.show();
189
- }
190
-
191
- this._attachEvents();
192
- };
193
-
194
- Datepicker.prototype = {
195
- constructor: Datepicker,
196
-
197
- _events: [],
198
- _attachEvents: function() {
199
- this._detachEvents();
200
- if (this.isInput) { // single input
201
- if (!this.keyboardNavigation) {
202
- this._events = [
203
- [this.element, {
204
- focus: (this.autoShow) ? $.proxy(this.show, this) : function() {}
205
- }]
206
- ];
207
- } else {
208
- this._events = [
209
- [this.element, {
210
- focus: (this.autoShow) ? $.proxy(this.show, this) : function() {},
211
- keyup: $.proxy(this.update, this),
212
- keydown: $.proxy(this.keydown, this),
213
- click: (this.element.attr('readonly')) ? $.proxy(this.show, this) : function() {}
214
- }]
215
- ];
216
- }
217
- }
218
- else if (this.component && this.hasInput) { // component: input + button
219
- this._events = [
220
- // For components that are not readonly, allow keyboard nav
221
- [this.element.find('input'), {
222
- focus: (this.autoShow) ? $.proxy(this.show, this) : function() {},
223
- keyup: $.proxy(this.update, this),
224
- keydown: $.proxy(this.keydown, this)
225
- }],
226
- [this.component, {
227
- click: $.proxy(this.show, this)
228
- }]
229
- ];
230
- } else if (this.element.is('div')) { // inline datepicker
231
- this.isInline = true;
232
- } else {
233
- this._events = [
234
- [this.element, {
235
- click: $.proxy(this.show, this)
236
- }]
237
- ];
238
- }
239
-
240
- if (this.disableDblClickSelection) {
241
- this._events[this._events.length] = [
242
- this.element, {
243
- dblclick: function(e) {
244
- e.preventDefault();
245
- e.stopPropagation();
246
- $(this).blur()
247
- }
248
- }
249
- ];
250
- }
251
-
252
- for (var i = 0, el, ev; i < this._events.length; i++) {
253
- el = this._events[i][0];
254
- ev = this._events[i][1];
255
- el.on(ev);
256
- }
257
- },
258
- _detachEvents: function() {
259
- for (var i = 0, el, ev; i < this._events.length; i++) {
260
- el = this._events[i][0];
261
- ev = this._events[i][1];
262
- el.off(ev);
263
- }
264
- this._events = [];
265
- },
266
-
267
- show: function(e) {
268
- this.picker.show();
269
- this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
270
- this.update();
271
- this.place();
272
- $(window).on('resize', $.proxy(this.place, this));
273
- if (e) {
274
- e.stopPropagation();
275
- e.preventDefault();
276
- }
277
- this.element.trigger({
278
- type: 'show',
279
- date: this.date
280
- });
281
- },
282
-
283
- hide: function(e) {
284
- if (this.isInline) return;
285
- if (!this.picker.is(':visible')) return;
286
- this.picker.hide();
287
- $(window).off('resize', this.place);
288
- this.viewMode = this.startViewMode;
289
- this.showMode();
290
- if (!this.isInput) {
291
- $(document).off('mousedown', this.hide);
292
- }
293
-
294
- if (
295
- this.forceParse &&
296
- (
297
- this.isInput && this.element.val() ||
298
- this.hasInput && this.element.find('input').val()
299
- )
300
- )
301
- this.setValue();
302
- this.element.trigger({
303
- type: 'hide',
304
- date: this.date
305
- });
306
- },
307
-
308
- remove: function() {
309
- this._detachEvents();
310
- this.picker.remove();
311
- delete this.element.data().datepicker;
312
- },
313
-
314
- getDate: function() {
315
- var d = this.getUTCDate();
316
- return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));
317
- },
318
-
319
- getUTCDate: function() {
320
- return this.date;
321
- },
322
-
323
- setDate: function(d) {
324
- this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));
325
- },
326
-
327
- setUTCDate: function(d) {
328
- this.date = d;
329
- this.setValue();
330
- },
331
-
332
- setValue: function() {
333
- var formatted = this.getFormattedDate();
334
- if (!this.isInput) {
335
- if (this.component) {
336
- this.element.find('input').val(formatted);
337
- }
338
- this.element.data('date', formatted);
339
- } else {
340
- this.element.val(formatted);
341
- }
342
- },
343
-
344
- getFormattedDate: function(format) {
345
- if (format === undefined)
346
- format = this.format;
347
- return DPGlobal.formatDate(this.date, format, this.language);
348
- },
349
-
350
- setStartDate: function(startDate) {
351
- this.startDate = startDate || -Infinity;
352
- if (this.startDate !== -Infinity) {
353
- this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language);
354
- }
355
- this.update();
356
- this.updateNavArrows();
357
- },
358
-
359
- setEndDate: function(endDate) {
360
- this.endDate = endDate || Infinity;
361
- if (this.endDate !== Infinity) {
362
- this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language);
363
- }
364
- this.update();
365
- this.updateNavArrows();
366
- },
367
-
368
- setDaysOfWeekDisabled: function(daysOfWeekDisabled) {
369
- this.daysOfWeekDisabled = daysOfWeekDisabled || [];
370
- if (!$.isArray(this.daysOfWeekDisabled)) {
371
- this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/);
372
- }
373
- this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function(d) {
374
- return parseInt(d, 10);
375
- });
376
- this.update();
377
- this.updateNavArrows();
378
- },
379
-
380
- setDatesDisabled: function(datesDisabled) {
381
- this.datesDisabled = datesDisabled || [];
382
- if (!$.isArray(this.datesDisabled)) {
383
- this.datesDisabled = this.datesDisabled.split(/,\s*/);
384
- }
385
- this.datesDisabled = $.map(this.datesDisabled, function(d) {
386
- return DPGlobal.parseDate(d, this.format, this.language).valueOf();
387
- });
388
- this.update();
389
- this.updateNavArrows();
390
- },
391
-
392
- place: function() {
393
- if (this.isInline) return;
394
- var zIndexes = [];
395
- this.element.parents().map(function() {
396
- if ($(this).css('z-index') != 'auto') {
397
- zIndexes.push(parseInt($(this).css('z-index')));
398
- }
399
- });
400
- var zIndex = zIndexes.sort(function(a, b) { return a - b; }).pop() + 10;
401
- var textbox = this.component ? this.component : this.element;
402
- var offset = textbox.offset();
403
- var height = textbox.outerHeight() + parseInt(textbox.css('margin-top'));
404
- var width = textbox.outerWidth() + parseInt(textbox.css('margin-left'));
405
- var fullOffsetTop = offset.top + height;
406
- var offsetLeft = offset.left;
407
- this.picker.removeClass('datepicker-top datepicker-bottom');
408
- // can we show it on top?
409
- var canShowTop = ($(window).scrollTop() < offset.top - this.picker.outerHeight());
410
- var canShowBottom = (fullOffsetTop + this.picker.outerHeight()) < $(window).scrollTop() + $(window).height();
411
- // If the datepicker is going to be below the window, show it on top of the input if it fits
412
- if (!canShowBottom && canShowTop) {
413
- fullOffsetTop = offset.top - this.picker.outerHeight();
414
- this.picker.addClass('datepicker-top');
415
- }
416
- else {
417
- // Scroll up if we cannot show it on bottom or top (for mobile devices)
418
- if (!canShowBottom) $(window).scrollTop(offset.top);
419
- this.picker.addClass('datepicker-bottom');
420
- }
421
-
422
- // if the datepicker is going to go past the right side of the window, we want
423
- // to set the right position so the datepicker lines up with the textbox
424
- if (offset.left + this.picker.width() >= $(window).width()) {
425
- offsetLeft = (offset.left + width) - this.picker.width();
426
- }
427
- this.picker.css({
428
- top: fullOffsetTop,
429
- left: offsetLeft,
430
- zIndex: zIndex
431
- });
432
- },
433
-
434
- update: function() {
435
- var date, fromArgs = false;
436
- var currentVal = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();
437
- if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {
438
- date = arguments[0];
439
- fromArgs = true;
440
- }
441
- else {
442
- date = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();
443
- }
444
-
445
- this.date = DPGlobal.parseDate(date, this.format, this.language);
446
-
447
- if (fromArgs) {
448
- this.setValue();
449
- } else if (currentVal == "") {
450
- this.element.trigger({
451
- type: 'changeDate',
452
- date: null
453
- });
454
- }
455
-
456
- if (this.date < this.startDate) {
457
- this.viewDate = new Date(this.startDate.valueOf());
458
- } else if (this.date > this.endDate) {
459
- this.viewDate = new Date(this.endDate.valueOf());
460
- } else {
461
- this.viewDate = new Date(this.date.valueOf());
462
- }
463
- this.fill();
464
- },
465
-
466
- fillDow: function() {
467
- var dowCnt = this.weekStart,
468
- html = '<tr>';
469
- if (this.calendarWeeks) {
470
- var cell = '<th class="cw">&nbsp;</th>';
471
- html += cell;
472
- this.picker.find('.datepicker-days thead tr:first-child').prepend(cell);
473
- }
474
- while (dowCnt < this.weekStart + 7) {
475
- html += '<th class="dow">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>';
476
- }
477
- html += '</tr>';
478
- this.picker.find('.datepicker-days thead').append(html);
479
- },
480
-
481
- fillMonths: function() {
482
- var html = '',
483
- i = 0;
484
- while (i < 12) {
485
- html += '<span class="month">' + dates[this.language].monthsShort[i++] + '</span>';
486
- }
487
- this.picker.find('.datepicker-months td').html(html);
488
- },
489
-
490
- fill: function() {
491
- if (this.date == null || this.viewDate == null) {
492
- return;
493
- }
494
-
495
- var d = new Date(this.viewDate.valueOf()),
496
- year = d.getUTCFullYear(),
497
- month = d.getUTCMonth(),
498
- dayMonth = d.getUTCDate(),
499
- hours = d.getUTCHours(),
500
- minutes = d.getUTCMinutes(),
501
- startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity,
502
- startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity,
503
- endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity,
504
- endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() : Infinity,
505
- currentDate = this.date && UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate()).valueOf(),
506
- today = new Date(),
507
- titleFormat = dates[this.language].titleFormat || dates['en'].titleFormat;
508
- // this.picker.find('.datepicker-days thead th.date-switch')
509
- // .text(DPGlobal.formatDate(new UTCDate(year, month), titleFormat, this.language));
510
-
511
- this.picker.find('.datepicker-days thead th:eq(1)')
512
- .text(dates[this.language].months[month] + ' ' + year);
513
- this.picker.find('.datepicker-hours thead th:eq(1)')
514
- .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
515
- this.picker.find('.datepicker-minutes thead th:eq(1)')
516
- .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
517
-
518
-
519
- this.picker.find('tfoot th.today')
520
- .text(dates[this.language].today)
521
- .toggle(this.todayBtn !== false);
522
- this.updateNavArrows();
523
- this.fillMonths();
524
- var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),
525
- day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
526
- prevMonth.setUTCDate(day);
527
- prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);
528
- var nextMonth = new Date(prevMonth.valueOf());
529
- nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
530
- nextMonth = nextMonth.valueOf();
531
- var html = [];
532
- var clsName;
533
- while (prevMonth.valueOf() < nextMonth) {
534
- if (prevMonth.getUTCDay() == this.weekStart) {
535
- html.push('<tr>');
536
- if (this.calendarWeeks) {
537
- // adapted from https://github.com/timrwood/moment/blob/master/moment.js#L128
538
- var a = new Date(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth(), prevMonth.getUTCDate() - prevMonth.getDay() + 10 - (this.weekStart && this.weekStart % 7 < 5 && 7)),
539
- b = new Date(a.getFullYear(), 0, 4),
540
- calWeek = ~~((a - b) / 864e5 / 7 + 1.5);
541
- html.push('<td class="cw">' + calWeek + '</td>');
542
- }
543
- }
544
- clsName = ' ' + this.onRender(prevMonth) + ' ';
545
- if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) {
546
- clsName += ' old';
547
- } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) {
548
- clsName += ' new';
549
- }
550
- // Compare internal UTC date with local today, not UTC today
551
- if (this.todayHighlight &&
552
- prevMonth.getUTCFullYear() == today.getFullYear() &&
553
- prevMonth.getUTCMonth() == today.getMonth() &&
554
- prevMonth.getUTCDate() == today.getDate()) {
555
- clsName += ' today';
556
- }
557
- if (currentDate && prevMonth.valueOf() == currentDate) {
558
- clsName += ' active';
559
- }
560
- if (prevMonth.valueOf() < this.startDate || prevMonth.valueOf() > this.endDate ||
561
- $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||
562
- $.inArray(prevMonth.valueOf(), this.datesDisabled) !== -1) {
563
- clsName += ' disabled';
564
- }
565
- html.push('<td class="day' + clsName + '">' + prevMonth.getUTCDate() + '</td>');
566
- if (prevMonth.getUTCDay() == this.weekEnd) {
567
- html.push('</tr>');
568
- }
569
- prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
570
- }
571
- this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
572
-
573
- html = [];
574
- for (var i = 0; i < 24; i++) {
575
- var actual = UTCDate(year, month, dayMonth, i);
576
- clsName = '';
577
- // We want the previous hour for the startDate
578
- if ((actual.valueOf() + 3600000) < this.startDate || actual.valueOf() > this.endDate) {
579
- clsName += ' disabled';
580
- } else if (hours == i) {
581
- clsName += ' active';
582
- }
583
- html.push('<span class="hour' + clsName + '">' + i + ':00</span>');
584
- }
585
- this.picker.find('.datepicker-hours td').html(html.join(''));
586
-
587
- html = [];
588
- for (var i = 0; i < 60; i += this.minuteStep) {
589
- var actual = UTCDate(year, month, dayMonth, hours, i);
590
- clsName = '';
591
- if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) {
592
- clsName += ' disabled';
593
- } else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) {
594
- clsName += ' active';
595
- }
596
- html.push('<span class="minute' + clsName + '">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>');
597
- }
598
- this.picker.find('.datepicker-minutes td').html(html.join(''));
599
-
600
-
601
- var currentYear = this.date && this.date.getUTCFullYear();
602
- var months = this.picker.find('.datepicker-months')
603
- .find('th:eq(1)')
604
- .text(year)
605
- .end()
606
- .find('span').removeClass('active');
607
- if (currentYear && currentYear == year) {
608
- months.eq(this.date.getUTCMonth()).addClass('active');
609
- }
610
- if (year < startYear || year > endYear) {
611
- months.addClass('disabled');
612
- }
613
- if (year == startYear) {
614
- months.slice(0, startMonth).addClass('disabled');
615
- }
616
- if (year == endYear) {
617
- months.slice(endMonth + 1).addClass('disabled');
618
- }
619
-
620
- html = '';
621
- year = parseInt(year / 10, 10) * 10;
622
- var yearCont = this.picker.find('.datepicker-years')
623
- .find('th:eq(1)')
624
- .text(year + '-' + (year + 9))
625
- .end()
626
- .find('td');
627
- year -= 1;
628
- for (var i = -1; i < 11; i++) {
629
- html += '<span class="year' + (i == -1 || i == 10 ? ' old' : '') + (currentYear == year ? ' active' : '') + (year < startYear || year > endYear ? ' disabled' : '') + '">' + year + '</span>';
630
- year += 1;
631
- }
632
- yearCont.html(html);
633
- },
634
-
635
- updateNavArrows: function() {
636
- var d = new Date(this.viewDate),
637
- year = d.getUTCFullYear(),
638
- month = d.getUTCMonth(),
639
- day = d.getUTCDate(),
640
- hour = d.getUTCHours();
641
- switch (this.viewMode) {
642
- case 0:
643
- if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth() && day <= this.startDate.getUTCDate() && hour <= this.startDate.getUTCHours()) {
644
- this.picker.find('.prev').css({
645
- visibility: 'hidden'
646
- });
647
- } else {
648
- this.picker.find('.prev').css({
649
- visibility: 'visible'
650
- });
651
- }
652
- if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth() && day >= this.endDate.getUTCDate() && hour >= this.endDate.getUTCHours()) {
653
- this.picker.find('.next').css({
654
- visibility: 'hidden'
655
- });
656
- } else {
657
- this.picker.find('.next').css({
658
- visibility: 'visible'
659
- });
660
- }
661
- break;
662
- case 1:
663
- if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth() && day <= this.startDate.getUTCDate()) {
664
- this.picker.find('.prev').css({
665
- visibility: 'hidden'
666
- });
667
- } else {
668
- this.picker.find('.prev').css({
669
- visibility: 'visible'
670
- });
671
- }
672
- if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth() && day >= this.endDate.getUTCDate()) {
673
- this.picker.find('.next').css({
674
- visibility: 'hidden'
675
- });
676
- } else {
677
- this.picker.find('.next').css({
678
- visibility: 'visible'
679
- });
680
- }
681
- break;
682
- case 2:
683
- if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth()) {
684
- this.picker.find('.prev').css({
685
- visibility: 'hidden'
686
- });
687
- } else {
688
- this.picker.find('.prev').css({
689
- visibility: 'visible'
690
- });
691
- }
692
- if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth()) {
693
- this.picker.find('.next').css({
694
- visibility: 'hidden'
695
- });
696
- } else {
697
- this.picker.find('.next').css({
698
- visibility: 'visible'
699
- });
700
- }
701
- break;
702
- case 3:
703
- case 4:
704
- if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) {
705
- this.picker.find('.prev').css({
706
- visibility: 'hidden'
707
- });
708
- } else {
709
- this.picker.find('.prev').css({
710
- visibility: 'visible'
711
- });
712
- }
713
- if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) {
714
- this.picker.find('.next').css({
715
- visibility: 'hidden'
716
- });
717
- } else {
718
- this.picker.find('.next').css({
719
- visibility: 'visible'
720
- });
721
- }
722
- break;
723
- }
724
- },
725
-
726
- click: function(e) {
727
- e.stopPropagation();
728
- e.preventDefault();
729
-
730
- if ($(e.target).hasClass('datepicker-close') || $(e.target).parent().hasClass('datepicker-close')) {
731
- this.hide();
732
- }
733
-
734
- var target = $(e.target).closest('span, td, th');
735
- if (target.length == 1) {
736
- if (target.is('.disabled')) {
737
- this.element.trigger({
738
- type: 'outOfRange',
739
- date: this.viewDate,
740
- startDate: this.startDate,
741
- endDate: this.endDate
742
- });
743
- return;
744
- }
745
-
746
- switch (target[0].nodeName.toLowerCase()) {
747
- case 'th':
748
- switch (target[0].className) {
749
- case 'date-switch':
750
- this.showMode(1);
751
- break;
752
- case 'prev':
753
- case 'next':
754
- var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);
755
- switch (this.viewMode) {
756
- case 0:
757
- this.viewDate = this.moveHour(this.viewDate, dir);
758
- break;
759
- case 1:
760
- this.viewDate = this.moveDate(this.viewDate, dir);
761
- break;
762
- case 2:
763
- this.viewDate = this.moveMonth(this.viewDate, dir);
764
- break;
765
- case 3:
766
- case 4:
767
- this.viewDate = this.moveYear(this.viewDate, dir);
768
- break;
769
- }
770
- this.fill();
771
- break;
772
- case 'today':
773
- var date = new Date();
774
- date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
775
-
776
- this.viewMode = this.startViewMode;
777
- this.showMode(0);
778
- this._setDate(date);
779
- break;
780
- }
781
- break;
782
- case 'span':
783
- if (!target.is('.disabled')) {
784
- if (target.is('.month')) {
785
- if (this.minView === 3) {
786
- var month = target.parent().find('span').index(target) || 0;
787
- var year = this.viewDate.getUTCFullYear(),
788
- day = 1,
789
- hours = this.viewDate.getUTCHours(),
790
- minutes = this.viewDate.getUTCMinutes(),
791
- seconds = this.viewDate.getUTCSeconds();
792
- this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
793
- } else {
794
- this.viewDate.setUTCDate(1);
795
- var month = target.parent().find('span').index(target);
796
- this.viewDate.setUTCMonth(month);
797
- this.element.trigger({
798
- type: 'changeMonth',
799
- date: this.viewDate
800
- });
801
- }
802
- } else if (target.is('.year')) {
803
- if (this.minView === 4) {
804
- var year = parseInt(target.text(), 10) || 0;
805
- var month = 0,
806
- day = 1,
807
- hours = this.viewDate.getUTCHours(),
808
- minutes = this.viewDate.getUTCMinutes(),
809
- seconds = this.viewDate.getUTCSeconds();
810
- this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
811
- } else {
812
- this.viewDate.setUTCDate(1);
813
- var year = parseInt(target.text(), 10) || 0;
814
- this.viewDate.setUTCFullYear(year);
815
- this.element.trigger({
816
- type: 'changeYear',
817
- date: this.viewDate
818
- });
819
- }
820
- } else if (target.is('.hour')) {
821
- var hours = parseInt(target.text(), 10) || 0;
822
- var year = this.viewDate.getUTCFullYear(),
823
- month = this.viewDate.getUTCMonth(),
824
- day = this.viewDate.getUTCDate(),
825
- minutes = this.viewDate.getUTCMinutes(),
826
- seconds = this.viewDate.getUTCSeconds();
827
- this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
828
- } else if (target.is('.minute')) {
829
- var minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;
830
- var year = this.viewDate.getUTCFullYear(),
831
- month = this.viewDate.getUTCMonth(),
832
- day = this.viewDate.getUTCDate(),
833
- hours = this.viewDate.getUTCHours(),
834
- seconds = this.viewDate.getUTCSeconds();
835
- this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
836
- }
837
-
838
-
839
-
840
- if (this.viewMode != 0) {
841
-
842
-
843
-
844
- var oldViewMode = this.viewMode;
845
- this.showMode(-1);
846
- this.fill();
847
- if (oldViewMode == this.viewMode && this.autoclose) {
848
- this.hide();
849
- }
850
- } else {
851
- this.fill();
852
- if (this.autoclose) {
853
- this.hide();
854
- }
855
- }
856
- }
857
- break;
858
- case 'td':
859
-
860
-
861
-
862
- if (target.is('.day') && !target.is('.disabled')) {
863
- var day = parseInt(target.text(), 10) || 1;
864
- var year = this.viewDate.getUTCFullYear(),
865
- month = this.viewDate.getUTCMonth(),
866
- hours = this.viewDate.getUTCHours(),
867
- minutes = this.viewDate.getUTCMinutes(),
868
- seconds = this.viewDate.getUTCSeconds();
869
- if (target.is('.old')) {
870
- if (month === 0) {
871
- month = 11;
872
- year -= 1;
873
- } else {
874
- month -= 1;
875
- }
876
- } else if (target.is('.new')) {
877
- if (month == 11) {
878
- month = 0;
879
- year += 1;
880
- } else {
881
- month += 1;
882
- }
883
- }
884
- this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
885
- }
886
-
887
-
888
-
889
- var oldViewMode = this.viewMode;
890
-
891
-
892
- this.showMode(-1);
893
-
894
-
895
- this.fill();
896
- if (oldViewMode == this.viewMode && this.autoclose) {
897
- this.hide();
898
- }
899
- break;
900
- }
901
- }
902
- },
903
-
904
- _setDate: function(date, which) {
905
-
906
- if (!which || which == 'date')
907
- this.date = date;
908
- if (!which || which == 'view')
909
- this.viewDate = date;
910
- this.fill();
911
- this.setValue();
912
- this.element.trigger({
913
- type: 'changeDate',
914
- date: this.date
915
- });
916
- var element;
917
- if (this.isInput) {
918
- element = this.element;
919
- } else if (this.component) {
920
- element = this.element.find('input');
921
- }
922
- if (element) {
923
- element.change();
924
- if (this.autoclose && (!which || which == 'date')) {
925
- // this.hide();
926
- }
927
- }
928
- },
929
-
930
- moveHour: function(date, dir) {
931
- if (!dir) return date;
932
- var new_date = new Date(date.valueOf());
933
- dir = dir > 0 ? 1 : -1;
934
- new_date.setUTCHours(new_date.getUTCHours() + dir);
935
- return new_date;
936
- },
937
-
938
- moveDate: function(date, dir) {
939
- if (!dir) return date;
940
- var new_date = new Date(date.valueOf());
941
- dir = dir > 0 ? 1 : -1;
942
- new_date.setUTCDate(new_date.getUTCDate() + dir);
943
- return new_date;
944
- },
945
-
946
- moveMonth: function(date, dir) {
947
- if (!dir) return date;
948
- var new_date = new Date(date.valueOf()),
949
- day = new_date.getUTCDate(),
950
- month = new_date.getUTCMonth(),
951
- mag = Math.abs(dir),
952
- new_month, test;
953
- dir = dir > 0 ? 1 : -1;
954
- if (mag == 1) {
955
- test = dir == -1
956
- // If going back one month, make sure month is not current month
957
- // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
958
- ? function() {
959
- return new_date.getUTCMonth() == month;
960
- }
961
- // If going forward one month, make sure month is as expected
962
- // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
963
- : function() {
964
- return new_date.getUTCMonth() != new_month;
965
- };
966
- new_month = month + dir;
967
- new_date.setUTCMonth(new_month);
968
- // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
969
- if (new_month < 0 || new_month > 11)
970
- new_month = (new_month + 12) % 12;
971
- } else {
972
- // For magnitudes >1, move one month at a time...
973
- for (var i = 0; i < mag; i++)
974
- // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
975
- new_date = this.moveMonth(new_date, dir);
976
- // ...then reset the day, keeping it in the new month
977
- new_month = new_date.getUTCMonth();
978
- new_date.setUTCDate(day);
979
- test = function() {
980
- return new_month != new_date.getUTCMonth();
981
- };
982
- }
983
- // Common date-resetting loop -- if date is beyond end of month, make it
984
- // end of month
985
- while (test()) {
986
- new_date.setUTCDate(--day);
987
- new_date.setUTCMonth(new_month);
988
- }
989
- return new_date;
990
- },
991
-
992
- moveYear: function(date, dir) {
993
- return this.moveMonth(date, dir * 12);
994
- },
995
-
996
- dateWithinRange: function(date) {
997
- return date >= this.startDate && date <= this.endDate;
998
- },
999
-
1000
- keydown: function(e) {
1001
- if (!this.keyboardNavigation) {
1002
- return true;
1003
- }
1004
- if (this.picker.is(':not(:visible)')) {
1005
- if (e.keyCode == 27) // allow escape to hide and re-show picker
1006
- this.show();
1007
- return;
1008
- }
1009
- var dateChanged = false,
1010
- dir, day, month,
1011
- newDate, newViewDate;
1012
- switch (e.keyCode) {
1013
- case 27: // escape
1014
- this.hide();
1015
- e.preventDefault();
1016
- break;
1017
- case 37: // left
1018
- case 39: // right
1019
- if (!this.keyboardNavigation) break;
1020
- dir = e.keyCode == 37 ? -1 : 1;
1021
- if (e.ctrlKey) {
1022
- newDate = this.moveYear(this.date, dir);
1023
- newViewDate = this.moveYear(this.viewDate, dir);
1024
- } else if (e.shiftKey) {
1025
- newDate = this.moveMonth(this.date, dir);
1026
- newViewDate = this.moveMonth(this.viewDate, dir);
1027
- } else {
1028
- newDate = new Date(this.date.valueOf());
1029
- newDate.setUTCDate(this.date.getUTCDate() + dir);
1030
- newViewDate = new Date(this.viewDate.valueOf());
1031
- newViewDate.setUTCDate(this.viewDate.getUTCDate() + dir);
1032
- }
1033
- if (this.dateWithinRange(newDate)) {
1034
- this.date = newDate;
1035
- this.viewDate = newViewDate;
1036
- this.setValue();
1037
- this.update();
1038
- e.preventDefault();
1039
- dateChanged = true;
1040
- }
1041
- break;
1042
- case 38: // up
1043
- case 40: // down
1044
- if (!this.keyboardNavigation) break;
1045
- dir = e.keyCode == 38 ? -1 : 1;
1046
- if (e.ctrlKey) {
1047
- newDate = this.moveYear(this.date, dir);
1048
- newViewDate = this.moveYear(this.viewDate, dir);
1049
- } else if (e.shiftKey) {
1050
- newDate = this.moveMonth(this.date, dir);
1051
- newViewDate = this.moveMonth(this.viewDate, dir);
1052
- } else {
1053
- newDate = new Date(this.date.valueOf());
1054
- newDate.setUTCDate(this.date.getUTCDate() + dir * 7);
1055
- newViewDate = new Date(this.viewDate.valueOf());
1056
- newViewDate.setUTCDate(this.viewDate.getUTCDate() + dir * 7);
1057
- }
1058
- if (this.dateWithinRange(newDate)) {
1059
- this.date = newDate;
1060
- this.viewDate = newViewDate;
1061
- this.setValue();
1062
- this.update();
1063
- e.preventDefault();
1064
- dateChanged = true;
1065
- }
1066
- break;
1067
- case 13: // enter
1068
- this.hide();
1069
- e.preventDefault();
1070
- break;
1071
- case 9: // tab
1072
- this.hide();
1073
- break;
1074
- }
1075
- if (dateChanged) {
1076
- this.element.trigger({
1077
- type: 'changeDate',
1078
- date: this.date
1079
- });
1080
- var element;
1081
- if (this.isInput) {
1082
- element = this.element;
1083
- } else if (this.component) {
1084
- element = this.element.find('input');
1085
- }
1086
- if (element) {
1087
- element.change();
1088
- }
1089
- }
1090
- },
1091
-
1092
- showMode: function(dir) {
1093
-
1094
- if (dir) {
1095
- var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));
1096
- if (newViewMode >= this.minView && newViewMode <= this.maxView) {
1097
- this.viewMode = newViewMode;
1098
- }
1099
- }
1100
- /*
1101
- vitalets: fixing bug of very special conditions:
1102
- jquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.
1103
- Method show() does not set display css correctly and datepicker is not shown.
1104
- Changed to .css('display', 'block') solve the problem.
1105
- See https://github.com/vitalets/x-editable/issues/37
1106
-
1107
- In jquery 1.7.2+ everything works fine.
1108
- */
1109
- //this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
1110
- this.picker.find('>div').hide().filter('.datepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
1111
- this.updateNavArrows();
1112
- },
1113
-
1114
- changeViewDate: function(date) {
1115
- this.date = date;
1116
- this.viewDate = date;
1117
- this.fill();
1118
- },
1119
-
1120
- reset: function(e) {
1121
- this._setDate(null, 'date');
1122
- }
1123
- };
1124
-
1125
- $.fn.fdatepicker = function(option) {
1126
- var args = Array.apply(null, arguments);
1127
- args.shift();
1128
- return this.each(function() {
1129
- var $this = $(this),
1130
- data = $this.data('datepicker'),
1131
- options = typeof option == 'object' && option;
1132
- if (!data) {
1133
- $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.fdatepicker.defaults, options))));
1134
- }
1135
- if (typeof option == 'string' && typeof data[option] == 'function') {
1136
- data[option].apply(data, args);
1137
- }
1138
- });
1139
- };
1140
-
1141
- $.fn.fdatepicker.defaults = {
1142
- onRender: function(date) {
1143
- return '';
1144
- }
1145
- };
1146
- $.fn.fdatepicker.Constructor = Datepicker;
1147
- var dates = $.fn.fdatepicker.dates = {
1148
- 'en': {
1149
- days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
1150
- daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
1151
- daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
1152
- months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
1153
- monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
1154
- today: "Today",
1155
- titleFormat: "MM yyyy"
1156
- }
1157
- };
1158
-
1159
- var DPGlobal = {
1160
- modes: [{
1161
- clsName: 'minutes',
1162
- navFnc: 'Hours',
1163
- navStep: 1
1164
- }, {
1165
- clsName: 'hours',
1166
- navFnc: 'Date',
1167
- navStep: 1
1168
- }, {
1169
- clsName: 'days',
1170
- navFnc: 'Month',
1171
- navStep: 1
1172
- }, {
1173
- clsName: 'months',
1174
- navFnc: 'FullYear',
1175
- navStep: 1
1176
- }, {
1177
- clsName: 'years',
1178
- navFnc: 'FullYear',
1179
- navStep: 10
1180
- }],
1181
- isLeapYear: function(year) {
1182
- return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
1183
- },
1184
- getDaysInMonth: function(year, month) {
1185
- return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
1186
- },
1187
- validParts: /hh?|ii?|ss?|dd?|mm?|MM?|yy(?:yy)?/g,
1188
- nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
1189
- parseFormat: function(format) {
1190
- // IE treats \0 as a string end in inputs (truncating the value),
1191
- // so it's a bad format delimiter, anyway
1192
- var separators = format.replace(this.validParts, '\0').split('\0'),
1193
- parts = format.match(this.validParts);
1194
- if (!separators || !separators.length || !parts || parts.length === 0) {
1195
- throw new Error("Invalid date format.");
1196
- }
1197
- this.formatText = format;
1198
- return {
1199
- separators: separators,
1200
- parts: parts
1201
- };
1202
- },
1203
- parseDate: function(date, format, language) {
1204
- if (date instanceof Date) return new Date(date.valueOf() - date.getTimezoneOffset() * 60000);
1205
- if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) {
1206
- format = this.parseFormat('yyyy-mm-dd');
1207
- }
1208
- if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) {
1209
- format = this.parseFormat('yyyy-mm-dd hh:ii');
1210
- }
1211
- if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) {
1212
- format = this.parseFormat('yyyy-mm-dd hh:ii:ss');
1213
- }
1214
- if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) {
1215
- var part_re = /([-+]\d+)([dmwy])/,
1216
- parts = date.match(/([-+]\d+)([dmwy])/g),
1217
- part, dir;
1218
- date = new Date();
1219
- for (var i = 0; i < parts.length; i++) {
1220
- part = part_re.exec(parts[i]);
1221
- dir = parseInt(part[1]);
1222
- switch (part[2]) {
1223
- case 'd':
1224
- date.setUTCDate(date.getUTCDate() + dir);
1225
- break;
1226
- case 'm':
1227
- date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);
1228
- break;
1229
- case 'w':
1230
- date.setUTCDate(date.getUTCDate() + dir * 7);
1231
- break;
1232
- case 'y':
1233
- date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);
1234
- break;
1235
- }
1236
- }
1237
- return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
1238
- }
1239
- var parts = date && date.match(this.nonpunctuation) || [],
1240
- date = new Date(),
1241
- parsed = {},
1242
- setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
1243
- setters_map = {
1244
- hh: function(d, v) {
1245
- return d.setUTCHours(v);
1246
- },
1247
- h: function(d, v) {
1248
- return d.setUTCHours(v);
1249
- },
1250
- ii: function(d, v) {
1251
- return d.setUTCMinutes(v);
1252
- },
1253
- i: function(d, v) {
1254
- return d.setUTCMinutes(v);
1255
- },
1256
- ss: function(d, v) {
1257
- return d.setUTCSeconds(v);
1258
- },
1259
- s: function(d, v) {
1260
- return d.setUTCSeconds(v);
1261
- },
1262
- yyyy: function(d, v) {
1263
- return d.setUTCFullYear(v);
1264
- },
1265
- yy: function(d, v) {
1266
- return d.setUTCFullYear(2000 + v);
1267
- },
1268
- m: function(d, v) {
1269
- v -= 1;
1270
- while (v < 0) v += 12;
1271
- v %= 12;
1272
- d.setUTCMonth(v);
1273
- while (d.getUTCMonth() != v)
1274
- d.setUTCDate(d.getUTCDate() - 1);
1275
- return d;
1276
- },
1277
- d: function(d, v) {
1278
- return d.setUTCDate(v);
1279
- }
1280
- },
1281
- val, filtered, part;
1282
- setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
1283
- setters_map['dd'] = setters_map['d'];
1284
- date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); //date.getHours(), date.getMinutes(), date.getSeconds());
1285
- if (parts.length == format.parts.length) {
1286
- for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
1287
- val = parseInt(parts[i], 10);
1288
- part = format.parts[i];
1289
- if (isNaN(val)) {
1290
- switch (part) {
1291
- case 'MM':
1292
- filtered = $(dates[language].months).filter(function() {
1293
- var m = this.slice(0, parts[i].length),
1294
- p = parts[i].slice(0, m.length);
1295
- return m == p;
1296
- });
1297
- val = $.inArray(filtered[0], dates[language].months) + 1;
1298
- break;
1299
- case 'M':
1300
- filtered = $(dates[language].monthsShort).filter(function() {
1301
- var m = this.slice(0, parts[i].length),
1302
- p = parts[i].slice(0, m.length);
1303
- return m == p;
1304
- });
1305
- val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
1306
- break;
1307
- }
1308
- }
1309
- parsed[part] = val;
1310
- }
1311
- for (var i = 0, s; i < setters_order.length; i++) {
1312
- s = setters_order[i];
1313
- if (s in parsed && !isNaN(parsed[s]))
1314
- setters_map[s](date, parsed[s])
1315
- }
1316
- }
1317
- return date;
1318
- },
1319
- formatDate: function(date, format, language) {
1320
- if (date == null) {
1321
- return '';
1322
- }
1323
- var val = {
1324
- h: date.getUTCHours(),
1325
- i: date.getUTCMinutes(),
1326
- s: date.getUTCSeconds(),
1327
- d: date.getUTCDate(),
1328
- m: date.getUTCMonth() + 1,
1329
- M: dates[language].monthsShort[date.getUTCMonth()],
1330
- MM: dates[language].months[date.getUTCMonth()],
1331
- yy: date.getUTCFullYear().toString().substring(2),
1332
- yyyy: date.getUTCFullYear()
1333
- };
1334
- val.hh = (val.h < 10 ? '0' : '') + val.h;
1335
- val.ii = (val.i < 10 ? '0' : '') + val.i;
1336
- val.ss = (val.s < 10 ? '0' : '') + val.s;
1337
- val.dd = (val.d < 10 ? '0' : '') + val.d;
1338
- val.mm = (val.m < 10 ? '0' : '') + val.m;
1339
- var date = [],
1340
- seps = $.extend([], format.separators);
1341
- for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
1342
- if (seps.length)
1343
- date.push(seps.shift())
1344
- date.push(val[format.parts[i]]);
1345
- }
1346
- return date.join('');
1347
- },
1348
- convertViewMode: function(viewMode) {
1349
- switch (viewMode) {
1350
- case 4:
1351
- case 'decade':
1352
- viewMode = 4;
1353
- break;
1354
- case 3:
1355
- case 'year':
1356
- viewMode = 3;
1357
- break;
1358
- case 2:
1359
- case 'month':
1360
- viewMode = 2;
1361
- break;
1362
- case 1:
1363
- case 'day':
1364
- viewMode = 1;
1365
- break;
1366
- case 0:
1367
- case 'hour':
1368
- viewMode = 0;
1369
- break;
1370
- }
1371
-
1372
- return viewMode;
1373
- },
1374
- headTemplate: function(leftArrow, rightArrow) {return('<thead>' +
1375
- '<tr>' +
1376
- '<th class="prev">' + leftArrow + '</th>' +
1377
- '<th colspan="5" class="date-switch"></th>' +
1378
- '<th class="next">' + rightArrow + '</th>' +
1379
- '</tr>' +
1380
- '</thead>')},
1381
- contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
1382
- footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'
1383
- };
1384
- DPGlobal.template = function(leftArrow, rightArrow, closeIcon) {return( '<div class="datepicker">' +
1385
- '<div class="datepicker-minutes">' +
1386
- '<table class=" table-condensed">' +
1387
- DPGlobal.headTemplate(leftArrow, rightArrow) +
1388
- DPGlobal.contTemplate +
1389
- DPGlobal.footTemplate +
1390
- '</table>' +
1391
- '</div>' +
1392
- '<div class="datepicker-hours">' +
1393
- '<table class=" table-condensed">' +
1394
- DPGlobal.headTemplate(leftArrow, rightArrow) +
1395
- DPGlobal.contTemplate +
1396
- DPGlobal.footTemplate +
1397
- '</table>' +
1398
- '</div>' +
1399
- '<div class="datepicker-days">' +
1400
- '<table class=" table-condensed">' +
1401
- DPGlobal.headTemplate(leftArrow, rightArrow) +
1402
- '<tbody></tbody>' +
1403
- DPGlobal.footTemplate +
1404
- '</table>' +
1405
- '</div>' +
1406
- '<div class="datepicker-months">' +
1407
- '<table class="table-condensed">' +
1408
- DPGlobal.headTemplate(leftArrow, rightArrow) +
1409
- DPGlobal.contTemplate +
1410
- DPGlobal.footTemplate +
1411
- '</table>' +
1412
- '</div>' +
1413
- '<div class="datepicker-years">' +
1414
- '<table class="table-condensed">' +
1415
- DPGlobal.headTemplate(leftArrow, rightArrow) +
1416
- DPGlobal.contTemplate +
1417
- DPGlobal.footTemplate +
1418
- '</table>' +
1419
- '</div>' +
1420
- '<a class="button datepicker-close tiny alert right" style="width:auto;">' + closeIcon + '</a>' +
1421
- '</div>')};
1422
-
1423
- $.fn.fdatepicker.DPGlobal = DPGlobal;
1424
-
1425
- }(window.jQuery);