fae-railsz 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +5 -0
- data/Rakefile +37 -0
- data/app/assets/fonts/fae/icons.eot +0 -0
- data/app/assets/fonts/fae/icons.svg +56 -0
- data/app/assets/fonts/fae/icons.ttf +0 -0
- data/app/assets/fonts/fae/icons.woff +0 -0
- data/app/assets/fonts/fae/lato-bold-webfont.eot +0 -0
- data/app/assets/fonts/fae/lato-bold-webfont.svg +4551 -0
- data/app/assets/fonts/fae/lato-bold-webfont.ttf +0 -0
- data/app/assets/fonts/fae/lato-bold-webfont.woff +0 -0
- data/app/assets/fonts/fae/lato-light-webfont.eot +0 -0
- data/app/assets/fonts/fae/lato-light-webfont.svg +4241 -0
- data/app/assets/fonts/fae/lato-light-webfont.ttf +0 -0
- data/app/assets/fonts/fae/lato-light-webfont.woff +0 -0
- data/app/assets/fonts/fae/lato-regular-webfont.eot +0 -0
- data/app/assets/fonts/fae/lato-regular-webfont.svg +4241 -0
- data/app/assets/fonts/fae/lato-regular-webfont.ttf +0 -0
- data/app/assets/fonts/fae/lato-regular-webfont.woff +0 -0
- data/app/assets/fonts/fae/selection.json +1334 -0
- data/app/assets/images/fae/error_bg.jpg +0 -0
- data/app/assets/images/fae/error_sad_face.png +0 -0
- data/app/assets/images/fae/icons/alert.svg +9 -0
- data/app/assets/images/fae/icons/arrow_down.svg +8 -0
- data/app/assets/images/fae/icons/arrow_left.svg +9 -0
- data/app/assets/images/fae/icons/arrow_right.svg +9 -0
- data/app/assets/images/fae/icons/arrow_stacked.svg +8 -0
- data/app/assets/images/fae/icons/arrow_up.svg +8 -0
- data/app/assets/images/fae/icons/calendar.svg +17 -0
- data/app/assets/images/fae/icons/check.svg +7 -0
- data/app/assets/images/fae/icons/checkmark.svg +8 -0
- data/app/assets/images/fae/icons/chevron_down.svg +7 -0
- data/app/assets/images/fae/icons/chevron_left.svg +10 -0
- data/app/assets/images/fae/icons/chevron_right.svg +10 -0
- data/app/assets/images/fae/icons/chevron_up.svg +7 -0
- data/app/assets/images/fae/icons/delete.svg +8 -0
- data/app/assets/images/fae/icons/delete_x.svg +8 -0
- data/app/assets/images/fae/icons/edit.svg +11 -0
- data/app/assets/images/fae/icons/handle.svg +13 -0
- data/app/assets/images/fae/icons/home.svg +10 -0
- data/app/assets/images/fae/icons/logout.svg +12 -0
- data/app/assets/images/fae/icons/magnifying_glass.svg +10 -0
- data/app/assets/images/fae/icons/menu.svg +11 -0
- data/app/assets/images/fae/icons/offlink.svg +25 -0
- data/app/assets/images/fae/icons/plus.svg +8 -0
- data/app/assets/images/fae/icons/pulldown.svg +11 -0
- data/app/assets/images/fae/icons/search.svg +11 -0
- data/app/assets/images/fae/icons/settings.svg +12 -0
- data/app/assets/images/fae/icons/sort.svg +11 -0
- data/app/assets/images/fae/icons/support.svg +15 -0
- data/app/assets/images/fae/icons/trash.svg +10 -0
- data/app/assets/images/fae/icons/trumbowyg.svg +1 -0
- data/app/assets/images/fae/icons/user.svg +13 -0
- data/app/assets/images/fae/icons/users.svg +19 -0
- data/app/assets/images/fae/icons/zoom.svg +12 -0
- data/app/assets/images/fae/tutorial_model_location.png +0 -0
- data/app/assets/images/fae/youtube_helper.jpg +0 -0
- data/app/assets/javascripts/fae/_modals.js +60 -0
- data/app/assets/javascripts/fae/_tables.js +403 -0
- data/app/assets/javascripts/fae/admin.js.erb +11 -0
- data/app/assets/javascripts/fae/application.js +63 -0
- data/app/assets/javascripts/fae/fae_init.js +8 -0
- data/app/assets/javascripts/fae/form/_ajax.js +380 -0
- data/app/assets/javascripts/fae/form/_cancel.js +38 -0
- data/app/assets/javascripts/fae/form/_filtering.js +276 -0
- data/app/assets/javascripts/fae/form/_form.js +60 -0
- data/app/assets/javascripts/fae/form/_slugger.js.erb +100 -0
- data/app/assets/javascripts/fae/form/_validator.js +459 -0
- data/app/assets/javascripts/fae/form/fae_chosen.js +44 -0
- data/app/assets/javascripts/fae/form/fileinputer.js +178 -0
- data/app/assets/javascripts/fae/form/hinter.js +111 -0
- data/app/assets/javascripts/fae/form/inputs/_checkbox.js +27 -0
- data/app/assets/javascripts/fae/form/inputs/_color.js +42 -0
- data/app/assets/javascripts/fae/form/inputs/_dates.js +78 -0
- data/app/assets/javascripts/fae/form/inputs/_select.js +162 -0
- data/app/assets/javascripts/fae/form/inputs/_text.js +118 -0
- data/app/assets/javascripts/fae/navigation/_global_search.js +184 -0
- data/app/assets/javascripts/fae/navigation/_language.js +89 -0
- data/app/assets/javascripts/fae/navigation/_navigation.js +206 -0
- data/app/assets/javascripts/fae/navigation/_subnav_highlighter.js +81 -0
- data/app/assets/javascripts/fae/navigation/sticky.js +186 -0
- data/app/assets/javascripts/fae/vendor/chosen.jquery.min.js +2 -0
- data/app/assets/javascripts/fae/vendor/frob_core_helpers.js +587 -0
- data/app/assets/javascripts/fae/vendor/fryr.js +437 -0
- data/app/assets/javascripts/fae/vendor/jqColorPicker.min.js +4 -0
- data/app/assets/javascripts/fae/vendor/jquery.daterangepicker.js +1292 -0
- data/app/assets/javascripts/fae/vendor/jquery.multi-select.js +534 -0
- data/app/assets/javascripts/fae/vendor/jquery.simplemodal.1.4.4.js +719 -0
- data/app/assets/javascripts/fae/vendor/jquery.tablesorter.js +1901 -0
- data/app/assets/javascripts/fae/vendor/js.cookie.js +139 -0
- data/app/assets/javascripts/fae/vendor/moment.min.js +7 -0
- data/app/assets/javascripts/fae/vendor/simplemde.min.js +13 -0
- data/app/assets/javascripts/fae/vendor/touch_punch.js +11 -0
- data/app/assets/javascripts/fae/vendor/trumbowyg.js.erb +4 -0
- data/app/assets/javascripts/fae/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js +223 -0
- data/app/assets/javascripts/fae/vendor/trumbowyg/trumbowyg.js +1603 -0
- data/app/assets/stylesheets/fae/application.css +8 -0
- data/app/assets/stylesheets/fae/base.scss +82 -0
- data/app/assets/stylesheets/fae/globals/_fonts.scss +43 -0
- data/app/assets/stylesheets/fae/globals/_icons.scss +15 -0
- data/app/assets/stylesheets/fae/globals/_plugins.scss +51 -0
- data/app/assets/stylesheets/fae/globals/_tags.scss +68 -0
- data/app/assets/stylesheets/fae/globals/imports/_extends.scss +53 -0
- data/app/assets/stylesheets/fae/globals/imports/_mixins.scss +58 -0
- data/app/assets/stylesheets/fae/globals/imports/_variables.scss +165 -0
- data/app/assets/stylesheets/fae/globals/imports/finescss/_fine.scss +7 -0
- data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_functions.scss +88 -0
- data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_mixins.scss +280 -0
- data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_variables.scss +30 -0
- data/app/assets/stylesheets/fae/globals/layout/_base.scss +48 -0
- data/app/assets/stylesheets/fae/globals/layout/_breadcrumbs.scss +45 -0
- data/app/assets/stylesheets/fae/globals/layout/_content-header.scss +99 -0
- data/app/assets/stylesheets/fae/globals/legacy/_pre-1.3.scss +659 -0
- data/app/assets/stylesheets/fae/globals/navigation/_base.scss +22 -0
- data/app/assets/stylesheets/fae/globals/navigation/_footer.scss +50 -0
- data/app/assets/stylesheets/fae/globals/navigation/_header.scss +149 -0
- data/app/assets/stylesheets/fae/globals/navigation/_mobilenav.scss +149 -0
- data/app/assets/stylesheets/fae/globals/navigation/_search.scss +76 -0
- data/app/assets/stylesheets/fae/globals/navigation/_sidenav.scss +142 -0
- data/app/assets/stylesheets/fae/globals/navigation/_utility.scss +95 -0
- data/app/assets/stylesheets/fae/modules/_alerts.scss +50 -0
- data/app/assets/stylesheets/fae/modules/_buttons.scss +62 -0
- data/app/assets/stylesheets/fae/modules/_modal.scss +78 -0
- data/app/assets/stylesheets/fae/modules/_toggles.scss +48 -0
- data/app/assets/stylesheets/fae/modules/forms/_asset-actions.scss +83 -0
- data/app/assets/stylesheets/fae/modules/forms/_base.scss +100 -0
- data/app/assets/stylesheets/fae/modules/forms/_checkbox.scss +87 -0
- data/app/assets/stylesheets/fae/modules/forms/_colorpicker.scss +57 -0
- data/app/assets/stylesheets/fae/modules/forms/_date.scss +335 -0
- data/app/assets/stylesheets/fae/modules/forms/_hints.scss +40 -0
- data/app/assets/stylesheets/fae/modules/forms/_label.scss +57 -0
- data/app/assets/stylesheets/fae/modules/forms/_radio.scss +69 -0
- data/app/assets/stylesheets/fae/modules/forms/_select.scss +317 -0
- data/app/assets/stylesheets/fae/modules/forms/_simple-mde.scss +29 -0
- data/app/assets/stylesheets/fae/modules/forms/_text.scss +62 -0
- data/app/assets/stylesheets/fae/modules/forms/_textarea.scss +16 -0
- data/app/assets/stylesheets/fae/modules/forms/_validation.scss +63 -0
- data/app/assets/stylesheets/fae/modules/tables/_actions.scss +41 -0
- data/app/assets/stylesheets/fae/modules/tables/_base.scss +63 -0
- data/app/assets/stylesheets/fae/modules/tables/_collapsible.scss +76 -0
- data/app/assets/stylesheets/fae/modules/tables/_filters.scss +61 -0
- data/app/assets/stylesheets/fae/modules/tables/_image.scss +21 -0
- data/app/assets/stylesheets/fae/modules/tables/_pagination.scss +34 -0
- data/app/assets/stylesheets/fae/modules/tables/_sorting.scss +58 -0
- data/app/assets/stylesheets/fae/modules/tables/_sticky.scss +9 -0
- data/app/assets/stylesheets/fae/modules/tables/_tooltips.scss +24 -0
- data/app/assets/stylesheets/fae/pages/_error.scss +35 -0
- data/app/assets/stylesheets/fae/pages/_help.scss +28 -0
- data/app/assets/stylesheets/fae/pages/_home.scss +18 -0
- data/app/assets/stylesheets/fae/pages/_login.scss +137 -0
- data/app/assets/stylesheets/fae/vendor/chosen.css +377 -0
- data/app/assets/stylesheets/fae/vendor/daterangepicker.css +227 -0
- data/app/assets/stylesheets/fae/vendor/reset.css +48 -0
- data/app/assets/stylesheets/fae/vendor/simplemde.min.css +7 -0
- data/app/assets/stylesheets/fae/vendor/trumbowyg.css +584 -0
- data/app/controllers/concerns/fae/application_controller_concern.rb +1 -0
- data/app/controllers/concerns/fae/asset_cloner.rb +46 -0
- data/app/controllers/concerns/fae/cloneable.rb +136 -0
- data/app/controllers/fae/application_controller.rb +123 -0
- data/app/controllers/fae/base_controller.rb +117 -0
- data/app/controllers/fae/files_controller.rb +26 -0
- data/app/controllers/fae/images_controller.rb +37 -0
- data/app/controllers/fae/nested_base_controller.rb +100 -0
- data/app/controllers/fae/options_controller.rb +29 -0
- data/app/controllers/fae/pages_controller.rb +44 -0
- data/app/controllers/fae/setup_controller.rb +54 -0
- data/app/controllers/fae/static_pages_controller.rb +54 -0
- data/app/controllers/fae/users_controller.rb +71 -0
- data/app/controllers/fae/utilities_controller.rb +61 -0
- data/app/helpers/fae/application_helper.rb +114 -0
- data/app/helpers/fae/fae_helper.rb +6 -0
- data/app/helpers/fae/form_helper.rb +240 -0
- data/app/helpers/fae/nested_form_helper.rb +39 -0
- data/app/helpers/fae/view_helper.rb +175 -0
- data/app/inputs/date_range_input.rb +17 -0
- data/app/inputs/radio_collection_input.rb +17 -0
- data/app/inputs/symbol_input.rb +5 -0
- data/app/models/concerns/fae/assets_validatable.rb +12 -0
- data/app/models/concerns/fae/authorization_concern.rb +12 -0
- data/app/models/concerns/fae/base_model_concern.rb +105 -0
- data/app/models/concerns/fae/change_concern.rb +1 -0
- data/app/models/concerns/fae/file_concern.rb +1 -0
- data/app/models/concerns/fae/image_concern.rb +1 -0
- data/app/models/concerns/fae/navigation_concern.rb +10 -0
- data/app/models/concerns/fae/option_concern.rb +1 -0
- data/app/models/concerns/fae/page_validatable.rb +26 -0
- data/app/models/concerns/fae/paper_trailer.rb +8 -0
- data/app/models/concerns/fae/role_concern.rb +1 -0
- data/app/models/concerns/fae/sortable.rb +51 -0
- data/app/models/concerns/fae/static_page_concern.rb +1 -0
- data/app/models/concerns/fae/text_area_concern.rb +1 -0
- data/app/models/concerns/fae/text_field_concern.rb +1 -0
- data/app/models/concerns/fae/trackable.rb +124 -0
- data/app/models/concerns/fae/user_concern.rb +7 -0
- data/app/models/fae/authorization.rb +8 -0
- data/app/models/fae/change.rb +53 -0
- data/app/models/fae/file.rb +24 -0
- data/app/models/fae/image.rb +33 -0
- data/app/models/fae/navigation.rb +132 -0
- data/app/models/fae/option.rb +38 -0
- data/app/models/fae/role.rb +18 -0
- data/app/models/fae/static_page.rb +109 -0
- data/app/models/fae/text_area.rb +14 -0
- data/app/models/fae/text_field.rb +14 -0
- data/app/models/fae/user.rb +67 -0
- data/app/uploaders/fae/file_uploader.rb +26 -0
- data/app/uploaders/fae/image_uploader.rb +28 -0
- data/app/validators/fae/cross_model_uniqueness_validator.rb +14 -0
- data/app/views/devise/confirmations/new.html.slim +13 -0
- data/app/views/devise/mailer/confirmation_instructions.html.slim +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.slim +5 -0
- data/app/views/devise/mailer/unlock_instructions.html.slim +4 -0
- data/app/views/devise/passwords/edit.html.slim +10 -0
- data/app/views/devise/passwords/new.html.slim +10 -0
- data/app/views/devise/registrations/edit.html.slim +22 -0
- data/app/views/devise/registrations/new.html.slim +15 -0
- data/app/views/devise/sessions/new.html.slim +7 -0
- data/app/views/devise/shared/_links.slim +25 -0
- data/app/views/devise/unlocks/new.html.slim +13 -0
- data/app/views/fae/application/_breadcrumb.html.slim +19 -0
- data/app/views/fae/application/_content_form.html.slim +55 -0
- data/app/views/fae/application/_credit.slim +6 -0
- data/app/views/fae/application/_file_uploader.html.slim +36 -0
- data/app/views/fae/application/_flash_messages.slim +2 -0
- data/app/views/fae/application/_global_search_results.html.slim +37 -0
- data/app/views/fae/application/_header.slim +50 -0
- data/app/views/fae/application/_markdown_helper.slim +41 -0
- data/app/views/fae/application/_mobilenav.slim +66 -0
- data/app/views/fae/application/_sidenav.slim +23 -0
- data/app/views/fae/application/_user_log.html.slim +36 -0
- data/app/views/fae/images/_image_uploader.html.slim +66 -0
- data/app/views/fae/options/_form.html.slim +16 -0
- data/app/views/fae/options/edit.html.slim +1 -0
- data/app/views/fae/pages/activity_log.html.slim +32 -0
- data/app/views/fae/pages/disabled_environment.html.slim +4 -0
- data/app/views/fae/pages/error404.html.slim +7 -0
- data/app/views/fae/pages/help.html.slim +35 -0
- data/app/views/fae/pages/home.html.slim +36 -0
- data/app/views/fae/setup/first_user.html.slim +11 -0
- data/app/views/fae/shared/_errors.slim +4 -0
- data/app/views/fae/shared/_form_header.html.slim +40 -0
- data/app/views/fae/shared/_index_header.html.slim +26 -0
- data/app/views/fae/shared/_nested_table.html.slim +49 -0
- data/app/views/fae/shared/_recent_changes.html.slim +22 -0
- data/app/views/fae/shared/_shared_nested_table.html.slim +46 -0
- data/app/views/fae/static_pages/index.html.slim +13 -0
- data/app/views/fae/users/_form.html.slim +19 -0
- data/app/views/fae/users/edit.html.slim +1 -0
- data/app/views/fae/users/index.html.slim +23 -0
- data/app/views/fae/users/new.html.slim +1 -0
- data/app/views/fae/users/settings.html.slim +1 -0
- data/app/views/kaminari/fae/_gap.html.slim +8 -0
- data/app/views/kaminari/fae/_next_page.html.slim +9 -0
- data/app/views/kaminari/fae/_page.html.slim +15 -0
- data/app/views/kaminari/fae/_paginator.html.slim +15 -0
- data/app/views/kaminari/fae/_prev_page.html.slim +9 -0
- data/app/views/layouts/devise.html.slim +29 -0
- data/app/views/layouts/fae/application.html.slim +23 -0
- data/app/views/layouts/fae/error.html.slim +11 -0
- data/config/deploy.rb +73 -0
- data/config/deploy/dev.rb +19 -0
- data/config/deploy/prod.rb +19 -0
- data/config/deploy/stage.rb +19 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/carrierwave.rb +3 -0
- data/config/initializers/devise.rb +258 -0
- data/config/initializers/devise_monkeypatch.rb +11 -0
- data/config/initializers/fae_judge.rb +3 -0
- data/config/initializers/inflections.rb +16 -0
- data/config/initializers/kaminari_config.rb +10 -0
- data/config/initializers/simple_form.rb +147 -0
- data/config/initializers/time_formats.rb +3 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/locales/devise.zh-CN.yml +59 -0
- data/config/locales/fae.en.yml +10 -0
- data/config/locales/fae.zh-CN.yml +10 -0
- data/config/locales/simple_form.en.yml +26 -0
- data/config/locales/simple_form.zh-CN.yml +26 -0
- data/config/routes.rb +46 -0
- data/db/migrate/20140809222030_add_user_table.rb +49 -0
- data/db/migrate/20140822224029_create_fae_roles.rb +10 -0
- data/db/migrate/20141008180718_create_fae_images_table.rb +19 -0
- data/db/migrate/20141017194616_create_fae_options.rb +16 -0
- data/db/migrate/20141021181327_create_fae_files.rb +17 -0
- data/db/migrate/20141021183047_create_fae_text_areas.rb +16 -0
- data/db/migrate/20141021184311_create_fae_pages.rb +13 -0
- data/db/migrate/20141105214814_create_fae_text_fields.rb +15 -0
- data/db/migrate/20150930224821_create_fae_changes.rb +17 -0
- data/lib/fae-rails.rb +6 -0
- data/lib/fae/concerns/models/base.rb +8 -0
- data/lib/fae/engine.rb +37 -0
- data/lib/fae/options.rb +35 -0
- data/lib/fae/validation_helper_collection.rb +76 -0
- data/lib/fae/version.rb +3 -0
- data/lib/file_size_validator.rb +71 -0
- data/lib/generators/fae/base_generator.rb +156 -0
- data/lib/generators/fae/controller_generator.rb +13 -0
- data/lib/generators/fae/install_generator.rb +61 -0
- data/lib/generators/fae/model_generator.rb +11 -0
- data/lib/generators/fae/nested_index_scaffold_generator.rb +36 -0
- data/lib/generators/fae/nested_scaffold_generator.rb +51 -0
- data/lib/generators/fae/page_generator.rb +65 -0
- data/lib/generators/fae/scaffold_generator.rb +15 -0
- data/lib/generators/fae/templates/assets/fae.js +6 -0
- data/lib/generators/fae/templates/assets/fae.scss +2 -0
- data/lib/generators/fae/templates/controllers/nested_index_scaffold_controller.rb +81 -0
- data/lib/generators/fae/templates/controllers/nested_scaffold_controller.rb +13 -0
- data/lib/generators/fae/templates/controllers/scaffold_controller.rb +13 -0
- data/lib/generators/fae/templates/controllers/static_pages_controller.rb +10 -0
- data/lib/generators/fae/templates/initializers/fae.rb +63 -0
- data/lib/generators/fae/templates/initializers/fae_fine.rb +51 -0
- data/lib/generators/fae/templates/initializers/judge.rb +6 -0
- data/lib/generators/fae/templates/models/concerns/authorization_concern.rb +27 -0
- data/lib/generators/fae/templates/models/concerns/navigation_concern.rb +33 -0
- data/lib/generators/fae/templates/models/pages_model.rb +14 -0
- data/lib/generators/fae/templates/tasks/fae_tasks.rake +19 -0
- data/lib/generators/fae/templates/views/_form.html.slim +18 -0
- data/lib/generators/fae/templates/views/_form_index_nested.html.slim +13 -0
- data/lib/generators/fae/templates/views/_form_nested.html.slim +17 -0
- data/lib/generators/fae/templates/views/edit.html.slim +1 -0
- data/lib/generators/fae/templates/views/edit_nested.html.slim +3 -0
- data/lib/generators/fae/templates/views/index.html.slim +35 -0
- data/lib/generators/fae/templates/views/index_nested.html.slim +8 -0
- data/lib/generators/fae/templates/views/new.html.slim +1 -0
- data/lib/generators/fae/templates/views/new_nested.html.slim +3 -0
- data/lib/generators/fae/templates/views/static_page_form.html.slim +15 -0
- data/lib/generators/fae/templates/views/table_nested.html.slim +4 -0
- metadata +692 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Fryr v1.2.2
|
|
3
|
+
* Command location.hash like a cook in the kitchen
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
(function (window, factory) {
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
if (typeof define === 'function' && define.amd) {
|
|
11
|
+
define([], factory(window));
|
|
12
|
+
} else if (typeof exports === 'object') {
|
|
13
|
+
module.exports = factory(window);
|
|
14
|
+
} else {
|
|
15
|
+
window.Fryr = factory(window);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
})(window, function factory(window) {
|
|
19
|
+
'use strict';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Private variable used to hold the callback function
|
|
23
|
+
* Necessary for the destory method when we decouple the event listener
|
|
24
|
+
* @type {Function}
|
|
25
|
+
*/
|
|
26
|
+
var hashCallback;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Remove all traces of a hash if it's blank
|
|
30
|
+
* @private
|
|
31
|
+
* @param {String} hash - The existing hash
|
|
32
|
+
* @see {@link http://stackoverflow.com/a/5298684}
|
|
33
|
+
* @fires history.pushState OR window.onhashchange
|
|
34
|
+
*/
|
|
35
|
+
function removeHashIfBlank(hash) {
|
|
36
|
+
if(hash === '#') {
|
|
37
|
+
// Prevent scrolling by storing the page's current scroll offset
|
|
38
|
+
var scrollV = document.body.scrollTop;
|
|
39
|
+
var scrollH = document.body.scrollLeft;
|
|
40
|
+
|
|
41
|
+
window.location.hash = '';
|
|
42
|
+
|
|
43
|
+
// Restore the scroll offset
|
|
44
|
+
document.body.scrollTop = scrollV;
|
|
45
|
+
document.body.scrollLeft = scrollH;
|
|
46
|
+
|
|
47
|
+
} else {
|
|
48
|
+
// If the hash isn't blank, fire onhashchange
|
|
49
|
+
window.location.hash = hash;
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Delete value based on key
|
|
56
|
+
* @private
|
|
57
|
+
* @param {String} key - Param to target
|
|
58
|
+
* @param {String|Number} value - Value to delete from param
|
|
59
|
+
*/
|
|
60
|
+
function removeValue(key, value) {
|
|
61
|
+
var hash = window.location.hash;
|
|
62
|
+
// check for key, anything between key and value, the value itself, and optionally the trailing comma
|
|
63
|
+
var regex_for_value = new RegExp('(' + key + '=.*)(' + value + ',?)');
|
|
64
|
+
// results come back [<search through value>, <search before value>, <value>]
|
|
65
|
+
var regex_match = hash.match(regex_for_value);
|
|
66
|
+
// replace <search through value> with everything before <value>
|
|
67
|
+
// Key is included in search in case multiple keys have the same value
|
|
68
|
+
hash = hash.replace(regex_match[0], regex_match[1]);
|
|
69
|
+
|
|
70
|
+
// Remove trailing commas, ,&, and =,
|
|
71
|
+
hash = hash.replace(/,$|(,(?=&))|((?==),)/, '')
|
|
72
|
+
|
|
73
|
+
removeHashIfBlank(hash);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Add value based on key
|
|
78
|
+
* @private
|
|
79
|
+
* @param {String} key - Param to target
|
|
80
|
+
* @param {String|Number} value - Value to add to param
|
|
81
|
+
* @param {Boolean} should_replace_value - if false, value will be appended to the param
|
|
82
|
+
* @fires window.onhashchange
|
|
83
|
+
*/
|
|
84
|
+
function addValue(key, value, should_replace_value) {
|
|
85
|
+
var hash = window.location.hash;
|
|
86
|
+
|
|
87
|
+
var old_value = param(key);
|
|
88
|
+
var new_value;
|
|
89
|
+
|
|
90
|
+
// If it's blank or is the value of the next param
|
|
91
|
+
if(old_value.charAt(0) === '&' || old_value === '') {
|
|
92
|
+
old_value = key + '=';
|
|
93
|
+
new_value = old_value + value;
|
|
94
|
+
|
|
95
|
+
} else {
|
|
96
|
+
old_value = key + '=' + old_value;
|
|
97
|
+
|
|
98
|
+
// If the value of the param should be replaced, don't append it to the existing value
|
|
99
|
+
new_value = should_replace_value ? (key + '=' + value) : (old_value + ',' + value);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
hash = hash.replace(old_value, new_value);
|
|
103
|
+
|
|
104
|
+
window.location.hash = hash;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Remove key from hash. Key's value must be removed prior to executing this function
|
|
109
|
+
* @private
|
|
110
|
+
* @param {String} key - Key to search and destroy
|
|
111
|
+
*/
|
|
112
|
+
function removeKey(key) {
|
|
113
|
+
var hash = window.location.hash;
|
|
114
|
+
var key_search = new RegExp('[?&]' + key + '=', 'g');
|
|
115
|
+
|
|
116
|
+
hash = hash.replace(key_search, '');
|
|
117
|
+
// if initial key removed, replace ampersand with question
|
|
118
|
+
hash = hash.replace('#&', '#?');
|
|
119
|
+
|
|
120
|
+
removeHashIfBlank(hash);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @private
|
|
125
|
+
* @see {@link Fryr#param documentation in the public `param` function}
|
|
126
|
+
*/
|
|
127
|
+
function param(key) {
|
|
128
|
+
if(!window.location.hash) {
|
|
129
|
+
return '';
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
var hash = window.location.hash;
|
|
133
|
+
var search = new RegExp('#.*[?&]' + key + '=([^&]+)(&|$)');
|
|
134
|
+
var key_value = hash.match(search);
|
|
135
|
+
|
|
136
|
+
return (key_value ? key_value[1] : '');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Apply value to variable if it has none
|
|
141
|
+
* @private
|
|
142
|
+
* @param {*} variable Variable to set default to
|
|
143
|
+
* @param {*} value - Default value to attribute to variable
|
|
144
|
+
* @return {*} Existing value or passed value argument
|
|
145
|
+
*/
|
|
146
|
+
function setDefault(variable, value){
|
|
147
|
+
return (typeof variable === 'undefined') ? value : variable;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Remove key/value if present in hash; add key/value if not present in hash
|
|
152
|
+
* @private
|
|
153
|
+
* @param {String} key - Param key to query against
|
|
154
|
+
* @param {String|Number} value - Value for param key
|
|
155
|
+
* @param {Boolean} key_is_required - If the key is not required, it will be removed from the hash
|
|
156
|
+
* @param {Boolean} should_replace_value - If false, value will be appended to the key
|
|
157
|
+
* @see {@link Fryr#update}
|
|
158
|
+
* @see {@link Fryr#append}
|
|
159
|
+
* @fires window.onhashchange
|
|
160
|
+
*/
|
|
161
|
+
function update(key, value, key_is_required, should_replace_value) {
|
|
162
|
+
var hash = window.location.hash;
|
|
163
|
+
|
|
164
|
+
// Ensure key exists in the hash
|
|
165
|
+
if(hash.indexOf(key) !== -1) {
|
|
166
|
+
var key_value = param(key);
|
|
167
|
+
|
|
168
|
+
// If the key is require or
|
|
169
|
+
// value isn't blank and is not in key_value
|
|
170
|
+
var value_not_in_key_value = key_value.split(',').indexOf(value) === -1;
|
|
171
|
+
if (key_is_required || (value_not_in_key_value && value !== '')) {
|
|
172
|
+
|
|
173
|
+
// add the value, replacing it if necessary
|
|
174
|
+
addValue(key, value, should_replace_value);
|
|
175
|
+
|
|
176
|
+
} else {
|
|
177
|
+
|
|
178
|
+
// If the value is blank, remove the original value from the key
|
|
179
|
+
if(value === '') {
|
|
180
|
+
removeValue(key, key_value);
|
|
181
|
+
|
|
182
|
+
// Otherwise remove the vanilla value if it's different than the original value
|
|
183
|
+
// or value should not be replaced (appended)
|
|
184
|
+
} else {
|
|
185
|
+
if(key_value !== value || !should_replace_value) {
|
|
186
|
+
removeValue(key, value);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// If key's value is blank, remove it from hash
|
|
192
|
+
if(param(key) === '') {
|
|
193
|
+
removeKey(key);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Add key if it doesn't exist
|
|
199
|
+
} else {
|
|
200
|
+
|
|
201
|
+
if(window.location.hash && window.location.hash !== '#') {
|
|
202
|
+
window.location.hash += '&' + key + '=' + value;
|
|
203
|
+
} else {
|
|
204
|
+
// Use a question mark if first key
|
|
205
|
+
window.location.hash = '?' + key + '=' + value;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Call once to initialize filtering
|
|
213
|
+
* @param {Function} hashChangeCallback - Called on every hashchange
|
|
214
|
+
* @param {Object} Updated params
|
|
215
|
+
* @param {Object} [defaults={}] - Key/value pairs for values that should be added on init. Pass {} to skip defaults
|
|
216
|
+
* @param {Boolean} [call_on_init=true] - Execute callback on initialization. Always true if defaults is supplied
|
|
217
|
+
* @return {Fryr}
|
|
218
|
+
*/
|
|
219
|
+
function Fryr(hashChangeCallback, defaults, call_on_init) {
|
|
220
|
+
defaults = setDefault(defaults, {});
|
|
221
|
+
call_on_init = setDefault(call_on_init, true);
|
|
222
|
+
|
|
223
|
+
// Set for the privateHashChange
|
|
224
|
+
var _this = this;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Very important object holder
|
|
228
|
+
* @type {Object}
|
|
229
|
+
*/
|
|
230
|
+
this.params = {};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Callback with new params. Callback defined in initialization
|
|
234
|
+
* @private
|
|
235
|
+
* @fires hashChangeCallback
|
|
236
|
+
*/
|
|
237
|
+
function privateHashChange() {
|
|
238
|
+
var params = _this.parse();
|
|
239
|
+
hashChangeCallback.call(_this, params);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
hashCallback = privateHashChange;
|
|
243
|
+
|
|
244
|
+
window.addEventListener('hashchange', hashCallback);
|
|
245
|
+
|
|
246
|
+
// Apply defaults (if present) to hash, which will file window.onhashchange
|
|
247
|
+
if( Object.keys(defaults).length && window.location.hash === '' ) {
|
|
248
|
+
this.merge(defaults, true);
|
|
249
|
+
|
|
250
|
+
// Execute the callback on load
|
|
251
|
+
} else if(call_on_init) {
|
|
252
|
+
privateHashChange.call(this);
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
Fryr.prototype = {
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Replace key/value if present in hash; add key/value if not present in hash
|
|
263
|
+
* @param {String} key - Param key to query against
|
|
264
|
+
* @param {String|Number} value - Value for param key
|
|
265
|
+
* @param {Boolean} [key_is_required=false] - if the key is not required, it will be removed from the hash
|
|
266
|
+
* @see {@link Fryr#append}
|
|
267
|
+
*/
|
|
268
|
+
update: function(key, value, key_is_required) {
|
|
269
|
+
key_is_required = setDefault(key_is_required, false);
|
|
270
|
+
update(key, value, key_is_required, true);
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Add value to key's value in a comma-delineated list if it's not present in hash
|
|
275
|
+
* @param {String} key - Param key to query against
|
|
276
|
+
* @param {String|Number} value - Value for param key
|
|
277
|
+
* @see {@link Fryr#update}
|
|
278
|
+
*/
|
|
279
|
+
append: function(key, value) {
|
|
280
|
+
update(key, value, false, false);
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Evaluate the hash
|
|
285
|
+
* @return {Object} Key/value hash of the hash broken down by params
|
|
286
|
+
*/
|
|
287
|
+
parse: function() {
|
|
288
|
+
var hash = window.location.hash;
|
|
289
|
+
var params;
|
|
290
|
+
|
|
291
|
+
// clear zombie keys and values
|
|
292
|
+
this.params = {};
|
|
293
|
+
|
|
294
|
+
if(window.location.hash && /\?/g.test(hash)) {
|
|
295
|
+
params = hash.split('?')[1];
|
|
296
|
+
params = params.split('&');
|
|
297
|
+
|
|
298
|
+
// Separate params into key values
|
|
299
|
+
for(var i = 0; i < params.length; i++) {
|
|
300
|
+
var key_value = params[i].split('=');
|
|
301
|
+
var key = key_value[0];
|
|
302
|
+
var value = key_value[1];
|
|
303
|
+
|
|
304
|
+
this.params[key] = value;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return this.params;
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Change a JSON object into a string for the hash
|
|
313
|
+
* @param {Object|String} obj - object to convert
|
|
314
|
+
* @return {String|Boolean} For use in window.location.hash. Returns false if param is not object or string
|
|
315
|
+
*/
|
|
316
|
+
convert: function(obj) {
|
|
317
|
+
if( obj.constructor === String ) {
|
|
318
|
+
obj = JSON.parse(obj);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Escape if we're not dealing with an object
|
|
322
|
+
if( obj.constructor !== Object ) {
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
var keys = Object.keys(obj);
|
|
327
|
+
// Set start with a ?
|
|
328
|
+
var new_hash = '?';
|
|
329
|
+
|
|
330
|
+
// Loop through all keys in the obj
|
|
331
|
+
for(var i = 0; i < keys.length; i++) {
|
|
332
|
+
var key = keys[i];
|
|
333
|
+
var value = obj[ key ];
|
|
334
|
+
|
|
335
|
+
if (value === '') {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if( value.constructor === Array ) {
|
|
340
|
+
value = value.join(',');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// On next key, if it isn't the first, precede with an ampersand
|
|
344
|
+
if(new_hash !== '?') {
|
|
345
|
+
new_hash += '&';
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Append key/value to new_hash
|
|
349
|
+
new_hash += key + '=' + value;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (new_hash === '?') {
|
|
353
|
+
new_hash = '';
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return new_hash;
|
|
357
|
+
},
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Wipe out or selectively replace keys in params
|
|
361
|
+
* @param {Object|String} obj - Query to replace
|
|
362
|
+
* @param {Boolean} [replace_all=false] - Whether or not to blast existing params away or replace only changed keys
|
|
363
|
+
* @fires window.onhashchange
|
|
364
|
+
* @return {String} The new hash
|
|
365
|
+
*/
|
|
366
|
+
merge: function(obj, replace_all) {
|
|
367
|
+
replace_all = setDefault(replace_all, false);
|
|
368
|
+
|
|
369
|
+
// If it's a string, convert to an object
|
|
370
|
+
if( obj.constructor === String ) {
|
|
371
|
+
obj = JSON.parse(obj);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// Override or add key values from existing params and put them into the object
|
|
375
|
+
if( !replace_all ) {
|
|
376
|
+
var new_params = this.parse();
|
|
377
|
+
|
|
378
|
+
var keys = Object.keys(new_params);
|
|
379
|
+
|
|
380
|
+
for(var i = 0; i < keys.length; i++) {
|
|
381
|
+
var key = keys[i];
|
|
382
|
+
var value = new_params[ key ];
|
|
383
|
+
|
|
384
|
+
if(!obj.hasOwnProperty(key)) {
|
|
385
|
+
obj[key] = value;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Change hash to string; if replace_all is false, original value is used
|
|
391
|
+
var new_hash = this.convert(obj);
|
|
392
|
+
|
|
393
|
+
window.location.hash = '#' + new_hash;
|
|
394
|
+
|
|
395
|
+
return new_hash;
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Retrieve a key's value
|
|
400
|
+
* @param {String} key - Param to target
|
|
401
|
+
* @example
|
|
402
|
+
* window.location.hash = '?color=blue'
|
|
403
|
+
* fryr.param('color') // => 'blue'
|
|
404
|
+
* @return {String} The value of the key
|
|
405
|
+
*/
|
|
406
|
+
param: function(key) {
|
|
407
|
+
return param(key);
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Determine if param is blank or undefined
|
|
412
|
+
* @param {String} key - Param to target
|
|
413
|
+
* @return {Boolean}
|
|
414
|
+
*/
|
|
415
|
+
paramPresent: function(key) {
|
|
416
|
+
var value = this.params[key];
|
|
417
|
+
return (typeof value !== 'undefined' && value !== '');
|
|
418
|
+
},
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Destroy current initialization, unbind hashchange listener, and reset the hash to an empty state
|
|
422
|
+
* @param {Boolean} [retain_hash=false] - Keep items in hash
|
|
423
|
+
*/
|
|
424
|
+
destroy: function(retain_hash){
|
|
425
|
+
retain_hash = setDefault(retain_hash, false);
|
|
426
|
+
|
|
427
|
+
window.removeEventListener('hashchange', hashCallback);
|
|
428
|
+
|
|
429
|
+
if(!retain_hash) {
|
|
430
|
+
window.location.hash = '';
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
return Fryr;
|
|
436
|
+
|
|
437
|
+
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! tinyColorPicker - v1.1.1 2016-07-15 */
|
|
2
|
+
|
|
3
|
+
!function(a,b){"object"==typeof exports?module.exports=b(a):"function"==typeof define&&define.amd?define("colors",[],function(){return b(a)}):a.Colors=b(a)}(this,function(a,b){"use strict";function c(a,c,d,f,g){if("string"==typeof c){var c=v.txt2color(c);d=c.type,p[d]=c[d],g=g!==b?g:c.alpha}else if(c)for(var h in c)a[d][h]=k(c[h]/l[d][h][1],0,1);return g!==b&&(a.alpha=k(+g,0,1)),e(d,f?a:b)}function d(a,b,c){var d=o.options.grey,e={};return e.RGB={r:a.r,g:a.g,b:a.b},e.rgb={r:b.r,g:b.g,b:b.b},e.alpha=c,e.equivalentGrey=n(d.r*a.r+d.g*a.g+d.b*a.b),e.rgbaMixBlack=i(b,{r:0,g:0,b:0},c,1),e.rgbaMixWhite=i(b,{r:1,g:1,b:1},c,1),e.rgbaMixBlack.luminance=h(e.rgbaMixBlack,!0),e.rgbaMixWhite.luminance=h(e.rgbaMixWhite,!0),o.options.customBG&&(e.rgbaMixCustom=i(b,o.options.customBG,c,1),e.rgbaMixCustom.luminance=h(e.rgbaMixCustom,!0),o.options.customBG.luminance=h(o.options.customBG,!0)),e}function e(a,b){var c,e,k,q=b||p,r=v,s=o.options,t=l,u=q.RND,w="",x="",y={hsl:"hsv",rgb:a},z=u.rgb;if("alpha"!==a){for(var A in t)if(!t[A][A]){a!==A&&(x=y[A]||"rgb",q[A]=r[x+"2"+A](q[x])),u[A]||(u[A]={}),c=q[A];for(w in c)u[A][w]=n(c[w]*t[A][w][1])}z=u.rgb,q.HEX=r.RGB2HEX(z),q.equivalentGrey=s.grey.r*q.rgb.r+s.grey.g*q.rgb.g+s.grey.b*q.rgb.b,q.webSave=e=f(z,51),q.webSmart=k=f(z,17),q.saveColor=z.r===e.r&&z.g===e.g&&z.b===e.b?"web save":z.r===k.r&&z.g===k.g&&z.b===k.b?"web smart":"",q.hueRGB=v.hue2RGB(q.hsv.h),b&&(q.background=d(z,q.rgb,q.alpha))}var B,C,D,E=q.rgb,F=q.alpha,G="luminance",H=q.background;return B=i(E,{r:0,g:0,b:0},F,1),B[G]=h(B,!0),q.rgbaMixBlack=B,C=i(E,{r:1,g:1,b:1},F,1),C[G]=h(C,!0),q.rgbaMixWhite=C,s.customBG&&(D=i(E,H.rgbaMixCustom,F,1),D[G]=h(D,!0),D.WCAG2Ratio=j(D[G],H.rgbaMixCustom[G]),q.rgbaMixBGMixCustom=D,D.luminanceDelta=m.abs(D[G]-H.rgbaMixCustom[G]),D.hueDelta=g(H.rgbaMixCustom,D,!0)),q.RGBLuminance=h(z),q.HUELuminance=h(q.hueRGB),s.convertCallback&&s.convertCallback(q,a),q}function f(a,b){var c={},d=0,e=b/2;for(var f in a)d=a[f]%b,c[f]=a[f]+(d>e?b-d:-d);return c}function g(a,b,c){return(m.max(a.r-b.r,b.r-a.r)+m.max(a.g-b.g,b.g-a.g)+m.max(a.b-b.b,b.b-a.b))*(c?255:1)/765}function h(a,b){for(var c=b?1:255,d=[a.r/c,a.g/c,a.b/c],e=o.options.luminance,f=d.length;f--;)d[f]=d[f]<=.03928?d[f]/12.92:m.pow((d[f]+.055)/1.055,2.4);return e.r*d[0]+e.g*d[1]+e.b*d[2]}function i(a,c,d,e){var f={},g=d!==b?d:1,h=e!==b?e:1,i=g+h*(1-g);for(var j in a)f[j]=(a[j]*g+c[j]*h*(1-g))/i;return f.a=i,f}function j(a,b){var c=1;return c=a>=b?(a+.05)/(b+.05):(b+.05)/(a+.05),n(100*c)/100}function k(a,b,c){return a>c?c:b>a?b:a}var l={rgb:{r:[0,255],g:[0,255],b:[0,255]},hsv:{h:[0,360],s:[0,100],v:[0,100]},hsl:{h:[0,360],s:[0,100],l:[0,100]},alpha:{alpha:[0,1]},HEX:{HEX:[0,16777215]}},m=a.Math,n=m.round,o={},p={},q={r:.298954,g:.586434,b:.114612},r={r:.2126,g:.7152,b:.0722},s=function(a){this.colors={RND:{}},this.options={color:"rgba(0,0,0,0)",grey:q,luminance:r,valueRanges:l},t(this,a||{})},t=function(a,d){var e,f=a.options;u(a);for(var g in d)d[g]!==b&&(f[g]=d[g]);e=f.customBG,f.customBG="string"==typeof e?v.txt2color(e).rgb:e,p=c(a.colors,f.color,b,!0)},u=function(a){o!==a&&(o=a,p=a.colors)};s.prototype.setColor=function(a,d,f){return u(this),a?c(this.colors,a,d,b,f):(f!==b&&(this.colors.alpha=k(f,0,1)),e(d))},s.prototype.setCustomBackground=function(a){return u(this),this.options.customBG="string"==typeof a?v.txt2color(a).rgb:a,c(this.colors,b,"rgb")},s.prototype.saveAsBackground=function(){return u(this),c(this.colors,b,"rgb",!0)},s.prototype.toString=function(a,b){return v.color2text((a||"rgb").toLowerCase(),this.colors,b)};var v={txt2color:function(a){var b={},c=a.replace(/(?:#|\)|%)/g,"").split("("),d=(c[1]||"").split(/,\s*/),e=c[1]?c[0].substr(0,3):"rgb",f="";if(b.type=e,b[e]={},c[1])for(var g=3;g--;)f=e[g]||e.charAt(g),b[e][f]=+d[g]/l[e][f][1];else b.rgb=v.HEX2rgb(c[0]);return b.alpha=d[3]?+d[3]:1,b},color2text:function(a,b,c){var d=c!==!1&&n(100*b.alpha)/100,e="number"==typeof d&&c!==!1&&(c||1!==d),f=b.RND.rgb,g=b.RND.hsl,h="hex"===a&&e,i="hex"===a&&!h,j="rgb"===a||h,k=j?f.r+", "+f.g+", "+f.b:i?"#"+b.HEX:g.h+", "+g.s+"%, "+g.l+"%";return i?k:(h?"rgb":a)+(e?"a":"")+"("+k+(e?", "+d:"")+")"},RGB2HEX:function(a){return((a.r<16?"0":"")+a.r.toString(16)+(a.g<16?"0":"")+a.g.toString(16)+(a.b<16?"0":"")+a.b.toString(16)).toUpperCase()},HEX2rgb:function(a){return a=a.split(""),{r:+("0x"+a[0]+a[a[3]?1:0])/255,g:+("0x"+a[a[3]?2:1]+(a[3]||a[1]))/255,b:+("0x"+(a[4]||a[2])+(a[5]||a[2]))/255}},hue2RGB:function(a){var b=6*a,c=~~b%6,d=6===b?0:b-c;return{r:n(255*[1,1-d,0,0,d,1][c]),g:n(255*[d,1,1,1-d,0,0][c]),b:n(255*[0,0,d,1,1,1-d][c])}},rgb2hsv:function(a){var b,c,d,e=a.r,f=a.g,g=a.b,h=0;return g>f&&(f=g+(g=f,0),h=-1),c=g,f>e&&(e=f+(f=e,0),h=-2/6-h,c=m.min(f,g)),b=e-c,d=e?b/e:0,{h:1e-15>d?p&&p.hsl&&p.hsl.h||0:b?m.abs(h+(f-g)/(6*b)):0,s:e?b/e:p&&p.hsv&&p.hsv.s||0,v:e}},hsv2rgb:function(a){var b=6*a.h,c=a.s,d=a.v,e=~~b,f=b-e,g=d*(1-c),h=d*(1-f*c),i=d*(1-(1-f)*c),j=e%6;return{r:[d,h,g,g,i,d][j],g:[i,d,d,h,g,g][j],b:[g,g,i,d,d,h][j]}},hsv2hsl:function(a){var b=(2-a.s)*a.v,c=a.s*a.v;return c=a.s?1>b?b?c/b:0:c/(2-b):0,{h:a.h,s:a.v||c?c:p&&p.hsl&&p.hsl.s||0,l:b/2}},rgb2hsl:function(a,b){var c=v.rgb2hsv(a);return v.hsv2hsl(b?c:p.hsv=c)},hsl2rgb:function(a){var b=6*a.h,c=a.s,d=a.l,e=.5>d?d*(1+c):d+c-c*d,f=d+d-e,g=e?(e-f)/e:0,h=~~b,i=b-h,j=e*g*i,k=f+j,l=e-j,m=h%6;return{r:[e,l,f,f,k,e][m],g:[k,e,e,l,f,f][m],b:[f,f,k,e,e,l][m]}}};return s}),function(a,b){"object"==typeof exports?module.exports=b(a,require("jquery"),require("colors")):"function"==typeof define&&define.amd?define(["jquery","colors"],function(c,d){return b(a,c,d)}):b(a,a.jQuery,a.Colors)}(this,function(a,b,c,d){"use strict";function e(a){return a.value||a.getAttribute("value")||b(a).css("background-color")||"#FFF"}function f(a){return a=a.originalEvent&&a.originalEvent.touches?a.originalEvent.touches[0]:a,a.originalEvent?a.originalEvent:a}function g(a){return b(a.find(r.doRender)[0]||a[0])}function h(c){var d=b(this),f=d.offset(),h=b(a),k=r.gap;c?(s=g(d),s._colorMode=s.data("colorMode"),p.$trigger=d,(t||i()).css(r.positionCallback.call(p,d)||{left:(t._left=f.left)-((t._left+=t._width-(h.scrollLeft()+h.width()))+k>0?t._left+k:0),top:(t._top=f.top+d.outerHeight())-((t._top+=t._height-(h.scrollTop()+h.height()))+k>0?t._top+k:0)}).show(r.animationSpeed,function(){c!==!0&&(y.toggle(!!r.opacity)._width=y.width(),v._width=v.width(),v._height=v.height(),u._height=u.height(),q.setColor(e(s[0])),n(!0))}).off(".tcp").on(D,".cp-xy-slider,.cp-z-slider,.cp-alpha",j)):p.$trigger&&b(t).hide(r.animationSpeed,function(){n(!1),p.$trigger=null}).off(".tcp")}function i(){return b("head").append('<style type="text/css" id="tinyColorPickerStyles">'+(r.css||I)+(r.cssAddon||"")+"</style>"),b(H).css({margin:r.margin}).appendTo("body").show(0,function(){p.$UI=t=b(this),F=r.GPU&&t.css("perspective")!==d,u=b(".cp-z-slider",this),v=b(".cp-xy-slider",this),w=b(".cp-xy-cursor",this),x=b(".cp-z-cursor",this),y=b(".cp-alpha",this),z=b(".cp-alpha-cursor",this),r.buildCallback.call(p,t),t.prepend("<div>").children().eq(0).css("width",t.children().eq(0).width()),t._width=this.offsetWidth,t._height=this.offsetHeight}).hide()}function j(a){var c=this.className.replace(/cp-(.*?)(?:\s*|$)/,"$1").replace("-","_");(a.button||a.which)>1||(a.preventDefault&&a.preventDefault(),a.returnValue=!1,s._offset=b(this).offset(),(c="xy_slider"===c?k:"z_slider"===c?l:m)(a),n(),A.on(E,function(){A.off(".tcp")}).on(C,function(a){c(a),n()}))}function k(a){var b=f(a),c=b.pageX-s._offset.left,d=b.pageY-s._offset.top;q.setColor({s:c/v._width*100,v:100-d/v._height*100},"hsv")}function l(a){var b=f(a).pageY-s._offset.top;q.setColor({h:360-b/u._height*360},"hsv")}function m(a){var b=f(a).pageX-s._offset.left,c=b/y._width;q.setColor({},"rgb",c)}function n(a){var b=q.colors,c=b.hueRGB,e=(b.RND.rgb,b.RND.hsl,r.dark),f=r.light,g=q.toString(s._colorMode,r.forceAlpha),h=b.HUELuminance>.22?e:f,i=b.rgbaMixBlack.luminance>.22?e:f,j=(1-b.hsv.h)*u._height,k=b.hsv.s*v._width,l=(1-b.hsv.v)*v._height,m=b.alpha*y._width,n=F?"translate3d":"",p=s[0].value,t=s[0].hasAttribute("value")&&""===p&&a!==d;v._css={backgroundColor:"rgb("+c.r+","+c.g+","+c.b+")"},w._css={transform:n+"("+k+"px, "+l+"px, 0)",left:F?"":k,top:F?"":l,borderColor:b.RGBLuminance>.22?e:f},x._css={transform:n+"(0, "+j+"px, 0)",top:F?"":j,borderColor:"transparent "+h},y._css={backgroundColor:"#"+b.HEX},z._css={transform:n+"("+m+"px, 0, 0)",left:F?"":m,borderColor:i+" transparent"},s._css={backgroundColor:t?"":g,color:t?"":b.rgbaMixBGMixCustom.luminance>.22?e:f},s.text=t?"":p!==g?g:"",a!==d?o(a):G(o)}function o(a){v.css(v._css),w.css(w._css),x.css(x._css),y.css(y._css),z.css(z._css),r.doRender&&s.css(s._css),s.text&&s.val(s.text),r.renderCallback.call(p,s,"boolean"==typeof a?a:d)}var p,q,r,s,t,u,v,w,x,y,z,A=b(document),B=b(),C="touchmove.tcp mousemove.tcp pointermove.tcp",D="touchstart.tcp mousedown.tcp pointerdown.tcp",E="touchend.tcp mouseup.tcp pointerup.tcp",F=!1,G=a.requestAnimationFrame||a.webkitRequestAnimationFrame||function(a){a()},H='<div class="cp-color-picker"><div class="cp-z-slider"><div class="cp-z-cursor"></div></div><div class="cp-xy-slider"><div class="cp-white"></div><div class="cp-xy-cursor"></div></div><div class="cp-alpha"><div class="cp-alpha-cursor"></div></div></div>',I=".cp-color-picker{position:absolute;overflow:hidden;padding:6px 6px 0;background-color:#444;color:#bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:400;cursor:default;border-radius:5px}.cp-color-picker>div{position:relative;overflow:hidden}.cp-xy-slider{float:left;height:128px;width:128px;margin-bottom:6px;background:linear-gradient(to right,#FFF,rgba(255,255,255,0))}.cp-white{height:100%;width:100%;background:linear-gradient(rgba(0,0,0,0),#000)}.cp-xy-cursor{position:absolute;top:0;width:10px;height:10px;margin:-5px;border:1px solid #fff;border-radius:100%;box-sizing:border-box}.cp-z-slider{float:right;margin-left:6px;height:128px;width:20px;background:linear-gradient(red 0,#f0f 17%,#00f 33%,#0ff 50%,#0f0 67%,#ff0 83%,red 100%)}.cp-z-cursor{position:absolute;margin-top:-4px;width:100%;border:4px solid #fff;border-color:transparent #fff;box-sizing:border-box}.cp-alpha{clear:both;width:100%;height:16px;margin:6px 0;background:linear-gradient(to right,#444,rgba(0,0,0,0))}.cp-alpha-cursor{position:absolute;margin-left:-4px;height:100%;border:4px solid #fff;border-color:#fff transparent;box-sizing:border-box}",J=function(a){q=this.color=new c(a),r=q.options,p=this};J.prototype={render:n,toggle:h},b.fn.colorPicker=function(c){var d=this,f=function(){};return c=b.extend({animationSpeed:150,GPU:!0,doRender:!0,customBG:"#FFF",opacity:!0,renderCallback:f,buildCallback:f,positionCallback:f,body:document.body,scrollResize:!0,gap:4,dark:"#222",light:"#DDD"},c),!p&&c.scrollResize&&b(a).on("resize.tcp scroll.tcp",function(){p.$trigger&&p.toggle.call(p.$trigger[0],!0)}),B=B.add(this),this.colorPicker=p||new J(c),this.options=c,b(c.body).off(".tcp").on(D,function(a){-1===B.add(t).add(b(t).find(a.target)).index(a.target)&&h()}),this.on("focusin.tcp click.tcp",function(a){p.color.options=b.extend(p.color.options,r=d.options),h.call(this,a)}).on("change.tcp",function(){q.setColor(this.value||"#FFF"),d.colorPicker.render(!0)}).each(function(){var a=e(this),d=a.split("("),f=g(b(this));f.data("colorMode",d[1]?d[0].substr(0,3):"HEX").attr("readonly",r.preventFocus),c.doRender&&f.css({"background-color":a,color:function(){return q.setColor(a).rgbaMixBGMixCustom.luminance>.22?c.dark:c.light}})})},b.fn.colorPicker.destroy=function(){b("*").off(".tcp"),p.toggle(!1),B=b()}});
|
|
4
|
+
//# sourceMappingURL=jqColorPicker.js.map
|
|
@@ -0,0 +1,1292 @@
|
|
|
1
|
+
// daterangepicker.js
|
|
2
|
+
// version : 0.0.5
|
|
3
|
+
// author : Chunlong Liu
|
|
4
|
+
// last updated at: 2014-05-27
|
|
5
|
+
// license : MIT
|
|
6
|
+
// www.jszen.com
|
|
7
|
+
|
|
8
|
+
(function($)
|
|
9
|
+
{
|
|
10
|
+
|
|
11
|
+
$.dateRangePickerLanguages =
|
|
12
|
+
{
|
|
13
|
+
'cn':
|
|
14
|
+
{
|
|
15
|
+
'selected': '已选择:',
|
|
16
|
+
'day':'天',
|
|
17
|
+
'days': '天',
|
|
18
|
+
'apply': '确定',
|
|
19
|
+
'week-1' : '一',
|
|
20
|
+
'week-2' : '二',
|
|
21
|
+
'week-3' : '三',
|
|
22
|
+
'week-4' : '四',
|
|
23
|
+
'week-5' : '五',
|
|
24
|
+
'week-6' : '六',
|
|
25
|
+
'week-7' : '日',
|
|
26
|
+
'month-name': ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
|
|
27
|
+
'shortcuts' : '快捷选择',
|
|
28
|
+
'past': '过去',
|
|
29
|
+
'following':'将来',
|
|
30
|
+
'previous' : ' ',
|
|
31
|
+
'prev-week' : '上周',
|
|
32
|
+
'prev-month' : '上个月',
|
|
33
|
+
'prev-year' : '去年',
|
|
34
|
+
'next': ' ',
|
|
35
|
+
'next-week':'下周',
|
|
36
|
+
'next-month':'下个月',
|
|
37
|
+
'next-year':'明年',
|
|
38
|
+
'less-than' : '所选日期范围不能大于%d天',
|
|
39
|
+
'more-than' : '所选日期范围不能小于%d天',
|
|
40
|
+
'default-more' : '请选择大于%d天的日期范围',
|
|
41
|
+
'default-less' : '请选择小于%d天的日期范围',
|
|
42
|
+
'default-range' : '请选择%d天到%d天的日期范围',
|
|
43
|
+
'default-single':'请选择一个日期',
|
|
44
|
+
'default-default': '请选择一个日期范围'
|
|
45
|
+
},
|
|
46
|
+
'en':
|
|
47
|
+
{
|
|
48
|
+
'selected': 'Selected:',
|
|
49
|
+
'day':'Day',
|
|
50
|
+
'days': 'Days',
|
|
51
|
+
'apply': 'Close',
|
|
52
|
+
'week-1' : 'MO',
|
|
53
|
+
'week-2' : 'TU',
|
|
54
|
+
'week-3' : 'WE',
|
|
55
|
+
'week-4' : 'TH',
|
|
56
|
+
'week-5' : 'FR',
|
|
57
|
+
'week-6' : 'SA',
|
|
58
|
+
'week-7' : 'SU',
|
|
59
|
+
'month-name': ['JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER'],
|
|
60
|
+
'shortcuts' : 'Shortcuts',
|
|
61
|
+
'past': 'Past',
|
|
62
|
+
'following':'Following',
|
|
63
|
+
'previous' : 'Previous',
|
|
64
|
+
'prev-week' : 'Week',
|
|
65
|
+
'prev-month' : 'Month',
|
|
66
|
+
'prev-year' : 'Year',
|
|
67
|
+
'next':'Next',
|
|
68
|
+
'next-week':'Week',
|
|
69
|
+
'next-month':'Month',
|
|
70
|
+
'next-year':'Year',
|
|
71
|
+
'less-than' : 'Date range should not be more than %d days',
|
|
72
|
+
'more-than' : 'Date range should not be less than %d days',
|
|
73
|
+
'default-more' : 'Please select a date range longer than %d days',
|
|
74
|
+
'default-single' : 'Please select a date',
|
|
75
|
+
'default-less' : 'Please select a date range less than %d days',
|
|
76
|
+
'default-range' : 'Please select a date range between %d and %d days',
|
|
77
|
+
'default-default': 'Please select a date range'
|
|
78
|
+
},
|
|
79
|
+
'it':
|
|
80
|
+
{
|
|
81
|
+
'selected': 'Selezionati:',
|
|
82
|
+
'day':'Giorno',
|
|
83
|
+
'days': 'Giorni',
|
|
84
|
+
'apply': 'Chiudi',
|
|
85
|
+
'week-1' : 'LU',
|
|
86
|
+
'week-2' : 'MA',
|
|
87
|
+
'week-3' : 'ME',
|
|
88
|
+
'week-4' : 'GI',
|
|
89
|
+
'week-5' : 'VE',
|
|
90
|
+
'week-6' : 'SA',
|
|
91
|
+
'week-7' : 'DO',
|
|
92
|
+
'month-name': ['GENNAIO','FEBBRAIO','MARZO','APRILE','MAGGIO','GIUGNO','LUGLIO','AGOSTO','SETTEMBRE','OTTOBRE','NOVEMBRE','DICEMBRE'],
|
|
93
|
+
'shortcuts' : 'Scorciatoie',
|
|
94
|
+
'past': 'Scorso',
|
|
95
|
+
'following':'Successivo',
|
|
96
|
+
'previous' : 'Precedente',
|
|
97
|
+
'prev-week' : 'Settimana',
|
|
98
|
+
'prev-month' : 'Mese',
|
|
99
|
+
'prev-year' : 'Anno',
|
|
100
|
+
'next':'Prossimo',
|
|
101
|
+
'next-week':'Settimana',
|
|
102
|
+
'next-month':'Mese',
|
|
103
|
+
'next-year':'Anno',
|
|
104
|
+
'less-than' : 'L\'intervallo non dev\'essere maggiore di %d giorni',
|
|
105
|
+
'more-than' : 'L\'intervallo non dev\'essere minore di %d giorni',
|
|
106
|
+
'default-more' : 'Seleziona un intervallo maggiore di %d giorni',
|
|
107
|
+
'default-single' : 'Seleziona una data',
|
|
108
|
+
'default-less' : 'Seleziona un intervallo minore di %d giorni',
|
|
109
|
+
'default-range' : 'Seleziona un intervallo compreso tra i %d e i %d giorni',
|
|
110
|
+
'default-default': 'Seleziona un intervallo di date'
|
|
111
|
+
},
|
|
112
|
+
'es':
|
|
113
|
+
{
|
|
114
|
+
'selected': 'Seleccionado:',
|
|
115
|
+
'day':'Dia',
|
|
116
|
+
'days': 'Dias',
|
|
117
|
+
'apply': 'Cerrar',
|
|
118
|
+
'week-1' : 'LU',
|
|
119
|
+
'week-2' : 'MA',
|
|
120
|
+
'week-3' : 'MI',
|
|
121
|
+
'week-4' : 'JU',
|
|
122
|
+
'week-5' : 'VI',
|
|
123
|
+
'week-6' : 'SA',
|
|
124
|
+
'week-7' : 'DO',
|
|
125
|
+
'month-name': ['ENERO','FEBRERO','MARZO','ABRIL','MAYO','JUNIO','JULIO','AGOSTO','SEPTIEMBRE','OCTUBRE','NOVIEMBRE','DICIEMBRE'],
|
|
126
|
+
'shortcuts' : 'Accesos directos',
|
|
127
|
+
'past': 'Pasado',
|
|
128
|
+
'following':'Siguiente',
|
|
129
|
+
'previous' : 'Anterior',
|
|
130
|
+
'prev-week' : 'Semana',
|
|
131
|
+
'prev-month' : 'Mes',
|
|
132
|
+
'prev-year' : 'Año',
|
|
133
|
+
'next':'Siguiente',
|
|
134
|
+
'next-week':'Semana',
|
|
135
|
+
'next-month':'Mes',
|
|
136
|
+
'next-year':'Año',
|
|
137
|
+
'less-than' : 'El rango no deberia ser mayor de %d dias',
|
|
138
|
+
'more-than' : 'El rango no deberia ser menor de %d dias',
|
|
139
|
+
'default-more' : 'Por favor selecciona un rango mayor a %d dias',
|
|
140
|
+
'default-single' : 'Por favor selecciona un dia',
|
|
141
|
+
'default-less' : 'Por favor selecciona un rango menor a %d dias',
|
|
142
|
+
'default-range' : 'Por favor selecciona un rango entre %d y %d dias',
|
|
143
|
+
'default-default': 'Por favor selecciona un rango de fechas.'
|
|
144
|
+
},
|
|
145
|
+
'de':
|
|
146
|
+
{
|
|
147
|
+
'selected': 'Auswahl:',
|
|
148
|
+
'day':'Tag',
|
|
149
|
+
'days': 'Tage',
|
|
150
|
+
'apply': 'Schließen',
|
|
151
|
+
'week-1' : 'MO',
|
|
152
|
+
'week-2' : 'DI',
|
|
153
|
+
'week-3' : 'MI',
|
|
154
|
+
'week-4' : 'DO',
|
|
155
|
+
'week-5' : 'FR',
|
|
156
|
+
'week-6' : 'SA',
|
|
157
|
+
'week-7' : 'SO',
|
|
158
|
+
'month-name': ['JANUAR','FEBRUAR','MÄRZ','APRIL','MAI','JUNI','JULI','AUGUST','SEPTEMBER','OKTOBER','NOVEMBER','DEZEMBER'],
|
|
159
|
+
'shortcuts' : 'Schnellwahl',
|
|
160
|
+
'past': 'Vorherige',
|
|
161
|
+
'following':'Folgende',
|
|
162
|
+
'previous' : 'Vorherige',
|
|
163
|
+
'prev-week' : 'Woche',
|
|
164
|
+
'prev-month' : 'Monat',
|
|
165
|
+
'prev-year' : 'Jahr',
|
|
166
|
+
'next':'Nächste',
|
|
167
|
+
'next-week':'Woche',
|
|
168
|
+
'next-month':'Monat',
|
|
169
|
+
'next-year':'Jahr',
|
|
170
|
+
'less-than' : 'Datumsbereich darf nicht größer sein als %d Tage',
|
|
171
|
+
'more-than' : 'Datumsbereich darf nicht kleiner sein als %d Tage',
|
|
172
|
+
'default-more' : 'Bitte mindestens %d Tage auswählen',
|
|
173
|
+
'default-single' : 'Bitte ein Datum auswählen',
|
|
174
|
+
'default-less' : 'Bitte weniger als %d Tage auswählen',
|
|
175
|
+
'default-range' : 'Bitte einen Datumsbereich zwischen %d und %d Tagen auswählen',
|
|
176
|
+
'default-default': 'Bitte ein Start- und Enddatum auswählen'
|
|
177
|
+
},
|
|
178
|
+
'ru':
|
|
179
|
+
{
|
|
180
|
+
'selected': 'Выбрано:',
|
|
181
|
+
'day': 'День',
|
|
182
|
+
'days': 'Дней',
|
|
183
|
+
'apply': 'Закрыть',
|
|
184
|
+
'week-1': 'ПН',
|
|
185
|
+
'week-2': 'ВТ',
|
|
186
|
+
'week-3': 'СР',
|
|
187
|
+
'week-4': 'ЧТ',
|
|
188
|
+
'week-5': 'ПТ',
|
|
189
|
+
'week-6': 'СБ',
|
|
190
|
+
'week-7': 'ВС',
|
|
191
|
+
'month-name': ['ЯНВАРЬ','ФЕВРАЛЬ','МАРТ','АПРЕЛЬ','МАЙ','ИЮНЬ','ИЮЛЬ','АВГУСТ','СЕНТЯБРЬ','ОКТЯБРЬ','НОЯБРЬ','ДЕКАБРЬ'],
|
|
192
|
+
'shortcuts': 'Быстрый выбор',
|
|
193
|
+
'past': 'Прошедшие',
|
|
194
|
+
'following': 'Следующие',
|
|
195
|
+
'previous': ' ',
|
|
196
|
+
'prev-week': 'Неделя',
|
|
197
|
+
'prev-month': 'Месяц',
|
|
198
|
+
'prev-year': 'Год',
|
|
199
|
+
'next': ' ',
|
|
200
|
+
'next-week': 'Неделя',
|
|
201
|
+
'next-month': 'Месяц',
|
|
202
|
+
'next-year': 'Год',
|
|
203
|
+
'less-than': 'Диапазон не может быть больше %d дней',
|
|
204
|
+
'more-than': 'Диапазон не может быть меньше %d дней',
|
|
205
|
+
'default-more': 'Пожалуйста выберите диапазон больше %d дней',
|
|
206
|
+
'default-single': 'Пожалуйста выберите дату',
|
|
207
|
+
'default-less': 'Пожалуйста выберите диапазон меньше %d дней',
|
|
208
|
+
'default-range': 'Пожалуйста выберите диапазон между %d и %d днями',
|
|
209
|
+
'default-default': 'Пожалуйста выберите диапазон'
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
if (window['moment'] === undefined)
|
|
215
|
+
{
|
|
216
|
+
if (window['console'] && console['warn']) console.warn('Please import moment.js before daterangepicker.js');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
$.fn.dateRangePicker = function(opt)
|
|
221
|
+
{
|
|
222
|
+
if (!opt) opt = {};
|
|
223
|
+
opt = $.extend(true,
|
|
224
|
+
{
|
|
225
|
+
autoClose: false,
|
|
226
|
+
format: 'YYYY-MM-DD',
|
|
227
|
+
separator: ' to ',
|
|
228
|
+
language: 'auto',
|
|
229
|
+
startOfWeek: 'sunday',// or monday
|
|
230
|
+
getValue: function()
|
|
231
|
+
{
|
|
232
|
+
return $(this).val();
|
|
233
|
+
},
|
|
234
|
+
setValue: function(s)
|
|
235
|
+
{
|
|
236
|
+
$(this).val(s);
|
|
237
|
+
},
|
|
238
|
+
startDate: false,
|
|
239
|
+
endDate: false,
|
|
240
|
+
time: {
|
|
241
|
+
enabled: false
|
|
242
|
+
},
|
|
243
|
+
minDays: 0,
|
|
244
|
+
maxDays: 0,
|
|
245
|
+
showShortcuts: true,
|
|
246
|
+
shortcuts:
|
|
247
|
+
{
|
|
248
|
+
//'prev-days': [1,3,5,7],
|
|
249
|
+
'next-days': [3,5,7],
|
|
250
|
+
//'prev' : ['week','month','year'],
|
|
251
|
+
'next' : ['week','month','year']
|
|
252
|
+
},
|
|
253
|
+
customShortcuts : [],
|
|
254
|
+
inline:false,
|
|
255
|
+
container:'body',
|
|
256
|
+
alwaysOpen:false,
|
|
257
|
+
singleDate:false,
|
|
258
|
+
batchMode: false
|
|
259
|
+
},opt);
|
|
260
|
+
|
|
261
|
+
opt.start = false;
|
|
262
|
+
opt.end = false;
|
|
263
|
+
|
|
264
|
+
if (opt.startDate && typeof opt.startDate == 'string') opt.startDate = moment(opt.startDate,opt.format).toDate();
|
|
265
|
+
if (opt.endDate && typeof opt.endDate == 'string') opt.endDate = moment(opt.endDate,opt.format).toDate();
|
|
266
|
+
|
|
267
|
+
var langs = getLanguages();
|
|
268
|
+
var box;
|
|
269
|
+
var initiated = false;
|
|
270
|
+
var self = this;
|
|
271
|
+
var selfDom = $(self).get(0);
|
|
272
|
+
|
|
273
|
+
$(this).unbind('.datepicker').bind('click.datepicker',function(evt)
|
|
274
|
+
{
|
|
275
|
+
evt.stopPropagation();
|
|
276
|
+
open(200);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
init_datepicker.call(this);
|
|
280
|
+
|
|
281
|
+
if (opt.alwaysOpen)
|
|
282
|
+
{
|
|
283
|
+
open(0);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// expose some api
|
|
287
|
+
$(this).data('dateRangePicker',
|
|
288
|
+
{
|
|
289
|
+
setDateRange : function(d1,d2)
|
|
290
|
+
{
|
|
291
|
+
if (typeof d1 == 'string' && typeof d2 == 'string')
|
|
292
|
+
{
|
|
293
|
+
d1 = moment(d1,opt.format).toDate();
|
|
294
|
+
d2 = moment(d2,opt.format).toDate();
|
|
295
|
+
}
|
|
296
|
+
setDateRange(d1,d2);
|
|
297
|
+
},
|
|
298
|
+
clear: clearSelection,
|
|
299
|
+
close: closeDatePicker,
|
|
300
|
+
open: open,
|
|
301
|
+
destroy: function()
|
|
302
|
+
{
|
|
303
|
+
$(self).unbind('.datepicker');
|
|
304
|
+
$(self).data('dateRangePicker','');
|
|
305
|
+
box.remove();
|
|
306
|
+
$(window).unbind('resize.datepicker',calcPosition);
|
|
307
|
+
$(document).unbind('click.datepicker',closeDatePicker);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
$(window).bind('resize.datepicker',calcPosition);
|
|
312
|
+
|
|
313
|
+
return this;
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
function init_datepicker()
|
|
326
|
+
{
|
|
327
|
+
var self = this;
|
|
328
|
+
|
|
329
|
+
if ($(this).data('date-picker-opened'))
|
|
330
|
+
{
|
|
331
|
+
closeDatePicker();
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
$(this).data('date-picker-opened',true);
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
box = createDom().hide();
|
|
341
|
+
$(opt.container).append(box);
|
|
342
|
+
|
|
343
|
+
if (!opt.inline)
|
|
344
|
+
{
|
|
345
|
+
calcPosition();
|
|
346
|
+
}
|
|
347
|
+
else
|
|
348
|
+
{
|
|
349
|
+
box.css({position:'static'});
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (opt.alwaysOpen)
|
|
353
|
+
{
|
|
354
|
+
box.find('.apply-btn').hide();
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
var defaultTime = new Date();
|
|
358
|
+
if (opt.startDate && compare_month(defaultTime,opt.startDate) < 0 ) defaultTime = moment(opt.startDate).toDate();
|
|
359
|
+
if (opt.endDate && compare_month(nextMonth(defaultTime),opt.endDate) > 0 ) defaultTime = prevMonth(moment(opt.endDate).toDate());
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
showMonth(defaultTime,'month1');
|
|
363
|
+
showMonth(nextMonth(defaultTime),'month2');
|
|
364
|
+
|
|
365
|
+
if (opt.time.enabled) {
|
|
366
|
+
if ((opt.startDate && opt.endDate) || (opt.start && opt.end)) {
|
|
367
|
+
showTime(moment(opt.start || opt.startDate).toDate(),'time1');
|
|
368
|
+
showTime(moment(opt.end || opt.endDate).toDate(),'time2');
|
|
369
|
+
} else {
|
|
370
|
+
showTime(defaultTime,'time1');
|
|
371
|
+
showTime(defaultTime,'time2');
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
//showSelectedInfo();
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
var defaultTopText = '';
|
|
381
|
+
if (opt.singleDate)
|
|
382
|
+
defaultTopText = lang('default-single');
|
|
383
|
+
else if (opt.minDays && opt.maxDays)
|
|
384
|
+
defaultTopText = lang('default-range');
|
|
385
|
+
else if (opt.minDays)
|
|
386
|
+
defaultTopText = lang('default-more');
|
|
387
|
+
else if (opt.maxDays)
|
|
388
|
+
defaultTopText = lang('default-less');
|
|
389
|
+
else
|
|
390
|
+
defaultTopText = lang('default-default');
|
|
391
|
+
|
|
392
|
+
box.find('.default-top').html( defaultTopText.replace(/\%d/,opt.minDays).replace(/\%d/,opt.maxDays));
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
setTimeout(function()
|
|
398
|
+
{
|
|
399
|
+
initiated = true;
|
|
400
|
+
},0);
|
|
401
|
+
|
|
402
|
+
box.click(function(evt)
|
|
403
|
+
{
|
|
404
|
+
evt.stopPropagation();
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
$(document).bind('click.datepicker',closeDatePicker);
|
|
408
|
+
|
|
409
|
+
box.find('.next').click(function()
|
|
410
|
+
{
|
|
411
|
+
var isMonth2 = $(this).parents('table').hasClass('month2');
|
|
412
|
+
var month = isMonth2 ? opt.month2 : opt.month1;
|
|
413
|
+
month = nextMonth(month);
|
|
414
|
+
if (!opt.singleDate && !isMonth2 && compare_month(month,opt.month2) >= 0) return;
|
|
415
|
+
showMonth(month,isMonth2 ? 'month2' : 'month1');
|
|
416
|
+
showGap();
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
box.find('.prev').click(function()
|
|
420
|
+
{
|
|
421
|
+
var isMonth2 = $(this).parents('table').hasClass('month2');
|
|
422
|
+
var month = isMonth2 ? opt.month2 : opt.month1;
|
|
423
|
+
month = prevMonth(month);
|
|
424
|
+
//if (isMonth2 && month.getFullYear()+''+month.getMonth() <= opt.month1.getFullYear()+''+opt.month1.getMonth()) return;
|
|
425
|
+
if (isMonth2 && compare_month(month,opt.month1) <= 0) return;
|
|
426
|
+
showMonth(month,isMonth2 ? 'month2' : 'month1');
|
|
427
|
+
showGap();
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
box.bind('click',function(evt)
|
|
432
|
+
{
|
|
433
|
+
if ($(evt.target).hasClass('day'))
|
|
434
|
+
{
|
|
435
|
+
dayClicked($(evt.target));
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
box.attr('unselectable', 'on')
|
|
440
|
+
.css('user-select', 'none')
|
|
441
|
+
.bind('selectstart', function(e)
|
|
442
|
+
{
|
|
443
|
+
e.preventDefault(); return false;
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
box.find('.apply-btn').click(function()
|
|
447
|
+
{
|
|
448
|
+
closeDatePicker();
|
|
449
|
+
var dateRange = getDateString(new Date(opt.start))+ opt.separator +getDateString(new Date(opt.end));
|
|
450
|
+
$(self).trigger('datepicker-apply',
|
|
451
|
+
{
|
|
452
|
+
'value': dateRange,
|
|
453
|
+
'date1' : new Date(opt.start),
|
|
454
|
+
'date2' : new Date(opt.end)
|
|
455
|
+
});
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
box.find('[shortcut]').click(function()
|
|
459
|
+
{
|
|
460
|
+
var shortcut = $(this).attr('shortcut');
|
|
461
|
+
var end = new Date(),start = false;
|
|
462
|
+
if (shortcut.indexOf('day') != -1)
|
|
463
|
+
{
|
|
464
|
+
var day = parseInt(shortcut.split(',',2)[1],10);
|
|
465
|
+
start = new Date(new Date().getTime() + 86400000*day);
|
|
466
|
+
end = new Date(end.getTime() + 86400000*(day>0?1:-1) );
|
|
467
|
+
}
|
|
468
|
+
else if (shortcut.indexOf('week')!= -1)
|
|
469
|
+
{
|
|
470
|
+
var dir = shortcut.indexOf('prev,') != -1 ? -1 : 1;
|
|
471
|
+
|
|
472
|
+
if (dir == 1)
|
|
473
|
+
var stopDay = opt.startOfWeek == 'monday' ? 1 : 0;
|
|
474
|
+
else
|
|
475
|
+
var stopDay = opt.startOfWeek == 'monday' ? 0 : 6;
|
|
476
|
+
|
|
477
|
+
end = new Date(end.getTime() - 86400000);
|
|
478
|
+
while(end.getDay() != stopDay) end = new Date(end.getTime() + dir*86400000);
|
|
479
|
+
start = new Date(end.getTime() + dir*86400000*6);
|
|
480
|
+
}
|
|
481
|
+
else if (shortcut.indexOf('month') != -1)
|
|
482
|
+
{
|
|
483
|
+
var dir = shortcut.indexOf('prev,') != -1 ? -1 : 1;
|
|
484
|
+
if (dir == 1)
|
|
485
|
+
start = nextMonth(end);
|
|
486
|
+
else
|
|
487
|
+
start = prevMonth(end);
|
|
488
|
+
start.setDate(1);
|
|
489
|
+
end = nextMonth(start);
|
|
490
|
+
end.setDate(1);
|
|
491
|
+
end = new Date(end.getTime() - 86400000);
|
|
492
|
+
}
|
|
493
|
+
else if (shortcut.indexOf('year') != -1)
|
|
494
|
+
{
|
|
495
|
+
var dir = shortcut.indexOf('prev,') != -1 ? -1 : 1;
|
|
496
|
+
start = new Date();
|
|
497
|
+
start.setFullYear(end.getFullYear() + dir);
|
|
498
|
+
start.setMonth(0);
|
|
499
|
+
start.setDate(1);
|
|
500
|
+
end.setFullYear(end.getFullYear() + dir);
|
|
501
|
+
end.setMonth(11);
|
|
502
|
+
end.setDate(31);
|
|
503
|
+
}
|
|
504
|
+
else if (shortcut == 'custom')
|
|
505
|
+
{
|
|
506
|
+
var name = $(this).html();
|
|
507
|
+
if (opt.customShortcuts && opt.customShortcuts.length > 0)
|
|
508
|
+
{
|
|
509
|
+
for(var i=0;i<opt.customShortcuts.length;i++)
|
|
510
|
+
{
|
|
511
|
+
var sh = opt.customShortcuts[i];
|
|
512
|
+
if (sh.name == name)
|
|
513
|
+
{
|
|
514
|
+
var data = [];
|
|
515
|
+
// try
|
|
516
|
+
// {
|
|
517
|
+
data = sh['dates'].call();
|
|
518
|
+
//}catch(e){}
|
|
519
|
+
if (data && data.length == 2)
|
|
520
|
+
{
|
|
521
|
+
start = data[0];
|
|
522
|
+
end = data[1];
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// if only one date is specified then just move calendars there
|
|
526
|
+
// move calendars to show this date's month and next months
|
|
527
|
+
if (data && data.length == 1)
|
|
528
|
+
{
|
|
529
|
+
movetodate = data[0];
|
|
530
|
+
showMonth(movetodate,'month1');
|
|
531
|
+
showMonth(nextMonth(movetodate),'month2');
|
|
532
|
+
showGap();
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (start && end)
|
|
541
|
+
{
|
|
542
|
+
setDateRange(start,end);
|
|
543
|
+
checkSelectionValid();
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
box.find(".time1 input[type=range]").bind("change mousemove", function (e) {
|
|
548
|
+
var target = e.target,
|
|
549
|
+
hour = target.name == "hour" ? $(target).val().replace(/^(\d{1})$/, "0$1") : undefined,
|
|
550
|
+
min = target.name == "minute" ? $(target).val().replace(/^(\d{1})$/, "0$1") : undefined;
|
|
551
|
+
setTime("time1", hour, min);
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
box.find(".time2 input[type=range]").bind("change mousemove", function (e) {
|
|
555
|
+
var target = e.target,
|
|
556
|
+
hour = target.name == "hour" ? $(target).val().replace(/^(\d{1})$/, "0$1") : undefined,
|
|
557
|
+
min = target.name == "minute" ? $(target).val().replace(/^(\d{1})$/, "0$1") : undefined;
|
|
558
|
+
setTime("time2", hour, min);
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
function calcPosition()
|
|
565
|
+
{
|
|
566
|
+
if (!opt.inline)
|
|
567
|
+
{
|
|
568
|
+
var offset = $(self).offset();
|
|
569
|
+
if (offset.left < 460) //left to right
|
|
570
|
+
{
|
|
571
|
+
box.css(
|
|
572
|
+
{
|
|
573
|
+
top: offset.top+$(self).outerHeight() + parseInt($('body').css('border-top') || 0,10 ),
|
|
574
|
+
left: offset.left
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
else
|
|
578
|
+
{
|
|
579
|
+
box.css(
|
|
580
|
+
{
|
|
581
|
+
top: offset.top+$(self).outerHeight() + parseInt($('body').css('border-top') || 0,10 ),
|
|
582
|
+
left: offset.left + $(self).width() - box.width() - 16
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
function open(animationTime)
|
|
589
|
+
{
|
|
590
|
+
calcPosition();
|
|
591
|
+
var __default_string = opt.getValue.call(selfDom);
|
|
592
|
+
var defaults = __default_string ? __default_string.split( opt.separator ) : '';
|
|
593
|
+
|
|
594
|
+
if (defaults && defaults.length >= 2)
|
|
595
|
+
{
|
|
596
|
+
var ___format = opt.format;
|
|
597
|
+
if (___format.match(/Do/))
|
|
598
|
+
{
|
|
599
|
+
___format = ___format.replace(/Do/,'D');
|
|
600
|
+
defaults[0] = defaults[0].replace(/(\d+)(th|nd|st)/,'$1');
|
|
601
|
+
defaults[1] = defaults[1].replace(/(\d+)(th|nd|st)/,'$1');
|
|
602
|
+
}
|
|
603
|
+
// set initiated to avoid triggerring datepicker-change event
|
|
604
|
+
initiated = false;
|
|
605
|
+
setDateRange(moment(defaults[0], ___format).toDate(),moment(defaults[1], ___format).toDate());
|
|
606
|
+
initiated = true;
|
|
607
|
+
}
|
|
608
|
+
box.slideDown(animationTime);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
function renderTime (name, date) {
|
|
614
|
+
box.find("." + name + " input[type=range].hour-range").val(moment(date).hours());
|
|
615
|
+
box.find("." + name + " input[type=range].minute-range").val(moment(date).minutes());
|
|
616
|
+
setTime(name, moment(date).format("HH"), moment(date).format("mm"));
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
function changeTime (name, date) {
|
|
620
|
+
opt[name] = parseInt(
|
|
621
|
+
moment(parseInt(date))
|
|
622
|
+
.startOf('day')
|
|
623
|
+
.add('h', moment(opt[name + "Time"]).format("HH"))
|
|
624
|
+
.add('m', moment(opt[name + "Time"]).format("mm")).valueOf()
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
function swapTime () {
|
|
629
|
+
renderTime("time1", opt.start);
|
|
630
|
+
renderTime("time2", opt.end);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
function setTime (name, hour, minute) {
|
|
634
|
+
hour && (box.find("." + name + " .hour-val").text(hour));
|
|
635
|
+
minute && (box.find("." + name + " .minute-val").text(minute));
|
|
636
|
+
switch (name) {
|
|
637
|
+
case "time1":
|
|
638
|
+
if (opt.start) {
|
|
639
|
+
setRange("start", moment(opt.start));
|
|
640
|
+
}
|
|
641
|
+
setRange("startTime", moment(opt.startTime || moment().valueOf()));
|
|
642
|
+
break;
|
|
643
|
+
case "time2":
|
|
644
|
+
if (opt.end) {
|
|
645
|
+
setRange("end", moment(opt.end));
|
|
646
|
+
}
|
|
647
|
+
setRange("endTime", moment(opt.endTime || moment().valueOf()));
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
function setRange(name, timePoint) {
|
|
651
|
+
var h = timePoint.format("HH"),
|
|
652
|
+
m = timePoint.format("mm");
|
|
653
|
+
opt[name] = timePoint
|
|
654
|
+
.startOf('day')
|
|
655
|
+
.add("h", hour || h)
|
|
656
|
+
.add("m", minute || m)
|
|
657
|
+
.valueOf();
|
|
658
|
+
}
|
|
659
|
+
checkSelectionValid();
|
|
660
|
+
showSelectedInfo();
|
|
661
|
+
showSelectedDays();
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
function clearSelection()
|
|
665
|
+
{
|
|
666
|
+
opt.start = false;
|
|
667
|
+
opt.end = false;
|
|
668
|
+
box.find('.day.checked').removeClass('checked');
|
|
669
|
+
opt.setValue.call(selfDom, '');
|
|
670
|
+
checkSelectionValid();
|
|
671
|
+
showSelectedInfo();
|
|
672
|
+
showSelectedDays();
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function handleStart(time)
|
|
676
|
+
{
|
|
677
|
+
var r = time;
|
|
678
|
+
if (opt.batchMode === 'week-range') {
|
|
679
|
+
if (opt.startOfWeek === 'monday') {
|
|
680
|
+
r = moment(parseInt(time)).startOf('isoweek').valueOf();
|
|
681
|
+
} else {
|
|
682
|
+
r = moment(parseInt(time)).startOf('week').valueOf();
|
|
683
|
+
}
|
|
684
|
+
} else if (opt.batchMode === 'month-range') {
|
|
685
|
+
r = moment(parseInt(time)).startOf('month').valueOf();
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
return r;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
function handleEnd(time)
|
|
692
|
+
{
|
|
693
|
+
var r = time;
|
|
694
|
+
if (opt.batchMode === 'week-range') {
|
|
695
|
+
if (opt.startOfWeek === 'monday') {
|
|
696
|
+
r = moment(parseInt(time)).endOf('isoweek').valueOf();
|
|
697
|
+
} else {
|
|
698
|
+
r = moment(parseInt(time)).endOf('week').valueOf();
|
|
699
|
+
}
|
|
700
|
+
} else if (opt.batchMode === 'month') {
|
|
701
|
+
r = moment(parseInt(time)).endOf('month').valueOf();
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
return r;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
function dayClicked(day)
|
|
709
|
+
{
|
|
710
|
+
if (day.hasClass('invalid')) return;
|
|
711
|
+
var time = day.attr('time');
|
|
712
|
+
day.addClass('checked');
|
|
713
|
+
if ( opt.singleDate )
|
|
714
|
+
{
|
|
715
|
+
opt.start = time;
|
|
716
|
+
opt.end = false;
|
|
717
|
+
if (opt.time.enabled) {
|
|
718
|
+
changeTime("start", opt.start);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
else if (opt.batchMode === 'week')
|
|
722
|
+
{
|
|
723
|
+
if (opt.startOfWeek === 'monday') {
|
|
724
|
+
opt.start = moment(parseInt(time)).startOf('isoweek').valueOf();
|
|
725
|
+
opt.end = moment(parseInt(time)).endOf('isoweek').valueOf();
|
|
726
|
+
} else {
|
|
727
|
+
opt.end = moment(parseInt(time)).endOf('week').valueOf();
|
|
728
|
+
opt.start = moment(parseInt(time)).startOf('week').valueOf();
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
else if (opt.batchMode === 'month')
|
|
732
|
+
{
|
|
733
|
+
opt.start = moment(parseInt(time)).startOf('month').valueOf();
|
|
734
|
+
opt.end = moment(parseInt(time)).endOf('month').valueOf();
|
|
735
|
+
}
|
|
736
|
+
else if ((opt.start && opt.end) || (!opt.start && !opt.end) )
|
|
737
|
+
{
|
|
738
|
+
opt.start = handleStart(time);
|
|
739
|
+
opt.end = false;
|
|
740
|
+
if (opt.time.enabled) {
|
|
741
|
+
changeTime("start", opt.start);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
else if (opt.start)
|
|
745
|
+
{
|
|
746
|
+
opt.end = handleEnd(time);
|
|
747
|
+
if (opt.time.enabled) {
|
|
748
|
+
changeTime("end", opt.end);
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
if (!opt.singleDate && opt.start && opt.end && opt.start > opt.end)
|
|
753
|
+
{
|
|
754
|
+
var tmp = opt.end;
|
|
755
|
+
opt.end = handleEnd(opt.start);
|
|
756
|
+
opt.start = handleStart(tmp);
|
|
757
|
+
if (opt.time.enabled) {
|
|
758
|
+
swapTime();
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
opt.start = parseInt(opt.start);
|
|
763
|
+
opt.end = parseInt(opt.end);
|
|
764
|
+
|
|
765
|
+
checkSelectionValid();
|
|
766
|
+
showSelectedInfo();
|
|
767
|
+
showSelectedDays();
|
|
768
|
+
autoclose();
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
function autoclose () {
|
|
772
|
+
if (opt.singleDate === true) {
|
|
773
|
+
if (initiated && opt.start )
|
|
774
|
+
{
|
|
775
|
+
if (opt.autoClose) closeDatePicker();
|
|
776
|
+
}
|
|
777
|
+
} else {
|
|
778
|
+
if (initiated && opt.start && opt.end)
|
|
779
|
+
{
|
|
780
|
+
if (opt.autoClose) closeDatePicker();
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
function checkSelectionValid()
|
|
786
|
+
{
|
|
787
|
+
var days = Math.ceil( (opt.end - opt.start) / 86400000 ) + 1;
|
|
788
|
+
if (opt.singleDate) { // Validate if only start is there
|
|
789
|
+
if (opt.start && !opt.end)
|
|
790
|
+
box.find('.drp_top-bar').removeClass('error').addClass('normal');
|
|
791
|
+
else
|
|
792
|
+
box.find('.drp_top-bar').removeClass('error').removeClass('normal');
|
|
793
|
+
}
|
|
794
|
+
else if ( opt.maxDays && days > opt.maxDays)
|
|
795
|
+
{
|
|
796
|
+
opt.start = false;
|
|
797
|
+
opt.end = false;
|
|
798
|
+
box.find('.day').removeClass('checked');
|
|
799
|
+
box.find('.drp_top-bar').removeClass('normal').addClass('error').find('.error-top').html( lang('less-than').replace('%d',opt.maxDays) );
|
|
800
|
+
}
|
|
801
|
+
else if ( opt.minDays && days < opt.minDays)
|
|
802
|
+
{
|
|
803
|
+
opt.start = false;
|
|
804
|
+
opt.end = false;
|
|
805
|
+
box.find('.day').removeClass('checked');
|
|
806
|
+
box.find('.drp_top-bar').removeClass('normal').addClass('error').find('.error-top').html( lang('more-than').replace('%d',opt.minDays) );
|
|
807
|
+
}
|
|
808
|
+
else
|
|
809
|
+
{
|
|
810
|
+
if (opt.start || opt.end)
|
|
811
|
+
box.find('.drp_top-bar').removeClass('error').addClass('normal');
|
|
812
|
+
else
|
|
813
|
+
box.find('.drp_top-bar').removeClass('error').removeClass('normal');
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
if ( (opt.singleDate && opt.start && !opt.end) || (!opt.singleDate && opt.start && opt.end) )
|
|
817
|
+
{
|
|
818
|
+
box.find('.apply-btn').removeClass('disabled');
|
|
819
|
+
}
|
|
820
|
+
else
|
|
821
|
+
{
|
|
822
|
+
box.find('.apply-btn').addClass('disabled');
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
if (opt.batchMode)
|
|
826
|
+
{
|
|
827
|
+
if ( (opt.start && opt.startDate && compare_day(opt.start, opt.startDate) < 0)
|
|
828
|
+
|| (opt.end && opt.endDate && compare_day(opt.end, opt.endDate) > 0) )
|
|
829
|
+
{
|
|
830
|
+
opt.start = false;
|
|
831
|
+
opt.end = false;
|
|
832
|
+
box.find('.day').removeClass('checked');
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
function showSelectedInfo()
|
|
838
|
+
{
|
|
839
|
+
box.find('.start-day').html('...');
|
|
840
|
+
box.find('.end-day').html('...');
|
|
841
|
+
box.find('.selected-days').hide();
|
|
842
|
+
if (opt.start)
|
|
843
|
+
{
|
|
844
|
+
box.find('.start-day').html(getDateString(new Date(parseInt(opt.start))));
|
|
845
|
+
}
|
|
846
|
+
if (opt.end)
|
|
847
|
+
{
|
|
848
|
+
box.find('.end-day').html(getDateString(new Date(parseInt(opt.end))));
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
if (opt.start && opt.singleDate)
|
|
852
|
+
{
|
|
853
|
+
box.find('.apply-btn').removeClass('disabled');
|
|
854
|
+
var dateRange = getDateString(new Date(opt.start));
|
|
855
|
+
opt.setValue.call(selfDom, dateRange, getDateString(new Date(opt.start)), getDateString(new Date(opt.end)));
|
|
856
|
+
|
|
857
|
+
if (initiated)
|
|
858
|
+
{
|
|
859
|
+
$(self).trigger('datepicker-change',
|
|
860
|
+
{
|
|
861
|
+
'value': dateRange,
|
|
862
|
+
'date1' : new Date(opt.start)
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
else if (opt.start && opt.end)
|
|
867
|
+
{
|
|
868
|
+
box.find('.selected-days').show().find('.selected-days-num').html(Math.round((opt.end-opt.start)/86400000)+1);
|
|
869
|
+
box.find('.apply-btn').removeClass('disabled');
|
|
870
|
+
var dateRange = getDateString(new Date(opt.start))+ opt.separator +getDateString(new Date(opt.end));
|
|
871
|
+
opt.setValue.call(selfDom,dateRange, getDateString(new Date(opt.start)), getDateString(new Date(opt.end)));
|
|
872
|
+
if (initiated)
|
|
873
|
+
{
|
|
874
|
+
$(self).trigger('datepicker-change',
|
|
875
|
+
{
|
|
876
|
+
'value': dateRange,
|
|
877
|
+
'date1' : new Date(opt.start),
|
|
878
|
+
'date2' : new Date(opt.end)
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
else
|
|
883
|
+
{
|
|
884
|
+
box.find('.apply-btn').addClass('disabled');
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
function setDateRange(date1,date2)
|
|
889
|
+
{
|
|
890
|
+
if (date1.getTime() > date2.getTime())
|
|
891
|
+
{
|
|
892
|
+
var tmp = date2;
|
|
893
|
+
date2 = date1;
|
|
894
|
+
date1 = tmp;
|
|
895
|
+
tmp = null;
|
|
896
|
+
}
|
|
897
|
+
var valid = true;
|
|
898
|
+
if (opt.startDate && compare_day(date1,opt.startDate) < 0) valid = false;
|
|
899
|
+
if (opt.endDate && compare_day(date2,opt.endDate) > 0) valid = false;
|
|
900
|
+
if (!valid)
|
|
901
|
+
{
|
|
902
|
+
showMonth(opt.startDate,'month1');
|
|
903
|
+
showMonth(nextMonth(opt.startDate),'month2');
|
|
904
|
+
showGap();
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
opt.start = date1.getTime();
|
|
909
|
+
opt.end = date2.getTime();
|
|
910
|
+
if (compare_month(date1,date2) == 0)
|
|
911
|
+
{
|
|
912
|
+
date2 = nextMonth(date1);
|
|
913
|
+
}
|
|
914
|
+
if (opt.time.enabled) {
|
|
915
|
+
renderTime("time1", date1);
|
|
916
|
+
renderTime("time2", date2);
|
|
917
|
+
}
|
|
918
|
+
showMonth(date1,'month1');
|
|
919
|
+
showMonth(date2,'month2');
|
|
920
|
+
showGap();
|
|
921
|
+
showSelectedInfo();
|
|
922
|
+
autoclose();
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
function showSelectedDays()
|
|
926
|
+
{
|
|
927
|
+
if (!opt.start && !opt.end) return;
|
|
928
|
+
box.find('.day').each(function()
|
|
929
|
+
{
|
|
930
|
+
var time = parseInt($(this).attr('time')),
|
|
931
|
+
start = opt.start,
|
|
932
|
+
end = opt.end;
|
|
933
|
+
if (opt.time.enabled) {
|
|
934
|
+
time = moment(time).startOf('day').valueOf();
|
|
935
|
+
start = moment(start || moment().valueOf()).startOf('day').valueOf();
|
|
936
|
+
end = moment(end || moment().valueOf()).startOf('day').valueOf();
|
|
937
|
+
}
|
|
938
|
+
if (
|
|
939
|
+
(opt.start && opt.end && end >= time && start <= time )
|
|
940
|
+
|| ( opt.start && !opt.end && moment(start).format('YYYY-MM-DD') == moment(time).format('YYYY-MM-DD') )
|
|
941
|
+
)
|
|
942
|
+
{
|
|
943
|
+
$(this).addClass('checked');
|
|
944
|
+
}
|
|
945
|
+
else
|
|
946
|
+
{
|
|
947
|
+
$(this).removeClass('checked');
|
|
948
|
+
}
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
function showMonth(date,month)
|
|
953
|
+
{
|
|
954
|
+
date = moment(date).toDate();
|
|
955
|
+
var monthName = nameMonth(date.getMonth());
|
|
956
|
+
box.find('.'+month+' .month-name').html(monthName+' '+date.getFullYear());
|
|
957
|
+
box.find('.'+month+' tbody').html(createMonthHTML(date));
|
|
958
|
+
opt[month] = date;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
function showTime(date,name)
|
|
962
|
+
{
|
|
963
|
+
box.find('.' + name).append(getTimeHTML());
|
|
964
|
+
renderTime(name, date);
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
function nameMonth(m)
|
|
968
|
+
{
|
|
969
|
+
return lang('month-name')[m];
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
function getDateString(d)
|
|
973
|
+
{
|
|
974
|
+
return moment(d).format(opt.format);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
function showGap()
|
|
978
|
+
{
|
|
979
|
+
showSelectedDays();
|
|
980
|
+
var m1 = parseInt(moment(opt.month1).format('YYYYMM'));
|
|
981
|
+
var m2 = parseInt(moment(opt.month2).format('YYYYMM'));
|
|
982
|
+
var p = Math.abs(m1 - m2);
|
|
983
|
+
var shouldShow = (p > 1 && p !=89);
|
|
984
|
+
if (shouldShow)
|
|
985
|
+
box.find('.gap').show();
|
|
986
|
+
else
|
|
987
|
+
box.find('.gap').hide();
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
function closeDatePicker()
|
|
991
|
+
{
|
|
992
|
+
if (opt.alwaysOpen) return;
|
|
993
|
+
$(box).slideUp(200,function()
|
|
994
|
+
{
|
|
995
|
+
$(self).data('date-picker-opened',false);
|
|
996
|
+
});
|
|
997
|
+
//$(document).unbind('.datepicker');
|
|
998
|
+
$(self).trigger('datepicker-close');
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
function compare_month(m1,m2)
|
|
1002
|
+
{
|
|
1003
|
+
var p = parseInt(moment(m1).format('YYYYMM')) - parseInt(moment(m2).format('YYYYMM'));
|
|
1004
|
+
if (p > 0 ) return 1;
|
|
1005
|
+
if (p == 0) return 0;
|
|
1006
|
+
return -1;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
function compare_day(m1,m2)
|
|
1010
|
+
{
|
|
1011
|
+
var p = parseInt(moment(m1).format('YYYYMMDD')) - parseInt(moment(m2).format('YYYYMMDD'));
|
|
1012
|
+
if (p > 0 ) return 1;
|
|
1013
|
+
if (p == 0) return 0;
|
|
1014
|
+
return -1;
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
function nextMonth(month)
|
|
1018
|
+
{
|
|
1019
|
+
month = moment(month).toDate();
|
|
1020
|
+
var toMonth = month.getMonth();
|
|
1021
|
+
while(month.getMonth() == toMonth) month = new Date(month.getTime()+86400000);
|
|
1022
|
+
return month;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
function prevMonth(month)
|
|
1026
|
+
{
|
|
1027
|
+
month = moment(month).toDate();
|
|
1028
|
+
var toMonth = month.getMonth();
|
|
1029
|
+
while(month.getMonth() == toMonth) month = new Date(month.getTime()-86400000);
|
|
1030
|
+
return month;
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
function getTimeHTML()
|
|
1034
|
+
{
|
|
1035
|
+
var timeHtml = '<div>'
|
|
1036
|
+
+'<span>Time: <span class="hour-val">00</span>:<span class="minute-val">00</span></span>'
|
|
1037
|
+
+'</div>'
|
|
1038
|
+
+'<div class="hour">'
|
|
1039
|
+
+'<label>Hour: <input type="range" class="hour-range" name="hour" min="0" max="23"></label>'
|
|
1040
|
+
+'</div>'
|
|
1041
|
+
+'<div class="minute">'
|
|
1042
|
+
+'<label>Minute: <input type="range" class="minute-range" name="minute" min="0" max="59"></label>'
|
|
1043
|
+
+'</div>';
|
|
1044
|
+
return timeHtml;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
function createDom()
|
|
1048
|
+
{
|
|
1049
|
+
var html = '<div class="date-picker-wrapper'
|
|
1050
|
+
if ( opt.singleDate ) html += ' single-date';
|
|
1051
|
+
if ( !opt.showShortcuts ) html += ' no-shortcuts ';
|
|
1052
|
+
html += '">'
|
|
1053
|
+
+'<div class="drp_top-bar">\
|
|
1054
|
+
<div class="normal-top">\
|
|
1055
|
+
<span style="color:#333">'+lang('selected')+' </span> <b class="start-day">...</b>'
|
|
1056
|
+
if ( ! opt.singleDate ) {
|
|
1057
|
+
html += ' <span class="separator-day">'+opt.separator+'</span> <b class="end-day">...</b> <i class="selected-days">(<span class="selected-days-num">3</span> '+lang('days')+')</i>'
|
|
1058
|
+
}
|
|
1059
|
+
html += '</div>\
|
|
1060
|
+
<div class="error-top">error</div>\
|
|
1061
|
+
<div class="default-top">default</div>\
|
|
1062
|
+
<input type="button" class="apply-btn disabled '+ getHideClass() +'" value="'+lang('apply')+'" />\
|
|
1063
|
+
</div>'
|
|
1064
|
+
+'<div class="month-wrapper">'
|
|
1065
|
+
+'<table class="month1" cellspacing="0" border="0" cellpadding="0"><thead><tr class="caption"><th style="width:27px;"><span class="prev"><</span></th><th colspan="5" class="month-name">January, 2011</th><th style="width:27px;"><span class="next">></span></th></tr><tr class="week-name">'+getWeekHead()+'</thead><tbody></tbody></table>'
|
|
1066
|
+
if ( ! opt.singleDate ) {
|
|
1067
|
+
html += '<div class="gap">'+getGapHTML()+'</div>'
|
|
1068
|
+
+'<table class="month2" cellspacing="0" border="0" cellpadding="0"><thead><tr class="caption"><th style="width:27px;"><span class="prev"><</span></th><th colspan="5" class="month-name">January, 2011</th><th style="width:27px;"><span class="next">></span></th></tr><tr class="week-name">'+getWeekHead()+'</thead><tbody></tbody></table>'
|
|
1069
|
+
}
|
|
1070
|
+
//+'</div>'
|
|
1071
|
+
html += '<div style="clear:both;height:0;font-size:0;"></div>'
|
|
1072
|
+
+'<div class="time">'
|
|
1073
|
+
+'<div class="time1"></div>'
|
|
1074
|
+
if ( ! opt.singleDate ) {
|
|
1075
|
+
html += '<div class="time2"></div>'
|
|
1076
|
+
}
|
|
1077
|
+
html += '</div>'
|
|
1078
|
+
+'<div style="clear:both;height:0;font-size:0;"></div>'
|
|
1079
|
+
+'</div>';
|
|
1080
|
+
|
|
1081
|
+
if (opt.showShortcuts)
|
|
1082
|
+
{
|
|
1083
|
+
html += '<div class="footer"><b>'+lang('shortcuts')+'</b>';
|
|
1084
|
+
|
|
1085
|
+
var data = opt.shortcuts;
|
|
1086
|
+
if (data)
|
|
1087
|
+
{
|
|
1088
|
+
if (data['prev-days'] && data['prev-days'].length > 0)
|
|
1089
|
+
{
|
|
1090
|
+
html += ' <span class="prev-days">'+lang('past');
|
|
1091
|
+
for(var i=0;i<data['prev-days'].length; i++)
|
|
1092
|
+
{
|
|
1093
|
+
var name = data['prev-days'][i];
|
|
1094
|
+
name += (data['prev-days'][i] > 1) ? lang('days') : lang('day');
|
|
1095
|
+
html += ' <a href="javascript:;" shortcut="day,-'+data['prev-days'][i]+'">'+name+'</a>';
|
|
1096
|
+
}
|
|
1097
|
+
html+='</span>';
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
if (data['next-days'] && data['next-days'].length > 0)
|
|
1101
|
+
{
|
|
1102
|
+
html += ' <span class="next-days">'+lang('following');
|
|
1103
|
+
for(var i=0;i<data['next-days'].length; i++)
|
|
1104
|
+
{
|
|
1105
|
+
var name = data['next-days'][i];
|
|
1106
|
+
name += (data['next-days'][i] > 1) ? lang('days') : lang('day');
|
|
1107
|
+
html += ' <a href="javascript:;" shortcut="day,'+data['next-days'][i]+'">'+name+'</a>';
|
|
1108
|
+
}
|
|
1109
|
+
html+= '</span>';
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
if (data['prev'] && data['prev'].length > 0)
|
|
1113
|
+
{
|
|
1114
|
+
html += ' <span class="prev-buttons">'+lang('previous');
|
|
1115
|
+
for(var i=0;i<data['prev'].length; i++)
|
|
1116
|
+
{
|
|
1117
|
+
var name = lang('prev-'+data['prev'][i]);
|
|
1118
|
+
html += ' <a href="javascript:;" shortcut="prev,'+data['prev'][i]+'">'+name+'</a>';
|
|
1119
|
+
}
|
|
1120
|
+
html+='</span>';
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
if (data['next'] && data['next'].length > 0)
|
|
1124
|
+
{
|
|
1125
|
+
html += ' <span class="next-buttons">'+lang('next');
|
|
1126
|
+
for(var i=0;i<data['next'].length; i++)
|
|
1127
|
+
{
|
|
1128
|
+
var name = lang('next-'+data['next'][i]);
|
|
1129
|
+
html += ' <a href="javascript:;" shortcut="next,'+data['next'][i]+'">'+name+'</a>';
|
|
1130
|
+
}
|
|
1131
|
+
html+='</span>';
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
if (opt.customShortcuts)
|
|
1136
|
+
{
|
|
1137
|
+
for(var i=0;i<opt.customShortcuts.length; i++)
|
|
1138
|
+
{
|
|
1139
|
+
var sh = opt.customShortcuts[i];
|
|
1140
|
+
html+= ' <span class="custom-shortcut"><a href="javascript:;" shortcut="custom">'+sh.name+'</a></span>';
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
html +='</div>';
|
|
1145
|
+
}
|
|
1146
|
+
html += '</div>';
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
return $(html);
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
function getHideClass()
|
|
1153
|
+
{
|
|
1154
|
+
if (opt.autoClose === true) {
|
|
1155
|
+
return 'hide';
|
|
1156
|
+
}
|
|
1157
|
+
return '';
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
function getWeekHead()
|
|
1161
|
+
{
|
|
1162
|
+
if (opt.startOfWeek == 'monday')
|
|
1163
|
+
{
|
|
1164
|
+
return '<th>'+lang('week-1')+'</th>\
|
|
1165
|
+
<th>'+lang('week-2')+'</th>\
|
|
1166
|
+
<th>'+lang('week-3')+'</th>\
|
|
1167
|
+
<th>'+lang('week-4')+'</th>\
|
|
1168
|
+
<th>'+lang('week-5')+'</th>\
|
|
1169
|
+
<th>'+lang('week-6')+'</th>\
|
|
1170
|
+
<th>'+lang('week-7')+'</th>';
|
|
1171
|
+
}
|
|
1172
|
+
else
|
|
1173
|
+
{
|
|
1174
|
+
return '<th>'+lang('week-7')+'</th>\
|
|
1175
|
+
<th>'+lang('week-1')+'</th>\
|
|
1176
|
+
<th>'+lang('week-2')+'</th>\
|
|
1177
|
+
<th>'+lang('week-3')+'</th>\
|
|
1178
|
+
<th>'+lang('week-4')+'</th>\
|
|
1179
|
+
<th>'+lang('week-5')+'</th>\
|
|
1180
|
+
<th>'+lang('week-6')+'</th>';
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
function getGapHTML()
|
|
1185
|
+
{
|
|
1186
|
+
var html = ['<div class="gap-top-mask"></div><div class="gap-bottom-mask"></div><div class="gap-lines">'];
|
|
1187
|
+
for(var i=0;i<20;i++)
|
|
1188
|
+
{
|
|
1189
|
+
html.push('<div class="gap-line">\
|
|
1190
|
+
<div class="gap-1"></div>\
|
|
1191
|
+
<div class="gap-2"></div>\
|
|
1192
|
+
<div class="gap-3"></div>\
|
|
1193
|
+
</div>');
|
|
1194
|
+
}
|
|
1195
|
+
html.push('</div>');
|
|
1196
|
+
return html.join('');
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
function createMonthHTML(d)
|
|
1200
|
+
{
|
|
1201
|
+
var days = [];
|
|
1202
|
+
d.setDate(1);
|
|
1203
|
+
var lastMonth = new Date(d.getTime() - 86400000);
|
|
1204
|
+
var now = new Date();
|
|
1205
|
+
|
|
1206
|
+
var dayOfWeek = d.getDay();
|
|
1207
|
+
if((dayOfWeek == 0) && (opt.startOfWeek == 'monday')) {
|
|
1208
|
+
// add one week
|
|
1209
|
+
dayOfWeek = 7;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
if (dayOfWeek > 0)
|
|
1213
|
+
{
|
|
1214
|
+
for (var i = dayOfWeek; i > 0; i--)
|
|
1215
|
+
{
|
|
1216
|
+
var day = new Date(d.getTime() - 86400000*i);
|
|
1217
|
+
var valid = true;
|
|
1218
|
+
if (opt.startDate && compare_day(day,opt.startDate) < 0) valid = false;
|
|
1219
|
+
if (opt.endDate && compare_day(day,opt.endDate) > 0) valid = false;
|
|
1220
|
+
days.push({type:'lastMonth',day: day.getDate(),time:day.getTime(), valid:valid });
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
var toMonth = d.getMonth();
|
|
1224
|
+
for(var i=0; i<40; i++)
|
|
1225
|
+
{
|
|
1226
|
+
var today = moment(d).add('days', i).toDate();
|
|
1227
|
+
var valid = true;
|
|
1228
|
+
if (opt.startDate && compare_day(today,opt.startDate) < 0) valid = false;
|
|
1229
|
+
if (opt.endDate && compare_day(today,opt.endDate) > 0) valid = false;
|
|
1230
|
+
days.push({type: today.getMonth() == toMonth ? 'toMonth' : 'nextMonth',day: today.getDate(),time:today.getTime(), valid:valid });
|
|
1231
|
+
}
|
|
1232
|
+
var html = [];
|
|
1233
|
+
for(var week=0; week<6; week++)
|
|
1234
|
+
{
|
|
1235
|
+
if (days[week*7].type == 'nextMonth') break;
|
|
1236
|
+
html.push('<tr>');
|
|
1237
|
+
for(var day = 0; day<7; day++)
|
|
1238
|
+
{
|
|
1239
|
+
var _day = (opt.startOfWeek == 'monday') ? day+1 : day;
|
|
1240
|
+
var today = days[week*7+_day];
|
|
1241
|
+
var highlightToday = moment(today.time).format('L') == moment(now).format('L');
|
|
1242
|
+
today.extraClass = '';
|
|
1243
|
+
today.tooltip = '';
|
|
1244
|
+
if(opt.beforeShowDay && typeof opt.beforeShowDay == 'function')
|
|
1245
|
+
{
|
|
1246
|
+
var _r = opt.beforeShowDay(moment(today.time).toDate());
|
|
1247
|
+
today.valid = _r[0];
|
|
1248
|
+
today.extraClass = _r[1] || '';
|
|
1249
|
+
today.tooltip = _r[2] || '';
|
|
1250
|
+
if (today.tooltip != '') today.extraClass += ' has-tooltip ';
|
|
1251
|
+
}
|
|
1252
|
+
html.push('<td><div time="'+today.time+'" title="'+today.tooltip+'" class="day '+today.type+' '+today.extraClass+' '+(today.valid ? 'valid' : 'invalid')+' '+(highlightToday?'real-today':'')+'">'+today.day+'</div></td>');
|
|
1253
|
+
}
|
|
1254
|
+
html.push('</tr>');
|
|
1255
|
+
}
|
|
1256
|
+
return html.join('');
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
function getLanguages()
|
|
1260
|
+
{
|
|
1261
|
+
if (opt.language == 'auto')
|
|
1262
|
+
{
|
|
1263
|
+
var language = navigator.language ? navigator.language : navigator.browserLanguage;
|
|
1264
|
+
if (!language) return $.dateRangePickerLanguages['en'];
|
|
1265
|
+
var language = language.toLowerCase();
|
|
1266
|
+
for(var key in $.dateRangePickerLanguages)
|
|
1267
|
+
{
|
|
1268
|
+
if (language.indexOf(key) != -1)
|
|
1269
|
+
{
|
|
1270
|
+
return $.dateRangePickerLanguages[key];
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
return $.dateRangePickerLanguages['en'];
|
|
1274
|
+
}
|
|
1275
|
+
else if ( opt.language && opt.language in $.dateRangePickerLanguages)
|
|
1276
|
+
{
|
|
1277
|
+
return $.dateRangePickerLanguages[opt.language];
|
|
1278
|
+
}
|
|
1279
|
+
else
|
|
1280
|
+
{
|
|
1281
|
+
return $.dateRangePickerLanguages['en'];
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
function lang(t)
|
|
1286
|
+
{
|
|
1287
|
+
return (t in langs)? langs[t] : t;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
};
|
|
1292
|
+
})(jQuery);
|