spree_admin 5.0.0.rc1
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/LICENSE.md +13 -0
- data/README.md +4 -0
- data/Rakefile +15 -0
- data/app/assets/config/spree_admin_manifest.js +10 -0
- data/app/assets/images/favicon_256x256.png +0 -0
- data/app/assets/stylesheets/spree/admin/actiontext.css +36 -0
- data/app/assets/stylesheets/spree/admin/application.scss +43 -0
- data/app/assets/stylesheets/spree/admin/components/_alerts.scss +48 -0
- data/app/assets/stylesheets/spree/admin/components/_badges.scss +117 -0
- data/app/assets/stylesheets/spree/admin/components/_bulk_panel.scss +31 -0
- data/app/assets/stylesheets/spree/admin/components/_buttons.scss +198 -0
- data/app/assets/stylesheets/spree/admin/components/_cards.scss +126 -0
- data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +148 -0
- data/app/assets/stylesheets/spree/admin/components/_filters.scss +41 -0
- data/app/assets/stylesheets/spree/admin/components/_line_items_form.scss +32 -0
- data/app/assets/stylesheets/spree/admin/components/_main.scss +148 -0
- data/app/assets/stylesheets/spree/admin/components/_media_form.scss +91 -0
- data/app/assets/stylesheets/spree/admin/components/_modals.scss +42 -0
- data/app/assets/stylesheets/spree/admin/components/_navbar.scss +10 -0
- data/app/assets/stylesheets/spree/admin/components/_navigation.scss +53 -0
- data/app/assets/stylesheets/spree/admin/components/_offcanvas.scss +26 -0
- data/app/assets/stylesheets/spree/admin/components/_search_picker.scss +55 -0
- data/app/assets/stylesheets/spree/admin/components/_seo_form.scss +16 -0
- data/app/assets/stylesheets/spree/admin/components/_sortable_tree.scss +58 -0
- data/app/assets/stylesheets/spree/admin/components/_tables.scss +187 -0
- data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +203 -0
- data/app/assets/stylesheets/spree/admin/global/_variables.scss +190 -0
- data/app/assets/stylesheets/spree/admin/plugins/_dropdown.scss +102 -0
- data/app/assets/stylesheets/spree/admin/plugins/_items.scss +115 -0
- data/app/assets/stylesheets/spree/admin/plugins/_tinymce_custom.scss +74 -0
- data/app/assets/stylesheets/spree/admin/plugins/_trix_custom.scss +110 -0
- data/app/assets/stylesheets/spree/admin/plugins/flatfile.scss +4 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/checkbox_options.scss +5 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/clear_button.scss +30 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/drag_drop.scss +16 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/dropdown_header.scss +23 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/dropdown_input.scss +47 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/input_autogrow.scss +18 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/optgroup_columns.scss +23 -0
- data/app/assets/stylesheets/spree/admin/plugins/plugins/remove_button.scss +44 -0
- data/app/assets/stylesheets/spree/admin/plugins/tom-select.bootstrap4.scss +219 -0
- data/app/assets/stylesheets/spree/admin/plugins/tom-select.bootstrap5.scss +274 -0
- data/app/assets/stylesheets/spree/admin/plugins/tom-select.default.scss +87 -0
- data/app/assets/stylesheets/spree/admin/plugins/tom-select.scss +175 -0
- data/app/assets/stylesheets/spree/admin/plugins/uppy_fixes.scss +25 -0
- data/app/assets/stylesheets/spree/admin/shared/_base.scss +674 -0
- data/app/assets/stylesheets/spree/admin/shared/_forms.scss +184 -0
- data/app/assets/stylesheets/spree/admin/views/_dashboard.scss +34 -0
- data/app/assets/stylesheets/spree/admin/views/_page_builder.scss +237 -0
- data/app/controllers/concerns/spree/admin/analytics_concern.rb +51 -0
- data/app/controllers/concerns/spree/admin/bulk_operations_concern.rb +38 -0
- data/app/controllers/concerns/spree/admin/order_concern.rb +24 -0
- data/app/controllers/concerns/spree/admin/page_builder_concern.rb +44 -0
- data/app/controllers/spree/admin/action_text/video_embeds_controller.rb +44 -0
- data/app/controllers/spree/admin/addresses_controller.rb +86 -0
- data/app/controllers/spree/admin/assets_controller.rb +70 -0
- data/app/controllers/spree/admin/base_controller.rb +131 -0
- data/app/controllers/spree/admin/checkouts_controller.rb +23 -0
- data/app/controllers/spree/admin/classifications_controller.rb +74 -0
- data/app/controllers/spree/admin/coupon_codes_controller.rb +21 -0
- data/app/controllers/spree/admin/custom_domains_controller.rb +19 -0
- data/app/controllers/spree/admin/customer_returns_controller.rb +20 -0
- data/app/controllers/spree/admin/dashboard_controller.rb +145 -0
- data/app/controllers/spree/admin/digital_assets_controller.rb +45 -0
- data/app/controllers/spree/admin/errors_controller.rb +11 -0
- data/app/controllers/spree/admin/exports_controller.rb +48 -0
- data/app/controllers/spree/admin/line_items_controller.rb +121 -0
- data/app/controllers/spree/admin/oauth_applications_controller.rb +27 -0
- data/app/controllers/spree/admin/option_types_controller.rb +23 -0
- data/app/controllers/spree/admin/option_values_controller.rb +21 -0
- data/app/controllers/spree/admin/orders/billing_address_controller.rb +103 -0
- data/app/controllers/spree/admin/orders/contact_information_controller.rb +45 -0
- data/app/controllers/spree/admin/orders/customer_returns_controller.rb +81 -0
- data/app/controllers/spree/admin/orders/payment_links_controller.rb +33 -0
- data/app/controllers/spree/admin/orders/return_authorizations_controller.rb +90 -0
- data/app/controllers/spree/admin/orders/shipping_address_controller.rb +85 -0
- data/app/controllers/spree/admin/orders/user_controller.rb +94 -0
- data/app/controllers/spree/admin/orders_controller.rb +87 -0
- data/app/controllers/spree/admin/page_blocks_controller.rb +40 -0
- data/app/controllers/spree/admin/page_links_controller.rb +43 -0
- data/app/controllers/spree/admin/page_sections_controller.rb +57 -0
- data/app/controllers/spree/admin/pages_controller.rb +40 -0
- data/app/controllers/spree/admin/payment_methods_controller.rb +45 -0
- data/app/controllers/spree/admin/payments_controller.rb +122 -0
- data/app/controllers/spree/admin/post_categories_controller.rb +6 -0
- data/app/controllers/spree/admin/posts_controller.rb +23 -0
- data/app/controllers/spree/admin/products_controller.rb +366 -0
- data/app/controllers/spree/admin/profile_controller.rb +31 -0
- data/app/controllers/spree/admin/promotion_actions_controller.rb +47 -0
- data/app/controllers/spree/admin/promotion_rules_controller.rb +39 -0
- data/app/controllers/spree/admin/promotions_controller.rb +61 -0
- data/app/controllers/spree/admin/properties_controller.rb +23 -0
- data/app/controllers/spree/admin/refund_reasons_controller.rb +6 -0
- data/app/controllers/spree/admin/refunds_controller.rb +43 -0
- data/app/controllers/spree/admin/reimbursement_types_controller.rb +6 -0
- data/app/controllers/spree/admin/reimbursements_controller.rb +47 -0
- data/app/controllers/spree/admin/reports_controller.rb +52 -0
- data/app/controllers/spree/admin/resource_controller.rb +325 -0
- data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +6 -0
- data/app/controllers/spree/admin/return_authorizations_controller.rb +29 -0
- data/app/controllers/spree/admin/return_items_controller.rb +9 -0
- data/app/controllers/spree/admin/roles_controller.rb +6 -0
- data/app/controllers/spree/admin/shipments_controller.rb +102 -0
- data/app/controllers/spree/admin/shipping_categories_controller.rb +6 -0
- data/app/controllers/spree/admin/shipping_methods_controller.rb +29 -0
- data/app/controllers/spree/admin/stock_items_controller.rb +25 -0
- data/app/controllers/spree/admin/stock_locations_controller.rb +24 -0
- data/app/controllers/spree/admin/stock_transfers_controller.rb +48 -0
- data/app/controllers/spree/admin/store_credit_categories_controller.rb +6 -0
- data/app/controllers/spree/admin/store_credits_controller.rb +93 -0
- data/app/controllers/spree/admin/storefront_controller.rb +38 -0
- data/app/controllers/spree/admin/stores_controller.rb +87 -0
- data/app/controllers/spree/admin/tax_categories_controller.rb +6 -0
- data/app/controllers/spree/admin/tax_rates_controller.rb +20 -0
- data/app/controllers/spree/admin/taxonomies_controller.rb +21 -0
- data/app/controllers/spree/admin/taxons_controller.rb +98 -0
- data/app/controllers/spree/admin/themes_controller.rb +75 -0
- data/app/controllers/spree/admin/translations_controller.rb +74 -0
- data/app/controllers/spree/admin/users_controller.rb +91 -0
- data/app/controllers/spree/admin/variants_controller.rb +90 -0
- data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +48 -0
- data/app/controllers/spree/admin/zones_controller.rb +37 -0
- data/app/helpers/spree/admin/base_helper.rb +246 -0
- data/app/helpers/spree/admin/custom_domains_helper.rb +9 -0
- data/app/helpers/spree/admin/customer_returns_helper.rb +18 -0
- data/app/helpers/spree/admin/flash_helper.rb +15 -0
- data/app/helpers/spree/admin/navigation_helper.rb +195 -0
- data/app/helpers/spree/admin/onboarding_helper.rb +18 -0
- data/app/helpers/spree/admin/orders_filters_helper.rb +68 -0
- data/app/helpers/spree/admin/orders_helper.rb +179 -0
- data/app/helpers/spree/admin/page_builder_helper.rb +130 -0
- data/app/helpers/spree/admin/payments_helper.rb +24 -0
- data/app/helpers/spree/admin/posts_helper.rb +9 -0
- data/app/helpers/spree/admin/products_helper.rb +127 -0
- data/app/helpers/spree/admin/promotion_actions_helper.rb +10 -0
- data/app/helpers/spree/admin/promotion_rules_helper.rb +17 -0
- data/app/helpers/spree/admin/promotions_helper.rb +25 -0
- data/app/helpers/spree/admin/reimbursement_type_helper.rb +9 -0
- data/app/helpers/spree/admin/session_assets_helper.rb +24 -0
- data/app/helpers/spree/admin/shipment_helper.rb +27 -0
- data/app/helpers/spree/admin/sortable_tree_helper.rb +31 -0
- data/app/helpers/spree/admin/stock_locations_helper.rb +22 -0
- data/app/helpers/spree/admin/store_helper.rb +46 -0
- data/app/helpers/spree/admin/stores_helper.rb +86 -0
- data/app/helpers/spree/admin/tags_helper.rb +35 -0
- data/app/helpers/spree/admin/taxons_helper.rb +27 -0
- data/app/helpers/spree/admin/themes_helper.rb +9 -0
- data/app/helpers/spree/admin/translations_helper.rb +14 -0
- data/app/helpers/spree/admin/turbo_helper.rb +41 -0
- data/app/helpers/spree/admin/users_helper.rb +37 -0
- data/app/helpers/spree/admin/webhooks_subscribers_helper.rb +31 -0
- data/app/helpers/tom_select_helper.rb +42 -0
- data/app/javascript/spree/admin/application.js +157 -0
- data/app/javascript/spree/admin/controllers/active_storage_upload_controller.js +168 -0
- data/app/javascript/spree/admin/controllers/address_form_controller.js +98 -0
- data/app/javascript/spree/admin/controllers/asset_uploader_controller.js +58 -0
- data/app/javascript/spree/admin/controllers/autocomplete_select_controller.js +36 -0
- data/app/javascript/spree/admin/controllers/better_slider_controller.js +23 -0
- data/app/javascript/spree/admin/controllers/block_form_controller.js +11 -0
- data/app/javascript/spree/admin/controllers/bootstrap_tabs_controller.js +9 -0
- data/app/javascript/spree/admin/controllers/bulk_operation_controller.js +78 -0
- data/app/javascript/spree/admin/controllers/calculator_fields_controller.js +24 -0
- data/app/javascript/spree/admin/controllers/calendar_range_controller.js +52 -0
- data/app/javascript/spree/admin/controllers/clipboard_controller.js +17 -0
- data/app/javascript/spree/admin/controllers/color_palette_controller.js +22 -0
- data/app/javascript/spree/admin/controllers/color_picker_controller.js +52 -0
- data/app/javascript/spree/admin/controllers/enable_button_controller.js +29 -0
- data/app/javascript/spree/admin/controllers/filters_controller.js +66 -0
- data/app/javascript/spree/admin/controllers/font_picker_controller.js +55 -0
- data/app/javascript/spree/admin/controllers/media_form_controller.js +38 -0
- data/app/javascript/spree/admin/controllers/multi_input_controller.js +75 -0
- data/app/javascript/spree/admin/controllers/multi_tom_select_controller.js +80 -0
- data/app/javascript/spree/admin/controllers/order_billing_address_controller.js +39 -0
- data/app/javascript/spree/admin/controllers/page_builder_controller.js +316 -0
- data/app/javascript/spree/admin/controllers/password_toggle_controller.js +14 -0
- data/app/javascript/spree/admin/controllers/product_form_controller.js +70 -0
- data/app/javascript/spree/admin/controllers/range_input_controller.js +9 -0
- data/app/javascript/spree/admin/controllers/replace_controller.js +15 -0
- data/app/javascript/spree/admin/controllers/return_items_controller.js +47 -0
- data/app/javascript/spree/admin/controllers/row_link_controller.js +18 -0
- data/app/javascript/spree/admin/controllers/rule_form_controller.js +17 -0
- data/app/javascript/spree/admin/controllers/search_picker_controller.js +38 -0
- data/app/javascript/spree/admin/controllers/section_form_controller.js +14 -0
- data/app/javascript/spree/admin/controllers/select_controller.js +117 -0
- data/app/javascript/spree/admin/controllers/seo_form_controller.js +116 -0
- data/app/javascript/spree/admin/controllers/slug_form_controller.js +17 -0
- data/app/javascript/spree/admin/controllers/sortable_tree_controller.js +55 -0
- data/app/javascript/spree/admin/controllers/stock_transfer_controller.js +87 -0
- data/app/javascript/spree/admin/controllers/store_form_controller.js +17 -0
- data/app/javascript/spree/admin/controllers/unit_system_controller.js +27 -0
- data/app/javascript/spree/admin/controllers/variants_form_controller.js +1048 -0
- data/app/javascript/spree/admin/controllers/webhook_subscriber_events_controller.js +19 -0
- data/app/javascript/spree/admin/helpers/bootstrap.js +49 -0
- data/app/javascript/spree/admin/helpers/canvas.js +29 -0
- data/app/javascript/spree/admin/helpers/index.js +0 -0
- data/app/javascript/spree/admin/helpers/tinymce.js +65 -0
- data/app/javascript/spree/admin/helpers/trix/video_embed.js +182 -0
- data/app/javascript/spree/admin/helpers/uppy_active_storage.js +210 -0
- data/app/models/spree/admin/resource.rb +36 -0
- data/app/models/spree/admin/updater.rb +42 -0
- data/app/views/active_storage/_upload_form.html.erb +65 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_first_page.html.erb +13 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_gap.html.erb +12 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_last_page.html.erb +13 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_next_page.html.erb +13 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_page.html.erb +18 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_paginator.html.erb +17 -0
- data/app/views/kaminari/admin-twitter-bootstrap-4/_prev_page.html.erb +13 -0
- data/app/views/layouts/spree/admin.html.erb +21 -0
- data/app/views/layouts/spree/page_builder.html.erb +45 -0
- data/app/views/spree/admin/addresses/edit.html.erb +12 -0
- data/app/views/spree/admin/addresses/new.html.erb +16 -0
- data/app/views/spree/admin/assets/bulk_destroy.turbo_stream.erb +3 -0
- data/app/views/spree/admin/assets/create.turbo_stream.erb +5 -0
- data/app/views/spree/admin/assets/destroy.turbo_stream.erb +4 -0
- data/app/views/spree/admin/assets/edit.html.erb +27 -0
- data/app/views/spree/admin/assets/update.turbo_stream.erb +7 -0
- data/app/views/spree/admin/classifications/_classification.html.erb +38 -0
- data/app/views/spree/admin/classifications/create.turbo_stream.erb +7 -0
- data/app/views/spree/admin/classifications/destroy.turbo_stream.erb +2 -0
- data/app/views/spree/admin/classifications/index.html.erb +20 -0
- data/app/views/spree/admin/classifications/new.html.erb +1 -0
- data/app/views/spree/admin/coupon_codes/_coupon_code.html.erb +12 -0
- data/app/views/spree/admin/coupon_codes/index.csv.erb +14 -0
- data/app/views/spree/admin/coupon_codes/index.html.erb +70 -0
- data/app/views/spree/admin/custom_domains/_custom_domain.html.erb +13 -0
- data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +24 -0
- data/app/views/spree/admin/custom_domains/_form.html.erb +19 -0
- data/app/views/spree/admin/custom_domains/create.turbo_stream.erb +3 -0
- data/app/views/spree/admin/custom_domains/edit.html.erb +15 -0
- data/app/views/spree/admin/custom_domains/index.html.erb +50 -0
- data/app/views/spree/admin/custom_domains/new.html.erb +15 -0
- data/app/views/spree/admin/customer_returns/_customer_return.html.erb +31 -0
- data/app/views/spree/admin/customer_returns/index.html.erb +57 -0
- data/app/views/spree/admin/dashboard/_analytics.html.erb +3 -0
- data/app/views/spree/admin/dashboard/_setup_progress.html.erb +17 -0
- data/app/views/spree/admin/dashboard/_setup_tasks.html.erb +24 -0
- data/app/views/spree/admin/dashboard/_store_preview.html.erb +45 -0
- data/app/views/spree/admin/dashboard/_top_products.html.erb +71 -0
- data/app/views/spree/admin/dashboard/_updater.html.erb +9 -0
- data/app/views/spree/admin/dashboard/_visits.html.erb +112 -0
- data/app/views/spree/admin/dashboard/analytics.html.erb +118 -0
- data/app/views/spree/admin/dashboard/getting_started.html.erb +22 -0
- data/app/views/spree/admin/dashboard/setup_tasks/_add_products.html.erb +22 -0
- data/app/views/spree/admin/dashboard/setup_tasks/_set_customer_support_email.html.erb +23 -0
- data/app/views/spree/admin/dashboard/setup_tasks/_setup_payment_method.html.erb +6 -0
- data/app/views/spree/admin/dashboard/setup_tasks/_setup_taxes_collection.html.erb +6 -0
- data/app/views/spree/admin/dashboard/show.html.erb +33 -0
- data/app/views/spree/admin/digital_assets/_digital_asset.html.erb +30 -0
- data/app/views/spree/admin/digital_assets/_form.html.erb +18 -0
- data/app/views/spree/admin/digital_assets/_table.html.erb +40 -0
- data/app/views/spree/admin/digital_assets/create.turbo_stream.erb +2 -0
- data/app/views/spree/admin/digital_assets/edit.html.erb +22 -0
- data/app/views/spree/admin/digital_assets/index.html.erb +27 -0
- data/app/views/spree/admin/digital_assets/new.html.erb +22 -0
- data/app/views/spree/admin/digital_assets/update.turbo_stream.erb +2 -0
- data/app/views/spree/admin/exports/_export.html.erb +42 -0
- data/app/views/spree/admin/exports/create.turbo_stream.erb +2 -0
- data/app/views/spree/admin/exports/index.html.erb +30 -0
- data/app/views/spree/admin/exports/new.html.erb +42 -0
- data/app/views/spree/admin/line_items/edit.html.erb +20 -0
- data/app/views/spree/admin/line_items/new.html.erb +32 -0
- data/app/views/spree/admin/oauth_applications/_form.html.erb +11 -0
- data/app/views/spree/admin/oauth_applications/create.turbo_stream.erb +41 -0
- data/app/views/spree/admin/oauth_applications/edit.html.erb +19 -0
- data/app/views/spree/admin/oauth_applications/index.html.erb +75 -0
- data/app/views/spree/admin/oauth_applications/new.html.erb +25 -0
- data/app/views/spree/admin/option_types/_filter.html.erb +7 -0
- data/app/views/spree/admin/option_types/_form.html.erb +87 -0
- data/app/views/spree/admin/option_types/_option_type.html.erb +19 -0
- data/app/views/spree/admin/option_types/_option_value_fields.html.erb +29 -0
- data/app/views/spree/admin/option_types/edit.html.erb +11 -0
- data/app/views/spree/admin/option_types/index.html.erb +63 -0
- data/app/views/spree/admin/option_types/new.html.erb +11 -0
- data/app/views/spree/admin/option_types/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/option_values/destroy.turbo_stream.erb +1 -0
- data/app/views/spree/admin/orders/_body_custom.html.erb +0 -0
- data/app/views/spree/admin/orders/_customer.html.erb +79 -0
- data/app/views/spree/admin/orders/_customer_returns.html.erb +26 -0
- data/app/views/spree/admin/orders/_customer_summary.html.erb +22 -0
- data/app/views/spree/admin/orders/_extra_filters.html.erb +0 -0
- data/app/views/spree/admin/orders/_filters.html.erb +106 -0
- data/app/views/spree/admin/orders/_header.html.erb +76 -0
- data/app/views/spree/admin/orders/_header_custom.html.erb +0 -0
- data/app/views/spree/admin/orders/_line_item.html.erb +61 -0
- data/app/views/spree/admin/orders/_line_items.html.erb +68 -0
- data/app/views/spree/admin/orders/_list.html.erb +30 -0
- data/app/views/spree/admin/orders/_order.html.erb +28 -0
- data/app/views/spree/admin/orders/_payments.html.erb +35 -0
- data/app/views/spree/admin/orders/_refunds.html.erb +49 -0
- data/app/views/spree/admin/orders/_return_authorizations.html.erb +26 -0
- data/app/views/spree/admin/orders/_risk_analysis.html.erb +26 -0
- data/app/views/spree/admin/orders/_shipment.html.erb +104 -0
- data/app/views/spree/admin/orders/_shipment_manifest_item.html.erb +17 -0
- data/app/views/spree/admin/orders/_shipments.html.erb +22 -0
- data/app/views/spree/admin/orders/_summary.html.erb +100 -0
- data/app/views/spree/admin/orders/_summary_custom.html.erb +0 -0
- data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +34 -0
- data/app/views/spree/admin/orders/_tax_lines.html.erb +11 -0
- data/app/views/spree/admin/orders/_user_overview.html.erb +13 -0
- data/app/views/spree/admin/orders/billing_address/_form.html.erb +14 -0
- data/app/views/spree/admin/orders/billing_address/create.turbo_stream.erb +35 -0
- data/app/views/spree/admin/orders/billing_address/edit.html.erb +42 -0
- data/app/views/spree/admin/orders/billing_address/new.html.erb +35 -0
- data/app/views/spree/admin/orders/billing_address/update.turbo_stream.erb +35 -0
- data/app/views/spree/admin/orders/contact_information/edit.html.erb +20 -0
- data/app/views/spree/admin/orders/customer_returns/_customer_return.html.erb +70 -0
- data/app/views/spree/admin/orders/customer_returns/_reimbursements_table.html.erb +40 -0
- data/app/views/spree/admin/orders/customer_returns/_return_item_decision.html.erb +54 -0
- data/app/views/spree/admin/orders/customer_returns/_return_item_selection.html.erb +72 -0
- data/app/views/spree/admin/orders/customer_returns/edit.html.erb +144 -0
- data/app/views/spree/admin/orders/customer_returns/new.html.erb +67 -0
- data/app/views/spree/admin/orders/edit.html.erb +23 -0
- data/app/views/spree/admin/orders/index.html.erb +23 -0
- data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +176 -0
- data/app/views/spree/admin/orders/return_authorizations/_return_authorization.html.erb +36 -0
- data/app/views/spree/admin/orders/return_authorizations/edit.html.erb +44 -0
- data/app/views/spree/admin/orders/return_authorizations/new.html.erb +13 -0
- data/app/views/spree/admin/orders/return_authorizations/show.html.erb +128 -0
- data/app/views/spree/admin/orders/shipping_address/_form.html.erb +13 -0
- data/app/views/spree/admin/orders/shipping_address/create.turbo_stream.erb +17 -0
- data/app/views/spree/admin/orders/shipping_address/edit.html.erb +17 -0
- data/app/views/spree/admin/orders/shipping_address/new.html.erb +17 -0
- data/app/views/spree/admin/orders/shipping_address/update.turbo_stream.erb +17 -0
- data/app/views/spree/admin/orders/user/create.turbo_stream.erb +12 -0
- data/app/views/spree/admin/orders/user/edit.html.erb +3 -0
- data/app/views/spree/admin/orders/user/new.html.erb +30 -0
- data/app/views/spree/admin/orders/user/update.turbo_stream.erb +5 -0
- data/app/views/spree/admin/page_blocks/_form_tab_buttons.html.erb +7 -0
- data/app/views/spree/admin/page_blocks/create.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_blocks/destroy.turbo_stream.erb +9 -0
- data/app/views/spree/admin/page_blocks/edit.html.erb +48 -0
- data/app/views/spree/admin/page_blocks/forms/_brand.html.erb +15 -0
- data/app/views/spree/admin/page_blocks/forms/_brand_logo.html.erb +4 -0
- data/app/views/spree/admin/page_blocks/forms/_buttons.html.erb +13 -0
- data/app/views/spree/admin/page_blocks/forms/_buy_buttons.html.erb +10 -0
- data/app/views/spree/admin/page_blocks/forms/_heading.html.erb +28 -0
- data/app/views/spree/admin/page_blocks/forms/_image.html.erb +1 -0
- data/app/views/spree/admin/page_blocks/forms/_link.html.erb +19 -0
- data/app/views/spree/admin/page_blocks/forms/_mega_nav.html.erb +14 -0
- data/app/views/spree/admin/page_blocks/forms/_mega_nav_with_subcategories.html.erb +9 -0
- data/app/views/spree/admin/page_blocks/forms/_nav.html.erb +6 -0
- data/app/views/spree/admin/page_blocks/forms/_newsletter_form.html.erb +20 -0
- data/app/views/spree/admin/page_blocks/forms/_price.html.erb +15 -0
- data/app/views/spree/admin/page_blocks/forms/_quantity_selector.html.erb +10 -0
- data/app/views/spree/admin/page_blocks/forms/_share.html.erb +5 -0
- data/app/views/spree/admin/page_blocks/forms/_subheading.html.erb +26 -0
- data/app/views/spree/admin/page_blocks/forms/_text.html.erb +21 -0
- data/app/views/spree/admin/page_blocks/forms/_title.html.erb +20 -0
- data/app/views/spree/admin/page_blocks/forms/_variant_picker.html.erb +10 -0
- data/app/views/spree/admin/page_blocks/move_higher.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_blocks/move_lower.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_blocks/show.html.erb +1 -0
- data/app/views/spree/admin/page_blocks/update.turbo_stream.erb +6 -0
- data/app/views/spree/admin/page_builder/_add_block.html.erb +20 -0
- data/app/views/spree/admin/page_builder/_color_palette.html.erb +17 -0
- data/app/views/spree/admin/page_builder/_color_picker.html.erb +26 -0
- data/app/views/spree/admin/page_builder/_header.html.erb +99 -0
- data/app/views/spree/admin/page_builder/_labeled_range_input.html.erb +10 -0
- data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +23 -0
- data/app/views/spree/admin/page_builder/_range_input.html.erb +12 -0
- data/app/views/spree/admin/page_builder/_sidebar.html.erb +14 -0
- data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +29 -0
- data/app/views/spree/admin/page_builder/_sidebar_colors.html.erb +84 -0
- data/app/views/spree/admin/page_builder/_sidebar_fonts.html.erb +85 -0
- data/app/views/spree/admin/page_builder/_sidebar_section.html.erb +46 -0
- data/app/views/spree/admin/page_builder/_sidebar_sections.html.erb +33 -0
- data/app/views/spree/admin/page_builder/_sidebar_sections_toolbar.html.erb +65 -0
- data/app/views/spree/admin/page_links/_form.html.erb +19 -0
- data/app/views/spree/admin/page_links/_linkable_type_dropdown.html.erb +15 -0
- data/app/views/spree/admin/page_links/_list.html.erb +36 -0
- data/app/views/spree/admin/page_links/_refresh_theme_preview.turbo_stream.erb +5 -0
- data/app/views/spree/admin/page_links/create.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_links/destroy.turbo_stream.erb +11 -0
- data/app/views/spree/admin/page_links/edit.html.erb +18 -0
- data/app/views/spree/admin/page_links/update.turbo_stream.erb +6 -0
- data/app/views/spree/admin/page_sections/_form_tab_buttons.html.erb +12 -0
- data/app/views/spree/admin/page_sections/create.turbo_stream.erb +11 -0
- data/app/views/spree/admin/page_sections/destroy.turbo_stream.erb +16 -0
- data/app/views/spree/admin/page_sections/edit.html.erb +42 -0
- data/app/views/spree/admin/page_sections/fields/_background_color.html.erb +6 -0
- data/app/views/spree/admin/page_sections/fields/_border_bottom_width.html.erb +5 -0
- data/app/views/spree/admin/page_sections/fields/_border_color.html.erb +7 -0
- data/app/views/spree/admin/page_sections/fields/_border_top_width.html.erb +6 -0
- data/app/views/spree/admin/page_sections/fields/_bottom_padding.html.erb +5 -0
- data/app/views/spree/admin/page_sections/fields/_button.html.erb +15 -0
- data/app/views/spree/admin/page_sections/fields/_header_layout.html.erb +26 -0
- data/app/views/spree/admin/page_sections/fields/_height.html.erb +6 -0
- data/app/views/spree/admin/page_sections/fields/_text_color.html.erb +7 -0
- data/app/views/spree/admin/page_sections/fields/_top_padding.html.erb +6 -0
- data/app/views/spree/admin/page_sections/forms/_announcement_bar.html.erb +5 -0
- data/app/views/spree/admin/page_sections/forms/_brand_story.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_collection_banner.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_custom_code.html.erb +4 -0
- data/app/views/spree/admin/page_sections/forms/_featured_posts.html.erb +38 -0
- data/app/views/spree/admin/page_sections/forms/_featured_product.html.erb +4 -0
- data/app/views/spree/admin/page_sections/forms/_featured_taxon.html.erb +59 -0
- data/app/views/spree/admin/page_sections/forms/_featured_taxons.html.erb +13 -0
- data/app/views/spree/admin/page_sections/forms/_footer.html.erb +20 -0
- data/app/views/spree/admin/page_sections/forms/_header.html.erb +14 -0
- data/app/views/spree/admin/page_sections/forms/_image_banner.html.erb +13 -0
- data/app/views/spree/admin/page_sections/forms/_image_with_text.html.erb +31 -0
- data/app/views/spree/admin/page_sections/forms/_main_password_footer.html.erb +9 -0
- data/app/views/spree/admin/page_sections/forms/_main_password_header.erb +13 -0
- data/app/views/spree/admin/page_sections/forms/_newsletter.html.erb +15 -0
- data/app/views/spree/admin/page_sections/forms/_page_title.html.erb +4 -0
- data/app/views/spree/admin/page_sections/forms/_post_details.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_post_grid.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_product_details.html.erb +1 -0
- data/app/views/spree/admin/page_sections/forms/_product_grid.html.erb +1 -0
- data/app/views/spree/admin/page_sections/forms/_related_products.html.erb +32 -0
- data/app/views/spree/admin/page_sections/forms/_rich_text.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_taxon_banner.html.erb +0 -0
- data/app/views/spree/admin/page_sections/forms/_taxon_grid.html.erb +5 -0
- data/app/views/spree/admin/page_sections/forms/_video.html.erb +15 -0
- data/app/views/spree/admin/page_sections/move_higher.turbo_stream.erb +7 -0
- data/app/views/spree/admin/page_sections/move_lower.turbo_stream.erb +7 -0
- data/app/views/spree/admin/page_sections/new.html.erb +28 -0
- data/app/views/spree/admin/page_sections/remove_attachment.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_sections/restore_design_settings_to_defaults.turbo_stream.erb +4 -0
- data/app/views/spree/admin/page_sections/show.html.erb +1 -0
- data/app/views/spree/admin/page_sections/update.turbo_stream.erb +10 -0
- data/app/views/spree/admin/pages/_filters.html.erb +7 -0
- data/app/views/spree/admin/pages/_form.html.erb +29 -0
- data/app/views/spree/admin/pages/_page.erb +8 -0
- data/app/views/spree/admin/pages/edit.html.erb +18 -0
- data/app/views/spree/admin/pages/index.html.erb +28 -0
- data/app/views/spree/admin/pages/new.html.erb +11 -0
- data/app/views/spree/admin/payment_methods/_available_payment_method.html.erb +21 -0
- data/app/views/spree/admin/payment_methods/_check.html.erb +0 -0
- data/app/views/spree/admin/payment_methods/_form.html.erb +71 -0
- data/app/views/spree/admin/payment_methods/_payment_method.html.erb +38 -0
- data/app/views/spree/admin/payment_methods/descriptions/_check.html.erb +0 -0
- data/app/views/spree/admin/payment_methods/descriptions/_gateway.html.erb +1 -0
- data/app/views/spree/admin/payment_methods/descriptions/_store_credit.html.erb +1 -0
- data/app/views/spree/admin/payment_methods/edit.html.erb +10 -0
- data/app/views/spree/admin/payment_methods/index.html.erb +38 -0
- data/app/views/spree/admin/payment_methods/new.html.erb +12 -0
- data/app/views/spree/admin/payment_methods/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/payments/_payment.html.erb +89 -0
- data/app/views/spree/admin/payments/new.html.erb +64 -0
- data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +54 -0
- data/app/views/spree/admin/payments/source_forms/_previous_cards.html.erb +21 -0
- data/app/views/spree/admin/payments/source_forms/_spree_stripe.html.erb +7 -0
- data/app/views/spree/admin/payments/source_forms/_store_credit.html.erb +22 -0
- data/app/views/spree/admin/payments/source_views/_check.html.erb +0 -0
- data/app/views/spree/admin/payments/source_views/_gateway.html.erb +22 -0
- data/app/views/spree/admin/payments/source_views/_storecredit.html.erb +31 -0
- data/app/views/spree/admin/post_categories/_form.html.erb +15 -0
- data/app/views/spree/admin/post_categories/_post_category.html.erb +6 -0
- data/app/views/spree/admin/post_categories/edit.html.erb +15 -0
- data/app/views/spree/admin/post_categories/index.html.erb +27 -0
- data/app/views/spree/admin/post_categories/new.html.erb +15 -0
- data/app/views/spree/admin/posts/_extra_actions.html.erb +0 -0
- data/app/views/spree/admin/posts/_filters.html.erb +40 -0
- data/app/views/spree/admin/posts/_form.html.erb +81 -0
- data/app/views/spree/admin/posts/_post.html.erb +32 -0
- data/app/views/spree/admin/posts/edit.html.erb +15 -0
- data/app/views/spree/admin/posts/index.html.erb +36 -0
- data/app/views/spree/admin/posts/new.html.erb +11 -0
- data/app/views/spree/admin/preferences/_password_field.html.erb +26 -0
- data/app/views/spree/admin/products/_bulk_operations.html.erb +122 -0
- data/app/views/spree/admin/products/_edit_page_title.html.erb +3 -0
- data/app/views/spree/admin/products/_empty_list.html.erb +1 -0
- data/app/views/spree/admin/products/_filters.html.erb +60 -0
- data/app/views/spree/admin/products/_form.html.erb +29 -0
- data/app/views/spree/admin/products/_import_button.html.erb +0 -0
- data/app/views/spree/admin/products/_index_header.html.erb +7 -0
- data/app/views/spree/admin/products/_list.html.erb +50 -0
- data/app/views/spree/admin/products/_product.html.erb +30 -0
- data/app/views/spree/admin/products/_product_status.html.erb +3 -0
- data/app/views/spree/admin/products/_search_result.html.erb +9 -0
- data/app/views/spree/admin/products/_search_results.html.erb +9 -0
- data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +42 -0
- data/app/views/spree/admin/products/bulk_modal.html.erb +23 -0
- data/app/views/spree/admin/products/bulk_status_update.turbo_stream.erb +7 -0
- data/app/views/spree/admin/products/edit.html.erb +38 -0
- data/app/views/spree/admin/products/form/_base.html.erb +16 -0
- data/app/views/spree/admin/products/form/_categorization.html.erb +35 -0
- data/app/views/spree/admin/products/form/_extra_filters.html.erb +0 -0
- data/app/views/spree/admin/products/form/_extra_form.html.erb +0 -0
- data/app/views/spree/admin/products/form/_extra_form_sidebar.erb +0 -0
- data/app/views/spree/admin/products/form/_inventory.html.erb +63 -0
- data/app/views/spree/admin/products/form/_properties.html.erb +46 -0
- data/app/views/spree/admin/products/form/_shipping.html.erb +16 -0
- data/app/views/spree/admin/products/form/_status.html.erb +52 -0
- data/app/views/spree/admin/products/form/_stores.html.erb +27 -0
- data/app/views/spree/admin/products/form/_variants.html.erb +171 -0
- data/app/views/spree/admin/products/form/variants/_option_template.html.erb +59 -0
- data/app/views/spree/admin/products/form/variants/_variant_template.html.erb +44 -0
- data/app/views/spree/admin/products/index.html.erb +18 -0
- data/app/views/spree/admin/products/new.html.erb +9 -0
- data/app/views/spree/admin/profile/edit.html.erb +79 -0
- data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +45 -0
- data/app/views/spree/admin/promotion_actions/edit.html.erb +17 -0
- data/app/views/spree/admin/promotion_actions/forms/_create_adjustment.html.erb +1 -0
- data/app/views/spree/admin/promotion_actions/forms/_create_item_adjustments.html.erb +1 -0
- data/app/views/spree/admin/promotion_actions/forms/_create_line_items.html.erb +35 -0
- data/app/views/spree/admin/promotion_actions/forms/_create_line_items_row.html.erb +28 -0
- data/app/views/spree/admin/promotion_actions/forms/_free_shipping.html.erb +0 -0
- data/app/views/spree/admin/promotion_actions/new.html.erb +48 -0
- data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +53 -0
- data/app/views/spree/admin/promotion_rules/edit.html.erb +17 -0
- data/app/views/spree/admin/promotion_rules/forms/_country.html.erb +7 -0
- data/app/views/spree/admin/promotion_rules/forms/_currency.html.erb +10 -0
- data/app/views/spree/admin/promotion_rules/forms/_first_order.html.erb +0 -0
- data/app/views/spree/admin/promotion_rules/forms/_item_total.html.erb +26 -0
- data/app/views/spree/admin/promotion_rules/forms/_one_use_per_user.html.erb +0 -0
- data/app/views/spree/admin/promotion_rules/forms/_option_value.html.erb +9 -0
- data/app/views/spree/admin/promotion_rules/forms/_product.html.erb +9 -0
- data/app/views/spree/admin/promotion_rules/forms/_taxon.html.erb +9 -0
- data/app/views/spree/admin/promotion_rules/forms/_user.html.erb +7 -0
- data/app/views/spree/admin/promotion_rules/forms/_user_logged_in.html.erb +0 -0
- data/app/views/spree/admin/promotion_rules/new.html.erb +48 -0
- data/app/views/spree/admin/promotions/_actions.html.erb +30 -0
- data/app/views/spree/admin/promotions/_form.html.erb +47 -0
- data/app/views/spree/admin/promotions/_header.html.erb +16 -0
- data/app/views/spree/admin/promotions/_promotion.html.erb +34 -0
- data/app/views/spree/admin/promotions/_rules.html.erb +44 -0
- data/app/views/spree/admin/promotions/_sidebar.html.erb +117 -0
- data/app/views/spree/admin/promotions/_status.html.erb +16 -0
- data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +17 -0
- data/app/views/spree/admin/promotions/_usage_limit.html.erb +13 -0
- data/app/views/spree/admin/promotions/edit.html.erb +59 -0
- data/app/views/spree/admin/promotions/form/_kind.html.erb +57 -0
- data/app/views/spree/admin/promotions/form/_settings.html.erb +24 -0
- data/app/views/spree/admin/promotions/index.html.erb +62 -0
- data/app/views/spree/admin/promotions/new.html.erb +11 -0
- data/app/views/spree/admin/promotions/show.html.erb +12 -0
- data/app/views/spree/admin/properties/_form.html.erb +22 -0
- data/app/views/spree/admin/properties/_property.html.erb +25 -0
- data/app/views/spree/admin/properties/edit.html.erb +15 -0
- data/app/views/spree/admin/properties/index.html.erb +53 -0
- data/app/views/spree/admin/properties/new.html.erb +14 -0
- data/app/views/spree/admin/properties/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/refund_reasons/edit.html.erb +3 -0
- data/app/views/spree/admin/refund_reasons/index.html.erb +40 -0
- data/app/views/spree/admin/refund_reasons/new.html.erb +4 -0
- data/app/views/spree/admin/refunds/_form.html.erb +17 -0
- data/app/views/spree/admin/refunds/edit.html.erb +20 -0
- data/app/views/spree/admin/refunds/new.html.erb +29 -0
- data/app/views/spree/admin/reimbursement_types/_form.html.erb +30 -0
- data/app/views/spree/admin/reimbursement_types/edit.html.erb +15 -0
- data/app/views/spree/admin/reimbursement_types/index.html.erb +44 -0
- data/app/views/spree/admin/reimbursement_types/new.html.erb +16 -0
- data/app/views/spree/admin/reimbursements/edit.html.erb +130 -0
- data/app/views/spree/admin/reimbursements/show.html.erb +113 -0
- data/app/views/spree/admin/reports/_report.html.erb +22 -0
- data/app/views/spree/admin/reports/create.turbo_stream.erb +1 -0
- data/app/views/spree/admin/reports/index.html.erb +28 -0
- data/app/views/spree/admin/reports/new.html.erb +39 -0
- data/app/views/spree/admin/return_authorization_reasons/edit.html.erb +3 -0
- data/app/views/spree/admin/return_authorization_reasons/index.html.erb +45 -0
- data/app/views/spree/admin/return_authorization_reasons/new.html.erb +4 -0
- data/app/views/spree/admin/return_authorizations/_filters.html.erb +39 -0
- data/app/views/spree/admin/return_authorizations/_list.html.erb +30 -0
- data/app/views/spree/admin/return_authorizations/_return_authorization.html.erb +40 -0
- data/app/views/spree/admin/return_authorizations/index.html.erb +14 -0
- data/app/views/spree/admin/roles/_form.html.erb +6 -0
- data/app/views/spree/admin/roles/edit.html.erb +13 -0
- data/app/views/spree/admin/roles/index.html.erb +32 -0
- data/app/views/spree/admin/roles/new.html.erb +15 -0
- data/app/views/spree/admin/shared/_address.html.erb +42 -0
- data/app/views/spree/admin/shared/_alerts.html.erb +22 -0
- data/app/views/spree/admin/shared/_analytics_loader_skeleton.html.erb +76 -0
- data/app/views/spree/admin/shared/_audit_nav.html.erb +3 -0
- data/app/views/spree/admin/shared/_bulk_modal.html.erb +21 -0
- data/app/views/spree/admin/shared/_calculator_fields.html.erb +34 -0
- data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +28 -0
- data/app/views/spree/admin/shared/_close_bulk_modal.turbo_stream.erb +2 -0
- data/app/views/spree/admin/shared/_content_header.html.erb +81 -0
- data/app/views/spree/admin/shared/_custom_head.html.erb +0 -0
- data/app/views/spree/admin/shared/_developers_nav.html.erb +7 -0
- data/app/views/spree/admin/shared/_edit_resource_links.html.erb +6 -0
- data/app/views/spree/admin/shared/_error_messages.html.erb +22 -0
- data/app/views/spree/admin/shared/_filter_badge_template.erb +3 -0
- data/app/views/spree/admin/shared/_filters_button.html.erb +8 -0
- data/app/views/spree/admin/shared/_filters_search_bar.html.erb +15 -0
- data/app/views/spree/admin/shared/_footer.html.erb +2 -0
- data/app/views/spree/admin/shared/_growth_rate_badge.html.erb +17 -0
- data/app/views/spree/admin/shared/_head.html.erb +52 -0
- data/app/views/spree/admin/shared/_header.html.erb +28 -0
- data/app/views/spree/admin/shared/_index_table_options.html.erb +22 -0
- data/app/views/spree/admin/shared/_map.html.erb +9 -0
- data/app/views/spree/admin/shared/_modal.html.erb +37 -0
- data/app/views/spree/admin/shared/_multi_product_picker.html.erb +26 -0
- data/app/views/spree/admin/shared/_new_resource_links.html.erb +3 -0
- data/app/views/spree/admin/shared/_no_image.html.erb +6 -0
- data/app/views/spree/admin/shared/_no_resource_found.html.erb +6 -0
- data/app/views/spree/admin/shared/_offcanvas_nav.html.erb +25 -0
- data/app/views/spree/admin/shared/_page_section_image.html.erb +1 -0
- data/app/views/spree/admin/shared/_page_section_logo.html.erb +1 -0
- data/app/views/spree/admin/shared/_posts_tabs.html.erb +8 -0
- data/app/views/spree/admin/shared/_preferences.html.erb +9 -0
- data/app/views/spree/admin/shared/_product_image.html.erb +21 -0
- data/app/views/spree/admin/shared/_refunds.html.erb +30 -0
- data/app/views/spree/admin/shared/_returns_and_refunds_nav.html.erb +9 -0
- data/app/views/spree/admin/shared/_seo.html.erb +39 -0
- data/app/views/spree/admin/shared/_shipping_nav.html.erb +4 -0
- data/app/views/spree/admin/shared/_sidebar.html.erb +15 -0
- data/app/views/spree/admin/shared/_spinner.html.erb +7 -0
- data/app/views/spree/admin/shared/_stock_nav.html.erb +4 -0
- data/app/views/spree/admin/shared/_tax_nav.html.erb +4 -0
- data/app/views/spree/admin/shared/_user.html.erb +24 -0
- data/app/views/spree/admin/shared/_user_dropdown.html.erb +41 -0
- data/app/views/spree/admin/shared/named_types/_edit.html.erb +15 -0
- data/app/views/spree/admin/shared/named_types/_form.html.erb +15 -0
- data/app/views/spree/admin/shared/named_types/_new.html.erb +15 -0
- data/app/views/spree/admin/shared/sidebar/_custom_nav.html.erb +0 -0
- data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +10 -0
- data/app/views/spree/admin/shared/sidebar/_integrations_nav.html.erb +7 -0
- data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +35 -0
- data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +41 -0
- data/app/views/spree/admin/shared/sidebar/_returns_nav.html.erb +20 -0
- data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +67 -0
- data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +176 -0
- data/app/views/spree/admin/shared/sidebar/_storefront_nav.html.erb +29 -0
- data/app/views/spree/admin/shared/sidebar/_vendors_nav.html.erb +8 -0
- data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +66 -0
- data/app/views/spree/admin/shipments/edit.html.erb +28 -0
- data/app/views/spree/admin/shipments/split.html.erb +16 -0
- data/app/views/spree/admin/shipping_categories/_form.html.erb +9 -0
- data/app/views/spree/admin/shipping_categories/edit.html.erb +11 -0
- data/app/views/spree/admin/shipping_categories/index.html.erb +36 -0
- data/app/views/spree/admin/shipping_categories/new.html.erb +13 -0
- data/app/views/spree/admin/shipping_methods/_actions.html.erb +5 -0
- data/app/views/spree/admin/shipping_methods/_form.html.erb +141 -0
- data/app/views/spree/admin/shipping_methods/_shipping_method.html.erb +33 -0
- data/app/views/spree/admin/shipping_methods/edit.html.erb +12 -0
- data/app/views/spree/admin/shipping_methods/index.html.erb +34 -0
- data/app/views/spree/admin/shipping_methods/new.html.erb +13 -0
- data/app/views/spree/admin/shipping_methods/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/stock_items/_filters.html.erb +39 -0
- data/app/views/spree/admin/stock_items/_stock_item.html.erb +43 -0
- data/app/views/spree/admin/stock_items/index.html.erb +38 -0
- data/app/views/spree/admin/stock_items/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/stock_locations/_form.html.erb +56 -0
- data/app/views/spree/admin/stock_locations/_stock_location.html.erb +30 -0
- data/app/views/spree/admin/stock_locations/edit.html.erb +9 -0
- data/app/views/spree/admin/stock_locations/index.html.erb +26 -0
- data/app/views/spree/admin/stock_locations/new.html.erb +11 -0
- data/app/views/spree/admin/stock_transfers/_destination_movement_form.html.erb +36 -0
- data/app/views/spree/admin/stock_transfers/_filters.html.erb +46 -0
- data/app/views/spree/admin/stock_transfers/_new_variant_modal.html.erb +30 -0
- data/app/views/spree/admin/stock_transfers/_new_variant_template.html.erb +8 -0
- data/app/views/spree/admin/stock_transfers/_source_movement_form.html.erb +8 -0
- data/app/views/spree/admin/stock_transfers/_stock_movement.html.erb +5 -0
- data/app/views/spree/admin/stock_transfers/_stock_transfer.html.erb +11 -0
- data/app/views/spree/admin/stock_transfers/index.html.erb +38 -0
- data/app/views/spree/admin/stock_transfers/new.html.erb +85 -0
- data/app/views/spree/admin/stock_transfers/show.html.erb +58 -0
- data/app/views/spree/admin/store_credit_categories/_form.html.erb +5 -0
- data/app/views/spree/admin/store_credit_categories/edit.html.erb +13 -0
- data/app/views/spree/admin/store_credit_categories/index.html.erb +32 -0
- data/app/views/spree/admin/store_credit_categories/new.html.erb +15 -0
- data/app/views/spree/admin/store_credits/_form.html.erb +24 -0
- data/app/views/spree/admin/store_credits/_list.html.erb +41 -0
- data/app/views/spree/admin/store_credits/edit.html.erb +36 -0
- data/app/views/spree/admin/store_credits/index.html.erb +20 -0
- data/app/views/spree/admin/store_credits/new.html.erb +26 -0
- data/app/views/spree/admin/storefront/edit.html.erb +146 -0
- data/app/views/spree/admin/stores/create.turbo_stream.erb +5 -0
- data/app/views/spree/admin/stores/edit.html.erb +13 -0
- data/app/views/spree/admin/stores/edit_emails.html.erb +11 -0
- data/app/views/spree/admin/stores/form/_basic.html.erb +160 -0
- data/app/views/spree/admin/stores/form/_buttons.html.erb +3 -0
- data/app/views/spree/admin/stores/form/_checkout.html.erb +50 -0
- data/app/views/spree/admin/stores/form/_custom.html.erb +0 -0
- data/app/views/spree/admin/stores/form/_emails.html.erb +59 -0
- data/app/views/spree/admin/stores/form/_policies.html.erb +85 -0
- data/app/views/spree/admin/stores/new.html.erb +135 -0
- data/app/views/spree/admin/stores/new.turbo_stream.erb +1 -0
- data/app/views/spree/admin/stores/update.turbo_stream.erb +11 -0
- data/app/views/spree/admin/tax_categories/_form.html.erb +25 -0
- data/app/views/spree/admin/tax_categories/_tax_category.html.erb +13 -0
- data/app/views/spree/admin/tax_categories/edit.html.erb +11 -0
- data/app/views/spree/admin/tax_categories/index.html.erb +30 -0
- data/app/views/spree/admin/tax_categories/new.html.erb +11 -0
- data/app/views/spree/admin/tax_rates/_form.html.erb +48 -0
- data/app/views/spree/admin/tax_rates/_tax_rate.html.erb +15 -0
- data/app/views/spree/admin/tax_rates/edit.html.erb +11 -0
- data/app/views/spree/admin/tax_rates/index.html.erb +32 -0
- data/app/views/spree/admin/tax_rates/new.html.erb +14 -0
- data/app/views/spree/admin/taxonomies/_taxonomy.html.erb +16 -0
- data/app/views/spree/admin/taxonomies/edit.html.erb +28 -0
- data/app/views/spree/admin/taxonomies/index.html.erb +40 -0
- data/app/views/spree/admin/taxonomies/new.html.erb +23 -0
- data/app/views/spree/admin/taxonomies/show.html.erb +28 -0
- data/app/views/spree/admin/taxons/_form.html.erb +148 -0
- data/app/views/spree/admin/taxons/_rule_form.html.erb +24 -0
- data/app/views/spree/admin/taxons/_rules_form.html.erb +34 -0
- data/app/views/spree/admin/taxons/destroy.turbo_stream.erb +1 -0
- data/app/views/spree/admin/taxons/edit.html.erb +19 -0
- data/app/views/spree/admin/taxons/new.html.erb +12 -0
- data/app/views/spree/admin/taxons/rule_forms/_available_on.html.erb +4 -0
- data/app/views/spree/admin/taxons/rule_forms/_sale.html.erb +4 -0
- data/app/views/spree/admin/taxons/rule_forms/_tag.html.erb +1 -0
- data/app/views/spree/admin/themes/_theme.html.erb +53 -0
- data/app/views/spree/admin/themes/_theme_preview_image.html.erb +24 -0
- data/app/views/spree/admin/themes/edit.html.erb +14 -0
- data/app/views/spree/admin/themes/index.html.erb +79 -0
- data/app/views/spree/admin/themes/update.turbo_stream.erb +1 -0
- data/app/views/spree/admin/translations/_translations_unavailable.html.erb +10 -0
- data/app/views/spree/admin/translations/edit.html.erb +47 -0
- data/app/views/spree/admin/translations/products/_form.html.erb +23 -0
- data/app/views/spree/admin/translations/stores/_form.html.erb +23 -0
- data/app/views/spree/admin/translations/taxonomies/_form.html.erb +20 -0
- data/app/views/spree/admin/translations/taxons/_form.html.erb +37 -0
- data/app/views/spree/admin/users/_billing.html.erb +78 -0
- data/app/views/spree/admin/users/_details.html.erb +52 -0
- data/app/views/spree/admin/users/_extra_actions.html.erb +0 -0
- data/app/views/spree/admin/users/_filters.html.erb +85 -0
- data/app/views/spree/admin/users/_form.html.erb +36 -0
- data/app/views/spree/admin/users/_last_order.html.erb +33 -0
- data/app/views/spree/admin/users/_last_order_line_item.html.erb +19 -0
- data/app/views/spree/admin/users/_lifetime_stats.html.erb +65 -0
- data/app/views/spree/admin/users/_shipping.html.erb +33 -0
- data/app/views/spree/admin/users/_tabs.html.erb +74 -0
- data/app/views/spree/admin/users/_user.html.erb +20 -0
- data/app/views/spree/admin/users/bulk_modal.html.erb +21 -0
- data/app/views/spree/admin/users/edit.html.erb +17 -0
- data/app/views/spree/admin/users/index.csv.erb +43 -0
- data/app/views/spree/admin/users/index.html.erb +102 -0
- data/app/views/spree/admin/users/new.html.erb +14 -0
- data/app/views/spree/admin/users/show.html.erb +38 -0
- data/app/views/spree/admin/variants/_search_result.html.erb +28 -0
- data/app/views/spree/admin/variants/_search_results.html.erb +9 -0
- data/app/views/spree/admin/variants/_variant.html.erb +13 -0
- data/app/views/spree/admin/variants/edit.html.erb +20 -0
- data/app/views/spree/admin/variants/form/_basic.html.erb +31 -0
- data/app/views/spree/admin/variants/form/_dimensions.html.erb +33 -0
- data/app/views/spree/admin/variants/form/_inventory.html.erb +45 -0
- data/app/views/spree/admin/variants/form/_media.html.erb +32 -0
- data/app/views/spree/admin/variants/form/_media_asset.html.erb +21 -0
- data/app/views/spree/admin/variants/form/_pricing.html.erb +48 -0
- data/app/views/spree/admin/webhook_events/_webhook_event.html.erb +17 -0
- data/app/views/spree/admin/webhooks_subscribers/_form.html.erb +66 -0
- data/app/views/spree/admin/webhooks_subscribers/_webhooks_subscriber.html.erb +16 -0
- data/app/views/spree/admin/webhooks_subscribers/edit.html.erb +9 -0
- data/app/views/spree/admin/webhooks_subscribers/index.html.erb +26 -0
- data/app/views/spree/admin/webhooks_subscribers/new.html.erb +11 -0
- data/app/views/spree/admin/webhooks_subscribers/show.html.erb +54 -0
- data/app/views/spree/admin/zones/_country_members.html.erb +16 -0
- data/app/views/spree/admin/zones/_form.html.erb +52 -0
- data/app/views/spree/admin/zones/_state_members.html.erb +21 -0
- data/app/views/spree/admin/zones/edit.html.erb +12 -0
- data/app/views/spree/admin/zones/index.html.erb +45 -0
- data/app/views/spree/admin/zones/new.html.erb +11 -0
- data/config/i18n-tasks.yml +190 -0
- data/config/importmap.rb +149 -0
- data/config/initializers/action_text.rb +8 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/chartkick.rb +5 -0
- data/config/initializers/dartsass.rb +3 -0
- data/config/initializers/form_builder.rb +10 -0
- data/config/initializers/ransack.rb +19 -0
- data/config/locales/en.yml +304 -0
- data/config/routes.rb +240 -0
- data/lib/generators/spree/admin/install/install_generator.rb +42 -0
- data/lib/generators/spree/admin/install/templates/dev +16 -0
- data/lib/spree/admin/action_callbacks.rb +27 -0
- data/lib/spree/admin/callbacks.rb +51 -0
- data/lib/spree/admin/engine.rb +51 -0
- data/lib/spree/admin/runtime_configuration.rb +12 -0
- data/lib/spree/admin/testing_support/capybara_utils.rb +45 -0
- data/lib/spree/admin.rb +23 -0
- data/lib/spree_admin.rb +18 -0
- data/vendor/javascript/@easepick--base-plugin.js +4 -0
- data/vendor/javascript/@easepick--core.js +4 -0
- data/vendor/javascript/@easepick--datetime.js +4 -0
- data/vendor/javascript/@easepick--preset-plugin.js +4 -0
- data/vendor/javascript/@easepick--range-plugin.js +4 -0
- data/vendor/javascript/@orchidjs--sifter.js +17 -0
- data/vendor/javascript/@orchidjs--unicode-variants.js +11 -0
- data/vendor/javascript/@rails--actiontext@7.2.201.js +4 -0
- data/vendor/javascript/@simonwep--pickr.js +4 -0
- data/vendor/javascript/@stimulus-components--rails-nested-form.js +4 -0
- data/vendor/javascript/bootstrap--dist--js--bootstrap.bundle.min.js.js +8 -0
- data/vendor/javascript/dompurify.js +139 -0
- data/vendor/javascript/hotkeys-js.js +4 -0
- data/vendor/javascript/jquery.min.js +2 -0
- data/vendor/javascript/local-time.js +4 -0
- data/vendor/javascript/sortablejs.js +136 -0
- data/vendor/javascript/stimulus-checkbox-select-all.js +4 -0
- data/vendor/javascript/stimulus-clipboard.js +4 -0
- data/vendor/javascript/stimulus-notification.js +4 -0
- data/vendor/javascript/stimulus-password-visibility.js +4 -0
- data/vendor/javascript/stimulus-reveal-controller.js +4 -0
- data/vendor/javascript/stimulus-sortable.js +4 -0
- data/vendor/javascript/stimulus-textarea-autogrow.js +4 -0
- data/vendor/javascript/stimulus-use.js +4 -0
- data/vendor/javascript/tom-select--dist--esm--tom-select.complete.js.js +32 -0
- data/vendor/javascript/trix@2.1.12.js +5 -0
- metadata +1084 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
import { Controller } from '@hotwired/stimulus'
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = ['eventsCheckboxesContainer', 'subscribeToAll']
|
5
|
+
|
6
|
+
hideCheckboxes() {
|
7
|
+
this.eventsCheckboxesContainerTarget.classList.add('d-none')
|
8
|
+
}
|
9
|
+
|
10
|
+
showCheckboxes() {
|
11
|
+
this.eventsCheckboxesContainerTarget.classList.remove('d-none')
|
12
|
+
}
|
13
|
+
|
14
|
+
initialize() {
|
15
|
+
if (this.subscribeToAllTarget.checked) {
|
16
|
+
this.hideCheckboxes()
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import 'jquery'
|
2
|
+
import 'bootstrap'
|
3
|
+
import { lockScroll, unlockScroll } from 'spree/core/helpers/scroll_lock'
|
4
|
+
|
5
|
+
|
6
|
+
const initTooltips = () => {
|
7
|
+
$('.with-tip').each(function() {
|
8
|
+
$(this).tooltip()
|
9
|
+
})
|
10
|
+
|
11
|
+
$('.with-tip').on('show.bs.tooltip', function(event) {
|
12
|
+
if (('ontouchstart' in window)) {
|
13
|
+
event.preventDefault()
|
14
|
+
}
|
15
|
+
})
|
16
|
+
}
|
17
|
+
|
18
|
+
const removeTooltips = () => {
|
19
|
+
$('.with-tip').each(function() {
|
20
|
+
$(this).tooltip('dispose')
|
21
|
+
})
|
22
|
+
}
|
23
|
+
|
24
|
+
const resetDialogModal = () => {
|
25
|
+
const modalElement = document.getElementById('dialog_modal')
|
26
|
+
const modalTitle = modalElement ? modalElement.querySelector('.modal-title') : null
|
27
|
+
const modalBody = modalElement ? modalElement.querySelector('.modal-body') : null
|
28
|
+
if (modalBody) {
|
29
|
+
modalBody.innerHTML = '<div class="spinner-border text-light mx-auto my-5" role="status"><span class="sr-only">Loading...</span></div>'
|
30
|
+
}
|
31
|
+
if (modalTitle) {
|
32
|
+
modalTitle.innerHTML = 'Loading...'
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
const fixModalAutofocus = () => {
|
37
|
+
$('.modal').on('shown.bs.modal', function (e) {
|
38
|
+
$('[autofocus]', e.target).focus();
|
39
|
+
});
|
40
|
+
}
|
41
|
+
|
42
|
+
$('.modal').on('show.bs.modal', lockScroll)
|
43
|
+
$('.modal').on('hide.bs.modal', unlockScroll)
|
44
|
+
$('.modal').on('hidden.bs.modal ', resetDialogModal)
|
45
|
+
|
46
|
+
document.addEventListener("turbo:click", removeTooltips)
|
47
|
+
document.addEventListener("turbo:load", initTooltips)
|
48
|
+
document.addEventListener('turbo:frame-render', initTooltips)
|
49
|
+
document.addEventListener('turbo:frame-render', fixModalAutofocus)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// ugly JS copied from a tutorial :)
|
2
|
+
const initOffcanvas = () => {
|
3
|
+
document.querySelectorAll('.pull-bs-canvas-right, .pull-bs-canvas-left').forEach((element) => {
|
4
|
+
element.addEventListener('click', () => {
|
5
|
+
document.body.insertAdjacentHTML('afterbegin', '<div class="bs-canvas-overlay bg-dark position-fixed w-100 h-100"></div>');
|
6
|
+
if(element.classList.contains('pull-bs-canvas-right'))
|
7
|
+
document.querySelector('.bs-canvas-right').classList.add('mr-0');
|
8
|
+
else
|
9
|
+
document.querySelector('.bs-canvas-left').classList.add('ml-0');
|
10
|
+
})
|
11
|
+
})
|
12
|
+
|
13
|
+
document.querySelectorAll('.bs-canvas-close, .bs-canvas-overlay').forEach((element) => {
|
14
|
+
element.addEventListener('click', () => {
|
15
|
+
let elm = element.classList.contains('bs-canvas-close') ? element.closest('.bs-canvas') : document.querySelector('.bs-canvas');
|
16
|
+
elm.classList.remove('mr-0', 'ml-0');
|
17
|
+
document.querySelector('.bs-canvas-overlay').remove();
|
18
|
+
})
|
19
|
+
})
|
20
|
+
}
|
21
|
+
|
22
|
+
const hideOffcanvas = () => {
|
23
|
+
document.querySelector('.bs-canvas')?.classList?.remove('mr-0', 'ml-0');
|
24
|
+
document.querySelector('.bs-canvas-overlay')?.remove();
|
25
|
+
}
|
26
|
+
|
27
|
+
document.addEventListener("turbo:load", initOffcanvas)
|
28
|
+
document.addEventListener("turbo:click", hideOffcanvas)
|
29
|
+
|
File without changes
|
@@ -0,0 +1,65 @@
|
|
1
|
+
document.addEventListener('turbo:before-render', initializeTinmce)
|
2
|
+
document.addEventListener('turbo:load', initializeTinmce)
|
3
|
+
document.addEventListener('turbo:frame-render', initializeTinmce)
|
4
|
+
|
5
|
+
function initializeTinmce() {
|
6
|
+
tinymce.remove()
|
7
|
+
|
8
|
+
tinymce.init({
|
9
|
+
content_style: 'body { font-family: Inter, sans-serif; font-size: 14px; }',
|
10
|
+
selector: '.spree-rte',
|
11
|
+
height: 300,
|
12
|
+
extended_valid_elements: 'span',
|
13
|
+
indent: false,
|
14
|
+
plugins: ['image', 'table', 'code', 'link', 'lists'],
|
15
|
+
menubar: false,
|
16
|
+
inline_boundaries: false,
|
17
|
+
toolbar: 'undo redo | formatselect | bold italic link forecolor backcolor | bullist numlist outdent indent | alignleft aligncenter alignright alignjustify | table | code',
|
18
|
+
// Default styles without heading 1
|
19
|
+
style_formats: [
|
20
|
+
{
|
21
|
+
title: 'Headings',
|
22
|
+
items: [
|
23
|
+
{ title: 'Heading 2', format: 'h2' },
|
24
|
+
{ title: 'Heading 3', format: 'h3' },
|
25
|
+
{ title: 'Heading 4', format: 'h4' },
|
26
|
+
{ title: 'Heading 5', format: 'h5' },
|
27
|
+
{ title: 'Heading 6', format: 'h6' }
|
28
|
+
]
|
29
|
+
},
|
30
|
+
{
|
31
|
+
title: 'Inline',
|
32
|
+
items: [
|
33
|
+
{ title: 'Bold', format: 'bold' },
|
34
|
+
{ title: 'Italic', format: 'italic' },
|
35
|
+
{ title: 'Underline', format: 'underline' },
|
36
|
+
{ title: 'Strikethrough', format: 'strikethrough' },
|
37
|
+
{ title: 'Superscript', format: 'superscript' },
|
38
|
+
{ title: 'Subscript', format: 'subscript' },
|
39
|
+
{ title: 'Code', format: 'code' }
|
40
|
+
]
|
41
|
+
},
|
42
|
+
{
|
43
|
+
title: 'Blocks',
|
44
|
+
items: [
|
45
|
+
{ title: 'Paragraph', format: 'p' },
|
46
|
+
{ title: 'Blockquote', format: 'blockquote' },
|
47
|
+
{ title: 'Div', format: 'div' },
|
48
|
+
{ title: 'Pre', format: 'pre' }
|
49
|
+
]
|
50
|
+
},
|
51
|
+
{
|
52
|
+
title: 'Align',
|
53
|
+
items: [
|
54
|
+
{ title: 'Left', format: 'alignleft' },
|
55
|
+
{ title: 'Center', format: 'aligncenter' },
|
56
|
+
{ title: 'Right', format: 'alignright' },
|
57
|
+
{ title: 'Justify', format: 'alignjustify' }
|
58
|
+
]
|
59
|
+
}
|
60
|
+
],
|
61
|
+
setup: function (ed) {
|
62
|
+
if (document.getElementById(ed.id).hasAttribute('readonly')) ed.mode.set('readonly')
|
63
|
+
}
|
64
|
+
})
|
65
|
+
}
|
@@ -0,0 +1,182 @@
|
|
1
|
+
import { post, destroy } from '@rails/request.js'
|
2
|
+
|
3
|
+
const lang = Trix.config.lang
|
4
|
+
lang['embed'] = 'Embed'
|
5
|
+
lang['embedVideo'] = 'Embed a video'
|
6
|
+
|
7
|
+
Trix.config.toolbar.getDefaultHTML = function() {
|
8
|
+
return `<div class="trix-button-row">
|
9
|
+
<span class="trix-button-group trix-button-group--text-tools" data-trix-button-group="text-tools">
|
10
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-bold" data-trix-attribute="bold" data-trix-key="b" title="${lang.bold}" tabindex="-1">${lang.bold}</button>
|
11
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-italic" data-trix-attribute="italic" data-trix-key="i" title="${lang.italic}" tabindex="-1">${lang.italic}</button>
|
12
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-strike" data-trix-attribute="strike" title="${lang.strike}" tabindex="-1">${lang.strike}</button>
|
13
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-link" data-trix-attribute="href" data-trix-action="link" data-trix-key="k" title="${lang.link}" tabindex="-1">${lang.link}</button>
|
14
|
+
</span>
|
15
|
+
|
16
|
+
<span class="trix-button-group trix-button-group--block-tools" data-trix-button-group="block-tools">
|
17
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-heading-1" data-trix-attribute="heading1" title="${lang.heading1}" tabindex="-1">${lang.heading1}</button>
|
18
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-quote" data-trix-attribute="quote" title="${lang.quote}" tabindex="-1">${lang.quote}</button>
|
19
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-code" data-trix-attribute="code" title="${lang.code}" tabindex="-1">${lang.code}</button>
|
20
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-bullet-list" data-trix-attribute="bullet" title="${lang.bullets}" tabindex="-1">${lang.bullets}</button>
|
21
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-number-list" data-trix-attribute="number" title="${lang.numbers}" tabindex="-1">${lang.numbers}</button>
|
22
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-decrease-nesting-level" data-trix-action="decreaseNestingLevel" title="${lang.outdent}" tabindex="-1">${lang.outdent}</button>
|
23
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-increase-nesting-level" data-trix-action="increaseNestingLevel" title="${lang.indent}" tabindex="-1">${lang.indent}</button>
|
24
|
+
</span>
|
25
|
+
|
26
|
+
<span class="trix-button-group trix-button-group--file-tools" data-trix-button-group="file-tools">
|
27
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-attach" data-trix-action="attachFiles" title="${lang.attachFiles}" tabindex="-1">${lang.attachFiles}</button>
|
28
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-embed" data-trix-action="x-video-embed" title="${lang.embedVideo}" tabindex="-1">${lang.embedVideo}</button>
|
29
|
+
</span>
|
30
|
+
|
31
|
+
<span class="trix-button-group-spacer"></span>
|
32
|
+
|
33
|
+
<span class="trix-button-group trix-button-group--history-tools" data-trix-button-group="history-tools">
|
34
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-undo" data-trix-action="undo" data-trix-key="z" title="${lang.undo}" tabindex="-1">${lang.undo}</button>
|
35
|
+
<button type="button" class="trix-button trix-button--icon trix-button--icon-redo" data-trix-action="redo" data-trix-key="shift+z" title="${lang.redo}" tabindex="-1">${lang.redo}</button>
|
36
|
+
</span>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="trix-dialogs" data-trix-dialogs>
|
40
|
+
<div class="trix-dialog trix-dialog--link" data-trix-dialog="href" data-trix-dialog-attribute="href">
|
41
|
+
<div class="trix-dialog__link-fields">
|
42
|
+
<input type="url" name="href" class="trix-input trix-input--dialog" placeholder="${lang.urlPlaceholder}" aria-label="${lang.url}" data-trix-input>
|
43
|
+
<div class="trix-button-group">
|
44
|
+
<input type="button" class="trix-button trix-button--dialog" value="${lang.link}" data-trix-method="setAttribute">
|
45
|
+
<input type="button" class="trix-button trix-button--dialog" value="${lang.unlink}" data-trix-method="removeAttribute">
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<div class="trix-dialog trix-dialog--x-video-embed" data-trix-dialog="href" data-trix-dialog-attribute="href">
|
51
|
+
<div class="trix-dialog__link-fields">
|
52
|
+
<input type="url" name="href" class="trix-input trix-input--dialog" placeholder="${lang.urlPlaceholder}" aria-label="${lang.url}" data-trix-input>
|
53
|
+
<div class="trix-button-group">
|
54
|
+
<input type="button" class="trix-button trix-button--dialog" value="${lang.embed}">
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
|
58
|
+
<div class="trix-dialog--error-container mt-2 d-none">
|
59
|
+
<small class="trix-dialog--error-message text-danger"></small>
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
</div>`
|
63
|
+
}
|
64
|
+
|
65
|
+
// Show a dialog for embedding a video after clicking the video embed button
|
66
|
+
document.addEventListener("trix-action-invoke", function(event) {
|
67
|
+
const { invokingElement, actionName } = event
|
68
|
+
|
69
|
+
if (actionName == "x-video-embed") {
|
70
|
+
const dialog = invokingElement.closest("trix-toolbar").querySelector(".trix-dialog--x-video-embed")
|
71
|
+
const input = dialog.querySelector('.trix-input--dialog')
|
72
|
+
|
73
|
+
if (!invokingElement.classList.contains("trix-active")) {
|
74
|
+
activateTrixElement(invokingElement)
|
75
|
+
activateTrixElement(dialog)
|
76
|
+
|
77
|
+
input.disabled = false
|
78
|
+
input.focus()
|
79
|
+
} else {
|
80
|
+
input.disabled = true
|
81
|
+
|
82
|
+
deactivateTrixElement(dialog)
|
83
|
+
deactivateTrixElement(invokingElement)
|
84
|
+
}
|
85
|
+
}
|
86
|
+
})
|
87
|
+
|
88
|
+
// Clean up the video embed attachment after removing it from the rich text content
|
89
|
+
document.addEventListener("trix-attachment-remove", async function(event) {
|
90
|
+
const { attachment } = event
|
91
|
+
const { sgid } = attachment.attachment.attributes.values
|
92
|
+
|
93
|
+
destroy(`/admin/action_text/video_embeds/${sgid}`, { responseKind: 'json' })
|
94
|
+
})
|
95
|
+
|
96
|
+
function initializeTrixEditor(editor) {
|
97
|
+
// Deactivate video embed button after clicking on the editor window
|
98
|
+
editor.addEventListener("click", function(_event) {
|
99
|
+
const toolbar = editor.previousElementSibling
|
100
|
+
|
101
|
+
if (toolbar.tagName == "TRIX-TOOLBAR") {
|
102
|
+
const videoEmbedButton = toolbar.querySelector('[data-trix-action="x-video-embed"]')
|
103
|
+
|
104
|
+
if (videoEmbedButton && videoEmbedButton.classList.contains("trix-active")) {
|
105
|
+
deactivateTrixElement(videoEmbedButton)
|
106
|
+
}
|
107
|
+
}
|
108
|
+
})
|
109
|
+
|
110
|
+
// Attach a video embed
|
111
|
+
const toolbar = editor.previousElementSibling
|
112
|
+
|
113
|
+
if (toolbar.tagName == "TRIX-TOOLBAR") {
|
114
|
+
const dialog = toolbar.querySelector(".trix-dialog--x-video-embed")
|
115
|
+
const embedButton = dialog.querySelector(".trix-button--dialog")
|
116
|
+
|
117
|
+
embedButton.addEventListener("click", async function(event) {
|
118
|
+
const input = event.target.closest('.trix-dialog--x-video-embed').querySelector('.trix-input--dialog')
|
119
|
+
|
120
|
+
input.disabled = true
|
121
|
+
embedButton.disabled = true
|
122
|
+
|
123
|
+
const errorContainer = dialog.querySelector(".trix-dialog--error-container")
|
124
|
+
const errorMessage = errorContainer.querySelector(".trix-dialog--error-message")
|
125
|
+
|
126
|
+
if (!errorContainer.classList.contains('d-none')) {
|
127
|
+
errorContainer.classList.add('d-none')
|
128
|
+
}
|
129
|
+
|
130
|
+
errorMessage.innerHTML = ''
|
131
|
+
|
132
|
+
const response = await post('/admin/action_text/video_embeds', { body: JSON.stringify({ url: input.value }), responseKind: 'json' })
|
133
|
+
|
134
|
+
if (response.ok) {
|
135
|
+
const { sgid, content } = await response.json
|
136
|
+
|
137
|
+
const attachment = new Trix.Attachment({ content, sgid })
|
138
|
+
editor.editor.insertAttachment(attachment)
|
139
|
+
|
140
|
+
const videoEmbedButton = toolbar.querySelector('[data-trix-action="x-video-embed"]')
|
141
|
+
deactivateTrixElement(videoEmbedButton)
|
142
|
+
|
143
|
+
input.value = ''
|
144
|
+
embedButton.disabled = false
|
145
|
+
} else {
|
146
|
+
const { error } = await response.json
|
147
|
+
|
148
|
+
if (errorContainer.classList.contains('d-none')) {
|
149
|
+
errorContainer.classList.remove('d-none')
|
150
|
+
}
|
151
|
+
|
152
|
+
errorMessage.innerHTML = error
|
153
|
+
|
154
|
+
input.disabled = false
|
155
|
+
embedButton.disabled = false
|
156
|
+
}
|
157
|
+
})
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
function activateTrixElement(element) {
|
162
|
+
element.classList.add("trix-active")
|
163
|
+
element.setAttribute("data-trix-active", "")
|
164
|
+
}
|
165
|
+
|
166
|
+
function deactivateTrixElement(element) {
|
167
|
+
element.classList.remove("trix-active")
|
168
|
+
element.removeAttribute("data-trix-active")
|
169
|
+
}
|
170
|
+
|
171
|
+
// On page reload, trix-initialize event is not fired, so we need to initialize the toolbar and editor here
|
172
|
+
const toolbars = document.querySelectorAll('trix-toolbar')
|
173
|
+
toolbars.forEach(toolbar => toolbar.innerHTML = Trix.config.toolbar.getDefaultHTML())
|
174
|
+
|
175
|
+
const trixEditors = document.querySelectorAll('trix-editor')
|
176
|
+
trixEditors.forEach(editor => initializeTrixEditor(editor))
|
177
|
+
|
178
|
+
// This will be used to initialize the editor after the page is loaded and the editor is added later, eg. in the page builder
|
179
|
+
document.addEventListener("trix-initialize", function(event) {
|
180
|
+
const editor = event.target
|
181
|
+
initializeTrixEditor(editor)
|
182
|
+
})
|
@@ -0,0 +1,210 @@
|
|
1
|
+
/* eslint-disable no-undef */
|
2
|
+
import BasePlugin from "@uppy/core/lib/BasePlugin.js"
|
3
|
+
import { createId } from "@paralleldrive/cuid2"
|
4
|
+
// const Translator = require('@uppy/utils/lib/Translator');
|
5
|
+
// const { Provider, Socket } = require('@uppy/companion-client');
|
6
|
+
// const emitSocketProgress = require('@uppy/utils/lib/emitSocketProgress');
|
7
|
+
// const getSocketHost = require('@uppy/utils/lib/getSocketHost');
|
8
|
+
import { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue'
|
9
|
+
import { DirectUpload } from "@rails/activestorage"
|
10
|
+
|
11
|
+
export default class ActiveStorageUpload extends BasePlugin {
|
12
|
+
constructor(uppy, opts) {
|
13
|
+
super(uppy, opts)
|
14
|
+
|
15
|
+
this.id = opts.id || "ActiveStorageUpload"
|
16
|
+
this.title = opts.title || "ActiveStorageUpload"
|
17
|
+
this.type = "uploader"
|
18
|
+
|
19
|
+
const defaultOptions = {
|
20
|
+
limit: 0,
|
21
|
+
timeout: 30 * 1000,
|
22
|
+
directUploadUrl: null,
|
23
|
+
headers: {}
|
24
|
+
}
|
25
|
+
|
26
|
+
this.opts = Object.assign({}, defaultOptions, opts)
|
27
|
+
|
28
|
+
// Simultaneous upload limiting is shared across all uploads with this plugin.
|
29
|
+
if (typeof this.opts.limit === "number" && this.opts.limit !== 0) {
|
30
|
+
this.limitUploads = new RateLimitedQueue(this.opts.limit)
|
31
|
+
} else {
|
32
|
+
this.limitUploads = fn => fn
|
33
|
+
}
|
34
|
+
|
35
|
+
this.handleUpload = this.handleUpload.bind(this)
|
36
|
+
}
|
37
|
+
|
38
|
+
install() {
|
39
|
+
this.uppy.addUploader(this.handleUpload)
|
40
|
+
}
|
41
|
+
|
42
|
+
uninstall() {
|
43
|
+
this.uppy.removeUploader(this.handleUpload)
|
44
|
+
}
|
45
|
+
|
46
|
+
handleUpload(fileIDs) {
|
47
|
+
if (fileIDs.length === 0) {
|
48
|
+
this.uppy.log("[ActiveStorage] No files to upload!")
|
49
|
+
return Promise.resolve()
|
50
|
+
}
|
51
|
+
|
52
|
+
this.uppy.log("[ActiveStorage] Uploading...")
|
53
|
+
const files = fileIDs.map(fileID => this.uppy.getFile(fileID))
|
54
|
+
|
55
|
+
return this.uploadFiles(files).then(() => null)
|
56
|
+
}
|
57
|
+
|
58
|
+
upload(file, current, total) {
|
59
|
+
this.uppy.log(`uploading ${current} of ${total}`)
|
60
|
+
|
61
|
+
return new Promise((resolve, reject) => {
|
62
|
+
const timer = this.createProgressTimeout(this.opts.timeout, error => {
|
63
|
+
//xhr.abort();
|
64
|
+
this.uppy.emit("upload-error", file, error)
|
65
|
+
reject(error)
|
66
|
+
})
|
67
|
+
|
68
|
+
var directHandlers = {
|
69
|
+
directUploadWillStoreFileWithXHR: null,
|
70
|
+
directUploadDidProgress: null,
|
71
|
+
}
|
72
|
+
directHandlers.directUploadDidProgress = ev => {
|
73
|
+
this.uppy.log(`[XHRUpload] ${id} progress: ${ev.loaded} / ${ev.total}`)
|
74
|
+
timer.progress()
|
75
|
+
|
76
|
+
if (ev.lengthComputable) {
|
77
|
+
this.uppy.emit("upload-progress", file, {
|
78
|
+
uploader: this,
|
79
|
+
bytesUploaded: ev.loaded,
|
80
|
+
bytesTotal: ev.total,
|
81
|
+
})
|
82
|
+
}
|
83
|
+
}
|
84
|
+
directHandlers.directUploadWillStoreFileWithXHR = request => {
|
85
|
+
request.upload.addEventListener("progress", event =>
|
86
|
+
directHandlers.directUploadDidProgress(event)
|
87
|
+
)
|
88
|
+
}
|
89
|
+
|
90
|
+
const { data, meta } = file
|
91
|
+
|
92
|
+
if (!data.name && meta.name) {
|
93
|
+
data.name = meta.name
|
94
|
+
}
|
95
|
+
|
96
|
+
const upload = new DirectUpload(data, this.opts.directUploadUrl, directHandlers, this.opts.headers);
|
97
|
+
const id = createId()
|
98
|
+
|
99
|
+
upload.create((error, blob) => {
|
100
|
+
this.uppy.log(`[XHRUpload] ${id} finished`)
|
101
|
+
timer.done()
|
102
|
+
|
103
|
+
if (error) {
|
104
|
+
const response = {
|
105
|
+
status: "error",
|
106
|
+
}
|
107
|
+
|
108
|
+
this.uppy.setFileState(file.id, { response })
|
109
|
+
|
110
|
+
this.uppy.emit("upload-error", file, error)
|
111
|
+
return reject(error)
|
112
|
+
} else {
|
113
|
+
const response = {
|
114
|
+
status: "success",
|
115
|
+
directUploadSignedId: blob.signed_id,
|
116
|
+
}
|
117
|
+
|
118
|
+
this.uppy.setFileState(file.id, { response })
|
119
|
+
|
120
|
+
this.uppy.emit("upload-success", file, blob)
|
121
|
+
|
122
|
+
return resolve(file)
|
123
|
+
}
|
124
|
+
})
|
125
|
+
|
126
|
+
this.uppy.on("file-removed", removedFile => {
|
127
|
+
if (removedFile.id === file.id) {
|
128
|
+
timer.done()
|
129
|
+
upload.abort && upload.abort()
|
130
|
+
}
|
131
|
+
})
|
132
|
+
|
133
|
+
this.uppy.on("upload-cancel", fileID => {
|
134
|
+
if (fileID === file.id) {
|
135
|
+
timer.done()
|
136
|
+
upload.abort && upload.abort()
|
137
|
+
}
|
138
|
+
})
|
139
|
+
|
140
|
+
this.uppy.on("cancel-all", () => {
|
141
|
+
timer.done()
|
142
|
+
upload.abort && upload.abort()
|
143
|
+
})
|
144
|
+
})
|
145
|
+
}
|
146
|
+
|
147
|
+
uploadFiles(files) {
|
148
|
+
const actions = files.map((file, i) => {
|
149
|
+
const current = parseInt(i, 10) + 1
|
150
|
+
const total = files.length
|
151
|
+
|
152
|
+
if (file.error) {
|
153
|
+
return () => Promise.reject(new Error(file.error))
|
154
|
+
} else {
|
155
|
+
this.uppy.emit("upload-start", [file])
|
156
|
+
return this.upload.bind(this, file, current, total)
|
157
|
+
}
|
158
|
+
})
|
159
|
+
|
160
|
+
const promises = actions.map(action => {
|
161
|
+
const limitedAction = this.limitUploads(action)
|
162
|
+
return limitedAction()
|
163
|
+
})
|
164
|
+
|
165
|
+
return Promise.allSettled(promises)
|
166
|
+
}
|
167
|
+
|
168
|
+
// Helper to abort upload requests if there has not been any progress for `timeout` ms.
|
169
|
+
// Create an instance using `timer = createProgressTimeout(10000, onTimeout)`
|
170
|
+
// Call `timer.progress()` to signal that there has been progress of any kind.
|
171
|
+
// Call `timer.done()` when the upload has completed.
|
172
|
+
createProgressTimeout(timeout, timeoutHandler) {
|
173
|
+
const uppy = this.uppy
|
174
|
+
const self = this
|
175
|
+
let isDone = false
|
176
|
+
|
177
|
+
function onTimedOut() {
|
178
|
+
uppy.log("[XHRUpload] timed out")
|
179
|
+
const error = new Error(self.i18n("timedOut", { seconds: Math.ceil(timeout / 1000) }))
|
180
|
+
timeoutHandler(error)
|
181
|
+
}
|
182
|
+
|
183
|
+
let aliveTimer = null
|
184
|
+
function progress() {
|
185
|
+
// Some browsers fire another progress event when the upload is
|
186
|
+
// cancelled, so we have to ignore progress after the timer was
|
187
|
+
// told to stop.
|
188
|
+
if (isDone) return
|
189
|
+
|
190
|
+
if (timeout > 0) {
|
191
|
+
if (aliveTimer) clearTimeout(aliveTimer)
|
192
|
+
aliveTimer = setTimeout(onTimedOut, timeout)
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
function done() {
|
197
|
+
uppy.log("[XHRUpload] timer done")
|
198
|
+
if (aliveTimer) {
|
199
|
+
clearTimeout(aliveTimer)
|
200
|
+
aliveTimer = null
|
201
|
+
}
|
202
|
+
isDone = true
|
203
|
+
}
|
204
|
+
|
205
|
+
return {
|
206
|
+
progress,
|
207
|
+
done,
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class Resource
|
4
|
+
def initialize(controller_path, controller_name, parent_model, object_name = nil)
|
5
|
+
@controller_path = controller_path
|
6
|
+
@controller_name = controller_name
|
7
|
+
@parent_model = parent_model
|
8
|
+
@object_name = object_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def sub_namespace_parts
|
12
|
+
@controller_path.split('/')[2..-2]
|
13
|
+
end
|
14
|
+
|
15
|
+
def model_class
|
16
|
+
sub_namespace = sub_namespace_parts.map(&:capitalize).join('::')
|
17
|
+
sub_namespace = "#{sub_namespace}::" unless sub_namespace.empty?
|
18
|
+
"Spree::#{sub_namespace}#{@controller_name.classify}".constantize
|
19
|
+
end
|
20
|
+
|
21
|
+
def model_name
|
22
|
+
sub_namespace = sub_namespace_parts.join('/')
|
23
|
+
sub_namespace = "#{sub_namespace}/" unless sub_namespace.empty?
|
24
|
+
@parent_model.gsub("spree/#{sub_namespace}", '')
|
25
|
+
end
|
26
|
+
|
27
|
+
def object_name
|
28
|
+
return @object_name if @object_name
|
29
|
+
|
30
|
+
sub_namespace = sub_namespace_parts.join('_')
|
31
|
+
sub_namespace = "#{sub_namespace}_" unless sub_namespace.empty?
|
32
|
+
"#{sub_namespace}#{@controller_name.singularize}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Spree
|
6
|
+
module Admin
|
7
|
+
class Updater
|
8
|
+
SPREE_CLOUD_UPDATES_URL = 'https://spreecloud.io/updates.json'
|
9
|
+
|
10
|
+
@updates = nil
|
11
|
+
|
12
|
+
def self.update_available?
|
13
|
+
fetch_updates.any?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.latest_version
|
17
|
+
@latest_version ||= fetch_updates.first&.dig('version')
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.fetch_updates
|
21
|
+
@updates ||= Rails.cache.fetch("spree/admin/updater/fetch_updates/#{Spree.version}", expires_in: 1.day) do
|
22
|
+
uri = URI(SPREE_CLOUD_UPDATES_URL)
|
23
|
+
params = { version: Spree.version, environment: Rails.env, url: Spree::Store.current.url_or_custom_domain }
|
24
|
+
uri.query = URI.encode_www_form(params)
|
25
|
+
|
26
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
27
|
+
http.use_ssl = uri.scheme == 'https'
|
28
|
+
http.open_timeout = 1 # 1s timeout for opening the connection
|
29
|
+
http.read_timeout = 1 # 1s timeout for reading the response
|
30
|
+
|
31
|
+
response = http.get(uri)
|
32
|
+
return {} unless response.is_a?(Net::HTTPSuccess)
|
33
|
+
|
34
|
+
JSON.parse(response.body)
|
35
|
+
end
|
36
|
+
rescue Net::OpenTimeout, Net::ReadTimeout, SocketError, Errno::ECONNREFUSED, JSON::ParserError => e
|
37
|
+
Rails.logger.error("Failed to fetch Spree updates: #{e.message}")
|
38
|
+
{}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|