23 Commits

Author SHA1 Message Date
d5d30616f0 Merge branch 'feature_old/standard-styling' into feature_old/isabelle-edits 2025-12-31 17:23:29 +01:00
ea6ebb4df1 feat(standard-styling):add svg_icon support for favorite_products 2025-12-31 14:03:31 +01:00
1490fc6a1e feat(isabelle-edits): Adds spacing, heading, and border utilities
Adds utility classes for spacing, headings, and borders to provide more flexible styling options.

This commit introduces:
- Spacing utilities with responsive adjustments for different screen sizes.
- A heading selector for simplified styling of heading elements.
- A border utility for applying a consistent border style.
2025-12-24 13:51:58 +01:00
efa88a508a feat(standard-styling): Add button color map 2025-12-24 11:55:09 +01:00
252b20bdc6 Add btn after mixin 2025-12-24 11:53:36 +01:00
c7cb507121 Merge branch 'feature/standard-styling' into feature/isabelle-edits 2025-12-24 11:53:03 +01:00
51bad8030e feat(standard-styling): Add button color map 2025-12-24 11:52:12 +01:00
1ccb71c8e0 feat(isabelle-edits): Modify index page layout
This new page structure for the home page makes it so you have more control over the index.tpl file. By default, if the index.tpl file is full width (meaning no side columns) the container becomes fluid and full-width.  For each section, you need to define a container, rows and columns.  This way you can easily have full-width background images for only certain sections.
2025-12-24 10:17:39 +01:00
27dfb4dc70 feat(standard-styling) Enhance search and styling
Improves search bar with SVG icon support for better visual consistency.

Adds utility SCSS file for managing global styles like heading selectors.

Introduces a checkmark SVG asset and reorganizes custom SCSS files following the 7-in-1 structure for better maintainability.

Comments out optional USP bar code in header.tpl to allow easy activation.
2025-12-24 09:37:59 +01:00
00b79f12e2 feat(isabelle-edits): Clarify theme structure and add SVG icon support
Improves theme organization by adopting a 7-in-1 SCSS structure.

Introduces support for SVG icons within templates, enhancing visual flexibility.

Adds a checkmark SVG asset.
2025-12-24 09:33:55 +01:00
4ca5500e5f Merge branch 'feature/standard-styling' into feature/isabelle-edits 2025-12-23 09:35:48 +01:00
7ba1dfd4c8 fix(standard-styling): Remove duplicate displayNavFullWidth 2025-12-23 09:35:14 +01:00
d5d1cd7874 Background and color utility classes & map 2025-12-22 12:02:19 +01:00
bae76ed030 Merge branch 'feature/standard-styling' into feature/isabelle-edits 2025-12-22 11:36:35 +01:00
80a44174be feat(standard-styling): Replace font-size-base to 14px
This is standard
2025-12-22 11:36:29 +01:00
871e42f4ba Add gap and font-size function classes 2025-12-22 11:35:05 +01:00
cf37d8a257 feat(isabelle-edits): Made grid & media queries more like bootstrap 5
This branch was made to save edits that would make my life easier but are optional. These edits stray further form the original theme than the edits in the standard styles feature branch do, so if you are not used to them you night not like them. That is why I separated the branch.
2025-12-22 10:49:47 +01:00
f6df65fbb3 Adds standard styling for header, cart, and search
Applies new styling to the header, shopping cart, and search bar components.
Creates new scss files for header and swiper layouts.
Replaces x.svg.

These changes create a more consistent and modern user interface.
2025-12-18 12:02:00 +01:00
97b88c111c fix(standard-styling): Fix structure of custom css 2025-12-10 10:34:45 +01:00
879ed8b9ee feat(standard-styling): Fix icons; add standard css 2025-12-10 09:51:39 +01:00
9609cfe305 feat(standard-styling): Add standard svg icons
Use chevron svg icons in bootstrap touchspin on product page AND on main menu if it has children
2025-12-04 15:21:42 +01:00
00bae73b17 feat(standard-styling): Change header tpl, standard vars & icons, 2025-11-21 14:41:10 +01:00
79512bd81a FIX(standard-styling): Header 2025-11-20 14:54:59 +01:00
42 changed files with 859 additions and 311 deletions

View File

@ -1,6 +1,6 @@
// Color system // Color system
$white: #fff; $white: #fff;
$gray-100: #f8f9fa; $gray-100: #f8f9fa;
$gray-200: #e9ecef; $gray-200: #e9ecef;
$gray-300: #dee2e6; $gray-300: #dee2e6;
@ -10,24 +10,33 @@ $gray-600: #6c757d;
$gray-700: #495057; $gray-700: #495057;
$gray-800: #343a40; $gray-800: #343a40;
$gray-900: #212529; $gray-900: #212529;
$black: #000; $black: #000;
$blue: #007bff; $blue: #007bff;
$indigo: #6610f2; $indigo: #6610f2;
$purple: #6f42c1; $purple: #6f42c1;
$pink: #e83e8c; $pink: #e83e8c;
$red: #dc3545; $red: #dc3545;
$orange: #fd7e14; $orange: #fd7e14;
$yellow: #ffc107; $yellow: #ffc107;
$green: #28a745; $green: #28a745;
$teal: #20c997; $teal: #20c997;
$cyan: #17a2b8; $cyan: #17a2b8;
$primary: $blue; $success: $green;
$secondary: $gray-600; $info: $cyan;
$success: $green; $warning: #ff9a52;
$info: $cyan; $danger: $red;
$warning: #ff9a52; $light: $gray-100;
$danger: $red; $dark: $gray-800;
$light: $gray-100;
$dark: $gray-800; $primary: $blue;
$secondary: $gray-600;
// Map for utility classes
$theme-colors: (
"primary": $primary,
"secondary": $secondary,
//"tertiary": $tertiary,
//"quaternary": $quaternary,,
);

View File

@ -1,3 +1,21 @@
$grid-columns: 12; // Made this more like the breakpoints used in Bootstrap 5
$grid-gutter-width: rem-calc(20px); $grid-breakpoints: (
$grid-row-columns: 6; xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px,
);
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px,
xxl: 1320px,
);
$grid-columns: 12;
$grid-gutter-width: rem-calc(20px);
$grid-row-columns: 6;

View File

@ -1,39 +1,42 @@
$font-family-sans-serif: "Roboto", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; $font-family-sans-serif: "Roboto", -apple-system, blinkmacsystemfont, "Segoe UI",
$font-family-base: $font-family-sans-serif; roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif,
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
$font-family-base: $font-family-sans-serif;
$headings-font-family: $font-family-sans-serif;
$font-size-base: rem-calc(16px); $font-size-base: rem-calc(14px);
$font-size-lg: $font-size-base * 1.125; $font-size-lg: $font-size-base * 1.125;
$font-size-sm: $font-size-base * .875; $font-size-sm: $font-size-base * 0.875;
$font-size-xs: $font-size-base * .6875; $font-size-xs: $font-size-base * 0.6875;
$font-weight-lighter: 200; $font-weight-lighter: 200;
$font-weight-light: 300; $font-weight-light: 300;
$font-weight-normal: 400; $font-weight-normal: 400;
$font-weight-bold: 700; $font-weight-bold: 700;
$font-weight-bolder: 800; $font-weight-bolder: 800;
$h1-font-size: $font-size-base * 2; $h1-font-size: $font-size-base * 2;
$h2-font-size: $font-size-base * 1.75; $h2-font-size: $font-size-base * 1.75;
$h3-font-size: $font-size-base * 1.5; $h3-font-size: $font-size-base * 1.5;
$h4-font-size: $font-size-base * 1.25; $h4-font-size: $font-size-base * 1.25;
$h5-font-size: $font-size-base * 1.125; $h5-font-size: $font-size-base * 1.125;
$h6-font-size: $font-size-base; $h6-font-size: $font-size-base;
$display1-size: $font-size-base * 2.5; $display1-size: $font-size-base * 2.5;
$display2-size: $font-size-base * 2.25; $display2-size: $font-size-base * 2.25;
$display3-size: $font-size-base * 2; $display3-size: $font-size-base * 2;
$display4-size: $font-size-base * 1.75; $display4-size: $font-size-base * 1.75;
$display1-weight: 400; $display1-weight: 400;
$display2-weight: 400; $display2-weight: 400;
$display3-weight: 400; $display3-weight: 400;
$display4-weight: 400; $display4-weight: 400;
$text-muted: $gray-600; $text-muted: $gray-600;
$paragraph-margin-bottom: rem-calc(20px); $paragraph-margin-bottom: rem-calc(20px);
$headings-margin-bottom: rem-calc(20px); $headings-margin-bottom: rem-calc(20px);
$headings-font-weight: 700; $headings-font-weight: 700;
$headings-line-height: 1.2; $headings-line-height: 1.2;
$headings-color: $gray-900; $headings-color: $gray-900;

View File

@ -1,19 +0,0 @@
// NOTE: All bootstrap overrides have been configured under the abstracts/variables/bootstrap folder.
//Abstracts: Things used throughout the site such as utility classes and generic overrides.
//@import "custom/abstracts/base";
//@import "custom/abstracts/utilities";
// Components: parts of the theme itself that are not associated with a module.
//@import "custom/components/";
// Modules: Styling for specific modules.
//@import "custom/modules/";
//Layouts: Parts of a page, such as the header, footer, etc.
//@import "custom/layout/header";
//@import "custom/layout/footer";
// Pages
//@import "custom/pages/category";
//@import "custom/pages/product";

View File

@ -1,3 +1,3 @@
@import "abstracts/index"; @import "abstracts/index";
@import "theme/index"; @import "theme/index";
@import "custom"; @import "theme/custom/custom";

View File

@ -1,83 +1,80 @@
@use "sass:map"; @use "sass:map";
.customer-links { .customer-links {
margin: 0 0 map.get($spacers, 3); margin: 0 0 map.get($spacers, 3);
@include media-breakpoint-up(lg) {
margin: 0;
}
.link-item {
display: flex;
align-items: center;
}
&__list {
@include media-breakpoint-down(md) {
display: flex;
flex-wrap: nowrap;
margin: rem-calc(20px) 0 0;
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
&::-webkit-scrollbar {
display: none;
}
}
}
a {
display: block;
flex: 0 0;
max-width: inherit;
padding: map.get($spacers, 2);
font-weight: 700;
color: $gray-800;
white-space: nowrap;
border-radius: $border-radius;
@include font-size($font-size-base);
@include media-breakpoint-up(lg) { @include media-breakpoint-up(lg) {
white-space: normal; margin: 0;
} }
@include hover-focus() { .link-item {
color: $primary; display: flex;
text-decoration: none; align-items: center;
} }
i { &__list {
margin-right: map.get($spacers, 1); @include media-breakpoint-down(md) {
color: $primary; display: flex;
@include font-size(26px); flex-wrap: nowrap;
@include media-breakpoint-up(md) {
margin-right: map.get($spacers, 2); margin: rem-calc(20px) 0 0;
} overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
&::-webkit-scrollbar {
display: none;
}
}
} }
&.active { a {
color: #fff;
background: $primary;
&::after {
display: block; display: block;
} flex: 0 0;
max-width: inherit;
padding: map.get($spacers, 2);
font-weight: 700;
white-space: nowrap;
border-radius: $border-radius;
@include font-size($font-size-base);
i { @include media-breakpoint-up(lg) {
color: inherit; white-space: normal;
} }
@include hover-focus() {
text-decoration: none;
}
i {
margin-right: map.get($spacers, 1);
@include font-size(26px);
@include media-breakpoint-up(md) {
margin-right: map.get($spacers, 2);
}
}
&.active {
color: #fff;
background: $primary;
&::after {
display: block;
}
i {
color: inherit;
}
}
} }
}
&__logout { &__logout {
text-align: center; text-align: center;
&::after, &::after,
&::before { &::before {
display: none; display: none;
}
} }
}
} }

View File

@ -0,0 +1,35 @@
/*
This is the main custom SCSS file for the Falcon theme.
I am loosely following the 7 in 1 structure for better organization of the styles. Learn more here:
https://medium.com/@diyorbekjuraev77/be-a-master-at-creating-the-7-1-sass-pattern-776fdfb5a3b1
NOTE: All bootstrap overrides have been configured under themes/falcon/_dev/css/abstracts/variables/bootstrap
Look up all available Bootstrap variables here: https://rstudio.github.io/bslib/articles/bs5-variables/index.html
*/
//Abstracts: Things used throughout the site such as utility classes and generic overrides.
@import "abstracts/functions";
@import "abstracts/mixins";
@import "abstracts/utilities";
//@import "abstracts/base";
// Components: parts of the theme itself that are not associated with a module.
//@import "components/buttons";
@import "components/forms";
// Modules: Styling for specific modules.
//@import "modules/";
//Layouts: Parts of a page, such as the header, footer, etc.
//@import "layout/footer";
@import "layout/header";
@import "layout/left-column";
@import "layout/swiper";
// Pages
//@import "pages/checkout";
//@import "pages/home";
//@import "pages/listing";
//@import "pages/product";

View File

@ -0,0 +1,17 @@
@use "sass:math";
// Font size utility classes generator
// Generates utility classes like .fs-14, .fs-16, etc.
@for $i from 8 through 72 {
.fs-#{$i} {
font-size: rem-calc($i * 1px) !important;
}
}
// gap size utility classes generator
// Generates utility classes like .gap-4
@for $i from 1 through 35 {
.gap-#{$i} {
gap: rem-calc($i * 1px) !important;
}
}

View File

@ -0,0 +1,73 @@
// Bootstrap 5-style responsive mixins (more intuitive than Bootstrap 4)
// Learn the difference here https://getbootstrap.com/docs/5.0/migration/#sass
@mixin bs5-media-breakpoint-up($name) {
$min: map-get($grid-breakpoints, $name);
@if $min and $min > 0 {
@media (min-width: $min) {
@content;
}
} @else {
@content;
}
}
@mixin bs5-media-breakpoint-down($name) {
$max: map-get($grid-breakpoints, $name);
@if $max {
@media (max-width: calc(#{$max} - 0.02px)) {
@content;
}
} @else {
@content;
}
}
@mixin bs5-media-breakpoint-between($lower, $upper) {
$min: map-get($grid-breakpoints, $lower);
$max: map-get($grid-breakpoints, $upper);
@if $min and $max {
@media (min-width: $min) and (max-width: calc(#{$max} - 0.02px)) {
@content;
}
}
}
@mixin bs5-media-breakpoint-only($name) {
$breakpoint-names: map-keys($grid-breakpoints);
$index: index($breakpoint-names, $name);
$next-name: nth($breakpoint-names, $index + 1);
@include bs5-media-breakpoint-between($name, $next-name) {
@content;
}
}
// Mixin to add an after pseudo-element with a mask image to customize button colors
/* Example:
.btn{
&::after {
@include btn-after("../img/arrow-right.svg");
}
}
*/
@mixin btn-after($url, $color: currentColor) {
content: "";
display: inline-block;
width: 1em;
height: 1em;
margin-left: 0.5em;
vertical-align: middle;
background-color: currentColor;
mask-image: url(#{$url});
mask-size: contain;
mask-repeat: no-repeat;
mask-position: center;
-webkit-mask-image: url(#{$url});
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
}

View File

@ -0,0 +1,30 @@
// Spacers
$section-spacer: rem-calc(50px);
$section-spacer-small: rem-calc(25px);
.section-spacer {
margin-top: $section-spacer;
@include bs5-media-breakpoint-up(lg) {
margin-top: calc($section-spacer * 1.5);
}
&--small {
margin-top: $section-spacer-small;
@include bs5-media-breakpoint-up(lg) {
margin-top: calc($section-spacer-small * 1.5);
}
}
}
// Header selector for interpolation
// Example usage: #{$headings} { ... }
$headings: "h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6";
// Background
.bg__block {
// background: url(../img/bg.svg) repeat center center, $tertiary;
}
// Border
.bordered {
border: 1px solid $border-color !important;
}

View File

@ -0,0 +1,26 @@
// To customize text colors per button, use this map
$btn-color: (
"primary": $white,
"secondary": $white,
"light": $primary,
"dark": $white,
);
// Generate button color overrides from the map
@each $name, $color in $btn-color {
.btn-#{$name},
.btn-lg-#{$name},
.btn-sm-#{$name} {
color: $color !important;
}
.btn-outline-#{$name},
.btn-lg-outline-#{$name},
.btn-sm-outline-#{$name} {
color: $color;
&:hover,
&:focus,
&:active {
color: $color !important;
}
}
}

View File

@ -0,0 +1,12 @@
.field-password-policy .input-group.js-parent-focus {
> * {
max-height: rem-calc(39px);
}
.form-control {
height: unset;
}
.input-group-append .btn {
border-top-right-radius: $border-radius !important;
border-bottom-right-radius: $border-radius !important;
}
}

View File

@ -0,0 +1,13 @@
.header-top__row {
flex-wrap: wrap;
.header-top__block--search {
@include media-breakpoint-down(sm) {
order: 1;
}
.js-search-form {
max-width: unset;
width: 100%;
margin: 0;
}
}
}

View File

@ -0,0 +1,10 @@
#left-column {
.list-group-item,
.list-group-item-action-dropdown-link,
label {
font-family: $font-family-base;
font-size: $font-size-base;
color: $secondary;
font-weight: 400;
}
}

View File

@ -0,0 +1,3 @@
.swiper-slide {
height: auto;
}

6
falcon/_dev/img/bag.svg Normal file
View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.5" height="20.5" viewBox="0 0 18.5 20.5">
<g id="Icon_feather-shopping-bag" data-name="Icon feather-shopping-bag" transform="translate(-3.75 -2.25)">
<path id="Path_13" data-name="Path 13" d="M7.333,3,4.5,6.8V20.1A1.894,1.894,0,0,0,6.389,22H19.611A1.894,1.894,0,0,0,21.5,20.1V6.8L18.667,3ZM4.5,6.8h17" transform="translate(0 0)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Path_14" data-name="Path 14" d="M19.4,15A3.7,3.7,0,1,1,12,15" transform="translate(-2.7 -4.35)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 713 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check2" viewBox="0 0 16 16">
<path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0"/>
</svg>

After

Width:  |  Height:  |  Size: 271 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="11" height="7" viewBox="0 0 10.828 6.414">
<path d="M1560.845,813.75l4,4-4,4" transform="translate(823.164 -1559.431) rotate(90)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View File

@ -0,0 +1,3 @@
<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 9L1 5L5 1" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 212 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="7" height="11" viewBox="0 0 6.414 10.828">
<path d="M1560.845,813.75l4,4-4,4" transform="translate(-1559.431 -812.336)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path>
</svg>

After

Width:  |  Height:  |  Size: 281 B

View File

@ -0,0 +1,3 @@
<svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 5L5 1L9 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 212 B

View File

@ -0,0 +1,3 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 13.2222C0 13.0159 0.0766233 12.8181 0.213013 12.6722C0.349403 12.5264 0.534388 12.4444 0.727273 12.4444H15.2727C15.4656 12.4444 15.6506 12.5264 15.787 12.6722C15.9234 12.8181 16 13.0159 16 13.2222C16 13.4285 15.9234 13.6263 15.787 13.7722C15.6506 13.9181 15.4656 14 15.2727 14H0.727273C0.534388 14 0.349403 13.9181 0.213013 13.7722C0.0766233 13.6263 0 13.4285 0 13.2222ZM0 7C0 6.79372 0.0766233 6.59589 0.213013 6.45003C0.349403 6.30417 0.534388 6.22222 0.727273 6.22222H15.2727C15.4656 6.22222 15.6506 6.30417 15.787 6.45003C15.9234 6.59589 16 6.79372 16 7C16 7.20628 15.9234 7.40411 15.787 7.54997C15.6506 7.69583 15.4656 7.77778 15.2727 7.77778H0.727273C0.534388 7.77778 0.349403 7.69583 0.213013 7.54997C0.0766233 7.40411 0 7.20628 0 7ZM0 0.777778C0 0.571498 0.0766233 0.373668 0.213013 0.227806C0.349403 0.0819444 0.534388 0 0.727273 0H15.2727C15.4656 0 15.6506 0.0819444 15.787 0.227806C15.9234 0.373668 16 0.571498 16 0.777778C16 0.984057 15.9234 1.18189 15.787 1.32775C15.6506 1.47361 15.4656 1.55556 15.2727 1.55556H0.727273C0.534388 1.55556 0.349403 1.47361 0.213013 1.32775C0.0766233 1.18189 0 0.984057 0 0.777778Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="23.5" height="20.5" viewBox="0 0 23.5 20.5">
<path id="Icon_feather-heart" data-name="Icon feather-heart" d="M22.627,6.177a5.829,5.829,0,0,0-8.188,0l-1.116,1.1-1.116-1.1a5.831,5.831,0,0,0-8.188,0,5.693,5.693,0,0,0,0,8.108l1.116,1.1L13.323,23.5l8.188-8.108,1.116-1.1a5.692,5.692,0,0,0,0-8.108Z" transform="translate(-1.573 -3.747)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 489 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.506" height="20.5" viewBox="0 0 18.506 20.5">
<g id="Icon_akar-person" data-name="Icon akar-person" transform="translate(-4.145 -2.25)">
<path id="Path_18" data-name="Path 18" d="M20.4,7.75a4.854,4.854,0,0,1-4.952,4.75A4.854,4.854,0,0,1,10.5,7.75,4.854,4.854,0,0,1,15.452,3,4.854,4.854,0,0,1,20.4,7.75Z" transform="translate(-2.054)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Path_19" data-name="Path 19" d="M18.264,21h.343a2.9,2.9,0,0,1,2.9,2.5l.381,2.968a1.87,1.87,0,0,1-.472,1.493,1.967,1.967,0,0,1-1.459.642H6.845a1.967,1.967,0,0,1-1.46-.643,1.87,1.87,0,0,1-.472-1.493l.38-2.968a2.9,2.9,0,0,1,2.9-2.5h.342" transform="translate(0 -6.6)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 887 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="17.867" height="17.867" viewBox="0 0 17.867 17.867">
<path id="Icon_akar-search" data-name="Icon akar-search" d="M18.453,18.453,14.8,14.8m2.022-4.885A6.913,6.913,0,1,1,9.913,3a6.913,6.913,0,0,1,6.913,6.913Z" transform="translate(-2 -2)" fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 369 B

20
falcon/_dev/img/x.svg Normal file
View File

@ -0,0 +1,20 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_7_2)">
<g clip-path="url(#clip1_7_2)">
<mask id="mask0_7_2" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="16" height="16">
<path d="M16 0H0V16H16V0Z" fill="white"/>
</mask>
<g mask="url(#mask0_7_2)">
<path d="M2.34315 2.34315C2.53069 2.15561 2.78504 2.05025 3.05026 2.05025C3.31547 2.05025 3.56983 2.15561 3.75736 2.34315L8 6.58579L12.2426 2.34315C12.4302 2.15562 12.6846 2.05023 12.9497 2.05026C13.2149 2.05028 13.4693 2.15561 13.6569 2.34315C13.8444 2.53068 13.9497 2.78507 13.9497 3.05026C13.9498 3.31545 13.8444 3.56983 13.6569 3.75736L9.41422 8L13.6569 12.2426C13.8444 12.4302 13.9498 12.6846 13.9497 12.9497C13.9497 13.2149 13.8444 13.4693 13.6569 13.6569C13.4693 13.8444 13.2149 13.9497 12.9497 13.9497C12.6846 13.9498 12.4302 13.8444 12.2426 13.6569L8 9.41421L3.75736 13.6569C3.56983 13.8444 3.31547 13.9497 3.05026 13.9498C2.78504 13.9497 2.53069 13.8444 2.34315 13.6569C2.15561 13.4693 2.05026 13.215 2.05025 12.9497C2.05026 12.6845 2.15561 12.4302 2.34315 12.2426L6.58579 8L2.34315 3.75736C2.15561 3.56982 2.05026 3.31547 2.05025 3.05025C2.05026 2.78504 2.15561 2.53068 2.34315 2.34315Z" fill="currentColor"/>
</g>
</g>
</g>
<defs>
<clipPath id="clip0_7_2">
<rect width="16" height="16" fill="white"/>
</clipPath>
<clipPath id="clip1_7_2">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,90 +1,108 @@
import $ from 'jquery'; import $ from "jquery";
import prestashop from 'prestashop'; import prestashop from "prestashop";
$(() => { $(() => {
const createInputFile = () => { const createInputFile = () => {
$('.js-file-input').on('change', (event) => { $(".js-file-input").on("change", (event) => {
const target = $(event.currentTarget)[0]; const target = $(event.currentTarget)[0];
const file = (target) ? target.files[0] : null; const file = target ? target.files[0] : null;
if (target && file) { if (target && file) {
$(target).prev().text(file.name); $(target).prev().text(file.name);
} }
}); });
}; };
const createProductSpin = () => { const createProductSpin = () => {
const $quantityInput = $('#quantity_wanted'); const $quantityInput = $("#quantity_wanted");
$quantityInput.TouchSpin({ $quantityInput.TouchSpin({
verticalupclass: 'material-icons touchspin-up', min: parseInt($quantityInput.attr("min"), 10),
verticaldownclass: 'material-icons touchspin-down', max: 1000000,
buttondown_class: 'btn btn-touchspin js-touchspin', verticalbuttons: true,
buttonup_class: 'btn btn-touchspin js-touchspin', verticalupclass: "btn btn-touchspin js-touchspin",
min: parseInt($quantityInput.attr('min'), 10), verticaldownclass: "btn btn-touchspin js-touchspin",
max: 1000000, verticalup:
}); '<img src="/themes/falcon/_dev/img/chevron_up.svg" alt="Up" />',
verticaldown:
'<img src="/themes/falcon/_dev/img/chevron_down.svg" alt="Down" />',
});
$quantityInput.on('focusout', () => { $quantityInput.on("focusout", () => {
if ($quantityInput.val() === '' || $quantityInput.val() < $quantityInput.attr('min')) { if (
$quantityInput.val($quantityInput.attr('min')); $quantityInput.val() === "" ||
$quantityInput.trigger('change'); $quantityInput.val() < $quantityInput.attr("min")
} ) {
}); $quantityInput.val($quantityInput.attr("min"));
$quantityInput.trigger("change");
}
});
$('body').on('change keyup', '#quantity_wanted', (event) => { $("body").on("change keyup", "#quantity_wanted", (event) => {
$(event.currentTarget).trigger('touchspin.stopspin'); $(event.currentTarget).trigger("touchspin.stopspin");
prestashop.emit('updateProduct', { prestashop.emit("updateProduct", {
eventType: 'updatedProductQuantity', eventType: "updatedProductQuantity",
event, event,
}); });
}); });
}; };
createProductSpin(); createProductSpin();
createInputFile();
let updateEvenType = false;
prestashop.on('updateProduct', ({ eventType }) => {
updateEvenType = eventType;
});
prestashop.on('updateCart', (event) => {
if (
prestashop.page.page_name === 'product'
&& parseInt(event.reason.idProduct, 10) === parseInt($('#add-to-cart-or-refresh').find('[name="id_product"]').val(), 10)) {
prestashop.emit('updateProduct', {
event,
resp: {},
reason: {
productUrl: prestashop.urls.pages.product || '',
},
});
}
});
prestashop.on('updatedProduct', (event) => {
createInputFile(); createInputFile();
let updateEvenType = false;
if (event && event.product_minimal_quantity) { prestashop.on("updateProduct", ({ eventType }) => {
const minimalProductQuantity = parseInt(event.product_minimal_quantity, 10); updateEvenType = eventType;
const quantityInputSelector = '#quantity_wanted'; });
const quantityInput = $(quantityInputSelector);
// @see http://www.virtuosoft.eu/code/bootstrap-touchspin/ about Bootstrap TouchSpin prestashop.on("updateCart", (event) => {
quantityInput.trigger('touchspin.updatesettings', { if (
min: minimalProductQuantity, prestashop.page.page_name === "product" &&
}); parseInt(event.reason.idProduct, 10) ===
} parseInt(
$("#add-to-cart-or-refresh")
.find('[name="id_product"]')
.val(),
10
)
) {
prestashop.emit("updateProduct", {
event,
resp: {},
reason: {
productUrl: prestashop.urls.pages.product || "",
},
});
}
});
if (updateEvenType === 'updatedProductCombination') { prestashop.on("updatedProduct", (event) => {
$('.js-product-images').replaceWith(event.product_cover_thumbnails); createInputFile();
$('.js-product-images-modal').replaceWith(event.product_images_modal);
prestashop.emit('updatedProductCombination', event);
}
updateEvenType = false; if (event && event.product_minimal_quantity) {
const minimalProductQuantity = parseInt(
event.product_minimal_quantity,
10
);
const quantityInputSelector = "#quantity_wanted";
const quantityInput = $(quantityInputSelector);
prestashop.pageLazyLoad.update(); // @see http://www.virtuosoft.eu/code/bootstrap-touchspin/ about Bootstrap TouchSpin
}); quantityInput.trigger("touchspin.updatesettings", {
min: minimalProductQuantity,
});
}
if (updateEvenType === "updatedProductCombination") {
$(".js-product-images").replaceWith(event.product_cover_thumbnails);
$(".js-product-images-modal").replaceWith(
event.product_images_modal
);
prestashop.emit("updatedProductCombination", event);
}
updateEvenType = false;
prestashop.pageLazyLoad.update();
});
}); });

View File

@ -0,0 +1,29 @@
<div class="col-auto mt-2 px-1">
<a
class="product-page__action-btn btn btn-light shadow rounded-circle favorite-btn p-2"
href="#"
data-action="toggleFavorite"
data-active="false"
{if isset($product.id) && isset($product.id_product_attribute)}
data-key="{$product.id}_{$product.id_product_attribute}"
{/if}
>
<div class="favorite-btn__content favorite-btn__content--added">
{capture name="svg_output"}{svg_icon file='heart.svg' }{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="material-icons product-page__action-btn-icon d-block">favorite</span>
{/if}
</div>
<div class="favorite-btn__content favorite-btn__content--add">
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="material-icons product-page__action-btn-icon d-block">favorite_border</span>
{/if}
</div>
</a>
</div>

View File

@ -0,0 +1,28 @@
<a
class="product-miniature__functional-btn product-miniature__functional-btn--top btn btn-light shadow rounded-circle favorite-btn"
href="#"
data-action="toggleFavorite"
data-active="false"
{if isset($product.id) && isset($product.id_product_attribute)}
data-key="{$product.id}_{$product.id_product_attribute}"
{/if}
>
<div class="favorite-btn__content favorite-btn__content--added">
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="material-icons product-miniature__functional-btn-icon d-block">favorite</span>
{/if}
</div>
<div class="favorite-btn__content favorite-btn__content--add">
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="material-icons product-miniature__functional-btn-icon d-block">favorite_border</span>
{/if}
</div>
</a>

View File

@ -0,0 +1,19 @@
<div class="col flex-grow-0 header-top__block header-top__block--favorite js-favorite-top-content">
<a
class="header-top__link"
rel="nofollow"
href="{$favoritePageUrl}"
>
<div class="header-top__icon-container">
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="header-top__icon material-icons">favorite</span>
{/if}
<span class="header-top__badge">
{$favoriteProductsCount}
</span>
</div>
</a>
</div>

View File

@ -0,0 +1,22 @@
<div class="header-top__block header-top__block--search col-12 col-md mt-2 mt-lg-0">
<div id="search_from">
<form class="search-form js-search-form" data-search-controller-url="{$ajax_search_url}" method="get" action="{$search_controller_url}">
<div class="search-form__form-group">
<input type="hidden" name="controller" value="search">
<input class="js-search-input search-form__input form-control"
placeholder="{l s='Enter what you are looking for' d='Modules.Issearchbar.Form'}"
type="text"
name="s"
value="{$search_string}">
<button type="submit" class="search-form__btn btn">
{capture name="svg_output"}{svg_icon file='search.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="header-top__icon material-icons">search</span>
{/if}
</button>
</div>
</form>
</div>
</div>

View File

@ -0,0 +1,89 @@
{**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<div class="header-top__block header-top__block--cart col flex-grow-0">
<div class="js-blockcart blockcart cart-preview dropdown" data-refresh-url="{$refresh_url}">
<a href="#" role="button" id="cartDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
class="header-top__link d-lg-block d-none">
<div class="header-top__icon-container">
{capture name="svg_output"}{svg_icon file='bag.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="header-top__icon material-icons">shopping_basket</span>
{/if}
<span class="header-top__badge {if $cart.products_count > 9}header-top__badge--smaller{/if}">
{$cart.products_count}
</span>
</div>
</a>
<a href="{$cart_url}" class="d-flex d-lg-none header-top__link">
<div class="header-top__icon-container">
{capture name="svg_output"}{svg_icon file='bag.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="header-top__icon material-icons">shopping_basket</span>
{/if}
<span class="header-top__badge {if $cart.products_count > 9}header-top__badge--smaller{/if}">
{$cart.products_count}
</span>
</div>
</a>
<div class="dropdown-menu blockcart__dropdown cart-dropdown dropdown-menu-right" aria-labelledby="cartDropdown">
<div class="cart-dropdown__content keep-open js-cart__card-body cart__card-body">
<div class="cart-loader">
<div class="spinner-border text-primary" role="status"><span
class="sr-only">{l s='Loading...' d='Shop.Theme.Global'}</span></div>
</div>
<div class="cart-dropdown__title d-flex align-items-center mb-3">
<p class="h5 mb-0 mr-2">
{l s='Your cart' d='Modules.Isshoppingcart.Isshoppingcart'}
</p>
<a data-toggle="dropdown" href="#" class="cart-dropdown__close dropdown-close ml-auto cursor-pointer text-decoration-none">
<i class="material-icons d-block">close</i>
</a>
</div>
{if $cart.products_count > 0}
<div class="cart-dropdown__products pt-3 mb-3">
{foreach from=$cart.products item=product}
{include 'module:is_shoppingcart/views/templates/front/is_shoppingcart-product-line.tpl' product=$product}
{/foreach}
</div>
<div class="cart-summary-line cart-total">
<span class="label">{$cart.totals.total.label}</span>
<span class="value">{$cart.totals.total.value}</span>
</div>
<div class="mt-3">
<a href="{$cart_url}" class="btn btn-sm btn-primary btn-block dropdown-close">
{l s='Proceed to checkout' d='Shop.Theme.Actions'}
</a>
</div>
{else}
<div class="alert alert-warning">
{l s='Unfortunately your basket is empty' d='Modules.Isshoppingcart.Isshoppingcart'}
</div>
{/if}
</div>
</div>
</div>
</div>

View File

@ -20,6 +20,11 @@
{if $node.open_in_new_window} target="_blank" {/if} {if $node.open_in_new_window} target="_blank" {/if}
> >
<span class="align-self-center">{$node.label}</span> <span class="align-self-center">{$node.label}</span>
{if $node.children|count}
<span class="d-none d-md-block pl-1" style="margin-bottom: 3px;">
{svg_icon file='chevron_down.svg' }
</span>
{/if}
</a> </a>
{if $node.children|count} {if $node.children|count}
{* Cannot use page identifier as we can have the same page several times *} {* Cannot use page identifier as we can have the same page several times *}
@ -51,4 +56,4 @@
<div class="main-menu" id="_desktop_top_menu"> <div class="main-menu" id="_desktop_top_menu">
{menu nodes=$menu.children} {menu nodes=$menu.children}
</div> </div>
</div> </div>

View File

@ -0,0 +1,25 @@
<div class="footer-bottom py-3">
<div class="container d-flex justify-content-between align-items-center">
<div class="copyright">
<span>
{l
s='Copyright © %year% %shop%'
sprintf=['%year%' => $smarty.now|date_format:"%Y", '%shop%' => $shop.name|capitalize]
d='Shop.Theme.Footer'
}
</span>
</div>
<a href="https://dewebsmid.nl/prestashop/" rel="noopener" target="_blank">
{l s='PrestaShop' d='Shop.Theme.Footer'}
</a>
<div class="privacy">
<a href="content/3-gebruiks-voorwaarden">
{l s='Terms & Conditions' d='Shop.Theme.Footer'}
</a>
<span class="mx-2"> | </span>
<a href="content/1-levering">
{l s='Privacy policy' d='Shop.Theme.Footer'}
</a>
</div>
</div>
</div>

View File

@ -29,7 +29,7 @@
{/block} {/block}
</div> </div>
</div> </div>
<div class="footer-container"> <div class="footer-container pb-0">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
{block name='hook_footer'} {block name='hook_footer'}
@ -42,4 +42,5 @@
{/block} {/block}
</div> </div>
</div> </div>
{include file='_partials/footer-copyright.tpl'}
</div> </div>

View File

@ -29,24 +29,28 @@
{/block} {/block}
{block name='header_nav'} {block name='header_nav'}
<nav class="header-nav border-bottom bg-light py-1 d-none d-md-block">
<div class="container">
<div class="row align-items-center">
{hook h='displayNav1'}
{hook h='displayNav2'}
</div>
</div>
</nav>
{/block} {/block}
{block name='header_top'} {block name='header_top'}
{* Optional: Add USP bar at the top of the header
Uncomment the code below to enable it
Use the uspanywhere module and hook to "displayHeaderTopUsps" *}
{*
<div class="header-cta d-none d-lg-block py-2 py-lg-3 bg-primary">
<div class="container">
<div class="row d-flex gap-20">
{hook h='displayHeaderTopUsps'}
</div>
</div>
</div>
*}
<div class="js-header-top-wrapper"> <div class="js-header-top-wrapper">
<div class="header-top js-header-top"> <div class="header-top js-header-top">
<div class="header-top__content pt-md-3 pb-md-0 py-2"> <div class="header-top__content pb-md-0 py-2">
<div class="container"> <div class="container">
<div class="row header-top__row"> <div class="row header-top__row">
<div class="col flex-grow-0 header-top__block header-top__block--menu-toggle d-block d-md-none"> <div class="col flex-grow-0 header-top__block header-top__block--menu-toggle d-block d-md-none">
@ -58,12 +62,17 @@
data-target="#mobile_top_menu_wrapper" data-target="#mobile_top_menu_wrapper"
> >
<div class="header-top__icon-container"> <div class="header-top__icon-container">
<span class="header-top__icon material-icons">menu</span> {capture name="svg_output"}{svg_icon file='hamburger-menu.svg'}{/capture}
{if $smarty.capture.svg_output}
{$smarty.capture.svg_output nofilter}
{else}
<span class="header-top__icon material-icons">menu</span>
{/if}
</div> </div>
</a> </a>
</div> </div>
<div class="col-md-4 col header-top__block header-top__block--logo"> <div class="col col-md-auto col header-top__block header-top__block--logo">
<a href="{$urls.pages.index}"> <a href="{$urls.pages.index}">
{images_block webpEnabled=$webpEnabled} {images_block webpEnabled=$webpEnabled}
<img <img
@ -79,13 +88,15 @@
{/images_block} {/images_block}
</a> </a>
</div> </div>
{hook h='displayTop'} {hook h='displayTop'}
</div> </div>
<div class="row">
<div class="col">
{hook h='displayNavFullWidth'}
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{hook h='displayNavFullWidth'} {/block}
{/block}

View File

@ -49,6 +49,9 @@
<div class="row product-container js-product-container"> <div class="row product-container js-product-container">
<div class="col-md-5 mb-4"> <div class="col-md-5 mb-4">
{block name='page_header'}
<p class="h1 d-block d-md-none">{block name='page_title'}{$product.name}{/block}</p>
{/block}
{block name='page_content_container'} {block name='page_content_container'}
{block name='page_content'} {block name='page_content'}
<div class="position-relative"> <div class="position-relative">
@ -64,7 +67,8 @@
<div class="col-md-7 mb-4"> <div class="col-md-7 mb-4">
{block name='page_header_container'} {block name='page_header_container'}
{block name='page_header'} {block name='page_header'}
<h1 class="h1">{block name='page_title'}{$product.name}{/block}</h1> <h1 class="h1 d-none d-md-block">{block name='page_title'}{$product.name}{/block}</h1>
<p class="h5 d-block d-md-none">{block name='page_title'}{$product.name}{/block}</p>
{/block} {/block}
{/block} {/block}
{block name='product_prices'} {block name='product_prices'}

View File

@ -12,9 +12,9 @@
{block name='modal_title' hide} {block name='modal_title' hide}
<h5 class="modal-title">{$smarty.block.child}</h5> <h5 class="modal-title">{$smarty.block.child}</h5>
{/block} {/block}
{block name='modal_close'} {block name='modal_close'}
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> {svg_icon file='x.svg' width="24" height="24"}
</button> </button>
{/block} {/block}
</div> </div>

View File

@ -29,7 +29,11 @@
{/block} {/block}
{block name='page_content'} {block name='page_content'}
<h6>{l s='Here are the orders you\'ve placed since your account was created.' d='Shop.Theme.Customeraccount'}</h6> <p>
<strong>
{l s='Here are the orders you\'ve placed since your account was created.' d='Shop.Theme.Customeraccount'}
</strong>
</p>
{if $orders} {if $orders}
<table class="table table-striped table-bordered hidden-sm-down"> <table class="table table-striped table-bordered hidden-sm-down">
@ -40,7 +44,7 @@
<th>{l s='Total price' d='Shop.Theme.Checkout'}</th> <th>{l s='Total price' d='Shop.Theme.Checkout'}</th>
<th class="hidden-md-down">{l s='Payment' d='Shop.Theme.Checkout'}</th> <th class="hidden-md-down">{l s='Payment' d='Shop.Theme.Checkout'}</th>
<th class="hidden-md-down">{l s='Status' d='Shop.Theme.Checkout'}</th> <th class="hidden-md-down">{l s='Status' d='Shop.Theme.Checkout'}</th>
<th>&nbsp;</th> <th>{l s='Actions' d='Shop.Theme.Checkout'}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -66,16 +70,14 @@
{$order.history.current.ostate_name} {$order.history.current.ostate_name}
</span> </span>
</td> </td>
<td class="text-sm-center order-actions align-middle"> <td class="order-actions align-middle d-flex">
<a class="view-order-details-link btn btn-sm btn-primary" href="{$order.details.details_url}" data-link-action="view-order-details"> <a class="view-order-details-link btn btn-sm btn-primary" href="{$order.details.details_url}" data-link-action="view-order-details">
{l s='Details' d='Shop.Theme.Customeraccount'} {l s='Details' d='Shop.Theme.Customeraccount'}
</a> </a>
{if $order.details.reorder_url} {if $order.details.reorder_url}
<div class="col-sm-6 mt-2"> <a class="reorder-link btn btn-sm btn-secondary" href="{$order.details.reorder_url}" data-link-action="view-order-details">
<a class="reorder-link btn btn-sm btn-primary" href="{$order.details.reorder_url}" data-link-action="view-order-details">
{l s='Reorder' d='Shop.Theme.Actions'} {l s='Reorder' d='Shop.Theme.Actions'}
</a> </a>
</div>
{/if} {/if}
</td> </td>
</tr> </tr>

View File

@ -29,6 +29,23 @@
{block name='page_content_top'}{/block} {block name='page_content_top'}{/block}
{block name='page_content'} {block name='page_content'}
{* Define containers, rows and columns here for each section *}
{* Example:
<section id="home_hero" class="mt-0">
<div class="container">
<div class="row">
<div class="col-6 displayCustomhtml1">
{hook h='displayCustomhtml1'}
</div>
<div class="col-6 displayHomeBanner1">
{hook h='displayHomeBanner1'}
</div>
</div>
</div>
</section>
*}
{block name='hook_home'} {block name='hook_home'}
{$HOOK_HOME nofilter} {$HOOK_HOME nofilter}
{/block} {/block}

View File

@ -25,101 +25,96 @@
<!doctype html> <!doctype html>
<html lang="{$language.locale}"> <html lang="{$language.locale}">
<head> <head>
{block name='head'} {block name='head'}
{include file='_partials/head.tpl'} {include file='_partials/head.tpl'}
{/block} {/block}
</head> </head>
<body id="{$page.page_name}" class="{$page.body_classes|classnames}"> <body id="{$page.page_name}" class="{$page.body_classes|classnames}">
{block name='hook_after_body_opening_tag'} {block name='hook_after_body_opening_tag'}
{hook h='displayAfterBodyOpeningTag'} {hook h='displayAfterBodyOpeningTag'}
{/block} {/block}
<main class="l-main"> <main class="l-main">
{block name='product_activation'} {block name='product_activation'}
{include file='catalog/_partials/product-activation.tpl'} {include file='catalog/_partials/product-activation.tpl'}
{/block}
<header id="header" class="l-header">
{block name='header'}
{include file='_partials/header.tpl'}
{/block}
</header>
<section id="wrapper">
{block name='notifications'}
{include file='_partials/notifications.tpl'}
{/block} {/block}
{hook h="displayWrapperTop"} <header id="header" class="l-header">
<div class="container"> {block name='header'}
{block name='breadcrumb'} {include file='_partials/header.tpl'}
{include file='_partials/breadcrumb.tpl'}
{/block}
<div class="row">
{block name="left_column"}
<div id="left-column" class="col-12 col-md-4 col-lg-3">
{if $page.page_name == 'product'}
{hook h='displayLeftColumnProduct' product=$product category=$category}
{else}
{hook h="displayLeftColumn"}
{/if}
</div>
{/block} {/block}
</header>
{block name="content_wrapper"} <section id="wrapper">
<div id="content-wrapper" class="js-content-wrapper left-column right-column col-md-4 col-lg-6"> {block name='notifications'}
{hook h="displayContentWrapperTop"} {include file='_partials/notifications.tpl'}
{block name="content"} {/block}
<p>Hello world! This is HTML5 Boilerplate.</p> {hook h="displayWrapperTop"}
<div class="{if $page.page_name == 'index' }container-fluid p-0 overflow-hidden{else} container {/if}">
{block name='breadcrumb'}
{include file='_partials/breadcrumb.tpl'}
{/block} {/block}
{hook h="displayContentWrapperBottom"} <div {if $page.page_name != 'index' || !isset($page.body_classes['layout-full-width'])}class="row"{/if}>
</div> {block name="left_column"}
{/block} <div id="left-column" class="col-12 col-md-4 col-lg-3">
{if $page.page_name == 'product'}
{hook h='displayLeftColumnProduct' product=$product category=$category}
{else}
{hook h="displayLeftColumn"}
{/if}
</div>
{/block}
{block name="content_wrapper"}
<div id="content-wrapper" class="js-content-wrapper left-column right-column col-md-4 col-lg-6">
{hook h="displayContentWrapperTop"}
{block name="content"}
<p>Hello world! This is HTML5 Boilerplate.</p>
{/block}
{hook h="displayContentWrapperBottom"}
</div>
{/block}
{block name="right_column"}
<div id="right-column" class="col-12 col-md-4 col-lg-3">
{if $page.page_name == 'product'}
{hook h='displayRightColumnProduct'}
{else}
{hook h="displayRightColumn"}
{/if}
</div>
{/block}
</div>
</div>
{hook h="displayWrapperBottom"}
</section>
{block name="right_column"} <footer id="footer" class="l-footer js-footer">
<div id="right-column" class="col-12 col-md-4 col-lg-3"> {block name="footer"}
{if $page.page_name == 'product'} {include file="_partials/footer.tpl"}
{hook h='displayRightColumnProduct'}
{else}
{hook h="displayRightColumn"}
{/if}
</div>
{/block} {/block}
</div> </footer>
</div>
{hook h="displayWrapperBottom"}
</section>
<footer id="footer" class="l-footer js-footer">
{block name="footer"}
{include file="_partials/footer.tpl"}
{/block}
</footer>
</main> </main>
{block name='javascript_bottom'} {block name='javascript_bottom'}
{include file="_partials/password-policy-template.tpl"} {include file="_partials/password-policy-template.tpl"}
{include file="_partials/javascript.tpl" javascript=$javascript.bottom} {include file="_partials/javascript.tpl" javascript=$javascript.bottom}
{/block} {/block}
{block name='hook_before_body_closing_tag'} {block name='hook_before_body_closing_tag'}
{hook h='displayBeforeBodyClosingTag'} {hook h='displayBeforeBodyClosingTag'}
{/block} {/block}
{block name='mobile-modals'} {block name='mobile-modals'}
{include file="_partials/mobile-modals.tpl"} {include file="_partials/mobile-modals.tpl"}
{/block} {/block}
{block name='page-loader'} {block name='page-loader'}
{include file="_partials/page-loader.tpl"} {include file="_partials/page-loader.tpl"}
{/block} {/block}
</body> </body>
</html> </html>

View File

@ -28,7 +28,7 @@
{block name='right_column'}{/block} {block name='right_column'}{/block}
{block name='content_wrapper'} {block name='content_wrapper'}
<div id="content-wrapper" class="col-12 js-content-wrapper"> <div id="content-wrapper" class="{if $page.page_name != 'index' || !isset($page.body_classes['layout-full-width'])}col-12 {/if}js-content-wrapper">
{hook h="displayContentWrapperTop"} {hook h="displayContentWrapperTop"}
{block name='content'} {block name='content'}
<p>Hello world! This is HTML5 Boilerplate.</p> <p>Hello world! This is HTML5 Boilerplate.</p>