diff --git a/.editorconfig b/.editorconfig index 0aa57424..e5ab3b66 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,5 +10,5 @@ insert_final_newline = true # JS, CSS code style settings: [*.{js,jsx,jsm,ts,tsx,scss,sass,css}] -ident_size = 2 +indent_size = 2 quote_type = single diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..8f6b16cb --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,102 @@ +# v0.1 +name: Theme deployment +on: + workflow_dispatch: + inputs: + blobUrl: + description: 'Artifact download url' + required: true + artifactVersion: + description: 'Full artifact build number' + required: true + key: + description: 'Deployment config map key' + required: true + appDescriptionRepo: + description: 'ArgoCd repository' + required: true + default: 'VirtoCommerce/vc-deploy-apps' + appDescriptionBranch: + description: 'ArgoCd branch' + required: true + default: 'master' + + +jobs: + cd: + runs-on: ubuntu-latest + steps: + + - name: Start deployment + uses: bobheadxi/deployments@master + id: deployment + with: + step: start + token: ${{ secrets.GITHUB_TOKEN }} + env: Development + no_override: false + + - name: Checkout ArgoCD repository + uses: actions/checkout@v2 + with: + token: ${{ secrets.REPO_TOKEN }} + repository: ${{ github.event.inputs.appDescriptionRepo }} + ref: ${{ github.event.inputs.appDescriptionBranch }} + + - name: Update deployment-cm + shell: pwsh + run: | + + cd ${{ github.workspace }} + cd ./webstore-app/overlays/dev + $fileName = "./deployment-cm.yaml" + $content = Get-Content $fileName + $key = "${{ github.event.inputs.key }}" + $artifactPath = "${{ github.event.inputs.blobUrl }}" + $content -replace "$key\s*:.*", "$key`: $artifactPath" | Set-Content -Path $fileName + + - name: Commit deployment-cm change + shell: pwsh + run: | + if(git status --porcelain |Where {$_ -notmatch '^\?\?'}) # uncommitted changes exist + { + git config --global user.name 'GitHub Actions' + git config user.email --global 'github.actions@virtoway.com' + git commit -am 'Automated update ${{ github.repository }} to ${{ github.event.inputs.artifactVersion }}' + git push + } + else + { + Write-Output 'Nothing to commit, working tree clean' + } + + - name: Wait for environment is up + shell: pwsh + timeout-minutes: 5 + run: | + do { + Start-Sleep -s 15 + $statusBage = (Invoke-WebRequest -Uri "https://cd.govirto.com/api/badge?name=webstore-app-dev").Content + + $syncedAndHealthy = $statusBage.Contains('>Healthy<') -and $statusBage.Contains('>Synced<') + if (-not $syncedAndHealthy) { + Write-Host "Sync pending..." + } + } + while (-not $syncedAndHealthy) + - name: BUILD_STATE::successful + if: success() + run: echo "BUILD_STATE=successful" >> $GITHUB_ENV + + - name: BUILD_STATE::failed + if: failure() + run: echo "BUILD_STATE=failed" >> $GITHUB_ENV + + - name: Update GitHub deployment status + uses: bobheadxi/deployments@master + if: always() + with: + step: finish + token: ${{ secrets.GITHUB_TOKEN }} + status: ${{ job.status }} + deployment_id: ${{ steps.deployment.outputs.deployment_id }} \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1f5746b1..78a97fd4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,6 +28,7 @@ jobs: SONAR_TOKEN: ${{secrets.SONAR_TOKEN}} GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }} BLOB_SAS: ${{ secrets.BLOB_TOKEN }} + VERSION_SUFFIX: "" steps: - uses: actions/checkout@v2 @@ -35,12 +36,21 @@ jobs: fetch-depth: 0 - name: Setup sonarqube - uses: warchant/setup-sonar-scanner@v1 + uses: warchant/setup-sonar-scanner@v3 - name: Get Image Version - uses: VirtoCommerce/vc-github-actions/get-image-version@master + uses: VirtoCommerce/vc-github-actions/get-image-version@VP-6093 id: image + - name: Set release variables + run: | + echo "VERSION_SUFFIX=${{ steps.image.outputs.suffix }}" >> $GITHUB_ENV + + - name: Set release-alpha variables + if: ${{ github.event_name == 'workflow_dispatch' }} + run: | + echo "VERSION_SUFFIX=${{ steps.image.outputs.fullSuffix }}" >> $GITHUB_ENV + - name: Get changelog id: changelog uses: VirtoCommerce/vc-github-actions/changelog-generator@master @@ -52,12 +62,12 @@ jobs: if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || github.event_name == 'workflow_dispatch' }} uses: VirtoCommerce/vc-github-actions/build-theme@master with: - versionSuffix: ${{ steps.image.outputs.suffix }} + versionSuffix: ${{ env.VERSION_SUFFIX }} - - name: Publish to blob storage - if: ${{ github.ref == 'refs/heads/dev' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master')}} + - name: Publish + if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master')}} id: publish - uses: VirtoCommerce/vc-github-actions/publish-theme@master + uses: VirtoCommerce/vc-github-actions/publish-theme@VP-6093 - name: Create Release if: ${{ github.ref == 'refs/heads/master' }} @@ -78,4 +88,12 @@ jobs: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ${{ steps.publish.outputs.artifactPath }} asset_name: ${{ steps.publish.outputs.artifactName }} - asset_content_type: application/zip \ No newline at end of file + asset_content_type: application/zip + + - name: Invoke Theme deployment workflow + if: ${{ github.ref == 'refs/heads/dev' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master')}} + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: Theme deployment + token: ${{ secrets.REPO_TOKEN }} + inputs: '{ "blobUrl": "${{ steps.publish.outputs.blobUrl }}", "artifactVersion": "${{ steps.image.outputs.fullVersion }}", "key": "B2B_THEME_URL" }' \ No newline at end of file diff --git a/.github/workflows/release-alpha.yml b/.github/workflows/release-alpha.yml index be58598d..b12d5ad6 100644 --- a/.github/workflows/release-alpha.yml +++ b/.github/workflows/release-alpha.yml @@ -18,24 +18,24 @@ jobs: fetch-depth: 0 - name: Setup sonarqube - uses: warchant/setup-sonar-scanner@v1 + uses: warchant/setup-sonar-scanner@v3 - name: Get Image Version - uses: VirtoCommerce/vc-github-actions/get-image-version@VP-5059 + uses: VirtoCommerce/vc-github-actions/get-image-version@master id: image - name: Get changelog id: changelog - uses: VirtoCommerce/vc-github-actions/changelog-generator@VP-5059 + uses: VirtoCommerce/vc-github-actions/changelog-generator@master - name: SonarCloud Scan - uses: VirtoCommerce/vc-github-actions/sonar-theme@VP-5059 + uses: VirtoCommerce/vc-github-actions/sonar-theme@master - name: Build - uses: VirtoCommerce/vc-github-actions/build-theme@VP-5059 + uses: VirtoCommerce/vc-github-actions/build-theme@master with: versionSuffix: ${{ steps.image.outputs.fullSuffix }} - name: Publish id: publish - uses: VirtoCommerce/vc-github-actions/publish-theme@VP-5059 + uses: VirtoCommerce/vc-github-actions/publish-theme@master diff --git a/assets/blocks/1428965138000_1133723.jpg b/assets/blocks/1428965138000_1133723.jpg new file mode 100644 index 00000000..1f159068 Binary files /dev/null and b/assets/blocks/1428965138000_1133723.jpg differ diff --git a/assets/blocks/coveer-with-form-background.png b/assets/blocks/coveer-with-form-background.png new file mode 100644 index 00000000..6dfd4e95 Binary files /dev/null and b/assets/blocks/coveer-with-form-background.png differ diff --git a/assets/blocks/cover-with-image-background.jpg b/assets/blocks/cover-with-image-background.jpg new file mode 100644 index 00000000..774e9324 Binary files /dev/null and b/assets/blocks/cover-with-image-background.jpg differ diff --git a/assets/blocks/cover-with-simple-text-background.jpg b/assets/blocks/cover-with-simple-text-background.jpg new file mode 100644 index 00000000..c6b63f15 Binary files /dev/null and b/assets/blocks/cover-with-simple-text-background.jpg differ diff --git a/assets/blocks/logo-1.png b/assets/blocks/logo-1.png new file mode 100644 index 00000000..0f4b53f2 Binary files /dev/null and b/assets/blocks/logo-1.png differ diff --git a/assets/blocks/logo-2.png b/assets/blocks/logo-2.png new file mode 100644 index 00000000..c77c6af4 Binary files /dev/null and b/assets/blocks/logo-2.png differ diff --git a/assets/blocks/logo-3.png b/assets/blocks/logo-3.png new file mode 100644 index 00000000..2c8c041a Binary files /dev/null and b/assets/blocks/logo-3.png differ diff --git a/assets/blocks/logo-4.png b/assets/blocks/logo-4.png new file mode 100644 index 00000000..ea175262 Binary files /dev/null and b/assets/blocks/logo-4.png differ diff --git a/assets/blocks/portfolio-woocommerce.png b/assets/blocks/portfolio-woocommerce.png new file mode 100644 index 00000000..d5fc368e Binary files /dev/null and b/assets/blocks/portfolio-woocommerce.png differ diff --git a/assets/js/bootstrap-migration/common-components/searchBar.tpl.html.liquid b/assets/js/bootstrap-migration/common-components/searchBar.tpl.html.liquid new file mode 100644 index 00000000..8fdad033 --- /dev/null +++ b/assets/js/bootstrap-migration/common-components/searchBar.tpl.html.liquid @@ -0,0 +1,28 @@ +
diff --git a/assets/js/common-components/searchBar.js b/assets/js/common-components/searchBar.js index d805d568..93e37d45 100644 --- a/assets/js/common-components/searchBar.js +++ b/assets/js/common-components/searchBar.js @@ -1,3 +1,36 @@ +searchBarController.$inject = ['$scope', '$q', 'catalogService']; +function searchBarController($scope, $q, catalogService) { + var $ctrl = this; + $ctrl.hasHint = false; + + $scope.$watch('$ctrl.isOpen', function (isOpen) { + $ctrl.hasHint = !!$ctrl.query && !isOpen; + }); + + $scope.$watch('$ctrl.query', function (query) { + $ctrl.hasHint = !!query && !$ctrl.isOpen; + }); + + $ctrl.getSuggestions = function () { + var searchCriteria = { keyword: $ctrl.query, start: 0, isFuzzySearch: true }; + return $q.all([ + catalogService.searchCategories(angular.extend({}, searchCriteria, { pageSize: $ctrl.categoryLimit })), + catalogService.search(angular.extend({}, searchCriteria, { pageSize: $ctrl.productLimit })) + ]).then(function (results) { + var process = function (within) { + return (results[0].data[within] || results[1].data[within]).map(function (suggestion) { + suggestion['within'] = within; + return suggestion; + }); + } + return process('categories').concat(process('products')).map(function (suggestion, index) { + suggestion['index'] = index; + return suggestion; + }); + }); + }; +} + var storefrontApp = angular.module('storefrontApp'); storefrontApp.component('vcSearchBar', { templateUrl: "themes/assets/js/common-components/searchBar.tpl.html", @@ -13,35 +46,22 @@ storefrontApp.component('vcSearchBar', { categoryLimit: '@', productLimit: '@' }, - controller: ['$scope', '$q', 'catalogService', function ($scope, $q, catalogService) { - var $ctrl = this; - $ctrl.hasHint = false; - - $scope.$watch('$ctrl.isOpen', function (isOpen) { - $ctrl.hasHint = !!$ctrl.query && !isOpen; - }); - - $scope.$watch('$ctrl.query', function (query) { - $ctrl.hasHint = !!query && !$ctrl.isOpen; - }); + controller: searchBarController +}); - $ctrl.getSuggestions = function () { - var searchCriteria = { keyword: $ctrl.query, start: 0, isFuzzySearch: true }; - return $q.all([ - catalogService.searchCategories(angular.extend({}, searchCriteria, { pageSize: $ctrl.categoryLimit })), - catalogService.search(angular.extend({}, searchCriteria, { pageSize: $ctrl.productLimit })) - ]).then(function (results) { - var process = function (within) { - return (results[0].data[within] || results[1].data[within]).map(function (suggestion) { - suggestion['within'] = within; - return suggestion; - }); - } - return process('categories').concat(process('products')).map(function (suggestion, index) { - suggestion['index'] = index; - return suggestion; - }); - }); - }; - }] +storefrontApp.component('vcSearchBarMigration', { + templateUrl: "themes/assets/js/bootstrap-migration/common-components/searchBar.tpl.html", + bindings: { + formClass: '<', + placeholder: '<', + searching: '<', + noResults: '<', + query: '@', + categoriesLabel: '<', + productsLabel: '<', + submitLabel: '<', + categoryLimit: '@', + productLimit: '@' + }, + controller: searchBarController }); diff --git a/assets/js/toc.js b/assets/js/toc.js deleted file mode 100644 index 2eacdbc8..00000000 --- a/assets/js/toc.js +++ /dev/null @@ -1,86 +0,0 @@ -(function () { - window.Toc.helpers.findOrFilter = function($el, selector) { - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])').filter(function () { - return !$(this).parents("[data-toc-skip]").length; - }); - }; - - // from https://github.com/afeld/bootstrap-toc/pull/37 - window.Toc.helpers.generateEmptyNavEl = function() { - var $li = $(''); - return $li; - }; - - window.Toc.helpers.getHeadings = function($scope, depth, topLevel) { - var selector = ''; - for (var i = topLevel; i < topLevel + depth; i++) { - selector += 'h' + i; - if (i < topLevel + depth - 1) - selector += ','; - } - return this.findOrFilter($scope, selector); - }; - - window.Toc.helpers.populateNav = function($topContext, depth, topLevel, $headings) { - var $contexts = new Array(depth); - var helpers = this; - - $contexts[0] = $topContext; - $topContext.lastNav = null; - - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - var relLevel = navLevel - topLevel; - var j; - - for (j = relLevel + 1; j < $contexts.length; j++) { - $contexts[j] = null; - } - - if (!$contexts[relLevel]) { - for (j = 0; j < relLevel; j++) { - if (!$contexts[j + 1]) { - if (!$contexts[j].lastNav) { - var $emptyNav = helpers.generateEmptyNavEl(); - $contexts[j].append($emptyNav); - $contexts[j].lastNav = $emptyNav; - } - $contexts[j + 1] = helpers.createChildNavList($contexts[j].lastNav); - $contexts[j + 1].lastNav = null; - } - } - } - - $contexts[relLevel].append($newNav); - $contexts[relLevel].lastNav = $newNav; - }); - }; - - window.Toc.helpers.parseOps = function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - opts.depth = opts.depth || opts.$nav.attr('data-toc-depth') || 2; - return opts; - }; - - window.Toc.init = function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, opts.depth, topLevel); - this.helpers.populateNav($topContext, opts.depth, topLevel, $headings); - }; -})(); diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index f47b84d6..e2ea033b 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -21,7 +21,6 @@ @import "custom/_popover.scss"; @import "custom/_code.scss"; @import "custom/_responsive-utilities.scss"; -@import "custom/_toc.scss"; @import "custom/_icon.scss"; @import "custom/_category-page.scss"; @import "custom/_product-card.scss"; diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss index bfb6f73a..5e715748 100644 --- a/assets/scss/_variables.scss +++ b/assets/scss/_variables.scss @@ -8,89 +8,89 @@ // //## Gray and brand colors for use across Bootstrap. - $gray-base: #151b1e; // #000 - $gray-darker: #29333b; // lighten($gray-base, 13.5%) // #222 - $gray-dark: #4c5c6a; // lighten($gray-base, 20%) // #333 - $gray: #abb0b6; // lighten($gray-base, 33.5%) // #555 - $gray-light: #d8d8d8; // lighten($gray-base, 46.7%) // #777 - $gray-lighter: #F0F0F0; // lighten($gray-base, 93.5%) // #eee - - $brand-primary: #f0ad4e; // darken(#428bca, 6.5%) // #337ab7 - $brand-alt: #00739E; // not predefined - $brand-success: #5cb85c; // #5cb85c - $brand-info: #5bc0de; // #5bc0de - $brand-warning: #f0ad4e; // #f0ad4e - $brand-danger: #EC6A5E; // #d9534f + $gray-base: #151b1e; // #000 // Migrating_To_Bootstrap4: DONE, set to $dark + $gray-darker: #29333b; // lighten($gray-base, 13.5%) // #222 // Migrating_To_Bootstrap4: DONE, set to $gray-900 + $gray-dark: #4c5c6a; // lighten($gray-base, 20%) // #333 // Migrating_To_Bootstrap4: DONE, set to $gray-700 + $gray: #abb0b6; // lighten($gray-base, 33.5%) // #555 // Migrating_To_Bootstrap4: DONE, set to $gray-500 + $gray-light: #d8d8d8; // lighten($gray-base, 46.7%) // #777 // Migrating_To_Bootstrap4: DONE, set to $gray-300 + $gray-lighter: #F0F0F0; // lighten($gray-base, 93.5%) // #eee // Migrating_To_Bootstrap4: DONE, set to $gray-200 + + $brand-primary: #f0ad4e; // darken(#428bca, 6.5%) // #337ab7 // Migrating_To_Bootstrap4: DONE, set to $primary + $brand-alt: #00739E; // not predefined // Migrating_To_Bootstrap4: DONE, set to $secondary + $brand-success: #5cb85c; // #5cb85c // Migrating_To_Bootstrap4: DONE, set to $success + $brand-info: #5bc0de; // #5bc0de // Migrating_To_Bootstrap4: DONE, set to $info + $brand-warning: #f0ad4e; // #f0ad4e // Migrating_To_Bootstrap4: DONE, set to $warning + $brand-danger: #EC6A5E; // #d9534f // Migrating_To_Bootstrap4: DONE, set to $danger //## Other colors - $gray-striped-table: #f8f8f8; // not predefined - $gray-totals: #9f9f9f; //not predefined - $dark-green: #3c763d; // not predefined - $gray-roles-description: #5a6167; // not predefined - $gray-no-permission: #3f3f3f; // not predefined - $gray-user-inactive: #8c8c8c; + $gray-striped-table: #f8f8f8; // not predefined // Migrating_To_Bootstrap4: ?? + $gray-totals: #9f9f9f; //not predefined // Migrating_To_Bootstrap4: ?? + $dark-green: #3c763d; // not predefined // Migrating_To_Bootstrap4: ?? + $gray-roles-description: #5a6167; // not predefined // Migrating_To_Bootstrap4: ?? + $gray-no-permission: #3f3f3f; // not predefined // Migrating_To_Bootstrap4: ?? + $gray-user-inactive: #8c8c8c; // not predefined // Migrating_To_Bootstrap4: ?? //== Scaffolding // //## Settings for some of the most global styles. //** Background color for ``. - $body-bg: #fff; // #fff + $body-bg: #fff; // #fff // Migrating_To_Bootstrap4: DONE, same as in bootstrap4 //** Global text color on ``. - $text-color: #111; - $text-contrast: #fff; // not predefined + $text-color: #111; // Migrating_To_Bootstrap4: DONE, set to $body-color, $yiq-text-dark + $text-contrast: #fff; // not predefined // Migrating_To_Bootstrap4: DONE, set to $yiq-text-light //** Text muted color - $text-muted: #757575; // $gray-light - $text-muted-contrast: #999; // not predefined + $text-muted: #757575; // $gray-light // Migrating_To_Bootstrap4: DONE, set to $text-muted + $text-muted-contrast: #999; // not predefined // Migrating_To_Bootstrap4: ?? //** Global textual link color. - $link-color: $brand-alt; // $brand-primary - $primary-link-color: $brand-primary; // not predefined + $link-color: $brand-alt; // $brand-primary // Migrating_To_Bootstrap4: DONE, set to $link-color + $primary-link-color: $brand-primary; // not predefined // Migrating_To_Bootstrap4: ?? //** Link hover color set via `darken()` function. // $link-hover-color: darken($link-color, 15%) - $primary-link-hover-color: darken($primary-link-color, 15%); // not predefined + $primary-link-hover-color: darken($primary-link-color, 15%); // not predefined // Migrating_To_Bootstrap4: ?? //** Link hover decoration. - $link-hover-decoration: none; // underline - $link-hover-border-style: solid; - $internal-link-hover-border-style: dashed; + $link-hover-decoration: none; // underline // Migrating_To_Bootstrap4: DONE, set to $link-hover-decoration + $link-hover-border-style: solid; // Migrating_To_Bootstrap4: ?? + $internal-link-hover-border-style: dashed; // Migrating_To_Bootstrap4: ?? //== Typography // //## Font, line-height, and color for body text, headings, and more. - $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; + $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; // Migrating_To_Bootstrap4: DONE, set to $font-family-sans-serif // $font-family-serif: Georgia, "Times New Roman", Times, serif //** Default monospace fonts for ``, ``, and ``.
// $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace
// $font-family-base: $font-family-sans-serif
- $font-family-alt: Arial, "Helvetica Neue", Helvetica, sans-serif; // not predefined
- $font-family-condensed: "Roboto Condensed", "Helvetica Neue", Helvetica, Arial, sans-serif; // not predefined
+ $font-family-alt: Arial, "Helvetica Neue", Helvetica, sans-serif; // not predefined // Migrating_To_Bootstrap4: not used in out theme
+ $font-family-condensed: "Roboto Condensed", "Helvetica Neue", Helvetica, Arial, sans-serif; // not predefined // Migrating_To_Bootstrap4: DONE, used as a custom variable
- $font-size-base: 14px; // 14px
- $font-size-large: $font-size-base; // =14px // ceil( ($font-size-base * 1.25)) // ~18px
- $font-size-small: odd(($font-size-base * 0.85)); // =12px // ceil( ($font-size-base * 0.85)) // ~12px
+ $font-size-base: 14px; // 14px // Migrating_To_Bootstrap4: DONE, set to $font-size-base
+ $font-size-large: $font-size-base; // =14px // ceil( ($font-size-base * 1.25)) // ~18px // Migrating_To_Bootstrap4: DONE, set to $font-size-lg
+ $font-size-small: odd(($font-size-base * 0.85)); // =12px // ceil( ($font-size-base * 0.85)) // ~12px // Migrating_To_Bootstrap4: DONE, set to $font-size-sm
- $font-size-h1: odd(($font-size-base * 2.5)); // =34px // floor(($font-size-base * 2.6)) // ~36px
- $font-size-h2: odd(($font-size-base * 1.75)); // =24px // floor(($font-size-base * 2.15)) // ~30px
- $font-size-h3: odd(($font-size-base * 1.5)); // =20px // ceil( ($font-size-base * 1.7)) // ~24px
- $font-size-h4: odd(($font-size-base * 1.25)); // =18px // ceil( ($font-size-base * 1.25)) // ~18px
-// $font-size-h5: $font-size-base
- $font-size-h6: odd(($font-size-base * 0.85)); // =12px // ceil( ($font-size-base * 0.85)) // ~12px
+ $font-size-h1: odd(($font-size-base * 2.5)); // =34px // floor(($font-size-base * 2.6)) // ~36px // Migrating_To_Bootstrap4: DONE, set to $h1-font-size
+ $font-size-h2: odd(($font-size-base * 1.75)); // =24px // floor(($font-size-base * 2.15)) // ~30px // Migrating_To_Bootstrap4: DONE, set to $h2-font-size
+ $font-size-h3: odd(($font-size-base * 1.5)); // =20px // ceil( ($font-size-base * 1.7)) // ~24px // Migrating_To_Bootstrap4: DONE, set to $h3-font-size
+ $font-size-h4: odd(($font-size-base * 1.25)); // =18px // ceil( ($font-size-base * 1.25)) // ~18px // Migrating_To_Bootstrap4: DONE, set to $h4-font-size
+// $font-size-h5: $font-size-base // Migrating_To_Bootstrap4: DONE, set to $h5-font-size
+ $font-size-h6: odd(($font-size-base * 0.85)); // =12px // ceil( ($font-size-base * 0.85)) // ~12px // Migrating_To_Bootstrap4: DONE, set to $h6-font-size
//** Unit-less `line-height` for use in components like buttons.
- $line-height-base: 1.428571429; // 1.428571429 // 20/14
+ $line-height-base: 1.428571429; // 1.428571429 // 20/14 // Migrating_To_Bootstrap4: DONE, set to $line-height-base,$line-height-lg,$line-height-sm
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
- $line-height-computed: floor(($font-size-base * $line-height-base)); // floor(($font-size-base * $line-height-base)) // ~20px
+ $line-height-computed: floor(($font-size-base * $line-height-base)); // floor(($font-size-base * $line-height-base)) // ~20px // Migrating_To_Bootstrap4: ??
//** By default, this inherits from the ``.
- $headings-font-family: $font-family-condensed; // inherit
- $headings-font-weight: 700; // 500
+ $headings-font-family: $font-family-condensed; // inherit // Migrating_To_Bootstrap4: DONE, set to $font-family-condensed (custom variable)
+ $headings-font-weight: 700; // 500 // Migrating_To_Bootstrap4: DONE, set to $headings-font-weight
// $headings-line-height: 1.1
// $headings-color: inherit
- $link-font-family: $font-family-condensed; // not predefined
- $link-font-weight: 500; // not predefined
+ $link-font-family: $font-family-condensed; // not predefined // Migrating_To_Bootstrap4: ??
+ $link-font-weight: 500; // not predefined // Migrating_To_Bootstrap4: DONE, set to $link-font-weight
//== Iconography
@@ -113,29 +113,29 @@
//
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
- $padding-base-vertical: 7px; // 6px
- $padding-base-horizontal: 15px; // 12px
+ $padding-base-vertical: 7px; // 6px // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $padding-base-horizontal: 15px; // 12px // Migrating_To_Bootstrap4: ?? (not present in bs4)
- $padding-large-vertical: 11px; // 10px
- $padding-large-horizontal: 32px; // 16px
+ $padding-large-vertical: 11px; // 10px // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $padding-large-horizontal: 32px; // 16px // Migrating_To_Bootstrap4: ?? (not present in bs4)
- $padding-small-vertical: 5px; // 5px
- $padding-small-horizontal: 10px; // 10px
+ $padding-small-vertical: 5px; // 5px // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $padding-small-horizontal: 10px; // 10px // Migrating_To_Bootstrap4: ?? (not present in bs4)
- $padding-xs-vertical: 2px; // 1px
+ $padding-xs-vertical: 2px; // 1px // Migrating_To_Bootstrap4: ?? (not present in bs4)
// $padding-xs-horizontal: 5px
- $line-height-large: 1.3333333; // 1.3333333 // extra decimals for Win 8.1 Chrome
- $line-height-large-computed: floor(($font-size-large * $line-height-large)); // not predefined
- $line-height-small: 1.5; // 1.5
- $line-height-small-computed: floor(($font-size-small * $line-height-small)); // not predefined
+ $line-height-large: 1.3333333; // 1.3333333 // extra decimals for Win 8.1 Chrome // Migrating_To_Bootstrap4: ?? (should we change it)
+ $line-height-large-computed: floor(($font-size-large * $line-height-large)); // not predefined // Migrating_To_Bootstrap4: ??
+ $line-height-small: 1.5; // 1.5 // Migrating_To_Bootstrap4: DONE, its same as in bootstrap 4
+ $line-height-small-computed: floor(($font-size-small * $line-height-small)); // not predefined // Migrating_To_Bootstrap4: ??
- $border-radius-base: 4px;
- $border-radius-large: 6px;
- $border-radius-small: 3px;
+ $border-radius-base: 4px; // Migrating_To_Bootstrap4: ?? (should we leave it as is?)
+ $border-radius-large: 6px; // Migrating_To_Bootstrap4: ?? (should we leave it as is?)
+ $border-radius-small: 3px; // Migrating_To_Bootstrap4: ?? (should we leave it as is?)
//** Global color for active items (e.g., navs or dropdowns).
- $component-active-color: $text-contrast; // #fff !default;
+ $component-active-color: $text-contrast; // #fff !default; // Migrating_To_Bootstrap4: ?? (should we leave it as is?)
//** Global background color for active items (e.g., navs or dropdowns).
// $component-active-bg: $brand-primary !default;
@@ -157,10 +157,10 @@
//** Default background color used for all tables.
// $table-bg: transparent
//** Background color used for `.table-striped`.
- $table-bg-accent: $gray-striped-table; // #f8f8f8
+ $table-bg-accent: $gray-striped-table; // #f8f8f8 // Migrating_To_Bootstrap4: ?? (use custom variable?)
//** Background color used for `.table-hover`.
- $table-bg-hover: $gray-lighter; // #f5f5f5
- $table-bg-active: $brand-alt; // $table-bg-hover
+ $table-bg-hover: $gray-lighter; // #f5f5f5 // Migrating_To_Bootstrap4: ?? (use custom variable?)
+ $table-bg-active: $brand-alt; // $table-bg-hover // Migrating_To_Bootstrap4: DONE, set to $secondary
//** Border color for table and cell borders.
// $table-border-color: #ddd
@@ -170,46 +170,46 @@
//
//## For each of Bootstrap's buttons, define text, background and border color.
- $btn-font-family: $font-family-condensed;
- $btn-font-weight: 700; // normal
+ $btn-font-family: $font-family-condensed; // Migrating_To_Bootstrap4: DONE, set to custom variable ($font-family-condensed)
+ $btn-font-weight: 700; // normal // Migrating_To_Bootstrap4: DONE, set to $btn-weight-bold (700)
- $btn-default-color: $text-contrast; // #333
- $btn-default-bg: $gray-base; // #fff
- $btn-default-border: $btn-default-bg; // #ccc
+ $btn-default-color: $text-contrast; // #333 // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $btn-default-bg: $gray-base; // #fff // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $btn-default-border: $btn-default-bg; // #ccc // Migrating_To_Bootstrap4: ?? (not present in bs4)
- $btn-default-contrast-color: $text-color; // not predefined
- $btn-default-contrast-bg: $body-bg; // not predefined
- $btn-default-contrast-border: $btn-default-contrast-bg; // not predefined
+ $btn-default-contrast-color: $text-color; // not predefined // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $btn-default-contrast-bg: $body-bg; // not predefined // Migrating_To_Bootstrap4: ?? (not present in bs4)
+ $btn-default-contrast-border: $btn-default-contrast-bg; // not predefined // Migrating_To_Bootstrap4: ?? (not present in bs4)
- $btn-white-color: $text-color; // not predefined
- $btn-white-bg: #fff; // not predefined
- $btn-white-border: $gray-lighter; // not predefined
+ $btn-white-color: $text-color; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-white-bg: #fff; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-white-border: $gray-lighter; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-primary-color: $text-contrast; // #fff
- $btn-primary-bg: $brand-primary; // $brand-primary
- $btn-primary-border: $btn-primary-bg; // darken($btn-primary-bg, 5%)
+ $btn-primary-color: $text-contrast; // #fff // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-primary-bg: $brand-primary; // $brand-primary // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-primary-border: $btn-primary-bg; // darken($btn-primary-bg, 5%) // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-success-color: $text-contrast; // #fff
- $btn-success-bg: $brand-success;// $brand-success
- $btn-success-border: $btn-success-bg; // darken($btn-success-bg, 5%)
+ $btn-success-color: $text-contrast; // #fff // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-success-bg: $brand-success;// $brand-success // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-success-border: $btn-success-bg; // darken($btn-success-bg, 5%) // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-info-color: $text-contrast; // #fff
- $btn-info-bg: $brand-info; // $brand-info
- $btn-info-border: $btn-info-bg; // darken($btn-info-bg, 5%)
+ $btn-info-color: $text-contrast; // #fff // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-info-bg: $brand-info; // $brand-info // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-info-border: $btn-info-bg; // darken($btn-info-bg, 5%) // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-warning-color: $text-contrast; // #fff
- $btn-warning-bg: $brand-warning; // $brand-warning
- $btn-warning-border: $btn-warning-bg; // darken($btn-warning-bg, 5%)
+ $btn-warning-color: $text-contrast; // #fff // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-warning-bg: $brand-warning; // $brand-warning // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-warning-border: $btn-warning-bg; // darken($btn-warning-bg, 5%) // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-danger-color: $text-contrast; // #fff
- $btn-danger-bg: $brand-danger; // $brand-danger
- $btn-danger-border: $btn-danger-bg; // darken($btn-danger-bg, 5%)
+ $btn-danger-color: $text-contrast; // #fff // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-danger-bg: $brand-danger; // $brand-danger // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-danger-border: $btn-danger-bg; // darken($btn-danger-bg, 5%) // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-disabled-bg: $gray-lighter; // not predefined
- $btn-disabled-border: $gray; // not predefined
- $btn-disabled-color: $text-muted; // not predefined
+ $btn-disabled-bg: $gray-lighter; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-disabled-border: $gray; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
+ $btn-disabled-color: $text-muted; // not predefined // Migrating_To_Bootstrap4: ?? (we need custom variant)
- $btn-link-disabled-color: $text-muted; // $gray-light
+ $btn-link-disabled-color: $text-muted; // $gray-light // Migrating_To_Bootstrap4: ?? (which gray color from bs4 we should use?)
// Allows for customizing button radius independently from global border radius
// $btn-border-radius-base: $border-radius-base
@@ -222,45 +222,45 @@
//##
//** `` background color
- $input-bg: $body-bg; // #fff;
+ $input-bg: $body-bg; // #fff; // Migrating_To_Bootstrap4: DONE, set to $body-bg
//** `` and ` li:not(:last-child) {
+ margin-right: 0;
+ }
+ > li:not(:first-child)::before {
+ content: '\FF5C'; // 1px width full height vertical line
+ opacity: (1/3);
+ }
+}
+
+.text-condensed {
+ font-family: $font-family-condensed !important;
+}
+
+.h2, .h3, .h4, h2, h3, h4 {
+ text-transform: uppercase;
+}
diff --git a/assets/scss/bootstrap-migration/custom/_variables.scss b/assets/scss/bootstrap-migration/custom/_variables.scss
new file mode 100644
index 00000000..1b94df4b
--- /dev/null
+++ b/assets/scss/bootstrap-migration/custom/_variables.scss
@@ -0,0 +1,11 @@
+$font-family-condensed: "Roboto Condensed", "Helvetica Neue", Helvetica, Arial, sans-serif;
+
+// Bootstrap v5 compatible
+$border-widths: (
+ 0: 0,
+ 1: 1px,
+ 2: 2px,
+ 3: 3px,
+ 4: 4px,
+ 5: 5px
+);
diff --git a/assets/scss/bootstrap-migration/custom/utilities/_border.scss b/assets/scss/bootstrap-migration/custom/utilities/_border.scss
new file mode 100644
index 00000000..0835dd32
--- /dev/null
+++ b/assets/scss/bootstrap-migration/custom/utilities/_border.scss
@@ -0,0 +1,6 @@
+// Bootstrap v5 compatible
+@each $size, $width in $border-widths {
+ .border-#{$size} {
+ border-width: $width !important;
+ }
+}
diff --git a/assets/scss/bootstrap-migration/main.scss b/assets/scss/bootstrap-migration/main.scss
new file mode 100644
index 00000000..759d6086
--- /dev/null
+++ b/assets/scss/bootstrap-migration/main.scss
@@ -0,0 +1,6 @@
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "variables";
+@import "maps";
+@import "bootstrap/scss/bootstrap";
+@import "custom";
diff --git a/assets/scss/custom/_toc.scss b/assets/scss/custom/_toc.scss
deleted file mode 100644
index 4b912dde..00000000
--- a/assets/scss/custom/_toc.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-// from official docs: https://afeld.github.io/bootstrap-toc/
-nav[data-toggle='toc'] {
- margin-top: $line-height-computed;
-
- &.affix {
- top: 0;
- }
-
- .nav .nav {
- padding-bottom: 0;
- }
-}
-
-/* small screens */
-@media (max-width: $screen-sm-max) {
- nav[data-toggle='toc'] {
- /* override the Affix plugin so that the navigation isn't sticky */
- &.affix {
- position: static;
- }
-
- /* PICK ONE */
- /* don't expand nested items, which pushes down the rest of the page when navigating */
- /*.nav .active .nav {
- display: none;
- }*/
- /* alternatively, if you *do* want the second-level navigation to be shown (as seen on this page on mobile), use this */
- .nav .nav {
- display: block;
- }
- }
-}
-
-// for PR: https://github.com/afeld/bootstrap-toc/pull/37
-nav[data-toggle='toc'] .nav .nav {
- li > a {
- padding-top: 1px;
- padding-bottom: 1px;
- font-size: 12px;
- font-weight: normal;
- }
-
- .active > a,
- .active:hover > a,
- .active:focus > a {
- font-weight: 500;
- }
-}
-
-$navs: ();
-// h2..h6
-@for $i from 0 through 5 {
- $padding-left: 7px * $i;
- nav[data-toggle='toc'] .nav #{$navs} {
- > li > a {
- padding-left: 15px + $padding-left;
- }
-
- > li > a:hover,
- > li > a:focus {
- padding-left: 14px + $padding-left;
- }
-
- > .active > a,
- > .active:hover > a,
- > .active:focus > a {
- padding-left: 13px + $padding-left;
- }
- }
-
- $navs: append($navs, " .nav");
-}
diff --git a/assets/scss/mixins/custom/_buttons.scss b/assets/scss/mixins/custom/_buttons.scss
index 0d6d78e5..44f88fd1 100644
--- a/assets/scss/mixins/custom/_buttons.scss
+++ b/assets/scss/mixins/custom/_buttons.scss
@@ -1,4 +1,4 @@
-@mixin button-variant-disabled {
+@mixin button-variant-disabled {
&.disabled,
&[disabled],
fieldset[disabled] & {
@@ -18,29 +18,29 @@
&:focus,
&.focus {
color: $color;
- background-color: call($colorizer, $background, 10% * $colorizer-multiplier);
- border-color: call($colorizer, $border, 25%);
+ background-color: call(get-function($colorizer), $background, 10% * $colorizer-multiplier);
+ border-color: call(get-function($colorizer), $border, 25%);
}
&:hover {
color: $color;
- background-color: call($colorizer, $background, 10% * $colorizer-multiplier);
- border-color: call($colorizer, $border, 12.5% * $colorizer-multiplier);
+ background-color: call(get-function($colorizer), $background, 10% * $colorizer-multiplier);
+ border-color: call(get-function($colorizer), $border, 12.5% * $colorizer-multiplier);
}
&:active,
&.active,
.open > &.dropdown-toggle {
color: $color;
- background-color: call($colorizer, $background, 10% * $colorizer-multiplier);
- border-color: call($colorizer, $border, 12.5% * $colorizer-multiplier);
+ background-color: call(get-function($colorizer), $background, 10% * $colorizer-multiplier);
+ border-color: call(get-function($colorizer), $border, 12.5% * $colorizer-multiplier);
&:hover,
&:focus,
&.focus {
color: $color;
- background-color: call($colorizer, $background, 17.5% * $colorizer-multiplier);
- border-color: call($colorizer, $border, 25% * $colorizer-multiplier);
+ background-color: call(get-function($colorizer), $background, 17.5% * $colorizer-multiplier);
+ border-color: call(get-function($colorizer), $border, 25% * $colorizer-multiplier);
}
}
diff --git a/bower.json b/bower.json
index f434b962..ac7b5c3f 100644
--- a/bower.json
+++ b/bower.json
@@ -27,7 +27,6 @@
"angular-ui-router": "^1.0.28",
"bootstrap-sass": "^3.3.7",
"bootstrap-social": "^5.1.1",
- "bootstrap-toc": "^0.4.1",
"es5-shim": "*",
"es6-shim": "*",
"font-awesome": "^4.7.0",
diff --git a/bundleconfig.json b/bundleconfig.json
index 73be74b7..a5c26c13 100644
--- a/bundleconfig.json
+++ b/bundleconfig.json
@@ -20,7 +20,6 @@
"bower_components/angular-wizard/dist/angular-wizard.js",
"bower_components/bootstrap-sass/assets/javascripts/bootstrap/affix.js",
"bower_components/bootstrap-sass/assets/javascripts/bootstrap/scrollspy.js",
- "bower_components/bootstrap-toc/dist/bootstrap-toc.js",
"bower_components/prism/prism.js",
"bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.js",
"bower_components/angular-ui-router/release/angular-ui-router.js",
@@ -57,7 +56,6 @@
"inputFiles": [
"bower_components/font-awesome/css/font-awesome.css",
"bower_components/angular-wizard/dist/angular-wizard.css",
- "bower_components/bootstrap-toc/dist/bootstrap-toc.css",
"bower_components/prism/themes/prism.css",
"bower_components/owl.carousel/dist/assets/owl.carousel.css"
]
@@ -68,6 +66,12 @@
"assets/scss/main.scss"
]
},
+ {
+ "outputFileName": "assets/static/bundle/bootstrap-migration.scss.css",
+ "inputFiles": [
+ "assets/scss/bootstrap-migration/main.scss"
+ ]
+ },
{
"outputFileName": "assets/static/bundle/checkout-scripts.js",
"inputFiles": [
diff --git a/config/blocks_schema.json b/config/blocks_schema.json
index 9cc90d5a..1cb8d5e2 100644
--- a/config/blocks_schema.json
+++ b/config/blocks_schema.json
@@ -50,9 +50,10 @@
},
{
"id": "headerType",
- "label": "Header type",
- "default": "like-h2",
+ "label": "Title SEO tag",
+ "default": "like-h1",
"tab": "Settings",
+ "sort": 230,
"type": "select",
"options": [
{
@@ -80,99 +81,6 @@
"label": "Like H3"
}
]
- },
- {
- "id": "titleAlignment",
- "label": "Align title",
- "default": null,
- "tab": "Settings",
- "type": "select",
- "options": [
- {
- "value": "text-center",
- "label": "Center"
- },
- {
- "value": null,
- "label": "Left"
- }
- ]
- },
- {
- "id": "titleStyle",
- "label": "Title style",
- "type": "select",
- "default": null,
- "options": [
- {
- "value": null,
- "label": "Default"
- },
- {
- "value": "text-primary",
- "label": "Primary"
- },
- {
- "value": "text-secondary",
- "label": "Secondary"
- },
- {
- "value": "text-success",
- "label": "Success"
- },
- {
- "value": "text-danger",
- "label": "Danger"
- },
- {
- "value": "text-warning",
- "label": "Warning"
- },
- {
- "value": "text-info",
- "label": "Info"
- },
- {
- "value": "text-muted",
- "label": "Muted"
- },
- {
- "value": "text-black-50",
- "label": "Black 50%"
- }
- ],
- "tab": "Settings"
- },
- {
- "id": "style",
- "label": "Block style",
- "type": "select",
- "default": "light",
- "options": [
- {
- "value": null,
- "label": "Light"
- },
- {
- "value": "bg-gray-darker",
- "label": "Dark"
- }
- ],
- "tab": "Settings"
- },
- {
- "id": "noTop",
- "label": "Remove top margin",
- "type": "checkbox",
- "tab": "Settings",
- "default": false
- },
- {
- "id": "noBottom",
- "label": "Remove bottom margin",
- "type": "checkbox",
- "tab": "Settings",
- "default": false
}
],
"namedSettings": {
@@ -181,19 +89,22 @@
"id": "title",
"label": "Title",
"type": "string",
+ "sort": 10,
"default": "Bring your ideas to life"
},
{
"id": "subtitle",
"label": "Subtitle",
"type": "text",
- "default": "Anything you've even dreamed about is possible to realise just at the moment when you decided to win."
+ "sort": 20,
+ "default": "Anything you dream about is possible to realise just at the moment when you decide to win"
},
{
"id": "backgroundColor",
"label": "Background color",
"type": "color",
- "default": "",
+ "default": null,
+ "sort": 270,
"tab": "Settings",
"group": "Background"
},
@@ -201,7 +112,8 @@
"id": "titleColor",
"label": "Title color",
"type": "color",
- "default": "",
+ "default": "#000000",
+ "sort": 240,
"tab": "Settings",
"group": "Background"
},
@@ -209,13 +121,15 @@
"id": "subtitleColor",
"label": "Subtitle color",
"type": "color",
- "default": "",
+ "default": "#737373",
"tab": "Settings",
+ "sort": 250,
"group": "Background"
},
{
"id": "overlayColor",
- "label": "Overlay color",
+ "label": "Background overlay color",
+ "sort": 280,
"type": "color",
"default": "",
"tab": "Settings",
@@ -223,84 +137,87 @@
},
{
"id": "background",
- "label": "Background",
+ "label": "Background image",
"type": "image",
+ "sort": 50,
+ "default": null,
"group": "Background"
},
{
"id": "textColumnWidth",
- "label": "Text column width",
+ "label": "Text container width",
"type": "select",
"tab": "Settings",
+ "sort": 210,
"options": [
{
- "label": "6 cols",
- "value": "col-md-6"
+ "label": "3 cols",
+ "value": "col-md-3"
+ },
+ {
+ "label": "4 cols",
+ "value": "col-md-4"
},
{
"label": "5 cols",
"value": "col-md-5"
},
{
- "label": "4 cols",
- "value": "col-md-4"
+ "label": "6 cols",
+ "value": "col-md-6"
},
{
- "label": "3 cols",
- "value": "col-md-3"
+ "label": "7 cols",
+ "value": "col-md-7"
},
{
- "label": "2 cols",
- "value": "col-md-2"
+ "label": "8 cols",
+ "value": "col-md-8"
+ },
+ {
+ "label": "Fluid",
+ "value": "col"
}
],
- "default": "col-md-4"
+ "default": "col"
},
{
"id": "secondColumnWidth",
- "label": "Second column width",
+ "label": "Sides image width",
"tab": "Settings",
"type": "select",
+ "sort": 220,
"options": [
{
- "label": "6 cols",
- "value": "col-md-6"
+ "label": "3 cols",
+ "value": "col-md-3"
+ },
+ {
+ "label": "4 cols",
+ "value": "col-md-4"
},
{
"label": "5 cols",
"value": "col-md-5"
},
{
- "label": "4 cols",
- "value": "col-md-4"
+ "label": "6 cols",
+ "value": "col-md-6"
},
{
- "label": "3 cols",
- "value": "col-md-3"
+ "label": "7 cols",
+ "value": "col-md-7"
},
{
- "label": "2 cols",
- "value": "col-md-2"
- }
- ],
- "default": "col-md-4"
- },
- {
- "id": "columnsPosition",
- "label": "Columns position",
- "tab": "Settings",
- "type": "select",
- "options": [
- {
- "label": "Center",
- "value": "justify-content-center"
+ "label": "8 cols",
+ "value": "col-md-8"
},
{
- "label": "Justify",
- "value": "justify-content-between"
+ "label": "Fluid",
+ "value": "col"
}
],
- "default": "justify-content-center"
+ "default": "col-md-6"
}
],
"buttons": [
@@ -352,7 +269,7 @@
],
"default": {
"url": "",
- "urlText": "Call to action",
+ "urlText": "",
"style": "btn-primary"
},
"group": "Buttons"
@@ -416,13 +333,14 @@
"id": "note",
"label": "Note",
"type": "string",
- "default": "Our company"
+ "sort": 30
},
{
"id": "noteColor",
"label": "Note color",
"type": "color",
"default": "",
+ "sort": 260,
"tab": "Settings",
"group": "Background"
}
@@ -434,7 +352,8 @@
"type": "string",
"default": "formId",
"tab": "Settings",
- "group": "Form"
+ "group": "Form",
+ "sort": 300
},
{
"id": "formName",
@@ -442,61 +361,17 @@
"type": "string",
"default": "formName",
"tab": "Settings",
- "group": "Form"
+ "group": "Form",
+ "sort": 310
},
{
"id": "formSubmitRedirectUrl",
- "label": "Submit redirect URL",
+ "label": "Form success URL",
+ "sort": 320,
"type": "string",
"tab": "Settings",
"group": "Form"
},
- {
- "id": "formSubmitButtonStyle",
- "label": "Submit button style",
- "type": "select",
- "default": "btn-primary",
- "options": [
- {
- "value": "btn-primary",
- "label": "Primary button"
- },
- {
- "value": "btn-secondary",
- "label": "Secondary button"
- },
- {
- "value": "btn-success",
- "label": "Success button"
- },
- {
- "value": "btn-danger",
- "label": "Danger button"
- },
- {
- "value": "btn-warning",
- "label": "Warning button"
- },
- {
- "value": "btn-info",
- "label": "Info button"
- },
- {
- "value": "btn-light",
- "label": "Light button"
- },
- {
- "value": "btn-dark",
- "label": "Dark button"
- },
- {
- "value": "btn-link",
- "label": "Link button"
- }
- ],
- "tab": "Settings",
- "group": "Form"
- },
{
"id": "formFields",
"label": "Fields list",
@@ -504,6 +379,7 @@
"addText": "Add a field",
"removeText": "Remove a field",
"displayField": "labelText",
+ "sort": 60,
"element": [
{
"id": "fieldType",
@@ -678,7 +554,7 @@
"fieldType": "text",
"required": true,
"labelText": "Full name",
- "placeholder": "Enter your name"
+ "placeholder": "Enter your full name"
},
{
"fieldName": "email",
@@ -688,89 +564,972 @@
"labelText": "Email",
"placeholder": "Enter your email"
},
+ {
+ "fieldName": "fullname",
+ "fieldId": "fullname",
+ "fieldType": "checkbox",
+ "required": true,
+ "labelText": "By clicking \"Submit\" I understand that I consent to opt-in to the Terms and Policy"
+ },
{
"fieldType": "button",
- "labelText": "Action button"
+ "labelText": "Submit"
}
],
"group": "Form"
},
{
"id": "showFormLabels",
- "label": "Show form labels",
+ "label": "Show labels",
"type": "checkbox",
- "default": true,
+ "sort": 70,
+ "hint": "change logic when checked - hide, when unchecked - show",
+ "default": false,
"group": "Form"
}
],
"text-width": [
{
"id": "textAreaWidth",
- "label": "Text area width",
+ "label": "Text container width",
"type": "select",
- "default": "col-lg",
+ "default": "col-md-8",
"options": [
{
- "value": "col-lg",
- "label": "Full width"
+ "label": "4 cols",
+ "value": "col-md-4"
+ },
+ {
+ "label": "5 cols",
+ "value": "col-md-5"
+ },
+ {
+ "label": "6 cols",
+ "value": "col-md-6"
+ },
+ {
+ "label": "7 cols",
+ "value": "col-md-7"
},
{
- "value": "col-lg-10",
- "label": "10 cols"
+ "label": "8 cols",
+ "value": "col-md-8"
},
{
- "value": "col-lg-8",
- "label": "8 cols"
+ "label": "9 cols",
+ "value": "col-md-9"
},
{
- "value": "col-lg-6",
- "label": "6 cols"
+ "label": "10 cols",
+ "value": "col-md-10"
},
{
- "value": "col-lg-4",
- "label": "4 cols"
+ "label": "11 cols",
+ "value": "col-md-11"
},
{
- "value": "col-lg-3",
- "label": "3 cols"
+ "label": "12 cols",
+ "value": "col-md-12"
}
],
"tab": "Settings",
+ "sort": 215,
"group": "Main block settings"
}
],
"utm-marks": [
{
"id": "utmString",
- "label": "UTM expression",
+ "label": "URL parameter",
"type": "string",
"default": null,
"tab": "Settings",
- "sort": 35
+ "sort": 300
},
{
"id": "utmNegotiate",
- "label": "Negotiate UTM",
+ "label": "Hide on match",
"type": "checkbox",
"default": false,
"tab": "Settings",
- "sort": 36
+ "info": "When checked then block will be hidden when URL param matches, when unchecked block will be show only when URL param",
+ "sort": 310
+ }
+ ],
+ "margins": [
+ {
+ "id": "noTop",
+ "label": "Remove top margin",
+ "type": "checkbox",
+ "tab": "Settings",
+ "sort": 235,
+ "default": false
+ },
+ {
+ "id": "noBottom",
+ "label": "Remove bottom margin",
+ "type": "checkbox",
+ "tab": "Settings",
+ "sort": 236,
+ "default": false
+ }
+ ],
+ "colors": [
+ {
+ "id": "backgroundColor",
+ "label": "Background color",
+ "type": "color",
+ "default": null,
+ "sort": 270,
+ "tab": "Settings",
+ "group": "Background"
+ },
+ {
+ "id": "titleColor",
+ "label": "Title color",
+ "type": "color",
+ "default": "#000000",
+ "sort": 240,
+ "tab": "Settings",
+ "group": "Background"
+ },
+ {
+ "id": "contentColor",
+ "label": "Content color",
+ "type": "color",
+ "default": "#767676",
+ "sort": 245,
+ "tab": "Settings",
+ "group": "Background"
}
]
}
},
- "text": {
- "name": "Simple text",
+ "cover-with-image": {
+ "name": "Cover with image",
+ "icon": "image-text",
+ "displayField": "name",
+ "category": "Covers and Hero",
+ "includeShared": [ "cover-items", "notes", "buttons" ],
+ "excludeShared": [],
+ "default": {
+ "background": {
+ "url": "/themes/assets/blocks/cover-with-image-background.jpg"
+ },
+ "firstButton": {
+ "url": "",
+ "urlText": "Learn more",
+ "style": "btn-dark"
+ },
+ "name": "Cover with image"
+ },
+ "settings": [
+ {
+ "id": "containerImage",
+ "label": "Side image",
+ "type": "image",
+ "sort": 40,
+ "default": {
+ "url": "/themes/assets/blocks/portfolio-woocommerce.png"
+ },
+ "group": "Container media"
+ },
+ {
+ "id": "imagePosition",
+ "label": "Side image position",
+ "type": "select",
+ "tab": "Settings",
+ "default": "right",
+ "sort": 200,
+ "options": [
+ {
+ "value": null,
+ "label": "Left"
+ },
+ {
+ "value": "right",
+ "label": "Right"
+ }
+ ]
+ }
+ ]
+ },
+ "cover-with-form": {
+ "name": "Cover with form",
+ "icon": "image-text",
+ "displayField": "name",
+ "category": "Covers and Hero",
+ "includeShared": [ "cover-items", "notes", "form" ],
+ "excludeShared": [],
+ "default": {
+ "title": "Meet the expert, explore the tool and get a free consultation",
+ "subtitle": "Sign up for the webinar and get a free expert consultation for your business.
",
+ "background": {
+ "url": "/themes/assets/blocks/coveer-with-form-background.png"
+ },
+ "titleColor": "#000000",
+ "subtitleColor": "#737373",
+ "overlayColor": "null",
+ "formId": " ",
+ "formName": " ",
+ "name": "Cover with form"
+ },
+ "settings": [
+ {
+ "id": "centerText",
+ "label": "Align vertically in the middle",
+ "type": "checkbox",
+ "sort": 175,
+ "default": true,
+ "tab": "Settings"
+ },
+ {
+ "id": "secondColumnWidth",
+ "label": "Form width",
+ "default": "col-md-6"
+ },
+ {
+ "id": "formPosition",
+ "label": "Form position",
+ "default": "null",
+ "type": "select",
+ "sort": 170,
+ "tab": "Settings",
+ "options": [
+ {
+ "value": null,
+ "label": "Left"
+ },
+ {
+ "value": "right",
+ "label": "Right"
+ }
+ ]
+ }
+ ]
+ },
+ "cover-with-simple-text": {
+ "name": "Cover with Simple Text",
"icon": "text",
"displayField": "name",
- "category": "Paragraphs and Links",
+ "category": "Covers and Hero",
+ "includeShared": [ "notes", "cover-items", "buttons" ],
+ "excludeShared": [ "secondColumnWidth" ],
+ "default": {
+ "title": "Probably the best digital agency for SMBs in the market",
+ "subtitle": "Create a targeted live campaign. Scale your infrastructure with our simple service.
",
+ "background": {
+ "url": "/themes/assets/blocks/coveer-with-form-background.png"
+ },
+ "firstButton": {
+ "url": "",
+ "urlText": "Learn why",
+ "style": "btn-warning"
+ },
+ "titleColor": "#ffffff",
+ "subtitleColor": "#c4c4c4",
+ "overlayColor": "rgba(0,0,0,0.6)",
+ "name": "Cover with simple text"
+ },
"settings": [
{
- "id": "title",
- "label": "Title",
- "type": "string",
- "default": "Block title",
- "autofocus": true
+ "id": "textColumnWidth",
+ "options": [
+ {
+ "label": "4 cols",
+ "value": "col-md-4"
+ },
+ {
+ "label": "5 cols",
+ "value": "col-md-5"
+ },
+ {
+ "label": "6 cols",
+ "value": "col-md-6"
+ },
+ {
+ "label": "7 cols",
+ "value": "col-md-7"
+ },
+ {
+ "label": "8 cols",
+ "value": "col-md-8"
+ },
+ {
+ "label": "9 cols",
+ "value": "col-md-9"
+ },
+ {
+ "label": "10 cols",
+ "value": "col-md-10"
+ },
+ {
+ "label": "11 cols",
+ "value": "col-md-11"
+ },
+ {
+ "label": "12 cols",
+ "value": "col-md-12"
+ }
+ ],
+ "default": "col-md-8"
+ }
+ ]
+ },
+ "headline": {
+ "name": "Headline",
+ "icon": "text",
+ "displayField": "name",
+ "category": "Headlines and Forms",
+ "includeShared": [ "notes", "cover-items", "buttons", "margins", "text-width" ],
+ "excludeShared": [ "textColumnWidth", "secondColumnWidth" ],
+ "default": {
+ "title": "How to write headlines that actually work?",
+ "subtitle": "A headline's purpose is to quickly and briefly draw attention to the story. It is generally written by a copy editor, but may also be written by the writer, the page layout designer, or other editors.
",
+ "note": "HOW-TOs",
+ "titleColor": "#000000",
+ "subtitleColor": "#737373",
+ "noteColor": "#6c757d",
+ "name": "Headline"
+ },
+ "settings": []
+ },
+ "headline-with-form": {
+ "name": "Headline with form",
+ "icon": "text",
+ "displayField": "name",
+ "category": "Headlines and Forms",
+ "includeShared": [ "notes", "cover-items", "margins", "form", "text-width" ],
+ "excludeShared": [ "textColumnWidth", "secondColumnWidth" ],
+ "default": {
+ "title": "Subscribe to our promotions",
+ "subtitle": "And be among the first to hear about upcoming events.
",
+ "titleColor": "#000000",
+ "subtitleColor": "#767676",
+ "noteColor": "#6c757d",
+ "backgroundColor": "#efefef",
+ "background": null,
+ "formId": " ",
+ "formName": " ",
+ "formFields" : [
+ {
+ "fieldType": "email",
+ "required": true,
+ "labelText": "Email",
+ "placeholder": "Enter your email"
+ },
+ {
+ "fieldType": "checkbox",
+ "required": true,
+ "labelText": "By clicking \"Submit\" I understand that I consent to opt-in to the Terms and Policy"
+ },
+ {
+ "fieldType": "button",
+ "labelText": "Submit"
+ }
+ ],
+ "showFormLabels": true,
+ "name": "Headline with form"
+ },
+ "settings": [
+ {
+ "id": "formWidth",
+ "label": "Form width",
+ "type": "select",
+ "sort": 236,
+ "default": "col-md-4",
+ "options": [
+ {
+ "value": "col-md-3",
+ "label": "3 cols"
+ },
+ {
+ "value": "col-md-4",
+ "label": "4 cols"
+ },
+ {
+ "value": "col-md-5",
+ "label": "5 cols"
+ },
+ {
+ "value": "col-md-6",
+ "label": "6 cols"
+ }
+ ],
+ "tab": "Settings",
+ "group": "Main block settings"
+ }
+ ]
+ },
+ "text": {
+ "name": "Paragraph with title",
+ "icon": "text",
+ "displayField": "name",
+ "category": "Paragraphs and Links",
+ "includeShared": [ "text-width", "margins", "colors" ],
+ "excludeShared": [],
+ "default": {
+ "textAreaWidth": "col-md-12",
+ "name": "Paragraph with title"
+ },
+ "settings": [
+ {
+ "id": "title",
+ "label": "Title",
+ "type": "string",
+ "default": "Readability is primarily the concern of designer",
+ "autofocus": true
+ },
+ {
+ "id": "content",
+ "label": "Content",
+ "type": "text",
+ "default": "In quo enim maxime consuevit iactare vestra se repellere, idque instituit docere sic: omne animal, simul atque insitam in liberos atque haec ratio late patet in quo quaerimus, non ero tibique, si ob rem aperiam eaque ipsa, quae sunt in gravissimo bello animadversionis metu contineret.
Certe, inquam, pertinax non intellegamus, tu tam inportuno tamque crudeli; sin, ut dolore disputandum putant sed ut labore et argumentandum et dolorum fuga et aut quid est et expedita distinctio nam libero tempore, cum a natura incorrupte atque natum sit, voluptatem sequi nesciunt, neque porro.
Quae fuerit causa, nollem me ab eo ortum, tam crudelis fuisse, nihil ut alterum aspernandum sentiamus alii autem, quibus ego cum a philosophis compluribus permulta dicantur, cur verear, ne ferae quidem faciunt, ut earum rerum hic tenetur a philosophis compluribus permulta dicantur, cur verear, ne.
"
+ }
+ ]
+ },
+ "logotypes": {
+ "name": "Logotypes",
+ "icon": "image-text",
+ "displayField": "name",
+ "category": "Media and Logotypes",
+ "includeShared": [ "text-width", "margins", "colors" ],
+ "excludeShared": [],
+ "default": {
+ "titleColor": "#000000",
+ "contentColor": "#767676",
+ "textAreaWidth": "col-md-12",
+ "name": "Logotypes"
+ },
+ "settings": [
+ {
+ "id": "title",
+ "label": "Title",
+ "type": "string",
+ "sort": 10,
+ "default": "Our partners"
+ },
+ {
+ "id": "subtitle",
+ "label": "Subtitle",
+ "type": "text",
+ "sort": 20,
+ "default": "If you are interested in becoming a partner, please feel free to write us.
"
+ },
+ {
+ "id": "logotypes",
+ "label": "Logotypes",
+ "type": "list",
+ "addText": "Add logotype",
+ "removeText": "Remove logotype",
+ "displayField": "image.url",
+ "sort": 30,
+ "element": [
+ {
+ "id": "image",
+ "type": "image",
+ "label": "Image",
+ "group": "Image"
+ },
+ {
+ "id": "url",
+ "type": "string",
+ "label": "URL"
+ },
+ {
+ "id": "openInNewTab",
+ "type": "checkbox",
+ "label": "Open in new tab"
+ }
+ ],
+ "default": [
+ {
+ "image": {
+ "url": "/themes/assets/blocks/logo-1.png"
+ },
+ "url": "",
+ "openInNewTab": false
+ },
+ {
+ "image": {
+ "url": "/themes/assets/blocks/logo-2.png"
+ },
+ "url": "",
+ "openInNewTab": false
+ },
+ {
+ "image": {
+ "url": "/themes/assets/blocks/logo-3.png"
+ },
+ "url": "",
+ "openInNewTab": false
+ },
+ {
+ "image": {
+ "url": "/themes/assets/blocks/logo-4.png"
+ },
+ "url": "",
+ "openInNewTab": false
+ }
+ ]
+ }
+ ]
+ },
+ "features-with-icons": {
+ "name": "Features with icons",
+ "icon": "image-text",
+ "displayField": "title",
+ "category": "Features and Cards",
+ "includeShared": [ "text-width", "colors", "margins" ],
+ "default": {
+ "backgroundColor": "#efefef",
+ "name": "Features with icons"
+ },
+ "settings": [
+ {
+ "id": "title",
+ "label": "Title",
+ "type": "string",
+ "sort": 10,
+ "default": "Explore the features"
+ },
+ {
+ "id": "content",
+ "label": "Subtitle",
+ "type": "text",
+ "sort": 20,
+ "default": "With a crystal-clear camera, real-time HD video display, and intuitive flight controls, what will you create?
"
+ },
+ {
+ "id": "columns",
+ "label": "Items",
+ "type": "list",
+ "addText": "Add column",
+ "removeText": "Remove column",
+ "displayField": "title",
+ "element": [
+ {
+ "id": "title",
+ "type": "string",
+ "label": "Title"
+ },
+ {
+ "id": "image",
+ "type": "image",
+ "label": "Image",
+ "group": "Image"
+ },
+ {
+ "id": "content",
+ "label": "Content",
+ "type": "text"
+ },
+ {
+ "id": "button",
+ "label": "Button",
+ "type": "url",
+ "urlLabel": "Url",
+ "textLabel": "Button text",
+ "styleLabel": "Link style",
+ "styles": [
+ {
+ "value": "btn-primary",
+ "label": "Primary button"
+ },
+ {
+ "value": "btn-secondary",
+ "label": "Secondary button"
+ },
+ {
+ "value": "btn-success",
+ "label": "Success button"
+ },
+ {
+ "value": "btn-danger",
+ "label": "Danger button"
+ },
+ {
+ "value": "btn-warning",
+ "label": "Warning button"
+ },
+ {
+ "value": "btn-info",
+ "label": "Info button"
+ },
+ {
+ "value": "btn-light",
+ "label": "Light button"
+ },
+ {
+ "value": "btn-dark",
+ "label": "Dark button"
+ },
+ {
+ "value": "btn-link",
+ "label": "Link button"
+ }
+ ]
+ }
+ ],
+ "default": [
+ {
+ "title": "Epic Aerial Video",
+ "content": "With the Phantom 3 Professional, you're shooting 4K video at up to 30 frames per second and capturing 12 megapixel photos."
+ },
+ {
+ "title": "Live HD View",
+ "content": "Simply connect your phone or tablet, and a 720p HD view of everything your camera sees as you fly is displayed live."
+ },
+ {
+ "title": "Complete Control",
+ "content": "Keep your Phantom 3 fully under your command while accessing the most-used features right on the included remote controller."
+ }
+ ]
+ },
+ {
+ "id": "textAreaWidth",
+ "default": "col-md-12"
+ },
+ {
+ "id": "columnsCount",
+ "label": "Columns in row",
+ "type": "select",
+ "default": "4",
+ "sort": 216,
+ "options": [
+ {
+ "value": "12",
+ "label": "1"
+ },
+ {
+ "value": "6",
+ "label": "2"
+ },
+ {
+ "value": "4",
+ "label": "3"
+ },
+ {
+ "value": "3",
+ "label": "4"
+ }
+ ],
+ "tab": "Settings",
+ "group": "Main block settings"
+ },
+ {
+ "id": "iconsType",
+ "label": "Icons type",
+ "type": "select",
+ "sort": 217,
+ "default": "numbers",
+ "options": [
+ {
+ "value": "none",
+ "label": "None"
+ },
+ {
+ "value": "numbers",
+ "label": "Numbers"
+ },
+ {
+ "value": "letters",
+ "label": "Letters"
+ },
+ {
+ "value": "customIcon",
+ "label": "Custom icon"
+ },
+ {
+ "value": "images",
+ "label": "Image"
+ }
+ ],
+ "tab": "Settings",
+ "group": "Items"
+ }
+ ]
+ },
+ "call-to-action": {
+ "name": "Call to action",
+ "icon": "image-text",
+ "displayField": "title",
+ "category": "Promotions and CTAs",
+ "includeShared": [ "buttons", "colors" ],
+ "excludeShared": [ "contentColor" ],
+ "default": {
+ "headerType": "like-h1",
+ "titleColor": "#ffffff",
+ "backgroundColor": "#000000",
+ "name": "Call to action"
+ },
+ "settings": [
+ {
+ "id": "title",
+ "label": "Title",
+ "type": "string",
+ "sort": 10,
+ "default": "Book a free e-commerce consulting"
+ },
+ {
+ "id": "firstButton",
+ "label": "First button",
+ "default": {
+ "url": "",
+ "urlText": "Get my seat reserved",
+ "style": "btn-warning"
+ }
+ },
+ {
+ "id": "titleAlignment",
+ "label": "Block style",
+ "type": "select",
+ "default": "justify-content-between",
+ "sort": 235,
+ "tab": "Settings",
+ "options": [
+ {
+ "value": "justify-content-center",
+ "label": "Center"
+ },
+ {
+ "value": "justify-content-between",
+ "label": "Justifyed"
+ }
+ ]
+ }
+ ]
+ },
+ "buy-now": {
+ "name": "Product promotion",
+ "icon": "text",
+ "displayField": "name",
+ "category": "Queries and Others",
+ "includeShared": [ "utm-marks", "margins", "colors" ],
+ "excludeShared": [],
+ "default": {
+ "headerType": "like-h1",
+ "titleColor": "#000000",
+ "contentColor": "#767676",
+ "backgroundColor": "#efefef",
+ "name": "Product promotion"
+ },
+ "settings": [
+ {
+ "id": "product",
+ "label": "SKU",
+ "sort": 1,
+ "type": "search",
+ "nodataText": "Search by SKU to retrieve product data here",
+ "default": {
+ "id": "9cbd8f316e254a679ba34a900fccb076",
+ "name": "3DR Solo Quadcopter (No Gimbal)",
+ "imgSrc": "/themes/assets/blocks/1428965138000_1133723.jpg",
+ "description": "
- Capture Aerial Photos/Video with a GoPro
- Linear Tracking with Cablecam Mode
- Follow Me: Tracks Your Mobile Device
- HDMI Output on Transmitter
- Android and iOS Mobile Apps
- Video Game-Style Controls
- Return Home and "Safety Net" Modes
- One-Button Flying / "Pause" Button
- Operate GoPro Through App
- Works with Optional Solo Gimbal
",
+ "price": "$995.99",
+ "url": "3dr-solo-quadcopter-no-gimbal",
+ "__searchQuery": "3DRSOLO"
+ },
+ "displayInfo": [
+ {
+ "label": "Name",
+ "key": "name"
+ },
+ {
+ "label": "Image",
+ "key": "imgSrc",
+ "type": "image"
+ }
+ ],
+ "request": {
+ "url": "/graphql",
+ "method": "post",
+ "body": {
+ "operationName": null,
+ "variables": {},
+ "query": "{products(storeId:\"B2B-store\",filter:\"sku:{{__searchQuery}}\",userId:\"\"){items{id,code,name,imgSrc,descriptions{reviewType,content}prices{currency,actual{formattedAmount}}seoInfos{semanticUrl}}}}"
+ },
+ "response": {
+ "result": "data.products.items",
+ "isArray": false,
+ "value": [
+ "id",
+ "name",
+ "code",
+ "imgSrc",
+ {
+ "key": "description",
+ "query": "$.descriptions[?(@.reviewType=='QuickReview')].content",
+ "isArray": false
+ },
+ {
+ "key": "price",
+ "query": "$.prices[?(@.currency=='USD')].actual.formattedAmount",
+ "isArray": false
+ },
+ {
+ "key": "url",
+ "query": "$.seoInfos.semanticUrl",
+ "isArray": false
+ }
+ ]
+ }
+ }
+ },
+ {
+ "id": "description",
+ "label": "Description",
+ "sort": 2,
+ "type": "text"
+ },
+ {
+ "id": "buttonText",
+ "label": "Button name",
+ "type": "string",
+ "sort": 3,
+ "default": "Add to cart"
+ },
+ {
+ "id": "buttonAction",
+ "label": "Button action",
+ "type": "select",
+ "default": "add",
+ "sort": 4,
+ "options": [
+ {
+ "label": "Add to cart",
+ "value": "add"
+ },
+ {
+ "label": "Open product page",
+ "value": "open"
+ }
+ ]
+ },
+ {
+ "id": "giftProduct",
+ "label": "Choose gift",
+ "type": "select",
+ "sort": 1,
+ "cacheRequest": true,
+ "equalKey": "id",
+ "default": null,
+ "request": {
+ "url": "/api/catalog/search/products",
+ "method": "post",
+ "body": {
+ "objectType": "Product",
+ "catalogId": "fc596540864a41bf8ab78734ee7353a3",
+ "take": 100
+ },
+ "response": {
+ "result": "items",
+ "isArray": true,
+ "value": [ "id", "name" ]
+ },
+ "label": "name"
+ },
+ "options": [
+ {
+ "label": "[none]",
+ "value": null
+ }
+ ]
+ },
+ {
+ "id": "hidePrice",
+ "label": "Hide price",
+ "type": "checkbox",
+ "default": false,
+ "tab": "Settings",
+ "sort": 101
+ },
+ {
+ "id": "imagePosition",
+ "label": "Side image position",
+ "type": "select",
+ "default": "right",
+ "sort": 102,
+ "tab": "Settings",
+ "options": [
+ {
+ "label": "Left",
+ "value": "left"
+ },
+ {
+ "label": "Right",
+ "value": "right"
+ }
+ ]
+ }
+ ]
+ },
+ "product-tiles": {
+ "name": "Category promotion",
+ "icon": "text",
+ "displayField": "name",
+ "category": "Queries and Others",
+ "includeShared": [ "utm-marks", "margins", "colors" ],
+ "default": {
+ "name": "Category promotion"
+ },
+ "settings": [
+ {
+ "id": "subtitle",
+ "label": "Subtitle",
+ "type": "text",
+ "sort": 2
+ },
+ {
+ "id": "categoryId",
+ "label": "Choose category",
+ "type": "select",
+ "sort": 1,
+ "cacheRequest": true,
+ "equalKey": "id",
+ "default": {
+ "id": "45d3fc9a913d4610a5c7d0470558c4b2",
+ "name": "Camcoders"
+ },
+ "request": {
+ "url": "/api/catalog/search/categories",
+ "method": "post",
+ "body": {
+ "objectType": "Category",
+ "catalogId": "fc596540864a41bf8ab78734ee7353a3"
+ },
+ "response": {
+ "result": "items",
+ "isArray": true,
+ "value": [ "id", "name" ]
+ },
+ "label": "name"
+ }
+ },
+ {
+ "id": "count",
+ "label": "Max items",
+ "type": "number",
+ "tab": "Settings",
+ "sort": 100,
+ "default": 0,
+ "min": 0
+ },
+ {
+ "id": "excludes",
+ "label": "SKU for exclude",
+ "tab": "Settings",
+ "type": "string",
+ "sort": 101,
+ "multiline": true
+ },
+ {
+ "id": "userGroup",
+ "label": "User group",
+ "type": "string",
+ "tab": "Settings",
+ "sort": 311,
+ "default": null
}
]
}
diff --git a/config/settings_data.json b/config/settings_data.json
index 40a42e63..c1e0bc16 100644
--- a/config/settings_data.json
+++ b/config/settings_data.json
@@ -18,8 +18,6 @@
"footer_resources_linklist": "online-resources",
"footer_services_enable": true,
"footer_services_linklist": "our-services",
- "footer_legallinks_enable": true,
- "footer_legallinks_linklist": "legal-links",
"footer_mobile_apps_enable": true,
"mobile_features_link": "",
"google_play_link": "",
diff --git a/gulpfile.esm.js b/gulpfile.esm.js
index d3a131e3..4fd717a4 100644
--- a/gulpfile.esm.js
+++ b/gulpfile.esm.js
@@ -3,14 +3,15 @@ import cssnano from 'cssnano';
import del from 'del';
import { dest, parallel, series, src, watch } from 'gulp';
import babel from 'gulp-babel';
-import bootlint from 'gulp-bootlint';
import concat from 'gulp-concat';
import eslint from 'gulp-eslint';
import gitignore from 'gulp-exclude-gitignore';
import htmlmin from 'gulp-htmlmin';
import postcss from 'gulp-postcss';
import rename from 'gulp-rename';
+import fiber from 'fibers';
import sass from 'gulp-sass';
+sass.compiler = require('sass');
import sourcemaps from 'gulp-sourcemaps';
import terser from 'gulp-terser';
import zip from 'gulp-zip';
@@ -80,8 +81,9 @@ const minScss = () => {
return src(bundle.inputFiles, { base: '.', allowEmpty: true })
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(sass({
- outputStyle: "nested",
- precision: 10
+ fiber: fiber,
+ outputStyle: "expanded",
+ includePaths: ["node_modules/"]
}))
.pipe(concat(bundle.outputFileName))
.pipe(postcss([autoprefixer(), cssnano()]))
@@ -154,29 +156,12 @@ const watchTask = () => {
watch(bundle.inputFiles, series(minCss));
});
- getBundles(regex.html).forEach(function (bundle) {
- watch(bundle.inputFiles, series(bootlintTask, minHtml));
- });
-
- getBundles(regex.liquid).forEach(function (bundle) {
- watch(bundle.inputFiles, series(bootlintTask));
- });
-
getDirectories().map(function(item) {
watch(item.inputFiles, series(copy));
});
};
exports['watch'] = watchTask;
-export const bootlintTask = () => {
- return src(['./**/*.html', './**/*.liquid', '!./design/**/*.*'])
- .pipe(gitignore())
- .pipe(bootlint({
- disabledIds: ['E001', 'W001', 'W002', 'W003', 'W005']
- }));
-};
-exports['bootlintTask'] = bootlintTask;
-
export const eslintTask = () => {
const tasks = getBundles(regex.js).filter(function(bundle) { return !bundle.disableLint || bundle.disableLint === undefined }).map(function(bundle) {
return src(bundle.inputFiles, { base: '.', allowEmpty: true })
@@ -187,7 +172,7 @@ export const eslintTask = () => {
};
exports['eslint'] = eslintTask;
-export const lint = series(bootlintTask, eslintTask);
+export const lint = series(eslintTask);
export const compress = series(min, function() {
return merge(
diff --git a/layout/bootstrap_migration.liquid b/layout/bootstrap_migration.liquid
new file mode 100644
index 00000000..2a666483
--- /dev/null
+++ b/layout/bootstrap_migration.liquid
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ {% include 'meta/meta-info' %}
+
+ {% include 'third-party/google-tag-manager-head' %}
+ {% include 'meta/open-graph-tags' %}
+
+
+
+
+
+ {% include 'main/dependencies-bootstrap-migration' %}
+
+
+ {% include 'bootstrap-migration/main/header' %}
+ {{ content_for_layout }}
+ {% include 'bootstrap-migration/main/footer' %}
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 85c824a8..758f5460 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "vc-demo-theme-b2b",
- "version": "1.4.0",
+ "version": "1.5.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -3615,12 +3615,6 @@
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true
},
- "binary-search": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
- "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==",
- "dev": true
- },
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
@@ -3640,71 +3634,12 @@
"inherits": "~2.0.0"
}
},
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
"boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
- "bootlint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/bootlint/-/bootlint-1.1.0.tgz",
- "integrity": "sha512-LcGOSE5WS13EaUM1u1PMgVzbly6GhykPc378hILF3Q+t5ROkQvak4KLoNBRS1kNqf/464H9y4aZnVqRDhuFmpw==",
- "dev": true,
- "requires": {
- "binary-search": "^1.3.6",
- "bluebird": "^3.7.2",
- "chalk": "^2.4.2",
- "cheerio": "^0.22.0",
- "commander": "^2.20.3",
- "glob": "^7.1.6",
- "semver": "^6.3.0",
- "void-elements": "^3.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"bootstrap": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz",
@@ -4121,30 +4056,6 @@
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
- "cheerio": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
- "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
- "dev": true,
- "requires": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash.assignin": "^4.0.9",
- "lodash.bind": "^4.1.4",
- "lodash.defaults": "^4.0.1",
- "lodash.filter": "^4.4.0",
- "lodash.flatten": "^4.2.0",
- "lodash.foreach": "^4.3.0",
- "lodash.map": "^4.4.0",
- "lodash.merge": "^4.4.0",
- "lodash.pick": "^4.2.1",
- "lodash.reduce": "^4.4.0",
- "lodash.reject": "^4.4.0",
- "lodash.some": "^4.4.0"
- }
- },
"chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -4239,20 +4150,6 @@
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
"integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w=="
},
- "cli-color": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.1.1",
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "memoizee": "^0.4.14",
- "timers-ext": "^0.1.5"
- }
- },
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -4262,29 +4159,6 @@
"restore-cursor": "^3.1.0"
}
},
- "cli-sprintf-format": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.0.tgz",
- "integrity": "sha512-t3LcCdPvrypZovStadWdRS4a186gsq9aoHJYTIer55VY20YdVjGVHDV4uPWcWCXTw1tPjfwlRGE7zKMWJ663Sw==",
- "dev": true,
- "requires": {
- "cli-color": "^1.3",
- "es5-ext": "^0.10.46",
- "sprintf-kit": "2",
- "supports-color": "^5.5"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"cli-table": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
@@ -4771,18 +4645,6 @@
}
}
},
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "dev": true,
- "requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
"css-select-base-adapter": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
@@ -4799,12 +4661,6 @@
"source-map": "^0.6.1"
}
},
- "css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
- "dev": true
- },
"cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -5308,6 +5164,12 @@
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true
+ },
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -5365,25 +5227,6 @@
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
"dev": true
},
- "domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "dev": true,
- "requires": {
- "domelementtype": "1"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "dev": true,
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
"dot-prop": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
@@ -5455,16 +5298,6 @@
}
}
},
- "duration": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz",
- "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.46"
- }
- },
"each-props": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
@@ -6449,6 +6282,15 @@
"pend": "~1.2.0"
}
},
+ "fibers": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz",
+ "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^1.0.3"
+ }
+ },
"figgy-pudding": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
@@ -6744,6 +6586,15 @@
}
}
},
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dev": true,
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
"gensync": {
"version": "1.0.0-beta.1",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
@@ -6922,6 +6773,17 @@
}
}
},
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+ "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
+ "dev": true,
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ }
+ },
"glogg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
@@ -7195,39 +7057,6 @@
}
}
},
- "gulp-bootlint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/gulp-bootlint/-/gulp-bootlint-1.1.0.tgz",
- "integrity": "sha512-lN/pUCIqX7LtrDsgfNbWvTW+7blISvtEEf7JZCa9gb4MnJB08klio82MaRVX4bw2DgnRQwFgEw80QCNMOTExNA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1",
- "bootlint": "^1.1.0",
- "log": "^6.0.0",
- "log-node": "^7.0.0",
- "merge": "^1.2.1",
- "plugin-error": "^1.0.1",
- "through2": "^3.0.1"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "through2": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "2 || 3"
- }
- }
- }
- },
"gulp-concat": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
@@ -8132,33 +7961,6 @@
}
}
},
- "htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "dev": true,
- "requires": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
@@ -9239,24 +9041,6 @@
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
"dev": true
},
- "lodash.assignin": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
- "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
- "dev": true
- },
- "lodash.bind": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
- "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
- "dev": true
- },
- "lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
- "dev": true
- },
"lodash.escape": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
@@ -9266,24 +9050,6 @@
"lodash._root": "^3.0.0"
}
},
- "lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
- "dev": true
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
- "dev": true
- },
- "lodash.foreach": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
- "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
- "dev": true
- },
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
@@ -9307,54 +9073,18 @@
"lodash.isarray": "^3.0.0"
}
},
- "lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
- "dev": true
- },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lodash.pick": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
- "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
- "dev": true
- },
- "lodash.reduce": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
- "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
- "dev": true
- },
- "lodash.reject": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
- "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
- "dev": true
- },
"lodash.restparam": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
"integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
"dev": true
},
- "lodash.some": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
- "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
- "dev": true
- },
"lodash.template": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
@@ -9388,61 +9118,6 @@
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
"dev": true
},
- "log": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/log/-/log-6.0.0.tgz",
- "integrity": "sha512-sxChESNYJ/EcQv8C7xpmxhtTOngoXuMEqGDAkhXBEmt3MAzM3SM/TmIBOqnMEVdrOv1+VgZoYbo6U2GemQiU4g==",
- "dev": true,
- "requires": {
- "d": "^1.0.0",
- "duration": "^0.2.2",
- "es5-ext": "^0.10.49",
- "event-emitter": "^0.3.5",
- "sprintf-kit": "^2.0.0",
- "type": "^1.0.1"
- }
- },
- "log-node": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/log-node/-/log-node-7.0.0.tgz",
- "integrity": "sha512-/P5eDVV2AXVmXq3TTKOsAyb3Xcb/iVBuxmWW8HisgmiYKuah05/je7jbbSfVdT9UPxGLANbGsbthDTVHMi/3Eg==",
- "dev": true,
- "requires": {
- "cli-color": "^1.4.0",
- "cli-sprintf-format": "^1.1.0",
- "d": "^1.0.0",
- "es5-ext": "^0.10.49",
- "has-ansi": "^3.0.0",
- "sprintf-kit": "^2.0.0",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "has-ansi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-3.0.0.tgz",
- "integrity": "sha1-Ngd+8dFfMzSEqn+neihgbxxlWzc=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -9726,12 +9401,6 @@
}
}
},
- "merge": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
- "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
- "dev": true
- },
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -10088,31 +9757,11 @@
"which": "^1.2.9"
}
},
- "gaze": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
- "dev": true,
- "requires": {
- "globule": "^1.0.0"
- }
- },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
- },
- "globule": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
- "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
- "dev": true,
- "requires": {
- "glob": "~7.1.1",
- "lodash": "~4.17.10",
- "minimatch": "~3.0.2"
- }
}
}
},
@@ -13522,6 +13171,15 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "sass": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.29.0.tgz",
+ "integrity": "sha512-ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA==",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=2.0.0 <4.0.0"
+ }
+ },
"sass-graph": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
@@ -13943,15 +13601,6 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
- "sprintf-kit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.0.tgz",
- "integrity": "sha512-/0d2YTn8ZFVpIPAU230S9ZLF8WDkSSRWvh/UOLM7zzvkCchum1TtouRgyV8OfgOaYilSGU4lSSqzwBXJVlAwUw==",
- "dev": true,
- "requires": {
- "es5-ext": "^0.10.46"
- }
- },
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
@@ -15308,12 +14957,6 @@
}
}
},
- "void-elements": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
- "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
- "dev": true
- },
"whatwg-fetch": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz",
@@ -15595,14 +15238,6 @@
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
}
},
"yauzl": {
diff --git a/package.json b/package.json
index 320322af..07dab773 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "version": "1.4.0",
+ "version": "1.5.0",
"name": "vc-demo-theme-b2b",
"author": "VirtoCommerce",
"description": "B2B theme for Storefront",
@@ -40,9 +40,9 @@
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.1",
"esm": "^3.2.25",
+ "fibers": "^5.0.0",
"gulp": "^4.0.2",
"gulp-babel": "^8.0.0",
- "gulp-bootlint": "^1.1.0",
"gulp-concat": "^2.6.1",
"gulp-eslint": "^6.0.0",
"gulp-exclude-gitignore": "^1.1.1",
@@ -57,8 +57,8 @@
"gulp-util": "^3.0.8",
"gulp-zip": "^5.0.2",
"merge2": "^1.2.3",
- "node-sass": "^4.8.3",
"postcss-smart-import": "^0.7.5",
+ "sass": "^1.29.0",
"svg2png": "^3.0.1"
},
"engineStrict": true,
diff --git a/snippets/bootstrap-migration/main/footer.liquid b/snippets/bootstrap-migration/main/footer.liquid
new file mode 100644
index 00000000..2ffc9153
--- /dev/null
+++ b/snippets/bootstrap-migration/main/footer.liquid
@@ -0,0 +1,4 @@
+
diff --git a/snippets/bootstrap-migration/main/footer/bottom.liquid b/snippets/bootstrap-migration/main/footer/bottom.liquid
new file mode 100644
index 00000000..1c27cb47
--- /dev/null
+++ b/snippets/bootstrap-migration/main/footer/bottom.liquid
@@ -0,0 +1,4 @@
+
+ © {{ 'now' | date: "yyyy" }} {{ settings.copyright }}
+ {{ powered_by shop.name }}
+
diff --git a/snippets/bootstrap-migration/main/footer/links.liquid b/snippets/bootstrap-migration/main/footer/links.liquid
new file mode 100644
index 00000000..f212ce92
--- /dev/null
+++ b/snippets/bootstrap-migration/main/footer/links.liquid
@@ -0,0 +1,43 @@
+
+
+
+
+ {{ 'layout.footer.company_information' | t }}
+
+ - About Us
+ - Investor Relations
+ - Supplier Overview
+ - Worlwide
+
+
+
+ {{ 'layout.footer.customer_support' | t }}
+
+ - Catalog Request
+ - Contact Us
+ - Feedback
+ - Find A Branch
+
+
+
+ {{ 'layout.footer.order_support' | t }}
+
+ - Orders
+ - Pick-Up
+ - Auto-Reorder
+ - Returns & Cancellations
+
+
+
+
+ {{ 'layout.footer.resources' | t }}
+
+ - Catalog
+ - Hot Buys
+ - Rebates
+ - Replacement Parts
+ - Today's features
+
+
+
+
diff --git a/snippets/bootstrap-migration/main/header.liquid b/snippets/bootstrap-migration/main/header.liquid
new file mode 100644
index 00000000..a57c9fb0
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header.liquid
@@ -0,0 +1,6 @@
+
+ {% include 'bootstrap-migration/main/header/top' %}
+ {% include 'bootstrap-migration/main/header/links' %}
+ {% include 'bootstrap-migration/main/header/nav' %}
+
+{% include 'bootstrap-migration/main/header/nav-mobile' %}
diff --git a/snippets/bootstrap-migration/main/header/links.liquid b/snippets/bootstrap-migration/main/header/links.liquid
new file mode 100644
index 00000000..817ad1fd
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/links.liquid
@@ -0,0 +1,38 @@
+
diff --git a/snippets/bootstrap-migration/main/header/links/brand.liquid b/snippets/bootstrap-migration/main/header/links/brand.liquid
new file mode 100644
index 00000000..5f3ab044
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/links/brand.liquid
@@ -0,0 +1,8 @@
+
+ {% if settings.logo_use_image %}
+
+ {% else %}
+ {{ shop.name }}
+ {{ shop.name }}
+ {% endif %}
+
diff --git a/snippets/bootstrap-migration/main/header/nav-mobile.liquid b/snippets/bootstrap-migration/main/header/nav-mobile.liquid
new file mode 100644
index 00000000..1bb67683
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/nav-mobile.liquid
@@ -0,0 +1,31 @@
+
+
diff --git a/snippets/bootstrap-migration/main/header/nav.liquid b/snippets/bootstrap-migration/main/header/nav.liquid
new file mode 100644
index 00000000..794ad268
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/nav.liquid
@@ -0,0 +1,17 @@
+
diff --git a/snippets/bootstrap-migration/main/header/nav/bulk-order-form.liquid b/snippets/bootstrap-migration/main/header/nav/bulk-order-form.liquid
new file mode 100644
index 00000000..f011b258
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/nav/bulk-order-form.liquid
@@ -0,0 +1,8 @@
+
+
+ {{ 'bulk_order.general.title' | t }}
+
+
+
diff --git a/snippets/bootstrap-migration/main/header/nav/top-level-collections.liquid b/snippets/bootstrap-migration/main/header/nav/top-level-collections.liquid
new file mode 100644
index 00000000..e2baf637
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/nav/top-level-collections.liquid
@@ -0,0 +1,29 @@
+
+
diff --git a/snippets/bootstrap-migration/main/header/shared/cart.liquid b/snippets/bootstrap-migration/main/header/shared/cart.liquid
new file mode 100644
index 00000000..dec2fd7d
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/shared/cart.liquid
@@ -0,0 +1,5 @@
+
+
+
+ {{ 'layout.cart.cart' | t }} ()
+
+
diff --git a/snippets/bootstrap-migration/main/header/top.liquid b/snippets/bootstrap-migration/main/header/top.liquid
new file mode 100644
index 00000000..605e0aa9
--- /dev/null
+++ b/snippets/bootstrap-migration/main/header/top.liquid
@@ -0,0 +1,54 @@
+
diff --git a/snippets/bootstrap-migration/shared/search-bar.liquid b/snippets/bootstrap-migration/shared/search-bar.liquid
new file mode 100644
index 00000000..88c6b3a6
--- /dev/null
+++ b/snippets/bootstrap-migration/shared/search-bar.liquid
@@ -0,0 +1,6 @@
+
+
diff --git a/snippets/main/dependencies-bootstrap-migration.liquid b/snippets/main/dependencies-bootstrap-migration.liquid
new file mode 100644
index 00000000..0549eb33
--- /dev/null
+++ b/snippets/main/dependencies-bootstrap-migration.liquid
@@ -0,0 +1,14 @@
+
+
+{{ 'bundle/styles.css' | static_asset_url | append_version | stylesheet_tag }}
+{{ 'bundle/bootstrap-migration.scss.css' | static_asset_url | append_version | stylesheet_tag }}
+
+{{ content_for_header }}
+
+{{ 'bundle/dependencies.js' | static_asset_url | append_version | script_tag }}
+{{ 'consts.js' | asset_url | script_tag }}
+{{ 'bundle/scripts.js' | static_asset_url | append_version | script_tag }}
+
+{{ 'shop.js' | asset_url | script_tag }}
+{{ 'shopify_common.js' | asset_url | script_tag }}
+{{ 'customer_area.js' | asset_url | script_tag }}
diff --git a/snippets/main/footer.liquid b/snippets/main/footer.liquid
index ccb755bd..fa7575b4 100644
--- a/snippets/main/footer.liquid
+++ b/snippets/main/footer.liquid
@@ -1,5 +1,4 @@
diff --git a/snippets/main/footer/nav.liquid b/snippets/main/footer/nav.liquid
deleted file mode 100644
index 1b82613c..00000000
--- a/snippets/main/footer/nav.liquid
+++ /dev/null
@@ -1,32 +0,0 @@
-
diff --git a/templates/blocks/form/form-field.liquid b/templates/blocks/form/form-field.liquid
new file mode 100644
index 00000000..cc199dc4
--- /dev/null
+++ b/templates/blocks/form/form-field.liquid
@@ -0,0 +1,20 @@
+{% if item.fieldType == 'hidden' %}
+
+{% else %}
+
+ {% assign showTitle = block.showFormLabels == 'True' and item.fieldType != 'checkbox' and item.fieldType != 'radio' and item.fieldType != 'button' %}
+ {% if showTitle %}
+
+ {% endif %}
+
+ {% if item.fieldType != '' %}
+ {% assign viewName = 'blocks/form/form-input-' | append item.fieldType %}
+ {% if item.fieldType == 'text' or item.fieldType == 'phone' or item.fieldType == 'email' %}
+ {% assign viewName = 'blocks/form/form-input-text' %}
+ {% endif %}
+ {% include viewName inputItem: item %}
+ {% include 'blocks/form/form-validation-message' inputItem: item %}
+ {% endif %}
+
+
+{% endif %}
diff --git a/templates/blocks/form/form-input-button.liquid b/templates/blocks/form/form-input-button.liquid
new file mode 100644
index 00000000..bd5fb1ea
--- /dev/null
+++ b/templates/blocks/form/form-input-button.liquid
@@ -0,0 +1 @@
+
diff --git a/templates/blocks/form/form-input-checkbox.liquid b/templates/blocks/form/form-input-checkbox.liquid
new file mode 100644
index 00000000..4e4a99f1
--- /dev/null
+++ b/templates/blocks/form/form-input-checkbox.liquid
@@ -0,0 +1,6 @@
+
+
diff --git a/templates/blocks/form/form-input-radio.liquid b/templates/blocks/form/form-input-radio.liquid
new file mode 100644
index 00000000..607916ae
--- /dev/null
+++ b/templates/blocks/form/form-input-radio.liquid
@@ -0,0 +1,14 @@
+
+ {% for radio in item.radioListItems %}
+
+
+
+
+ {% endfor %}
+
diff --git a/templates/blocks/form/form-input-select.liquid b/templates/blocks/form/form-input-select.liquid
new file mode 100644
index 00000000..e616a766
--- /dev/null
+++ b/templates/blocks/form/form-input-select.liquid
@@ -0,0 +1,11 @@
+
diff --git a/templates/blocks/form/form-input-text.liquid b/templates/blocks/form/form-input-text.liquid
new file mode 100644
index 00000000..c9558cf5
--- /dev/null
+++ b/templates/blocks/form/form-input-text.liquid
@@ -0,0 +1,6 @@
+
diff --git a/templates/blocks/form/form-input-textarea.liquid b/templates/blocks/form/form-input-textarea.liquid
new file mode 100644
index 00000000..f1d2c570
--- /dev/null
+++ b/templates/blocks/form/form-input-textarea.liquid
@@ -0,0 +1,4 @@
+
diff --git a/templates/blocks/form/form-validation-message.liquid b/templates/blocks/form/form-validation-message.liquid
new file mode 100644
index 00000000..1224b6c2
--- /dev/null
+++ b/templates/blocks/form/form-validation-message.liquid
@@ -0,0 +1,5 @@
+{% if inputItem.required == 'True' %}
+
+{% endif %}
diff --git a/templates/blocks/form/form.liquid b/templates/blocks/form/form.liquid
new file mode 100644
index 00000000..1a2aa714
--- /dev/null
+++ b/templates/blocks/form/form.liquid
@@ -0,0 +1,8 @@
+
diff --git a/templates/blocks/form/input-validation-attributes.liquid b/templates/blocks/form/input-validation-attributes.liquid
new file mode 100644
index 00000000..ec3bf7dc
--- /dev/null
+++ b/templates/blocks/form/input-validation-attributes.liquid
@@ -0,0 +1,28 @@
+{% if inputItem.required == 'True' %}
+ {% if inputItem.validationMessage == 'Null' or inputItem.validationMessage == '' %}
+ {% if inputItem.labelText == 'Null' or inputItem.labelText == '' %}
+ {% assign fieldInfo = inputItem.placeholder %}
+ {% else %}
+ {% assign fieldInfo = inputItem.labelText %}
+ {% endif %}
+ {% if fieldInfo == 'Null' or fieldInfo == '' %}
+ {% assign fieldInfo = 'value' %}
+ {% endif %}
+ {% if inputItem.fieldType == 'radio' %}
+ {% assign validationMessage = 'Please choose ' | append: fieldInfo %}
+ {% else %}
+ {% assign validationMessage = 'Please enter ' | append: fieldInfo %}
+ {% endif %}
+ {% else %}
+ {% assign validationMessage = inputItem.validationMessage %}
+ {% endif %}
+ data-val="true" data-val-required="{{validationMessage}}" aria-required="true" aria-describedby="{{inputItem.fieldName}}-error" aria-invalid="true"
+{% endif %}
+
+{% if inputItem.fieldType == 'email' %}
+ data-val-email="{{inputItem.labelText}} is invalid"
+{% endif %}
+
+{% if inputItem.fieldType == 'phone' %}
+ data-val-regex="{{item.labelText}} is invalid" data-val-regex-pattern="[0-9]{11,}"
+{% endif %}
diff --git a/templates/blocks/helpers/block-title.liquid b/templates/blocks/helpers/block-title.liquid
index dd4c271f..f0199500 100644
--- a/templates/blocks/helpers/block-title.liquid
+++ b/templates/blocks/helpers/block-title.liquid
@@ -17,11 +17,11 @@
{% elsif block.headerType == 'h3' %}
{{ givenTitle }}
{% elsif block.headerType == 'like-h1' %}
- {{ givenTitle }}
+ {{ givenTitle }}
{% elsif block.headerType == 'like-h3' %}
- {{ givenTitle }}
+ {{ givenTitle }}
{% else %}
- {{ givenTitle }}
+ {{ givenTitle }}
{% endif %}
{% endif %}
{% assign givenTitle = null %}
diff --git a/templates/blocks/helpers/catalog-script.liquid b/templates/blocks/helpers/catalog-script.liquid
new file mode 100644
index 00000000..7cc06904
--- /dev/null
+++ b/templates/blocks/helpers/catalog-script.liquid
@@ -0,0 +1,6 @@
+{% if is_preview_mode != true and catalog_script_rendered != true %}
+{% assign catalog_script_rendered = true %}
+
+
+{% endif %}
+
diff --git a/templates/blocks/helpers/color-style.liquid b/templates/blocks/helpers/color-style.liquid
new file mode 100644
index 00000000..4d2e8452
--- /dev/null
+++ b/templates/blocks/helpers/color-style.liquid
@@ -0,0 +1,20 @@
+
diff --git a/templates/blocks/helpers/cover-style.liquid b/templates/blocks/helpers/cover-style.liquid
new file mode 100644
index 00000000..f16efbb4
--- /dev/null
+++ b/templates/blocks/helpers/cover-style.liquid
@@ -0,0 +1,42 @@
+
diff --git a/templates/blocks/helpers/cover-text.liquid b/templates/blocks/helpers/cover-text.liquid
new file mode 100644
index 00000000..55d8222e
--- /dev/null
+++ b/templates/blocks/helpers/cover-text.liquid
@@ -0,0 +1,25 @@
+
+ {% if block.note %}
+ {{ block.note }}
+ {% endif %}
+
+ {% if block.title %}
+ {% include 'blocks/helpers/block-title' %}
+ {% endif %}
+
+ {% if block.subtitle %}
+ {{ block.subtitle }}
+
+ {% endif %}
+
+ {% if (block.firstButton and block.firstButton.urlText) or (block.secondButton and block.secondButton.urlText) %}
+
+ {% if block.firstButton and block.firstButton.urlText and block.firstButton.urlText != '' %}
+ {{block.firstButton.urlText}}
+ {% endif %}
+ {% if block.secondButton and block.secondButton.urlText and block.secondButton.urlText != '' %}
+ {{block.secondButton.urlText}}
+ {% endif %}
+
+ {% endif %}
+
diff --git a/templates/blocks/json-buy-now-search.liquid b/templates/blocks/json-buy-now-search.liquid
new file mode 100644
index 00000000..862b8c4b
--- /dev/null
+++ b/templates/blocks/json-buy-now-search.liquid
@@ -0,0 +1,94 @@
+{% assign display_block = true %}
+{% assign request = request_url | format:null %}
+
+{% if block.utmString and block.utmString != '' %}
+ {% assign display_block = request contains block.utmString %}
+ {% if block.utmNegotiate == 'True' %}
+ {% comment %} i couldn't find a negotiate operator {% endcomment %}
+ {% if display_block %}
+ {% assign display_block = false %}
+ {% else %}
+ {% assign display_block = true %}
+ {% endif %}
+ {% endif %}
+{% endif %}
+
+{% if display_block or is_preview_mode %}
+
+
+ {% assign product = block.product %}
+
+ {% include 'blocks/helpers/block-title' givenTitle: product.name %}
+
+ {% if product %}
+ {% if block.hidePrice != 'True' %}
+
+
+
+
+ {{ product.price }}
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+ {% if block.description != '' %}
+ {{ block.description }}
+ {% else %}
+ {{ product.description }}
+ {% endif %}
+
+
+
+ {% if block.buttonText %}
+ {% if block.buttonType == 'cart' %}
+
+ {% else %}
+ {{ block.buttonText }}
+ {% endif %}
+ {% endif %}
+
+
+
+ {% else %}
+
+ Product not found
+
+ {% endif %}
+
+
+
+{% endif %}
+
+{% include 'blocks/helpers/catalog-script' %}
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleStyle: [ null, bootstrap styles ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+title: string
+sku: string
+description: string (wysiwyg)
+buttonText: string
+hidePrice: bool
+
+{% endcomment %}
diff --git a/templates/blocks/json-buy-now.liquid b/templates/blocks/json-buy-now.liquid
new file mode 100644
index 00000000..6a50c9e2
--- /dev/null
+++ b/templates/blocks/json-buy-now.liquid
@@ -0,0 +1,93 @@
+{% assign display_block = true %}
+{% assign request = request_url | format:null %}
+
+{% if block.utmString and block.utmString != '' %}
+ {% assign display_block = request contains block.utmString %}
+ {% if block.utmNegotiate == 'True' %}
+ {% comment %} i couldn't find a negotiate operator {% endcomment %}
+ {% if display_block %}
+ {% assign display_block = false %}
+ {% else %}
+ {% assign display_block = true %}
+ {% endif %}
+ {% endif %}
+{% endif %}
+
+{% if display_block or is_preview_mode %}
+
+{% include 'blocks/helpers/color-style' %}
+
+
+
+ {% assign product = block.product %}
+
+ {% include 'blocks/helpers/block-title' givenTitle: product.name %}
+
+ {% if product %}
+ {% if block.hidePrice != 'True' %}
+
+
+
+
+ {{ product.price }}
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+ {% if block.description != '' %}
+ {{ block.description }}
+ {% else %}
+ {{ product.description }}
+ {% endif %}
+
+
+
+
+ {% else %}
+
+ Product not found
+
+ {% endif %}
+
+
+
+{% endif %}
+
+{% include 'blocks/helpers/catalog-script' %}
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleStyle: [ null, bootstrap styles ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+title: string
+sku: string
+description: string (wysiwyg)
+buttonText: string
+hidePrice: bool
+
+{% endcomment %}
diff --git a/templates/blocks/json-call-to-action.liquid b/templates/blocks/json-call-to-action.liquid
new file mode 100644
index 00000000..316981c3
--- /dev/null
+++ b/templates/blocks/json-call-to-action.liquid
@@ -0,0 +1,37 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+ {% if block.title %}
+
+ {% include 'blocks/helpers/block-title' %}
+
+ {% endif %}
+
+ {% if block.firstButton and block.firstButton.urlText and block.firstButton.urlText != '' %}
+
+ {% endif %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+textAreaWidth: string (col-lg, col-lg-10, col-lg-8, col-lg-6)
+brandColor: string (color)
+subtitle: string
+displayType: string (logo | simple)
+
+{% endcomment %}
diff --git a/templates/blocks/json-cover-with-form.liquid b/templates/blocks/json-cover-with-form.liquid
new file mode 100644
index 00000000..2eb56673
--- /dev/null
+++ b/templates/blocks/json-cover-with-form.liquid
@@ -0,0 +1,59 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+
+ {% include 'blocks/form/form' %}
+
+ {% include 'blocks/helpers/cover-text' %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+formPosition: string (null, right)
+formId: string
+formName: string
+formSubmitRedirectUrl: string
+formSubmitButtonStyle: string (bootstrap buttons styles)
+formFields: object[]{
+ fieldType: string (button, checkbox, email, hidden, phone, radio, select, text, textarea)
+ fieldName: string
+ fieldId: string
+ labelText: string
+ placeholder: string
+ fieldValue: string
+ required: bool
+ validationMessage: string
+ radioListItems: object[] {
+ title: string
+ text: string
+ id: string
+ value: string
+ isChecked: bool
+ isDisabled: bool
+ }
+ selectOptions: object[] {
+ label: string
+ value: string
+ isSelected: bool
+ isDisabled: bool
+ }
+showFormLabels: bool
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
diff --git a/templates/blocks/json-cover-with-image-and-flexible-title.liquid b/templates/blocks/json-cover-with-image-and-flexible-title.liquid
new file mode 100644
index 00000000..695a0a3d
--- /dev/null
+++ b/templates/blocks/json-cover-with-image-and-flexible-title.liquid
@@ -0,0 +1,40 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+ {% if block.containerImage and block.containerImage.url %}
+
+
+
+ {% endif %}
+
+ {% include 'blocks/helpers/cover-text' %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+backgroundColor: string (hex color)
+overlayColor: string (hex color)
+imagePosition: string [ null, right ]
+note: string
+title: string
+subtitle: string (wysiwyg)
+background: object (url to image, alt text)
+containerImage: object (url to image, alt text)
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
diff --git a/templates/blocks/json-cover-with-image.liquid b/templates/blocks/json-cover-with-image.liquid
new file mode 100644
index 00000000..072da94e
--- /dev/null
+++ b/templates/blocks/json-cover-with-image.liquid
@@ -0,0 +1,41 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+
+ {% if block.containerImage and block.containerImage.url != '' %}
+
+ {% endif %}
+
+ {% include 'blocks/helpers/cover-text' %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+backgroundColor: string (hex color)
+overlayColor: string (hex color)
+imagePosition: string [ null, right ]
+note: string
+title: string
+subtitle: string (wysiwyg)
+background: object (url to image, alt text)
+containerImage: object (url to image, alt text)
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
diff --git a/templates/blocks/json-cover-with-simple-text.liquid b/templates/blocks/json-cover-with-simple-text.liquid
new file mode 100644
index 00000000..b1722f07
--- /dev/null
+++ b/templates/blocks/json-cover-with-simple-text.liquid
@@ -0,0 +1,57 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+
+ {% include 'blocks/helpers/cover-text' %}
+
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+formId: string
+formName: string
+formSubmitRedirectUrl: string
+formSubmitButtonStyle: string (bootstrap buttons styles)
+formFields: object[]{
+ fieldType: string (button, checkbox, email, hidden, phone, radio, select, text, textarea)
+ fieldName: string
+ fieldId: string
+ labelText: string
+ placeholder: string
+ fieldValue: string
+ required: bool
+ validationMessage: string
+ radioListItems: object[] {
+ title: string
+ text: string
+ id: string
+ value: string
+ isChecked: bool
+ isDisabled: bool
+ }
+ selectOptions: object[] {
+ label: string
+ value: string
+ isSelected: bool
+ isDisabled: bool
+ }
+showFormLabels: bool
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
+
diff --git a/templates/blocks/json-features-with-icons-in-columns.liquid b/templates/blocks/json-features-with-icons-in-columns.liquid
new file mode 100644
index 00000000..a516461a
--- /dev/null
+++ b/templates/blocks/json-features-with-icons-in-columns.liquid
@@ -0,0 +1,70 @@
+
+
+
+ {% include 'blocks/helpers/block-title' %}
+
+
+
+ {% if block.content %}
+ {{ block.content }}
+ {% endif %}
+
+
+
+ {% if block.columns.size > 0 %}
+
+ {% for column in block.columns %}
+
+
+ {% if block.iconsType == 'numbers' or block.iconsType == 'letters' %}
+
+ {% endif %}
+
+ {% if block.iconsType == 'customIcon' and column.image.url != '' %}
+
+ {% endif %}
+ {% if block.iconsType == 'images' and column.image.url != '' %}
+
+ {% endif %}
+ {% if column.title != '' %}
+ {{ column.title }}
+ {% endif %}
+ {% if column.button != '' and column.button.urlText != '' %}
+
+
+ {% endif %}
+
+
+ {% endfor %}
+
+ {% endif %}
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleAlignment: [ center, left ]
+titleStyle: [ null, bg-light ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+columnsCount: string (12, 6, 4, 3)
+textAreaWidth: string (col-lg, col-lg-10, col-lg-8, col-lg-6)
+iconsType: string (none, numbers, letters, images, customIcon)
+iconsAreFilled: bool
+title: string
+content: string (wysiwyg)
+columns: object[] {
+ title: string
+ image: object (url to image, alt text)
+ button: object (url, text, style [ bootstrap buttons styles ], openInNewTab)
+}
+
+{% endcomment %}
diff --git a/templates/blocks/json-features-with-icons.liquid b/templates/blocks/json-features-with-icons.liquid
new file mode 100644
index 00000000..e44974ea
--- /dev/null
+++ b/templates/blocks/json-features-with-icons.liquid
@@ -0,0 +1,83 @@
+{% include 'blocks/helpers/color-style' %}
+
+
+
+
+
+
+
+ {% include 'blocks/helpers/block-title' %}
+
+
+ {% if block.content %}
+
+
+ {{ block.content }}
+
+
+ {% endif %}
+
+ {% if block.columns.size > 0 %}
+
+
+ {% for column in block.columns %}
+
+
+ {% if block.iconsType == 'numbers' or block.iconsType == 'letters' %}
+
+ {% endif %}
+
+ {% if block.iconsType == 'customIcon' and column.image.url != '' %}
+
+ {% endif %}
+ {% if block.iconsType == 'images' and column.image.url != '' %}
+
+ {% endif %}
+ {% if column.title != '' %}
+ {{ column.title }}
+ {% endif %}
+ {% if column.content != '' %}
+ {{ column.content }}
+ {% endif %}
+ {% if column.button != '' and column.button.urlText != '' %}
+
+
+ {% endif %}
+
+
+ {% endfor %}
+
+
+ {% endif %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleAlignment: [ center, left ]
+titleStyle: [ null, bg-light ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+columnsCount: string (12, 6, 4, 3)
+textAreaWidth: string (col-lg, col-lg-10, col-lg-8, col-lg-6)
+iconsType: string (none, numbers, letters, images, customIcon)
+iconsAreFilled: bool
+title: string
+content: string (wysiwyg)
+columns: object[] {
+ title: string
+ image: object (url to image, alt text)
+ button: object (url, text, style [ bootstrap buttons styles ], openInNewTab)
+}
+
+{% endcomment %}
diff --git a/templates/blocks/json-headline-with-form.liquid b/templates/blocks/json-headline-with-form.liquid
new file mode 100644
index 00000000..40b4854f
--- /dev/null
+++ b/templates/blocks/json-headline-with-form.liquid
@@ -0,0 +1,62 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+
+ {% include 'blocks/helpers/cover-text' %}
+
+ {% if block.formFields and block.formFields.size > 0 %}
+
+ {% include 'blocks/form/form' %}
+
+ {% endif %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+formId: string
+formName: string
+formSubmitRedirectUrl: string
+formSubmitButtonStyle: string (bootstrap buttons styles)
+formFields: object[]{
+ fieldType: string (button, checkbox, email, hidden, phone, radio, select, text, textarea)
+ fieldName: string
+ fieldId: string
+ labelText: string
+ placeholder: string
+ fieldValue: string
+ required: bool
+ validationMessage: string
+ radioListItems: object[] {
+ title: string
+ text: string
+ id: string
+ value: string
+ isChecked: bool
+ isDisabled: bool
+ }
+ selectOptions: object[] {
+ label: string
+ value: string
+ isSelected: bool
+ isDisabled: bool
+ }
+showFormLabels: bool
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
+
diff --git a/templates/blocks/json-headline.liquid b/templates/blocks/json-headline.liquid
new file mode 100644
index 00000000..681fff46
--- /dev/null
+++ b/templates/blocks/json-headline.liquid
@@ -0,0 +1,57 @@
+{% include 'blocks/helpers/cover-style' %}
+
+
+
+
+
+
+ {% include 'blocks/helpers/cover-text' %}
+
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+noTop: bool
+noBottom: bool
+
+formId: string
+formName: string
+formSubmitRedirectUrl: string
+formSubmitButtonStyle: string (bootstrap buttons styles)
+formFields: object[]{
+ fieldType: string (button, checkbox, email, hidden, phone, radio, select, text, textarea)
+ fieldName: string
+ fieldId: string
+ labelText: string
+ placeholder: string
+ fieldValue: string
+ required: bool
+ validationMessage: string
+ radioListItems: object[] {
+ title: string
+ text: string
+ id: string
+ value: string
+ isChecked: bool
+ isDisabled: bool
+ }
+ selectOptions: object[] {
+ label: string
+ value: string
+ isSelected: bool
+ isDisabled: bool
+ }
+showFormLabels: bool
+firstButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+secondButton: object (url, text, style [ bootstrap buttons styles ], openInNewTab [True, False]),
+
+{% endcomment %}
+
diff --git a/templates/blocks/json-logotypes.liquid b/templates/blocks/json-logotypes.liquid
new file mode 100644
index 00000000..e181bee2
--- /dev/null
+++ b/templates/blocks/json-logotypes.liquid
@@ -0,0 +1,58 @@
+{% include 'blocks/helpers/color-style' %}
+
+
+
+
+
+
+
+ {% include 'blocks/helpers/block-title' %}
+
+
+ {% if block.subtitle %}
+
+
+ {{ block.subtitle }}
+
+
+ {% endif %}
+
+ {% if block.logotypes.size > 0 %}
+
+
+ {% for logotype in block.logotypes %}
+
+ {% if logotype.url != '' %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+
+ {% endif %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleStyle: [ null, bootstrap styles ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+textAreaWidth: string (col-lg, col-lg-10, col-lg-8, col-lg-6)
+title: string
+content: string (wysiwyg)
+logotypes: object (image, url, openInNewTab)
+
+{% endcomment %}
diff --git a/templates/blocks/json-product-tiles.liquid b/templates/blocks/json-product-tiles.liquid
new file mode 100644
index 00000000..aab12fb4
--- /dev/null
+++ b/templates/blocks/json-product-tiles.liquid
@@ -0,0 +1,90 @@
+{% assign display_block = true %}
+{% assign request = request_url | format:null %}
+
+{% if block.utmString and block.utmString != '' %}
+ {% assign display_block = request contains block.utmString %}
+ {% if block.utmNegotiate == 'True' %}
+ {% comment %} i couldn't find a negotiate operator {% endcomment %}
+ {% if display_block %}
+ {% assign display_block = false %}
+ {% else %}
+ {% assign display_block = true %}
+ {% endif %}
+ {% endif %}
+{% endif %}
+
+{% if display_block == true and current_user and current_user.contact and block.userGroup and block.userGroup.value %}
+
+{% assign display_block = current_user.contact.user_groups contains block.userGroup.value %}
+
+{% endif %}
+
+{% if display_block or is_preview_mode %}
+{% include 'blocks/helpers/color-style' %}
+
+
+
+ {% include 'blocks/helpers/block-title' givenTitle: block.categoryId.name %}
+
+ {% if block.subtitle %}
+ {{ block.subtitle }}
+ {% endif %}
+
+ {% if block.categoryId and block.categoryId.id %}
+
+
+ {% assign category = collections | where: 'Id', '==', block.categoryId.id | first %}
+
+ {% assign skus = block.excludes | split: '\n' %}
+
+ {% if category.products.empty? == false %}
+
+ {% comment %}dump way{% endcomment %}
+ {% assign p = category.products %}
+ {% for sku in skus %}
+ {% assign p = p | where: 'Sku', '!=', sku %}
+ {% endfor %}
+
+ {% assign count = category.products.size %}
+ {% if block.count %}
+ {% assign maxCount = block.count.value %}
+ {% if maxCount > 0 %}
+ {% assign count = block.count %}
+ {% endif %}
+ {% endif %}
+
+ {% for product in p limit:count %}
+
+ {% assign grid_item_width = 'col-xl-3 col-lg-4 col-md-6 col-sm-6 product-card' %}
+ {% include 'product-grid-item' %}
+
+ {% endfor %}
+
+ {% else %}
+ {{ 'search.no_results' | t }}
+ {% endif %}
+
+
+ {% endif %}
+
+
+
+{% endif %}
+
+{% include 'blocks/helpers/catalog-script' %}
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleStyle: [ null, bootstrap styles ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+
+title: string
+categoryId: string
+
+{% endcomment %}
diff --git a/templates/blocks/json-text.liquid b/templates/blocks/json-text.liquid
index dbe02407..78b0c5a7 100644
--- a/templates/blocks/json-text.liquid
+++ b/templates/blocks/json-text.liquid
@@ -1,7 +1,21 @@
-
-
+{% include 'blocks/helpers/color-style' %}
+
+
+
- {% include 'blocks/helpers/block-title' %}
+
+
+ {% include 'blocks/helpers/block-title' %}
+
+
+
+ {% if block.content %}
+
+
+ {{ block.content }}
+
+
+ {% endif %}
@@ -19,5 +33,6 @@ noTop: bool
noBottom: bool
title: string
+content: string (wysiwyg)
{% endcomment %}
diff --git a/templates/blocks/json-two-columns-text.liquid b/templates/blocks/json-two-columns-text.liquid
new file mode 100644
index 00000000..88bce4bd
--- /dev/null
+++ b/templates/blocks/json-two-columns-text.liquid
@@ -0,0 +1,49 @@
+
+
+
+
+
+ {% include 'blocks/helpers/block-title' %}
+
+
+
+ {% if block.contentBefore != '' %}
+
+ {{ block.contentBefore }}
+
+ {% endif %}
+ {% for item in block.items %}
+
+ {{ item.text }}
+
+ {% endfor %}
+
+
+
+
+
+{% comment %}
+
+__id: string (unique block id)
+
+name: string
+headerType: [ h1, h2, h3, like-h1, like-h2, like-h3 ]
+titleAlignment: [ center, left ]
+titleStyle: [ null, bg-light ]
+style: [ light, dark ]
+noTop: bool
+noBottom: bool
+noPad: bool
+
+title: string
+contentBefore: string (wysiwyg)
+items: string[] (wysiwyg)
+
+{% endcomment %}
diff --git a/templates/json-page.liquid b/templates/json-page.liquid
index 3318c1b0..5561ea57 100644
--- a/templates/json-page.liquid
+++ b/templates/json-page.liquid
@@ -1,7 +1,7 @@
{% if page.layout != blank %}
{% layout page.layout %}
{% endif %}
-
-
+{% layout 'bootstrap_migration' %}
+
{% include 'json-blocks' %}
diff --git a/templates/json-preview.liquid b/templates/json-preview.liquid
index cc18a2f2..28b2598e 100644
--- a/templates/json-preview.liquid
+++ b/templates/json-preview.liquid
@@ -1,5 +1,4 @@
-{% layout 'theme' %}
-
+{% layout 'bootstrap_migration' %}
-
+