├── .github └── workflows │ ├── preprod.yml │ ├── production.yml │ └── staging.yml ├── LICENSE ├── README.md └── theme ├── assets ├── ajax-loader.gif ├── gift-card.js ├── gift-card.scss ├── ico-select.svg ├── lazysizes.js ├── password.js ├── theme.js ├── theme.scss └── vendor.js ├── config ├── settings_data.json └── settings_schema.json ├── layout ├── gift_card.liquid ├── password.liquid └── theme.liquid ├── locales ├── bg-BG.json ├── cs.json ├── da.json ├── de.json ├── el.json ├── en.default.json ├── es.json ├── fi.json ├── fr.json ├── hi.json ├── hr-HR.json ├── hu.json ├── id.json ├── it.json ├── ja.json ├── ko.json ├── lt-LT.json ├── ms.json ├── nb.json ├── nl.json ├── pl.json ├── pt-BR.json ├── pt-PT.json ├── ro-RO.json ├── ru.json ├── sk-SK.json ├── sl-SI.json ├── sv.json ├── th.json ├── tr.json ├── zh-CN.json └── zh-TW.json ├── sections ├── article-template.liquid ├── blog-template.liquid ├── cart-template.liquid ├── collection-list.liquid ├── collection-template.liquid ├── collection.liquid ├── custom-content.liquid ├── feature-columns.liquid ├── feature-row.liquid ├── featured-blog.liquid ├── featured-product.liquid ├── footer.liquid ├── header.liquid ├── hero.liquid ├── image-bar.liquid ├── list-collections-template.liquid ├── logo-bar.liquid ├── map.liquid ├── newsletter.liquid ├── password-content.liquid ├── password-footer.liquid ├── password-header.liquid ├── product-recommendations.liquid ├── product-template.liquid ├── quotes.liquid ├── rich-text.liquid ├── slideshow.liquid └── video.liquid ├── snippets ├── bgset.liquid ├── cart-popup.liquid ├── collection-grid-item.liquid ├── comment.liquid ├── form-status.liquid ├── icon-3d-badge-full-color.liquid ├── icon-arrow-left.liquid ├── icon-arrow-right.liquid ├── icon-cart.liquid ├── icon-chevron-down.liquid ├── icon-chevron-left.liquid ├── icon-chevron-right.liquid ├── icon-close.liquid ├── icon-error.liquid ├── icon-facebook.liquid ├── icon-hamburger.liquid ├── icon-instagram.liquid ├── icon-laser.liquid ├── icon-lock.liquid ├── icon-login.liquid ├── icon-minus.liquid ├── icon-pause.liquid ├── icon-pin.liquid ├── icon-pinterest.liquid ├── icon-play.liquid ├── icon-plus.liquid ├── icon-quote.liquid ├── icon-resume.liquid ├── icon-rss.liquid ├── icon-saletag.liquid ├── icon-search.liquid ├── icon-shopify-logo.liquid ├── icon-snapchat.liquid ├── icon-spinner.liquid ├── icon-tumblr.liquid ├── icon-twitter.liquid ├── icon-video-badge-full-color.liquid ├── icon-vimeo.liquid ├── icon-youtube.liquid ├── image-style.liquid ├── media.liquid ├── no-blocks.liquid ├── pagination.liquid ├── product-card-grid.liquid ├── product-card-list.liquid ├── product-price-listing.liquid ├── product-price.liquid ├── search-drawer.liquid ├── site-nav.liquid ├── social-meta-tags.liquid └── social-sharing.liquid └── templates ├── 404.liquid ├── article.liquid ├── blog.liquid ├── cart.liquid ├── collection.liquid ├── customers ├── account.liquid ├── activate_account.liquid ├── addresses.liquid ├── login.liquid ├── order.liquid ├── register.liquid └── reset_password.liquid ├── gift_card.liquid ├── index.liquid ├── list-collections.liquid ├── page.contact.liquid ├── page.liquid ├── password.liquid ├── product.liquid └── search.liquid /.github/workflows/preprod.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Pre-production Theme 2 | 3 | on: 4 | push: 5 | pull_request: null 6 | branches: 7 | - preprod 8 | 9 | jobs: 10 | deploy: 11 | name: Deploy Pre-production Theme 12 | runs-on: ubuntu-latest 13 | steps: 14 | # basically git clone 15 | - uses: actions/checkout@v2 16 | # deploy shopify theme 17 | - uses: pgrimaud/action-shopify@2.1.3 18 | env: 19 | SHOPIFY_PASSWORD: ${{ secrets.SHOPIFY_PRODUCTION_PASSWORD }} 20 | SHOPIFY_STORE_URL: ${{ secrets.SHOPIFY_PRODUCTION_STORE_URL }} 21 | SHOPIFY_THEME_ID: ${{ secrets.SHOPIFY_PREPRODUCTION_THEME_ID }} 22 | THEME_PATH: ${{ secrets.THEME_PATH }} 23 | with: 24 | args: --ignored-file=config/settings_data.json --ignored-file=locales/* 25 | -------------------------------------------------------------------------------- /.github/workflows/production.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Production Theme 2 | 3 | on: 4 | push: 5 | pull_request: null 6 | branches: 7 | - master 8 | 9 | jobs: 10 | deploy: 11 | name: Deploy Production Theme 12 | runs-on: ubuntu-latest 13 | steps: 14 | # basically git clone 15 | - uses: actions/checkout@v2 16 | # deploy shopify theme 17 | - uses: pgrimaud/action-shopify@2.1.3 18 | env: 19 | SHOPIFY_PASSWORD: ${{ secrets.SHOPIFY_PRODUCTION_PASSWORD }} 20 | SHOPIFY_STORE_URL: ${{ secrets.SHOPIFY_PRODUCTION_STORE_URL }} 21 | SHOPIFY_THEME_ID: ${{ secrets.SHOPIFY_PRODUCTION_THEME_ID }} 22 | THEME_PATH: ${{ secrets.THEME_PATH }} 23 | with: 24 | args: --ignored-file=config/settings_data.json --ignored-file=locales/* 25 | -------------------------------------------------------------------------------- /.github/workflows/staging.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Staging Theme 2 | 3 | on: 4 | push: 5 | pull_request: null 6 | branches: 7 | - develop 8 | 9 | jobs: 10 | deploy: 11 | name: Deploy Staging Theme 12 | runs-on: ubuntu-latest 13 | steps: 14 | # basically git clone 15 | - uses: actions/checkout@v2 16 | # deploy shopify theme 17 | - uses: pgrimaud/action-shopify@2.1.3 18 | env: 19 | SHOPIFY_PASSWORD: ${{ secrets.SHOPIFY_STAGING_PASSWORD }} 20 | SHOPIFY_STORE_URL: ${{ secrets.SHOPIFY_STAGING_STORE_URL }} 21 | SHOPIFY_THEME_ID: ${{ secrets.SHOPIFY_STAGING_THEME_ID }} 22 | THEME_PATH: ${{ secrets.THEME_PATH }} 23 | with: 24 | args: --ignored-file=config/settings_data.json --ignored-file=locales/* 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Freyum 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shopify Workflow PoC 2 | 3 | This is a Proof of Concept of workflow with different environments using Github and GitHub Actions. 4 | 5 | [Workflow](#workflow) 6 | 7 | [GitHub Actions](#cicd-with-github-actions) 8 | 9 | Pre-requisites : 10 | - GitHub account and repository 11 | - Shopify store of production 12 | - Shopify store of staging (development) 13 | 14 | ## Shopify stores 15 | 16 | We're using 2 stores for our workflow with multiple themes : 17 | - Production store 18 | - Production theme 19 | - Pre-production theme 20 | - Staging store 21 | - Staging theme 22 | - n theme(s) for developers 23 | 24 | ## Branches 25 | 26 | - `master` (for production theme on production environment) 27 | - `preprod` (for pre-production theme on production environment) 28 | - `develop` (for staging theme on development environment) 29 | 30 | ## Philosophy 31 | 32 | Production and staging store have same configuration. But we often have the same content between the two environments. 33 | - In production store, we have all real products and collections. 34 | - In staging store, we have ~10 or less products and one or two collections (for testing). 35 | 36 | ## Workflow 37 | 38 | Workflow is pretty simple, based on GitFlow but with no release branch nor tags. 39 | 40 | `master`, `preprod` and `develop` branches are protected. It's not possible to push directly on them. 41 | The best way is to use pull requests. 42 | 43 | ### Principal 44 | 45 | 1. Create a new branch from `master` (eg. `feature/store-locator`) 46 | - Best practice : prefix branch with `fix/` for a fix or `feature/` for a new feature 47 | 2. Apply commit(s) to this branch 48 | 3. Merge `feature/store-locator` into `develop` 49 | - It will deploy on staging theme, then test your changes 50 | 4. If changes are not good, return to step 2. Otherwise, merge `feature/store-locator` into `preprod` 51 | - It will deploy on pre-production theme, then test your changes 52 | 5. If changes are not good, return to step 2. Otherwise, merge `feature/store-locator` into `master` 53 | - It will deploy on production theme, your changes are now live! 54 | 55 | ![Basic workflow](https://user-images.githubusercontent.com/1866496/80381771-b66e1000-88a1-11ea-8039-7deb5842c772.png) 56 | 57 | ### Workflow with multiple branches 58 | 59 | ![Workflow with fix](https://user-images.githubusercontent.com/1866496/80384661-73ae3700-88a5-11ea-862c-faf6abbb5b5a.png) 60 | 61 | **New branch always start from `master` one, even if the purpose is a new feature or a fix.** 62 | 63 | ## Local development 64 | 65 | We're using Theme Kit for local developers : https://shopify.github.io/themekit/ 66 | _We created a template on development store for each developer._ 67 | 68 | ## CI/CD with GitHub Actions 69 | 70 | ### Actions 71 | 72 | Workflow files are available [here](https://github.com/freyum/shopify-workflow-poc/tree/master/.github/workflows). 73 | They used the Deploy Shopify theme Actions : https://github.com/marketplace/actions/deploy-shopify-theme 74 | 75 | ### Secrets 76 | 77 | First you have to generate a private app to get an API KEY on Shopify. [Get API Access](https://shopify.github.io/themekit/#get-api-access). 78 | 79 | Then you'll need to provide some secrets : 80 | 81 | * **SHOPIFY_STAGING_PASSWORD**: Your password from your private app previously created. 82 | * **SHOPIFY_STAGING_STORE_URL**: Your development store url. (e.g. `demo-staging.myshopify.com`). 83 | * **SHOPIFY_STAGING_THEME_ID**: Your theme id on your Shopify development Store. 84 | 85 | 86 | * **SHOPIFY_PRODUCTION_PASSWORD**: Your password from your private app previously created. 87 | * **SHOPIFY_PRODUCTION_STORE_URL**: Your production store url. (e.g. `demo.myshopify.com`). 88 | * **SHOPIFY_PREPRODUCTION_THEME_ID**: Your preproduction theme id on your Shopify production Store. 89 | * **SHOPIFY_PRODUCTION_THEME_ID**: Your production theme id on your Shopify production Store. 90 | 91 | 92 | * **THEME_PATH**: Path of your theme on your GitHub repository. If your theme is at the root of your repository, just use `./`. 93 | 94 | 95 | ![env vars](https://user-images.githubusercontent.com/1866496/80392807-e3292400-88af-11ea-9547-20d35c5b1978.png) 96 | 97 | ## License 98 | 99 | The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). 100 | -------------------------------------------------------------------------------- /theme/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freyum/shopify-workflow-poc/b8f59726eb316f5c2120b1c347d222b7384317e8/theme/assets/ajax-loader.gif -------------------------------------------------------------------------------- /theme/assets/gift-card.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | var config = { 3 | qrCode: '#QrCode', 4 | printButton: '#PrintGiftCard', 5 | giftCardCode: '#GiftCardDigits' 6 | }; 7 | 8 | var $qrCode = $(config.qrCode); 9 | // eslint-disable-next-line no-new 10 | new QRCode($qrCode[0], { 11 | text: $qrCode.attr('data-identifier'), 12 | width: 120, 13 | height: 120, 14 | imageAltText: theme.strings.qrImageAlt 15 | }); 16 | 17 | $(config.printButton).on('click', function() { 18 | window.print(); 19 | }); 20 | 21 | $(config.giftCardCode).on('focus', this.select); 22 | }); 23 | -------------------------------------------------------------------------------- /theme/assets/ico-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/assets/password.js: -------------------------------------------------------------------------------- 1 | window.Modals = (function() { 2 | function Modal(id, name, options) { 3 | var defaults = { 4 | close: '.js-modal-close', 5 | open: '.js-modal-open-' + name, 6 | openClass: 'modal--is-active' 7 | }; 8 | 9 | this.$modal = $('#' + id); 10 | 11 | if (!this.$modal.length) { 12 | return false; 13 | } 14 | 15 | this.nodes = { 16 | $parent: $('html').add('body') 17 | }; 18 | this.config = $.extend(defaults, options); 19 | this.modalIsOpen = false; 20 | // eslint-disable-next-line shopify/jquery-dollar-sign-reference 21 | this.$focusOnOpen = this.config.focusOnOpen 22 | ? $(this.config.focusOnOpen) 23 | : this.$modal; 24 | this.init(); 25 | } 26 | 27 | Modal.prototype.init = function() { 28 | $(this.config.open).on('click', $.proxy(this.open, this)); 29 | this.$modal.find(this.config.close).on('click', $.proxy(this.close, this)); 30 | }; 31 | 32 | Modal.prototype.open = function(evt) { 33 | // Keep track if modal was opened from a click, or called by another function 34 | var externalCall = false; 35 | 36 | // don't open an opened modal 37 | if (this.modalIsOpen) { 38 | return; 39 | } 40 | 41 | // Prevent following href if link is clicked 42 | if (evt) { 43 | evt.preventDefault(); 44 | } else { 45 | externalCall = true; 46 | } 47 | 48 | // Without this, the modal opens, the click event bubbles up to $nodes.page 49 | // which closes the modal. 50 | if (evt && evt.stopPropagation) { 51 | evt.stopPropagation(); 52 | // save the source of the click, we'll focus to this on close 53 | this.$activeSource = $(evt.currentTarget); 54 | } 55 | 56 | if (this.modalIsOpen && !externalCall) { 57 | this.close(); 58 | } 59 | 60 | this.$modal.addClass(this.config.openClass); 61 | this.nodes.$parent.addClass(this.config.openClass); 62 | 63 | this.modalIsOpen = true; 64 | 65 | // Set focus on modal 66 | slate.a11y.trapFocus({ 67 | $container: this.$modal, 68 | $elementToFocus: this.$focusOnOpen, 69 | namespace: 'modal_focus' 70 | }); 71 | 72 | this.bindEvents(); 73 | }; 74 | 75 | Modal.prototype.close = function() { 76 | // don't close a closed modal 77 | if (!this.modalIsOpen) { 78 | return; 79 | } 80 | 81 | // deselect any focused form elements 82 | $(document.activeElement).trigger('blur'); 83 | 84 | this.$modal.removeClass(this.config.openClass); 85 | this.nodes.$parent.removeClass(this.config.openClass); 86 | 87 | this.modalIsOpen = false; 88 | 89 | // Remove focus on modal 90 | slate.a11y.removeTrapFocus({ 91 | $container: this.$modal, 92 | namespace: 'modal_focus' 93 | }); 94 | 95 | this.unbindEvents(); 96 | }; 97 | 98 | Modal.prototype.bindEvents = function() { 99 | // Pressing escape closes modal 100 | this.nodes.$parent.on( 101 | 'keyup.modal', 102 | $.proxy(function(evt) { 103 | if (evt.keyCode === 27) { 104 | this.close(); 105 | } 106 | }, this) 107 | ); 108 | }; 109 | 110 | Modal.prototype.unbindEvents = function() { 111 | this.nodes.$parent.off('.modal'); 112 | }; 113 | 114 | return Modal; 115 | })(); 116 | 117 | 118 | $(function() { 119 | var selectors = { 120 | loginModal: '#LoginModal', 121 | loginField: '[data-login-field]' 122 | }; 123 | 124 | var data = { 125 | formError: 'data-error' 126 | }; 127 | 128 | var loginModal = document.querySelector(selectors.loginModal); 129 | var loginField = document.querySelector(selectors.loginField); 130 | 131 | if (!loginModal) { 132 | return; 133 | } 134 | 135 | var passwordModal = new window.Modals('LoginModal', 'login-modal', { 136 | focusOnOpen: '#Password' 137 | }); 138 | 139 | // Open modal if errors exist 140 | if (loginField.hasAttribute(data.formError)) { 141 | passwordModal.open(); 142 | } 143 | }); 144 | -------------------------------------------------------------------------------- /theme/config/settings_data.json: -------------------------------------------------------------------------------- 1 | {"current":{"sections":{"header":{"type":"header","settings":{}},"hero-1":{"type":"hero","settings":{"hero_size":"large","text_size":"large"}},"feature-row":{"type":"feature-row","settings":{}},"feature-columns":{"type":"feature-columns","blocks":{"feature-columns-0":{"type":"text_block","settings":{}},"feature-columns-1":{"type":"text_block","settings":{}},"feature-columns-2":{"type":"text_block","settings":{}}},"block_order":["feature-columns-0","feature-columns-1","feature-columns-2"],"settings":{"title":""}},"collection":{"type":"collection","settings":{"grid":4}},"hero-2":{"type":"hero","settings":{"text_size":"large"}},"quotes":{"type":"quotes","blocks":{"quotes-0":{"type":"quote","settings":{}},"quotes-1":{"type":"quote","settings":{}},"quotes-2":{"type":"quote","settings":{}}},"block_order":["quotes-0","quotes-1","quotes-2"],"settings":{"title":""}},"image-bar":{"type":"image-bar","blocks":{"image-bar-0":{"type":"image","settings":{}},"image-bar-1":{"type":"image","settings":{}},"image-bar-2":{"type":"image","settings":{}}},"block_order":["image-bar-0","image-bar-1","image-bar-2"],"settings":{}},"footer":{"type":"footer","blocks":{"footer-0":{"type":"link_list","settings":{}},"footer-1":{"type":"newsletter","settings":{}}},"block_order":["footer-0","footer-1"],"settings":{"show_payment_icons":true}}},"content_for_index":["hero-1","feature-row","feature-columns","collection","hero-2","quotes","image-bar"]},"presets":{"Default":{"sections":{"header":{"type":"header","settings":{}},"hero-1":{"type":"hero","settings":{"hero_size":"large","text_size":"large"}},"feature-row":{"type":"feature-row","settings":{}},"feature-columns":{"type":"feature-columns","blocks":{"feature-columns-0":{"type":"text_block","settings":{}},"feature-columns-1":{"type":"text_block","settings":{}},"feature-columns-2":{"type":"text_block","settings":{}}},"block_order":["feature-columns-0","feature-columns-1","feature-columns-2"],"settings":{"title":""}},"collection":{"type":"collection","settings":{"grid":4}},"hero-2":{"type":"hero","settings":{"text_size":"large"}},"quotes":{"type":"quotes","blocks":{"quotes-0":{"type":"quote","settings":{}},"quotes-1":{"type":"quote","settings":{}},"quotes-2":{"type":"quote","settings":{}}},"block_order":["quotes-0","quotes-1","quotes-2"],"settings":{"title":""}},"image-bar":{"type":"image-bar","blocks":{"image-bar-0":{"type":"image","settings":{}},"image-bar-1":{"type":"image","settings":{}},"image-bar-2":{"type":"image","settings":{}}},"block_order":["image-bar-0","image-bar-1","image-bar-2"],"settings":{}},"footer":{"type":"footer","blocks":{"footer-0":{"type":"link_list","settings":{}},"footer-1":{"type":"newsletter","settings":{}}},"block_order":["footer-0","footer-1"],"settings":{"show_payment_icons":true}}},"content_for_index":["hero-1","feature-row","feature-columns","collection","hero-2","quotes","image-bar"]},"Light":{"color_text":"#162950","color_body_text":"#6d6d6d","color_sale_text":"#DA2F0C","color_borders":"#e4e4e4","color_button":"#DA2F0C","color_button_text":"#ffffff","color_small_button_text_border":"#162950","color_text_field":"#ffffff","color_text_field_text":"#162950","color_text_field_border":"#909090","color_image_overlay_text":"#ffffff","color_image_overlay":"#3d3d3d","image_overlay_opacity":40,"color_body_bg":"#f8f8f8","type_header_font":"muli_n6","type_header_base_size":26,"type_base_font":"muli_n4","type_base_size":18,"share_facebook":true,"share_twitter":true,"share_pinterest":true,"social_twitter_link":"","social_facebook_link":"","social_pinterest_link":"","social_instagram_link":"","social_tumblr_link":"","social_snapchat_link":"","social_youtube_link":"","social_vimeo_link":"","favicon":"","checkout_header_image":"","checkout_logo_image":"","checkout_logo_position":"left","checkout_logo_size":"small","checkout_body_background_image":"","checkout_body_background_color":"#ffffff","checkout_input_background_color_mode":"white","checkout_sidebar_background_image":"","checkout_sidebar_background_color":"#e8f3f6","checkout_heading_font":"Roboto","checkout_body_font":"Source Sans Pro","checkout_accent_color":"#1990c6","checkout_button_color":"#23314e","checkout_error_color":"#ff6d6d","sections":{"header":{"type":"header","settings":{"align_logo":"left","logo":"","logo_max_width":135,"main_linklist":"main-menu","message":true,"color_bg":"#162950","color_text":"#ffffff"}},"hero":{"type":"hero","settings":{"alignment":"center","hero_size":"x-large","text_size":"large"}},"slideshow":{"type":"slideshow","blocks":{"slideshow-0":{"type":"image","settings":{"image":"","alignment":"center center"}},"1492095993817":{"type":"image","settings":{"image":"","alignment":"center"}}},"block_order":["slideshow-0","1492095993817"],"settings":{"slideshow_height":"medium","text_size":"medium","autorotate":false,"autorotate_speed":5}},"featured-collections":{"type":"collection","settings":{"grid":3,"rows":1,"show_vendor":true,"show_view_all":true}},"product-template":{"type":"product-template","settings":{"show_quantity_selector":false,"show_variant_labels":true,"show_vendor":false,"show_share_buttons":true,"media_size":"medium","enable_image_zoom":true,"enable_video_looping":false}},"collection-template":{"type":"collection-template","settings":{"layout":"grid","grid":2,"rows":2,"show_collection_image":true,"show_vendor":false,"sort_enable":true,"tags_enable":true}},"1492033809691":{"type":"map","settings":{}},"1492033877875":{"type":"quotes","blocks":{"1492033877875-0":{"type":"quote","settings":{}}},"block_order":["1492033877875-0"],"settings":{}},"1492033924902":{"type":"custom-content","blocks":{"1492033924902-0":{"type":"text","settings":{"width":"100%","alignment":"center","align_text":"center"}}},"block_order":["1492033924902-0"],"settings":{"title":""}},"1492096252560":{"type":"collection-list","blocks":{"1492096252560-0":{"type":"featured_collection","settings":{}},"1492096252560-1":{"type":"featured_collection","settings":{}},"1492096252560-2":{"type":"featured_collection","settings":{}}},"block_order":["1492096252560-0","1492096252560-1","1492096252560-2"],"settings":{"grid":3}},"blog-template":{"type":"blog-template","settings":{"layout":"grid","blog_show_author":true,"blog_show_date":false}},"article-template":{"type":"article-template","settings":{"blog_show_author":true,"blog_show_date":true,"show_share_buttons":true}},"cart-template":{"type":"cart-template","settings":{"cart_notes_enable":false}},"footer":{"type":"footer","blocks":{"link_list":{"type":"link_list","settings":{}},"text":{"type":"text","settings":{}},"newsletter":{"type":"newsletter","settings":{}}},"block_order":["link_list","text","newsletter"],"settings":{"color_footer_bg":"#f8f8f8","color_footer_text":"#6d6d6d"}}},"content_for_index":["hero","featured-collections","slideshow","1492033924902","1492096252560","1492033877875","1492033809691"]}}} -------------------------------------------------------------------------------- /theme/layout/gift_card.liquid: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if settings.favicon != blank %} 11 | 12 | {% endif %} 13 | 14 | {%- assign formatted_initial_value = gift_card.initial_value | money_without_trailing_zeros: gift_card.currency -%} 15 | {%- assign formatted_initial_value_stripped = formatted_initial_value | strip_html -%} 16 | {{ 'gift_cards.issued.title_html' | t: value: formatted_initial_value_stripped, shop: shop.name }} 17 | 18 | 19 | 20 | {{ 'theme.scss.css' | asset_url | stylesheet_tag }} 21 | {{ 'gift-card.scss.css' | asset_url | stylesheet_tag }} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 36 | 37 | {{ content_for_header }} 38 | 39 | 40 | 41 | {{ content_for_layout }} 42 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /theme/layout/password.liquid: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if settings.favicon != blank %} 11 | 12 | {% endif %} 13 | 14 | 15 | {{ shop.name }} – {{ 'general.password_page.opening_soon' | t }} 16 | 17 | 18 | {% if page_description %} 19 | 20 | {% endif %} 21 | 22 | {% include 'social-meta-tags' %} 23 | 24 | {{ 'theme.scss.css' | asset_url | stylesheet_tag }} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | {{ content_for_header }} 34 | 35 | 36 | 37 |
38 | 47 | 48 |
49 |
50 | {{ content_for_layout }} 51 |
52 |
53 |
54 | 55 | 102 | 103 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /theme/layout/theme.liquid: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {%- if settings.favicon != blank -%} 11 | 12 | {%- endif -%} 13 | 14 | {%- capture seo_title -%} 15 | {%- if request.page_type == 'search' and search.performed == true -%} 16 | {{ 'general.search.heading' | t: count: search.results_count }}: {{ 'general.search.results_with_count' | t: terms: search.terms, count: search.results_count }} 17 | {%- else -%} 18 | {{ page_title }} 19 | {%- endif -%} 20 | {%- if current_tags -%} 21 | {%- assign meta_tags = current_tags | join: ', ' -%} – {{ 'general.meta.tags' | t: tags: meta_tags -}} 22 | {%- endif -%} 23 | {%- if current_page != 1 -%} 24 | – {{ 'general.meta.page' | t: page: current_page }} 25 | {%- endif -%} 26 | {%- assign escaped_page_title = page_title | escape -%} 27 | {%- unless escaped_page_title contains shop.name -%} 28 | – {{ shop.name }} 29 | {%- endunless -%} 30 | {%- endcapture -%} 31 | {{ seo_title | strip }} 32 | 33 | {%- if page_description -%} 34 | 35 | {%- endif -%} 36 | 37 | {% include 'social-meta-tags' %} 38 | 39 | {{ 'theme.scss.css' | asset_url | stylesheet_tag }} 40 | 41 | 98 | 99 | {%- if request.page_type contains 'customers/' -%} 100 | 101 | {%- endif -%} 102 | 103 | 104 | 105 | 106 | 107 | {{ content_for_header }} 108 | 109 | 110 | 111 | 112 | 113 | 114 | {%- if settings.enable_ajax -%} 115 | {% include 'cart-popup' %} 116 | {%- endif -%} 117 | 118 | {% section 'header' %} 119 | 120 |
121 | 122 |
123 | {{ content_for_layout }} 124 |
125 | 126 | {% section 'footer' %} 127 | 128 | 131 | 132 |
133 | 134 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /theme/sections/article-template.liquid: -------------------------------------------------------------------------------- 1 |
2 |

{{ article.title }}

3 | {% if section.settings.blog_show_author %} 4 | {{ 'blogs.article.by_author' | t: author: article.author }} 5 | {% endif %} 6 | 7 | {% if section.settings.blog_show_date %} 8 | 9 | {{ article.published_at | time_tag: format: 'date' }} 10 | 11 | {% endif %} 12 |
13 | 14 |
15 | {{ article.content }} 16 |
17 | 18 | {% if section.settings.show_share_buttons %} 19 | {% include 'social-sharing', share_title: article.title, share_permalink: article.url, share_image: article.image %} 20 | {% endif %} 21 | 22 | 23 | 24 | {% schema %} 25 | { 26 | "name": { 27 | "da": "Opslag", 28 | "de": "Posts", 29 | "en": "Posts", 30 | "es": "Publicaciones", 31 | "fi": "Julkaisut", 32 | "fr": "Articles", 33 | "hi": "पोस्ट", 34 | "it": "Articoli", 35 | "ja": "投稿", 36 | "ko": "게시물", 37 | "nb": "Innlegg", 38 | "nl": "Berichten", 39 | "pt-BR": "Posts", 40 | "pt-PT": "Publicações", 41 | "sv": "Inlägg", 42 | "th": "โพสต์", 43 | "zh-CN": "文章", 44 | "zh-TW": "貼文" 45 | }, 46 | "settings": [ 47 | { 48 | "type": "checkbox", 49 | "id": "blog_show_author", 50 | "label": { 51 | "da": "Vis forfatter", 52 | "de": "Autor anzeigen", 53 | "en": "Show author", 54 | "es": "Mostrar autor", 55 | "fi": "Näytä tekijä", 56 | "fr": "Afficher l'auteur", 57 | "hi": "लेखक दिखाएं", 58 | "it": "Mostra autore", 59 | "ja": "執筆者を表示する", 60 | "ko": "작성자 표시", 61 | "nb": "Vis forfatter", 62 | "nl": "Auteur weergeven", 63 | "pt-BR": "Exibir autor", 64 | "pt-PT": "Mostrar autor", 65 | "sv": "Visa författare", 66 | "th": "แสดงผู้เขียน", 67 | "zh-CN": "显示作者", 68 | "zh-TW": "顯示作者" 69 | }, 70 | "default": true 71 | }, 72 | { 73 | "type": "checkbox", 74 | "id": "blog_show_date", 75 | "label": { 76 | "da": "Vis dato", 77 | "de": "Datum anzeigen", 78 | "en": "Show date", 79 | "es": "Mostrar fecha", 80 | "fi": "Näytä päivämäärä", 81 | "fr": "Afficher la date", 82 | "hi": "दिनांक दिखाएं", 83 | "it": "Mostra data", 84 | "ja": "日付を表示する", 85 | "ko": "날짜 표시", 86 | "nb": "Vis dato", 87 | "nl": "Datum weergeven", 88 | "pt-BR": "Exibir data", 89 | "pt-PT": "Mostrar data", 90 | "sv": "Visa datum", 91 | "th": "แสดงวันที่", 92 | "zh-CN": "显示日期", 93 | "zh-TW": "顯示日期" 94 | }, 95 | "default": true 96 | }, 97 | { 98 | "type": "checkbox", 99 | "id": "show_share_buttons", 100 | "label": { 101 | "da": "Vis knapper til deling på sociale medier", 102 | "de": "Buttons für Social Media anzeigen", 103 | "en": "Show social sharing buttons", 104 | "es": "Mostrar botones para compartir en redes sociales", 105 | "fi": "Näytä sosiaalisen median jakamispainikkeet", 106 | "fr": "Afficher les boutons de partage sur les médias sociaux", 107 | "hi": "सोशल शेयरिंग बटन दिखाएं", 108 | "it": "Mostra i pulsanti per la condivisione sui social", 109 | "ja": "ソーシャルメディアでの共有ボタンを表示する", 110 | "ko": "소셜 공유 버튼 표시", 111 | "nb": "Vis knapper for deling på sosiale medier", 112 | "nl": "Knoppen voor sociaal delen weergeven", 113 | "pt-BR": "Exibir botões de compartilhamento em redes sociais", 114 | "pt-PT": "Mostrar botões de partilha nas redes sociais", 115 | "sv": "Visa knappar för delning i sociala medier", 116 | "th": "แสดงปุ่มสำหรับแชร์ลงโซเชียล", 117 | "zh-CN": "显示社交分享按钮", 118 | "zh-TW": "顯示社群分享按鈕" 119 | }, 120 | "default": true 121 | } 122 | ] 123 | } 124 | {% endschema %} 125 | -------------------------------------------------------------------------------- /theme/sections/collection-list.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.title != blank %} 3 |
4 |

{{ section.settings.title | escape }}

5 |
6 | {% endif %} 7 | 8 | {% case section.settings.grid %} 9 | {% when 2 %} 10 | {%- assign grid_item_width = 'medium-up--one-half' -%} 11 | {% when 3 %} 12 | {%- assign grid_item_width = 'small--one-half medium-up--one-third' -%} 13 | {% when 4 %} 14 | {%- assign grid_item_width = 'small--one-half medium-up--one-quarter' -%} 15 | {% when 5 %} 16 | {%- assign grid_item_width = 'small--one-half medium-up--one-fifth' -%} 17 | {% endcase %} 18 | 19 |
20 | 28 |
29 | 30 | {% if section.blocks.size == 0 %} 31 | {% include 'no-blocks' %} 32 | {% endif %} 33 |
34 | 35 | 36 | 37 | {% schema %} 38 | { 39 | "name": { 40 | "da": "Kollektionsliste", 41 | "de": "Kategorien-Liste", 42 | "en": "Collection list", 43 | "es": "Lista de colecciones", 44 | "fi": "Kokoelmaluettelo", 45 | "fr": "Liste des collections", 46 | "hi": "कलेक्शन सूची", 47 | "it": "Elenco delle collezioni", 48 | "ja": "コレクションリスト", 49 | "ko": "컬렉션 목록", 50 | "nb": "Samlingsliste", 51 | "nl": "Collectielijst", 52 | "pt-BR": "Lista de coleções", 53 | "pt-PT": "Lista de coleções", 54 | "sv": "Kollektionslista", 55 | "th": "รายการคอลเลกชัน", 56 | "zh-CN": "产品系列列表", 57 | "zh-TW": "商品系列清單" 58 | }, 59 | "class": "index-section", 60 | "max_blocks": 12, 61 | "settings": [ 62 | { 63 | "type": "text", 64 | "id": "title", 65 | "label": { 66 | "da": "Overskrift", 67 | "de": "Titel", 68 | "en": "Heading", 69 | "es": "Título", 70 | "fi": "Otsake", 71 | "fr": "En-tête", 72 | "hi": "शीर्षक", 73 | "it": "Heading", 74 | "ja": "見出し", 75 | "ko": "제목", 76 | "nb": "Overskrift", 77 | "nl": "Kop", 78 | "pt-BR": "Título", 79 | "pt-PT": "Título", 80 | "sv": "Rubrik", 81 | "th": "ส่วนหัว", 82 | "zh-CN": "标题", 83 | "zh-TW": "標題" 84 | }, 85 | "default": { 86 | "da": "Kollektionsliste", 87 | "de": "Kategorien-Liste", 88 | "en": "Collection list", 89 | "es": "Lista de colecciones", 90 | "fi": "Kokoelmaluettelo", 91 | "fr": "Page de liste des collections", 92 | "hi": "कलेक्शन सूची", 93 | "it": "Elenco delle collezioni", 94 | "ja": "コレクションリスト", 95 | "ko": "컬렉션 목록", 96 | "nb": "Samlingsliste", 97 | "nl": "Collectielijst", 98 | "pt-BR": "Lista de coleções", 99 | "pt-PT": "Lista de coleções", 100 | "sv": "Kollektionslista", 101 | "th": "รายการคอลเลกชัน", 102 | "zh-CN": "产品系列列表", 103 | "zh-TW": "商品系列清單" 104 | } 105 | }, 106 | { 107 | "type": "range", 108 | "id": "grid", 109 | "label": { 110 | "da": "Kollektioner pr. række", 111 | "de": "Kategorien per Reihe", 112 | "en": "Collections per row", 113 | "es": "Colecciones por fila", 114 | "fi": "Kokoelmia per rivi", 115 | "fr": "Collections par rangée", 116 | "hi": "प्रति पंक्ति कलेक्शन", 117 | "it": "Collezioni per riga", 118 | "ja": "行あたりのコレクション数", 119 | "ko": "열 별 컬렉션", 120 | "nb": "Samlinger per rad", 121 | "nl": "Collecties per rij", 122 | "pt-BR": "Coleções por linha", 123 | "pt-PT": "Coleções por linha", 124 | "sv": "Produktserier per rad", 125 | "th": "คอลเลกชันต่อแถว", 126 | "zh-CN": "每行产品系列数", 127 | "zh-TW": "每列商品系列數" 128 | }, 129 | "min": 2, 130 | "max": 5, 131 | "step": 1, 132 | "default": 3 133 | } 134 | ], 135 | "blocks": [ 136 | { 137 | "type": "featured_collection", 138 | "name": { 139 | "da": "Kollektion", 140 | "de": "Kategorie", 141 | "en": "Collection", 142 | "es": "Colección", 143 | "fi": "Kokoelma", 144 | "fr": "Collection", 145 | "hi": "कलेक्शन", 146 | "it": "Collezione", 147 | "ja": "コレクション", 148 | "ko": "컬렉션", 149 | "nb": "Samling", 150 | "nl": "Collectie", 151 | "pt-BR": "Coleção", 152 | "pt-PT": "Coleção", 153 | "sv": "Produktserie", 154 | "th": "คอลเลกชัน", 155 | "zh-CN": "收藏", 156 | "zh-TW": "商品系列" 157 | }, 158 | "settings": [ 159 | { 160 | "label": { 161 | "da": "Kollektion", 162 | "de": "Kategorie", 163 | "en": "Collection", 164 | "es": "Colección", 165 | "fi": "Kokoelma", 166 | "fr": "Collection", 167 | "hi": "कलेक्शन", 168 | "it": "Collezione", 169 | "ja": "コレクション", 170 | "ko": "컬렉션", 171 | "nb": "Samling", 172 | "nl": "Collectie", 173 | "pt-BR": "Coleção", 174 | "pt-PT": "Coleção", 175 | "sv": "Produktserie", 176 | "th": "คอลเลกชัน", 177 | "zh-CN": "收藏", 178 | "zh-TW": "商品系列" 179 | }, 180 | "id": "collection", 181 | "type": "collection" 182 | } 183 | ] 184 | } 185 | ], 186 | "presets": [ 187 | { 188 | "name": { 189 | "da": "Kollektionsliste", 190 | "de": "Kategorien-Liste", 191 | "en": "Collection list", 192 | "es": "Lista de colecciones", 193 | "fi": "Kokoelmaluettelo", 194 | "fr": "Page de liste des collections", 195 | "hi": "कलेक्शन सूची", 196 | "it": "Elenco delle collezioni", 197 | "ja": "コレクションリスト", 198 | "ko": "컬렉션 목록", 199 | "nb": "Samlingsliste", 200 | "nl": "Collectielijst", 201 | "pt-BR": "Lista de coleções", 202 | "pt-PT": "Lista de coleções", 203 | "sv": "Kollektionslista", 204 | "th": "รายการคอลเลกชัน", 205 | "zh-CN": "产品系列列表", 206 | "zh-TW": "商品系列清單" 207 | }, 208 | "category": { 209 | "da": "Kollektion", 210 | "de": "Kategorie", 211 | "en": "Collection", 212 | "es": "Colección", 213 | "fi": "Kokoelma", 214 | "fr": "Collection", 215 | "hi": "कलेक्शन", 216 | "it": "Collezione", 217 | "ja": "コレクション", 218 | "ko": "컬렉션", 219 | "nb": "Samling", 220 | "nl": "Collectie", 221 | "pt-BR": "Coleção", 222 | "pt-PT": "Coleção", 223 | "sv": "Produktserie", 224 | "th": "คอลเลกชัน", 225 | "zh-CN": "收藏", 226 | "zh-TW": "商品系列" 227 | }, 228 | "blocks": [ 229 | { 230 | "type": "featured_collection" 231 | }, 232 | { 233 | "type": "featured_collection" 234 | }, 235 | { 236 | "type": "featured_collection" 237 | } 238 | ] 239 | } 240 | ] 241 | } 242 | {% endschema %} 243 | -------------------------------------------------------------------------------- /theme/sections/collection.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.title != blank %} 3 |
4 |

{{ section.settings.title | escape }}

5 |
6 | {% endif %} 7 | 8 | {%- assign collection = collections[section.settings.collection] -%} 9 | 10 | {% case section.settings.grid %} 11 | {% when 2 %} 12 | {%- assign max_height = 530 -%} 13 | {%- assign grid_item_width = 'medium-up--one-half' -%} 14 | {% when 3 %} 15 | {%- assign max_height = 345 -%} 16 | {%- assign grid_item_width = 'small--one-half medium-up--one-third' -%} 17 | {% when 4 %} 18 | {%- assign max_height = 250 -%} 19 | {%- assign grid_item_width = 'small--one-half medium-up--one-quarter' -%} 20 | {% when 5 %} 21 | {%- assign max_height = 195 -%} 22 | {%- assign grid_item_width = 'small--one-half medium-up--one-fifth' -%} 23 | {% endcase %} 24 | 25 | {%- assign product_limit = section.settings.grid | times: section.settings.rows -%} 26 | 27 | 51 | 52 | {% if section.settings.show_view_all %} 53 | 54 |
55 | 56 | {{ 'collections.general.view_all' | t }} 57 | 58 |
59 | {% endif %} 60 | 61 |
62 | 63 | 64 | 65 | {% schema %} 66 | { 67 | "name": { 68 | "da": "Udvalgt kollektion", 69 | "de": "Vorgestellte Kategorie", 70 | "en": "Featured collection", 71 | "es": "Colección destacada", 72 | "fi": "Esittelyssä oleva kokoelma", 73 | "fr": "Collection en vedette", 74 | "hi": "फ़ीचर्ड कलेक्शन", 75 | "it": "Collezione in evidenza", 76 | "ja": "特集コレクション", 77 | "ko": "추천 컬렉션", 78 | "nb": "Utvalgt samling", 79 | "nl": "Uitgelichte collectie", 80 | "pt-BR": "Coleção em destaque", 81 | "pt-PT": "Coleção em destaque", 82 | "sv": "Utvald kollektion", 83 | "th": "คอลเลกชันแนะนำ", 84 | "zh-CN": "特色产品系列", 85 | "zh-TW": "精選商品系列" 86 | }, 87 | "class": "index-section", 88 | "settings": [ 89 | { 90 | "type": "text", 91 | "id": "title", 92 | "label": { 93 | "da": "Overskrift", 94 | "de": "Titel", 95 | "en": "Heading", 96 | "es": "Título", 97 | "fi": "Otsake", 98 | "fr": "En-tête", 99 | "hi": "शीर्षक", 100 | "it": "Heading", 101 | "ja": "見出し", 102 | "ko": "제목", 103 | "nb": "Overskrift", 104 | "nl": "Kop", 105 | "pt-BR": "Título", 106 | "pt-PT": "Título", 107 | "sv": "Rubrik", 108 | "th": "ส่วนหัว", 109 | "zh-CN": "标题", 110 | "zh-TW": "標題" 111 | }, 112 | "default": { 113 | "da": "Udvalgt kollektion", 114 | "de": "Vorgestellte Kategorie", 115 | "en": "Featured collection", 116 | "es": "Colección destacada", 117 | "fi": "Esittelyssä oleva kokoelma", 118 | "fr": "Collection en vedette", 119 | "hi": "फ़ीचर्ड कलेक्शन", 120 | "it": "Collezione in evidenza", 121 | "ja": "特集コレクション", 122 | "ko": "추천 컬렉션", 123 | "nb": "Fremhevet samling", 124 | "nl": "Uitgelichte collectie", 125 | "pt-BR": "Coleção em destaque", 126 | "pt-PT": "Coleção em destaque", 127 | "sv": "Utvald kollektion", 128 | "th": "คอลเลกชันแนะนำ", 129 | "zh-CN": "特色产品系列", 130 | "zh-TW": "精選商品系列" 131 | } 132 | }, 133 | { 134 | "id": "collection", 135 | "type": "collection", 136 | "label": { 137 | "da": "Kollektion", 138 | "de": "Kategorie", 139 | "en": "Collection", 140 | "es": "Colección", 141 | "fi": "Kokoelma", 142 | "fr": "Collection", 143 | "hi": "कलेक्शन", 144 | "it": "Collezione", 145 | "ja": "コレクション", 146 | "ko": "컬렉션", 147 | "nb": "Samling", 148 | "nl": "Collectie", 149 | "pt-BR": "Coleção", 150 | "pt-PT": "Coleção", 151 | "sv": "Produktserie", 152 | "th": "คอลเลกชัน", 153 | "zh-CN": "收藏", 154 | "zh-TW": "商品系列" 155 | } 156 | }, 157 | { 158 | "type": "range", 159 | "id": "grid", 160 | "label": { 161 | "da": "Produkter pr. række", 162 | "de": "Produkte per Reihe", 163 | "en": "Products per row", 164 | "es": "Productos por fila", 165 | "fi": "Tuotteita per rivi", 166 | "fr": "Produits par rangée", 167 | "hi": "प्रति पंक्ति उत्पाद", 168 | "it": "Prodotti per riga", 169 | "ja": "行あたりの商品数", 170 | "ko": "열 별 제품", 171 | "nb": "Produkter per rad", 172 | "nl": "Producten per rij", 173 | "pt-BR": "Produtos por linha", 174 | "pt-PT": "Produtos por linha", 175 | "sv": "Produkter per rad", 176 | "th": "สินค้าต่อแถว", 177 | "zh-CN": "每行产品数", 178 | "zh-TW": "每列產品數" 179 | }, 180 | "min": 2, 181 | "max": 5, 182 | "step": 1, 183 | "default": 3 184 | }, 185 | { 186 | "type": "range", 187 | "id": "rows", 188 | "label": { 189 | "da": "Rækker", 190 | "de": "Reihen", 191 | "en": "Rows", 192 | "es": "Filas", 193 | "fi": "Rivit", 194 | "fr": "Rangées", 195 | "hi": "पंक्ति", 196 | "it": "Righe", 197 | "ja": "行", 198 | "ko": "열", 199 | "nb": "Rader", 200 | "nl": "Rijen", 201 | "pt-BR": "Linhas", 202 | "pt-PT": "Linhas", 203 | "sv": "Rader", 204 | "th": "แถว", 205 | "zh-CN": "行数", 206 | "zh-TW": "列" 207 | }, 208 | "min": 1, 209 | "max": 5, 210 | "step": 1, 211 | "default": 2 212 | }, 213 | { 214 | "type": "checkbox", 215 | "id": "show_vendor", 216 | "label": { 217 | "da": "Vis produktleverandører", 218 | "de": "Produkt-Lieferanten anzeigen", 219 | "en": "Show product vendors", 220 | "es": "Mostrar proveedores del producto", 221 | "fi": "Näytä tuotteen myyjät", 222 | "fr": "Afficher les vendeurs", 223 | "hi": "उत्पाद विक्रेताओं को दिखाएं", 224 | "it": "Mostra fornitori prodotto", 225 | "ja": "商品の販売元を表示する", 226 | "ko": "제품 공급 업체 표시", 227 | "nb": "Vis produktleverandører", 228 | "nl": "Productleveranciers weergeven", 229 | "pt-BR": "Exibir fornecedores do produto", 230 | "pt-PT": "Mostrar fornecedores do produto", 231 | "sv": "Visa produktleverantörer", 232 | "th": "แสดงผู้ขายสินค้า", 233 | "zh-CN": "显示产品厂商", 234 | "zh-TW": "顯示產品廠商" 235 | }, 236 | "default": false 237 | }, 238 | { 239 | "type": "checkbox", 240 | "id": "show_view_all", 241 | "label": { 242 | "da": "Vis knappen \"Se flere\"", 243 | "de": "'Alle anzeigen' Button anzeigen", 244 | "en": "Show 'View all' button", 245 | "es": "Mostrar el botón 'Ver todo'", 246 | "fi": "Näytä \"Näytä kaikki\" -painike", 247 | "fr": "Afficher le bouton “Tout voir”", 248 | "hi": "'सभी देखें' बटन दिखाएं", 249 | "it": "Mostra il pulsante \"Visualizza tutto\"", 250 | "ja": "「すべて表示」ボタンを表示する", 251 | "ko": "'모두 보기' 버튼 표시", 252 | "nb": "Vis «Se alle»-knapp", 253 | "nl": "Knop 'Alles weergeven' weergeven", 254 | "pt-BR": "Exibir botão 'Visualizar tudo'", 255 | "pt-PT": "Mostrar botão 'Ver tudo'", 256 | "sv": "Visa \"Visa alla\"-knappen", 257 | "th": "แสดงปุ่ม 'ดูทั้งหมด'", 258 | "zh-CN": "显示“查看全部”按钮", 259 | "zh-TW": "顯示「檢視全部」按鈕" 260 | }, 261 | "default": false 262 | } 263 | ], 264 | "presets": [ 265 | { 266 | "name": { 267 | "da": "Udvalgt kollektion", 268 | "de": "Vorgestellte Kategorie", 269 | "en": "Featured collection", 270 | "es": "Colección destacada", 271 | "fi": "Esittelyssä oleva kokoelma", 272 | "fr": "Collection en vedette", 273 | "hi": "फ़ीचर्ड कलेक्शन", 274 | "it": "Collezione in evidenza", 275 | "ja": "特集コレクション", 276 | "ko": "추천 컬렉션", 277 | "nb": "Utvalgt samling", 278 | "nl": "Uitgelichte collectie", 279 | "pt-BR": "Coleção em destaque", 280 | "pt-PT": "Coleção em destaque", 281 | "sv": "Utvald kollektion", 282 | "th": "คอลเลกชันแนะนำ", 283 | "zh-CN": "特色产品系列", 284 | "zh-TW": "精選商品系列" 285 | }, 286 | "category": { 287 | "da": "Kollektion", 288 | "de": "Kategorie", 289 | "en": "Collection", 290 | "es": "Colección", 291 | "fi": "Kokoelma", 292 | "fr": "Collection", 293 | "hi": "कलेक्शन", 294 | "it": "Collezione", 295 | "ja": "コレクション", 296 | "ko": "컬렉션", 297 | "nb": "Samling", 298 | "nl": "Collectie", 299 | "pt-BR": "Coleção", 300 | "pt-PT": "Coleção", 301 | "sv": "Produktserie", 302 | "th": "คอลเลกชัน", 303 | "zh-CN": "收藏", 304 | "zh-TW": "商品系列" 305 | } 306 | } 307 | ] 308 | } 309 | {% endschema %} 310 | -------------------------------------------------------------------------------- /theme/sections/logo-bar.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.title != blank %} 3 |
4 |

{{ section.settings.title | escape }}

5 |
6 | {% endif %} 7 | 8 | {% if section.blocks.size > 0 %} 9 | 26 | {% endif %} 27 | 28 | {% if section.blocks.size == 0 %} 29 | {% include 'no-blocks' %} 30 | {% endif %} 31 |
32 | 33 | 34 | 35 | {% schema %} 36 | { 37 | "name": { 38 | "da": "Logoliste", 39 | "de": "Logo-Liste", 40 | "en": "Logo list", 41 | "es": "Lista de logos", 42 | "fi": "Logoluettelo", 43 | "fr": "Liste des logos", 44 | "hi": "लोगो सूची", 45 | "it": "Elenco loghi", 46 | "ja": "ロゴリスト", 47 | "ko": "로고 목록", 48 | "nb": "Logoliste", 49 | "nl": "Logolijst", 50 | "pt-BR": "Lista de logotipos", 51 | "pt-PT": "Lista de logótipos", 52 | "sv": "Logotyplista", 53 | "th": "รายการโลโก้", 54 | "zh-CN": "logo 列表", 55 | "zh-TW": "標誌清單" 56 | }, 57 | "class": "index-section", 58 | "max_blocks": 20, 59 | "settings": [ 60 | { 61 | "type": "text", 62 | "id": "title", 63 | "label": { 64 | "da": "Overskrift", 65 | "de": "Titel", 66 | "en": "Heading", 67 | "es": "Título", 68 | "fi": "Otsake", 69 | "fr": "En-tête", 70 | "hi": "शीर्षक", 71 | "it": "Heading", 72 | "ja": "見出し", 73 | "ko": "제목", 74 | "nb": "Overskrift", 75 | "nl": "Kop", 76 | "pt-BR": "Título", 77 | "pt-PT": "Título", 78 | "sv": "Rubrik", 79 | "th": "ส่วนหัว", 80 | "zh-CN": "标题", 81 | "zh-TW": "標題" 82 | }, 83 | "default": { 84 | "da": "Logoliste", 85 | "de": "Logo-Liste", 86 | "en": "Logo list", 87 | "es": "Lista de logos", 88 | "fi": "Logoluettelo", 89 | "fr": "Liste de logos", 90 | "hi": "लोगो सूची", 91 | "it": "Elenco loghi", 92 | "ja": "ロゴリスト", 93 | "ko": "로고 목록", 94 | "nb": "Logoliste", 95 | "nl": "Logolijst", 96 | "pt-BR": "Lista de logotipos", 97 | "pt-PT": "Lista de logótipos", 98 | "sv": "Logotyplista", 99 | "th": "รายการโลโก้", 100 | "zh-CN": "logo 列表", 101 | "zh-TW": "標誌清單" 102 | } 103 | } 104 | ], 105 | "blocks": [ 106 | { 107 | "type": "logo_image", 108 | "name": { 109 | "da": "Logo", 110 | "de": "Logo", 111 | "en": "Logo", 112 | "es": "Logo", 113 | "fi": "Logo", 114 | "fr": "Logo", 115 | "hi": "लोगो", 116 | "it": "Logo", 117 | "ja": "ロゴ", 118 | "ko": "로고", 119 | "nb": "Logo", 120 | "nl": "Logo", 121 | "pt-BR": "Logotipo", 122 | "pt-PT": "Logótipo", 123 | "sv": "Logotyp", 124 | "th": "โลโก้", 125 | "zh-CN": "logo", 126 | "zh-TW": "商標" 127 | }, 128 | "settings": [ 129 | { 130 | "type": "image_picker", 131 | "id": "image", 132 | "label": { 133 | "da": "Billede", 134 | "de": "Foto", 135 | "en": "Image", 136 | "es": "Imagen", 137 | "fi": "Kuva", 138 | "fr": "Image", 139 | "hi": "इमेज", 140 | "it": "Immagine", 141 | "ja": "画像", 142 | "ko": "이미지", 143 | "nb": "Bilde", 144 | "nl": "Afbeelding", 145 | "pt-BR": "Imagem", 146 | "pt-PT": "Imagem", 147 | "sv": "Bild", 148 | "th": "รูปภาพ", 149 | "zh-CN": "图片", 150 | "zh-TW": "圖片" 151 | } 152 | }, 153 | { 154 | "type": "url", 155 | "id": "link", 156 | "label": { 157 | "da": "Link", 158 | "de": "Link", 159 | "en": "Link", 160 | "es": "Enlace", 161 | "fi": "Linkki", 162 | "fr": "Lien", 163 | "hi": "लिंक", 164 | "it": "Link", 165 | "ja": "リンク", 166 | "ko": "링크", 167 | "nb": "Kobling", 168 | "nl": "Link", 169 | "pt-BR": "Link", 170 | "pt-PT": "Ligação", 171 | "sv": "Länk", 172 | "th": "ลิงก์", 173 | "zh-CN": "链接", 174 | "zh-TW": "連結" 175 | }, 176 | "info": { 177 | "da": "Valgfri", 178 | "de": "Optional", 179 | "en": "Optional", 180 | "es": "Opcional", 181 | "fi": "Valinnainen", 182 | "fr": "Facultatif", 183 | "hi": "वैकल्पिक", 184 | "it": "Facoltativo", 185 | "ja": "オプション", 186 | "ko": "선택 사항", 187 | "nb": "Valgfritt", 188 | "nl": "Optioneel", 189 | "pt-BR": "Opcional", 190 | "pt-PT": "Opcional", 191 | "sv": "Valfritt", 192 | "th": "ไม่จำเป็น", 193 | "zh-CN": "可选", 194 | "zh-TW": "(選填)" 195 | } 196 | } 197 | ] 198 | } 199 | ], 200 | "presets": [ 201 | { 202 | "name": { 203 | "da": "Logoliste", 204 | "de": "Logo-Liste", 205 | "en": "Logo list", 206 | "es": "Lista de logos", 207 | "fi": "Logoluettelo", 208 | "fr": "Liste de logos", 209 | "hi": "लोगो सूची", 210 | "it": "Elenco loghi", 211 | "ja": "ロゴリスト", 212 | "ko": "로고 목록", 213 | "nb": "Logoliste", 214 | "nl": "Logolijst", 215 | "pt-BR": "Lista de logotipos", 216 | "pt-PT": "Lista de logótipos", 217 | "sv": "Logotyplista", 218 | "th": "รายการโลโก้", 219 | "zh-CN": "logo 列表", 220 | "zh-TW": "標誌清單" 221 | }, 222 | "category": { 223 | "da": "Billede", 224 | "de": "Foto", 225 | "en": "Image", 226 | "es": "Imagen", 227 | "fi": "Kuva", 228 | "fr": "Image", 229 | "hi": "इमेज", 230 | "it": "Immagine", 231 | "ja": "画像", 232 | "ko": "이미지", 233 | "nb": "Bilde", 234 | "nl": "Afbeelding", 235 | "pt-BR": "Imagem", 236 | "pt-PT": "Imagem", 237 | "sv": "Bild", 238 | "th": "รูปภาพ", 239 | "zh-CN": "图片", 240 | "zh-TW": "圖片" 241 | }, 242 | "blocks": [ 243 | { 244 | "type": "logo_image" 245 | }, 246 | { 247 | "type": "logo_image" 248 | }, 249 | { 250 | "type": "logo_image" 251 | }, 252 | { 253 | "type": "logo_image" 254 | } 255 | ] 256 | } 257 | ] 258 | } 259 | {% endschema %} 260 | -------------------------------------------------------------------------------- /theme/sections/password-footer.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.show_share_buttons %} 3 |
4 |

{{ section.settings.social_message | escape }}

5 | {% include 'social-sharing' %} 6 |
7 | {% endif %} 8 | 9 |
10 | {% capture shopify %} 11 | Shopify 12 | {% endcapture %} 13 | 14 | {{ 'general.password_page.powered_by_shopify_html' | t: shopify: shopify }} 15 |
16 |
17 | 18 | 19 | {% schema %} 20 | { 21 | "name": { 22 | "da": "Sidefod", 23 | "de": "Fußzeile", 24 | "en": "Footer", 25 | "es": "Pie de página", 26 | "fi": "Alatunniste", 27 | "fr": "Pied de page", 28 | "hi": "फुटर", 29 | "it": "Footer", 30 | "ja": "フッター", 31 | "ko": "바닥글", 32 | "nb": "Footer", 33 | "nl": "Voettekst", 34 | "pt-BR": "Rodapé", 35 | "pt-PT": "Rodapé", 36 | "sv": "Sidfot", 37 | "th": "ส่วนท้าย", 38 | "zh-CN": "页脚", 39 | "zh-TW": "頁尾" 40 | }, 41 | "settings": [ 42 | { 43 | "type": "checkbox", 44 | "id": "show_share_buttons", 45 | "label": { 46 | "da": "Vis knapper til deling på sociale medier", 47 | "de": "Buttons für Social Media anzeigen", 48 | "en": "Show social sharing buttons", 49 | "es": "Mostrar botones para compartir en redes sociales", 50 | "fi": "Näytä sosiaalisen median jakamispainikkeet", 51 | "fr": "Affichez les boutons de partage sur les médias sociaux", 52 | "hi": "सोशल शेयरिंग बटन दिखाएं", 53 | "it": "Mostra i pulsanti per la condivisione sui social", 54 | "ja": "ソーシャルメディアでの共有ボタンを表示する", 55 | "ko": "소셜 공유 버튼 표시", 56 | "nb": "Vis knapper for deling på sosiale medier", 57 | "nl": "Knoppen voor sociaal delen weergeven", 58 | "pt-BR": "Exibir botões de compartilhamento em redes sociais", 59 | "pt-PT": "Mostrar botões de partilha nas redes sociais", 60 | "sv": "Visa knappar för delning i sociala medier", 61 | "th": "แสดงปุ่มสำหรับแชร์ลงโซเชียล", 62 | "zh-CN": "显示社交分享按钮", 63 | "zh-TW": "顯示社群分享按鈕" 64 | }, 65 | "default": true 66 | }, 67 | { 68 | "type": "text", 69 | "id": "social_message", 70 | "label": { 71 | "da": "Overskrift på knapper til deling på sociale medier", 72 | "de": "Titel für Social Media Buttons", 73 | "en": "Social sharing buttons heading", 74 | "es": "Título de botones para compartir en redes sociales", 75 | "fi": "Sosiaalisen median jakamispainikkeiden otsikko", 76 | "fr": "Titre des options de partage", 77 | "hi": "सोशल शेयरिंग बटन शीर्षक", 78 | "it": "Titolo dei pulsanti per la condivisione sui social", 79 | "ja": "ソーシャル共有ボタンの見出し", 80 | "ko": "소셜 공유 버튼 제목", 81 | "nb": "Overskrift til knapper for sosial deling", 82 | "nl": "Kop van knoppen voor delen via social media", 83 | "pt-BR": "Exibir botões de compartilhamento em redes sociais", 84 | "pt-PT": "Título dos botões de partilha nas redes sociais", 85 | "sv": "Knapprubrik för social delning", 86 | "th": "ส่วนหัวปุ่มสำหรับแชร์ลงโซเชียล", 87 | "zh-CN": "社交分享按钮标题", 88 | "zh-TW": "社交分享按鈕標題" 89 | }, 90 | "default": { 91 | "da": "Spred budskabet", 92 | "de": "Machen Sie Werbung", 93 | "en": "Spread the word", 94 | "es": "Riega la voz", 95 | "fi": "Levitä sanaa", 96 | "fr": "Faites passer le mot", 97 | "hi": "जानकारी अधिक लोगों तक पहुंचाएं", 98 | "it": "Spargi la voce", 99 | "ja": "情報を広く伝えましょう", 100 | "ko": "소문 내기:", 101 | "nb": "Spre ordet", 102 | "nl": "Vertel het verder", 103 | "pt-BR": "Divulgue a novidade", 104 | "pt-PT": "Passar a palavra", 105 | "sv": "Sprid meddelandet", 106 | "th": "ประกาศ", 107 | "zh-CN": "传播消息", 108 | "zh-TW": "四處宣傳" 109 | } 110 | } 111 | ] 112 | } 113 | {% endschema %} 114 | -------------------------------------------------------------------------------- /theme/sections/password-header.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.logo %} 3 | {%- assign img_url = section.settings.logo | img_url: '1x1' | replace: '_1x1.', '_{width}x.' -%} 4 | 23 | {% else %} 24 |

25 | 26 |

27 | {% endif %} 28 | 29 | {{ section.settings.header | escape }} 30 |
31 | 32 | 33 | {% schema %} 34 | { 35 | "name": { 36 | "da": "Overskrift", 37 | "de": "Titel", 38 | "en": "Header", 39 | "es": "Encabezado", 40 | "fi": "Ylätunniste", 41 | "fr": "En-tête", 42 | "hi": "हैडर", 43 | "it": "Header", 44 | "ja": "ヘッダー", 45 | "ko": "머리글", 46 | "nb": "Header", 47 | "nl": "Koptekst", 48 | "pt-BR": "Cabeçalho", 49 | "pt-PT": "Cabeçalho", 50 | "sv": "Rubrik", 51 | "th": "ส่วนหัว", 52 | "zh-CN": "标头", 53 | "zh-TW": "標頭" 54 | }, 55 | "settings": [ 56 | { 57 | "type": "image_picker", 58 | "id": "logo", 59 | "label": { 60 | "da": "Logobillede", 61 | "de": "Logo-Foto", 62 | "en": "Logo image", 63 | "es": "Logo", 64 | "fi": "Logokuva", 65 | "fr": "Image du logo", 66 | "hi": "लोगो इमेज", 67 | "it": "Immagine del logo", 68 | "ja": "ロゴ画像", 69 | "ko": "로고 이미지", 70 | "nb": "Logobilde", 71 | "nl": "Afbeelding van logo", 72 | "pt-BR": "Imagem do logotipo", 73 | "pt-PT": "Imagem do logótipo", 74 | "sv": "Logobild", 75 | "th": "รูปภาพโลโก้", 76 | "zh-CN": "logo 图片", 77 | "zh-TW": "標誌圖片" 78 | } 79 | }, 80 | { 81 | "type": "range", 82 | "id": "logo_max_width", 83 | "label": { 84 | "da": "Tilpasset logobredde", 85 | "de": "Logobreite", 86 | "en": "Custom logo width", 87 | "es": "Ancho del logo personalizado", 88 | "fi": "Mukautetun logon leveys", 89 | "fr": "Largeur personnalisée du logo", 90 | "hi": "कस्टम लोगो की चौड़ाई", 91 | "it": "Larghezza logo personalizzato", 92 | "ja": "ロゴの幅をカスタマイズする", 93 | "ko": "사용자 지정 로고 폭", 94 | "nb": "Tilpasset logobredde", 95 | "nl": "Aangepaste logo-breedte", 96 | "pt-BR": "Largura do logotipo personalizado", 97 | "pt-PT": "Largura de logótipo personalizada", 98 | "sv": "Anpassad logotypsbredd", 99 | "th": "ความกว้างของโลโก้แบบกำหนดเอง", 100 | "zh-CN": "自定义 logo 宽度", 101 | "zh-TW": "自訂商標寬度" 102 | }, 103 | "min": 50, 104 | "max": 500, 105 | "step": 10, 106 | "unit": "px", 107 | "default": 100 108 | }, 109 | { 110 | "type": "text", 111 | "id": "header", 112 | "label": { 113 | "da": "Overskrift", 114 | "de": "Titel", 115 | "en": "Heading", 116 | "es": "Título", 117 | "fi": "Otsake", 118 | "fr": "En-tête", 119 | "hi": "शीर्षक", 120 | "it": "Heading", 121 | "ja": "見出し", 122 | "ko": "제목", 123 | "nb": "Overskrift", 124 | "nl": "Kop", 125 | "pt-BR": "Título", 126 | "pt-PT": "Título", 127 | "sv": "Rubrik", 128 | "th": "ส่วนหัว", 129 | "zh-CN": "标题", 130 | "zh-TW": "標題" 131 | }, 132 | "default": { 133 | "da": "Kommer snart", 134 | "de": "Demnächst", 135 | "en": "Coming Soon", 136 | "es": "Próximamente", 137 | "fi": "Tulossa pian", 138 | "fr": "En construction", 139 | "hi": "जल्द आ रहा है", 140 | "it": "Presto disponibile", 141 | "ja": "まもなく公開", 142 | "ko": "곧 출시 예정", 143 | "nb": "Kommer snart", 144 | "nl": "Binnenkort", 145 | "pt-BR": "Em breve", 146 | "pt-PT": "Em breve", 147 | "sv": "Kommer snart", 148 | "th": "เร็วๆ นี้", 149 | "zh-CN": "即将推出", 150 | "zh-TW": "即將推出" 151 | } 152 | } 153 | ] 154 | } 155 | {% endschema %} 156 | -------------------------------------------------------------------------------- /theme/sections/product-recommendations.liquid: -------------------------------------------------------------------------------- 1 | {%- if section.settings.show_product_recommendations -%} 2 | {%- if recommendations.performed -%} 3 | {%- if recommendations.products_count > 0 -%} 4 |
5 | {%- if section.settings.heading != blank -%} 6 |
7 |

{{ section.settings.heading | escape }}

8 |
9 | {%- endif -%} 10 | 17 |
18 | {%- endif -%} 19 | {%- else -%} 20 |
21 | {%- endif -%} 22 | {%- endif -%} 23 | 24 | {% schema %} 25 | { 26 | "name": { 27 | "da": "Produktanbefalinger", 28 | "de": "Produktempfehlungen", 29 | "en": "Product recommendations", 30 | "es": "Recomendaciones de productos", 31 | "fi": "Tuotesuositukset", 32 | "fr": "Recommandations de produits", 33 | "hi": "उत्पाद की अनुशंसाएं", 34 | "it": "Raccomandazioni sui prodotti", 35 | "ja": "商品の推奨", 36 | "ko": "제품 권장 사항", 37 | "nb": "Produktanbefalinger", 38 | "nl": "Productaanbevelingen", 39 | "pt-BR": "Recomendações de produtos", 40 | "pt-PT": "Recomendações de produtos", 41 | "sv": "Produktrekommendationer", 42 | "th": "คำแนะนำสินค้า", 43 | "zh-CN": "产品推荐", 44 | "zh-TW": "商品推薦" 45 | }, 46 | "settings": [ 47 | { 48 | "type": "checkbox", 49 | "id": "show_product_recommendations", 50 | "label": { 51 | "da": "Vis dynamiske anbefalinger", 52 | "de": "Dynamische Empfehlungen anzeigen", 53 | "en": "Show dynamic recommendations", 54 | "es": "Mostrar recomendaciones dinámicas", 55 | "fi": "Näytä dynaamiset suositukset", 56 | "fr": "Afficher les recommandations dynamiques", 57 | "hi": "डायनेमिक सुझाव दिखाएं", 58 | "it": "Mostra raccomandazioni dinamiche", 59 | "ja": "動的推奨を表示する", 60 | "ko": "동적 권장 사항 표시", 61 | "nb": "Vis dynamiske anbefalinger", 62 | "nl": "Dynamische aanbevelingen weergeven", 63 | "pt-BR": "Mostrar recomendações dinâmicas", 64 | "pt-PT": "Mostrar recomendações dinâmicas", 65 | "sv": "Visa dynamiska rekommendationer", 66 | "th": "แสดงคำแนะนำแบบไดนามิก", 67 | "zh-CN": "显示动态推荐", 68 | "zh-TW": "顯示動態推薦" 69 | }, 70 | "info": { 71 | "da": "Dynamiske anbefalinger ændres og forbedres med tiden. [Få mere at vide](https://help.shopify.com/en/themes/development/recommended-products)", 72 | "de": "Dynamische Empfehlungen werden im Laufe der Zeit angepasst und verbessert. [Mehr Informationen](https://help.shopify.com/en/themes/development/recommended-products)", 73 | "en": "Dynamic recommendations change and improve with time. [Learn more](https://help.shopify.com/en/themes/development/recommended-products)", 74 | "es": "Las recomendaciones dinámicas cambian y mejoran con el tiempo. [Más información](https://help.shopify.com/en/themes/development/recommended-products)", 75 | "fi": "Dynaamiset suositukset muuttuvat ja paranevat ajan myötä. [Lisätietoja](https://help.shopify.com/en/themes/development/recommended-products)", 76 | "fr": "Les recommandations dynamiques changent et s'améliorent avec le temps. [En savoir plus](https://help.shopify.com/en/themes/development/recommended-products)", 77 | "hi": "समय के साथ डायनेमिक सुझाव परिवर्तन और सुधार. [अधिक जानें](https://help.shopify.com/en/themes/development/recommended-products)", 78 | "it": "Le raccomandazioni dinamiche cambiano e migliorano nel tempo. [Maggiori informazioni](https://help.shopify.com/en/themes/development/recommended-products)", 79 | "ja": "動的推奨は時間とともに変化し改善します。[詳細情報](https://help.shopify.com/en/themes/development/recommended-products)", 80 | "ko": "동적 권장 사항은 시간이 지나면서 변하고 개선됩니다. [자세히 알아보기](https://help.shopify.com/en/themes/development/recommended-products)", 81 | "nb": "Dynamiske anbefalinger endrer seg og forbedres med tiden. [Finn ut mer](https://help.shopify.com/en/themes/development/recommended-products)", 82 | "nl": "Dynamische aanbevelingen veranderen en verbeteren mettertijd. [Meer informatie](https://help.shopify.com/en/themes/development/recommended-products)", 83 | "pt-BR": "As recomendações dinâmicas mudam e melhoram com o tempo. [Saiba mais](https://help.shopify.com/en/themes/development/recommended-products)", 84 | "pt-PT": "As recomendações dinâmicas mudam e melhoram com o tempo. [Saiba mais](https://help.shopify.com/en/themes/development/recommended-products)", 85 | "sv": "Dynamiska rekommendationer ändras och förbättras med tiden. [Läs mer](https://help.shopify.com/en/themes/development/recommended-products)", 86 | "th": "คำแนะนำแบบไดนามิกนั้นเปลี่ยนแปลงและถูกปรับปรุงให้ดีขึ้นตลอดเวลา [เรียนรู้เพิ่มเติม](https://help.shopify.com/en/themes/development/recommended-products)", 87 | "zh-CN": "动态推荐会随着时间而变化和改进。[了解详细信息](https://help.shopify.com/en/themes/development/recommended-products)", 88 | "zh-TW": "動態推薦會隨著時間改變與改進。[深入瞭解](https://help.shopify.com/en/themes/development/recommended-products)" 89 | }, 90 | "default": true 91 | }, 92 | { 93 | "type": "text", 94 | "id": "heading", 95 | "label": { 96 | "da": "Overskrift", 97 | "de": "Überschrift", 98 | "en": "Heading", 99 | "es": "Título", 100 | "fi": "Otsake", 101 | "fr": "En-tête", 102 | "hi": "शीर्षक", 103 | "it": "Heading", 104 | "ja": "見出し", 105 | "ko": "제목", 106 | "nb": "Overskrift", 107 | "nl": "Kop", 108 | "pt-BR": "Título", 109 | "pt-PT": "Título", 110 | "sv": "Rubrik", 111 | "th": "ส่วนหัว", 112 | "zh-CN": "标题", 113 | "zh-TW": "標題" 114 | }, 115 | "default": { 116 | "da": "Du vil muligvis også synes om", 117 | "de": "Das könnte Ihnen auch gefallen", 118 | "en": "You may also like", 119 | "es": "También te puede interesar", 120 | "fi": "Saatat pitää myös näistä", 121 | "fr": "Vous pourriez aimer également", 122 | "hi": "आप शायद इसे भी पसंद करें", 123 | "it": "Potrebbero interessarti anche", 124 | "ja": "あなたへのおすすめ", 125 | "ko": "회원님도 좋아할 것입니다.", 126 | "nb": "Kanskje du også liker", 127 | "nl": "Wellicht vindt u dit ook leuk", 128 | "pt-BR": "Talvez você também goste de", 129 | "pt-PT": "Também poderá gostar de", 130 | "sv": "Du kanske också gillar", 131 | "th": "คุณอาจจะชอบ", 132 | "zh-CN": "您可能还喜欢", 133 | "zh-TW": "您也可能喜歡" 134 | } 135 | }, 136 | { 137 | "type": "checkbox", 138 | "id": "show_vendor", 139 | "label": { 140 | "da": "Vis leverandør", 141 | "de": "Lieferanten anzeigen", 142 | "en": "Show vendor", 143 | "es": "Mostrar proveedor", 144 | "fi": "Näytä myyjä", 145 | "fr": "Afficher les vendeurs", 146 | "hi": "विक्रेता दिखाएं", 147 | "it": "Mostra fornitore", 148 | "ja": "販売元を表示する", 149 | "ko": "공급업체 표시", 150 | "nb": "Vis leverandør", 151 | "nl": "Leverancier weergeven", 152 | "pt-BR": "Exibir fornecedor", 153 | "pt-PT": "Mostrar fornecedor", 154 | "sv": "Visa säljare", 155 | "th": "แสดงผู้ขาย", 156 | "zh-CN": "显示厂商", 157 | "zh-TW": "顯示廠商" 158 | }, 159 | "default": false 160 | } 161 | ] 162 | } 163 | {% endschema %} 164 | -------------------------------------------------------------------------------- /theme/sections/quotes.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if section.settings.title != blank %} 3 |
4 |

{{ section.settings.title | escape }}

5 |
6 | {% endif %} 7 | 8 | {% if section.blocks.size > 0 %} 9 |
10 |
11 | {% for block in section.blocks %} 12 |
13 |
14 | {% include 'icon-quote' %} 15 | {% if block.settings.quote != blank %} 16 |
{{ block.settings.quote }}
17 | {% endif %} 18 | {% if block.settings.author != blank %} 19 | {{ block.settings.author | escape }} 20 | {% endif %} 21 |
22 |
23 | {% endfor %} 24 |
25 |
26 | {% endif %} 27 | 28 | {% if section.blocks.size == 0 %} 29 | {% include 'no-blocks' %} 30 | {% endif %} 31 |
32 | 33 | 34 | 35 | {% schema %} 36 | { 37 | "name": { 38 | "da": "Udtalelser", 39 | "de": "Testimonials", 40 | "en": "Testimonials", 41 | "es": "Testimonios", 42 | "fi": "Suositukset", 43 | "fr": "Témoignages", 44 | "hi": "प्रमाणपत्र", 45 | "it": "Testimonial", 46 | "ja": "お客様の声", 47 | "ko": "추천", 48 | "nb": "Tilbakemeldinger fra kunder", 49 | "nl": "Getuigenissen", 50 | "pt-BR": "Depoimentos", 51 | "pt-PT": "Depoimentos", 52 | "sv": "Kundberättelser", 53 | "th": "เสียงชื่นชมจากลูกค้า", 54 | "zh-CN": "感言", 55 | "zh-TW": "推薦文" 56 | }, 57 | "class": "index-section", 58 | "max_blocks": 9, 59 | "settings": [ 60 | { 61 | "type": "text", 62 | "id": "title", 63 | "label": { 64 | "da": "Overskrift", 65 | "de": "Titel", 66 | "en": "Heading", 67 | "es": "Título", 68 | "fi": "Otsake", 69 | "fr": "En-tête", 70 | "hi": "शीर्षक", 71 | "it": "Heading", 72 | "ja": "見出し", 73 | "ko": "제목", 74 | "nb": "Overskrift", 75 | "nl": "Kop", 76 | "pt-BR": "Título", 77 | "pt-PT": "Título", 78 | "sv": "Rubrik", 79 | "th": "ส่วนหัว", 80 | "zh-CN": "标题", 81 | "zh-TW": "標題" 82 | }, 83 | "default": { 84 | "da": "Udtalelser", 85 | "de": "Testimonials", 86 | "en": "Testimonials", 87 | "es": "Testimonios", 88 | "fi": "Suositukset", 89 | "fr": "Témoignages", 90 | "hi": "प्रमाणपत्र", 91 | "it": "Testimonial", 92 | "ja": "お客様の声", 93 | "ko": "추천", 94 | "nb": "Tilbakemeldinger fra kunder", 95 | "nl": "Getuigenissen", 96 | "pt-BR": "Depoimentos", 97 | "pt-PT": "Depoimentos", 98 | "sv": "Kundberättelser", 99 | "th": "เสียงชื่นชมจากลูกค้า", 100 | "zh-CN": "感言", 101 | "zh-TW": "推薦文" 102 | } 103 | } 104 | ], 105 | "blocks": [ 106 | { 107 | "type": "quote", 108 | "name": { 109 | "da": "Udtalelse", 110 | "de": "Testimonial", 111 | "en": "Testimonial", 112 | "es": "Testimonio", 113 | "fi": "Suositukset", 114 | "fr": "Témoignages", 115 | "hi": "प्रमाणपत्र", 116 | "it": "Testimonial", 117 | "ja": "お客様の声", 118 | "ko": "추천", 119 | "nb": "Anbefaling", 120 | "nl": "Testimonial", 121 | "pt-BR": "Depoimento", 122 | "pt-PT": "Testemunho", 123 | "sv": "Kundberättelser", 124 | "th": "เสียงชื่นชมจากลูกค้า", 125 | "zh-CN": "感言", 126 | "zh-TW": "推薦文" 127 | }, 128 | "settings": [ 129 | { 130 | "type": "richtext", 131 | "id": "quote", 132 | "label": { 133 | "da": "Tekst", 134 | "de": "Text", 135 | "en": "Text", 136 | "es": "Texto", 137 | "fi": "Teksti", 138 | "fr": "Texte", 139 | "hi": "टेक्स्ट", 140 | "it": "Testo", 141 | "ja": "テキスト", 142 | "ko": "텍스트", 143 | "nb": "Tekst", 144 | "nl": "Tekst", 145 | "pt-BR": "Texto", 146 | "pt-PT": "Texto", 147 | "sv": "Text", 148 | "th": "ข้อความ", 149 | "zh-CN": "文本", 150 | "zh-TW": "文字" 151 | }, 152 | "default": { 153 | "da": "

Tilføj kundeanmeldelser og udtalelser for at fremhæve din butiks tilfredse kunder.

", 154 | "de": "

Kunden-Reviews und Testimonials, die Kundenzufriedenheit beweisen.

", 155 | "en": "

Add customer reviews and testimonials to showcase your store’s happy customers.

", 156 | "es": "

Agrega las reseñas y los testimonios de los clientes para mostrar a los clientes satisfechos de tu tienda.

", 157 | "fi": "

Lisää asiakasarviointeja ja suositteluja esimerkeiksi myymäläsi tyytyväisistä asiakkaista.

", 158 | "fr": "

Ajoutez des avis et témoignages pour mettre en avant vos clients satisfaits.

", 159 | "hi": "

अपने स्टोर के खुश ग्राहकों को दिखाने के लिए ग्राहक समीक्षा और प्रशंसापत्र जोड़ें.

", 160 | "it": "

Aggiungi recensioni e testimonianze sul tuo negozio per dimostrare che i clienti sono soddisfatti.

", 161 | "ja": "

あなたのストアの幸せなお客様を紹介するために、カスタマーレビューとお客様の声を追加してください。

", 162 | "ko": "

고객 리뷰 및 추천을 추가하여 스토어에 만족한 고객을 보여주십시오.

", 163 | "nb": "

Legg til kundeomtaler og anbefalinger for å vise frem butikkens glade kunder.

", 164 | "nl": "

Voeg beoordelingen van klanten en testimonials toe om te laten zien dat je klanten tevreden zijn.

", 165 | "pt-BR": "

Adicione comentários e depoimentos para dar destaque aos clientes satisfeitos com a sua loja.

", 166 | "pt-PT": "

Adicione análises e testemunhos para mostrar os clientes felizes da sua loja.

", 167 | "sv": "

Lägg till kundrecensioner och berättelser för att visa upp din butiks nöjda kunder.

", 168 | "th": "

เพิ่มรีวิวและเสียงชื่นชมจากลูกค้าเพื่อนำเสนอลูกค้าที่ได้รับความพึงพอใจจากร้านค้า

", 169 | "zh-CN": "

添加客户评论和感言,以展示对您的商店满意的客户。

", 170 | "zh-TW": "

新增顧客評論和推薦文,展示對您商店滿意之顧客。

" 171 | } 172 | }, 173 | { 174 | "type": "text", 175 | "id": "author", 176 | "label": { 177 | "da": "Forfatter", 178 | "de": "Autor", 179 | "en": "Author", 180 | "es": "Autor", 181 | "fi": "Kirjoittaja", 182 | "fr": "Auteur", 183 | "hi": "लेखक", 184 | "it": "Autore", 185 | "ja": "執筆者", 186 | "ko": "작성자", 187 | "nb": "Forfatter", 188 | "nl": "Auteur", 189 | "pt-BR": "Autoria", 190 | "pt-PT": "Autoria", 191 | "sv": "Upphovsman", 192 | "th": "ผู้เขียน", 193 | "zh-CN": "作者", 194 | "zh-TW": "作者" 195 | }, 196 | "default": { 197 | "da": "Forfatterens navn", 198 | "de": "Name des Autors", 199 | "en": "Author's name", 200 | "es": "Nombre del autor", 201 | "fi": "Kirjoittajan nimi", 202 | "fr": "Nom de l'auteur", 203 | "hi": "लेखक का नाम", 204 | "it": "Nome dell'autore", 205 | "ja": "筆者の名前", 206 | "ko": "작성자 이름", 207 | "nb": "Forfatterens navn", 208 | "nl": "Naam auteur", 209 | "pt-BR": "Nome do autor", 210 | "pt-PT": "Nome do autor", 211 | "sv": "Författarens namn", 212 | "th": "ชื่อผู้เขียน", 213 | "zh-CN": "作者姓名", 214 | "zh-TW": "作者名稱" 215 | } 216 | } 217 | ] 218 | } 219 | ], 220 | "presets": [ 221 | { 222 | "name": { 223 | "da": "Udtalelser", 224 | "de": "Testimonials", 225 | "en": "Testimonials", 226 | "es": "Testimonios", 227 | "fi": "Suositukset", 228 | "fr": "Témoignages", 229 | "hi": "प्रमाणपत्र", 230 | "it": "Testimonial", 231 | "ja": "お客様の声", 232 | "ko": "추천", 233 | "nb": "Tilbakemeldinger fra kunder", 234 | "nl": "Getuigenissen", 235 | "pt-BR": "Depoimentos", 236 | "pt-PT": "Depoimentos", 237 | "sv": "Kundberättelser", 238 | "th": "เสียงชื่นชมจากลูกค้า", 239 | "zh-CN": "感言", 240 | "zh-TW": "推薦文" 241 | }, 242 | "category": { 243 | "da": "Tekst", 244 | "de": "Text", 245 | "en": "Text", 246 | "es": "Texto", 247 | "fi": "Teksti", 248 | "fr": "Texte", 249 | "hi": "टेक्स्ट", 250 | "it": "Testo", 251 | "ja": "テキスト", 252 | "ko": "텍스트", 253 | "nb": "Tekst", 254 | "nl": "Tekst", 255 | "pt-BR": "Texto", 256 | "pt-PT": "Texto", 257 | "sv": "Text", 258 | "th": "ข้อความ", 259 | "zh-CN": "文本", 260 | "zh-TW": "文字" 261 | }, 262 | "blocks": [ 263 | { 264 | "type": "quote" 265 | }, 266 | { 267 | "type": "quote" 268 | }, 269 | { 270 | "type": "quote" 271 | } 272 | ] 273 | } 274 | ] 275 | } 276 | {% endschema %} 277 | -------------------------------------------------------------------------------- /theme/snippets/bgset.liquid: -------------------------------------------------------------------------------- 1 | {%- if image != blank -%} 2 | {% if image.width > 180 %}{{ image | img_url: '180x' }} 180w {{ 180 | divided_by: image.aspect_ratio | round }}h,{% endif %} 3 | {% if image.width > 360 %}{{ image | img_url: '360x' }} 360w {{ 360 | divided_by: image.aspect_ratio | round }}h,{% endif %} 4 | {% if image.width > 540 %}{{ image | img_url: '540x' }} 540w {{ 540 | divided_by: image.aspect_ratio | round }}h,{% endif %} 5 | {% if image.width > 720 %}{{ image | img_url: '720x' }} 720w {{ 720 | divided_by: image.aspect_ratio | round }}h,{% endif %} 6 | {% if image.width > 900 %}{{ image | img_url: '900x' }} 900w {{ 900 | divided_by: image.aspect_ratio | round }}h,{% endif %} 7 | {% if image.width > 1080 %}{{ image | img_url: '1080x' }} 1080w {{ 1080 | divided_by: image.aspect_ratio | round }}h,{% endif %} 8 | {% if image.width > 1296 %}{{ image | img_url: '1296x' }} 1296w {{ 1296 | divided_by: image.aspect_ratio | round }}h,{% endif %} 9 | {% if image.width > 1512 %}{{ image | img_url: '1512x' }} 1512w {{ 1512 | divided_by: image.aspect_ratio | round }}h,{% endif %} 10 | {% if image.width > 1728 %}{{ image | img_url: '1728x' }} 1728w {{ 1728 | divided_by: image.aspect_ratio | round }}h,{% endif %} 11 | {% if image.width > 1950 %}{{ image | img_url: '1950x' }} 1950w {{ 1950 | divided_by: image.aspect_ratio | round }}h,{% endif %} 12 | {% if image.width > 2100 %}{{ image | img_url: '2100x' }} 2100w {{ 2100 | divided_by: image.aspect_ratio | round }}h,{% endif %} 13 | {% if image.width > 2260 %}{{ image | img_url: '2260x' }} 2260w {{ 2260 | divided_by: image.aspect_ratio | round }}h,{% endif %} 14 | {% if image.width > 2450 %}{{ image | img_url: '2450x' }} 2450w {{ 2450 | divided_by: image.aspect_ratio | round }}h,{% endif %} 15 | {% if image.width > 2700 %}{{ image | img_url: '2700x' }} 2700w {{ 2700 | divided_by: image.aspect_ratio | round }}h,{% endif %} 16 | {% if image.width > 3000 %}{{ image | img_url: '3000x' }} 3000w {{ 3000 | divided_by: image.aspect_ratio | round }}h,{% endif %} 17 | {% if image.width > 3350 %}{{ image | img_url: '3350x' }} 3350w {{ 3350 | divided_by: image.aspect_ratio | round }}h,{% endif %} 18 | {% if image.width > 3750 %}{{ image | img_url: '3750x' }} 3750w {{ 3750 | divided_by: image.aspect_ratio | round }}h,{% endif %} 19 | {% if image.width > 4100 %}{{ image | img_url: '4100x' }} 4100w {{ 4100 | divided_by: image.aspect_ratio | round }}h,{% endif %} 20 | {{ image | img_url: 'master' }} {{ image.width }}w {{ image.height }}h 21 | {%- endif -%} 22 | -------------------------------------------------------------------------------- /theme/snippets/cart-popup.liquid: -------------------------------------------------------------------------------- 1 | {%- style -%} 2 | {% assign cart_popup_box_shadow = settings.color_borders | color_modify: 'alpha', 0.5 %} 3 | 4 | .cart-popup { 5 | box-shadow: 1px 1px 10px 2px {{ cart_popup_box_shadow }}; 6 | } 7 | {%- endstyle -%} 8 | 9 | 46 | -------------------------------------------------------------------------------- /theme/snippets/collection-grid-item.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a list of products from a collection 3 | 4 | Accepts: 5 | - collection: {Object} Collection Liquid object (required) 6 | 7 | Usage: 8 | {% include 'collection-grid-item', collection: collection %} 9 | {% endcomment %} 10 | {% if collection.image %} 11 | {%- assign collection_image = collection.image -%} 12 | {% elsif collection.products.first and collection.products.first.media != empty %} 13 | {%- assign collection_image = collection.products.first.featured_media.preview_image -%} 14 | {% else %} 15 | {% assign collection_image = blank %} 16 | {% endif %} 17 | 18 |
19 | 20 | {% unless collection_image == blank %} 21 |
26 |
27 | 30 | {% else %} 31 | {% if collection == empty %} 32 |
33 | {% capture current %}{% cycle 1, 2, 3 %}{% endcapture %} 34 | {{ 'collection-' | append: current | placeholder_svg_tag: 'placeholder-svg' }} 35 |
36 | {% else %} 37 |
38 | {% endif %} 39 | {% endunless %} 40 | 41 |
42 |
43 | {% if collection.title == blank %} 44 | {{ 'homepage.onboarding.collection_title' | t }} 45 | {% else %} 46 | {{ collection.title }} 47 | {% endif %} 48 |
49 |
50 |
51 |
52 | -------------------------------------------------------------------------------- /theme/snippets/comment.liquid: -------------------------------------------------------------------------------- 1 | 2 |
3 | {{ comment.content }} 4 |
5 |
6 | {{ comment.author }} 7 | {{ comment.created_at | time_tag: format: 'date' }} 8 |
9 | -------------------------------------------------------------------------------- /theme/snippets/form-status.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a form status message 3 | Accepts: 4 | - form: {Object} Form Liquid object (required) 5 | - form_id: {String} Form's id attribute for accessibility purpose (required) 6 | - success_message: {String} Success message locale key. Default to 'contact.form.post_success' (optional) 7 | 8 | Usage: 9 | {% include 'form-status', form: form, form_id: formId, success_message: post_message %} 10 | {% endcomment %} 11 | {%- if form.posted_successfully? -%} 12 |

13 | {{ success_message | default: 'contact.form.post_success' | t }} 14 |

15 | {%- endif -%} 16 | 17 | {% comment %} We need to add this so the errors are output in the right order {% endcomment %} 18 | {% assign error_order = "author, email, body, password, form" | split: ", " %} 19 | 20 | {%- if form.errors -%} 21 | 22 |
23 |

{{ 'contact.form.error_heading' | t }}

24 | 52 |
53 | {%- endif -%} 54 | -------------------------------------------------------------------------------- /theme/snippets/icon-3d-badge-full-color.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-arrow-left.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-arrow-right.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-cart.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-chevron-down.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-chevron-left.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-chevron-right.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-close.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-error.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-facebook.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-hamburger.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-instagram.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-laser.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-lock.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-login.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-minus.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-pause.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-pin.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-pinterest.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-play.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-plus.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-quote.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-resume.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-rss.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-saletag.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-search.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-shopify-logo.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-snapchat.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-spinner.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-tumblr.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-twitter.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-video-badge-full-color.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-vimeo.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/icon-youtube.liquid: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /theme/snippets/image-style.liquid: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /theme/snippets/media.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a media element for the product gallery. 3 | Media types include: image, video, external_video and model. 4 | Accepts: 5 | - media: {Object} Media Liquid object (required) 6 | - featured_media: {Object} Media Liquid object (required) - featured media of a given product or variant 7 | - height: {Number} Maximum height of the gallery (required) 8 | - image_zoom_size: {String} Size of the zoomed image (e.g., '1024x1024') (required for media type image) 9 | - enable_image_zoom: {Boolean} Image zoom setting (required for media type image) 10 | - image_scale: {String} Image scale (e.g., '2') (required for media type image) 11 | 12 | Usage: 13 | {%- for media in product.media -%} 14 | {% include 'media', media: media, featured_media: featured_media, height: height %} 15 | {%- endfor -%} 16 | 17 | {%- for media in product.media -%} 18 | {% include 'media', media: media, featured_media: featured_media, height: height, 19 | enable_image_zoom: enable_image_zoom, image_zoom_size: product_image_zoom_size, image_scale: product_image_scale %} 20 | {%- endfor -%} 21 | {% endcomment %} 22 | 23 | {% capture media_id %}FeaturedMedia-{{ section.id }}-{{ media.id }}{% endcapture %} 24 | {% capture media_class %}product-featured-media{% endcapture %} 25 | {% capture media_wrapper_id %}{{ media_id }}-wrapper{% endcapture %} 26 | 27 | {%- comment -%} 28 | Load different poster image sizes depending on the product layout 29 | {%- endcomment -%} 30 | {% capture image_size %}{{ height }}x{{ height }}{% endcapture %} 31 | 32 | 77 | -------------------------------------------------------------------------------- /theme/snippets/no-blocks.liquid: -------------------------------------------------------------------------------- 1 |
2 | {{ 'homepage.onboarding.no_content' | t }} 3 |
4 | -------------------------------------------------------------------------------- /theme/snippets/pagination.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a pagination bar 3 | 4 | Accepts: 5 | - paginate: {Object} Paginate Liquid object (required) 6 | 7 | Usage: 8 | {% include 'pagination', paginate: paginate %} 9 | {% endcomment %} 10 | 45 | -------------------------------------------------------------------------------- /theme/snippets/product-card-grid.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a product card using "Grid" style 3 | Accepts: 4 | - max_height: {Number} Maximum height of the product's image (required) 5 | - product: {Object} Product Liquid object (required) 6 | - show_vendor: {Boolean} Show the product's vendor depending on the section setting (optional) 7 | 8 | Usage: 9 | {% include 'product-card-grid', max_height: max_height, product: product, show_vendor: section.settings.show_vendor %} 10 | {% endcomment %} 11 |
12 | 13 | {{ product.title }} 14 | 15 | 16 | {% capture img_id %}ProductCardImage-{{ section.id }}-{{ product.id }}{% endcapture %} 17 | {% capture wrapper_id %}ProductCardImageWrapper-{{ section.id }}-{{ product.id }}{% endcapture %} 18 | {%- assign preview_image = product.featured_media.preview_image -%} 19 | {%- assign img_url = preview_image | img_url: '1x1' | replace: '_1x1.', '_{width}x.' -%} 20 | 21 | {% unless preview_image == blank %} 22 | {% include 'image-style', image: preview_image, height: max_height, wrapper_id: wrapper_id, img_id: img_id %} 23 | {% endunless %} 24 | 25 |
26 |
27 |
28 | {{ preview_image.alt }} 36 |
37 |
38 |
39 |
40 | 41 | 45 | 46 | 47 | 48 | {% include 'product-price-listing', product: product, show_vendor: show_vendor %} 49 | 50 |
51 | -------------------------------------------------------------------------------- /theme/snippets/product-card-list.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a product card using "List" style 3 | 4 | Accepts: 5 | - product: {Object} Product Liquid object (required) 6 | - show_vendor: {Boolean} Show the product's vendor depending on the section setting (optional) 7 | 8 | Usage: 9 | {% include 'product-card-list', product: product, show_vendor: section.settings.show_vendor %} 10 | {% endcomment %} 11 |
12 | 13 | {{ product.title }} 14 | 15 | 16 | 38 |
39 | -------------------------------------------------------------------------------- /theme/snippets/product-price-listing.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a list of product's price (regular, sale, unit) 3 | Accompanies product listings (collection page, search result) and not updated dynamically 4 | Accepts: 5 | - variant: {Object} Variant Liquid object (optional) 6 | - product: {Object} Product Liquid object (optional) 7 | - show_vendor: {Boolean} Show the product's vendor depending on the section setting (optional) 8 | 9 | Usage: 10 | {% include 'product-price-listing', product: product %} 11 | {% endcomment %} 12 | {%- liquid 13 | if product.title 14 | assign compare_at_price = product.compare_at_price 15 | assign price = product.price 16 | assign available = product.available 17 | assign variant = product.variants.first 18 | else 19 | assign compare_at_price = 1999 20 | assign price = 1999 21 | assign available = true 22 | endif 23 | 24 | assign money_price = price | money 25 | -%} 26 | 27 |
33 | {% if show_vendor and product %} 34 |
35 |
36 | {{ 'products.product.vendor' | t }} 37 |
38 |
39 | {{ product.vendor }} 40 |
41 |
42 | {% endif %} 43 | 44 | {%- comment -%} 45 | Explanation of description list: 46 | - div.price__regular: Displayed when there are no variants on sale 47 | - div.price__sale: Displayed when a variant is a sale 48 | - div.price__unit: Displayed when the first variant has a unit price 49 | - div.price__availability: Displayed when the product is sold out 50 | {%- endcomment -%} 51 |
52 |
53 | {{ 'products.product.regular_price' | t }} 54 |
55 |
56 | 57 | {%- if product.price_varies -%} 58 | {{ 'products.product.from_lowest_price_html' | t: lowest_price: money_price }} 59 | {%- else -%} 60 | {{ money_price }} 61 | {%- endif -%} 62 | 63 |
64 |
65 |
66 |
67 | {{ 'products.product.sale_price' | t }} 68 |
69 |
70 | 71 | {%- if product.price_varies -%} 72 | {{ 'products.product.from_lowest_price_html' | t: lowest_price: money_price }} 73 | {%- else -%} 74 | {{ money_price }} 75 | {%- endif -%} 76 | 77 |
78 |
79 |
80 | {{ 'products.product.regular_price' | t }} 81 |
82 |
83 | 84 | {{ compare_at_price | money }} 85 | 86 |
87 |
88 |
89 |
90 |
91 | {{ 'products.product.unit_price_label' | t }} 92 |
93 |
94 | {%- capture unit_price_separator -%} 95 | {{ 'general.accessibility.unit_price_separator' | t }}  96 | {%- endcapture -%} 97 | {%- capture unit_price_base_unit -%} 98 | 99 | {%- if variant.unit_price_measurement -%} 100 | {%- if variant.unit_price_measurement.reference_value != 1 -%} 101 | {{- variant.unit_price_measurement.reference_value -}} 102 | {%- endif -%} 103 | {{ variant.unit_price_measurement.reference_unit }} 104 | {%- endif -%} 105 | 106 | {%- endcapture -%} 107 | 108 | {{ variant.unit_price | money }}{{- unit_price_separator -}}{{- unit_price_base_unit -}} 109 |
110 |
111 |
112 | 115 | 116 | {{ 'products.product.sold_out' | t }} 117 | 118 |
119 |
120 | -------------------------------------------------------------------------------- /theme/snippets/product-price.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a list of product's price (regular, sale, unit) 3 | Accompanies product forms and meant to be updated dynamically 4 | Accepts: 5 | - variant: {Object} Variant Liquid object (optional) 6 | - product: {Object} Product Liquid object (optional) 7 | - show_vendor: {Boolean} Show the product's vendor depending on the section setting (optional) 8 | 9 | Usage: 10 | {% include 'product-price', variant: current_variant, product: product %} 11 | {% endcomment %} 12 | {%- liquid 13 | if variant.title 14 | assign compare_at_price = variant.compare_at_price 15 | assign price = variant.price 16 | assign available = variant.available 17 | else 18 | assign compare_at_price = 1999 19 | assign price = 1999 20 | assign available = true 21 | endif 22 | 23 | assign money_price = price | money 24 | -%} 25 | 26 |
32 | 33 | {% if show_vendor and product %} 34 |
35 |
36 | {{ 'products.product.vendor' | t }} 37 |
38 |
39 | {{ product.vendor }} 40 |
41 |
42 | {% endif %} 43 | 44 | {%- comment -%} 45 | Explanation of description list: 46 | - div.price__regular: Displayed when there are no variants on sale 47 | - div.price__sale: Displayed when a variant is a sale 48 | - div.price__unit: Displayed when the first variant has a unit price 49 | - div.price__availability: Displayed when the product is sold out 50 | {%- endcomment -%} 51 |
52 |
53 |
54 | {{ 'products.product.regular_price' | t }} 55 |
56 |
57 | 58 | {{ money_price }} 59 | 60 |
61 |
62 |
63 |
64 | {{ 'products.product.sale_price' | t }} 65 |
66 |
67 | 68 | {{ money_price }} 69 | 70 |
71 |
72 | {{ 'products.product.regular_price' | t }} 73 |
74 |
75 | 76 | {{ compare_at_price | money }} 77 | 78 |
79 |
80 |
81 | 84 | 85 | {{ 'products.product.sold_out' | t }} 86 | 87 |
88 |
89 |
90 |
91 | {{ 'products.product.unit_price_label' | t }} 92 |
93 |
94 | {%- capture unit_price_separator -%} 95 | {{ 'general.accessibility.unit_price_separator' | t }}  96 | {%- endcapture -%} 97 | {%- capture unit_price_base_unit -%} 98 | 99 | {%- if variant.unit_price_measurement -%} 100 | {%- if variant.unit_price_measurement.reference_value != 1 -%} 101 | {{- variant.unit_price_measurement.reference_value -}} 102 | {%- endif -%} 103 | {{ variant.unit_price_measurement.reference_unit }} 104 | {%- endif -%} 105 | 106 | {%- endcapture -%} 107 | 108 | {{ variant.unit_price | money }}{{- unit_price_separator -}}{{- unit_price_base_unit -}} 109 |
110 |
111 |
112 | -------------------------------------------------------------------------------- /theme/snippets/search-drawer.liquid: -------------------------------------------------------------------------------- 1 | 40 | -------------------------------------------------------------------------------- /theme/snippets/site-nav.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Renders a list of menu items 3 | Accepts: 4 | - linklist: {Object} Linklist Liquid object (required) 5 | - wrapper_class: {String} CSS wrapper class for the navigation (optional) 6 | 7 | Usage: 8 | {% include 'site-nav', linklist: section.settings.main_linklist, wrapper_class: 'site-nav--centered' %} 9 | {% endcomment %} 10 | 93 | -------------------------------------------------------------------------------- /theme/snippets/social-meta-tags.liquid: -------------------------------------------------------------------------------- 1 | 2 | {%- assign og_title = page_title -%} 3 | {%- assign og_url = canonical_url -%} 4 | {%- assign og_type = 'website' -%} 5 | {%- assign og_description = page_description | default: shop.description | default: shop.name -%} 6 | {% if settings.share_image %} 7 | {%- capture og_image_tags -%}{%- endcapture -%} 8 | {%- capture og_image_secure_url_tags -%}{%- endcapture -%} 9 | {% endif %} 10 | 11 | {% comment %} Template specific overides {% endcomment %} 12 | {% if request.page_type == 'product' %} 13 | {%- assign og_title = product.title | strip_html -%} 14 | {%- assign og_type = 'product' -%} 15 | {% if product.media.size > 0 %} 16 | {%- capture og_image_tags -%}{% for media in product.media limit:3 -%}{% endfor -%}{% endcapture -%} 17 | {%- capture og_image_secure_url_tags -%}{% for media in product.media limit:3 -%}{% endfor -%}{% endcapture -%} 18 | {% endif %} 19 | 20 | {% elsif request.page_type == 'article' %} 21 | {%- assign og_title = article.title | strip_html -%} 22 | {%- assign og_type = 'article' -%} 23 | {%- assign og_description = article.excerpt_or_content | strip_html -%} 24 | {% if article.image %} 25 | {%- capture og_image_tags -%}{%- endcapture -%} 26 | {%- capture og_image_secure_url_tags -%}{%- endcapture -%} 27 | {% endif %} 28 | 29 | {% elsif request.page_type == 'collection' %} 30 | {%- assign og_title = collection.title | strip_html -%} 31 | {%- assign og_type = 'product.group' -%} 32 | {% if collection.image %} 33 | {%- capture og_image_tags -%}{%- endcapture -%} 34 | {%- capture og_image_secure_url_tags -%}{%- endcapture -%} 35 | {% endif %} 36 | 37 | {% elsif request.page_type == 'password' %} 38 | {%- assign og_title = shop.name -%} 39 | {%- assign og_url = shop.url -%} 40 | {%- assign og_description = shop.description | default: shop.name -%} 41 | {% endif %} 42 | 43 | 44 | 45 | 46 | 47 | 48 | {% if request.page_type == 'product' %} 49 | 50 | 51 | {% endif %} 52 | {{ og_image_tags }} 53 | {{ og_image_secure_url_tags }} 54 | 55 | {% unless settings.social_twitter_link == blank %} 56 | 57 | {% endunless %} 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /theme/snippets/social-sharing.liquid: -------------------------------------------------------------------------------- 1 | 2 | 35 | -------------------------------------------------------------------------------- /theme/templates/404.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ 'general.404.title' | t }}

4 |

{{ 'general.404.subtext' | t }}

5 |

6 | {{ 'general.404.link' | t }}{% include 'icon-arrow-right' %} 7 |

8 |
9 |
10 | -------------------------------------------------------------------------------- /theme/templates/article.liquid: -------------------------------------------------------------------------------- 1 | {%- comment -%} 2 | Comments may not appear right after they are submitted, either to be checked by Shopify's spam filter 3 | or to await moderation. When a comment is submitted, the browser is redirected to a page 4 | that includes the new comment id in its URL. 5 | Example: http://shopname.myshopify.com/blogs/news/2022072-my-post?comment=3721372 6 | {%- endcomment -%} 7 | 8 | {%- if comment.status == 'pending' -%} 9 | {%- assign number_of_comments = article.comments_count | plus: 1 -%} 10 | {%- else -%} 11 | {%- assign number_of_comments = article.comments_count -%} 12 | {%- endif -%} 13 | 14 |
15 |
16 |
17 | {% section 'article-template' %} 18 |
19 |
20 |
21 | 22 | {% if blog.comments_enabled? %} 23 | {% if number_of_comments > 0 %} 24 | 25 |
26 |
27 |
28 |

{{ 'blogs.comments.comments_with_count' | t: count: number_of_comments }}

29 | 30 | {% paginate article.comments by 5 %} 31 | 32 | {% comment %} 33 | #comments is required, it is used as an anchor link by Shopify. 34 | {% endcomment %} 35 |
36 |
    37 | {% comment %} 38 | If a comment was just submitted with no blank field, show it. 39 | {% endcomment %} 40 | {% if comment.status == 'pending' %} 41 |
  • 42 | {% include 'comment', comment: comment %} 43 |
  • 44 | {% endif %} 45 | 46 | {% for comment in article.comments %} 47 |
  • 48 | {% include 'comment', comment: comment %} 49 |
  • 50 | {% endfor %} 51 |
52 | 53 | {%- if paginate.pages > 1 -%} 54 | {% include 'pagination', paginate: paginate %} 55 | {%- endif -%} 56 | 57 |
58 | {% endpaginate %} 59 |
60 |
61 |
62 | {% endif %} 63 | 64 | 65 |
66 |
67 |
68 |
69 | {% form 'new_comment', article %} 70 | 71 | {%- assign formId = 'CommentForm' -%} 72 | 73 |

{{ 'blogs.comments.title' | t }}

74 | 75 | {%- assign post_message = 'blogs.comments.success' -%} 76 | {%- if blog.moderated? and comment.status == 'pending' -%} 77 | {%- assign post_message = 'blogs.comments.success_moderated' -%} 78 | {%- elsif comment.status == 'unapproved' or comment.status == 'spam' -%} 79 | {%- assign post_message = 'blogs.comments.unapproved' -%} 80 | {%- endif -%} 81 | 82 | {% include 'form-status', form: form, form_id: formId, success_message: post_message %} 83 | 84 |
85 | 86 |
87 | 88 | 89 | {% if form.errors contains 'author' %} 90 | 91 | {{ 'general.accessibility.error' | t }} 92 | {% include 'icon-error' %} 93 | {{ 'blogs.comments.name' | t }} {{ form.errors.messages['author'] }}. 94 | 95 | {% endif %} 96 |
97 | 98 |
99 | 100 | 101 | {% if form.errors contains 'email' %} 102 | 103 | {{ 'general.accessibility.error' | t }} 104 | {% include 'icon-error' %} 105 | {{ form.errors.translated_fields['email'] | capitalize }} {{ form.errors.messages['email'] }}. 106 | 107 | {% endif %} 108 |
109 | 110 |
111 | 112 | 113 | {% if form.errors contains 'body' %} 114 | 115 | {{ 'general.accessibility.error' | t }} 116 | {% include 'icon-error' %} 117 | {{ 'blogs.comments.message' | t }} {{ form.errors.messages['body'] }}. 118 | 119 | {% endif %} 120 |
121 | 122 |
123 | 124 | {% if blog.moderated? %} 125 |

{{ 'blogs.comments.moderated' | t }}

126 | {% endif %} 127 | 128 | 129 | {% endform %} 130 |
131 |
132 |
133 |
134 | {% endif %} 135 | 136 | 142 | 143 | 183 | -------------------------------------------------------------------------------- /theme/templates/blog.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | The contents of the blog.liquid template can be found in /sections/blog-template.liquid 3 | {% endcomment %} 4 | 5 | {% section 'blog-template' %} 6 | -------------------------------------------------------------------------------- /theme/templates/cart.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | The contents of the cart.liquid template can be found in /sections/cart-template.liquid 3 | {% endcomment %} 4 | 5 | {% section 'cart-template' %} 6 | 7 | -------------------------------------------------------------------------------- /theme/templates/collection.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | The contents of the collection.liquid template can be found in /sections/collection-template.liquid 3 | {% endcomment %} 4 | 5 | {% section 'collection-template' %} 6 | -------------------------------------------------------------------------------- /theme/templates/customers/account.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ 'customer.account.title' | t }}

4 | {{ 'layout.customer.log_out' | t | customer_logout_link }} 5 |
6 | 7 |
8 |
9 |

{{ 'customer.orders.title' | t }}

10 | 11 | {% paginate customer.orders by 20 %} 12 | {% if customer.orders.size != 0 %} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {% for order in customer.orders %} 26 | 27 | 30 | 31 | 32 | 33 | 34 | 35 | {% endfor %} 36 | 37 |
{{ 'customer.orders.order_number' | t }}{{ 'customer.orders.date' | t }}{{ 'customer.orders.payment_status' | t }}{{ 'customer.orders.fulfillment_status' | t }}{{ 'customer.orders.total' | t }}
28 | {{ order.name }} 29 | {{ order.created_at | time_tag: format: 'date' }}{{ order.financial_status_label }}{{ order.fulfillment_status_label }}{{ order.total_price | money }}
38 | 39 | {% else %} 40 | 41 |

{{ 'customer.orders.none' | t }}

42 | 43 | {% endif %} 44 | {%- if paginate.pages > 1 -%} 45 | {% include 'pagination', paginate: paginate %} 46 | {%- endif -%} 47 | {% endpaginate %} 48 |
49 | 56 |
57 |
58 | -------------------------------------------------------------------------------- /theme/templates/customers/activate_account.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

{{ 'customer.activate_account.title' | t }}

6 |

{{ 'customer.activate_account.subtext' | t }}

7 |
8 | 9 |
10 | {% form 'activate_customer_password' %} 11 | 12 | {%- if form.errors -%} 13 |
14 | {{ form.errors | default_errors }} 15 |
16 | {%- endif -%} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | {% endform %} 27 |
28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /theme/templates/customers/addresses.liquid: -------------------------------------------------------------------------------- 1 | {% paginate customer.addresses by 5 %} 2 | 3 |
4 |
5 |

{{ 'customer.addresses.title' | t }}

6 |

{{ 'customer.account.return' | t }}

7 |

8 | 9 |

10 |
11 |
12 | 13 |
14 |
15 |
16 | {% comment %} 17 | Add address form, hidden by default 18 | {% endcomment %} 19 |
20 | {% form 'customer_address', customer.new_address %} 21 |

{{ 'customer.addresses.add_new' | t }}

22 | 23 |
24 |
25 | 26 | 27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 | 35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | 48 |
49 |
50 | 51 | 52 |
53 | 54 |
55 | 56 | 57 |
58 |
59 | 60 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | {{ form.set_as_default_checkbox }} 72 | 73 | 74 |
75 |
76 | 77 | {% endform %} 78 |
79 |
80 | 81 | {% comment %} 82 | List all customer addresses with a unique edit form. 83 | Also add pagination in case they have a large number of addresses 84 | {% endcomment %} 85 |
    86 | {% for address in customer.addresses %} 87 |
  • 88 |
    89 | {% if address == customer.default_address %} 90 |

    {{ 'customer.addresses.default' | t }}

    91 | {% endif %} 92 | 93 | {{ address | format_address }} 94 | 95 |
      96 |
    • 97 | 107 |
    • 108 |
    • 109 | 117 |
    • 118 |
    119 |
    120 | 121 |
    122 | {% form 'customer_address', address %} 123 | 124 |

    {{ 'customer.addresses.edit_address' | t }}

    125 | 126 |
    127 |
    128 | 129 | 130 |
    131 | 132 |
    133 | 134 | 135 |
    136 |
    137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 |
    148 |
    149 | 150 | 151 |
    152 |
    153 | 154 | 155 |
    156 |
    157 | 158 | 162 | 163 |
    164 |
    165 | 166 | 167 |
    168 | 169 |
    170 | 171 | 172 |
    173 |
    174 | 175 |
    176 | {{ form.set_as_default_checkbox }} 177 | 178 | 179 |
    180 |
    181 |
    182 | 183 | {% endform %} 184 |
    185 |
    186 |
  • 187 | {% endfor %} 188 |
189 | 190 | {%- if paginate.pages > 1 -%} 191 | {% include 'pagination', paginate: paginate %} 192 | {%- endif -%} 193 |
194 |
195 | 196 |
197 | {% endpaginate %} 198 | -------------------------------------------------------------------------------- /theme/templates/customers/login.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | {{ 'customer.recover_password.success' | t }} 7 |
8 | 9 |
10 | 11 |

{{ 'customer.login.title' | t }}

12 | 13 | {% form 'customer_login', novalidate: 'novalidate' %} 14 | 15 | {%- if form.errors -%} 16 |
17 |

{{ 'contact.form.error_heading' | t }}

18 | {{ form.errors | default_errors }} 19 |
20 | {%- endif -%} 21 | 22 | 23 | 35 | 36 | {% if form.password_needed %} 37 | 38 | 48 | {% endif %} 49 | 50 |
51 | {% if form.password_needed %} 52 |

{{ 'customer.login.forgot_password' | t }}

53 | {% endif %} 54 | 55 | 56 | 57 |

58 | {{ 'layout.customer.create_account' | t | customer_register_link }} 59 |

60 |
61 | 62 | {% endform %} 63 |
64 | 65 |
66 | 67 |
68 |

{{ 'customer.recover_password.title' | t }}

69 |

{{ 'customer.recover_password.subtext' | t }}

70 |
71 | 72 |
73 | {% form 'recover_customer_password' %} 74 | 75 | {% comment %} 76 | Add a hidden span to indicate the form was submitted succesfully. 77 | {% endcomment %} 78 | {% if form.posted_successfully? %} 79 | 80 | {% endif %} 81 | 82 | 83 | 96 | {%- if form.errors -%} 97 | 98 | {{ 'general.accessibility.error' | t }} 99 | {% include 'icon-error' %} 100 | {{ form.errors.messages['form'] }} 101 | 102 | {%- endif -%} 103 | 104 |
105 |

106 | 107 |

108 | 109 | {{ 'customer.recover_password.cancel' | t }} 110 |
111 | {% endform %} 112 |
113 | 114 |
115 | 116 | {% comment %} 117 | If accounts are set as optional, the following will be shown as an option 118 | during checkout, not on the default /login page. 119 | {% endcomment %} 120 | {% if shop.checkout.guest_login %} 121 |
122 |
123 |

{{ 'customer.login.guest_title' | t }}

124 | 125 | {% form 'guest_login' %} 126 | 127 | {% endform %} 128 |
129 | {% endif %} 130 |
131 | 132 |
133 |
134 | -------------------------------------------------------------------------------- /theme/templates/customers/order.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ 'customer.account.title' | t }}

4 |

{{ 'customer.account.return' | t }}

5 |
6 | 7 |
8 |
9 |

{{ 'customer.order.title' | t: name: order.name }}

10 | 11 | {%- assign order_date = order.created_at | time_tag: format: "date_at_time" -%} 12 |

{{ 'customer.order.date_html' | t: date: order_date }}

13 | 14 | {%- if order.cancelled -%} 15 |
16 | {%- assign cancelled_at = order.cancelled_at | time_tag: format: "date_at_time" -%} 17 |

{{ 'customer.order.cancelled_html' | t: date: cancelled_at }}

18 |

{{ 'customer.order.cancelled_reason' | t: reason: order.cancel_reason_label }}

19 |
20 | {%- endif -%} 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | {%- for line_item in order.line_items -%} 34 | 35 | 66 | 67 | 113 | 114 | 134 | 135 | {%- endfor -%} 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | {%- if order.cart_level_discount_applications != blank -%} 144 | 145 | {%- for discount_application in order.cart_level_discount_applications -%} 146 | 152 | 160 | {%- endfor -%} 161 | 162 | {%- endif -%} 163 | 164 | {%- for shipping_method in order.shipping_methods -%} 165 | 166 | 167 | 168 | 169 | {%- endfor -%} 170 | 171 | {%- for tax_line in order.tax_lines -%} 172 | 173 | 174 | 175 | 176 | {%- endfor -%} 177 | 178 | 179 | 180 | 181 | 182 | 183 |
{{ 'customer.order.product' | t }}{{ 'customer.order.sku' | t }}{{ 'customer.order.price' | t }}{{ 'customer.order.quantity' | t }}{{ 'customer.order.total' | t }}
36 |
37 | {{ line_item.title | link_to: line_item.product.url }} 38 | {%- if line_item.line_level_discount_allocations != blank -%} 39 |
    40 | {%- for discount_allocation in line_item.line_level_discount_allocations -%} 41 |
  • 42 | {% include 'icon-saletag' %}{{ discount_allocation.discount_application.title }} (-{{ discount_allocation.amount | money }}) 43 |
  • 44 | {%- endfor -%} 45 |
46 | {%- endif -%} 47 |
48 | {%- if line_item.fulfillment -%} 49 |
50 | {%- assign created_at = line_item.fulfillment.created_at | time_tag: format: 'date' -%} 51 | {{ 'customer.order.fulfilled_at_html' | t: date: created_at }} 52 |
53 | {%- if line_item.fulfillment.tracking_url -%} 54 | 55 | {{ 'customer.order.track_shipment' | t }} 56 | 57 | {%- endif -%} 58 |
59 | {{ line_item.fulfillment.tracking_company }} 60 | {%- if line_item.fulfillment.tracking_number -%} #{{ line_item.fulfillment.tracking_number }} {%- endif -%} 61 |
62 |
63 |
64 | {%- endif -%} 65 |
{{ line_item.sku }} 68 |
69 | {%- if line_item.original_price != line_item.final_price -%} 70 |
71 | {{ 'products.product.regular_price' | t }} 72 |
73 |
74 | {{ line_item.original_price | money }} 75 |
76 |
77 | {{ 'products.product.sale_price' | t }} 78 |
79 |
80 | {{ line_item.final_price | money }} 81 |
82 | {%- else -%} 83 |
84 | {{ 'products.product.regular_price' | t }} 85 |
86 |
87 | {{ line_item.original_price | money }} 88 |
89 | {%- endif -%} 90 | 91 | {%- if line_item.unit_price_measurement -%} 92 |
93 | {{ 'products.product.unit_price_label' | t }} 94 |
95 |
96 | 97 | {%- capture unit_price_separator -%} 98 | {{ 'general.accessibility.unit_price_separator' | t }}  99 | {%- endcapture -%} 100 | {%- capture unit_price_base_unit -%} 101 | {%- if line_item.unit_price_measurement.reference_value != 1 -%} 102 | {{- line_item.unit_price_measurement.reference_value -}} 103 | {%- endif -%} 104 | {{ line_item.unit_price_measurement.reference_unit }} 105 | {%- endcapture -%} 106 | 107 | {{ line_item.unit_price | money }}{{- unit_price_separator -}}{{- unit_price_base_unit -}} 108 | 109 |
110 | {%- endif -%} 111 |
112 |
{{ line_item.quantity }} 115 | {%- if line_item.original_line_price != line_item.final_line_price -%} 116 |
117 |
118 | {{ 'products.product.regular_price' | t }} 119 |
120 |
121 | {{ line_item.original_line_price | money }} 122 |
123 |
124 | {{ 'products.product.sale_price' | t }} 125 |
126 |
127 | {{ line_item.final_line_price | money }} 128 |
129 |
130 | {%- else -%} 131 | {{ line_item.original_line_price | money }} 132 | {%- endif -%} 133 |
{{ 'customer.order.subtotal' | t }}{{ order.line_items_subtotal_price | money }}
147 | {{ 'customer.order.discount' | t }} 148 | 149 | {% include 'icon-saletag' %}{{- discount_application.title -}} 150 | 151 | 153 |
154 | 155 | {% include 'icon-saletag' %}{{- discount_application.title -}} 156 | 157 | -{{ discount_application.total_allocated_amount | money }} 158 |
159 |
{{ 'customer.order.shipping' | t }} ({{ shipping_method.title }}){{ shipping_method.price | money }}
{{ 'customer.order.tax' | t }} ({{ tax_line.title }} {{ tax_line.rate | times: 100 }}%){{ tax_line.price | money }}
{{ 'customer.order.total' | t }}{{ order.total_price | money_with_currency }}
184 |
185 | 198 |
199 |
200 | -------------------------------------------------------------------------------- /theme/templates/customers/register.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 7 |

{{ 'customer.register.title' | t }}

8 | 9 | {%- assign formId = 'RegisterForm' -%} 10 | {% form 'create_customer', id: formId, novalidate: 'novalidate' %} 11 | {% include 'form-status', form: form, form_id: formId %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 36 | {%- if form.errors contains 'email' -%} 37 | 38 | {{ 'general.accessibility.error' | t }} 39 | {% include 'icon-error' %} 40 | {{ form.errors.translated_fields['email'] | capitalize }} {{ form.errors.messages['email'] }}. 41 | 42 | {%- endif -%} 43 | 44 | 45 | 57 | {%- if form.errors contains 'password' -%} 58 | 59 | {% include 'icon-error' %} 60 | {{ form.errors.translated_fields['password'] | capitalize }} {{ form.errors.messages['password'] }}. 61 | 62 | {%- endif -%} 63 | 64 |

65 | 66 |

67 | 68 | {% endform %} 69 |
70 |
71 |
72 |
73 | -------------------------------------------------------------------------------- /theme/templates/customers/reset_password.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | {% form 'reset_customer_password' %} 7 | 8 |

{{ 'customer.reset_password.title' | t }}

9 | 10 |

{{ 'customer.reset_password.subtext' | t: email: email }}

11 | 12 | {%- if form.errors -%} 13 |
14 | {{ form.errors | default_errors }} 15 |
16 | {%- endif -%} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {% endform %} 26 |
27 | 28 |
29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /theme/templates/gift_card.liquid: -------------------------------------------------------------------------------- 1 | {% layout 'gift_card' %} 2 | 3 | {%- assign formatted_initial_value = gift_card.initial_value | money_without_trailing_zeros: gift_card.currency -%} 4 | {%- assign formatted_initial_value_stripped = formatted_initial_value | strip_html -%} 5 | 6 | 23 | 24 |
25 |
26 |
27 | 28 | 29 | {%- assign initial_value_size = formatted_initial_value | size -%} 30 |
31 | {% if gift_card.balance != gift_card.initial_value %} 32 | 33 | {{ 'gift_cards.issued.remaining_html' | t: balance: gift_card.balance | money }} 34 | 35 | {% endif %} 36 | {{ formatted_initial_value }} 37 |
38 | 39 | {%- assign code_size = gift_card.code | format_code | size -%} 40 |
41 |
42 | 48 |
49 |
50 |
51 | 52 |

53 | {{ 'gift_cards.issued.redeem_html' | t: value: formatted_initial_value_stripped }} 54 |

55 | 56 |
57 | 58 | 82 |
83 |
84 | -------------------------------------------------------------------------------- /theme/templates/index.liquid: -------------------------------------------------------------------------------- 1 | {{ content_for_index }} 2 | -------------------------------------------------------------------------------- /theme/templates/list-collections.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | The contents of the lists-collections.liquid template can be found in /sections/lists-collections-template.liquid 3 | {% endcomment %} 4 | 5 | {% section 'list-collections-template' %} 6 | -------------------------------------------------------------------------------- /theme/templates/page.contact.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

{{ page.title }}

6 |
7 | 8 | {% if page.content.size > 0 %} 9 |
10 | {{ page.content }} 11 |
12 | {% endif %} 13 | 14 |
15 | {%- assign formId = 'ContactForm' -%} 16 | {% form 'contact', id: formId %} 17 | {% include 'form-status', form: form, form_id: formId %} 18 | 19 |
20 |
21 | 22 | 23 |
24 |
25 | 26 | 40 | {%- if form.errors contains 'email' -%} 41 | 42 | {{ 'general.accessibility.error' | t }} 43 | {% include 'icon-error' %} 44 | {{ form.errors.translated_fields['email'] | capitalize }} {{ form.errors.messages['email'] }}. 45 | 46 | {%- endif -%} 47 |
48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | {% endform %} 59 |
60 |
61 |
62 |
63 | -------------------------------------------------------------------------------- /theme/templates/page.liquid: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

{{ page.title }}

6 |
7 | 8 |
9 | {{ page.content }} 10 |
11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /theme/templates/password.liquid: -------------------------------------------------------------------------------- 1 | {% layout 'password' %} 2 | 3 | {% comment %} 4 | The contents of the password.liquid templates can be found in /sections 5 | {% endcomment %} 6 | 7 | {% section 'password-header' %} 8 | {% section 'password-content' %} 9 | {% section 'password-footer' %} 10 | -------------------------------------------------------------------------------- /theme/templates/product.liquid: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | The contents of the product.liquid template can be found in /sections/product-template.liquid 3 | {% endcomment %} 4 | 5 | {% section 'product-template' %} 6 | {% section 'product-recommendations' %} 7 | 8 | {% if collection %} 9 | 15 | {% endif %} 16 | 17 | 27 | 28 | {% assign current_variant = product.selected_or_first_available_variant %} 29 | 30 | 66 | -------------------------------------------------------------------------------- /theme/templates/search.liquid: -------------------------------------------------------------------------------- 1 | {% paginate search.results by 10 %} 2 | 3 |
4 | {% if search.performed == false %} 5 |
6 |

{{ 'general.search.title' | t }}

7 | {% else %} 8 |
9 |

10 | {{ 'general.search.heading' | t: count: search.results_count }}: 11 | {{ 'general.search.results_with_count' | t: terms: search.terms, count: search.results_count }} 12 |

13 | {% endif %} 14 |
15 |
16 | {% if search.performed and search.results_count == 0 %} 17 |
18 |

{{ 'general.search.no_results' | t }}

19 |
20 | {% endif %} 21 | 53 |
54 |
55 |
56 |
57 | 58 | 59 | {% if search.performed %} 60 | {% if search.results_count > 0 %} 61 | 62 | {% endif %} 63 | 64 |

{{ 'general.search.heading' | t: count: search.results_count }}

65 | 66 | 100 | 101 | {%- if paginate.pages > 1 -%} 102 | {% include 'pagination', paginate: paginate %} 103 | {%- endif -%} 104 | {% endif %} 105 | 106 | {% if search.results_count < 2 %} 107 |
108 | {% endif %} 109 | 110 | {% endpaginate %} 111 | --------------------------------------------------------------------------------