├── .env ├── .gitignore ├── README.md ├── _tuts ├── 2ndcontroller-add-cart-list-controller.diff ├── 2ndcontroller-ajax-to-refresh-cart-list.diff ├── 2ndcontroller-css-fade-out.diff ├── 2ndcontroller-dispatch-an-event.diff ├── 2ndcontroller-listen-to-event.diff ├── 2ndcontroller-refactor-cart-to-partial.diff ├── 2ndcontroller-remove-debug.diff ├── 2ndcontroller-route-controller-to-partial.diff ├── 3rdparty-delete-old-controller.diff ├── 3rdparty-install-stimulus-autocomplete.diff ├── 3rdparty-make-controller-lazy.diff ├── 3rdparty-register-controller.diff ├── 3rdparty-role-option.diff ├── 3rdparty-sending-preview.diff ├── 3rdparty-using-controller.diff ├── README.md ├── actions-add-button.diff ├── actions-add-data-action.diff ├── actions-remove-connect.diff ├── actions-use-default-action.diff ├── addtransition-add-the-toggle-action.diff ├── addtransition-calling-enter-leave.diff ├── addtransition-create-new-controller.diff ├── addtransition-initialize-usetransition.diff ├── addtransition-skiphiddenproperty.diff ├── addtransition-use-my-fork.diff ├── assets-activate-data-turbo-track.diff ├── assets-remove-log.diff ├── assets-turn-on-versioning.diff ├── assets-tweak-app-js.diff ├── asyncform-close-on-success.diff ├── asyncform-listen-to-bs-event.diff ├── asyncform-return-422-or-200.diff ├── asyncform-try-catch-on-ajax.diff ├── chartjs-install-it.diff ├── chartjs-render-chart.diff ├── chartjs-set-option.diff ├── chartjs-yarn-install-force.diff ├── chartjsextend-add-custom-controller-2.diff ├── chartjsextend-add-custom-controller.diff ├── chartjsextend-change-chart-in-5-seconds.diff ├── chartjsextend-listen-to-connect-event.diff ├── colorselector-add-action-to-squares.diff ├── colorselector-add-click.diff ├── colorselector-add-missing-static.diff ├── colorselector-add-selected-class.diff ├── colorselector-bootstrap-controller.diff ├── colorselector-change-to-buttons.diff ├── colorselector-colorsquare-target.diff ├── colorselector-loop-and-print-out-hex.diff ├── colorselector-removing-border-on-others.diff ├── colorselector-render-color-boxes.diff ├── controllerbasics-add-2nd-element.diff ├── controllerbasics-add-first-element.diff ├── controllerbasics-create-first-controller.diff ├── controllerbasics-delete-hello-controller.diff ├── controllerbasics-increment-on-click.diff ├── dataset-add-data-color-id.diff ├── dataset-hide-select-on-load.diff ├── dataset-set-selected-option.diff ├── disable-add-data-turbo-false.diff ├── disable-re-enable-one-link.diff ├── disable-remove-data-turbo.diff ├── drivebasics-add-sleep.diff ├── drivebasics-install-turbo.diff ├── drivebasics-remove-sleep.diff ├── drivebasics-yarn-install-force.diff ├── drivejs-add-document-ready.diff ├── drivejs-adding-js-to-body.diff ├── drivejs-attaching-document-listener.diff ├── drivejs-remove-extra-js.diff ├── entitybroadcast-add-annotation.diff ├── entitybroadcast-add-dummy-template.diff ├── entitybroadcast-add-listen-in-tpl.diff ├── entitybroadcast-add-remove.diff ├── entitybroadcast-add-update.diff ├── entitybroadcast-move-stream-to-new-tpl.diff ├── entitybroadcast-remove-with-fade-out.diff ├── entitybroadcast-rename-variable-to-entity.diff ├── fixredirect-add-request-header.diff ├── fixredirect-add-shouldwrapredirect.diff ├── fixredirect-bootstrap-subscriber.diff ├── fixredirect-finish-subscriber.diff ├── fixredirect-listen-to-before-fetch-request.diff ├── fixredirect-read-header-in-js.diff ├── fixredirect-redirect-on-login.diff ├── forms-add-422-by-hand.diff ├── forms-renderform.diff ├── forms-updating-all-other-forms.diff ├── framebusy-add-busy-css.diff ├── framebusy-add-display-block.diff ├── framebusy-conditional-loading.diff ├── framebusy-make-checkout-a-lazy-frame.diff ├── framebusy-make-effect-less-dramatic.diff ├── framebusy-set-low-opacity.diff ├── frameredirect-add-data-turbo-form-redirect.diff ├── frameredirect-add-getcurrentframe.diff ├── frameredirect-clear-cache-manually.diff ├── frameredirect-data-turbo-form-redirect-again.diff ├── frameredirect-finish-frame-function.diff ├── frameredirect-frame-around-cart-controls.diff ├── frameredirect-move-listener-to-turbo-helper.diff ├── inlineedit-add-an-edit-button.diff ├── inlineedit-add-form-action.diff ├── inlineedit-add-frame-target-to-edit.diff ├── inlineedit-conditionally-add-form-target.diff ├── inlineedit-make-form-target-frame.diff ├── inlineedit-redirect-back-to-show-page.diff ├── inlineedit-use-turbo-frame-for-row.diff ├── inlineedit-wrap-form-in-frame.diff ├── inlineedit-wrap-product-show-in-frame.diff ├── installencore-add-bootstrap.diff ├── installencore-add-encore-twig-functions.diff ├── installencore-import-bootstrap.diff ├── installencore-install-encore.diff ├── installencore-move-styles.diff ├── installencore-yarn-install.diff ├── jquery-also-ajax-on-direct-form-submit.diff ├── jquery-clear-modal-to-start.diff ├── jquery-hide-button.diff ├── jquery-install-it.diff ├── jquery-make-ajax-call.diff ├── jquery-return-form-partial.diff ├── jquery-serialize-form-on-save.diff ├── jquery-submit-form-ajax.diff ├── jquery-use-formurlvalue.diff ├── laziness-dynamic-import-react-dom.diff ├── laziness-install-webpack-bundle-analyzer.diff ├── laziness-lazy-controller.diff ├── laziness-set-lazy-in-controllers-json.diff ├── lazy-sidebar-upgrade-turbo.diff ├── lazyframe-add-2nd-frame-on-homepage.diff ├── lazyframe-add-frame-to-weather-tpl.diff ├── lazyframe-add-lazy-weather-frame.diff ├── lazyframe-bootstrap-stimulus-controller.diff ├── lazyframe-check-for-weatherwidget-init.diff ├── lazyframe-make-it-lazy.diff ├── lazyframe-make-weather-page.diff ├── lazyframe-move-in-script.diff ├── lazyframe-move-into-connect.diff ├── lazyframe-move-weatherwidget-init-into-ctrl.diff ├── lazyframe-remove-extra-weather.diff ├── lazyframe-upgrade-turbo-again.diff ├── lazysidebar-add-internal-turbo-frame.diff ├── lazysidebar-enabling-fragments.diff ├── lazysidebar-remove-extra-args-cart.diff ├── lazysidebar-sidebar-controller.diff ├── lazysidebar-use-fragment-uri.diff ├── manualstream-add-data-turbo-cache-false.diff ├── manualstream-stream-from-javascript.diff ├── manualvisit-import-visit.diff ├── manualvisit-navigate-with-turbo.diff ├── manualvisit-redirect-on-10-clicks.diff ├── manualvisit-use-global-turbo.diff ├── mercure-add-turbo-stream-listen.diff ├── mercure-adding-docker-config.diff ├── mercure-dd-server.diff ├── mercure-install-symfony-ux-turbo-mercure.diff ├── mercure-publish-message.diff ├── mercure-remove-dd.diff ├── mercure-verify-peer-false.diff ├── mercure-yarn-install-force.diff ├── modal-add-action-method.diff ├── modal-add-container-div.diff ├── modal-add-formurl-value.diff ├── modal-add-modal-partial.diff ├── modal-add-new-button.diff ├── modal-bootstrap-stimulus-controller.diff ├── modal-category-tostring.diff ├── modal-change-url.diff ├── modal-customize-modal-header-buttons.diff ├── modal-import-modal.diff ├── modal-install-popper.diff ├── modal-make-crud-product.diff ├── modal-make-form-smaller.diff ├── modal-open-modal.diff ├── modal-sort-newest-first.diff ├── modal-upgrade-to-bootstrap5.diff ├── modalframe-add-id-to-frame.diff ├── modalframe-add-turbo-frame-to-new.diff ├── modalframe-bind-the-method-to-this.diff ├── modalframe-close-modal-on-success.diff ├── modalframe-disconnect-listener.diff ├── modalframe-extract-to-method.diff ├── modalframe-hide-modal.diff ├── modalframe-listen-to-before-fetch-response.diff ├── modalframe-listen-to-submit-end.diff ├── modalframe-loading-lazy.diff ├── modalframe-no-need-to-hide-the-modal.diff ├── modalframe-redirect-back-to-index.diff ├── modalframe-redirect-to-reviews-page.diff ├── modalframe-remove-extra-stuff.diff ├── modalframe-remove-modal-footer.diff ├── modalframe-remove-modal-form-target.diff ├── modalframe-set-formtarget-in-new.diff ├── modalframe-turn-modal-into-frame.diff ├── modalframe-visit-redirect-url.diff ├── organization-create-setselectedcolor-method.diff ├── organization-create-turbo-helper-js.diff ├── organization-organize-into-methods.diff ├── pre-turbo-add-counting-page.diff ├── pre-turbo-add-log-in-helper-links.diff ├── pre-turbo-add-more-types.diff ├── pre-turbo-adding-review-system.diff ├── pre-turbo-change-add-to-cart-url.diff ├── pre-turbo-empty-migrations.diff ├── pre-turbo-fix-deprecations.diff ├── pre-turbo-fixing-review-admin-area.diff ├── pre-turbo-foundry.diff ├── pre-turbo-making-entity-setters-relaxed.diff ├── pre-turbo-remove-modal-on-close.diff ├── pre-turbo-review-admin.diff ├── pre-turbo-set-up-tutorial.diff ├── pre-turbo-styling-changes.diff ├── pre-turbo-tweak-add-transition-module.diff ├── pre-turbo-tweak-review-flash-system.diff ├── pre-turbo-updating-readme.diff ├── pre-turbo-upgrade-deps.diff ├── pre-turbo-upgrade-yarn-deps.diff ├── pre-turbo-upgrading-recipes.diff ├── pre-turbo-use-new-security.diff ├── pre-turbo-various-minor-tweaks.diff ├── prefetch-copy-prefetch-script.diff ├── prefetch-import-script.diff ├── prefetch-manual-prefetch-link.diff ├── prefetch-remove-prefetch-import.diff ├── react-bootstrap-controller.diff ├── react-copy-in-component.diff ├── react-enable-the-preset.diff ├── react-install-react-preset.diff ├── react-install-react.diff ├── react-render-component.diff ├── reactprops-add-controller.diff ├── reactprops-add-data-controller.diff ├── reactprops-copy-in-component.diff ├── reactprops-manually-pass-prop.diff ├── reactprops-pass-real-serialized-value.diff ├── reloadcontroller-bootstrap-controller.diff ├── reloadcontroller-dispatch-event.diff ├── reloadcontroller-list-into-partial.diff ├── reloadcontroller-listen-to-event.diff ├── reloadcontroller-make-ajax-call.diff ├── reloadcontroller-make-target-optional.diff ├── reloadcontroller-not-relying-on-xmlhttprequest.diff ├── reloadcontroller-opacity-trick.diff ├── reloadcontroller-partial-value.diff ├── reloadcontroller-re-use-on-cart.diff ├── restorevisit-do-a-restore-visit.diff ├── restorevisit-normal-visit-again.diff ├── restorevisit-put-snapshot-into-cache.diff ├── restorevisit-upgrade-turbo.diff ├── reviews-disable-all-submit-buttons.diff ├── reviews-fix-disabled-buttons-on-back.diff ├── reviews-fix-flash.diff ├── reviews-fix-log-in-target.diff ├── reviews-log-inside-turbo-submit-start.diff ├── reviews-wrap-reviews-in-frame.diff ├── searchpreview-add-input-action.diff ├── searchpreview-add-target-and-fill-in.diff ├── searchpreview-add-url-value.diff ├── searchpreview-adding-await.diff ├── searchpreview-bootstrap-controller.diff ├── searchpreview-create-ajax-endpoint.diff ├── searchpreview-make-ajax-call.diff ├── searchpreview-make-it-prettier.diff ├── see-more-add-truncated-description.diff ├── see-more-adding-turbo-frame.diff ├── see-more-install-twig-string-extra.diff ├── see-more-put-back-featured-route.diff ├── see-more-read-more-link.diff ├── snapshot-close-modal.diff ├── snapshot-complex-close-modal.diff ├── snapshot-disable-preview.diff ├── snapshot-lazily-load-swal.diff ├── snapshot-listen-to-turbo-before-cache.diff ├── snapshot-lower-opacity-on-preview.diff ├── snapshot-remove-opacity.diff ├── snapshot-remove-swal-animation.diff ├── snapshot-try-sweetalert.diff ├── snapshot-webpackmode-weak.diff ├── state-add-this-selectedcolorid.diff ├── state-unselect-on-2nd-click.diff ├── steps.json ├── stimulus-use-install-it.diff ├── stimulus-use-refactor-to-method.diff ├── stimulus-use-useclickoutside.diff ├── stimulus-use-usedebounce.diff ├── streamcleanup-change-frame-to-div.diff ├── streamcleanup-fade-out-highlight.diff ├── streamcleanup-highlight-new-with-css.diff ├── streamcleanup-isolate-review-into-tpl.diff ├── streamcleanup-isolate-to-reviews-list-tpl.diff ├── streamcleanup-only-stream-list.diff ├── streamcleanup-remove-with-timeout.diff ├── streamcleanup-separate-reviews-frame.diff ├── streamcleanup-stream-append-review.diff ├── streamcleanup-tweak-target-to-review-list.diff ├── streamstats-add-another-review.diff ├── streamstats-conditionally-stream.diff ├── streamstats-extra-flash.diff ├── streamstats-include-template-in-stream.diff ├── streamstats-pass-in-product.diff ├── streamstats-refactor-to-quickstats-template.diff ├── streamstats-return-simple-stream.diff ├── streamstats-stream-reviews-html-twig.diff ├── successstream-add-id-to-targets.diff ├── successstream-put-back-reviews-html-twig.diff ├── successstream-renderview.diff ├── successstream-stop-streaming-reviews.diff ├── successstream-update-review-stream.diff ├── sweetalert-add-form-submit-action.diff ├── sweetalert-add-submit-confirm-controller.diff ├── sweetalert-ajax-submit-form.diff ├── sweetalert-install-sweetalert2.diff ├── sweetalert-make-configurable.diff ├── sweetalert-option-to-submit-async.diff ├── sweetalert-pass-value-to-submit-async.diff ├── sweetalert-paste-in-swal.diff ├── sweetalert-resubmit-on-success.diff ├── sweetalert-use-preconfirm.diff ├── targets-add-span-element.diff ├── targets-add-target.diff ├── targets-remove-2nd-element.diff ├── targetting-add-target-top.diff ├── targetting-also-add-to-internal-frame.diff ├── toast-add-toast-template.diff ├── toast-broadcast-a-toast-also.diff ├── toast-creating-the-toast-controller.diff ├── toast-include-customize.diff ├── toast-move-into-toast-container.diff ├── toast-open-toast-in-js.diff ├── transition-add-css.diff ├── transition-upgrade-package.diff ├── transition-use-behavior.diff ├── transitions-different-on-preview.diff ├── transitions-fix-restoration-visit.diff ├── transitions-organize-to-method.diff ├── transitions-remove-slowness.diff ├── transitions-setup-initial-transition.diff ├── values-add-changed-hook.diff ├── values-add-data-color-id-attribute.diff ├── values-doing-all-the-work-in-the-hook.diff ├── values-fixing-type-problem.diff ├── values-hello-values-api.diff ├── values-setting-initial-selected.diff ├── values-unselect-on-click-again.diff ├── values-use-stimulus-controller.diff ├── values-use-value-exclusively.diff ├── values-value-names-are-normalized.diff ├── widgets-add-weather-widget.diff ├── widgets-always-add-script.diff ├── widgets-expand-widget-code.diff ├── widgets-log-in-body.diff ├── widgets-log-on-turbo-before-render.diff ├── widgets-refactor-to-method.diff ├── widgets-remove-log.diff ├── widgets-remove-script-element.diff ├── widgets-turbo-render-function.diff └── widgets-undo-on-every-page.diff ├── bin └── console ├── composer.json ├── composer.lock ├── config ├── bundles.php ├── packages │ ├── cache.yaml │ ├── dev │ │ ├── debug.yaml │ │ ├── monolog.yaml │ │ └── web_profiler.yaml │ ├── doctrine.yaml │ ├── doctrine_migrations.yaml │ ├── framework.yaml │ ├── prod │ │ ├── deprecations.yaml │ │ ├── doctrine.yaml │ │ ├── monolog.yaml │ │ └── routing.yaml │ ├── routing.yaml │ ├── security.yaml │ ├── sensio_framework_extra.yaml │ ├── test │ │ ├── framework.yaml │ │ ├── monolog.yaml │ │ ├── twig.yaml │ │ ├── validator.yaml │ │ └── web_profiler.yaml │ ├── twig.yaml │ └── validator.yaml ├── preload.php ├── routes.yaml ├── routes │ ├── annotations.yaml │ └── dev │ │ ├── framework.yaml │ │ └── web_profiler.yaml └── services.yaml ├── docker-compose.yaml ├── migrations ├── .gitignore ├── Version20191206161148.php └── Version20200127144611.php ├── public ├── images │ └── mvp-logo-light.png ├── index.php ├── styles │ └── app.css └── uploads │ └── products │ ├── blank-cds.png │ ├── dog-lamp.png │ ├── floppy-disc.png │ ├── hammock.png │ ├── indoor-plant.png │ ├── inflatable-sofa.png │ ├── papers.png │ ├── pen.png │ ├── popcorn.png │ ├── puzzle.png │ ├── spigot.png │ └── velvis.png ├── sfcasts ├── stimulus │ ├── 3rd-party-controllers.md │ ├── actions.md │ ├── ajax-html.md │ ├── analyze.md │ ├── async-imports.md │ ├── autocomplete-controller.md │ ├── autocomplete-transitions.md │ ├── color-selector.md │ ├── controllers.md │ ├── css-transitions.md │ ├── current-target.md │ ├── dataset.md │ ├── delete-confirm.md │ ├── dispatch-event.md │ ├── encore.md │ ├── extend-chartjs.md │ ├── fetch.md │ ├── finish-transition.md │ ├── form-action.md │ ├── form-ajax.md │ ├── form-responses.md │ ├── fresh-html.md │ ├── lazy.md │ ├── listen-reload-html.md │ ├── metadata.yml │ ├── modal-form.md │ ├── modal.md │ ├── multi-controller-dispatch.md │ ├── options-form-ajax.md │ ├── product-crud.md │ ├── properties-events.md │ ├── react-props.md │ ├── react.md │ ├── reload-controller.md │ ├── reuse-controller.md │ ├── search-preview.md │ ├── splitting-importing.md │ ├── state.md │ ├── stimulus-bridge.md │ ├── stimulus-fetch-lazy.md │ ├── stimulus-use.md │ ├── targets.md │ ├── transition-classes.md │ ├── ux-chart-js.md │ ├── ux.md │ ├── value-change.md │ └── values.md └── turbo │ ├── analytics.md │ ├── asset-tracking.md │ ├── broadcast-remove.md │ ├── cleaned-preview.md │ ├── disabling.md │ ├── entity-broadcast.md │ ├── external-js-stimulus.md │ ├── form-disable-submit.md │ ├── forms.md │ ├── frame-custom-header.md │ ├── frame-form-action.md │ ├── frame-loading.md │ ├── frame-redirect-cache.md │ ├── frame-redirect.md │ ├── frame-target.md │ ├── frames-find-frames.md │ ├── full-frame-redirect.md │ ├── how-drive-works.md │ ├── inline-edit.md │ ├── install.md │ ├── intro.md │ ├── javascript.md │ ├── js-widget.md │ ├── lazy-frame-full-page.md │ ├── lazy-frame.md │ ├── listen-publish.md │ ├── login-redirect.md │ ├── manual-stream.md │ ├── manual-visit.md │ ├── mercure-jwt.md │ ├── mercure-php.md │ ├── mercure-service.md │ ├── mercure.md │ ├── metadata.yml │ ├── modal-cleanup.md │ ├── modal-frame-close.md │ ├── modal-frame.md │ ├── modal-preview.md │ ├── modal-redirect.md │ ├── native-prefetch.md │ ├── no-preview.md │ ├── organize.md │ ├── prefetch.md │ ├── prevent-frame-rendering.md │ ├── read-more-frame.md │ ├── restore-visit.md │ ├── reviews-frame.md │ ├── reviews-stream-update.md │ ├── reviews-stream.md │ ├── server-frame-redirect.md │ ├── stream-everything.md │ ├── stream-include.md │ ├── streamed-item-highlight.md │ ├── sweet-alert.md │ ├── toast.md │ ├── transition-finish.md │ ├── transitions.md │ └── turbo-stream.md ├── src ├── Controller │ ├── .gitignore │ ├── AdminController.php │ ├── CartController.php │ ├── CheckoutController.php │ ├── ProductController.php │ ├── RegistrationController.php │ └── SecurityController.php ├── DataFixtures │ ├── AppFixtures.php │ └── uploads │ │ └── products │ │ ├── blank-cds.png │ │ ├── dog-lamp.png │ │ ├── floppy-disc.png │ │ ├── hammock.png │ │ ├── indoor-plant.png │ │ ├── inflatable-sofa.png │ │ ├── papers.png │ │ ├── pen.png │ │ ├── popcorn.png │ │ ├── puzzle.png │ │ ├── spigot.png │ │ └── velvis.png ├── Entity │ ├── .gitignore │ ├── Cart.php │ ├── CartItem.php │ ├── Category.php │ ├── Color.php │ ├── Product.php │ ├── Purchase.php │ ├── PurchaseItem.php │ └── User.php ├── Form │ ├── AddItemToCartFormType.php │ ├── CheckoutFormType.php │ └── RegistrationFormType.php ├── Kernel.php ├── Repository │ ├── .gitignore │ ├── CategoryRepository.php │ ├── ColorRepository.php │ ├── ProductRepository.php │ ├── PurchaseItemRepository.php │ ├── PurchaseRepository.php │ └── UserRepository.php ├── Security │ └── LoginFormAuthenticator.php ├── Service │ └── CartStorage.php └── Twig │ ├── CartExtension.php │ └── SerializeExtension.php ├── symfony.lock ├── templates ├── admin │ └── dashboard.html.twig ├── base.html.twig ├── cart │ ├── _featuredSidebar.html.twig │ └── cart.html.twig ├── checkout │ ├── checkout.html.twig │ └── confirmation.html.twig ├── product │ ├── _cart_add_controls.html.twig │ ├── _categoriesSidebar.html.twig │ ├── index.html.twig │ └── show.html.twig ├── registration │ └── register.html.twig └── security │ └── login.html.twig └── tutorial ├── FeaturedProduct.js └── MadeWithLove.js /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | ###> symfony/framework-bundle ### 3 | /.env.local 4 | /.env.local.php 5 | /.env.*.local 6 | /config/secrets/prod/prod.decrypt.private.php 7 | /public/bundles/ 8 | /var/ 9 | /vendor/ 10 | ###< symfony/framework-bundle ### 11 | -------------------------------------------------------------------------------- /_tuts/2ndcontroller-add-cart-list-controller.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/cart-list_controller.js b/assets/controllers/cart-list_controller.js 2 | new file mode 100644 3 | index 0000000..b3f6ff5 4 | --- /dev/null 5 | +++ b/assets/controllers/cart-list_controller.js 6 | @@ -0,0 +1,7 @@ 7 | +import { Controller } from 'stimulus'; 8 | + 9 | +export default class extends Controller { 10 | + connect() { 11 | + console.log('🛒'); 12 | + } 13 | +} 14 | diff --git a/templates/cart/cart.html.twig b/templates/cart/cart.html.twig 15 | index 57bdc0e..c076fbd 100644 16 | --- a/templates/cart/cart.html.twig 17 | +++ b/templates/cart/cart.html.twig 18 | @@ -11,7 +11,10 @@ 19 | 20 |
21 |

Shopping Cart

22 | -
23 | +
27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /_tuts/2ndcontroller-css-fade-out.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/cart-list_controller.js b/assets/controllers/cart-list_controller.js 2 | index 26abeaf..0460715 100644 3 | --- a/assets/controllers/cart-list_controller.js 4 | +++ b/assets/controllers/cart-list_controller.js 5 | @@ -6,6 +6,8 @@ export default class extends Controller { 6 | } 7 | 8 | async removeItem(event) { 9 | + event.currentTarget.classList.add('removing'); 10 | + 11 | const response = await fetch(this.cartRefreshUrlValue); 12 | this.element.innerHTML = await response.text(); 13 | } 14 | diff --git a/assets/styles/app.css b/assets/styles/app.css 15 | index fb48bea..08cf130 100644 16 | --- a/assets/styles/app.css 17 | +++ b/assets/styles/app.css 18 | @@ -86,6 +86,11 @@ h1 { 19 | 20 | .cart .cart-item { 21 | border-bottom: 1px solid #efefee; 22 | + transition: opacity 500ms; 23 | +} 24 | + 25 | +.cart .cart-item.removing { 26 | + opacity: 0; 27 | } 28 | 29 | .color-square { 30 | -------------------------------------------------------------------------------- /_tuts/2ndcontroller-remove-debug.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/submit-confirm_controller.js b/assets/controllers/submit-confirm_controller.js 2 | index c28004c..ef3849e 100644 3 | --- a/assets/controllers/submit-confirm_controller.js 4 | +++ b/assets/controllers/submit-confirm_controller.js 5 | @@ -12,7 +12,7 @@ export default class extends Controller { 6 | } 7 | 8 | connect() { 9 | - useDispatch(this, { debug: true }); 10 | + useDispatch(this); 11 | } 12 | 13 | onSubmit(event) { 14 | -------------------------------------------------------------------------------- /_tuts/2ndcontroller-route-controller-to-partial.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/CartController.php b/src/Controller/CartController.php 2 | index df9e99a..ae46e18 100644 3 | --- a/src/Controller/CartController.php 4 | +++ b/src/Controller/CartController.php 5 | @@ -35,6 +35,16 @@ class CartController extends AbstractController 6 | ]); 7 | } 8 | 9 | + /** 10 | + * @Route("/cart/_list", name="_app_cart_list") 11 | + */ 12 | + public function _shoppingCartList(CartStorage $cartStorage) 13 | + { 14 | + return $this->render('cart/_cartList.html.twig', [ 15 | + 'cart' => $cartStorage->getOrCreateCart(), 16 | + ]); 17 | + } 18 | + 19 | /** 20 | * @Route("/product/{id}", name="app_cart_add_item", methods={"POST"}) 21 | */ 22 | -------------------------------------------------------------------------------- /_tuts/3rdparty-make-controller-lazy.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/bootstrap.js b/assets/bootstrap.js 2 | index 08f4645..f084d9f 100644 3 | --- a/assets/bootstrap.js 4 | +++ b/assets/bootstrap.js 5 | @@ -1,5 +1,5 @@ 6 | import { startStimulusApp } from '@symfony/stimulus-bridge'; 7 | -import { Autocomplete } from 'stimulus-autocomplete'; 8 | +import { Autocomplete } from '@symfony/stimulus-bridge/lazy-controller-loader?lazy=true&export=Autocomplete!stimulus-autocomplete'; 9 | 10 | // Registers Stimulus controllers from controllers.json and in the controllers/ directory 11 | export const app = startStimulusApp(require.context( 12 | -------------------------------------------------------------------------------- /_tuts/3rdparty-register-controller.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/bootstrap.js b/assets/bootstrap.js 2 | index cb771d2..08f4645 100644 3 | --- a/assets/bootstrap.js 4 | +++ b/assets/bootstrap.js 5 | @@ -1,4 +1,5 @@ 6 | import { startStimulusApp } from '@symfony/stimulus-bridge'; 7 | +import { Autocomplete } from 'stimulus-autocomplete'; 8 | 9 | // Registers Stimulus controllers from controllers.json and in the controllers/ directory 10 | export const app = startStimulusApp(require.context( 11 | @@ -6,3 +7,4 @@ export const app = startStimulusApp(require.context( 12 | true, 13 | /\.(j|t)sx?$/ 14 | )); 15 | +app.register('autocomplete', Autocomplete); 16 | -------------------------------------------------------------------------------- /_tuts/3rdparty-role-option.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_searchPreview.html.twig b/templates/product/_searchPreview.html.twig 2 | index 7d1b0b9..37faae2 100644 3 | --- a/templates/product/_searchPreview.html.twig 4 | +++ b/templates/product/_searchPreview.html.twig 5 | @@ -1,6 +1,7 @@ 6 |
7 | {% for product in products %} 8 | 13 | @@ -17,6 +18,6 @@ 14 |
15 | 16 | {% else %} 17 | -
No results found!
18 | +
No results found!
19 | {% endfor %} 20 |
21 | -------------------------------------------------------------------------------- /_tuts/3rdparty-sending-preview.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/index.html.twig b/templates/product/index.html.twig 2 | index cf3265a..13840ad 100644 3 | --- a/templates/product/index.html.twig 4 | +++ b/templates/product/index.html.twig 5 | @@ -39,7 +39,7 @@ 6 |
13 | 7 | 8 |
9 | + 12 | + 13 | +
14 | + 15 | I have been clicked 16 | 0 17 | times! 18 | -------------------------------------------------------------------------------- /_tuts/actions-remove-connect.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/counter_controller.js b/assets/controllers/counter_controller.js 2 | index b814859..e9fd157 100644 3 | --- a/assets/controllers/counter_controller.js 4 | +++ b/assets/controllers/counter_controller.js 5 | @@ -1,12 +1,9 @@ 6 | import { Controller } from 'stimulus'; 7 | 8 | export default class extends Controller { 9 | + count = 0; 10 | static targets = ['count']; 11 | 12 | - connect() { 13 | - this.count = 0; 14 | - } 15 | - 16 | increment() { 17 | this.count++; 18 | this.countTarget.innerText = this.count; 19 | -------------------------------------------------------------------------------- /_tuts/actions-use-default-action.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/index.html.twig b/templates/product/index.html.twig 2 | index ff702cd..d44eb6a 100644 3 | --- a/templates/product/index.html.twig 4 | +++ b/templates/product/index.html.twig 5 | @@ -11,7 +11,7 @@ 6 | 7 |
8 |
26 |
27 | -------------------------------------------------------------------------------- /_tuts/chartjsextend-change-chart-in-5-seconds.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/admin-chartjs_controller.js b/assets/controllers/admin-chartjs_controller.js 2 | index bdb1830..20ee8b1 100644 3 | --- a/assets/controllers/admin-chartjs_controller.js 4 | +++ b/assets/controllers/admin-chartjs_controller.js 5 | @@ -2,6 +2,15 @@ import { Controller } from 'stimulus'; 6 | 7 | export default class extends Controller { 8 | onChartConnect(event) { 9 | - console.log(event); 10 | + this.chart = event.detail.chart; 11 | + 12 | + setTimeout(() => { 13 | + this.setNewData(); 14 | + }, 5000) 15 | + } 16 | + 17 | + setNewData() { 18 | + this.chart.data.datasets[0].data[2] = 30; 19 | + this.chart.update(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /_tuts/colorselector-add-click.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index bc7d58c..60b4029 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -8,7 +8,7 @@ 6 | {% for color in addToCartForm.vars.data.product.colors %} 7 | 13 | {% endfor %} 14 | -------------------------------------------------------------------------------- /_tuts/colorselector-add-missing-static.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/color-square_controller.js b/assets/controllers/color-square_controller.js 2 | index 6a1cac9..2449e7c 100644 3 | --- a/assets/controllers/color-square_controller.js 4 | +++ b/assets/controllers/color-square_controller.js 5 | @@ -1,7 +1,7 @@ 6 | import { Controller } from 'stimulus'; 7 | 8 | export default class extends Controller { 9 | - targets = ['colorSquare'] 10 | + static targets = ['colorSquare'] 11 | 12 | selectColor(event) { 13 | console.log(this.colorSquareTargets); 14 | -------------------------------------------------------------------------------- /_tuts/colorselector-add-selected-class.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/color-square_controller.js b/assets/controllers/color-square_controller.js 2 | index 0b8aacd..49051f0 100644 3 | --- a/assets/controllers/color-square_controller.js 4 | +++ b/assets/controllers/color-square_controller.js 5 | @@ -2,6 +2,6 @@ import { Controller } from 'stimulus'; 6 | 7 | export default class extends Controller { 8 | selectColor(event) { 9 | - console.log(event); 10 | + event.currentTarget.classList.add('selected'); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /_tuts/colorselector-change-to-buttons.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index 60b4029..7578dcf 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -6,11 +6,12 @@ 6 | {{ form_widget(addToCartForm.color) }} 7 | 8 | {% for color in addToCartForm.vars.data.product.colors %} 9 | - 18 | + > 19 | {% endfor %} 20 |
21 | {% endif %} 22 | -------------------------------------------------------------------------------- /_tuts/colorselector-loop-and-print-out-hex.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index 1f687ae..8966036 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -3,6 +3,10 @@ 6 | }) }} 7 | {% if addToCartForm.color is defined %} 8 | {{ form_widget(addToCartForm.color) }} 9 | + 10 | + {% for color in addToCartForm.vars.data.product.colors %} 11 | +
#{{ color.hexColor }}
12 | + {% endfor %} 13 | {% endif %} 14 | 15 | {{ form_widget(addToCartForm.quantity, { 16 | -------------------------------------------------------------------------------- /_tuts/colorselector-removing-border-on-others.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/color-square_controller.js b/assets/controllers/color-square_controller.js 2 | index 2449e7c..147068b 100644 3 | --- a/assets/controllers/color-square_controller.js 4 | +++ b/assets/controllers/color-square_controller.js 5 | @@ -4,7 +4,9 @@ export default class extends Controller { 6 | static targets = ['colorSquare'] 7 | 8 | selectColor(event) { 9 | - console.log(this.colorSquareTargets); 10 | + this.colorSquareTargets.forEach((element) => { 11 | + element.classList.remove('selected'); 12 | + }); 13 | 14 | event.currentTarget.classList.add('selected'); 15 | } 16 | -------------------------------------------------------------------------------- /_tuts/colorselector-render-color-boxes.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index 8966036..7131b2b 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -5,7 +5,10 @@ 6 | {{ form_widget(addToCartForm.color) }} 7 | 8 | {% for color in addToCartForm.vars.data.product.colors %} 9 | -
#{{ color.hexColor }}
10 | + 14 | {% endfor %} 15 | {% endif %} 16 | 17 | -------------------------------------------------------------------------------- /_tuts/controllerbasics-add-2nd-element.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/index.html.twig b/templates/product/index.html.twig 2 | index 4738427..6ed1bb1 100644 3 | --- a/templates/product/index.html.twig 4 | +++ b/templates/product/index.html.twig 5 | @@ -4,6 +4,7 @@ 6 |
7 |
8 | 12 | 13 | -------------------------------------------------------------------------------- /_tuts/controllerbasics-add-first-element.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/index.html.twig b/templates/product/index.html.twig 2 | index eb6b5db..4738427 100644 3 | --- a/templates/product/index.html.twig 4 | +++ b/templates/product/index.html.twig 5 | @@ -9,6 +9,8 @@ 6 | 7 |
8 | 9 | +
10 | + 11 |
12 |
13 |

14 | -------------------------------------------------------------------------------- /_tuts/controllerbasics-create-first-controller.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/counter_controller.js b/assets/controllers/counter_controller.js 2 | new file mode 100644 3 | index 0000000..221f524 4 | --- /dev/null 5 | +++ b/assets/controllers/counter_controller.js 6 | @@ -0,0 +1,7 @@ 7 | +import { Controller } from 'stimulus'; 8 | + 9 | +export default class extends Controller { 10 | + connect() { 11 | + this.element.innerHTML = 'You have clicked me 0 times 😢'; 12 | + } 13 | +} 14 | -------------------------------------------------------------------------------- /_tuts/controllerbasics-delete-hello-controller.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/hello_controller.js b/assets/controllers/hello_controller.js 2 | deleted file mode 100644 3 | index 8c79f65..0000000 4 | --- a/assets/controllers/hello_controller.js 5 | +++ /dev/null 6 | @@ -1,16 +0,0 @@ 7 | -import { Controller } from 'stimulus'; 8 | - 9 | -/* 10 | - * This is an example Stimulus controller! 11 | - * 12 | - * Any element with a data-controller="hello" attribute will cause 13 | - * this controller to be executed. The name "hello" comes from the filename: 14 | - * hello_controller.js -> "hello" 15 | - * 16 | - * Delete this file or adapt it for your use! 17 | - */ 18 | -export default class extends Controller { 19 | - connect() { 20 | - this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js'; 21 | - } 22 | -} 23 | -------------------------------------------------------------------------------- /_tuts/controllerbasics-increment-on-click.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/counter_controller.js b/assets/controllers/counter_controller.js 2 | index 221f524..76f4a13 100644 3 | --- a/assets/controllers/counter_controller.js 4 | +++ b/assets/controllers/counter_controller.js 5 | @@ -3,5 +3,11 @@ import { Controller } from 'stimulus'; 6 | export default class extends Controller { 7 | connect() { 8 | this.element.innerHTML = 'You have clicked me 0 times 😢'; 9 | + this.count = 0; 10 | + 11 | + this.element.addEventListener('click', () => { 12 | + this.count++; 13 | + this.element.innerHTML = this.count; 14 | + }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /_tuts/dataset-add-data-color-id.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/color-square_controller.js b/assets/controllers/color-square_controller.js 2 | index 147068b..250485d 100644 3 | --- a/assets/controllers/color-square_controller.js 4 | +++ b/assets/controllers/color-square_controller.js 5 | @@ -9,5 +9,6 @@ export default class extends Controller { 6 | }); 7 | 8 | event.currentTarget.classList.add('selected'); 9 | + console.log(event.currentTarget.dataset.colorId); 10 | } 11 | } 12 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 13 | index 6a6b49d..7637f22 100644 14 | --- a/templates/product/_cart_add_controls.html.twig 15 | +++ b/templates/product/_cart_add_controls.html.twig 16 | @@ -11,6 +11,7 @@ 17 | type="button" 18 | data-action="color-square#selectColor" 19 | data-color-square-target="colorSquare" 20 | + data-color-id="{{ color.id }}" 21 | style="background-color: rgb({{ color.red }}, {{ color.green }}, {{ color.blue }});" 22 | > 23 | {% endfor %} 24 | -------------------------------------------------------------------------------- /_tuts/dataset-hide-select-on-load.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/color-square_controller.js b/assets/controllers/color-square_controller.js 2 | index f121846..91e6872 100644 3 | --- a/assets/controllers/color-square_controller.js 4 | +++ b/assets/controllers/color-square_controller.js 5 | @@ -3,6 +3,10 @@ import { Controller } from 'stimulus'; 6 | export default class extends Controller { 7 | static targets = ['colorSquare', 'select'] 8 | 9 | + connect() { 10 | + this.selectTarget.classList.add('d-none'); 11 | + } 12 | + 13 | selectColor(event) { 14 | this.colorSquareTargets.forEach((element) => { 15 | element.classList.remove('selected'); 16 | -------------------------------------------------------------------------------- /_tuts/disable-add-data-turbo-false.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/base.html.twig b/templates/base.html.twig 2 | index 66f4f91..9c89c00 100644 3 | --- a/templates/base.html.twig 4 | +++ b/templates/base.html.twig 5 | @@ -11,7 +11,7 @@ 6 | {{ encore_entry_script_tags('app') }} 7 | {% endblock %} 8 | 9 | - 10 | + 11 |
12 |
13 |
7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /_tuts/drivejs-remove-extra-js.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/app.js b/assets/app.js 2 | index b054a2e..bb0a6aa 100644 3 | --- a/assets/app.js 4 | +++ b/assets/app.js 5 | @@ -10,10 +10,3 @@ import './styles/app.css'; 6 | 7 | // start the Stimulus application 8 | import './bootstrap'; 9 | - 10 | -import $ from 'jquery'; 11 | - 12 | -$(document).ready(() => { 13 | - console.log('page is ready!'); 14 | -}) 15 | -console.log('script is done!'); 16 | diff --git a/templates/base.html.twig b/templates/base.html.twig 17 | index ad70a34..66f4f91 100644 18 | --- a/templates/base.html.twig 19 | +++ b/templates/base.html.twig 20 | @@ -79,11 +79,5 @@ 21 | {{ stimulus_controller('made-with-love') }} 22 | > 23 |

24 | - 25 | - 30 | 31 | 32 | -------------------------------------------------------------------------------- /_tuts/entitybroadcast-add-annotation.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Entity/Review.php b/src/Entity/Review.php 2 | index c032783..9d71b03 100644 3 | --- a/src/Entity/Review.php 4 | +++ b/src/Entity/Review.php 5 | @@ -5,9 +5,11 @@ namespace App\Entity; 6 | use App\Repository\ReviewRepository; 7 | use Doctrine\ORM\Mapping as ORM; 8 | use Symfony\Component\Validator\Constraints as Assert; 9 | +use Symfony\UX\Turbo\Attribute\Broadcast; 10 | 11 | /** 12 | * @ORM\Entity(repositoryClass=ReviewRepository::class) 13 | + * @Broadcast() 14 | */ 15 | class Review 16 | { 17 | -------------------------------------------------------------------------------- /_tuts/entitybroadcast-add-dummy-template.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/broadcast/Review.stream.html.twig b/templates/broadcast/Review.stream.html.twig 2 | new file mode 100644 3 | index 0000000..b863f50 4 | --- /dev/null 5 | +++ b/templates/broadcast/Review.stream.html.twig 6 | @@ -0,0 +1,11 @@ 7 | +{% block create %} 8 | + CREATE! 9 | +{% endblock %} 10 | + 11 | +{% block update %} 12 | + UPDATE! 13 | +{% endblock %} 14 | + 15 | +{% block remove %} 16 | + REMOVE! 17 | +{% endblock %} 18 | -------------------------------------------------------------------------------- /_tuts/entitybroadcast-add-listen-in-tpl.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_reviews.html.twig b/templates/product/_reviews.html.twig 2 | index 5a452bd..f5bd9b0 100644 3 | --- a/templates/product/_reviews.html.twig 4 | +++ b/templates/product/_reviews.html.twig 5 | @@ -1,4 +1,5 @@ 6 |
7 | +
8 | 9 | {{ include('product/_reviews_list.html.twig') }} 10 | 11 | -------------------------------------------------------------------------------- /_tuts/entitybroadcast-add-remove.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/broadcast/Review.stream.html.twig b/templates/broadcast/Review.stream.html.twig 2 | index a3f2659..d1d1c97 100644 3 | --- a/templates/broadcast/Review.stream.html.twig 4 | +++ b/templates/broadcast/Review.stream.html.twig 5 | @@ -28,5 +28,5 @@ 6 | {% endblock %} 7 | 8 | {% block remove %} 9 | - REMOVE! 10 | + 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /_tuts/entitybroadcast-add-update.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/broadcast/Review.stream.html.twig b/templates/broadcast/Review.stream.html.twig 2 | index e2fbcc7..a3f2659 100644 3 | --- a/templates/broadcast/Review.stream.html.twig 4 | +++ b/templates/broadcast/Review.stream.html.twig 5 | @@ -18,7 +18,13 @@ 6 | {% endblock %} 7 | 8 | {% block update %} 9 | - UPDATE! 10 | + 11 | + 16 | + 17 | {% endblock %} 18 | 19 | {% block remove %} 20 | diff --git a/templates/product/_review.html.twig b/templates/product/_review.html.twig 21 | index 320563d..b30c55b 100644 22 | --- a/templates/product/_review.html.twig 23 | +++ b/templates/product/_review.html.twig 24 | @@ -1,4 +1,5 @@ 25 |
'onKernelResponse', 24 | + ]; 25 | + } 26 | +} 27 | -------------------------------------------------------------------------------- /_tuts/fixredirect-listen-to-before-fetch-request.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/turbo/turbo-helper.js b/assets/turbo/turbo-helper.js 2 | index bd82bfd..cef35bf 100644 3 | --- a/assets/turbo/turbo-helper.js 4 | +++ b/assets/turbo/turbo-helper.js 5 | @@ -15,6 +15,10 @@ const TurboHelper = class { 6 | submitter.classList.add('turbo-submit-disabled'); 7 | }) 8 | 9 | + document.addEventListener('turbo:before-fetch-request', (event) => { 10 | + this.beforeFetchRequest(event); 11 | + }); 12 | + 13 | document.addEventListener('turbo:before-fetch-response', (event) => { 14 | this.beforeFetchResponse(event); 15 | }); 16 | @@ -101,6 +105,10 @@ const TurboHelper = class { 17 | }); 18 | } 19 | 20 | + beforeFetchRequest(event) { 21 | + console.log(event); 22 | + } 23 | + 24 | beforeFetchResponse(event) { 25 | const fetchResponse = event.detail.fetchResponse; 26 | if (!fetchResponse.succeeded || !fetchResponse.redirected) { 27 | -------------------------------------------------------------------------------- /_tuts/fixredirect-read-header-in-js.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/turbo/turbo-helper.js b/assets/turbo/turbo-helper.js 2 | index 4324eb2..54dedb0 100644 3 | --- a/assets/turbo/turbo-helper.js 4 | +++ b/assets/turbo/turbo-helper.js 5 | @@ -122,22 +122,14 @@ const TurboHelper = class { 6 | 7 | beforeFetchResponse(event) { 8 | const fetchResponse = event.detail.fetchResponse; 9 | - if (!fetchResponse.succeeded || !fetchResponse.redirected) { 10 | - return; 11 | - } 12 | - 13 | - if (!this.getCurrentFrame() || !this.getCurrentFrame().dataset.turboFormRedirect) { 14 | + const redirectLocation = fetchResponse.response.headers.get('Turbo-Location'); 15 | + if (!redirectLocation) { 16 | return; 17 | } 18 | 19 | event.preventDefault(); 20 | Turbo.clearCache(); 21 | - 22 | - Turbo.visit(fetchResponse.location); 23 | - } 24 | - 25 | - getCurrentFrame() { 26 | - return document.querySelector('turbo-frame[busy]'); 27 | + Turbo.visit(redirectLocation); 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /_tuts/forms-add-422-by-hand.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/ProductAdminController.php b/src/Controller/ProductAdminController.php 2 | index fbc0ba2..4d16bb1 100644 3 | --- a/src/Controller/ProductAdminController.php 4 | +++ b/src/Controller/ProductAdminController.php 5 | @@ -78,7 +78,7 @@ class ProductAdminController extends AbstractController 6 | return $this->render('product_admin/edit.html.twig', [ 7 | 'product' => $product, 8 | 'form' => $form->createView(), 9 | - ]); 10 | + ], new Response(null, $form->isSubmitted() && !$form->isValid() ? 422 : 200)); 11 | } 12 | 13 | /** 14 | -------------------------------------------------------------------------------- /_tuts/forms-renderform.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/ProductAdminController.php b/src/Controller/ProductAdminController.php 2 | index 4d16bb1..2f347d2 100644 3 | --- a/src/Controller/ProductAdminController.php 4 | +++ b/src/Controller/ProductAdminController.php 5 | @@ -75,10 +75,10 @@ class ProductAdminController extends AbstractController 6 | return $this->redirectToRoute('product_admin_index'); 7 | } 8 | 9 | - return $this->render('product_admin/edit.html.twig', [ 10 | + return $this->renderForm('product_admin/edit.html.twig', [ 11 | 'product' => $product, 12 | - 'form' => $form->createView(), 13 | - ], new Response(null, $form->isSubmitted() && !$form->isValid() ? 422 : 200)); 14 | + 'form' => $form, 15 | + ]); 16 | } 17 | 18 | /** 19 | -------------------------------------------------------------------------------- /_tuts/framebusy-add-busy-css.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/CartController.php b/src/Controller/CartController.php 2 | index b32cfe2..f7d055a 100644 3 | --- a/src/Controller/CartController.php 4 | +++ b/src/Controller/CartController.php 5 | @@ -38,6 +38,8 @@ class CartController extends AbstractController 6 | 'product' => $featuredProduct, 7 | ]); 8 | 9 | + sleep(3); 10 | + 11 | return $this->renderForm('cart/_featuredSidebar.html.twig', [ 12 | 'featuredProduct' => $featuredProduct, 13 | 'addToCartForm' => $addToCartForm, 14 | -------------------------------------------------------------------------------- /_tuts/framebusy-add-display-block.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/styles/app.css b/assets/styles/app.css 2 | index f3727ae..624e9f1 100644 3 | --- a/assets/styles/app.css 4 | +++ b/assets/styles/app.css 5 | @@ -16,6 +16,9 @@ body.turbo-loading { 6 | opacity: .2; 7 | } 8 | */ 9 | +turbo-frame { 10 | + display: block; 11 | +} 12 | turbo-frame[busy] { 13 | opacity: .2; 14 | } 15 | -------------------------------------------------------------------------------- /_tuts/framebusy-make-effect-less-dramatic.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/styles/app.css b/assets/styles/app.css 2 | index 624e9f1..c92cf62 100644 3 | --- a/assets/styles/app.css 4 | +++ b/assets/styles/app.css 5 | @@ -20,7 +20,7 @@ turbo-frame { 6 | display: block; 7 | } 8 | turbo-frame[busy] { 9 | - opacity: .2; 10 | + opacity: .7; 11 | } 12 | turbo-frame[busy] .frame-loading-hide, turbo-frame .frame-loading-show { 13 | display: none; 14 | diff --git a/src/Controller/CartController.php b/src/Controller/CartController.php 15 | index f7d055a..b32cfe2 100644 16 | --- a/src/Controller/CartController.php 17 | +++ b/src/Controller/CartController.php 18 | @@ -38,8 +38,6 @@ class CartController extends AbstractController 19 | 'product' => $featuredProduct, 20 | ]); 21 | 22 | - sleep(3); 23 | - 24 | return $this->renderForm('cart/_featuredSidebar.html.twig', [ 25 | 'featuredProduct' => $featuredProduct, 26 | 'addToCartForm' => $addToCartForm, 27 | -------------------------------------------------------------------------------- /_tuts/framebusy-set-low-opacity.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/styles/app.css b/assets/styles/app.css 2 | index bc83f84..f3727ae 100644 3 | --- a/assets/styles/app.css 4 | +++ b/assets/styles/app.css 5 | @@ -16,6 +16,9 @@ body.turbo-loading { 6 | opacity: .2; 7 | } 8 | */ 9 | +turbo-frame[busy] { 10 | + opacity: .2; 11 | +} 12 | turbo-frame[busy] .frame-loading-hide, turbo-frame .frame-loading-show { 13 | display: none; 14 | } 15 | -------------------------------------------------------------------------------- /_tuts/frameredirect-add-data-turbo-form-redirect.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/_modal.html.twig b/templates/_modal.html.twig 2 | index f907c36..62bf84d 100644 3 | --- a/templates/_modal.html.twig 4 | +++ b/templates/_modal.html.twig 5 | @@ -17,6 +17,7 @@ 6 | src="{{ modalSrc }}" 7 | id="{{ id }}" 8 | loading="lazy" 9 | + data-turbo-form-redirect="true" 10 | > 11 | {{ modalContent|default('Loading...') }} 12 | 13 | -------------------------------------------------------------------------------- /_tuts/frameredirect-add-getcurrentframe.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/turbo/turbo-helper.js b/assets/turbo/turbo-helper.js 2 | index 38b4ee0..fe25b14 100644 3 | --- a/assets/turbo/turbo-helper.js 4 | +++ b/assets/turbo/turbo-helper.js 5 | @@ -112,6 +112,10 @@ const TurboHelper = class { 6 | Turbo.visit(fetchResponse.location); 7 | } 8 | } 9 | + 10 | + getCurrentFrame() { 11 | + return document.querySelector('turbo-frame[busy]'); 12 | + } 13 | } 14 | 15 | export default new TurboHelper(); 16 | -------------------------------------------------------------------------------- /_tuts/frameredirect-clear-cache-manually.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/turbo/turbo-helper.js b/assets/turbo/turbo-helper.js 2 | index dc6817f..c5e9bcf 100644 3 | --- a/assets/turbo/turbo-helper.js 4 | +++ b/assets/turbo/turbo-helper.js 5 | @@ -112,6 +112,7 @@ const TurboHelper = class { 6 | } 7 | 8 | event.preventDefault(); 9 | + Turbo.clearCache(); 10 | Turbo.visit(fetchResponse.location); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /_tuts/frameredirect-data-turbo-form-redirect-again.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index 774f929..dfd0166 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -1,4 +1,7 @@ 6 | - 7 | + 11 | {{ form_start(addToCartForm, { 12 | attr: { class: 'cart-add-controls d-flex align-items-center justify-content-baseline' } 13 | }) }} 14 | -------------------------------------------------------------------------------- /_tuts/frameredirect-finish-frame-function.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/turbo/turbo-helper.js b/assets/turbo/turbo-helper.js 2 | index fe25b14..dc6817f 100644 3 | --- a/assets/turbo/turbo-helper.js 4 | +++ b/assets/turbo/turbo-helper.js 5 | @@ -102,15 +102,17 @@ const TurboHelper = class { 6 | } 7 | 8 | beforeFetchResponse(event) { 9 | - if (!this.modal || !this.modal._isShown) { 10 | + const fetchResponse = event.detail.fetchResponse; 11 | + if (!fetchResponse.succeeded || !fetchResponse.redirected) { 12 | return; 13 | } 14 | 15 | - const fetchResponse = event.detail.fetchResponse; 16 | - if (fetchResponse.succeeded && fetchResponse.redirected) { 17 | - event.preventDefault(); 18 | - Turbo.visit(fetchResponse.location); 19 | + if (!this.getCurrentFrame() || !this.getCurrentFrame().dataset.turboFormRedirect) { 20 | + return; 21 | } 22 | + 23 | + event.preventDefault(); 24 | + Turbo.visit(fetchResponse.location); 25 | } 26 | 27 | getCurrentFrame() { 28 | -------------------------------------------------------------------------------- /_tuts/frameredirect-frame-around-cart-controls.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/_cart_add_controls.html.twig b/templates/product/_cart_add_controls.html.twig 2 | index f0deedd..774f929 100644 3 | --- a/templates/product/_cart_add_controls.html.twig 4 | +++ b/templates/product/_cart_add_controls.html.twig 5 | @@ -1,3 +1,4 @@ 6 | + 7 | {{ form_start(addToCartForm, { 8 | attr: { class: 'cart-add-controls d-flex align-items-center justify-content-baseline' } 9 | }) }} 10 | @@ -40,3 +41,4 @@ 11 | {% endif %} 12 | {{ form_errors(addToCartForm.quantity) }} 13 |
14 | + 15 | -------------------------------------------------------------------------------- /_tuts/inlineedit-add-an-edit-button.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/show.html.twig b/templates/product/show.html.twig 2 | index 231ba15..af23ef8 100644 3 | --- a/templates/product/show.html.twig 4 | +++ b/templates/product/show.html.twig 5 | @@ -14,7 +14,17 @@ 6 |
7 |
8 |
9 | -

{{ product.name }}

10 | +

11 | + {{ product.name }} 12 | + {% if is_granted('ROLE_ADMIN') %} 13 | + Edit 19 | + {% endif %} 20 | +

21 |
22 | {{ product.description }} 23 |
24 | -------------------------------------------------------------------------------- /_tuts/inlineedit-add-frame-target-to-edit.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/show.html.twig b/templates/product/show.html.twig 2 | index 24799b1..419e0b9 100644 3 | --- a/templates/product/show.html.twig 4 | +++ b/templates/product/show.html.twig 5 | @@ -22,6 +22,7 @@ 6 | id: product.id 7 | }) }}" 8 | class="btn btn-sm btn-secondary" 9 | + data-turbo-frame="product-info" 10 | >Edit 11 | {% endif %} 12 | 13 | -------------------------------------------------------------------------------- /_tuts/inlineedit-conditionally-add-form-target.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/ProductAdminController.php b/src/Controller/ProductAdminController.php 2 | index a32024c..7e33a08 100644 3 | --- a/src/Controller/ProductAdminController.php 4 | +++ b/src/Controller/ProductAdminController.php 5 | @@ -83,6 +83,7 @@ class ProductAdminController extends AbstractController 6 | return $this->renderForm('product_admin/edit.html.twig', [ 7 | 'product' => $product, 8 | 'form' => $form, 9 | + 'formTarget' => $request->headers->get('Turbo-Frame', '_top') 10 | ]); 11 | } 12 | 13 | diff --git a/templates/product_admin/_form.html.twig b/templates/product_admin/_form.html.twig 14 | index f8d464b..cdd1640 100644 15 | --- a/templates/product_admin/_form.html.twig 16 | +++ b/templates/product_admin/_form.html.twig 17 | @@ -1,5 +1,5 @@ 18 | {{ form_start(form, { 19 | - attr: { 'data-turbo-frame': 'product-info' } 20 | + attr: { 'data-turbo-frame': formTarget|default('_top') } 21 | }) }} 22 | {{ form_widget(form) }} 23 | 24 | -------------------------------------------------------------------------------- /_tuts/inlineedit-make-form-target-frame.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product_admin/_form.html.twig b/templates/product_admin/_form.html.twig 2 | index eec6f04..f8d464b 100644 3 | --- a/templates/product_admin/_form.html.twig 4 | +++ b/templates/product_admin/_form.html.twig 5 | @@ -1,4 +1,6 @@ 6 | -{{ form_start(form) }} 7 | +{{ form_start(form, { 8 | + attr: { 'data-turbo-frame': 'product-info' } 9 | +}) }} 10 | {{ form_widget(form) }} 11 | 12 | {{ form_end(form) }} 13 | -------------------------------------------------------------------------------- /_tuts/inlineedit-redirect-back-to-show-page.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/ProductAdminController.php b/src/Controller/ProductAdminController.php 2 | index a4e128d..a32024c 100644 3 | --- a/src/Controller/ProductAdminController.php 4 | +++ b/src/Controller/ProductAdminController.php 5 | @@ -75,7 +75,9 @@ class ProductAdminController extends AbstractController 6 | if ($form->isSubmitted() && $form->isValid()) { 7 | $this->getDoctrine()->getManager()->flush(); 8 | 9 | - return $this->redirectToRoute('product_admin_index'); 10 | + return $this->redirectToRoute('app_product', [ 11 | + 'id' => $product->getId(), 12 | + ]); 13 | } 14 | 15 | return $this->renderForm('product_admin/edit.html.twig', [ 16 | -------------------------------------------------------------------------------- /_tuts/inlineedit-use-turbo-frame-for-row.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/show.html.twig b/templates/product/show.html.twig 2 | index 0a26386..24799b1 100644 3 | --- a/templates/product/show.html.twig 4 | +++ b/templates/product/show.html.twig 5 | @@ -1,8 +1,7 @@ 6 | {% extends 'product/productBase.html.twig' %} 7 | 8 | {% block productBody %} 9 | -
10 | - 11 | + 12 |
13 | {{ product.name }} 17 |
18 |
19 | - 20 | -
21 | + 22 | 23 |
24 | 25 | -------------------------------------------------------------------------------- /_tuts/inlineedit-wrap-form-in-frame.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product_admin/edit.html.twig b/templates/product_admin/edit.html.twig 2 | index 4ff3b1b..65f8be0 100644 3 | --- a/templates/product_admin/edit.html.twig 4 | +++ b/templates/product_admin/edit.html.twig 5 | @@ -5,11 +5,13 @@ 6 | {% block body %} 7 |
8 | Back to list 9 | -
10 | -

Edit Product

11 | - {{ include('product_admin/_delete_form.html.twig') }} 12 | -
13 | + 14 | +
15 | +

Edit Product

16 | + {{ include('product_admin/_delete_form.html.twig') }} 17 | +
18 | 19 | - {{ include('product_admin/_form.html.twig', {'button_label': 'Update'}) }} 20 | + {{ include('product_admin/_form.html.twig', {'button_label': 'Update'}) }} 21 | +
22 |
23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /_tuts/inlineedit-wrap-product-show-in-frame.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/show.html.twig b/templates/product/show.html.twig 2 | index af23ef8..0a26386 100644 3 | --- a/templates/product/show.html.twig 4 | +++ b/templates/product/show.html.twig 5 | @@ -2,6 +2,7 @@ 6 | 7 | {% block productBody %} 8 |
9 | + 10 |
11 | {{ product.name }} 15 |
16 |
17 | + 18 |
19 | 20 |
21 | -------------------------------------------------------------------------------- /_tuts/installencore-add-encore-twig-functions.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/base.html.twig b/templates/base.html.twig 2 | index e311dd5..4ce2abb 100644 3 | --- a/templates/base.html.twig 4 | +++ b/templates/base.html.twig 5 | @@ -7,9 +7,12 @@ 6 | 7 | 8 | 9 | + {{ encore_entry_link_tags('app') }} 10 | {% endblock %} 11 | 12 | - {% block javascripts %}{% endblock %} 13 | + {% block javascripts %} 14 | + {{ encore_entry_script_tags('app') }} 15 | + {% endblock %} 16 | 17 | 18 |
19 | -------------------------------------------------------------------------------- /_tuts/installencore-import-bootstrap.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/styles/app.css b/assets/styles/app.css 2 | index 849b9eb..fb48bea 100644 3 | --- a/assets/styles/app.css 4 | +++ b/assets/styles/app.css 5 | @@ -1,3 +1,4 @@ 6 | +@import '~bootstrap'; 7 | @import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap'); 8 | 9 | body { 10 | diff --git a/templates/base.html.twig b/templates/base.html.twig 11 | index 73307af..cbfb974 100644 12 | --- a/templates/base.html.twig 13 | +++ b/templates/base.html.twig 14 | @@ -4,8 +4,6 @@ 15 | 16 | {% block title %}MVP Office Supplies{% endblock %} 17 | {% block stylesheets %} 18 | - 19 | - 20 | {{ encore_entry_link_tags('app') }} 21 | {% endblock %} 22 | 23 | -------------------------------------------------------------------------------- /_tuts/jquery-clear-modal-to-start.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/modal-form_controller.js b/assets/controllers/modal-form_controller.js 2 | index bdbe49e..d51b37e 100644 3 | --- a/assets/controllers/modal-form_controller.js 4 | +++ b/assets/controllers/modal-form_controller.js 5 | @@ -9,6 +9,7 @@ export default class extends Controller { 6 | } 7 | 8 | async openModal(event) { 9 | + this.modalBodyTarget.innerHTML = 'Loading...'; 10 | const modal = new Modal(this.modalTarget); 11 | modal.show(); 12 | 13 | -------------------------------------------------------------------------------- /_tuts/jquery-hide-button.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/styles/app.css b/assets/styles/app.css 2 | index 08cf130..4b25f73 100644 3 | --- a/assets/styles/app.css 4 | +++ b/assets/styles/app.css 5 | @@ -147,3 +147,7 @@ h1 { 6 | .sidebar .nav-link.active .feather { 7 | color: inherit; 8 | } 9 | + 10 | +.modal-body button { 11 | + display: none; 12 | +} 13 | -------------------------------------------------------------------------------- /_tuts/jquery-install-it.diff: -------------------------------------------------------------------------------- 1 | diff --git a/package.json b/package.json 2 | index 5fa1f17..ea4b8cc 100644 3 | --- a/package.json 4 | +++ b/package.json 5 | @@ -7,6 +7,7 @@ 6 | "@symfony/webpack-encore": "^1.0.0", 7 | "bootstrap": "^5.0.0-beta2", 8 | "core-js": "^3.0.0", 9 | + "jquery": "^3.6.0", 10 | "react": "^17.0.1", 11 | "react-dom": "^17.0.1", 12 | "regenerator-runtime": "^0.13.2", 13 | diff --git a/yarn.lock b/yarn.lock 14 | index 8a1ba0a..605e938 100644 15 | --- a/yarn.lock 16 | +++ b/yarn.lock 17 | @@ -3205,6 +3205,11 @@ jest-worker@^26.3.0, jest-worker@^26.6.2: 18 | merge-stream "^2.0.0" 19 | supports-color "^7.0.0" 20 | 21 | +jquery@^3.6.0: 22 | + version "3.6.0" 23 | + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" 24 | + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== 25 | + 26 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 27 | version "4.0.0" 28 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 29 | -------------------------------------------------------------------------------- /_tuts/jquery-return-form-partial.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/ProductAdminController.php b/src/Controller/ProductAdminController.php 2 | index 7266624..b6aa7fa 100644 3 | --- a/src/Controller/ProductAdminController.php 4 | +++ b/src/Controller/ProductAdminController.php 5 | @@ -42,7 +42,9 @@ class ProductAdminController extends AbstractController 6 | return $this->redirectToRoute('product_admin_index'); 7 | } 8 | 9 | - return $this->render('product_admin/new.html.twig', [ 10 | + $template = $request->isXmlHttpRequest() ? '_form.html.twig' : 'new.html.twig'; 11 | + 12 | + return $this->render('product_admin/' . $template, [ 13 | 'product' => $product, 14 | 'form' => $form->createView(), 15 | ]); 16 | -------------------------------------------------------------------------------- /_tuts/jquery-submit-form-ajax.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/modal-form_controller.js b/assets/controllers/modal-form_controller.js 2 | index a92d888..5fe7ef0 100644 3 | --- a/assets/controllers/modal-form_controller.js 4 | +++ b/assets/controllers/modal-form_controller.js 5 | @@ -16,8 +16,12 @@ export default class extends Controller { 6 | this.modalBodyTarget.innerHTML = await $.ajax(this.formUrlValue); 7 | } 8 | 9 | - submitForm() { 10 | + async submitForm() { 11 | const $form = $(this.modalBodyTarget).find('form'); 12 | - console.log($form.serialize()); 13 | + this.modalBodyTarget.innerHTML = await $.ajax({ 14 | + url: $form.prop('action'), 15 | + method: $form.prop('method'), 16 | + data: $form.serialize(), 17 | + }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /_tuts/jquery-use-formurlvalue.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/modal-form_controller.js b/assets/controllers/modal-form_controller.js 2 | index 5fe7ef0..ac2405a 100644 3 | --- a/assets/controllers/modal-form_controller.js 4 | +++ b/assets/controllers/modal-form_controller.js 5 | @@ -19,7 +19,7 @@ export default class extends Controller { 6 | async submitForm() { 7 | const $form = $(this.modalBodyTarget).find('form'); 8 | this.modalBodyTarget.innerHTML = await $.ajax({ 9 | - url: $form.prop('action'), 10 | + url: this.formUrlValue, 11 | method: $form.prop('method'), 12 | data: $form.serialize(), 13 | }); 14 | -------------------------------------------------------------------------------- /_tuts/laziness-lazy-controller.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers/submit-confirm_controller.js b/assets/controllers/submit-confirm_controller.js 2 | index ef3849e..a2d403d 100644 3 | --- a/assets/controllers/submit-confirm_controller.js 4 | +++ b/assets/controllers/submit-confirm_controller.js 5 | @@ -2,6 +2,7 @@ import { Controller } from 'stimulus'; 6 | import Swal from 'sweetalert2'; 7 | import { useDispatch } from 'stimulus-use'; 8 | 9 | +/* stimulusFetch: 'lazy' */ 10 | export default class extends Controller { 11 | static values = { 12 | title: String, 13 | -------------------------------------------------------------------------------- /_tuts/laziness-set-lazy-in-controllers-json.diff: -------------------------------------------------------------------------------- 1 | diff --git a/assets/controllers.json b/assets/controllers.json 2 | index fb0dbf0..fbcedcd 100644 3 | --- a/assets/controllers.json 4 | +++ b/assets/controllers.json 5 | @@ -3,7 +3,7 @@ 6 | "@symfony/ux-chartjs": { 7 | "chart": { 8 | "enabled": true, 9 | - "fetch": "eager" 10 | + "fetch": "lazy" 11 | } 12 | } 13 | }, 14 | -------------------------------------------------------------------------------- /_tuts/lazy-sidebar-upgrade-turbo.diff: -------------------------------------------------------------------------------- 1 | diff --git a/yarn.lock b/yarn.lock 2 | index 926a57e..5ab4977 100644 3 | --- a/yarn.lock 4 | +++ b/yarn.lock 5 | @@ -931,9 +931,9 @@ 6 | integrity sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w== 7 | 8 | "@hotwired/turbo@^7.0.0-beta.5": 9 | - version "7.0.0-beta.5" 10 | - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-beta.5.tgz#3167e8e882b9075c5b3b2e2f32432cca2862c61c" 11 | - integrity sha512-z10dI2U/StkMSmnfJUsyez6jrhnitgzjyw2CxE3LnAAzW/TBhvsMYKsVG7Xu337r3gh0r6UwIFWyvvtm3in6gg== 12 | + version "7.0.0-beta.7" 13 | + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-beta.7.tgz#0f519af4e63698a9fb44d2db9019cdb5ddd048db" 14 | + integrity sha512-w4Oajhnqnz+b2rM325FjPnENVij1yWJy+q6bwSgmCvRG4715T7PoC6YwTPd4h6PVUGgy5WpqgDadzKdEV+qtLw== 15 | 16 | "@nodelib/fs.scandir@2.1.4": 17 | version "2.1.4" 18 | -------------------------------------------------------------------------------- /_tuts/lazyframe-add-2nd-frame-on-homepage.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/product/productBase.html.twig b/templates/product/productBase.html.twig 2 | index 22302e6..f9553e7 100644 3 | --- a/templates/product/productBase.html.twig 4 | +++ b/templates/product/productBase.html.twig 5 | @@ -6,6 +6,8 @@ 6 |
7 | 12 | 13 |
14 | -------------------------------------------------------------------------------- /_tuts/lazyframe-add-lazy-weather-frame.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/base.html.twig b/templates/base.html.twig 2 | index 32377a0..3086274 100644 3 | --- a/templates/base.html.twig 4 | +++ b/templates/base.html.twig 5 | @@ -87,18 +87,7 @@ 6 |
7 | 8 | {% block weather_widget %} 9 | - NEW YORK WEATHER 10 | - 21 | + 22 | {% endblock %} 23 | 24 | 17 | + {% endblock %} 18 | 19 | 28 | {% endblock %} 29 | + 30 | +{% block weather_widget %}{% endblock %} 31 | -------------------------------------------------------------------------------- /_tuts/lazyframe-upgrade-turbo-again.diff: -------------------------------------------------------------------------------- 1 | diff --git a/yarn.lock b/yarn.lock 2 | index 5ab4977..3747f72 100644 3 | --- a/yarn.lock 4 | +++ b/yarn.lock 5 | @@ -931,9 +931,9 @@ 6 | integrity sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w== 7 | 8 | "@hotwired/turbo@^7.0.0-beta.5": 9 | - version "7.0.0-beta.7" 10 | - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-beta.7.tgz#0f519af4e63698a9fb44d2db9019cdb5ddd048db" 11 | - integrity sha512-w4Oajhnqnz+b2rM325FjPnENVij1yWJy+q6bwSgmCvRG4715T7PoC6YwTPd4h6PVUGgy5WpqgDadzKdEV+qtLw== 12 | + version "7.0.0-beta.8" 13 | + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-beta.8.tgz#133630eabbd3c26183efcfb6dea2db5dd172e8da" 14 | + integrity sha512-3HfWoxtGGQOxaXo2bh2tvEBFAV4oSSIA/BFnMvIfY5D4HbEKYpPH2Q3Roa707/E9LtnIgyN/RibDY6dszCwPuw== 15 | 16 | "@nodelib/fs.scandir@2.1.4": 17 | version "2.1.4" 18 | -------------------------------------------------------------------------------- /_tuts/lazysidebar-enabling-fragments.diff: -------------------------------------------------------------------------------- 1 | diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml 2 | index 7853e9e..28d4aa1 100644 3 | --- a/config/packages/framework.yaml 4 | +++ b/config/packages/framework.yaml 5 | @@ -13,7 +13,7 @@ framework: 6 | storage_factory_id: session.storage.factory.native 7 | 8 | #esi: true 9 | - #fragments: true 10 | + fragments: true 11 | php_errors: 12 | log: true 13 | 14 | -------------------------------------------------------------------------------- /_tuts/lazysidebar-remove-extra-args-cart.diff: -------------------------------------------------------------------------------- 1 | diff --git a/src/Controller/CartController.php b/src/Controller/CartController.php 2 | index 9096277..1c1b443 100644 3 | --- a/src/Controller/CartController.php 4 | +++ b/src/Controller/CartController.php 5 | @@ -21,13 +21,8 @@ class CartController extends AbstractController 6 | /** 7 | * @Route("/cart", name="app_cart") 8 | */ 9 | - public function shoppingCart(CartStorage $cartStorage, ProductRepository $productRepository): Response 10 | + public function shoppingCart(CartStorage $cartStorage): Response 11 | { 12 | - $featuredProduct = $productRepository->findFeatured(); 13 | - $addToCartForm = $this->createForm(AddItemToCartFormType::class, null, [ 14 | - 'product' => $featuredProduct, 15 | - ]); 16 | - 17 | return $this->renderForm('cart/cart.html.twig', [ 18 | 'cart' => $cartStorage->getOrCreateCart(), 19 | ]); 20 | -------------------------------------------------------------------------------- /_tuts/manualstream-add-data-turbo-cache-false.diff: -------------------------------------------------------------------------------- 1 | diff --git a/templates/base.html.twig b/templates/base.html.twig 2 | index 2d88614..337b871 100644 3 | --- a/templates/base.html.twig 4 | +++ b/templates/base.html.twig 5 | @@ -67,7 +67,7 @@ 6 | 7 | 8 | 9 | -
10 | +
11 | {% for flash in app.session.flashBag.get('success') %} 12 |