alchemy_cms 7.0.12 → 7.1.0.pre.b1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/backport.yml +36 -0
- data/.github/workflows/test.yml +3 -2
- data/.gitignore +1 -0
- data/.standard.yml +1 -1
- data/CHANGELOG.md +144 -22
- data/Gemfile +8 -10
- data/README.md +10 -8
- data/alchemy_cms.gemspec +4 -3
- data/app/assets/config/alchemy_manifest.js +0 -1
- data/app/assets/javascripts/alchemy/admin.js +1 -19
- data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +2 -3
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +19 -34
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +38 -13
- data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.fixed_elements.js +32 -25
- data/app/assets/javascripts/alchemy/alchemy.growler.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +3 -5
- data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +0 -57
- data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +22 -63
- data/app/assets/javascripts/alchemy/alchemy.list_filter.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +5 -4
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +5 -5
- data/app/assets/javascripts/alchemy/templates/index.js +0 -2
- data/app/assets/javascripts/alchemy/templates/node_folder.hbs +1 -1
- data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
- data/app/assets/javascripts/alchemy/templates/page_folder.hbs +2 -2
- data/app/assets/stylesheets/alchemy/_custom-properties.scss +82 -0
- data/app/assets/stylesheets/alchemy/_mixins.scss +38 -30
- data/app/assets/stylesheets/alchemy/_variables.scss +12 -5
- data/app/assets/stylesheets/alchemy/admin.scss +3 -4
- data/app/assets/stylesheets/alchemy/archive.scss +107 -50
- data/app/assets/stylesheets/alchemy/attachments.scss +5 -4
- data/app/assets/stylesheets/alchemy/buttons.scss +38 -164
- data/app/assets/stylesheets/alchemy/dashboard.scss +31 -6
- data/app/assets/stylesheets/alchemy/dialogs.scss +12 -28
- data/app/assets/stylesheets/alchemy/elements.scss +273 -282
- data/app/assets/stylesheets/alchemy/flash.scss +20 -12
- data/app/assets/stylesheets/alchemy/forms.scss +21 -34
- data/app/assets/stylesheets/alchemy/frame.scss +11 -32
- data/app/assets/stylesheets/alchemy/hints.scss +4 -62
- data/app/assets/stylesheets/alchemy/image_library.scss +36 -33
- data/app/assets/stylesheets/alchemy/labels.scss +4 -1
- data/app/assets/stylesheets/alchemy/menubar.scss +7 -6
- data/app/assets/stylesheets/alchemy/navigation.scss +27 -15
- data/app/assets/stylesheets/alchemy/nodes.scss +11 -7
- data/app/assets/stylesheets/alchemy/notices.scss +16 -4
- data/app/assets/stylesheets/alchemy/page-select.scss +10 -2
- data/app/assets/stylesheets/alchemy/pagination.scss +22 -13
- data/app/assets/stylesheets/alchemy/resource_info.scss +7 -5
- data/app/assets/stylesheets/alchemy/selects.scss +49 -42
- data/app/assets/stylesheets/alchemy/shoelace.scss +345 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +24 -14
- data/app/assets/stylesheets/alchemy/spinner.scss +9 -19
- data/app/assets/stylesheets/alchemy/tables.scss +16 -24
- data/app/assets/stylesheets/alchemy/tags.scss +4 -0
- data/app/assets/stylesheets/alchemy/toolbar.scss +29 -25
- data/app/assets/stylesheets/alchemy/upload.scss +140 -89
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +80 -108
- data/app/components/alchemy/admin/node_select.rb +39 -0
- data/app/components/alchemy/admin/page_select.rb +42 -0
- data/app/components/alchemy/ingredients/audio_view.rb +1 -1
- data/app/components/alchemy/ingredients/base_view.rb +1 -1
- data/app/components/alchemy/ingredients/boolean_view.rb +1 -1
- data/app/components/alchemy/ingredients/datetime_view.rb +1 -1
- data/app/components/alchemy/ingredients/file_view.rb +1 -1
- data/app/components/alchemy/ingredients/headline_view.rb +7 -16
- data/app/components/alchemy/ingredients/link_view.rb +1 -1
- data/app/components/alchemy/ingredients/page_view.rb +1 -1
- data/app/components/alchemy/ingredients/picture_view.rb +1 -1
- data/app/components/alchemy/ingredients/richtext_view.rb +1 -1
- data/app/components/alchemy/ingredients/text_view.rb +1 -1
- data/app/components/alchemy/ingredients/video_view.rb +1 -1
- data/app/controllers/alchemy/admin/base_controller.rb +5 -6
- data/app/controllers/alchemy/admin/elements_controller.rb +63 -35
- data/app/controllers/alchemy/admin/languages_controller.rb +1 -2
- data/app/controllers/alchemy/base_controller.rb +4 -2
- data/app/controllers/concerns/alchemy/admin/current_language.rb +1 -5
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
- data/app/controllers/concerns/alchemy/site_redirects.rb +1 -1
- data/app/decorators/alchemy/element_editor.rb +0 -2
- data/app/helpers/alchemy/admin/attachments_helper.rb +6 -5
- data/app/helpers/alchemy/admin/base_helper.rb +17 -12
- data/app/helpers/alchemy/admin/ingredients_helper.rb +4 -1
- data/app/helpers/alchemy/admin/pages_helper.rb +5 -11
- data/app/helpers/alchemy/base_helper.rb +47 -13
- data/app/javascript/alchemy_admin/components/alchemy_html_element.js +129 -0
- data/app/javascript/alchemy_admin/components/button.js +59 -0
- data/app/javascript/alchemy_admin/components/char_counter.js +40 -0
- data/app/javascript/alchemy_admin/components/datepicker.js +39 -0
- data/app/javascript/alchemy_admin/components/dialog_link.js +45 -0
- data/app/javascript/alchemy_admin/components/element_editor/publish_element_button.js +36 -0
- data/app/javascript/alchemy_admin/components/element_editor.js +553 -0
- data/app/javascript/alchemy_admin/components/ingredient_group.js +54 -0
- data/app/javascript/alchemy_admin/components/link_buttons/link_button.js +48 -0
- data/app/javascript/alchemy_admin/components/link_buttons/unlink_button.js +38 -0
- data/app/javascript/alchemy_admin/components/link_buttons.js +79 -0
- data/app/javascript/alchemy_admin/components/node_select.js +45 -0
- data/app/javascript/alchemy_admin/components/overlay.js +18 -0
- data/app/javascript/alchemy_admin/components/page_select.js +63 -0
- data/app/javascript/alchemy_admin/components/remote_select.js +134 -0
- data/app/javascript/alchemy_admin/components/select.js +12 -0
- data/app/javascript/alchemy_admin/components/spinner.js +31 -0
- data/app/javascript/alchemy_admin/components/tinymce.js +146 -0
- data/app/javascript/alchemy_admin/components/uploader/file_upload.js +266 -0
- data/app/javascript/alchemy_admin/components/uploader/progress.js +258 -0
- data/app/javascript/alchemy_admin/components/uploader.js +132 -0
- data/app/javascript/alchemy_admin/dirty.js +49 -0
- data/app/javascript/alchemy_admin/file_editors.js +1 -1
- data/app/javascript/alchemy_admin/gui.js +14 -0
- data/app/javascript/alchemy_admin/i18n.js +12 -8
- data/app/javascript/alchemy_admin/image_cropper.js +6 -3
- data/app/javascript/alchemy_admin/image_loader.js +7 -15
- data/app/javascript/alchemy_admin/ingredient_anchor_link.js +2 -5
- data/app/javascript/alchemy_admin/initializer.js +65 -0
- data/app/javascript/alchemy_admin/locales/en.js +31 -0
- data/app/javascript/alchemy_admin/picture_editors.js +2 -2
- data/app/javascript/alchemy_admin/picture_selector.js +38 -0
- data/app/javascript/alchemy_admin/please_wait_overlay.js +8 -0
- data/app/javascript/alchemy_admin/sortable_elements.js +78 -0
- data/app/javascript/alchemy_admin/spinner.js +36 -0
- data/app/javascript/alchemy_admin/tags_autocomplete.js +46 -0
- data/app/javascript/alchemy_admin/utils/ajax.js +6 -5
- data/app/javascript/alchemy_admin/utils/dom_helpers.js +20 -0
- data/app/javascript/alchemy_admin/utils/format.js +11 -0
- data/app/javascript/alchemy_admin/utils/string_conversions.js +10 -0
- data/app/javascript/alchemy_admin.js +70 -13
- data/app/javascript/menubar.js +10 -0
- data/app/models/alchemy/attachment.rb +9 -11
- data/app/models/alchemy/element.rb +11 -0
- data/app/models/alchemy/ingredients/richtext.rb +1 -10
- data/app/models/alchemy/node.rb +4 -0
- data/app/models/alchemy/page/page_elements.rb +2 -11
- data/app/models/alchemy/page/page_natures.rb +10 -2
- data/app/models/alchemy/page.rb +9 -51
- data/app/models/alchemy/picture/url.rb +1 -9
- data/app/serializers/alchemy/page_tree_serializer.rb +2 -1
- data/app/services/alchemy/copy_page.rb +98 -0
- data/app/views/alchemy/_menubar.html.erb +17 -13
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +14 -10
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +44 -36
- data/app/views/alchemy/admin/attachments/_replace_button.html.erb +15 -21
- data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -1
- data/app/views/alchemy/admin/attachments/assign.js.erb +1 -1
- data/app/views/alchemy/admin/attachments/index.html.erb +6 -4
- data/app/views/alchemy/admin/attachments/show.html.erb +8 -8
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -7
- data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
- data/app/views/alchemy/admin/crop.html.erb +1 -1
- data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +1 -1
- data/app/views/alchemy/admin/dashboard/index.html.erb +13 -11
- data/app/views/alchemy/admin/dashboard/info.html.erb +7 -7
- data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +21 -23
- data/app/views/alchemy/admin/elements/_element.html.erb +52 -44
- data/app/views/alchemy/admin/elements/_footer.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_header.html.erb +11 -12
- data/app/views/alchemy/admin/elements/_toolbar.html.erb +33 -45
- data/app/views/alchemy/admin/elements/create.js.erb +7 -15
- data/app/views/alchemy/admin/elements/destroy.js.erb +0 -2
- data/app/views/alchemy/admin/elements/index.html.erb +27 -24
- data/app/views/alchemy/admin/elements/new.html.erb +9 -11
- data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +2 -2
- data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +3 -3
- data/app/views/alchemy/admin/ingredients/_video_fields.html.erb +1 -2
- data/app/views/alchemy/admin/languages/_form.html.erb +2 -3
- data/app/views/alchemy/admin/languages/_language.html.erb +15 -8
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -0
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +28 -16
- data/app/views/alchemy/admin/layoutpages/index.html.erb +2 -2
- data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +12 -8
- data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
- data/app/views/alchemy/admin/nodes/_form.html.erb +20 -21
- data/app/views/alchemy/admin/nodes/_node.html.erb +39 -34
- data/app/views/alchemy/admin/nodes/index.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_anchor_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +2 -2
- data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_external_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_file_link.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_form.html.erb +10 -21
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_locked_page.html.erb +2 -2
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +4 -17
- data/app/views/alchemy/admin/pages/_page.html.erb +76 -72
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +23 -7
- data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +2 -1
- data/app/views/alchemy/admin/pages/_page_status.html.erb +11 -21
- data/app/views/alchemy/admin/pages/_publication_fields.html.erb +2 -5
- data/app/views/alchemy/admin/pages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_table_row.html.erb +43 -39
- data/app/views/alchemy/admin/pages/_toolbar.html.erb +43 -38
- data/app/views/alchemy/admin/pages/configure.html.erb +12 -14
- data/app/views/alchemy/admin/pages/edit.html.erb +80 -103
- data/app/views/alchemy/admin/pages/info.html.erb +20 -11
- data/app/views/alchemy/admin/pages/link.html.erb +22 -16
- data/app/views/alchemy/admin/pages/new.html.erb +9 -11
- data/app/views/alchemy/admin/pages/unlock.js.erb +10 -3
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -13
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -5
- data/app/views/alchemy/admin/partials/_routes.html.erb +10 -2
- data/app/views/alchemy/admin/partials/_site_select.html.erb +6 -5
- data/app/views/alchemy/admin/partials/_toolbar_button.html.erb +28 -23
- data/app/views/alchemy/admin/pictures/_archive.html.erb +5 -5
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -23
- data/app/views/alchemy/admin/pictures/_infos.html.erb +2 -6
- data/app/views/alchemy/admin/pictures/_picture.html.erb +15 -17
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +17 -16
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/assign.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/index.html.erb +34 -30
- data/app/views/alchemy/admin/pictures/show.html.erb +3 -3
- data/app/views/alchemy/admin/resources/_filter.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_form.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_resource.html.erb +16 -9
- data/app/views/alchemy/admin/resources/_table.html.erb +4 -1
- data/app/views/alchemy/admin/resources/index.html.erb +22 -19
- data/app/views/alchemy/admin/sites/index.html.erb +2 -1
- data/app/views/alchemy/admin/styleguide/index.html.erb +54 -28
- data/app/views/alchemy/admin/tags/_tag.html.erb +16 -18
- data/app/views/alchemy/admin/tags/index.html.erb +15 -12
- data/app/views/alchemy/admin/tinymce/_setup.html.erb +29 -0
- data/app/views/alchemy/admin/uploader/_button.html.erb +23 -29
- data/app/views/alchemy/admin/uploader/_setup.html.erb +3 -8
- data/app/views/alchemy/base/500.html.erb +1 -1
- data/app/views/alchemy/base/error_notice.js.erb +0 -1
- data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_datetime_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_file_editor.html.erb +5 -5
- data/app/views/alchemy/ingredients/_link_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_node_editor.html.erb +6 -19
- data/app/views/alchemy/ingredients/_page_editor.html.erb +7 -19
- data/app/views/alchemy/ingredients/_picture_editor.html.erb +2 -2
- data/app/views/alchemy/ingredients/_richtext_editor.html.erb +6 -15
- data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
- data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/shared/_anchor.html.erb +1 -1
- data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +10 -20
- data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +42 -49
- data/app/views/kaminari/alchemy/_first_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_gap.html.erb +1 -1
- data/app/views/kaminari/alchemy/_last_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_next_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_prev_page.html.erb +4 -2
- data/app/views/layouts/alchemy/admin.html.erb +10 -29
- data/config/alchemy/modules.yml +30 -30
- data/config/importmap.rb +10 -1
- data/config/initializers/rails_live_reload.rb +13 -0
- data/config/locales/alchemy.en.yml +23 -9
- data/config/routes.rb +2 -1
- data/lib/alchemy/auth_accessors.rb +6 -1
- data/lib/alchemy/controller_actions.rb +17 -4
- data/lib/alchemy/dev_support/live_reload_watcher.rb +5 -0
- data/lib/alchemy/engine.rb +8 -2
- data/lib/alchemy/forms/builder.rb +18 -12
- data/lib/alchemy/modules.rb +2 -2
- data/lib/alchemy/resources_helper.rb +3 -3
- data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
- data/lib/alchemy/test_support/rspec_matchers.rb +14 -0
- data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -1
- data/lib/alchemy/tinymce.rb +8 -3
- data/lib/alchemy/version.rb +1 -1
- data/package.json +14 -5
- data/vendor/assets/fonts/remixicon.eot +0 -0
- data/vendor/assets/fonts/remixicon.svg +7816 -0
- data/vendor/assets/fonts/remixicon.ttf +0 -0
- data/vendor/assets/fonts/remixicon.woff +0 -0
- data/vendor/assets/fonts/remixicon.woff2 +0 -0
- data/vendor/assets/stylesheets/remixicon.scss +10480 -0
- metadata +85 -97
- data/.gem_release.yml +0 -9
- data/app/assets/javascripts/alchemy/alchemy.autocomplete.js.coffee +0 -30
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -53
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +0 -45
- data/app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee +0 -19
- data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +0 -59
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -79
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -267
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -27
- data/app/assets/javascripts/alchemy/alchemy.spinner.js +0 -32
- data/app/assets/javascripts/alchemy/alchemy.tooltips.coffee +0 -10
- data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +0 -131
- data/app/assets/javascripts/alchemy/menubar.js.coffee +0 -8
- data/app/assets/javascripts/alchemy/node_select.js +0 -39
- data/app/assets/javascripts/alchemy/page_select.js +0 -46
- data/app/assets/javascripts/alchemy/templates/node.hbs +0 -16
- data/app/assets/javascripts/alchemy/templates/spinner.hbs +0 -7
- data/app/assets/stylesheets/alchemy/jquery-ui.scss +0 -435
- data/app/javascript/alchemy_admin/datepicker.js +0 -40
- data/app/javascript/alchemy_admin/tinymce.js +0 -146
- data/app/javascript/alchemy_admin/translations.js +0 -32
- data/app/views/alchemy/admin/elements/fold.js.erb +0 -33
- data/app/views/alchemy/admin/elements/order.js.erb +0 -11
- data/app/views/alchemy/admin/elements/publish.js.erb +0 -21
- data/app/views/alchemy/admin/elements/update.js.erb +0 -27
- data/vendor/assets/fonts/fa-regular-400.eot +0 -0
- data/vendor/assets/fonts/fa-regular-400.svg +0 -803
- data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
- data/vendor/assets/fonts/fa-regular-400.woff +0 -0
- data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
- data/vendor/assets/fonts/fa-solid-900.eot +0 -0
- data/vendor/assets/fonts/fa-solid-900.svg +0 -4938
- data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
- data/vendor/assets/fonts/fa-solid-900.woff +0 -0
- data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-process.js +0 -178
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-validate.js +0 -125
- data/vendor/assets/javascripts/fileupload/jquery.fileupload.js +0 -1502
- data/vendor/assets/javascripts/fileupload/jquery.iframe-transport.js +0 -224
- data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
- data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
- data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
- data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/widget.js +0 -754
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1623
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
- data/vendor/assets/javascripts/jquery_plugins/jquery.scrollTo.min.js +0 -7
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +0 -296
- data/vendor/assets/stylesheets/fontawesome/_animated.scss +0 -20
- data/vendor/assets/stylesheets/fontawesome/_bordered-pulled.scss +0 -20
- data/vendor/assets/stylesheets/fontawesome/_core.scss +0 -21
- data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +0 -6
- data/vendor/assets/stylesheets/fontawesome/_icons.scss +0 -1441
- data/vendor/assets/stylesheets/fontawesome/_larger.scss +0 -23
- data/vendor/assets/stylesheets/fontawesome/_list.scss +0 -18
- data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -56
- data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +0 -24
- data/vendor/assets/stylesheets/fontawesome/_screen-reader.scss +0 -5
- data/vendor/assets/stylesheets/fontawesome/_stacked.scss +0 -31
- data/vendor/assets/stylesheets/fontawesome/_variables.scss +0 -1458
- data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +0 -16
- data/vendor/assets/stylesheets/fontawesome/regular.scss +0 -23
- data/vendor/assets/stylesheets/fontawesome/solid.scss +0 -24
@@ -1,7 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright (c) 2007-2013 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
|
3
|
-
* Dual licensed under MIT and GPL.
|
4
|
-
* @author Ariel Flesler
|
5
|
-
* @version 1.4.5b
|
6
|
-
*/
|
7
|
-
;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
@@ -1,296 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* UI Tabs Paging extension - v1.2.2 (for jQuery 1.9.0 and jQuery UI 1.9.0)
|
3
|
-
*
|
4
|
-
* Copyright (c) 2013, http://seyfertdesign.com/jquery/ui-tabs-paging.html
|
5
|
-
*
|
6
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
* of this software and associated documentation files (the "Software"), to deal
|
8
|
-
* in the Software without restriction, including without limitation the rights
|
9
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
* copies of the Software, and to permit persons to whom the Software is
|
11
|
-
* furnished to do so, subject to the following conditions:
|
12
|
-
*
|
13
|
-
* The above copyright notice and this permission notice shall be included in
|
14
|
-
* all copies or substantial portions of the Software.
|
15
|
-
*
|
16
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
* THE SOFTWARE.
|
23
|
-
*
|
24
|
-
* Depends:
|
25
|
-
* jquery.ui.core.js
|
26
|
-
* jquery.ui.widget.js
|
27
|
-
* jquery.ui.tabs.js
|
28
|
-
*/
|
29
|
-
|
30
|
-
(function($) {
|
31
|
-
|
32
|
-
// overridden ui.tabs functions
|
33
|
-
var uiTabsFuncs = {
|
34
|
-
refresh: $.ui.tabs.prototype.refresh,
|
35
|
-
option: $.ui.tabs.prototype.option
|
36
|
-
};
|
37
|
-
|
38
|
-
$.extend($.ui.tabs.prototype, {
|
39
|
-
paging: function(options) {
|
40
|
-
var opts = {
|
41
|
-
tabsPerPage: 0, // Max number of tabs to display at one time. 0 automatically sizing.
|
42
|
-
nextButton: '»', // Text displayed for next button.
|
43
|
-
prevButton: '«', // Text displayed for previous button.
|
44
|
-
follow: false, // When clicking next button, automatically make first tab active. When clicking previous button automatically make last tab active.
|
45
|
-
cycle: false, // When at end of list, next button returns to first page. When at beginning of list previous button goes to end of list.
|
46
|
-
activeOnAdd: false, // When new tab is added, make tab active automatically
|
47
|
-
followOnActive: false // When tab is changed to active, automatically go move to that tab group.
|
48
|
-
};
|
49
|
-
|
50
|
-
opts = $.extend(opts, options);
|
51
|
-
|
52
|
-
var self = this, initialized = false, currentPage,
|
53
|
-
buttonWidth, containerWidth, allTabsWidth, tabWidths,
|
54
|
-
maxPageWidth, pages, resizeTimer = null,
|
55
|
-
windowHeight, windowWidth;
|
56
|
-
|
57
|
-
// initialize paging
|
58
|
-
function init() {
|
59
|
-
destroy();
|
60
|
-
|
61
|
-
windowHeight = $(window).height();
|
62
|
-
windowWidth = $(window).width();
|
63
|
-
|
64
|
-
allTabsWidth = 0, currentPage = 0, maxPageWidth = 0, buttonWidth = 0,
|
65
|
-
pages = new Array(), tabWidths = new Array(), selectedTabWidths = new Array();
|
66
|
-
|
67
|
-
containerWidth = self.element.width();
|
68
|
-
|
69
|
-
// loops through LIs, get width of each tab when selected and unselected.
|
70
|
-
var maxDiff = 0; // the max difference between a selected and unselected tab
|
71
|
-
self.tabs.each(function(i) {
|
72
|
-
if (i == self.options.active) {
|
73
|
-
selectedTabWidths[i] = $(this).outerWidth(true);
|
74
|
-
tabWidths[i] = self.tabs.eq(i).removeClass('ui-tabs-active').outerWidth(true);
|
75
|
-
self.tabs.eq(i).addClass('ui-tabs-active');
|
76
|
-
maxDiff = Math.min(maxDiff, Math.abs(selectedTabWidths[i] - tabWidths[i]));
|
77
|
-
allTabsWidth += tabWidths[i];
|
78
|
-
} else {
|
79
|
-
tabWidths[i] = $(this).outerWidth(true);
|
80
|
-
selectedTabWidths[i] = self.tabs.eq(i).addClass('ui-tabs-active').outerWidth(true);
|
81
|
-
self.tabs.eq(i).removeClass('ui-tabs-active');
|
82
|
-
maxDiff = Math.max(maxDiff, Math.abs(selectedTabWidths[i] - tabWidths[i]));
|
83
|
-
allTabsWidth += tabWidths[i];
|
84
|
-
}
|
85
|
-
});
|
86
|
-
|
87
|
-
// fix padding issues with buttons
|
88
|
-
// TODO determine a better way to handle this
|
89
|
-
allTabsWidth += maxDiff + 9;
|
90
|
-
|
91
|
-
// if the width of all tables is greater than the container's width, calculate the pages
|
92
|
-
if (allTabsWidth > containerWidth) {
|
93
|
-
// create next button
|
94
|
-
li = $('<li></li>')
|
95
|
-
.addClass('ui-state-default ui-tabs-paging-next')
|
96
|
-
.append($('<a href="#"></a>')
|
97
|
-
.click(function() { page('next'); return false; })
|
98
|
-
.html(opts.nextButton));
|
99
|
-
|
100
|
-
self.tablist.append(li);
|
101
|
-
buttonWidth = li.outerWidth(true);
|
102
|
-
|
103
|
-
// create prev button
|
104
|
-
li = $('<li></li>')
|
105
|
-
.addClass('ui-state-default ui-tabs-paging-prev')
|
106
|
-
.append($('<a href="#"></a>')
|
107
|
-
.click(function() { page('prev'); return false; })
|
108
|
-
.html(opts.prevButton));
|
109
|
-
self.tablist.prepend(li);
|
110
|
-
buttonWidth += li.outerWidth(true);
|
111
|
-
|
112
|
-
// TODO determine fix for padding issues to next button
|
113
|
-
buttonWidth += 19;
|
114
|
-
|
115
|
-
var pageIndex = 0, pageWidth = 0, maxTabPadding = 0;
|
116
|
-
|
117
|
-
// start calculating pageWidths
|
118
|
-
for (var i = 0; i < tabWidths.length; i++) {
|
119
|
-
// if first tab of page or selected tab's padding larger than the current max, set the maxTabPadding
|
120
|
-
if (pageWidth == 0 || selectedTabWidths[i] - tabWidths[i] > maxTabPadding)
|
121
|
-
maxTabPadding = (selectedTabWidths[i] - tabWidths[i]);
|
122
|
-
|
123
|
-
// if first tab of page, initialize pages variable for page
|
124
|
-
if (pages[pageIndex] == null) {
|
125
|
-
pages[pageIndex] = { start: i };
|
126
|
-
|
127
|
-
} else if ((i > 0 && (i % opts.tabsPerPage) == 0) || (tabWidths[i] + pageWidth + buttonWidth + 12) > containerWidth) {
|
128
|
-
if ((pageWidth + maxTabPadding) > maxPageWidth)
|
129
|
-
maxPageWidth = (pageWidth + maxTabPadding);
|
130
|
-
pageIndex++;
|
131
|
-
pages[pageIndex] = { start: i };
|
132
|
-
pageWidth = 0;
|
133
|
-
}
|
134
|
-
pages[pageIndex].end = i+1;
|
135
|
-
pageWidth += tabWidths[i];
|
136
|
-
if (i == self.options.active) currentPage = pageIndex;
|
137
|
-
}
|
138
|
-
if ((pageWidth + maxTabPadding) > maxPageWidth)
|
139
|
-
maxPageWidth = (pageWidth + maxTabPadding);
|
140
|
-
|
141
|
-
// hide all tabs then show tabs for current page
|
142
|
-
self.tabs.hide().slice(pages[currentPage].start, pages[currentPage].end).show();
|
143
|
-
if (currentPage == (pages.length - 1) && !opts.cycle)
|
144
|
-
disableButton('next');
|
145
|
-
if (currentPage == 0 && !opts.cycle)
|
146
|
-
disableButton('prev');
|
147
|
-
|
148
|
-
// calculate the right padding for the next button
|
149
|
-
buttonPadding = containerWidth - maxPageWidth - buttonWidth;
|
150
|
-
if (buttonPadding > 0)
|
151
|
-
$('.ui-tabs-paging-next', self.element).css({ paddingRight: buttonPadding + 'px' });
|
152
|
-
} else {
|
153
|
-
destroy();
|
154
|
-
}
|
155
|
-
|
156
|
-
$(window).bind('resize', handleResize);
|
157
|
-
|
158
|
-
initialized = true;
|
159
|
-
}
|
160
|
-
|
161
|
-
// handles paging forward and backward
|
162
|
-
function page(direction) {
|
163
|
-
currentPage = currentPage + (direction == 'prev'?-1:1);
|
164
|
-
|
165
|
-
if ((direction == 'prev' && currentPage < 0 && opts.cycle) ||
|
166
|
-
(direction == 'next' && currentPage >= pages.length && !opts.cycle))
|
167
|
-
currentPage = pages.length - 1;
|
168
|
-
else if ((direction == 'prev' && currentPage < 0) ||
|
169
|
-
(direction == 'next' && currentPage >= pages.length && opts.cycle))
|
170
|
-
currentPage = 0;
|
171
|
-
|
172
|
-
var start = pages[currentPage].start;
|
173
|
-
var end = pages[currentPage].end;
|
174
|
-
self.tabs.hide().slice(start, end).show();
|
175
|
-
|
176
|
-
if (direction == 'prev') {
|
177
|
-
enableButton('next');
|
178
|
-
if (opts.follow && (self.options.active < start || self.options.active > (end-1))) self.option('active', end-1);
|
179
|
-
if (!opts.cycle && start <= 0) disableButton('prev');
|
180
|
-
} else {
|
181
|
-
enableButton('prev');
|
182
|
-
if (opts.follow && (self.options.active < start || self.options.active > (end-1))) self.option('active', start);
|
183
|
-
if (!opts.cycle && end >= self.tabs.length) disableButton('next');
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
// change styling of next/prev buttons when disabled
|
188
|
-
function disableButton(direction) {
|
189
|
-
$('.ui-tabs-paging-'+direction, self.element).addClass('ui-tabs-paging-disabled');
|
190
|
-
}
|
191
|
-
|
192
|
-
function enableButton(direction) {
|
193
|
-
$('.ui-tabs-paging-'+direction, self.element).removeClass('ui-tabs-paging-disabled');
|
194
|
-
}
|
195
|
-
|
196
|
-
// special function defined to handle IE resize issues
|
197
|
-
function handleResize() {
|
198
|
-
if (resizeTimer) clearTimeout(resizeTimer);
|
199
|
-
|
200
|
-
if (windowHeight != $(window).height() || windowWidth != $(window).width())
|
201
|
-
{
|
202
|
-
resizeTimer = setTimeout(init, 100);
|
203
|
-
}
|
204
|
-
}
|
205
|
-
|
206
|
-
// remove all paging related changes and events
|
207
|
-
function destroy() {
|
208
|
-
// remove buttons
|
209
|
-
$('.ui-tabs-paging-next', self.element).remove();
|
210
|
-
$('.ui-tabs-paging-prev', self.element).remove();
|
211
|
-
|
212
|
-
// show all tabs
|
213
|
-
self.tabs.show();
|
214
|
-
|
215
|
-
initialized = false;
|
216
|
-
|
217
|
-
$(window).unbind('resize', handleResize);
|
218
|
-
}
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
// ------------- OVERRIDDEN PUBLIC FUNCTIONS -------------
|
223
|
-
self.option = function(optionName, value) {
|
224
|
-
var retVal = uiTabsFuncs.option.apply(this, [optionName, value]);
|
225
|
-
|
226
|
-
// if "followOnActive" is true, then move page when selection changes
|
227
|
-
if (optionName == "active")
|
228
|
-
{
|
229
|
-
// if paging is not initialized or it is not configured to
|
230
|
-
// change pages when a new tab is active, then do nothing
|
231
|
-
if (!initialized || !opts.followOnActive)
|
232
|
-
return retVal;
|
233
|
-
|
234
|
-
// find the new page based on index of the active tab
|
235
|
-
for (var i in pages) {
|
236
|
-
var start = pages[i].start;
|
237
|
-
var end = pages[i].end;
|
238
|
-
if (value >= start && value < end) {
|
239
|
-
// if the the active tab is not within the currentPage of tabs, then change pages
|
240
|
-
if (i != currentPage) {
|
241
|
-
this.tabs.hide().slice(start, end).show();
|
242
|
-
|
243
|
-
currentPage = parseInt(i);
|
244
|
-
if (currentPage == 0) {
|
245
|
-
enableButton('next');
|
246
|
-
if (!opts.cycle && start <= 0) disableButton('prev');
|
247
|
-
} else {
|
248
|
-
enableButton('prev');
|
249
|
-
if (!opts.cycle && end >= this.tabs.length) disableButton('next');
|
250
|
-
}
|
251
|
-
}
|
252
|
-
break;
|
253
|
-
}
|
254
|
-
}
|
255
|
-
}
|
256
|
-
|
257
|
-
return retVal;
|
258
|
-
}
|
259
|
-
|
260
|
-
self.refresh = function() {
|
261
|
-
if (initialized)
|
262
|
-
{
|
263
|
-
destroy();
|
264
|
-
|
265
|
-
uiTabsFuncs.refresh.apply(this);
|
266
|
-
|
267
|
-
// re-initialize paging buttons
|
268
|
-
init();
|
269
|
-
}
|
270
|
-
|
271
|
-
uiTabsFuncs.refresh.apply(this);
|
272
|
-
}
|
273
|
-
|
274
|
-
|
275
|
-
// ------------- PUBLIC FUNCTIONS -------------
|
276
|
-
$.extend($.ui.tabs.prototype, {
|
277
|
-
// public function for removing paging
|
278
|
-
pagingDestroy: function() {
|
279
|
-
destroy();
|
280
|
-
return this;
|
281
|
-
},
|
282
|
-
|
283
|
-
// public function to handle resizes that are not on the window
|
284
|
-
pagingResize: function() {
|
285
|
-
init();
|
286
|
-
return this;
|
287
|
-
}
|
288
|
-
});
|
289
|
-
|
290
|
-
// initialize on startup!
|
291
|
-
init();
|
292
|
-
}
|
293
|
-
});
|
294
|
-
|
295
|
-
|
296
|
-
})(jQuery);
|
@@ -1,20 +0,0 @@
|
|
1
|
-
// Animated Icons
|
2
|
-
// --------------------------
|
3
|
-
|
4
|
-
.#{$fa-css-prefix}-spin {
|
5
|
-
animation: fa-spin 2s infinite linear;
|
6
|
-
}
|
7
|
-
|
8
|
-
.#{$fa-css-prefix}-pulse {
|
9
|
-
animation: fa-spin 1s infinite steps(8);
|
10
|
-
}
|
11
|
-
|
12
|
-
@keyframes fa-spin {
|
13
|
-
0% {
|
14
|
-
transform: rotate(0deg);
|
15
|
-
}
|
16
|
-
|
17
|
-
100% {
|
18
|
-
transform: rotate(360deg);
|
19
|
-
}
|
20
|
-
}
|
@@ -1,20 +0,0 @@
|
|
1
|
-
// Bordered & Pulled
|
2
|
-
// -------------------------
|
3
|
-
|
4
|
-
.#{$fa-css-prefix}-border {
|
5
|
-
border: solid .08em $fa-border-color;
|
6
|
-
border-radius: .1em;
|
7
|
-
padding: .2em .25em .15em;
|
8
|
-
}
|
9
|
-
|
10
|
-
.#{$fa-css-prefix}-pull-left { float: left; }
|
11
|
-
.#{$fa-css-prefix}-pull-right { float: right; }
|
12
|
-
|
13
|
-
.#{$fa-css-prefix},
|
14
|
-
.fas,
|
15
|
-
.far,
|
16
|
-
.fal,
|
17
|
-
.fab {
|
18
|
-
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
|
19
|
-
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
|
20
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
// Base Class Definition
|
2
|
-
// -------------------------
|
3
|
-
|
4
|
-
.#{$fa-css-prefix},
|
5
|
-
.fas,
|
6
|
-
.far,
|
7
|
-
.fal,
|
8
|
-
.fad,
|
9
|
-
.fab {
|
10
|
-
-moz-osx-font-smoothing: grayscale;
|
11
|
-
-webkit-font-smoothing: antialiased;
|
12
|
-
display: inline-block;
|
13
|
-
font-style: normal;
|
14
|
-
font-variant: normal;
|
15
|
-
text-rendering: auto;
|
16
|
-
line-height: 1;
|
17
|
-
}
|
18
|
-
|
19
|
-
%fa-icon {
|
20
|
-
@include fa-icon;
|
21
|
-
}
|