@spree/docs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -0
- package/dist/api-reference/platform/authentication.md +38 -0
- package/dist/api-reference/store-api/authentication.md +188 -0
- package/dist/api-reference/store-api/errors.md +277 -0
- package/dist/api-reference/store-api/idempotency.md +129 -0
- package/dist/api-reference/store-api/introduction.md +34 -0
- package/dist/api-reference/store-api/localization.md +279 -0
- package/dist/api-reference/store-api/metadata.md +160 -0
- package/dist/api-reference/store-api/monetary-amounts.md +65 -0
- package/dist/api-reference/store-api/querying.md +399 -0
- package/dist/api-reference/store-api/rate-limitting.md +103 -0
- package/dist/api-reference/store-api/relations.md +185 -0
- package/dist/api-reference/storefront/authentication.md +88 -0
- package/dist/api-reference/tutorials/adyen-integration-guide-for-android.md +165 -0
- package/dist/api-reference/tutorials/adyen-integration-guide-for-ios.md +194 -0
- package/dist/api-reference/tutorials/quick-checkout-with-stripe.md +248 -0
- package/dist/api-reference/v2/fetching-multiple-resources.md +26 -0
- package/dist/api-reference/v2/filtering-and-sorting.md +53 -0
- package/dist/api-reference/v2/introduction.md +22 -0
- package/dist/api-reference/v2/pagination.md +37 -0
- package/dist/api-reference/webhooks-events.md +883 -0
- package/dist/developer/admin/admin.md +205 -0
- package/dist/developer/admin/authentication.md +59 -0
- package/dist/developer/admin/components.md +711 -0
- package/dist/developer/admin/custom-css.md +243 -0
- package/dist/developer/admin/custom-javascript.md +116 -0
- package/dist/developer/admin/extending-ui.md +1964 -0
- package/dist/developer/admin/form-builder.md +444 -0
- package/dist/developer/admin/helper-methods.md +531 -0
- package/dist/developer/admin/navigation.md +805 -0
- package/dist/developer/admin/tables.md +491 -0
- package/dist/developer/advanced/adding_spree_to_rails_app.md +106 -0
- package/dist/developer/cli/quickstart.md +137 -0
- package/dist/developer/contributing/creating-an-extension.md +258 -0
- package/dist/developer/contributing/developing-spree.md +339 -0
- package/dist/developer/contributing/quickstart.md +32 -0
- package/dist/developer/contributing/updating-extensions.md +67 -0
- package/dist/developer/core-concepts/addresses.md +265 -0
- package/dist/developer/core-concepts/adjustments.md +107 -0
- package/dist/developer/core-concepts/architecture.md +177 -0
- package/dist/developer/core-concepts/calculators.md +323 -0
- package/dist/developer/core-concepts/customers.md +230 -0
- package/dist/developer/core-concepts/events.md +624 -0
- package/dist/developer/core-concepts/imports-exports.md +698 -0
- package/dist/developer/core-concepts/inventory.md +191 -0
- package/dist/developer/core-concepts/markets.md +250 -0
- package/dist/developer/core-concepts/media.md +167 -0
- package/dist/developer/core-concepts/metafields.md +187 -0
- package/dist/developer/core-concepts/orders.md +328 -0
- package/dist/developer/core-concepts/payments.md +710 -0
- package/dist/developer/core-concepts/pricing.md +163 -0
- package/dist/developer/core-concepts/products.md +360 -0
- package/dist/developer/core-concepts/promotions.md +322 -0
- package/dist/developer/core-concepts/reports.md +206 -0
- package/dist/developer/core-concepts/search-filtering.md +237 -0
- package/dist/developer/core-concepts/shipments.md +212 -0
- package/dist/developer/core-concepts/slugs.md +111 -0
- package/dist/developer/core-concepts/staff-roles.md +123 -0
- package/dist/developer/core-concepts/store-credits-gift-cards.md +317 -0
- package/dist/developer/core-concepts/stores.md +117 -0
- package/dist/developer/core-concepts/taxes.md +135 -0
- package/dist/developer/core-concepts/translations.md +120 -0
- package/dist/developer/core-concepts/users.md +299 -0
- package/dist/developer/core-concepts/webhooks.md +378 -0
- package/dist/developer/create-spree-app/quickstart.md +158 -0
- package/dist/developer/customization/api.md +93 -0
- package/dist/developer/customization/authentication.md +88 -0
- package/dist/developer/customization/checkout.md +204 -0
- package/dist/developer/customization/configuration.md +55 -0
- package/dist/developer/customization/decorators.md +523 -0
- package/dist/developer/customization/dependencies.md +232 -0
- package/dist/developer/customization/emails.md +21 -0
- package/dist/developer/customization/extensions.md +92 -0
- package/dist/developer/customization/metadata.md +236 -0
- package/dist/developer/customization/model-preferences.md +130 -0
- package/dist/developer/customization/permissions.md +265 -0
- package/dist/developer/customization/quickstart.md +229 -0
- package/dist/developer/customization/routes.md +24 -0
- package/dist/developer/customization/v4/admin-panel.md +78 -0
- package/dist/developer/customization/v4/authentication.md +210 -0
- package/dist/developer/customization/v4/checkout.md +212 -0
- package/dist/developer/customization/v4/deface.md +251 -0
- package/dist/developer/customization/v4/images.md +86 -0
- package/dist/developer/customization/v4/storefront.md +450 -0
- package/dist/developer/deployment/assets.md +87 -0
- package/dist/developer/deployment/aws.md +335 -0
- package/dist/developer/deployment/caching.md +27 -0
- package/dist/developer/deployment/cdn.md +39 -0
- package/dist/developer/deployment/database.md +155 -0
- package/dist/developer/deployment/docker.md +128 -0
- package/dist/developer/deployment/emails.md +77 -0
- package/dist/developer/deployment/environment_variables.md +111 -0
- package/dist/developer/deployment/heroku.md +51 -0
- package/dist/developer/deployment/render.md +95 -0
- package/dist/developer/getting-started/quickstart.md +82 -0
- package/dist/developer/how-to/custom-payment-method.md +374 -0
- package/dist/developer/how-to/custom-promotion.md +373 -0
- package/dist/developer/how-to/custom-report.md +387 -0
- package/dist/developer/how-to/custom-search-provider.md +230 -0
- package/dist/developer/multi-store/quickstart.md +71 -0
- package/dist/developer/multi-store/setup.md +38 -0
- package/dist/developer/multi-tenant/configuration.md +41 -0
- package/dist/developer/multi-tenant/core-concepts.md +75 -0
- package/dist/developer/multi-tenant/installation.md +96 -0
- package/dist/developer/multi-tenant/quickstart.md +20 -0
- package/dist/developer/multi-vendor/installation.md +45 -0
- package/dist/developer/multi-vendor/quickstart.md +17 -0
- package/dist/developer/sdk/admin/quickstart.md +22 -0
- package/dist/developer/sdk/authentication.md +89 -0
- package/dist/developer/sdk/configuration.md +225 -0
- package/dist/developer/sdk/quickstart.md +82 -0
- package/dist/developer/sdk/store/account.md +67 -0
- package/dist/developer/sdk/store/cart-checkout.md +140 -0
- package/dist/developer/sdk/store/markets.md +151 -0
- package/dist/developer/sdk/store/payments.md +96 -0
- package/dist/developer/sdk/store/products.md +149 -0
- package/dist/developer/sdk/store/wishlists.md +52 -0
- package/dist/developer/security/pci_compliance.md +15 -0
- package/dist/developer/security/security_policy.md +68 -0
- package/dist/developer/storefront/blocks.md +285 -0
- package/dist/developer/storefront/custom-css.md +260 -0
- package/dist/developer/storefront/custom-javascript.md +166 -0
- package/dist/developer/storefront/helper-methods.md +1288 -0
- package/dist/developer/storefront/links.md +298 -0
- package/dist/developer/storefront/nextjs/architecture.md +150 -0
- package/dist/developer/storefront/nextjs/customization.md +141 -0
- package/dist/developer/storefront/nextjs/deployment.md +180 -0
- package/dist/developer/storefront/nextjs/quickstart.md +92 -0
- package/dist/developer/storefront/nextjs/spree-next-package.md +314 -0
- package/dist/developer/storefront/pages.md +163 -0
- package/dist/developer/storefront/sections.md +569 -0
- package/dist/developer/storefront/storefront.md +56 -0
- package/dist/developer/storefront/themes.md +161 -0
- package/dist/developer/tutorial/admin.md +134 -0
- package/dist/developer/tutorial/extending-models.md +380 -0
- package/dist/developer/tutorial/file-uploads.md +121 -0
- package/dist/developer/tutorial/introduction.md +33 -0
- package/dist/developer/tutorial/model.md +41 -0
- package/dist/developer/tutorial/page-builder.md +487 -0
- package/dist/developer/tutorial/rich-text.md +73 -0
- package/dist/developer/tutorial/seo.md +332 -0
- package/dist/developer/tutorial/storefront.md +352 -0
- package/dist/developer/tutorial/testing.md +558 -0
- package/dist/developer/upgrades/2.0-to-2.1.md +46 -0
- package/dist/developer/upgrades/2.1-to-2.2.md +59 -0
- package/dist/developer/upgrades/2.2-to-2.3.md +44 -0
- package/dist/developer/upgrades/2.3-to-2.4.md +42 -0
- package/dist/developer/upgrades/3.0-to-3.1.md +47 -0
- package/dist/developer/upgrades/3.1-to-3.2.md +34 -0
- package/dist/developer/upgrades/3.2-to-3.3.md +70 -0
- package/dist/developer/upgrades/3.3-to-3.4.md +36 -0
- package/dist/developer/upgrades/3.4-to-3.5.md +44 -0
- package/dist/developer/upgrades/3.5-to-3.6.md +40 -0
- package/dist/developer/upgrades/3.6-to-3.7.md +62 -0
- package/dist/developer/upgrades/3.7-to-4.0.md +152 -0
- package/dist/developer/upgrades/4.0-to-4.1.md +92 -0
- package/dist/developer/upgrades/4.1-to-4.2.md +109 -0
- package/dist/developer/upgrades/4.10-to-5.0.md +129 -0
- package/dist/developer/upgrades/4.2-to-4.3.md +100 -0
- package/dist/developer/upgrades/4.3-to-4.4.md +125 -0
- package/dist/developer/upgrades/4.4-to-4.5.md +94 -0
- package/dist/developer/upgrades/4.5-to-4.6.md +119 -0
- package/dist/developer/upgrades/4.6-to-4.7.md +39 -0
- package/dist/developer/upgrades/4.8-to-4.9.md +24 -0
- package/dist/developer/upgrades/4.9-to-4.10.md +24 -0
- package/dist/developer/upgrades/4.x-to-4.8.md +52 -0
- package/dist/developer/upgrades/5.0-to-5.1.md +28 -0
- package/dist/developer/upgrades/5.1-to-5.2.md +127 -0
- package/dist/developer/upgrades/5.2-to-5.3.md +338 -0
- package/dist/developer/upgrades/5.3-to-5.4.md +248 -0
- package/dist/developer/upgrades/quickstart.md +36 -0
- package/dist/integrations/analytics/google-analytics.md +64 -0
- package/dist/integrations/analytics/google-tag-manager.md +78 -0
- package/dist/integrations/integrations.md +39 -0
- package/dist/integrations/marketing/klaviyo.md +99 -0
- package/dist/integrations/payments/adyen.md +90 -0
- package/dist/integrations/payments/paypal.md +41 -0
- package/dist/integrations/payments/razorpay.md +45 -0
- package/dist/integrations/payments/stripe.md +109 -0
- package/dist/integrations/search/meilisearch.md +236 -0
- package/dist/integrations/sso-mfa-social-login/admin-dashboard.md +57 -0
- package/dist/integrations/sso-mfa-social-login/storefront.md +56 -0
- package/package.json +27 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Custom JavaScript for Spree Storefront"
|
|
3
|
+
sidebarTitle: "Custom JavaScript"
|
|
4
|
+
description: "Learn how to add custom JavaScript to your Spree storefront"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Extending Storefront with JavaScript
|
|
8
|
+
|
|
9
|
+
Spree Storefront can be easily extended with custom JavaScript. Most of the JavaScript in the storefront is powered by a framework called [Stimulus.js](https://stimulus.hotwired.dev/) which is the Ruby on Rails default. It's a very simple and minimalistic framework only enhancing our server-side rendered HTML with a bit of interactivity.
|
|
10
|
+
|
|
11
|
+
### 3rd party JavaScript libraries
|
|
12
|
+
|
|
13
|
+
Spree Storefront comes with a few 3rd party JavaScript libraries already included.
|
|
14
|
+
|
|
15
|
+
Main libraries we're using:
|
|
16
|
+
|
|
17
|
+
* [Stimulus.js](https://stimulus.hotwired.dev/)
|
|
18
|
+
* [Turbo](https://turbo.hotwired.dev/)
|
|
19
|
+
* [Swiper.js](https://swiper.com/)
|
|
20
|
+
* [PhotoSwipe](https://photoswipe.com/)
|
|
21
|
+
* [noUISlider](https://refreshless.com/nouislider/)
|
|
22
|
+
* [card-validator](https://github.com/braintree/card-validator) and [credit-card-type](https://github.com/braintree/credit-card-type)
|
|
23
|
+
|
|
24
|
+
You can find them in the [app/assets/javascripts/vendor](https://github.com/spree/spree/blob/main/storefront/vendor/javascript) directory.
|
|
25
|
+
|
|
26
|
+
### Managing JavaScript dependencies
|
|
27
|
+
|
|
28
|
+
You're probably wondering why these libraries are in the `vendor` directory, and not in `node_modules`.
|
|
29
|
+
|
|
30
|
+
That's because we're not using Node.js at all. So no Yarn or npm. We're using a different approach to manage dependencies.
|
|
31
|
+
|
|
32
|
+
We're using a tool called [Importmaps](https://github.com/rails/importmap-rails) to manage dependencies which is the Ruby on Rails default.
|
|
33
|
+
|
|
34
|
+
> **INFO:** If you want to use a different JavaScript package manager you can do so by using [jsbundling-rails](https://github.com/rails/jsbundling-rails) gem.
|
|
35
|
+
|
|
36
|
+
#### Install dependencies
|
|
37
|
+
|
|
38
|
+
To install dependencies you need to run the following command:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
bin/importmap pin react
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This will install the dependencies, download the files to your `vendor/javascript` directory and add them to your `config/importmap.rb` file, eg.
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
pin "react" # @19.1.0
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Now you can just import the library in your application entry point, eg. `application.js`:
|
|
51
|
+
|
|
52
|
+
```js
|
|
53
|
+
import "react";
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Application entry point
|
|
57
|
+
|
|
58
|
+
Mentioned above, the application entry point is the `application.js` file. It's located in the `app/javascript` directory.
|
|
59
|
+
|
|
60
|
+
If you want to add custom JavaScript to your Spree storefront, you can do so by adding a new file to the `app/javascript` directory.
|
|
61
|
+
|
|
62
|
+
### Stimulus Controllers
|
|
63
|
+
|
|
64
|
+
Stimulus controllers are a way to add interactivity to your Spree storefront. Storefront controllers can be found in the Spree repository in the [storefront/app/javascript/spree/storefront/controllers](https://github.com/spree/spree/tree/main/storefront/app/javascript/spree/storefront/controllers) directory.
|
|
65
|
+
|
|
66
|
+
You can find more information about Stimulus controllers in the [Stimulus.js documentation](https://stimulus.hotwired.dev/handbook/controllers).
|
|
67
|
+
|
|
68
|
+
To add a new controller you need to create a new file in the `app/javascript/controllers` directory. It will be automatically picked up by the application.
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
// app/javascript/controllers/hello_controller.js
|
|
72
|
+
import { Controller } from '@hotwired/stimulus'
|
|
73
|
+
|
|
74
|
+
export default class extends Controller {
|
|
75
|
+
connect() {
|
|
76
|
+
console.log("Hello Spree Commerce Stimulus!", this.element);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
To use the controller in your HTML you need to add the `data-controller` attribute to your element, eg.
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<div data-controller="hello">
|
|
85
|
+
Hello Spree Commerce Stimulus!
|
|
86
|
+
</div>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## JavaScript snippets
|
|
90
|
+
|
|
91
|
+
If you need to add a small piece of JavaScript code (eg. tracking, marketing, analytics, customer service etc.) you can do this by:
|
|
92
|
+
|
|
93
|
+
1. Declaring a new head partial in the `config/initializers/spree.rb` file, eg.
|
|
94
|
+
|
|
95
|
+
**Spree 5.2+:**
|
|
96
|
+
|
|
97
|
+
```ruby config/initializers/spree.rb
|
|
98
|
+
Rails.application.config.after_initialize do
|
|
99
|
+
Spree.storefront.partials.head << 'spree/shared/my_tracking_code'
|
|
100
|
+
end
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Spree 5.1 and below:**
|
|
104
|
+
|
|
105
|
+
```ruby config/initializers/spree.rb
|
|
106
|
+
Rails.application.config.spree_storefront.head_partials << 'spree/shared/my_tracking_code'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
2. Creating a new file in the `app/views/spree/shared/my_tracking_code.html.erb`, where you can add your tracking code, eg.
|
|
111
|
+
|
|
112
|
+
```erb app/views/spree/shared/my_tracking_code.html.erb
|
|
113
|
+
<script>
|
|
114
|
+
console.log("I'm a spy!");
|
|
115
|
+
</script>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
> **INFO:** Check out the [Integrations](/integrations) for existing integrations you can plug into your storefront.
|
|
119
|
+
|
|
120
|
+
## Extending Existing Stimulus Controllers
|
|
121
|
+
|
|
122
|
+
You can extend or override existing Storefront Stimulus controllers:
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
// app/javascript/controllers/cart_controller.js
|
|
126
|
+
|
|
127
|
+
export default class extends CartController {
|
|
128
|
+
connect() {
|
|
129
|
+
super.connect()
|
|
130
|
+
console.log('Extended cart controller connected!')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Override existing method
|
|
134
|
+
addItem(event) {
|
|
135
|
+
// Custom logic before adding
|
|
136
|
+
console.log('Adding item...')
|
|
137
|
+
super.addItem(event)
|
|
138
|
+
// Custom logic after adding
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Turbo Events
|
|
144
|
+
|
|
145
|
+
Spree Storefront uses [Turbo](https://turbo.hotwired.dev/) for navigation. You can hook into Turbo events:
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
// app/javascript/application.js
|
|
149
|
+
document.addEventListener('turbo:load', () => {
|
|
150
|
+
console.log('Page loaded via Turbo')
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
document.addEventListener('turbo:before-visit', (event) => {
|
|
154
|
+
console.log('About to visit:', event.detail.url)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
document.addEventListener('turbo:frame-load', (event) => {
|
|
158
|
+
console.log('Turbo frame loaded:', event.target.id)
|
|
159
|
+
})
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Related Documentation
|
|
163
|
+
|
|
164
|
+
- [Custom CSS](/developer/storefront/custom-css) - Styling your storefront
|
|
165
|
+
- [Sections](/developer/storefront/sections) - Creating custom sections
|
|
166
|
+
- [Blocks](/developer/storefront/blocks) - Creating custom blocks
|