Compare commits
24 Commits
d5d30616f0
...
feature/ex
| Author | SHA1 | Date | |
|---|---|---|---|
| 98ccf560c9 | |||
| e393572081 | |||
| e37cafd839 | |||
| 1bf0ea3450 | |||
| a128906dc0 | |||
| ddec414409 | |||
| 2f8a8bf527 | |||
| e4c471684f | |||
| d38338b360 | |||
| cb65915c7c | |||
| 10aabb24a9 | |||
| a8869adad6 | |||
| ff9b9a3570 | |||
| 47f985815a | |||
| 8c79477559 | |||
| 5c7750e15d | |||
| 523c7d573c | |||
| 6af020d81f | |||
| f2192d11db | |||
| 982dc10038 | |||
| 4d7880fcec | |||
| fd595a0e15 | |||
| 3e96574e0a | |||
| 48e776d80d |
@ -1,3 +1,21 @@
|
||||
$grid-columns: 12;
|
||||
$grid-gutter-width: rem-calc(20px);
|
||||
$grid-row-columns: 6;
|
||||
// Made this more like the breakpoints used in Bootstrap 5
|
||||
$grid-breakpoints: (
|
||||
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;
|
||||
|
||||
@ -5,3 +5,4 @@
|
||||
@import "layout/index";
|
||||
@import "components/index";
|
||||
|
||||
@import "custom/custom";
|
||||
|
||||
@ -10,8 +10,10 @@ Look up all available Bootstrap variables here: https://rstudio.github.io/bslib/
|
||||
*/
|
||||
|
||||
//Abstracts: Things used throughout the site such as utility classes and generic overrides.
|
||||
@import "abstracts/utilities";
|
||||
//@import "abstracts/base";
|
||||
@import "abstracts/functions";
|
||||
@import "abstracts/mixins";
|
||||
//@import "abstracts/utilities";
|
||||
|
||||
// Components: parts of the theme itself that are not associated with a module.
|
||||
//@import "components/buttons";
|
||||
|
||||
41
falcon/_dev/css/theme/custom/abstracts/_functions.scss
Normal file
41
falcon/_dev/css/theme/custom/abstracts/_functions.scss
Normal file
@ -0,0 +1,41 @@
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
// Font weight utility classes generator
|
||||
// Generates utility classes like .fw-100, .fw-200, etc.
|
||||
@for $i from 100 through 900 {
|
||||
@if $i % 100 == 0 {
|
||||
.fw-#{$i} {
|
||||
font-weight: #{$i} !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// gap size utility classes generator
|
||||
// Generates utility classes like .gap-4, .gap-col-4, .gap-row-4
|
||||
@for $i from 1 through 35 {
|
||||
.gap-#{$i} {
|
||||
gap: rem-calc($i * 1px) !important;
|
||||
}
|
||||
.gap-col-#{$i} {
|
||||
column-gap: rem-calc($i * 1px) !important;
|
||||
}
|
||||
.gap-row-#{$i} {
|
||||
row-gap: rem-calc($i * 1px) !important;
|
||||
}
|
||||
}
|
||||
|
||||
// hex to rgba function
|
||||
@function hex-to-rgba($hex, $alpha) {
|
||||
$r: red($hex);
|
||||
$g: green($hex);
|
||||
$b: blue($hex);
|
||||
@return rgba($r, $g, $b, $alpha);
|
||||
}
|
||||
@ -1,3 +1,32 @@
|
||||
// Header selector for interpolation
|
||||
// Example usage: #{$headings} { ... }
|
||||
$headings: "h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6";
|
||||
|
||||
// Section Spacers
|
||||
$section-spacer: rem-calc(50px);
|
||||
$section-spacer-small: rem-calc(25px);
|
||||
|
||||
.section-spacer-both {
|
||||
margin-top: $section-spacer;
|
||||
margin-bottom: $section-spacer;
|
||||
@include bs5-media-breakpoint-up(lg) {
|
||||
margin-top: calc($section-spacer * 1.5);
|
||||
margin-bottom: calc($section-spacer * 1.5);
|
||||
}
|
||||
&--small {
|
||||
margin-top: $section-spacer-small;
|
||||
margin-bottom: $section-spacer-small;
|
||||
@include bs5-media-breakpoint-up(lg) {
|
||||
margin-top: calc($section-spacer-small * 2);
|
||||
margin-bottom: calc($section-spacer-small * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-spacer {
|
||||
@extend .section-spacer-both;
|
||||
margin-bottom: unset;
|
||||
&--small {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,14 +13,4 @@ $btn-color: (
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,4 +79,19 @@ $(() => {
|
||||
$(".js-select-link").on("change", ({ target }) => {
|
||||
window.location.href = $(target).val();
|
||||
});
|
||||
|
||||
// Postcode input formatting
|
||||
const $postCodeInput = $("input[name='postcode']");
|
||||
$postCodeInput.on("input", function () {
|
||||
let value = $(this).val();
|
||||
|
||||
// Match 4 digits followed by 2 letters (e.g., 1234AB)
|
||||
const match = value.match(/^(\d{4})([a-zA-Z]{2})$/);
|
||||
|
||||
if (match) {
|
||||
// Add space between numbers and letters
|
||||
const formatted = `${match[1]} ${match[2]}`;
|
||||
$(this).val(formatted);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
<div class="favorite-btn__content favorite-btn__content--add">
|
||||
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
|
||||
{capture name="svg_output"}{svg_icon file='heart.svg' width="22"}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
<div class="favorite-btn__content favorite-btn__content--add">
|
||||
{capture name="svg_output"}{svg_icon file='heart.svg'}{/capture}
|
||||
{capture name="svg_output"}{svg_icon file='heart.svg' width="22"}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
|
||||
@ -28,7 +28,13 @@
|
||||
<div class="d-flex align-items-center mb-3 justify-content-between position-relative">
|
||||
<span class="h4 mb-0">{l s='Store information' d='Shop.Theme.Global'}</span>
|
||||
<a href="#footer_contact_list" class="icon-collapse stretched-link text-reset d-block d-md-none" data-toggle="collapse">
|
||||
<i class="material-icons d-block"></i>
|
||||
{capture name="svg_output"}{svg_icon file='chevron_down.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
<span style="margin-bottom: 3px;">
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
<i class="material-icons d-block"></i>
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
@ -28,7 +28,13 @@
|
||||
<div class="d-flex align-items-center mb-3 justify-content-between position-relative">
|
||||
<span class="h4 mb-0">{l s='Your account' d='Shop.Theme.Customeraccount'}</span>
|
||||
<a href="#footer_account_list" class="icon-collapse stretched-link text-reset d-block d-md-none" data-toggle="collapse">
|
||||
<i class="material-icons d-block"></i>
|
||||
{capture name="svg_output"}{svg_icon file='chevron_down.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
<span style="margin-bottom: 3px;">
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
<i class="material-icons d-block"></i>
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
@ -34,7 +34,12 @@
|
||||
{/if}
|
||||
>
|
||||
<div class="header-top__icon-container">
|
||||
<span class="header-top__icon material-icons">person</span>
|
||||
{capture name="svg_output"}{svg_icon file='person.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
<span class="header-top__icon material-icons">person</span>
|
||||
{/if}
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -4,7 +4,13 @@
|
||||
<div class="d-flex align-items-center mb-3 justify-content-between position-relative">
|
||||
<span class="h4 mb-0">{$linkBlock.title}</span>
|
||||
<a href="#footer_sub_menu_{$_expand_id}" class="icon-collapse stretched-link text-reset d-block d-md-none" data-toggle="collapse">
|
||||
<i class="material-icons d-block"></i>
|
||||
{capture name="svg_output"}{svg_icon file='chevron_down.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
<span style="margin-bottom: 3px;">
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
<i class="material-icons d-block"></i>
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
<div id="footer_sub_menu_{$_expand_id}" class="collapse d-md-block">
|
||||
|
||||
@ -29,7 +29,13 @@
|
||||
<div class="d-flex align-items-center mb-3 justify-content-between position-relative">
|
||||
<span class="h4 mb-0">{$linkBlock.title}</span>
|
||||
<a href="#footer_sub_menu_{$_expand_id}" class="icon-collapse stretched-link text-reset d-block d-md-none" data-toggle="collapse">
|
||||
<i class="material-icons d-block"></i>
|
||||
{capture name="svg_output"}{svg_icon file='chevron_down.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
<span style="margin-bottom: 3px;">
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
{else}
|
||||
<i class="material-icons d-block"></i>
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
<div id="footer_sub_menu_{$_expand_id}" class="collapse d-md-block">
|
||||
|
||||
@ -21,9 +21,14 @@
|
||||
>
|
||||
<span class="align-self-center">{$node.label}</span>
|
||||
{if $node.children|count}
|
||||
{capture name="svg_output"}{svg_icon file='chevron_down.svg'}{/capture}
|
||||
{if $smarty.capture.svg_output}
|
||||
<span class="d-none d-md-block pl-1" style="margin-bottom: 3px;">
|
||||
{svg_icon file='chevron_down.svg' }
|
||||
{$smarty.capture.svg_output nofilter}
|
||||
</span>
|
||||
{else}
|
||||
<i class="material-icons d-block"></i>
|
||||
{/if}
|
||||
{/if}
|
||||
</a>
|
||||
{if $node.children|count}
|
||||
|
||||
@ -26,38 +26,43 @@
|
||||
|
||||
{block name='pagination_page_list'}
|
||||
{if $pagination.should_be_displayed}
|
||||
<nav>
|
||||
<ul class="pagination justify-content-center mt-4 mb-2">
|
||||
{foreach from=$pagination.pages item="page"}
|
||||
<li class="page-item{if $page.current} active{/if} {if $page.type === 'spacer'}disabled{/if}">
|
||||
{if $page.type === 'spacer'}
|
||||
<span
|
||||
rel="{if $page.type === 'previous'}prev{elseif $page.type === 'next'}next{else}nofollow{/if}"
|
||||
href="#"
|
||||
class="page-link"
|
||||
>
|
||||
…
|
||||
</span>
|
||||
{else}
|
||||
<a
|
||||
rel="{if $page.type === 'previous'}prev{elseif $page.type === 'next'}next{else}nofollow{/if}"
|
||||
href="{$page.url}"
|
||||
class="page-link {['disabled' => !$page.clickable, 'js-search-link' => true]|classnames}"
|
||||
>
|
||||
{if $page.type === 'previous'}
|
||||
<span class="material-icons font-reset align-middle">keyboard_arrow_left</span>
|
||||
<span class="sr-only">{l s='Previous' d='Shop.Theme.Actions'}</span>
|
||||
{elseif $page.type === 'next'}
|
||||
<span class="material-icons font-reset align-middle">keyboard_arrow_right</span>
|
||||
<span class="sr-only">{l s='Next' d='Shop.Theme.Actions'}</span>
|
||||
{else}
|
||||
{$page.page}
|
||||
{/if}
|
||||
</a>
|
||||
{/if}
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div class="results__block">
|
||||
{l s='%curr_numer% van %total_items% resultaten' sprintf=['%curr_numer%' => $pagination.items_shown_to,'%total_items%' => $pagination.total_items] d='Shop.Theme.Actions'}
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="pagination justify-content-center m-0">
|
||||
{foreach from=$pagination.pages item="page"}
|
||||
<li class="page-item{if $page.current} active{/if} {if $page.type === 'spacer'}disabled{/if}">
|
||||
{if $page.type === 'spacer'}
|
||||
<span
|
||||
rel="{if $page.type === 'previous'}prev{elseif $page.type === 'next'}next{else}nofollow{/if}"
|
||||
href="#"
|
||||
class="page-link"
|
||||
>
|
||||
…
|
||||
</span>
|
||||
{else}
|
||||
<a
|
||||
rel="{if $page.type === 'previous'}prev{elseif $page.type === 'next'}next{else}nofollow{/if}"
|
||||
href="{$page.url}"
|
||||
class="page-link {['disabled' => !$page.clickable, 'js-search-link' => true]|classnames}"
|
||||
>
|
||||
{if $page.type === 'previous'}
|
||||
<span class="material-icons font-reset align-middle">keyboard_arrow_left</span>
|
||||
<span class="sr-only">{l s='Previous' d='Shop.Theme.Actions'}</span>
|
||||
{elseif $page.type === 'next'}
|
||||
<span class="material-icons font-reset align-middle">keyboard_arrow_right</span>
|
||||
<span class="sr-only">{l s='Next' d='Shop.Theme.Actions'}</span>
|
||||
{else}
|
||||
{$page.page}
|
||||
{/if}
|
||||
</a>
|
||||
{/if}
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
@ -1,7 +1,15 @@
|
||||
{* Defensive: Handles LazyArray objects for category *}
|
||||
{if is_object($category)}
|
||||
{$category = $category|json_encode|json_decode:true}
|
||||
{if isset($category.category)}
|
||||
{$category = $category.category}
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
<div id="js-product-list-footer">
|
||||
{if $category.additional_description && $listing.pagination.items_shown_from == 1}
|
||||
{if isset($category.additional_description) && $category.additional_description && $listing.pagination.items_shown_from == 1}
|
||||
<div id="category-description-2" class="cms-content my-3">
|
||||
{$category.additional_description nofilter}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@ -26,7 +26,7 @@
|
||||
{$listingType = $type|default:'listing'}
|
||||
<div
|
||||
{if $listingType === 'listing'}
|
||||
class="products-list__block products-list__block--grid"
|
||||
class="products-list__block col col-sm-6 col-lg-4 col-xl-3"
|
||||
{elseif $listingType === 'slider'}
|
||||
class="swiper-slide product-slider__item col-6 col-md-4 col-lg-3"
|
||||
{/if}
|
||||
|
||||
Reference in New Issue
Block a user