Skip to content

Instantly share code, notes, and snippets.

@JulianSchnehage
Last active August 26, 2019 14:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JulianSchnehage/578116e5d1303a041d8edf6ca929f96f to your computer and use it in GitHub Desktop.
Save JulianSchnehage/578116e5d1303a041d8edf6ca929f96f to your computer and use it in GitHub Desktop.
Region Selector
{% comment %}
This is the html for the button that triggers the modal (Using Remodal in the turbo theme.)
Originally it was part of a block in footer.liquid in the Turbo theme, place where appropriate.
The us.flag.png asset on line 12 is included but needs to be replaced with the appropriate country's flag.
The flags in the modal are uploaded via the theme editor
{% endcomment %}
{% if block.settings.region_selector %}
<a href="javascript:void(0)" class="region_trigger" data-remodal-target="region_selector" data-remodal-options="hashTracking: false">
<img class="region_trigger__flag" src="{{ 'us_flag.png' | asset_img_url: '150x' }}">
<span>{{ block.settings.region_trigger_text}}</span>
{% include 'icon_region_selector_arrow' %}
</a>
{% endif %}
{% comment %}
These are the block settings for the button that triggers the modal.
{% endcomment %}
{
"type": "checkbox",
"id": "region_selector",
"label": "Show Region Selector",
"default": false
},
{
"type": "text",
"id": "region_trigger_text",
"label": "Text for Region Selector Trigger",
"default": "Select Region"
}
/* 3.4 Region Selector - Selectric */
/*! Selectric ϟ v1.13.0 (2017-08-22) - git.io/tjl9sQ - Copyright (c) 2017 Leonardo Santos - MIT License */
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,s){return void 0===s&&(s="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(s),s}:e(jQuery)}(function(e){"use strict";var t=e(document),s=e(window),l=["a","e","i","o","u","n","c","y"],i=[/[\xE0-\xE5]/g,/[\xE8-\xEB]/g,/[\xEC-\xEF]/g,/[\xF2-\xF6]/g,/[\xF9-\xFC]/g,/[\xF1]/g,/[\xE7]/g,/[\xFD-\xFF]/g],n=function(t,s){var l=this;l.element=t,l.$element=e(t),l.state={multiple:!!l.$element.attr("multiple"),enabled:!1,opened:!1,currValue:-1,selectedIdx:-1,highlightedIdx:-1},l.eventTriggers={open:l.open,close:l.close,destroy:l.destroy,refresh:l.refresh,init:l.init},l.init(s)};n.prototype={utils:{isMobile:function(){return/android|ip(hone|od|ad)/i.test(navigator.userAgent)},escapeRegExp:function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},replaceDiacritics:function(e){for(var t=i.length;t--;)e=e.toLowerCase().replace(i[t],l[t]);return e},format:function(e){var t=arguments;return(""+e).replace(/\{(?:(\d+)|(\w+))\}/g,function(e,s,l){return l&&t[1]?t[1][l]:t[s]})},nextEnabledItem:function(e,t){for(;e[t=(t+1)%e.length].disabled;);return t},previousEnabledItem:function(e,t){for(;e[t=(t>0?t:e.length)-1].disabled;);return t},toDash:function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()},triggerCallback:function(t,s){var l=s.element,i=s.options["on"+t],n=[l].concat([].slice.call(arguments).slice(1));e.isFunction(i)&&i.apply(l,n),e(l).trigger("selectric-"+this.toDash(t),n)},arrayToClassname:function(t){var s=e.grep(t,function(e){return!!e});return e.trim(s.join(" "))}},init:function(t){var s=this;if(s.options=e.extend(!0,{},e.fn.selectric.defaults,s.options,t),s.utils.triggerCallback("BeforeInit",s),s.destroy(!0),s.options.disableOnMobile&&s.utils.isMobile())return void(s.disableOnMobile=!0);s.classes=s.getClassNames();var l=e("<input/>",{class:s.classes.input,readonly:s.utils.isMobile()}),i=e("<div/>",{class:s.classes.items,tabindex:-1}),n=e("<div/>",{class:s.classes.scroll}),a=e("<div/>",{class:s.classes.prefix,html:s.options.arrowButtonMarkup}),o=e("<span/>",{class:"label"}),r=s.$element.wrap("<div/>").parent().append(a.prepend(o),i,l),u=e("<div/>",{class:s.classes.hideselect});s.elements={input:l,items:i,itemsScroll:n,wrapper:a,label:o,outerWrapper:r},s.options.nativeOnMobile&&s.utils.isMobile()&&(s.elements.input=void 0,u.addClass(s.classes.prefix+"-is-native"),s.$element.on("change",function(){s.refresh()})),s.$element.on(s.eventTriggers).wrap(u),s.originalTabindex=s.$element.prop("tabindex"),s.$element.prop("tabindex",-1),s.populate(),s.activate(),s.utils.triggerCallback("Init",s)},activate:function(){var e=this,t=e.elements.items.closest(":visible").children(":hidden").addClass(e.classes.tempshow),s=e.$element.width();t.removeClass(e.classes.tempshow),e.utils.triggerCallback("BeforeActivate",e),e.elements.outerWrapper.prop("class",e.utils.arrayToClassname([e.classes.wrapper,e.$element.prop("class").replace(/\S+/g,e.classes.prefix+"-$&"),e.options.responsive?e.classes.responsive:""])),e.options.inheritOriginalWidth&&s>0&&e.elements.outerWrapper.width(s),e.unbindEvents(),e.$element.prop("disabled")?(e.elements.outerWrapper.addClass(e.classes.disabled),e.elements.input&&e.elements.input.prop("disabled",!0)):(e.state.enabled=!0,e.elements.outerWrapper.removeClass(e.classes.disabled),e.$li=e.elements.items.removeAttr("style").find("li"),e.bindEvents()),e.utils.triggerCallback("Activate",e)},getClassNames:function(){var t=this,s=t.options.customClass,l={};return e.each("Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel".split(" "),function(e,i){var n=s.prefix+i;l[i.toLowerCase()]=s.camelCase?n:t.utils.toDash(n)}),l.prefix=s.prefix,l},setLabel:function(){var t=this,s=t.options.labelBuilder;if(t.state.multiple){var l=e.isArray(t.state.currValue)?t.state.currValue:[t.state.currValue];l=0===l.length?[0]:l;var i=e.map(l,function(s){return e.grep(t.lookupItems,function(e){return e.index===s})[0]});i=e.grep(i,function(t){return i.length>1||0===i.length?""!==e.trim(t.value):t}),i=e.map(i,function(l){return e.isFunction(s)?s(l):t.utils.format(s,l)}),t.options.multiple.maxLabelEntries&&(i.length>=t.options.multiple.maxLabelEntries+1?(i=i.slice(0,t.options.multiple.maxLabelEntries),i.push(e.isFunction(s)?s({text:"..."}):t.utils.format(s,{text:"..."}))):i.slice(i.length-1)),t.elements.label.html(i.join(t.options.multiple.separator))}else{var n=t.lookupItems[t.state.currValue];t.elements.label.html(e.isFunction(s)?s(n):t.utils.format(s,n))}},populate:function(){var t=this,s=t.$element.children(),l=t.$element.find("option"),i=l.filter(":selected"),n=l.index(i),a=0,o=t.state.multiple?[]:0;i.length>1&&t.state.multiple&&(n=[],i.each(function(){n.push(e(this).index())})),t.state.currValue=~n?n:o,t.state.selectedIdx=t.state.currValue,t.state.highlightedIdx=t.state.currValue,t.items=[],t.lookupItems=[],s.length&&(s.each(function(s){var l=e(this);if(l.is("optgroup")){var i={element:l,label:l.prop("label"),groupDisabled:l.prop("disabled"),items:[]};l.children().each(function(s){var l=e(this);i.items[s]=t.getItemData(a,l,i.groupDisabled||l.prop("disabled")),t.lookupItems[a]=i.items[s],a++}),t.items[s]=i}else t.items[s]=t.getItemData(a,l,l.prop("disabled")),t.lookupItems[a]=t.items[s],a++}),t.setLabel(),t.elements.items.append(t.elements.itemsScroll.html(t.getItemsMarkup(t.items))))},getItemData:function(t,s,l){var i=this;return{index:t,element:s,value:s.val(),className:s.prop("class"),text:s.html(),slug:e.trim(i.utils.replaceDiacritics(s.html())),alt:s.attr("data-alt"),selected:s.prop("selected"),disabled:l}},getItemsMarkup:function(t){var s=this,l="<ul>";return e.isFunction(s.options.listBuilder)&&s.options.listBuilder&&(t=s.options.listBuilder(t)),e.each(t,function(t,i){void 0!==i.label?(l+=s.utils.format('<ul class="{1}"><li class="{2}">{3}</li>',s.utils.arrayToClassname([s.classes.group,i.groupDisabled?"disabled":"",i.element.prop("class")]),s.classes.grouplabel,i.element.prop("label")),e.each(i.items,function(e,t){l+=s.getItemMarkup(t.index,t)}),l+="</ul>"):l+=s.getItemMarkup(i.index,i)}),l+"</ul>"},getItemMarkup:function(t,s){var l=this,i=l.options.optionsItemBuilder,n={value:s.value,text:s.text,slug:s.slug,index:s.index};return l.utils.format('<li data-index="{1}" class="{2}">{3}</li>',t,l.utils.arrayToClassname([s.className,t===l.items.length-1?"last":"",s.disabled?"disabled":"",s.selected?"selected":""]),e.isFunction(i)?l.utils.format(i(s,this.$element,t),s):l.utils.format(i,n))},unbindEvents:function(){var e=this;e.elements.wrapper.add(e.$element).add(e.elements.outerWrapper).add(e.elements.input).off(".sl")},bindEvents:function(){var t=this;t.elements.outerWrapper.on("mouseenter.sl mouseleave.sl",function(s){e(this).toggleClass(t.classes.hover,"mouseenter"===s.type),t.options.openOnHover&&(clearTimeout(t.closeTimer),"mouseleave"===s.type?t.closeTimer=setTimeout(e.proxy(t.close,t),t.options.hoverIntentTimeout):t.open())}),t.elements.wrapper.on("click.sl",function(e){t.state.opened?t.close():t.open(e)}),t.options.nativeOnMobile&&t.utils.isMobile()||(t.$element.on("focus.sl",function(){t.elements.input.focus()}),t.elements.input.prop({tabindex:t.originalTabindex,disabled:!1}).on("keydown.sl",e.proxy(t.handleKeys,t)).on("focusin.sl",function(e){t.elements.outerWrapper.addClass(t.classes.focus),t.elements.input.one("blur",function(){t.elements.input.blur()}),t.options.openOnFocus&&!t.state.opened&&t.open(e)}).on("focusout.sl",function(){t.elements.outerWrapper.removeClass(t.classes.focus)}).on("input propertychange",function(){var s=t.elements.input.val(),l=new RegExp("^"+t.utils.escapeRegExp(s),"i");clearTimeout(t.resetStr),t.resetStr=setTimeout(function(){t.elements.input.val("")},t.options.keySearchTimeout),s.length&&e.each(t.items,function(e,s){if(!s.disabled){if(l.test(s.text)||l.test(s.slug))return void t.highlight(e);if(s.alt)for(var i=s.alt.split("|"),n=0;n<i.length&&i[n];n++)if(l.test(i[n].trim()))return void t.highlight(e)}})})),t.$li.on({mousedown:function(e){e.preventDefault(),e.stopPropagation()},click:function(){return t.select(e(this).data("index")),!1}})},handleKeys:function(t){var s=this,l=t.which,i=s.options.keys,n=e.inArray(l,i.previous)>-1,a=e.inArray(l,i.next)>-1,o=e.inArray(l,i.select)>-1,r=e.inArray(l,i.open)>-1,u=s.state.highlightedIdx,p=n&&0===u||a&&u+1===s.items.length,c=0;if(13!==l&&32!==l||t.preventDefault(),n||a){if(!s.options.allowWrap&&p)return;n&&(c=s.utils.previousEnabledItem(s.lookupItems,u)),a&&(c=s.utils.nextEnabledItem(s.lookupItems,u)),s.highlight(c)}if(o&&s.state.opened)return s.select(u),void(s.state.multiple&&s.options.multiple.keepMenuOpen||s.close());r&&!s.state.opened&&s.open()},refresh:function(){var e=this;e.populate(),e.activate(),e.utils.triggerCallback("Refresh",e)},setOptionsDimensions:function(){var e=this,t=e.elements.items.closest(":visible").children(":hidden").addClass(e.classes.tempshow),s=e.options.maxHeight,l=e.elements.items.outerWidth(),i=e.elements.wrapper.outerWidth()-(l-e.elements.items.width());!e.options.expandToItemText||i>l?e.finalWidth=i:(e.elements.items.css("overflow","scroll"),e.elements.outerWrapper.width(9e4),e.finalWidth=e.elements.items.width(),e.elements.items.css("overflow",""),e.elements.outerWrapper.width("")),e.elements.items.width(e.finalWidth).height()>s&&e.elements.items.height(s),t.removeClass(e.classes.tempshow)},isInViewport:function(){var e=this;if(!0===e.options.forceRenderAbove)e.elements.outerWrapper.addClass(e.classes.above);else if(!0===e.options.forceRenderBelow)e.elements.outerWrapper.addClass(e.classes.below);else{var t=s.scrollTop(),l=s.height(),i=e.elements.outerWrapper.offset().top,n=e.elements.outerWrapper.outerHeight(),a=i+n+e.itemsHeight<=t+l,o=i-e.itemsHeight>t,r=!a&&o,u=!r;e.elements.outerWrapper.toggleClass(e.classes.above,r),e.elements.outerWrapper.toggleClass(e.classes.below,u)}},detectItemVisibility:function(t){var s=this,l=s.$li.filter("[data-index]");s.state.multiple&&(t=e.isArray(t)&&0===t.length?0:t,t=e.isArray(t)?Math.min.apply(Math,t):t);var i=l.eq(t).outerHeight(),n=l[t].offsetTop,a=s.elements.itemsScroll.scrollTop(),o=n+2*i;s.elements.itemsScroll.scrollTop(o>a+s.itemsHeight?o-s.itemsHeight:n-i<a?n-i:a)},open:function(s){var l=this;if(l.options.nativeOnMobile&&l.utils.isMobile())return!1;l.utils.triggerCallback("BeforeOpen",l),s&&(s.preventDefault(),l.options.stopPropagation&&s.stopPropagation()),l.state.enabled&&(l.setOptionsDimensions(),e("."+l.classes.hideselect,"."+l.classes.open).children().selectric("close"),l.state.opened=!0,l.itemsHeight=l.elements.items.outerHeight(),l.itemsInnerHeight=l.elements.items.height(),l.elements.outerWrapper.addClass(l.classes.open),l.elements.input.val(""),s&&"focusin"!==s.type&&l.elements.input.focus(),setTimeout(function(){t.on("click.sl",e.proxy(l.close,l)).on("scroll.sl",e.proxy(l.isInViewport,l))},1),l.isInViewport(),l.options.preventWindowScroll&&t.on("mousewheel.sl DOMMouseScroll.sl","."+l.classes.scroll,function(t){var s=t.originalEvent,i=e(this).scrollTop(),n=0;"detail"in s&&(n=-1*s.detail),"wheelDelta"in s&&(n=s.wheelDelta),"wheelDeltaY"in s&&(n=s.wheelDeltaY),"deltaY"in s&&(n=-1*s.deltaY),(i===this.scrollHeight-l.itemsInnerHeight&&n<0||0===i&&n>0)&&t.preventDefault()}),l.detectItemVisibility(l.state.selectedIdx),l.highlight(l.state.multiple?-1:l.state.selectedIdx),l.utils.triggerCallback("Open",l))},close:function(){var e=this;e.utils.triggerCallback("BeforeClose",e),t.off(".sl"),e.elements.outerWrapper.removeClass(e.classes.open),e.state.opened=!1,e.utils.triggerCallback("Close",e)},change:function(){var t=this;t.utils.triggerCallback("BeforeChange",t),t.state.multiple?(e.each(t.lookupItems,function(e){t.lookupItems[e].selected=!1,t.$element.find("option").prop("selected",!1)}),e.each(t.state.selectedIdx,function(e,s){t.lookupItems[s].selected=!0,t.$element.find("option").eq(s).prop("selected",!0)}),t.state.currValue=t.state.selectedIdx,t.setLabel(),t.utils.triggerCallback("Change",t)):t.state.currValue!==t.state.selectedIdx&&(t.$element.prop("selectedIndex",t.state.currValue=t.state.selectedIdx).data("value",t.lookupItems[t.state.selectedIdx].text),t.setLabel(),t.utils.triggerCallback("Change",t))},highlight:function(e){var t=this,s=t.$li.filter("[data-index]").removeClass("highlighted");t.utils.triggerCallback("BeforeHighlight",t),void 0===e||-1===e||t.lookupItems[e].disabled||(s.eq(t.state.highlightedIdx=e).addClass("highlighted"),t.detectItemVisibility(e),t.utils.triggerCallback("Highlight",t))},select:function(t){var s=this,l=s.$li.filter("[data-index]");if(s.utils.triggerCallback("BeforeSelect",s,t),void 0!==t&&-1!==t&&!s.lookupItems[t].disabled){if(s.state.multiple){s.state.selectedIdx=e.isArray(s.state.selectedIdx)?s.state.selectedIdx:[s.state.selectedIdx];var i=e.inArray(t,s.state.selectedIdx);-1!==i?s.state.selectedIdx.splice(i,1):s.state.selectedIdx.push(t),l.removeClass("selected").filter(function(t){return-1!==e.inArray(t,s.state.selectedIdx)}).addClass("selected")}else l.removeClass("selected").eq(s.state.selectedIdx=t).addClass("selected");s.state.multiple&&s.options.multiple.keepMenuOpen||s.close(),s.change(),s.utils.triggerCallback("Select",s,t)}},destroy:function(e){var t=this;t.state&&t.state.enabled&&(t.elements.items.add(t.elements.wrapper).add(t.elements.input).remove(),e||t.$element.removeData("selectric").removeData("value"),t.$element.prop("tabindex",t.originalTabindex).off(".sl").off(t.eventTriggers).unwrap().unwrap(),t.state.enabled=!1)}},e.fn.selectric=function(t){return this.each(function(){var s=e.data(this,"selectric");s&&!s.disableOnMobile?"string"==typeof t&&s[t]?s[t]():s.init(t):e.data(this,"selectric",new n(this,t))})},e.fn.selectric.defaults={onChange:function(t){e(t).change()},maxHeight:300,keySearchTimeout:500,arrowButtonMarkup:'<b class="button">&#x25be;</b>',disableOnMobile:!1,nativeOnMobile:!0,openOnFocus:!0,openOnHover:!1,hoverIntentTimeout:500,expandToItemText:!1,responsive:!1,preventWindowScroll:!0,inheritOriginalWidth:!1,allowWrap:!0,forceRenderAbove:!1,forceRenderBelow:!1,stopPropagation:!0,optionsItemBuilder:"{text}",labelBuilder:"{text}",listBuilder:!1,keys:{previous:[37,38],next:[39,40],select:[9,13,27],open:[13,32,37,38,39,40],close:[9,27]},customClass:{prefix:"selectric",camelCase:!1},multiple:{separator:", ",keepMenuOpen:!0,maxLabelEntries:!1}}});
// Region Selector Init
$(document).ready(function(){
// Init with icons in options
$('#custom_select').selectric({
optionsItemBuilder: function(itemData, element, index) {
return element.val().length ? '<span class="ico ico-' + itemData.value + '" data-url="' + itemData.element.data('url') +'"></span>' + itemData.text : itemData.text;
},
labelBuilder: function(currItem) {
return (currItem.value.length ? '<span class="ico ico-' + currItem.value + '"></span>' : '') + currItem.text;
}
});
// Redirect Event-Listener
$('#regionSelectButton').on('click', function(){
var redirectURL = $('.selectric-items .selected .ico').data('url');
window.location = redirectURL + "?redirect=1";
});
});
/* ------------------------------
Redirect Cookie - requires js-cookie https://github.com/js-cookie/js-cookie
------------------------------ */
function getQueryVariable(variable){
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i < vars.length; i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
var redirectQueryString = getQueryVariable('redirect');
var getCookie = Cookies.get('redirect');
if (redirectQueryString != false) {
if (getCookie == undefined) {
Cookies.set('redirect', 1);
}
}
<style media="screen">
{% for block in section.blocks %}
.ico-{{ block.settings.flag_image.id }} {
background-image: url({{ block.settings.flag_image | img_url }});
}
{% endfor %}
</style>
<div class="remodal region_selector__modal" data-remodal-id="region_selector" data-remodal-options="hashTracking: false">
<a data-remodal-action="close" class="remodal-close"></a>
<div class="region_selector__content">
<div class="region_selector__logo">
{% if section.settings.image != blank %}
<img src="{{ section.settings.image | img_url: '300x' }}">
{% endif %}
</div>
<h3 class="region_selector__heading h5">
{{ section.settings.region_heading }}
</h3>
<p class="region_selector__text">
{{ section.settings.region_info }}
</p>
<div class="region_selector__select">
<select id="custom_select" class="region_selector__text" name="Region">
{% for block in section.blocks %}
{% if block.settings.region_active == true %}
<option value="{{ block.settings.flag_image.id }}" data-url="{{ block.settings.region_url }}">{{ block.settings.region_name }}</option>
{% endif %}
{% endfor %}
</select>
</div>
<a id="regionSelectButton" class="action_button region_selector__button" href="javascript:void()">
Select
</a>
</div>
</div>
<script>
{% if section.settings.redirect_enabled %}
if (! Shopify.designMode) {
$.ajax({
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function( location ) {
console.log(location.country_code);
if (Cookies.get('redirect') == undefined) {
if (location.country_code != "{{ section.settings.store_region}}"){
{% for block in section.blocks %}
{% if forloop.first == true %}
if (location.country_code == '{{ block.settings.region_code }}' ) {
var url = window.location.href.split("?")[0];
var n = url.indexOf("{{ block.settings.region_url }}");
if (n == -1){
window.location.href = "{{ block.settings.region_url }}";
}
}
{% else %}
else if (location.country_code == '{{ block.settings.region_code }}' ) {
var url = window.location.href.split("?")[0];
var n = url.indexOf("{{ block.settings.region_url }}");
if (n == -1){
window.location.href = "{{ block.settings.region_url }}";
}
}
{% endif %}
{% endfor %}
else {
var url = window.location.href.split("?")[0];
var n = url.indexOf("{{ section.settings.default_store }}");
if (n == -1){
window.location.href = "{{ section.settings.default_store }}";
}
}
}
}
}
});
}
{% endif %}
</script>
{% schema %}
{
"name": "Region Selector",
"class": "region_selector",
"settings": [
{
"type": "header",
"content": "Region Selector Settings"
},
{
"type": "image_picker",
"id": "image",
"label": "Logo Image"
},
{
"type": "text",
"id": "region_heading",
"label": "Region Selector modal heading",
"default": "Choose your region"
},
{
"type": "text",
"id": "region_info",
"label": "Text below heading",
"default": "Order from anywhere, but we only ship to these regions."
},
{
"type": "header",
"content": "IP Redirect Settings"
},
{
"type": "checkbox",
"id": "redirect_enabled",
"label": "Enable IP Redirect",
"default": false
},
{
"type": "text",
"id": "store_region",
"label": "Current Store Region Code",
"default": "AU"
},
{
"type": "url",
"id": "default_store",
"label": "Default Store - All other regions go here",
"info": "Always end URL with a trailing slash eg https:\/\/your-store.com\/"
}
],
"blocks": [
{
"type": "region",
"limit": 12,
"name": "Regions",
"settings": [
{
"type": "image_picker",
"id": "flag_image",
"label": "Flag - Upload image"
},
{
"type": "text",
"id": "region_code",
"label": "Region Code",
"info": "IP redirect - 2 digit country code - List of valid codes [Here](https://www.iban.com/country-codes)"
},
{
"type": "text",
"id": "region_name",
"label": "Region Name"
},
{
"type": "url",
"id": "region_url",
"label": "Redirect URL for Region"
},
{
"type": "checkbox",
"id": "region_active",
"label": "Display Region",
"default": true
}
]
}
]
}
{% endschema %}
/* Selectric Plugin for Region Selector Modal */
$selectric-main-color: #DDD !default; // Color used in border
$selectric-secondary-color: #BBB !default; // Color used in button
$selectric-text-color: #444 !default; // Color used in label
$selectric-bg-color: #F8F8F8 !default; // Background color
$selectric-btn-bg-color: #F8f8f8 !default; // Button background color
$selectric-height: 40px !default; // Outer height
$selectric-spacing: 10px !default; // Label left padding
$selectric-border-width: 1px !default; // Outer border width
$selectric-border-radius: 0px !default; // Border radius
$selectric-inner-height: $selectric-height - ($selectric-border-width * 2) !default; // Inner height
$selectric-font-size: 12px !default; // Font size
.selectric-wrapper {
position: relative;
cursor: pointer;
}
.selectric-responsive {
width: 100%;
}
.selectric {
border: $selectric-border-width solid $selectric-main-color;
border-radius: $selectric-border-radius;
background: $selectric-bg-color;
position: relative;
overflow: hidden;
.label {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 0 $selectric-inner-height 0 $selectric-spacing;
font-size: $selectric-font-size;
line-height: $selectric-inner-height;
color: $selectric-text-color;
height: $selectric-inner-height;
user-select: none;
}
.button {
display: block;
position: absolute;
right: 0;
top: 0;
width: $selectric-inner-height;
height: $selectric-inner-height;
line-height: $selectric-inner-height;
background-color: $selectric-btn-bg-color;
color: $selectric-secondary-color;
text-align: center;
font: 0/0 a;
*font: 20px/#{$selectric-inner-height} Lucida Sans Unicode, Arial Unicode MS, Arial;
&:after {
content: " ";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
width: 0;
height: 0;
border: 4px solid transparent;
border-top-color: $selectric-secondary-color;
border-bottom: none;
}
}
}
.selectric-focus .selectric {
border-color: darken($selectric-main-color, 20%);
}
.selectric-hover .selectric {
border-color: darken($selectric-main-color, 10%);
.button {
color: darken($selectric-secondary-color, 10%);
&:after {
border-top-color: darken($selectric-secondary-color, 10%);
}
}
}
.selectric-open {
z-index: 9999;
.selectric {
border-color: darken($selectric-main-color, 10%);
}
.selectric-items {
display: block;
}
}
.selectric-disabled {
filter: alpha(opacity=50);
opacity: 0.5;
cursor: default;
user-select: none;
}
.selectric-hide-select {
position: relative;
overflow: hidden;
width: 0;
height: 0;
select {
position: absolute;
left: -100%;
}
&.selectric-is-native {
position: absolute;
width: 100%;
height: 100%;
z-index: 10;
select {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
border: none;
z-index: 1;
box-sizing: border-box;
opacity: 0;
}
}
}
.selectric-input {
position: absolute !important;
top: 0 !important;
left: 0 !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
margin: 0 !important;
padding: 0 !important;
width: 1px !important;
height: 1px !important;
outline: none !important;
border: none !important;
*font: 0/0 a !important;
background: none !important;
}
.selectric-temp-show {
position: absolute !important;
visibility: hidden !important;
display: block !important;
}
/* Items box */
.selectric-items {
display: none;
position: absolute;
top: 100%;
left: 0;
background: $selectric-bg-color;
border: 1px solid darken($selectric-main-color, 10%);
z-index: -1;
box-shadow: 0 0 10px -6px;
.selectric-scroll {
height: 100%;
overflow: auto;
}
.selectric-above & {
top: auto;
bottom: 100%;
}
ul, li {
list-style: none;
padding: 0;
margin: 0;
font-size: $selectric-font-size;
line-height: 20px;
min-height: 20px;
}
li {
display: block;
padding: 10px;
color: #666;
cursor: pointer;
&.selected {
background: #E0E0E0;
color: #444;
}
&.highlighted {
background: #D0D0D0;
color: #444;
}
&:hover {
background: #D5D5D5;
color: #444;
}
}
.disabled {
filter: alpha(opacity=50);
opacity: 0.5;
cursor: default !important;
background: none !important;
color: #666 !important;
user-select: none;
}
.selectric-group {
.selectric-group-label {
font-weight: bold;
padding-left: 10px;
cursor: default;
user-select: none;
background: none;
color: #444;
}
&.disabled li {
filter: alpha(opacity=100);
opacity: 1;
}
li {
padding-left: 25px;
}
}
}
/* Region selector custom styling */
.region_selector__select {
.selectric {
border:1px solid rgba(0,0,0,0.5);
border-radius:3px;
margin-bottom: .5em;
background-repeat: no-repeat;
background-position: 95% 50%;
background-image: url({{ 'region_selector_select.png' | asset_img_url }});
.button {
visibility: hidden;
}
> .label {
font-weight: 700 ;
text-align: left;
.ico {
height:100%;
background-position: center;
background-size:contain;
}
}
}
.selectric-items {
li {
font-weight: 700 !important;
text-align: left;
&.selected {
background-image: url({{ 'region_selector_tick.png' | asset_img_url }});
background-position: 95% 50%;
background-repeat: no-repeat;
}
}
}
.ico {
width:31px;
height:20px;
display: inline-block;
float: left;
margin-right: 10px;
background-repeat: no-repeat;
background-size:contain;
}
}
/* ----- Region Selector - Trigger ----- */
.region_trigger {
border: 1px solid #828282;
border-radius:3px;
max-width: 75%;
margin: 0 auto;
padding: 6px 15px 6px 10px;
@include align-items(center); // align-items: center;
@include justify-content(space-between); // justify-content: space-between;
@include flexbox(); // display: flex;
@include respond-to('medium'){ //@media (max-width:798px;)
margin-bottom: 25px;
}
span {
margin-right:auto;
padding-left:10px;
font-weight:400;
color: #e7e7e7;
}
}
.region_selector__modal{
max-width:340px !important;
border-radius:5px;
box-shadow: 0 0 5px rgba(0,0,0,0.5);
.region_selector__heading {
color: #000;
font-size:18px !important;
margin-bottom: 0;
}
.region_selector__text {
font-size: 14px;
}
.region_selector__select {
}
.region_selector__button {
width:100%;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment