first commit
This commit is contained in:
72
public/js/modules/accordion.js
Normal file
72
public/js/modules/accordion.js
Normal file
@@ -0,0 +1,72 @@
|
||||
CNVS.Accordion = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-accordions', event: 'pluginAccordionsReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elState = element.attr('data-state'),
|
||||
elActive = element.attr('data-active') || 1,
|
||||
elActiveClass = element.attr('data-active-class') || '',
|
||||
elCollapsible = element.attr('data-collapsible') || 'false',
|
||||
windowHash = location.hash,
|
||||
accActive;
|
||||
|
||||
elActive = Number( elActive ) - 1;
|
||||
|
||||
if( typeof windowHash !== 'undefined' && windowHash != '' ) {
|
||||
accActive = element.find('.accordion-header'+ windowHash);
|
||||
if( accActive.length > 0 ) {
|
||||
elActive = accActive.index() / 2;
|
||||
}
|
||||
}
|
||||
|
||||
element.find('.accordion-content').hide();
|
||||
|
||||
if( elState != 'closed' ) {
|
||||
element.find('.accordion-header:eq('+ Number(elActive) +')').addClass('accordion-active ' + elActiveClass).next().show();
|
||||
}
|
||||
|
||||
element.find('.accordion-header').off( 'click' ).on( 'click', function(){
|
||||
var clickTarget = jQuery(this);
|
||||
|
||||
if( clickTarget.next().is(':hidden') ) {
|
||||
element.find('.accordion-header').removeClass('accordion-active ' + elActiveClass).next().slideUp("normal");
|
||||
clickTarget.toggleClass('accordion-active ' + elActiveClass, true).next().stop(true,true).slideDown("normal", function(){
|
||||
if( ( jQuery('body').hasClass('device-sm') || jQuery('body').hasClass('device-xs') ) && element.hasClass('scroll-on-open') ) {
|
||||
__core.scrollTo((__core.offset(clickTarget).top - __core.getVars.topScrollOffset - 40), 800, 'easeOutQuad');
|
||||
}
|
||||
|
||||
__core.runContainerModules( clickTarget.next()[0] );
|
||||
});
|
||||
} else {
|
||||
if( elCollapsible == 'true' ) {
|
||||
clickTarget.toggleClass('accordion-active ' + elActiveClass, false).next().stop(true,true).slideUp("normal");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
56
public/js/modules/adaptivecolorscheme.js
Normal file
56
public/js/modules/adaptivecolorscheme.js
Normal file
@@ -0,0 +1,56 @@
|
||||
CNVS.AdaptiveColorScheme = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-adaptivecolorscheme', event: 'pluginAdaptiveColorSchemeReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var adaptiveEl = document.querySelector('[data-adaptive-light-class],[data-adaptive-dark-class]');
|
||||
var adaptLightClass;
|
||||
var adaptDarkClass;
|
||||
|
||||
if( __core.getVars.elBody.contains(adaptiveEl) ) {
|
||||
adaptLightClass = adaptiveEl.getAttribute( 'data-adaptive-light-class' );
|
||||
adaptDarkClass = adaptiveEl.getAttribute( 'data-adaptive-dark-class' );
|
||||
}
|
||||
|
||||
var adaptClasses = function(dark) {
|
||||
if( dark ) {
|
||||
__core.getVars.elBody.classList.add( 'dark' );
|
||||
} else {
|
||||
__core.getVars.elBody.classList.remove('dark');
|
||||
}
|
||||
|
||||
if( __core.getVars.elBody.contains(adaptiveEl) ) {
|
||||
if( dark ) {
|
||||
adaptiveEl.classList.remove( adaptLightClass );
|
||||
adaptiveEl.classList.add( adaptDarkClass );
|
||||
} else {
|
||||
adaptiveEl.classList.remove( adaptDarkClass );
|
||||
adaptiveEl.classList.add( adaptLightClass );
|
||||
}
|
||||
}
|
||||
|
||||
__base.setBSTheme();
|
||||
};
|
||||
|
||||
if( window.matchMedia ) {
|
||||
adaptClasses( window.matchMedia('(prefers-color-scheme: dark)').matches );
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
|
||||
adaptClasses( e.matches );
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
}();
|
||||
160
public/js/modules/ajaxform.js
Normal file
160
public/js/modules/ajaxform.js
Normal file
@@ -0,0 +1,160 @@
|
||||
CNVS.AjaxForm = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.form.js', id: 'canvas-form-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().validate && jQuery().ajaxSubmit;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-form', event: 'pluginFormReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
$body = jQuery('body'),
|
||||
elForm = element.find('form'),
|
||||
elFormId = elForm.attr('id'),
|
||||
elAlert = element.attr('data-alert-type'),
|
||||
elLoader = element.attr('data-loader'),
|
||||
elResult = element.find('.form-result'),
|
||||
elRedirect = element.attr('data-redirect'),
|
||||
defaultBtn, alertType;
|
||||
|
||||
if( !elAlert ) {
|
||||
elAlert = 'notify';
|
||||
}
|
||||
|
||||
if( elFormId ) {
|
||||
$body.addClass( elFormId + '-ready' );
|
||||
}
|
||||
|
||||
element.find('form').validate({
|
||||
errorPlacement: function(error, elementItem) {
|
||||
if( elementItem.parents('.form-group').length > 0 ) {
|
||||
error.appendTo( elementItem.parents('.form-group') );
|
||||
} else {
|
||||
error.insertAfter( elementItem );
|
||||
}
|
||||
},
|
||||
focusCleanup: true,
|
||||
submitHandler: function(form) {
|
||||
if( element.hasClass( 'custom-submit' ) ) {
|
||||
jQuery(form).submit();
|
||||
return true;
|
||||
}
|
||||
|
||||
elResult.hide();
|
||||
|
||||
if( elLoader == 'button' ) {
|
||||
defaultBtn = jQuery(form).find('button');
|
||||
defaultBtnText = defaultBtn.html();
|
||||
|
||||
defaultBtn.html('<i class="bi-arrow-repeat icon-spin m-0"></i>');
|
||||
} else {
|
||||
jQuery(form).find('.form-process').fadeIn();
|
||||
}
|
||||
|
||||
if( elFormId ) {
|
||||
$body.removeClass( elFormId + '-ready ' + elFormId + '-complete ' + elFormId + '-success ' + elFormId + '-error' ).addClass( elFormId + '-processing' );
|
||||
}
|
||||
|
||||
jQuery(form).ajaxSubmit({
|
||||
target: elResult,
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if( elLoader == 'button' ) {
|
||||
defaultBtn.html( defaultBtnText );
|
||||
} else {
|
||||
jQuery(form).find('.form-process').fadeOut();
|
||||
}
|
||||
|
||||
if( data.alert != 'error' && elRedirect ){
|
||||
window.location.replace( elRedirect );
|
||||
return true;
|
||||
}
|
||||
|
||||
if( elAlert == 'inline' ) {
|
||||
if( data.alert == 'error' ) {
|
||||
alertType = 'alert-danger';
|
||||
} else {
|
||||
alertType = 'alert-success';
|
||||
}
|
||||
|
||||
elResult.removeClass( 'alert-danger alert-success' ).addClass( 'alert ' + alertType ).html( data.message ).slideDown( 400 );
|
||||
} else if( elAlert == 'notify' ) {
|
||||
elResult.attr( 'data-notify-type', data.alert ).attr( 'data-notify-msg', data.message ).html('');
|
||||
__modules.notifications(elResult);
|
||||
}
|
||||
|
||||
if( data.alert != 'error' ) {
|
||||
jQuery(form).resetForm();
|
||||
jQuery(form).find('.btn-group > .btn').removeClass('active');
|
||||
|
||||
if( (typeof tinyMCE != 'undefined') && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden() ){
|
||||
tinymce.activeEditor.setContent('');
|
||||
}
|
||||
|
||||
var rangeSlider = jQuery(form).find('.input-range-slider');
|
||||
if( rangeSlider.length > 0 ) {
|
||||
rangeSlider.each( function(){
|
||||
var range = jQuery(this).data('ionRangeSlider');
|
||||
range.reset();
|
||||
});
|
||||
}
|
||||
|
||||
var ratings = jQuery(form).find('.input-rating');
|
||||
if( ratings.length > 0 ) {
|
||||
ratings.each( function(){
|
||||
jQuery(this).rating('reset');
|
||||
});
|
||||
}
|
||||
|
||||
var selectPicker = jQuery(form).find('.selectpicker');
|
||||
if( selectPicker.length > 0 ) {
|
||||
selectPicker.each( function(){
|
||||
jQuery(this).selectpicker('val', '');
|
||||
jQuery(this).selectpicker('deselectAll');
|
||||
});
|
||||
}
|
||||
|
||||
jQuery(form).find('.input-select2,select[data-selectsplitter-firstselect-selector]').change();
|
||||
|
||||
jQuery(form).trigger( 'formSubmitSuccess', data );
|
||||
$body.removeClass( elFormId + '-error' ).addClass( elFormId + '-success' );
|
||||
} else {
|
||||
jQuery(form).trigger( 'formSubmitError', data );
|
||||
$body.removeClass( elFormId + '-success' ).addClass( elFormId + '-error' );
|
||||
}
|
||||
|
||||
if( elFormId ) {
|
||||
$body.removeClass( elFormId + '-processing' ).addClass( elFormId + '-complete' );
|
||||
}
|
||||
|
||||
if( jQuery(form).find('.g-recaptcha').children('div').length > 0 ) {
|
||||
grecaptcha.reset();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
104
public/js/modules/ajaxtrigger.js
Normal file
104
public/js/modules/ajaxtrigger.js
Normal file
@@ -0,0 +1,104 @@
|
||||
CNVS.AjaxTrigger = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _load = function(params) {
|
||||
fetch(params.loader).then( function(response) {
|
||||
return response.text();
|
||||
}).then( function(html) {
|
||||
_scripts(params.loadCSS, params.loadJS);
|
||||
|
||||
var domParser = new DOMParser();
|
||||
var parsedHTML = domParser.parseFromString(html, 'text/html');
|
||||
|
||||
if( params.placement == 'append' ) {
|
||||
params.container?.insertAdjacentHTML('beforeend', parsedHTML.body.innerHTML);
|
||||
} else {
|
||||
params.container?.insertAdjacentHTML('afterbegin', parsedHTML.body.innerHTML);
|
||||
}
|
||||
|
||||
if( params.triggerHide == 'true' ) {
|
||||
params.trigger.classList.add('d-none');
|
||||
}
|
||||
|
||||
__core.runContainerModules(params.container);
|
||||
__core.viewport();
|
||||
|
||||
if( params.triggerDisable == 'true' ) {
|
||||
setTimeout( function() {
|
||||
params.trigger.onclick = function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
return false;
|
||||
};
|
||||
}, 1000);
|
||||
}
|
||||
}).catch( function(err) {
|
||||
var errorDIV = document.createElement("div");
|
||||
errorDIV.classList.add( 'd-inline-block', 'text-danger', 'me-3' );
|
||||
errorDIV.innerText = 'Content Cannot be Loaded!';
|
||||
params.container?.prepend( errorDIV, ': ' + err );
|
||||
});
|
||||
};
|
||||
|
||||
var _scripts = function(loadCSS=false, loadJS=false) {
|
||||
if( loadCSS ) {
|
||||
loadCSS = JSON.parse(loadCSS);
|
||||
if( loadCSS.length > 0 ) {
|
||||
loadCSS.forEach( function(css) {
|
||||
__core.loadCSS(css);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if( loadJS ) {
|
||||
loadJS = JSON.parse(loadJS);
|
||||
if( loadJS.length > 0 ) {
|
||||
loadJS.forEach( function(js) {
|
||||
__core.loadJS(js);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-ajaxtrigger', event: 'pluginAjaxTriggerReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var params = {
|
||||
trigger: el,
|
||||
loader: el.getAttribute('data-ajax-loader'),
|
||||
triggerType: el.getAttribute('data-ajax-trigger-type') || 'click',
|
||||
loadDelay: el.getAttribute('data-ajax-load-delay') || 2222,
|
||||
container: document.querySelector( el.getAttribute('data-ajax-container') ),
|
||||
contentPlacement: el.getAttribute('data-ajax-insertion') || 'append',
|
||||
triggerHide: el.getAttribute('data-ajax-trigger-hide') || 'true',
|
||||
triggerDisable: el.getAttribute('data-ajax-trigger-disable') || 'true',
|
||||
loadCSS: el.getAttribute('data-ajax-loadcss') || false,
|
||||
loadJS: el.getAttribute('data-ajax-loadjs') || false,
|
||||
}
|
||||
|
||||
if( params.triggerType == 'load' ) {
|
||||
setTimeout( function() {
|
||||
_load(params);
|
||||
}, Number(params.loadDelay));
|
||||
} else {
|
||||
params.trigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
_load(params);
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
95
public/js/modules/animations.js
Normal file
95
public/js/modules/animations.js
Normal file
@@ -0,0 +1,95 @@
|
||||
CNVS.Animations = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-animations', event: 'pluginAnimationsReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var SELECTOR = '[data-animate]',
|
||||
ANIMATE_CLASS_NAME = 'animated';
|
||||
|
||||
var isAnimated = function(element) {
|
||||
element.classList.contains(ANIMATE_CLASS_NAME);
|
||||
};
|
||||
|
||||
var intersectionObserver = new IntersectionObserver(
|
||||
function(entries, observer) {
|
||||
entries.forEach( function(entry) {
|
||||
var element = entry.target,
|
||||
elAnimation = element.getAttribute('data-animate'),
|
||||
elAnimOut = element.getAttribute('data-animate-out'),
|
||||
elAnimDelay = element.getAttribute('data-delay'),
|
||||
elAnimDelayOut = element.getAttribute('data-delay-out'),
|
||||
elAnimDelayTime = 0,
|
||||
elAnimDelayOutTime = 3000,
|
||||
elAnimations = elAnimation.split(' ');
|
||||
|
||||
if( element.closest('.fslider.no-thumbs-animate') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( element.closest('.swiper-slide') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( elAnimDelay ) {
|
||||
elAnimDelayTime = Number( elAnimDelay ) + 500;
|
||||
} else {
|
||||
elAnimDelayTime = 500;
|
||||
}
|
||||
|
||||
if( elAnimOut && elAnimDelayOut ) {
|
||||
elAnimDelayOutTime = Number( elAnimDelayOut ) + elAnimDelayTime;
|
||||
}
|
||||
|
||||
if( !element.classList.contains('animated') ) {
|
||||
element.classList.add('not-animated');
|
||||
if( entry.intersectionRatio > 0 ) {
|
||||
setTimeout( function() {
|
||||
element.classList.remove('not-animated');
|
||||
elAnimations.forEach( function(item) {
|
||||
element.classList.add(item);
|
||||
});
|
||||
element.classList.add('animated');
|
||||
}, elAnimDelayTime);
|
||||
|
||||
if( elAnimOut ) {
|
||||
setTimeout( function() {
|
||||
elAnimations.forEach( function(item) {
|
||||
element.classList.remove(item);
|
||||
});
|
||||
|
||||
elAnimOut.split(' ').forEach( function(item) {
|
||||
element.classList.add(item);
|
||||
});
|
||||
}, elAnimDelayOutTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !element.classList.contains('not-animated') ) {
|
||||
observer.unobserve(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
var elements = [].filter.call(document.querySelectorAll(SELECTOR), function(element) {
|
||||
return !isAnimated(element, ANIMATE_CLASS_NAME);
|
||||
});
|
||||
|
||||
elements.forEach( function(element) {
|
||||
return intersectionObserver.observe(element);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
18
public/js/modules/bootstrap.js
vendored
Normal file
18
public/js/modules/bootstrap.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
CNVS.Bootstrap = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
__core.loadJS({ file: 'plugins.bootstrap.js', id: 'canvas-bootstrap-js', jsFolder: true });
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof bootstrap !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-bootstrap', event: 'pluginBootstrapReady' });
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
96
public/js/modules/bscomponents.js
Normal file
96
public/js/modules/bscomponents.js
Normal file
@@ -0,0 +1,96 @@
|
||||
CNVS.BSComponents = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.bootstrap.js', id: 'canvas-bootstrap-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof bootstrap !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-bscomponents', event: 'pluginBsComponentsReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var tooltips = [].slice.call(__core.getVars.baseEl.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
||||
var tooltipList = tooltips.map( function(tooltipEl) {
|
||||
return new bootstrap.Tooltip(tooltipEl, {container: 'body'});
|
||||
});
|
||||
|
||||
var popovers = [].slice.call(__core.getVars.baseEl.querySelectorAll('[data-bs-toggle="popover"]'));
|
||||
var popoverList = popovers.map( function(popoverEl) {
|
||||
return new bootstrap.Popover(popoverEl, {container: 'body'});
|
||||
});
|
||||
|
||||
var tabs = document.querySelectorAll('[data-bs-toggle="tab"],[data-bs-toggle="pill"]');
|
||||
|
||||
var tabTargetShow = function(target) {
|
||||
var tabTrigger = new bootstrap.Tab(target);
|
||||
tabTrigger.show();
|
||||
if( __core.getVars.hash && document.querySelector('[data-bs-target="'+__core.getVars.hash+'"]') ) {
|
||||
setTimeout( function(){
|
||||
__core.scrollTo((__core.offset(target).top - __core.getVars.topScrollOffset - 20), 0, false, 'smooth');
|
||||
}, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
document.querySelectorAll('.canvas-tabs').forEach( function(el) {
|
||||
var activeTab = el.getAttribute('data-active');
|
||||
|
||||
if( activeTab ) {
|
||||
activeTab = Number(activeTab) - 1;
|
||||
tabTargetShow(el.querySelectorAll('[data-bs-target]')[activeTab]);
|
||||
}
|
||||
});
|
||||
|
||||
document.querySelectorAll('.tab-hover').forEach( function(el) {
|
||||
el.querySelectorAll('[data-bs-target]').forEach( function(tab) {
|
||||
tab.addEventListener( 'mouseenter', function() {
|
||||
tabTargetShow(tab);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if( __core.getVars.hash && document.querySelector('[data-bs-target="'+__core.getVars.hash+'"]') ) {
|
||||
tabTargetShow(document.querySelector('[data-bs-target="'+__core.getVars.hash+'"]'));
|
||||
}
|
||||
|
||||
tabs.forEach( function(el) {
|
||||
el.addEventListener('shown.bs.tab', function(e) {
|
||||
if( !el.classList.contains('container-modules-loaded') ) {
|
||||
var tabContent = el.getAttribute('data-bs-target') ? el.getAttribute('data-bs-target') : el.getAttribute('href');
|
||||
__core.runContainerModules(document.querySelector(tabContent));
|
||||
|
||||
document.querySelector(tabContent).querySelectorAll('.flexslider').forEach( function(flex) {
|
||||
setTimeout( function() {
|
||||
jQuery(flex).find('.slide').resize();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
el.classList.add('container-modules-loaded');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('.style-msg .btn-close').forEach( function(el) {
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
el.closest( '.style-msg' ).classList.add('d-none');
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
37
public/js/modules/buttons.js
Normal file
37
public/js/modules/buttons.js
Normal file
@@ -0,0 +1,37 @@
|
||||
CNVS.Buttons = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-buttons', event: 'pluginButtonsReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el){
|
||||
var text = el.innerHTML;
|
||||
el.innerHTML = '';
|
||||
|
||||
var inner = document.createElement('div');
|
||||
inner.classList.add('button-inner');
|
||||
|
||||
var span = document.createElement('span');
|
||||
|
||||
span.innerHTML = text;
|
||||
|
||||
inner.append(span);
|
||||
|
||||
var span2 = span.cloneNode(true);
|
||||
span.after(span2);
|
||||
|
||||
el.append(inner);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
268
public/js/modules/canvasslider.js
Normal file
268
public/js/modules/canvasslider.js
Normal file
@@ -0,0 +1,268 @@
|
||||
CNVS.CanvasSlider = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.swiper.js', id: 'canvas-swiper-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof Swiper !== "undefined";
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-swiper', event: 'pluginSwiperReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
if( !element.classList.contains('swiper_wrapper') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( element.querySelectorAll('.swiper-slide').length < 1 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var elDirection = element.getAttribute('data-direction') || 'horizontal',
|
||||
elSpeed = element.getAttribute('data-speed') || 300,
|
||||
elAutoPlay = element.getAttribute('data-autoplay'),
|
||||
elAutoPlayDisableOnInteraction = element.getAttribute('data-autoplay-disable-on-interaction') || true,
|
||||
elPauseOnHover = element.getAttribute('data-hover'),
|
||||
elLoop = element.getAttribute('data-loop'),
|
||||
elStart = element.getAttribute('data-start') || 1,
|
||||
elEffect = element.getAttribute('data-effect') || 'slide',
|
||||
elGrabCursor = element.getAttribute('data-grab'),
|
||||
elParallax = element.getAttribute('data-parallax'),
|
||||
elAutoHeight = element.getAttribute('data-autoheight'),
|
||||
slideNumberTotal = element.querySelector('.slide-number-total'),
|
||||
slideNumberCurrent = element.querySelector('.slide-number-current'),
|
||||
elVideoAutoPlay = element.getAttribute('data-video-autoplay'),
|
||||
elSettings = element.getAttribute('data-settings'),
|
||||
elPagination, elPaginationClickable;
|
||||
|
||||
elAutoPlay = elAutoPlay ? Number( elAutoPlay ) : 999999999;
|
||||
elPauseOnHover = elPauseOnHover == 'true' ? true : false;
|
||||
elAutoPlayDisableOnInteraction = elAutoPlayDisableOnInteraction == 'false' ? false : true;
|
||||
elLoop = elLoop == 'true' ? true : false;
|
||||
elParallax = elParallax == 'true' ? true : false;
|
||||
elGrabCursor = elGrabCursor == 'false' ? false : true;
|
||||
elAutoHeight = elAutoHeight == 'true' ? true : false;
|
||||
elVideoAutoPlay = elVideoAutoPlay == 'false' ? false : true;
|
||||
elStart = elStart == 'random' ? Math.floor( Math.random() * element.querySelectorAll('.swiper-slide:not(.swiper-slide-duplicate)').length ) : Number( elStart ) - 1;
|
||||
|
||||
if( element.querySelector('.swiper-pagination') ) {
|
||||
elPagination = element.querySelector('.swiper-pagination');
|
||||
elPaginationClickable = true;
|
||||
} else {
|
||||
elPagination = '';
|
||||
elPaginationClickable = false;
|
||||
}
|
||||
|
||||
var elementNavNext = element.querySelector('.slider-arrow-right'),
|
||||
elementNavPrev = element.querySelector('.slider-arrow-left'),
|
||||
elementScollBar = element.querySelector('.swiper-scrollbar');
|
||||
|
||||
var cnvsSwiper = new Swiper( element.querySelector('.swiper-parent'), {
|
||||
direction: elDirection,
|
||||
speed: Number( elSpeed ),
|
||||
autoplay: {
|
||||
delay: elAutoPlay,
|
||||
pauseOnMouseEnter: elPauseOnHover,
|
||||
disableOnInteraction: elAutoPlayDisableOnInteraction
|
||||
},
|
||||
loop: elLoop,
|
||||
initialSlide: elStart,
|
||||
effect: elEffect,
|
||||
parallax: elParallax,
|
||||
slidesPerView: 1,
|
||||
grabCursor: elGrabCursor,
|
||||
autoHeight: elAutoHeight,
|
||||
pagination: {
|
||||
el: elPagination,
|
||||
clickable: elPaginationClickable
|
||||
},
|
||||
navigation: {
|
||||
prevEl: elementNavPrev,
|
||||
nextEl: elementNavNext
|
||||
},
|
||||
scrollbar: {
|
||||
el: elementScollBar
|
||||
},
|
||||
on: {
|
||||
afterInit: function(swiper) {
|
||||
__base.sliderDimensions();
|
||||
|
||||
if( element.querySelectorAll('.yt-bg-player').length > 0 ) {
|
||||
element.querySelectorAll('.yt-bg-player').forEach( function(el) {
|
||||
el.setAttribute('data-autoplay', 'false');
|
||||
el.classList.remove('customjs');
|
||||
});
|
||||
|
||||
__modules.youtubeBgVideo();
|
||||
|
||||
var activeYTVideo = jQuery('.swiper-slide-active').find('.yt-bg-player:not(.customjs)');
|
||||
activeYTVideo.on('YTPReady', function() {
|
||||
setTimeout( function() {
|
||||
activeYTVideo.filter('.mb_YTPlayer').YTPPlay();
|
||||
}, 1200);
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('.swiper-slide-active [data-animate]').forEach( function(el) {
|
||||
var toAnimateDelay = el.getAttribute('data-delay'),
|
||||
toAnimateDelayTime = 0;
|
||||
|
||||
if( toAnimateDelay ) {
|
||||
toAnimateDelayTime = Number( toAnimateDelay ) + 750;
|
||||
} else {
|
||||
toAnimateDelayTime = 750;
|
||||
}
|
||||
|
||||
if( !el.classList.contains('animated') ) {
|
||||
el.classList.add('not-animated');
|
||||
|
||||
var elementAnimation = el.getAttribute('data-animate');
|
||||
|
||||
setTimeout( function() {
|
||||
el.classList.remove('not-animated');
|
||||
|
||||
( elementAnimation + ' animated').split(" ").forEach( function(_class) {
|
||||
el.classList.add(_class);
|
||||
});
|
||||
}, toAnimateDelayTime);
|
||||
}
|
||||
});
|
||||
|
||||
element.querySelectorAll('[data-animate]').forEach( function(el) {
|
||||
var elementAnimation = el.getAttribute('data-animate');
|
||||
|
||||
if( el.closest('.swiper-slide').classList.contains('swiper-slide-active') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
( elementAnimation + ' animated').split(" ").forEach( function(_class) {
|
||||
el.classList.remove(_class);
|
||||
});
|
||||
|
||||
el.classList.add('not-animated');
|
||||
});
|
||||
|
||||
if( elAutoHeight ) {
|
||||
setTimeout( function() {
|
||||
swiper.updateAutoHeight(300);
|
||||
}, 1000);
|
||||
}
|
||||
},
|
||||
transitionStart: function(swiper) {
|
||||
element.querySelectorAll('[data-animate]').forEach( function(el) {
|
||||
var elementAnimation = el.getAttribute('data-animate');
|
||||
|
||||
if( el.closest('.swiper-slide').classList.contains('swiper-slide-active') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
( elementAnimation + ' animated').split(" ").forEach( function(_class) {
|
||||
el.classList.remove(_class);
|
||||
});
|
||||
|
||||
el.classList.add('not-animated');
|
||||
});
|
||||
|
||||
SEMICOLON.Base.sliderMenuClass();
|
||||
},
|
||||
transitionEnd: function(swiper) {
|
||||
if( slideNumberCurrent ){
|
||||
if( elLoop == true ) {
|
||||
slideNumberCurrent.innerHTML = Number( element.querySelector('.swiper-slide.swiper-slide-active').getAttribute('data-swiper-slide-index') ) + 1;
|
||||
} else {
|
||||
slideNumberCurrent.innerHTML = swiper.activeIndex + 1;
|
||||
}
|
||||
}
|
||||
|
||||
element.querySelectorAll('.swiper-slide').forEach( function(slide) {
|
||||
if( slide.querySelector('video') && elVideoAutoPlay == true ) {
|
||||
slide.querySelector('video').pause();
|
||||
}
|
||||
|
||||
if( slide.querySelector('.yt-bg-player.mb_YTPlayer:not(.customjs)') ) {
|
||||
jQuery(slide).find('.yt-bg-player.mb_YTPlayer:not(.customjs)').YTPPause();
|
||||
}
|
||||
});
|
||||
|
||||
element.querySelectorAll('.swiper-slide:not(.swiper-slide-active)').forEach( function(slide) {
|
||||
if( slide.querySelector('video') ) {
|
||||
if( slide.querySelector('video').currentTime != 0 ) {
|
||||
slide.querySelector('video').currentTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
var activeYTPlayer = slide.querySelector('.yt-bg-player.mb_YTPlayer:not(.customjs)');
|
||||
|
||||
if( activeYTPlayer ) {
|
||||
jQuery(activeYTPlayer).YTPSeekTo( activeYTPlayer.getAttribute('data-start') );
|
||||
}
|
||||
});
|
||||
|
||||
if( element.querySelector('.swiper-slide.swiper-slide-active').querySelector('video') && elVideoAutoPlay == true ) {
|
||||
element.querySelector('.swiper-slide.swiper-slide-active').querySelector('video').play();
|
||||
}
|
||||
|
||||
if( element.querySelector('.swiper-slide.swiper-slide-active').querySelector('.yt-bg-player.mb_YTPlayer:not(.customjs)') && elVideoAutoPlay == true ) {
|
||||
jQuery(element).find('.swiper-slide.swiper-slide-active').find('.yt-bg-player.mb_YTPlayer:not(.customjs)').YTPPlay();
|
||||
}
|
||||
|
||||
element.querySelectorAll('.swiper-slide.swiper-slide-active [data-animate]').forEach( function(el) {
|
||||
var toAnimateDelay = el.getAttribute('data-delay'),
|
||||
toAnimateDelayTime = 0;
|
||||
|
||||
if( toAnimateDelay ) {
|
||||
toAnimateDelayTime = Number( toAnimateDelay ) + 300;
|
||||
} else {
|
||||
toAnimateDelayTime = 300;
|
||||
}
|
||||
|
||||
if( !el.classList.contains('animated') ) {
|
||||
el.classList.add('not-animated');
|
||||
|
||||
var elementAnimation = el.getAttribute('data-animate');
|
||||
|
||||
setTimeout( function() {
|
||||
el.classList.remove('not-animated');
|
||||
|
||||
( elementAnimation + ' animated').split(" ").forEach( function(_class) {
|
||||
el.classList.add(_class);
|
||||
});
|
||||
}, toAnimateDelayTime);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if( slideNumberCurrent ) {
|
||||
if( elLoop == true ) {
|
||||
slideNumberCurrent.innerHTML = cnvsSwiper.realIndex + 1;
|
||||
} else {
|
||||
slideNumberCurrent.innerHTML = cnvsSwiper.activeIndex + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( slideNumberTotal ) {
|
||||
slideNumberTotal.innerHTML = element.querySelectorAll('.swiper-slide:not(.swiper-slide-duplicate)').length;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
138
public/js/modules/carousel.js
Normal file
138
public/js/modules/carousel.js
Normal file
@@ -0,0 +1,138 @@
|
||||
CNVS.Carousel = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.carousel.js', id: 'canvas-carousel-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().owlCarousel;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-carousel', event: 'pluginCarouselReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elItems = element.attr('data-items') || 4,
|
||||
elItemsXs = element.attr('data-items-xs') || Number( elItems ),
|
||||
elItemsSm = element.attr('data-items-sm') || Number( elItemsXs ),
|
||||
elItemsMd = element.attr('data-items-md') || Number( elItemsSm ),
|
||||
elItemsLg = element.attr('data-items-lg') || Number( elItemsMd ),
|
||||
elItemsXl = element.attr('data-items-xl') || Number( elItemsLg ),
|
||||
elItemsXxl = element.attr('data-items-xxl') || Number( elItemsXl ),
|
||||
elLoop = element.attr('data-loop'),
|
||||
elAutoPlay = element.attr('data-autoplay'),
|
||||
elSpeed = element.attr('data-speed') || 250,
|
||||
elAnimateIn = element.attr('data-animate-in'),
|
||||
elAnimateOut = element.attr('data-animate-out'),
|
||||
elAutoWidth = element.attr('data-auto-width'),
|
||||
elNav = element.attr('data-nav'),
|
||||
elNavPrev = element.attr('data-nav-prev') || '<i class="uil uil-angle-left-b"></i>',
|
||||
elNavNext = element.attr('data-nav-next') || '<i class="uil uil-angle-right-b"></i>',
|
||||
elPagi = element.attr('data-pagi'),
|
||||
elMargin = element.attr('data-margin') || 20,
|
||||
elStage = element.attr('data-stage-padding') || 0,
|
||||
elMerge = element.attr('data-merge'),
|
||||
elStart = element.attr('data-start') || 0,
|
||||
elRewind = element.attr('data-rewind'),
|
||||
elSlideBy = element.attr('data-slideby') || 1,
|
||||
elCenter = element.attr('data-center'),
|
||||
elLazy = element.attr('data-lazyload'),
|
||||
elVideo = element.attr('data-video'),
|
||||
elRTL = element.attr('data-rtl'),
|
||||
elAutoPlayTime = 5000,
|
||||
elAutoPlayHoverP = true;
|
||||
|
||||
if( elSlideBy == 'page' ) {
|
||||
elSlideBy = 'page';
|
||||
} else {
|
||||
elSlideBy = Number(elSlideBy);
|
||||
}
|
||||
|
||||
if( elLoop == 'true' ){ elLoop = true; } else { elLoop = false; }
|
||||
if( !elAutoPlay ){
|
||||
elAutoPlay = false;
|
||||
elAutoPlayHoverP = false;
|
||||
} else {
|
||||
elAutoPlayTime = Number(elAutoPlay);
|
||||
elAutoPlay = true;
|
||||
}
|
||||
if( !elAnimateIn ) { elAnimateIn = false; }
|
||||
if( !elAnimateOut ) { elAnimateOut = false; }
|
||||
if( elAutoWidth == 'true' ){ elAutoWidth = true; } else { elAutoWidth = false; }
|
||||
if( elNav == 'false' ){ elNav = false; } else { elNav = true; }
|
||||
if( elPagi == 'false' ){ elPagi = false; } else { elPagi = true; }
|
||||
if( elRewind == 'true' ){ elRewind = true; } else { elRewind = false; }
|
||||
if( elMerge == 'true' ){ elMerge = true; } else { elMerge = false; }
|
||||
if( elCenter == 'true' ){ elCenter = true; } else { elCenter = false; }
|
||||
if( elLazy == 'true' ){ elLazy = true; } else { elLazy = false; }
|
||||
if( elVideo == 'true' ){ elVideo = true; } else { elVideo = false; }
|
||||
if( elRTL == 'true' || jQuery('body').hasClass('rtl') ){ elRTL = true; } else { elRTL = false; }
|
||||
|
||||
var carousel = element.owlCarousel({
|
||||
margin: Number(elMargin),
|
||||
loop: elLoop,
|
||||
stagePadding: Number(elStage),
|
||||
merge: elMerge,
|
||||
startPosition: Number(elStart),
|
||||
rewind: elRewind,
|
||||
slideBy: elSlideBy,
|
||||
center: elCenter,
|
||||
lazyLoad: elLazy,
|
||||
autoWidth: elAutoWidth,
|
||||
nav: elNav,
|
||||
navText: [elNavPrev,elNavNext],
|
||||
autoplay: elAutoPlay,
|
||||
autoplayTimeout: elAutoPlayTime,
|
||||
autoplayHoverPause: elAutoPlayHoverP,
|
||||
dots: elPagi,
|
||||
smartSpeed: Number(elSpeed),
|
||||
fluidSpeed: Number(elSpeed),
|
||||
video: elVideo,
|
||||
animateIn: elAnimateIn,
|
||||
animateOut: elAnimateOut,
|
||||
rtl: elRTL,
|
||||
responsive:{
|
||||
0:{ items: elItemsXs },
|
||||
576:{ items: elItemsSm },
|
||||
768:{ items: elItemsMd },
|
||||
992:{ items: elItemsLg },
|
||||
1200:{ items: elItemsXl },
|
||||
1400:{ items: elItemsXxl }
|
||||
},
|
||||
onInitialized: function(){
|
||||
__base.sliderDimensions(element.parents('.slider-element')[0]);
|
||||
__core.runContainerModules(element[0]);
|
||||
|
||||
if( element.find('.owl-dot').length > 0 ) {
|
||||
element.addClass('with-carousel-dots');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
jQuery(window).on( 'lazyLoadLoaded', function(){
|
||||
if( element.find('.lazy').length == element.find('.lazy.lazy-loaded').length ) {
|
||||
lazyLoadInstance.update();
|
||||
setTimeout( function(){
|
||||
carousel.trigger( 'refresh.owl.carousel' );
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
56
public/js/modules/clipboard.js
Normal file
56
public/js/modules/clipboard.js
Normal file
@@ -0,0 +1,56 @@
|
||||
CNVS.Clipboard = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.clipboard.js', id: 'canvas-clipboard-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof ClipboardJS !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-clipboard', event: 'pluginClipboardReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var clipboards = [],
|
||||
count = 0;
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var trigger = el.querySelector('button'),
|
||||
triggerText = trigger.innerHTML,
|
||||
copiedtext = trigger.getAttribute('data-copied') || 'Copied',
|
||||
copiedTimeout = trigger.getAttribute('data-copied-timeout') || 5000;
|
||||
|
||||
clipboards[count] = new ClipboardJS( trigger, {
|
||||
target: function(content) {
|
||||
return content.closest('.clipboard-copy').querySelector('code');
|
||||
}
|
||||
});
|
||||
|
||||
clipboards[count].on('success', function(e) {
|
||||
trigger.innerHTML = copiedtext;
|
||||
trigger.disabled = true;
|
||||
|
||||
setTimeout( function() {
|
||||
trigger.innerHTML = triggerText;
|
||||
trigger.disabled = false;
|
||||
}, Number(copiedTimeout));
|
||||
});
|
||||
|
||||
count++;
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
33
public/js/modules/codehighlight.js
Normal file
33
public/js/modules/codehighlight.js
Normal file
@@ -0,0 +1,33 @@
|
||||
CNVS.CodeHighlight = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadCSS({ file: 'components/prism.css', id: 'canvas-prism-css', cssFolder: true });
|
||||
__core.loadJS({ file: 'plugins.prism.js', id: 'canvas-prism-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof Prism !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-codehighlight', event: 'pluginCodeHighlightReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
Prism.highlightElement( el.querySelector('code') );
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
161
public/js/modules/conditional.js
Normal file
161
public/js/modules/conditional.js
Normal file
@@ -0,0 +1,161 @@
|
||||
CNVS.Conditional = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _eval = function(field, value, conditions, check, target) {
|
||||
if( ! field || ! conditions ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var fulfilled = false;
|
||||
|
||||
if( check == 'validate' ) {
|
||||
if( value ) {
|
||||
if ( target.getAttribute('aria-invalid') == 'false' ) {
|
||||
fulfilled = true;
|
||||
} else {
|
||||
fulfilled = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch( conditions.operator ) {
|
||||
case '==':
|
||||
if( value == conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '!=':
|
||||
if( value != conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if( value > conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '<':
|
||||
if( value < conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '<=':
|
||||
if( value <= conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>=':
|
||||
if( value >= conditions.value ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'in':
|
||||
if( conditions.value.includes( value ) ) {
|
||||
fulfilled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fulfilled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( fulfilled ) {
|
||||
field.classList.add('condition-fulfilled');
|
||||
field.querySelectorAll('input,select,textarea,button').forEach( function(el) {
|
||||
el.disabled = false;
|
||||
});
|
||||
} else {
|
||||
field.classList.remove('condition-fulfilled');
|
||||
field.querySelectorAll('input,select,textarea,button').forEach( function(el) {
|
||||
el.disabled = true;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-conditional', event: 'pluginConditionalReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var field = el,
|
||||
condition = field.getAttribute( 'data-condition' ) || '==',
|
||||
conditionTarget = field.getAttribute( 'data-condition-target' ),
|
||||
conditionValue = field.getAttribute( 'data-condition-value' ),
|
||||
conditionCheck = field.getAttribute( 'data-condition-check' ) || 'value',
|
||||
target = document.querySelector('[id*="'+conditionTarget+'"]'),
|
||||
value = target.value,
|
||||
targetType = target.type,
|
||||
eventType;
|
||||
|
||||
var conditions = {
|
||||
operator: condition,
|
||||
field: conditionTarget,
|
||||
value: conditionValue
|
||||
}
|
||||
|
||||
var targetTag = target.tagName.toLowerCase();
|
||||
|
||||
if( targetType == 'checkbox' || targetTag == 'select' || targetType == 'radio' ) {
|
||||
eventType = 'change';
|
||||
} else {
|
||||
eventType = 'input';
|
||||
}
|
||||
|
||||
if( targetType == 'checkbox' ) {
|
||||
value = target.checked ? target.value : 0;
|
||||
}
|
||||
|
||||
if( targetType == 'radio' ) {
|
||||
value = target.checked ? target.value : '';
|
||||
}
|
||||
|
||||
_eval(field, value, conditions, conditionCheck, target);
|
||||
|
||||
target.addEventListener( eventType, function() {
|
||||
if( targetType == 'checkbox' ) {
|
||||
value = target.checked ? target.value : 0;
|
||||
} else if( targetType == 'radio' ) {
|
||||
value = target.checked ? target.value : '';
|
||||
} else {
|
||||
value = target.value;
|
||||
}
|
||||
|
||||
_eval(field, value, conditions, conditionCheck, target);
|
||||
});
|
||||
|
||||
if( conditionCheck == 'validate' ) {
|
||||
var mutationObserver = new MutationObserver( function(mutations) {
|
||||
mutations.forEach( function(mutation) {
|
||||
_eval(field, value, conditions, conditionCheck, target);
|
||||
});
|
||||
});
|
||||
|
||||
mutationObserver.observe( target, {
|
||||
attributes: true,
|
||||
characterData: true,
|
||||
childList: true,
|
||||
subtree: true,
|
||||
attributeOldValue: true,
|
||||
characterDataOldValue: true
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
200
public/js/modules/cookies.js
Normal file
200
public/js/modules/cookies.js
Normal file
@@ -0,0 +1,200 @@
|
||||
CNVS.Cookies = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _resetPage = function(btn) {
|
||||
if( !btn.closest('#gdpr-preferences') ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setTimeout( function() {
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-cookie', event: 'pluginCookieReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var cookieBar = document.querySelector('.gdpr-settings'),
|
||||
elSpeed = cookieBar?.getAttribute('data-speed') || 300,
|
||||
elExpire = cookieBar?.getAttribute('data-expire') || 30,
|
||||
elDelay = cookieBar?.getAttribute('data-delay') || 1500,
|
||||
elPersist = cookieBar?.getAttribute('data-persistent'),
|
||||
elDirection = 'bottom',
|
||||
elHeight = cookieBar?.offsetHeight + 100,
|
||||
elWidth = cookieBar?.offsetWidth + 100,
|
||||
elSize,
|
||||
elSettings = document.querySelector('.gdpr-cookie-settings'),
|
||||
elSwitches = elSettings?.querySelectorAll('[data-cookie-name]');
|
||||
|
||||
if( !cookieBar && !elSettings ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( elPersist == 'true' ) {
|
||||
__core.cookie.set('__cnvs_cookies_accept', '');
|
||||
__core.cookie.remove('__cnvs_cookies_decline');
|
||||
}
|
||||
|
||||
if( cookieBar ) {
|
||||
if( cookieBar?.classList.contains('gdpr-settings-sm') && cookieBar?.classList.contains('gdpr-settings-right') ) {
|
||||
elDirection = 'right';
|
||||
} else if( cookieBar?.classList.contains('gdpr-settings-sm') ) {
|
||||
elDirection = 'left';
|
||||
}
|
||||
|
||||
if( elDirection == 'left' ) {
|
||||
elSize = -elWidth;
|
||||
cookieBar.style.right = 'auto';
|
||||
cookieBar.style.marginLeft = '1rem';
|
||||
} else if( elDirection == 'right' ) {
|
||||
elSize = -elWidth;
|
||||
cookieBar.style.left = 'auto';
|
||||
cookieBar.style.marginRight = '1rem';
|
||||
} else {
|
||||
elSize = -elHeight;
|
||||
}
|
||||
|
||||
cookieBar.style[elDirection] = elSize + 'px';
|
||||
|
||||
if( __core.cookie.get('__cnvs_cookies_accept') != '1' ) {
|
||||
setTimeout( function() {
|
||||
cookieBar.style.display = 'block';
|
||||
cookieBar.style.pointerEvents = 'auto';
|
||||
cookieBar.style[elDirection] = 0;
|
||||
cookieBar.style.opacity = 1;
|
||||
}, Number( elDelay ) );
|
||||
}
|
||||
}
|
||||
|
||||
var gdprAcceptBtn = document.querySelectorAll('.gdpr-accept'),
|
||||
gdprDeclineBtn = document.querySelectorAll('.gdpr-decline'),
|
||||
gdprSaveCookies = document.querySelectorAll('.gdpr-save-cookies');
|
||||
|
||||
if( gdprAcceptBtn.length > 0 ) {
|
||||
gdprAcceptBtn.forEach( function(btn){
|
||||
btn.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if( cookieBar ) {
|
||||
cookieBar.style[elDirection] = elSize + 'px';
|
||||
cookieBar.style.opacity = 0;
|
||||
cookieBar.ontransitionend = function() {
|
||||
cookieBar.style.display = 'none';
|
||||
cookieBar.style.pointerEvents = 'none';
|
||||
};
|
||||
}
|
||||
|
||||
__core.cookie.set('__cnvs_cookies_accept', '1', elExpire);
|
||||
__core.cookie.set('__cnvs_cookies_decline', '0', elExpire);
|
||||
|
||||
_resetPage(btn);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
if( gdprDeclineBtn.length > 0 ) {
|
||||
gdprDeclineBtn.forEach( function(btn){
|
||||
btn.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if( cookieBar ) {
|
||||
cookieBar.style[elDirection] = elSize + 'px';
|
||||
cookieBar.style.opacity = 0;
|
||||
cookieBar.ontransitionend = function() {
|
||||
cookieBar.style.display = 'none';
|
||||
cookieBar.style.pointerEvents = 'none';
|
||||
};
|
||||
}
|
||||
|
||||
__core.cookie.set('__cnvs_cookies_accept', '0', elExpire);
|
||||
__core.cookie.set('__cnvs_cookies_decline', '1', elExpire);
|
||||
|
||||
_resetPage(btn);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
var acceptCookies = __core.cookie.get('__cnvs_cookies_accept'),
|
||||
declineCookies = __core.cookie.get('__cnvs_cookies_decline'),
|
||||
cookiesAllowed = (acceptCookies || acceptCookies != '0') && (!declineCookies || declineCookies != '1');
|
||||
|
||||
elSwitches?.forEach( function(el) {
|
||||
var elCookie = '__cnvs_gdpr_' + el.getAttribute('data-cookie-name'),
|
||||
getCookie = __core.cookie.get(elCookie);
|
||||
|
||||
if( typeof getCookie !== 'undefined' && getCookie == '1' && cookiesAllowed ) {
|
||||
el.checked = true;
|
||||
} else {
|
||||
el.checked = false;
|
||||
}
|
||||
});
|
||||
|
||||
if( gdprSaveCookies.length > 0 ) {
|
||||
gdprSaveCookies.forEach( function(btn){
|
||||
btn.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.cookie.set('__cnvs_cookies_accept', '1', elExpire);
|
||||
__core.cookie.set('__cnvs_cookies_decline', '0', elExpire);
|
||||
|
||||
elSwitches.forEach( function(el) {
|
||||
var elCookie = '__cnvs_gdpr_' + el.getAttribute( 'data-cookie-name' );
|
||||
|
||||
if( el.checked == true ) {
|
||||
__core.cookie.set(elCookie, '1', elExpire);
|
||||
} else {
|
||||
__core.cookie.remove(elCookie, '');
|
||||
}
|
||||
});
|
||||
|
||||
if( elSettings.closest( '.mfp-content' ).length > 0 ) {
|
||||
jQuery$.magnificPopup.close();
|
||||
}
|
||||
|
||||
_resetPage(btn);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('.gdpr-container')?.forEach( function(element) {
|
||||
var elCookie = '__cnvs_gdpr_' + element.getAttribute('data-cookie-name'),
|
||||
elContent = element.getAttribute('data-cookie-content'),
|
||||
elContentAjax = element.getAttribute('data-cookie-content-ajax'),
|
||||
getCookie = __core.cookie.get(elCookie);
|
||||
|
||||
if( typeof getCookie !== 'undefined' && getCookie == '1' && cookiesAllowed ) {
|
||||
element.classList.add('gdpr-content-active');
|
||||
if( elContentAjax ) {
|
||||
fetch( elContentAjax ).then( function(response) {
|
||||
return response.text();
|
||||
}).then( function(html) {
|
||||
var domParser = new DOMParser();
|
||||
var parsedHTML = domParser.parseFromString(html, 'text/html');
|
||||
|
||||
element?.insertAdjacentHTML('beforeend', parsedHTML.body.innerHTML);
|
||||
}).catch( function(err) {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
if( elContent ) {
|
||||
element.innerHTML += elContent;
|
||||
}
|
||||
}
|
||||
__core.runContainerModules(element);
|
||||
} else {
|
||||
element.classList.add('gdpr-content-blocked');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
95
public/js/modules/countdown.js
Normal file
95
public/js/modules/countdown.js
Normal file
@@ -0,0 +1,95 @@
|
||||
CNVS.Countdown = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.countdown.js', id: 'canvas-countdown-js', jsFolder: true });
|
||||
__core.loadJS({ file: 'components/moment.js', id: 'canvas-moment-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof moment !== "undefined" && jQuery().countdown;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-countdown', event: 'pluginCountdownReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elFormat = element.attr( 'data-format' ) || 'dHMS',
|
||||
elSince = element.attr( 'data-since' ),
|
||||
elYear = element.attr( 'data-year' ),
|
||||
elMonth = element.attr( 'data-month' ),
|
||||
elDay = element.attr( 'data-day' ),
|
||||
elHour = element.attr( 'data-hour' ),
|
||||
elMin = element.attr( 'data-minute' ),
|
||||
elSec = element.attr( 'data-second' ),
|
||||
elRedirect = element.attr( 'data-redirect' ),
|
||||
dateFormat, setDate;
|
||||
|
||||
if( elYear ){
|
||||
dateFormat = elYear;
|
||||
}
|
||||
|
||||
if( elMonth && elMonth < 13 ){
|
||||
dateFormat = dateFormat +"-"+ ( elMonth < 10 ? '0'+elMonth : elMonth);
|
||||
} else {
|
||||
if( elYear ) {
|
||||
dateFormat = dateFormat +"-01";
|
||||
}
|
||||
}
|
||||
|
||||
if( elDay && elDay < 32 ){
|
||||
dateFormat = dateFormat +"-"+ ( elDay < 10 ? '0'+elDay : elDay);
|
||||
} else {
|
||||
if( elYear ) {
|
||||
dateFormat = dateFormat +"-01";
|
||||
}
|
||||
}
|
||||
|
||||
setDate = dateFormat != '' ? new Date( moment( dateFormat ) ) : new Date();
|
||||
|
||||
if( elHour && elHour < 25 ){
|
||||
setDate.setHours( setDate.getHours() + Number( elHour ) );
|
||||
}
|
||||
|
||||
if( elMin && elMin < 60 ){
|
||||
setDate.setMinutes( setDate.getMinutes() + Number( elMin ) );
|
||||
}
|
||||
|
||||
if( elSec && elSec < 60 ){
|
||||
setDate.setSeconds( setDate.getSeconds() + Number( elSec ) );
|
||||
}
|
||||
|
||||
if( !elRedirect ) {
|
||||
elRedirect = false;
|
||||
}
|
||||
|
||||
if( elSince == 'true' ) {
|
||||
element.countdown({
|
||||
since: setDate,
|
||||
format: elFormat,
|
||||
expiryUrl: elRedirect,
|
||||
});
|
||||
} else {
|
||||
element.countdown({
|
||||
until: setDate,
|
||||
format: elFormat,
|
||||
expiryUrl: elRedirect,
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
74
public/js/modules/counter.js
Normal file
74
public/js/modules/counter.js
Normal file
@@ -0,0 +1,74 @@
|
||||
CNVS.Counter = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _run = function(elCounter, elFormat) {
|
||||
if( elFormat.comma == 'true' ) {
|
||||
var reFormat = '\\B(?=(\\d{'+ elFormat.places +'})+(?!\\d))',
|
||||
regExp = new RegExp( reFormat, "g" );
|
||||
|
||||
elCounter.find('span').countTo({
|
||||
formatter: function(value, options) {
|
||||
value = value.toFixed( options.decimals );
|
||||
value = value.replace( regExp, elFormat.sep );
|
||||
return value;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
elCounter.find('span').countTo();
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.counter.js', id: 'canvas-counter-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().countTo;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-counter', event: 'pluginCounterReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each(function(){
|
||||
var element = jQuery(this),
|
||||
elComma = element.find('span').attr('data-comma'),
|
||||
elSep = element.find('span').attr('data-sep') || ',',
|
||||
elPlaces = element.find('span').attr('data-places') || 3;
|
||||
|
||||
var elCommaObj = {
|
||||
comma: elComma,
|
||||
sep: elSep,
|
||||
places: Number( elPlaces )
|
||||
}
|
||||
|
||||
if( element.hasClass('counter-instant') ) {
|
||||
_run(element, elCommaObj);
|
||||
return;
|
||||
}
|
||||
|
||||
var observer = new IntersectionObserver( function(entries, observer) {
|
||||
entries.forEach( function(entry) {
|
||||
if (entry.isIntersecting) {
|
||||
_run(element, elCommaObj);
|
||||
observer.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
}, {rootMargin: '0px 0px 50px'});
|
||||
|
||||
observer.observe( element[0] );
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
59
public/js/modules/cursor.js
Normal file
59
public/js/modules/cursor.js
Normal file
@@ -0,0 +1,59 @@
|
||||
CNVS.Cursor = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
__core.initFunction({ class: 'has-plugin-cursor', event: 'pluginCursorReady' });
|
||||
|
||||
var cursor = document.querySelector('.cnvs-cursor');
|
||||
var cursorFollower = document.querySelector('.cnvs-cursor-follower');
|
||||
var cursorDot = document.querySelector('.cnvs-cursor-dot');
|
||||
|
||||
var addCursorEl = function(selector, parent) {
|
||||
var el = document.createElement('div');
|
||||
el.classList.add(selector.split('.')[1]);
|
||||
|
||||
parent.prepend( el );
|
||||
return document.querySelector(selector);
|
||||
};
|
||||
|
||||
if( !cursor ) {
|
||||
cursor = addCursorEl('.cnvs-cursor', __core.getVars.elWrapper);
|
||||
}
|
||||
|
||||
if( !cursorFollower ) {
|
||||
cursorFollower = addCursorEl('.cnvs-cursor-follower', cursor);
|
||||
}
|
||||
|
||||
if( !cursorDot ) {
|
||||
cursorDot = addCursorEl('.cnvs-cursor-dot', cursor);
|
||||
}
|
||||
|
||||
var onMouseMove = function(event) {
|
||||
cursor.style.transform = "translate3d("+ event.clientX + 'px'+","+event.clientY+'px'+",0px)";
|
||||
}
|
||||
|
||||
document.addEventListener('mousemove', onMouseMove);
|
||||
|
||||
document.querySelectorAll('a,button').forEach( function(el) {
|
||||
el.addEventListener('mouseenter', function() {
|
||||
cursor.classList.add('cnvs-cursor-action');
|
||||
});
|
||||
|
||||
el.addEventListener('mouseleave', function() {
|
||||
cursor.classList.remove('cnvs-cursor-action');
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('.cursor-disable').forEach( function(el) {
|
||||
el.addEventListener('mouseenter', function() {
|
||||
cursor.classList.add('cnvs-cursor-disabled');
|
||||
});
|
||||
|
||||
el.addEventListener('mouseleave', function() {
|
||||
cursor.classList.remove('cnvs-cursor-disabled');
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
41
public/js/modules/dataclasses.js
Normal file
41
public/js/modules/dataclasses.js
Normal file
@@ -0,0 +1,41 @@
|
||||
CNVS.DataClasses = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-dataclasses', event: 'pluginDataClassesReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var classes = el.getAttribute('data-class');
|
||||
|
||||
classes = classes.split(/ +/);
|
||||
if( classes.length > 0 ) {
|
||||
classes.forEach( function(_class) {
|
||||
var deviceClass = _class.split(":");
|
||||
if( __core.getVars.elBody.classList.contains(deviceClass[0] == 'dark' ? deviceClass[0] : 'device-' + deviceClass[0]) ) {
|
||||
el.classList.add(deviceClass[1]);
|
||||
} else {
|
||||
el.classList.remove(deviceClass[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
__core.getVars.resizers.dataClasses = function() {
|
||||
setTimeout( function() {
|
||||
__modules.dataClasses();
|
||||
}, 333);
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
52
public/js/modules/dataheights.js
Normal file
52
public/js/modules/dataheights.js
Normal file
@@ -0,0 +1,52 @@
|
||||
CNVS.DataHeights = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-dataheights', event: 'pluginDataHeightsReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var heightXs = el.getAttribute('data-height-xs') || 'auto',
|
||||
heightSm = el.getAttribute('data-height-sm') || heightXs,
|
||||
heightMd = el.getAttribute('data-height-md') || heightSm,
|
||||
heightLg = el.getAttribute('data-height-lg') || heightMd,
|
||||
heightXl = el.getAttribute('data-height-xl') || heightLg,
|
||||
heightXxl = el.getAttribute('data-height-xxl') || heightXl,
|
||||
body = __core.getVars.elBody.classList,
|
||||
elHeight;
|
||||
|
||||
if( body.contains('device-xs') ) {
|
||||
elHeight = heightXs;
|
||||
} else if( body.contains('device-sm') ) {
|
||||
elHeight = heightSm;
|
||||
} else if( body.contains('device-md') ) {
|
||||
elHeight = heightMd;
|
||||
} else if( body.contains('device-lg') ) {
|
||||
elHeight = heightLg;
|
||||
} else if( body.contains('device-xl') ) {
|
||||
elHeight = heightXl;
|
||||
} else if( body.contains('device-xxl') ) {
|
||||
elHeight = heightXxl;
|
||||
}
|
||||
|
||||
if( elHeight ) {
|
||||
el.style.height = !isNaN( elHeight ) ? elHeight + 'px' : elHeight;
|
||||
}
|
||||
});
|
||||
|
||||
__core.getVars.resizers.dataHeights = function() {
|
||||
__modules.dataHeights();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
18
public/js/modules/easing.js
Normal file
18
public/js/modules/easing.js
Normal file
@@ -0,0 +1,18 @@
|
||||
CNVS.Easing = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
__core.loadJS({ file: 'plugins.easing.js', id: 'canvas-easing-js', jsFolder: true });
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof jQuery.easing["easeOutQuad"] !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-easing', event: 'pluginEasingReady' });
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
78
public/js/modules/filter.js
Normal file
78
public/js/modules/filter.js
Normal file
@@ -0,0 +1,78 @@
|
||||
CNVS.Filter = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof Isotope !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-isotope-filter', event: 'pluginGridFilterReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function() {
|
||||
var element = jQuery(this),
|
||||
elCon = element.attr('data-container'),
|
||||
elActClass = element.attr('data-active-class'),
|
||||
elDefFilter = element.attr('data-default');
|
||||
|
||||
if( !elActClass ) {
|
||||
elActClass = 'activeFilter';
|
||||
}
|
||||
|
||||
if( !jQuery(elCon).hasClass('grid-container') ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
element.find('a').off( 'click' ).on( 'click', function(){
|
||||
element.find('li').removeClass( elActClass );
|
||||
jQuery(this).parent('li').addClass( elActClass );
|
||||
var selector = jQuery(this).attr('data-filter');
|
||||
jQuery(elCon).isotope({ filter: selector });
|
||||
return false;
|
||||
});
|
||||
|
||||
if( elDefFilter ) {
|
||||
element.find('li').removeClass( elActClass );
|
||||
element.find('[data-filter="'+ elDefFilter +'"]').parent('li').addClass( elActClass );
|
||||
jQuery(elCon).isotope({ filter: elDefFilter });
|
||||
}
|
||||
|
||||
jQuery(elCon).on( 'arrangeComplete layoutComplete', function(event, filteredItems) {
|
||||
jQuery(elCon).addClass('grid-container-filterable');
|
||||
if( jQuery(elCon).attr('data-lightbox') == 'gallery' ) {
|
||||
jQuery(elCon).find("[data-lightbox]").removeClass('grid-lightbox-filtered');
|
||||
filteredItems.forEach( function(item) {
|
||||
jQuery(item.element).find("[data-lightbox]").addClass('grid-lightbox-filtered');
|
||||
});
|
||||
}
|
||||
__modules.lightbox();
|
||||
});
|
||||
});
|
||||
|
||||
jQuery('.grid-shuffle').off( 'click' ).on( 'click', function(){
|
||||
var element = jQuery(this),
|
||||
elCon = element.attr('data-container');
|
||||
|
||||
if( !jQuery(elCon).hasClass('grid-container') ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
jQuery(elCon).isotope('shuffle');
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
117
public/js/modules/flexslider.js
Normal file
117
public/js/modules/flexslider.js
Normal file
@@ -0,0 +1,117 @@
|
||||
CNVS.FlexSlider = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.flexslider.js', id: 'canvas-flexslider-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().flexslider;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-flexslider', event: 'pluginFlexSliderReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each(function() {
|
||||
var element = jQuery(this),
|
||||
elLazy = element.find('.lazy'),
|
||||
elAnimation = element.attr('data-animation') || 'slide',
|
||||
elEasing = element.attr('data-easing') || 'swing',
|
||||
elDirection = element.attr('data-direction') || 'horizontal',
|
||||
elReverse = element.attr('data-reverse'),
|
||||
elSlideshow = element.attr('data-slideshow'),
|
||||
elPause = element.attr('data-pause') || 5000,
|
||||
elSpeed = element.attr('data-speed') || 600,
|
||||
elVideo = element.attr('data-video'),
|
||||
elPagi = element.attr('data-pagi'),
|
||||
elArrows = element.attr('data-arrows'),
|
||||
elArrowLeft = element.attr('data-arrow-left') || 'uil uil-angle-left-b',
|
||||
elArrowRight = element.attr('data-arrow-right') || 'uil uil-angle-right-b',
|
||||
elThumbs = element.attr('data-thumbs'),
|
||||
elHover = element.attr('data-hover'),
|
||||
elSheight = element.attr('data-smooth-height'),
|
||||
elTouch = element.attr('data-touch'),
|
||||
elUseCSS = false;
|
||||
|
||||
if( elEasing == 'swing' ) {
|
||||
elEasing = 'swing';
|
||||
elUseCSS = true;
|
||||
}
|
||||
if( elReverse == 'true' ) { elReverse = true; } else { elReverse = false; }
|
||||
if( elSlideshow == "false" ) { elSlideshow = false; } else { elSlideshow = true; }
|
||||
if( !elVideo ) { elVideo = false; }
|
||||
if( elSheight == 'false' ) { elSheight = false; } else { elSheight = true; }
|
||||
if( elDirection == 'vertical' ) { elSheight = false; }
|
||||
if( elPagi == 'false' ) { elPagi = false; } else { elPagi = true; }
|
||||
if( elThumbs == 'true' ) { elPagi = 'thumbnails'; } else { elPagi = elPagi; }
|
||||
if( elArrows == 'false' ) { elArrows = false; } else { elArrows = true; }
|
||||
if( elHover == 'false' ) { elHover = false; } else { elHover = true; }
|
||||
if( elTouch == 'false' ) { elTouch = false; } else { elTouch = true; }
|
||||
|
||||
element.find('.flexslider').flexslider({
|
||||
selector: ".slider-wrap > .slide",
|
||||
animation: elAnimation,
|
||||
easing: elEasing,
|
||||
direction: elDirection,
|
||||
reverse: elReverse,
|
||||
slideshow: elSlideshow,
|
||||
slideshowSpeed: Number(elPause),
|
||||
animationSpeed: Number(elSpeed),
|
||||
pauseOnHover: elHover,
|
||||
video: elVideo,
|
||||
controlNav: elPagi,
|
||||
directionNav: elArrows,
|
||||
smoothHeight: elSheight,
|
||||
useCSS: elUseCSS,
|
||||
touch: elTouch,
|
||||
start: function( slider ){
|
||||
__modules.animations();
|
||||
__modules.lightbox();
|
||||
|
||||
jQuery('.flex-prev').html('<i class="'+ elArrowLeft +'"></i>');
|
||||
jQuery('.flex-next').html('<i class="'+ elArrowRight +'"></i>');
|
||||
setTimeout( function(){
|
||||
if( slider.parents( '.grid-container.has-init-isotope' ).length > 0 ) {
|
||||
slider.parents( '.grid-container.has-init-isotope' ).isotope('layout');
|
||||
}
|
||||
}, 1200 );
|
||||
|
||||
if( typeof skrollrInstance !== "undefined" ) {
|
||||
skrollrInstance.refresh();
|
||||
}
|
||||
},
|
||||
after: function( slider ){
|
||||
if( slider.parents( '.grid-container.has-init-isotope' ).length > 0 && !slider.hasClass('flexslider-grid-relayout') ) {
|
||||
slider.parents( '.grid-container.has-init-isotope' ).isotope('layout');
|
||||
slider.addClass('flexslider-grid-relayout');
|
||||
}
|
||||
|
||||
jQuery('.menu-item:visible').find('.flexslider .slide').resize();
|
||||
}
|
||||
});
|
||||
|
||||
// jQuery(window).on( 'lazyLoadLoaded', function(){
|
||||
// if( elLazy.length == element.find('.lazy.lazy-loaded').length ) {
|
||||
// lazyLoadInstance.update();
|
||||
// setTimeout( function() {
|
||||
// element.find('.flexslider .slide').resize();
|
||||
// }, 500 );
|
||||
// }
|
||||
// });
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
59
public/js/modules/flickr.js
Normal file
59
public/js/modules/flickr.js
Normal file
@@ -0,0 +1,59 @@
|
||||
CNVS.Flickr = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.flickrfeed.js', id: 'canvas-flickrfeed-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().jflickrfeed;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-flickr', event: 'pluginFlickrFeedReady' });
|
||||
|
||||
selector = __core.getSelector( selector, true, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each(function() {
|
||||
var element = jQuery(this),
|
||||
elID = element.attr('data-id'),
|
||||
elCount = element.attr('data-count') || 9,
|
||||
elType = element.attr('data-type'),
|
||||
elTypeGet = 'photos_public.gne';
|
||||
|
||||
if( elType == 'group' ) { elTypeGet = 'groups_pool.gne'; }
|
||||
|
||||
element.jflickrfeed({
|
||||
feedapi: elTypeGet,
|
||||
limit: Number(elCount),
|
||||
qstrings: {
|
||||
id: elID
|
||||
},
|
||||
itemTemplate: '<a class="grid-item" href="{{image_b}}" title="{{title}}" data-lightbox="gallery-item">' +
|
||||
'<img src="{{image_s}}" alt="{{title}}" />' +
|
||||
'</a>'
|
||||
}, function(data) {
|
||||
element.removeClass('customjs');
|
||||
__core.imagesLoaded(element[0]);
|
||||
__modules.lightbox();
|
||||
|
||||
element[0].addEventListener( 'CanvasImagesLoaded', function() {
|
||||
__modules.gridInit();
|
||||
__modules.masonryThumbs();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
63
public/js/modules/fontsizer.js
Normal file
63
public/js/modules/fontsizer.js
Normal file
@@ -0,0 +1,63 @@
|
||||
CNVS.FontSizer = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-fontsizer', event: 'pluginFontSizerReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(elem) {
|
||||
var target = elem.getAttribute('data-target');
|
||||
var targetEl = document.querySelector(target);
|
||||
var step = elem.getAttribute('data-step') || 10;
|
||||
var min = elem.getAttribute('data-min') || 12;
|
||||
var max = elem.getAttribute('data-max') || 24;
|
||||
var defaultSize = Number(document.defaultView.getComputedStyle(targetEl).getPropertyValue('font-size').split('px')[0]);
|
||||
var percent = defaultSize * Number(step) * .01;
|
||||
|
||||
var defaultBtn = elem.querySelector('.font-size-default');
|
||||
var minusBtn = elem.querySelector('.font-size-minus');
|
||||
var plusBtn = elem.querySelector('.font-size-plus');
|
||||
|
||||
if( defaultBtn ) {
|
||||
defaultBtn.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
targetEl.style.fontSize = defaultSize + 'px';
|
||||
};
|
||||
}
|
||||
|
||||
if( minusBtn ) {
|
||||
elem.querySelector('.font-size-minus').onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var current = Number(document.defaultView.getComputedStyle(targetEl).getPropertyValue('font-size').split('px')[0]);
|
||||
var newSize = current - percent;
|
||||
if( newSize >= min ) {
|
||||
targetEl.style.fontSize = newSize + 'px';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if( plusBtn ) {
|
||||
elem.querySelector('.font-size-plus').onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var current = Number(document.defaultView.getComputedStyle(targetEl).getPropertyValue('font-size').split('px')[0]);
|
||||
var newSize = current + percent;
|
||||
if( newSize <= max ) {
|
||||
targetEl.style.fontSize = newSize + 'px';
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
70
public/js/modules/fullvideo.js
Normal file
70
public/js/modules/fullvideo.js
Normal file
@@ -0,0 +1,70 @@
|
||||
CNVS.FullVideo = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-html5video', event: 'pluginHtml5VideoReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elVideo = element.querySelector('video'),
|
||||
elRatio = element.getAttribute('data-ratio') || '16/9';
|
||||
|
||||
if( !elVideo ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
elRatio = elRatio.split('/');
|
||||
|
||||
elVideo.style.left = '';
|
||||
elVideo.style.top = '';
|
||||
|
||||
var divWidth = element.offsetWidth,
|
||||
divHeight = element.offsetHeight,
|
||||
elWidth = ( Number(elRatio[0])*divHeight)/Number(elRatio[1]),
|
||||
elHeight = divHeight;
|
||||
|
||||
if( elWidth < divWidth ) {
|
||||
elWidth = divWidth;
|
||||
elHeight = (Number(elRatio[1])*divWidth)/Number(elRatio[0]);
|
||||
}
|
||||
|
||||
elVideo.style.width = elWidth + 'px';
|
||||
elVideo.style.height = elHeight + 'px';
|
||||
|
||||
if( elHeight > divHeight ) {
|
||||
elVideo.style.left = '';
|
||||
elVideo.style.top = -( ( elHeight - divHeight )/2 ) + 'px';
|
||||
}
|
||||
|
||||
if( elWidth > divWidth ) {
|
||||
elVideo.style.left = -( ( elWidth - divWidth )/2 ) + 'px';
|
||||
elVideo.style.top = '';
|
||||
}
|
||||
|
||||
if( SEMICOLON.Mobile.any() && !element.classList.contains('no-placeholder') ) {
|
||||
var placeholderImg = elVideo.getAttribute('poster') || elVideo.getAttribute('data-poster');
|
||||
|
||||
if( placeholderImg != '' ) {
|
||||
element.innerHTML += '<div class="video-placeholder" style="background-image: url('+ placeholderImg +');"></div>';
|
||||
}
|
||||
|
||||
elVideo.classList.add('d-none');
|
||||
}
|
||||
});
|
||||
|
||||
__core.getVars.resizers.html5video = function() {
|
||||
__modules.html5Video();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
126
public/js/modules/googlemaps.js
Normal file
126
public/js/modules/googlemaps.js
Normal file
@@ -0,0 +1,126 @@
|
||||
CNVS.GoogleMaps = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
if( !__core.getOptions.gmapAPI ) {
|
||||
console.warn( 'No API Key defined for Google Maps! Please set an API Key in js/functions.js File!' );
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'https://maps.google.com/maps/api/js?key='+__core.getOptions.gmapAPI+"&callback=SEMICOLON.Modules.gmap", id: 'canvas-gmapapi-js' });
|
||||
__core.loadJS({ file: 'plugins.gmap.js', id: 'canvas-gmap-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof google !== "undefined" && jQuery().gMap;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-gmap', event: 'pluginGmapReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function() {
|
||||
var element = jQuery(this),
|
||||
elLat = element.attr( 'data-latitude' ),
|
||||
elLon = element.attr( 'data-longitude' ),
|
||||
elAdd = element.attr( 'data-address' ),
|
||||
elCon = element.attr( 'data-content' ),
|
||||
elScroll = element.attr( 'data-scrollwheel' ) || true,
|
||||
elType = element.attr( 'data-maptype' ) || 'ROADMAP',
|
||||
elZoom = element.attr( 'data-zoom' ) || 12,
|
||||
elStyles = element.attr( 'data-styles' ),
|
||||
elMarkers = element.attr( 'data-markers' ),
|
||||
elIcon = element.attr( 'data-icon' ),
|
||||
elConPan = element.attr( 'data-control-pan' ) || false,
|
||||
elConZoom = element.attr( 'data-control-zoom' )|| false,
|
||||
elConMapT = element.attr( 'data-control-maptype' )|| false,
|
||||
elConScale = element.attr( 'data-control-scale' )|| false,
|
||||
elConStreetV = element.attr( 'data-control-streetview' )|| false,
|
||||
elConOverview = element.attr( 'data-control-overview' )|| false;
|
||||
|
||||
if( elAdd ) {
|
||||
elLat = elLon = false;
|
||||
} else {
|
||||
if( !elLat && !elLon ) {
|
||||
console.log( 'Google Map co-ordinates not entered.' );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if( elStyles ) { elStyles = JSON.parse( elStyles ); }
|
||||
if( elScroll == 'false' ) { elScroll = false; }
|
||||
if( elConPan == 'true' ) { elConPan = true; }
|
||||
if( elConZoom == 'true' ) { elConZoom = true; }
|
||||
if( elConMapT == 'true' ) { elConMapT = true; }
|
||||
if( elConScale == 'true' ) { elConScale = true; }
|
||||
if( elConStreetV == 'true' ) { elConStreetV = true; }
|
||||
if( elConOverview == 'true' ) { elConOverview = true; }
|
||||
|
||||
if( elMarkers ) {
|
||||
elMarkers = Function( 'return ' + elMarkers )();
|
||||
} else {
|
||||
if( elAdd ) {
|
||||
elMarkers = [
|
||||
{
|
||||
address: elAdd,
|
||||
html: elCon ? elCon : elAdd
|
||||
}
|
||||
]
|
||||
} else {
|
||||
elMarkers = [
|
||||
{
|
||||
latitude: elLat,
|
||||
longitude: elLon,
|
||||
html: elCon ? elCon : false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
if( elIcon ) {
|
||||
elIcon = Function( 'return ' + elIcon )();
|
||||
} else {
|
||||
elIcon = {
|
||||
image: "https://www.google.com/mapfiles/marker.png",
|
||||
shadow: "https://www.google.com/mapfiles/shadow50.png",
|
||||
iconsize: [20, 34],
|
||||
shadowsize: [37, 34],
|
||||
iconanchor: [9, 34],
|
||||
shadowanchor: [19, 34]
|
||||
};
|
||||
}
|
||||
|
||||
element.gMap({
|
||||
controls: {
|
||||
panControl: elConPan,
|
||||
zoomControl: elConZoom,
|
||||
mapTypeControl: elConMapT,
|
||||
scaleControl: elConScale,
|
||||
streetViewControl: elConStreetV,
|
||||
overviewMapControl: elConOverview
|
||||
},
|
||||
scrollwheel: elScroll,
|
||||
maptype: elType,
|
||||
markers: elMarkers,
|
||||
icon: elIcon,
|
||||
latitude: elLat,
|
||||
longitude: elLon,
|
||||
address: elAdd,
|
||||
zoom: Number( elZoom ),
|
||||
styles: elStyles
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
46
public/js/modules/gototop.js
Normal file
46
public/js/modules/gototop.js
Normal file
@@ -0,0 +1,46 @@
|
||||
CNVS.GoToTop = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _init = function(element) {
|
||||
var elSpeed = element.getAttribute('data-speed') || 700,
|
||||
elEasing = element.getAttribute('data-easing');
|
||||
|
||||
element.onclick = function(e) {
|
||||
__core.scrollTo(0, Number(elSpeed), elEasing);
|
||||
e.preventDefault();
|
||||
};
|
||||
};
|
||||
|
||||
var _scroll = function(element) {
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
var elMobile = element.getAttribute('data-mobile') || 'false',
|
||||
elOffset = element.getAttribute('data-offset') || 450;
|
||||
|
||||
if( elMobile == 'false' && ( body.contains('device-xs') || body.contains('device-sm') || body.contains('device-md') ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( window.scrollY > Number(elOffset) ) {
|
||||
body.add('gototop-active');
|
||||
} else {
|
||||
body.remove('gototop-active');
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
_init(selector[0]);
|
||||
_scroll(selector[0]);
|
||||
|
||||
window.addEventListener('scroll', function(){
|
||||
_scroll(selector[0]);
|
||||
}, {passive:true});
|
||||
}
|
||||
};
|
||||
}();
|
||||
95
public/js/modules/grid.js
Normal file
95
public/js/modules/grid.js
Normal file
@@ -0,0 +1,95 @@
|
||||
CNVS.Grid = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _reLayout = function(el) {
|
||||
el.filter('.has-init-isotope').isotope('layout');
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.isotope.js', id: 'canvas-isotope-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof Isotope !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-isotope', event: 'pluginIsotopeReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function() {
|
||||
var element = jQuery(this),
|
||||
elTransition = element.attr('data-transition') || '0.65s',
|
||||
elLayoutMode = element.attr('data-layout') || 'masonry',
|
||||
elStagger = element.attr('data-stagger') || 0,
|
||||
elBase = element.attr('data-basewidth') || '.portfolio-item:not(.wide):eq(0)',
|
||||
elOriginLeft = true,
|
||||
elGrid;
|
||||
|
||||
_reLayout(element);
|
||||
|
||||
if( __core.getVars.isRTL ) {
|
||||
elOriginLeft = false;
|
||||
}
|
||||
|
||||
if( element.hasClass('portfolio') || element.hasClass('post-timeline') ){
|
||||
elGrid = element.filter(':not(.has-init-isotope)').isotope({
|
||||
layoutMode: elLayoutMode,
|
||||
isOriginLeft: elOriginLeft,
|
||||
transitionDuration: elTransition,
|
||||
stagger: Number( elStagger ),
|
||||
percentPosition: true,
|
||||
masonry: {
|
||||
columnWidth: element.find( elBase )[0]
|
||||
}
|
||||
});
|
||||
} else {
|
||||
elGrid = element.filter(':not(.has-init-isotope)').isotope({
|
||||
layoutMode: elLayoutMode,
|
||||
isOriginLeft: elOriginLeft,
|
||||
transitionDuration: elTransition,
|
||||
stagger: Number( elStagger ),
|
||||
percentPosition: true,
|
||||
});
|
||||
}
|
||||
|
||||
if( element.data('isotope') ) {
|
||||
element.addClass('has-init-isotope');
|
||||
}
|
||||
|
||||
var int = setInterval( function() {
|
||||
if( element.find('.lazy.lazy-loaded').length == element.find('.lazy').length ) {
|
||||
setTimeout( function() {
|
||||
_reLayout(element);
|
||||
}, 666);
|
||||
|
||||
clearInterval(int);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
window.addEventListener( 'lazyLoadLoaded', function() {
|
||||
_reLayout(element);
|
||||
});
|
||||
|
||||
window.addEventListener( 'load', function() {
|
||||
_reLayout(element);
|
||||
});
|
||||
|
||||
__core.getVars.resizers.isotope = function() {
|
||||
_reLayout(element);
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
210
public/js/modules/headers.js
Normal file
210
public/js/modules/headers.js
Normal file
@@ -0,0 +1,210 @@
|
||||
CNVS.Headers = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
var _offset = function() {
|
||||
var elHeader = __core.getVars.elHeader;
|
||||
var elHeaderInc = document.querySelector('.include-header');
|
||||
|
||||
__core.getVars.headerOffset = elHeader.offsetTop;
|
||||
if( __core.getVars.elHeader?.classList.contains('floating-header') || elHeaderInc?.classList.contains('include-topbar') ) {
|
||||
__core.getVars.headerOffset = __core.offset(elHeader).top;
|
||||
}
|
||||
__core.getVars.elHeaderWrap?.classList.add('position-absolute');
|
||||
__core.getVars.headerWrapOffset = __core.getVars.headerOffset + __core.getVars.elHeaderWrap?.offsetTop;
|
||||
__core.getVars.elHeaderWrap?.classList.remove('position-absolute');
|
||||
|
||||
if( elHeader.hasAttribute('data-sticky-offset') ) {
|
||||
var headerDefinedOffset = elHeader.getAttribute('data-sticky-offset');
|
||||
if( headerDefinedOffset == 'full' ) {
|
||||
__core.getVars.headerWrapOffset = __core.viewport().height;
|
||||
var headerOffsetNegative = elHeader.getAttribute('data-sticky-offset-negative');
|
||||
if( typeof headerOffsetNegative !== 'undefined' ) {
|
||||
if( headerOffsetNegative == 'auto' ) {
|
||||
__core.getVars.headerWrapOffset = __core.getVars.headerWrapOffset - elHeader.offsetHeight - 1;
|
||||
} else {
|
||||
__core.getVars.headerWrapOffset = __core.getVars.headerWrapOffset - Number(headerOffsetNegative) - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__core.getVars.headerWrapOffset = Number(headerDefinedOffset);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var _sticky = function(stickyOffset) {
|
||||
if( !__core.getVars.elBody.classList.contains('is-expanded-menu') && __core.getVars.mobileSticky != 'true' ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( window.scrollY > stickyOffset ) {
|
||||
if( !__core.getVars.elBody.classList.contains('side-header') ) {
|
||||
__core.getVars.elHeader.classList.add('sticky-header');
|
||||
_changeMenuClass('sticky');
|
||||
|
||||
if( __core.getVars.elBody.classList.contains('is-expanded-menu') && __core.getVars.stickyShrink == 'true' && !__core.getVars.elHeader.classList.contains('no-sticky') ) {
|
||||
if( ( window.scrollY - stickyOffset ) > Number( __core.getVars.stickyShrinkOffset ) ) {
|
||||
__core.getVars.elHeader.classList.add('sticky-header-shrink');
|
||||
} else {
|
||||
__core.getVars.elHeader.classList.remove('sticky-header-shrink');
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_removeSticky();
|
||||
if( __core.getVars.mobileSticky == 'true' ) {
|
||||
_changeMenuClass('responsive');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var _removeSticky = function() {
|
||||
__core.getVars.elHeader.className = __core.getVars.headerClasses;
|
||||
__core.getVars.elHeader.classList.remove('sticky-header', 'sticky-header-shrink');
|
||||
|
||||
if( __core.getVars.elHeaderWrap ) {
|
||||
__core.getVars.elHeaderWrap.className = __core.getVars.headerWrapClasses;
|
||||
}
|
||||
if( !__core.getVars.elHeaderWrap?.classList.contains('force-not-dark') ) {
|
||||
__core.getVars.elHeaderWrap?.classList.remove('not-dark');
|
||||
}
|
||||
|
||||
__base.sliderMenuClass();
|
||||
};
|
||||
|
||||
var _changeMenuClass = function(type) {
|
||||
var newClassesArray = '';
|
||||
|
||||
if( 'responsive' == type ) {
|
||||
if( __core.getVars.elBody.classList.contains('is-expanded-menu') ){
|
||||
return true;
|
||||
}
|
||||
|
||||
if( __core.getVars.mobileHeaderClasses ) {
|
||||
newClassesArray = __core.getVars.mobileHeaderClasses.split(/ +/);
|
||||
}
|
||||
} else {
|
||||
if( !__core.getVars.elHeader.classList.contains('sticky-header') ){
|
||||
return true;
|
||||
}
|
||||
|
||||
if( __core.getVars.stickyHeaderClasses ) {
|
||||
newClassesArray = __core.getVars.stickyHeaderClasses.split(/ +/);
|
||||
}
|
||||
}
|
||||
|
||||
var noOfNewClasses = newClassesArray.length;
|
||||
|
||||
if( noOfNewClasses > 0 ) {
|
||||
var i = 0;
|
||||
for( i=0; i<noOfNewClasses; i++ ) {
|
||||
if( newClassesArray[i] == 'not-dark' ) {
|
||||
__core.getVars.elHeader.classList.remove('dark');
|
||||
if( !__core.getVars.elHeaderWrap?.classList.contains('.not-dark') ) {
|
||||
__core.getVars.elHeaderWrap?.classList.add('not-dark');
|
||||
}
|
||||
} else if( newClassesArray[i] == 'dark' ) {
|
||||
__core.getVars.elHeaderWrap?.classList.remove('not-dark force-not-dark');
|
||||
if( !__core.getVars.elHeader.classList.contains( newClassesArray[i] ) ) {
|
||||
__core.getVars.elHeader.classList.add( newClassesArray[i] );
|
||||
}
|
||||
} else if( !__core.getVars.elHeader.classList.contains( newClassesArray[i] ) ) {
|
||||
__core.getVars.elHeader.classList.add( newClassesArray[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__base.setBSTheme();
|
||||
};
|
||||
|
||||
var _includeHeader = function() {
|
||||
var elHeaderInc = document.querySelector('.include-header');
|
||||
var elHeader = __core.getVars.elHeader;
|
||||
__core.getVars.headerHeight = elHeader.offsetHeight;
|
||||
|
||||
if( !elHeaderInc ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
elHeaderInc.style.marginTop = '';
|
||||
|
||||
if( !__core.getVars.elBody.classList.contains('is-expanded-menu') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( elHeader.classList.contains('floating-header') || elHeaderInc.classList.contains('include-topbar') ) {
|
||||
__core.getVars.headerHeight = elHeader.offsetHeight + __core.offset(elHeader).top;
|
||||
}
|
||||
|
||||
elHeaderInc.style.marginTop = (__core.getVars.headerHeight * -1) + 'px';
|
||||
__modules.sliderParallax();
|
||||
}
|
||||
|
||||
var _sideHeader = function() {
|
||||
var headerTrigger = document.getElementById("header-trigger");
|
||||
if( headerTrigger ) {
|
||||
headerTrigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
__core.getVars.elBody.classList.contains('open-header') && __core.getVars.elBody.classList.toggle("side-header-open");
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var elHeader = __core.getVars.elHeader;
|
||||
var isSticky = elHeader.classList.contains('no-sticky') ? false : true;
|
||||
var headerWrapClone = elHeader.querySelector('.header-wrap-clone');
|
||||
|
||||
__core.getVars.stickyHeaderClasses = elHeader.getAttribute('data-sticky-class');
|
||||
__core.getVars.mobileHeaderClasses = elHeader.getAttribute('data-responsive-class');
|
||||
__core.getVars.stickyShrink = elHeader.getAttribute('data-sticky-shrink') || 'true';
|
||||
__core.getVars.stickyShrinkOffset = elHeader.getAttribute('data-sticky-shrink-offset') || 300;
|
||||
__core.getVars.mobileSticky = elHeader.getAttribute('data-mobile-sticky') || 'false';
|
||||
__core.getVars.headerHeight = elHeader.offsetHeight;
|
||||
|
||||
if( !headerWrapClone ) {
|
||||
headerWrapClone = document.createElement('div');
|
||||
headerWrapClone.classList = 'header-wrap-clone';
|
||||
|
||||
__core.getVars.elHeaderWrap?.parentNode.insertBefore( headerWrapClone, __core.getVars.elHeaderWrap?.nextSibling);
|
||||
headerWrapClone = elHeader.querySelector('.header-wrap-clone');
|
||||
}
|
||||
|
||||
if( isSticky ) {
|
||||
setTimeout( function() {
|
||||
_offset();
|
||||
_sticky( __core.getVars.headerWrapOffset );
|
||||
_changeMenuClass('sticky');
|
||||
}, 500);
|
||||
|
||||
window.addEventListener('scroll', function(){
|
||||
_sticky( __core.getVars.headerWrapOffset );
|
||||
}, {passive:true});
|
||||
}
|
||||
|
||||
_changeMenuClass('responsive');
|
||||
_includeHeader();
|
||||
_sideHeader();
|
||||
|
||||
__core.getVars.resizers.headers = function() {
|
||||
setTimeout( function() {
|
||||
_removeSticky();
|
||||
if( isSticky ) {
|
||||
_offset();
|
||||
_sticky( __core.getVars.headerWrapOffset );
|
||||
_changeMenuClass('sticky');
|
||||
}
|
||||
_changeMenuClass('responsive');
|
||||
_includeHeader();
|
||||
}, 250);
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
47
public/js/modules/hover3d.js
Normal file
47
public/js/modules/hover3d.js
Normal file
@@ -0,0 +1,47 @@
|
||||
CNVS.Hover3D = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-hover3d', event: 'pluginHover3DReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var height = el.clientHeight;
|
||||
var width = el.clientWidth;
|
||||
|
||||
el.addEventListener( 'mousemove', function(e) {
|
||||
var xVal = e.layerX;
|
||||
var yVal = e.layerY;
|
||||
|
||||
var yRotation = 20 * ((xVal - width / 2) / width);
|
||||
var xRotation = -20 * ((yVal - height / 2) / height);
|
||||
|
||||
var transform = 'perspective(500px) scale(1.1) rotateX(' + xRotation + 'deg) rotateY(' + yRotation + 'deg) rotateZ(0)';
|
||||
|
||||
el.style.transform = transform;
|
||||
});
|
||||
|
||||
el.addEventListener( 'mouseout', function() {
|
||||
el.style.transform = 'perspective(500px) scale(1) rotateX(0) rotateY(0) rotateZ(0)';
|
||||
});
|
||||
|
||||
el.addEventListener( 'mousedown', function() {
|
||||
el.style.transform = 'perspective(500px) scale(0.9) rotateX(0) rotateY(0) rotateZ(0)';
|
||||
});
|
||||
|
||||
el.addEventListener( 'mouseup', function() {
|
||||
el.style.transform = 'perspective(500px) scale(1.1) rotateX(0) rotateY(0) rotateZ(0)';
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
156
public/js/modules/hoveranimations.js
Normal file
156
public/js/modules/hoveranimations.js
Normal file
@@ -0,0 +1,156 @@
|
||||
CNVS.HoverAnimations = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _t, _x;
|
||||
|
||||
var _showOverlay = function(params) {
|
||||
clearTimeout(_x);
|
||||
|
||||
_t = setTimeout( function() {
|
||||
params.element.classList.add( 'not-animated' );
|
||||
|
||||
(params.elAnimateOut + ' not-animated').split(" ").forEach( function(_class) {
|
||||
params.element.classList.remove(_class);
|
||||
});
|
||||
|
||||
(params.elAnimate + ' animated').split(" ").forEach( function(_class) {
|
||||
params.element.classList.add(_class);
|
||||
});
|
||||
}, params.elDelayT );
|
||||
};
|
||||
|
||||
var _hideOverlay = function(params) {
|
||||
params.element.classList.add( 'not-animated' );
|
||||
|
||||
(params.elAnimate + ' not-animated').split(" ").forEach( function(_class) {
|
||||
params.element.classList.remove(_class);
|
||||
});
|
||||
|
||||
(params.elAnimateOut + ' animated').split(" ").forEach( function(_class) {
|
||||
params.element.classList.add(_class);
|
||||
});
|
||||
|
||||
if( params.elReset == 'true' ) {
|
||||
_x = setTimeout( function() {
|
||||
(params.elAnimateOut + ' animated').split(" ").forEach( function(_class) {
|
||||
params.element.classList.remove(_class);
|
||||
});
|
||||
|
||||
params.element.classList.add( 'not-animated' );
|
||||
}, Number( params.elSpeed ) );
|
||||
}
|
||||
|
||||
clearTimeout(_t);
|
||||
};
|
||||
|
||||
var _isInsideElement = function(touch){
|
||||
var rect = element.getBoundingClientRect();
|
||||
|
||||
return (
|
||||
touch.clientX >= rect.left &&
|
||||
touch.clientX <= rect.right &&
|
||||
touch.clientY >= rect.top &&
|
||||
touch.clientY <= rect.bottom
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-hoveranimation', event: 'pluginHoverAnimationReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elAnimate = element.getAttribute( 'data-hover-animate' ),
|
||||
elAnimateOut = element.getAttribute( 'data-hover-animate-out' ) || 'fadeOut',
|
||||
elSpeed = element.getAttribute( 'data-hover-speed' ) || 600,
|
||||
elDelay = element.getAttribute( 'data-hover-delay' ),
|
||||
elParent = element.getAttribute( 'data-hover-parent' ),
|
||||
elReset = element.getAttribute( 'data-hover-reset' ) || 'false',
|
||||
elMobile = element.getAttribute( 'data-hover-mobile' ) || 'true';
|
||||
|
||||
if( elMobile != 'true' ) {
|
||||
if( elMobile == 'false' ) {
|
||||
if( !__core.getVars.elBody.classList.contains('device-up-lg') ) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if( !__core.getVars.elBody.classList.contains('device-up-' + elMobile) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
element.classList.add( 'not-animated' );
|
||||
|
||||
if( !elParent ) {
|
||||
if( element.closest( '.bg-overlay' ) ) {
|
||||
elParent = element.closest( '.bg-overlay' );
|
||||
} else {
|
||||
elParent = element;
|
||||
}
|
||||
} else {
|
||||
if( elParent == 'self' ) {
|
||||
elParent = element;
|
||||
} else {
|
||||
elParent = element.closest( elParent );
|
||||
}
|
||||
}
|
||||
|
||||
var elDelayT = 0;
|
||||
|
||||
if( elDelay ) {
|
||||
elDelayT = Number( elDelay );
|
||||
}
|
||||
|
||||
if( elSpeed ) {
|
||||
element.style.animationDuration = Number( elSpeed ) + 'ms';
|
||||
}
|
||||
|
||||
var params = {
|
||||
element: element,
|
||||
elAnimate: elAnimate,
|
||||
elAnimateOut: elAnimateOut,
|
||||
elSpeed: elSpeed,
|
||||
elDelayT: elDelayT,
|
||||
elParent: elParent,
|
||||
elReset: elReset,
|
||||
}
|
||||
|
||||
elParent.addEventListener( 'mouseenter', function(){
|
||||
_showOverlay(params);
|
||||
}, false);
|
||||
|
||||
elParent.addEventListener( 'mouseleave', function(){
|
||||
_hideOverlay(params);
|
||||
}, false);
|
||||
|
||||
// elParent.addEventListener( 'touchstart', function(e){
|
||||
// e.preventDefault();
|
||||
|
||||
// _showOverlay(params);
|
||||
|
||||
// elParent.addEventListener('touchmove', function(e){
|
||||
// if (!_isInsideElement(e.touches[0])) {
|
||||
// _hideOverlay(params);
|
||||
// elParent.removeEventListener('touchmove');
|
||||
// }
|
||||
// });
|
||||
|
||||
// elParent.addEventListener('touchend', function(){
|
||||
// _hideOverlay(params);
|
||||
// elParent.removeEventListener('touchmove');
|
||||
// elParent.removeEventListener('touchend');
|
||||
// });
|
||||
// });
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
75
public/js/modules/instagram.js
Normal file
75
public/js/modules/instagram.js
Normal file
@@ -0,0 +1,75 @@
|
||||
CNVS.Instagram = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
var _get = function(element, loader, limit, fetchAlert) {
|
||||
var alert = element.closest('.instagram-widget-alert');
|
||||
|
||||
if( !alert ) {
|
||||
alert = document.createElement('div');
|
||||
alert.classList.add( 'alert', 'alert-warning', 'instagram-widget-alert', 'text-center' );
|
||||
element.insertAdjacentElement( 'beforebegin', alert );
|
||||
alert.innerHTML = '<div class="spinner-grow spinner-grow-sm me-2" role="status"><span class="visually-hidden">Loading...</span></div> ' + fetchAlert;
|
||||
}
|
||||
|
||||
fetch(loader).then( function(response) {
|
||||
return response.json();
|
||||
}).then( function(images) {
|
||||
if( images.length > 0 ) {
|
||||
alert.remove();
|
||||
for (var i = 0; i < limit; i++) {
|
||||
if ( i === limit )
|
||||
continue;
|
||||
|
||||
var photo = images[i],
|
||||
thumb = photo.media_url;
|
||||
if( photo.media_type === 'VIDEO' ) {
|
||||
thumb = photo.thumbnail_url;
|
||||
}
|
||||
|
||||
element.innerHTML += '<a class="grid-item" href="'+ photo.permalink +'" target="_blank"><img src="'+ thumb +'" alt="Image"></a>';
|
||||
}
|
||||
}
|
||||
|
||||
element.classList.remove('customjs');
|
||||
__core.imagesLoaded(element);
|
||||
|
||||
element.addEventListener( 'CanvasImagesLoaded', function() {
|
||||
__modules.masonryThumbs();
|
||||
__modules.lightbox();
|
||||
});
|
||||
}).catch( function(err) {
|
||||
console.log(err);
|
||||
alert.classList.remove( 'alert-warning' );
|
||||
alert.classList.add( 'alert-danger' );
|
||||
alert.innerHTML = 'Could not fetch Photos from Instagram API. Please try again later.';
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-instagram', event: 'pluginInstagramReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elLimit = element.getAttribute('data-count') || 12,
|
||||
elLoader = element.getAttribute('data-loader') || 'include/instagram/instagram.php',
|
||||
elFetch = element.getAttribute('data-fetch-message') || 'Fetching Photos from Instagram...';
|
||||
|
||||
if( Number( elLimit ) > 12 ) {
|
||||
elLimit = 12;
|
||||
}
|
||||
|
||||
_get(element, elLoader, elLimit, elFetch);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
37
public/js/modules/lazyload.js
Normal file
37
public/js/modules/lazyload.js
Normal file
@@ -0,0 +1,37 @@
|
||||
CNVS.LazyLoad = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.lazyload.js', id: 'canvas-lazyload-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof LazyLoad !== "undefined"
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-lazyload', event: 'pluginlazyLoadReady' });
|
||||
|
||||
window.lazyLoadInstance = new LazyLoad({
|
||||
threshold: 0,
|
||||
elements_selector: '.lazy:not(.lazy-loaded)',
|
||||
class_loading: 'lazy-loading',
|
||||
class_loaded: 'lazy-loaded',
|
||||
class_error: 'lazy-error',
|
||||
callback_loaded: function(el) {
|
||||
__core.addEvent( window, 'lazyLoadLoaded' );
|
||||
if( el.parentNode.getAttribute('data-lazy-container') == 'true' ) {
|
||||
__core.runContainerModules( el.parentNode );
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
187
public/js/modules/lightbox.js
Normal file
187
public/js/modules/lightbox.js
Normal file
@@ -0,0 +1,187 @@
|
||||
CNVS.Lightbox = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.lightbox.js', id: 'canvas-lightbox-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().magnificPopup;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-lightbox', event: 'pluginLightboxReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var closeButtonIcon = '<i class="bi-x-lg"></i>';
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elType = element.attr('data-lightbox'),
|
||||
elCloseButton = element.attr('data-close-button') || 'outside',
|
||||
elDisableUnder = element.attr('data-disable-under') || 600,
|
||||
elFixedContent = element.attr('data-content-position') || 'auto',
|
||||
elZoom = element.attr('data-zoom'),
|
||||
$body = jQuery('body');
|
||||
|
||||
elCloseButton = elCloseButton == 'inside' ? true : false;
|
||||
elFixedContent = elFixedContent == 'fixed' ? true : false;
|
||||
|
||||
if( elType == 'image' ) {
|
||||
var settings = {
|
||||
type: 'image',
|
||||
tLoading: '',
|
||||
closeOnContentClick: true,
|
||||
closeBtnInside: elCloseButton,
|
||||
fixedContentPos: true,
|
||||
mainClass: 'mfp-no-margins mfp-fade',
|
||||
image: {
|
||||
verticalFit: true
|
||||
},
|
||||
closeIcon: closeButtonIcon,
|
||||
};
|
||||
|
||||
if( elZoom == 'true' ) {
|
||||
settings.zoom = {
|
||||
enabled: true,
|
||||
duration: 300,
|
||||
easing: 'ease-in-out',
|
||||
opener: function(openerElement) {
|
||||
return openerElement.is('img') ? openerElement : openerElement.find('img');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
element.magnificPopup(settings);
|
||||
}
|
||||
|
||||
if( elType == 'gallery' ) {
|
||||
if( element.find('a[data-lightbox="gallery-item"]').parent('.clone').hasClass('clone') ) {
|
||||
element.find('a[data-lightbox="gallery-item"]').parent('.clone').find('a[data-lightbox="gallery-item"]').attr('data-lightbox','');
|
||||
}
|
||||
|
||||
if( element.find('a[data-lightbox="gallery-item"]').parents('.cloned').hasClass('cloned') ) {
|
||||
element.find('a[data-lightbox="gallery-item"]').parents('.cloned').find('a[data-lightbox="gallery-item"]').attr('data-lightbox','');
|
||||
}
|
||||
|
||||
element.magnificPopup({
|
||||
delegate: element.hasClass('grid-container-filterable') ? 'a.grid-lightbox-filtered[data-lightbox="gallery-item"]' : 'a[data-lightbox="gallery-item"]',
|
||||
type: 'image',
|
||||
tLoading: '',
|
||||
closeOnContentClick: true,
|
||||
closeBtnInside: elCloseButton,
|
||||
fixedContentPos: true,
|
||||
mainClass: 'mfp-no-margins mfp-fade', // class to remove default margin from left and right side
|
||||
image: {
|
||||
verticalFit: true
|
||||
},
|
||||
gallery: {
|
||||
enabled: true,
|
||||
navigateByImgClick: true,
|
||||
preload: [0,1] // Will preload 0 - before current, and 1 after the current image
|
||||
},
|
||||
closeIcon: closeButtonIcon,
|
||||
});
|
||||
}
|
||||
|
||||
if( elType == 'iframe' ) {
|
||||
element.magnificPopup({
|
||||
disableOn: Number( elDisableUnder ),
|
||||
type: 'iframe',
|
||||
tLoading: '',
|
||||
removalDelay: 160,
|
||||
preloader: false,
|
||||
closeBtnInside: elCloseButton,
|
||||
fixedContentPos: elFixedContent,
|
||||
closeIcon: closeButtonIcon,
|
||||
});
|
||||
}
|
||||
|
||||
if( elType == 'inline' ) {
|
||||
element.magnificPopup({
|
||||
type: 'inline',
|
||||
tLoading: '',
|
||||
mainClass: 'mfp-no-margins mfp-fade',
|
||||
closeBtnInside: elCloseButton,
|
||||
fixedContentPos: true,
|
||||
overflowY: 'scroll',
|
||||
closeIcon: closeButtonIcon,
|
||||
});
|
||||
}
|
||||
|
||||
if( elType == 'ajax' ) {
|
||||
element.magnificPopup({
|
||||
type: 'ajax',
|
||||
tLoading: '',
|
||||
closeBtnInside: elCloseButton,
|
||||
autoFocusLast: false,
|
||||
closeIcon: closeButtonIcon,
|
||||
callbacks: {
|
||||
ajaxContentAdded: function(mfpResponse) {
|
||||
__core.runContainerModules( document.querySelector('.mfp-content') );
|
||||
},
|
||||
open: function() {
|
||||
$body.addClass('ohidden');
|
||||
},
|
||||
close: function() {
|
||||
$body.removeClass('ohidden');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if( elType == 'ajax-gallery' ) {
|
||||
element.magnificPopup({
|
||||
delegate: 'a[data-lightbox="ajax-gallery-item"]',
|
||||
type: 'ajax',
|
||||
tLoading: '',
|
||||
closeBtnInside: elCloseButton,
|
||||
closeIcon: closeButtonIcon,
|
||||
autoFocusLast: false,
|
||||
gallery: {
|
||||
enabled: true,
|
||||
preload: 0,
|
||||
navigateByImgClick: false
|
||||
},
|
||||
callbacks: {
|
||||
ajaxContentAdded: function(mfpResponse) {
|
||||
__core.runContainerModules( document.querySelector('.mfp-content') );
|
||||
},
|
||||
open: function() {
|
||||
$body.addClass('ohidden');
|
||||
},
|
||||
close: function() {
|
||||
$body.removeClass('ohidden');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
element.on( 'mfpOpen', function(){
|
||||
var lightboxItem = jQuery.magnificPopup.instance.currItem.el,
|
||||
lightboxClass = jQuery( lightboxItem ).attr('data-lightbox-class'),
|
||||
lightboxBgClass = jQuery( lightboxItem ).attr('data-lightbox-bg-class');
|
||||
|
||||
if( lightboxClass != '' ) {
|
||||
jQuery(jQuery.magnificPopup.instance.container).addClass( lightboxClass );
|
||||
}
|
||||
|
||||
if( lightboxBgClass != '' ) {
|
||||
jQuery(jQuery.magnificPopup.instance.bgOverlay).addClass( lightboxBgClass );
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
44
public/js/modules/logo.js
Normal file
44
public/js/modules/logo.js
Normal file
@@ -0,0 +1,44 @@
|
||||
CNVS.Logo = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var head = __core.getVars.elHead,
|
||||
style,
|
||||
css;
|
||||
|
||||
if( selector[0].querySelector('.logo-dark') ) {
|
||||
style = document.createElement('style');
|
||||
head.appendChild(style);
|
||||
css = '.dark #header-wrap:not(.not-dark) #logo [class^="logo-"], .dark .header-row:not(.not-dark) #logo [class^="logo-"] { display: none; } .dark #header-wrap:not(.not-dark) #logo .logo-dark, .dark .header-row:not(.not-dark) #logo .logo-dark { display: flex; }';
|
||||
style.appendChild(document.createTextNode(css));
|
||||
}
|
||||
|
||||
if( selector[0].querySelector('.logo-sticky') ) {
|
||||
style = document.createElement('style');
|
||||
head.appendChild(style);
|
||||
css = '.sticky-header #logo [class^="logo-"] { display: none !important; } .sticky-header #logo .logo-sticky { display: flex !important; }';
|
||||
style.appendChild(document.createTextNode(css));
|
||||
}
|
||||
|
||||
if( selector[0].querySelector('.logo-sticky-shrink') ) {
|
||||
style = document.createElement('style');
|
||||
head.appendChild(style);
|
||||
css = '.sticky-header-shrink #logo [class^="logo-"] { display: none; } .sticky-header-shrink #logo .logo-sticky-shrink { display: flex; }';
|
||||
style.appendChild(document.createTextNode(css));
|
||||
}
|
||||
|
||||
if( selector[0].querySelector('.logo-mobile') ) {
|
||||
style = document.createElement('style');
|
||||
head.appendChild(style);
|
||||
css = 'body:not(.is-expanded-menu) #logo [class^="logo-"] { display: none; } body:not(.is-expanded-menu) #logo .logo-mobile { display: flex; }';
|
||||
style.appendChild(document.createTextNode(css));
|
||||
}
|
||||
}
|
||||
};
|
||||
}();
|
||||
78
public/js/modules/masonrythumbs.js
Normal file
78
public/js/modules/masonrythumbs.js
Normal file
@@ -0,0 +1,78 @@
|
||||
CNVS.MasonryThumbs = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof Isotope !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-masonrythumbs', event: 'pluginMasonryThumbsReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function() {
|
||||
var element = jQuery(this),
|
||||
elChildren = element.children(),
|
||||
elBig = element.attr('data-big');
|
||||
|
||||
if( elChildren.length < 1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
elChildren.removeClass('grid-item-big').css({ 'width': '' });
|
||||
|
||||
var compStyle = window.getComputedStyle( elChildren.eq(0)[0] );
|
||||
var firstElementWidth = Number(compStyle.getPropertyValue('width').split('px')[0]);
|
||||
|
||||
if( element.filter('.has-init-isotope').length > 0 ) {
|
||||
element.isotope({
|
||||
masonry: {
|
||||
columnWidth: firstElementWidth
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if( elBig ) {
|
||||
elBig = elBig.split(",");
|
||||
|
||||
var elBigNum = '',
|
||||
bigi = '';
|
||||
|
||||
for( bigi = 0; bigi < elBig.length; bigi++ ){
|
||||
elBigNum = Number(elBig[bigi]) - 1;
|
||||
elChildren.eq(elBigNum).addClass('grid-item-big');
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout( function() {
|
||||
element.find('.grid-item-big').css({ width: (firstElementWidth * 2) + 'px' });
|
||||
}, 500);
|
||||
|
||||
setTimeout( function() {
|
||||
element.filter('.has-init-isotope').isotope( 'layout' );
|
||||
}, 1000);
|
||||
|
||||
element[0].addEventListener( 'transitionend', function() {
|
||||
__modules.readmore();
|
||||
});
|
||||
});
|
||||
|
||||
__core.getVars.resizers.masonryThumbs = function() {
|
||||
__modules.masonryThumbs();
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
105
public/js/modules/mediaactions.js
Normal file
105
public/js/modules/mediaactions.js
Normal file
@@ -0,0 +1,105 @@
|
||||
CNVS.MediaActions = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _pauseEv = ['ended', 'error', 'pause', 'seeking', 'waiting'];
|
||||
var _playEv = ['play', 'playing', 'timeupdate'];
|
||||
|
||||
var _volume = function(mediaEl) {
|
||||
var mediaWrap = mediaEl.closest('.media-wrap');
|
||||
|
||||
if( mediaEl.volume < 0.1 || mediaEl.muted == true ) {
|
||||
mediaWrap.classList.add('media-is-muted');
|
||||
} else {
|
||||
mediaWrap.classList.remove('media-is-muted');
|
||||
}
|
||||
};
|
||||
|
||||
var _time = function(duration) {
|
||||
var minutes = (duration / 60).toFixed(0);
|
||||
var seconds = (duration % 60).toFixed(0);
|
||||
|
||||
return minutes + ':' + (seconds < 10 ? '0' + seconds : seconds);
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-mediaactions', event: 'pluginMediaActionsReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(mediaWrap) {
|
||||
var mediaEl = mediaWrap.querySelector('video,audio');
|
||||
var mediaTrigger = mediaWrap.querySelector('.media-trigger-playback');
|
||||
var volumeTrigger = mediaWrap.querySelector('.media-trigger-volume');
|
||||
var mediaDuration = mediaWrap.querySelector('.media-duration');
|
||||
|
||||
if( !mediaEl ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
_pauseEv.forEach( function(_event) {
|
||||
mediaEl.addEventListener(_event, function(){
|
||||
mediaWrap.classList.remove('media-is-playing');
|
||||
_volume(mediaEl);
|
||||
});
|
||||
});
|
||||
|
||||
_playEv.forEach( function(_event) {
|
||||
mediaEl.addEventListener(_event, function(){
|
||||
mediaWrap.classList.add('media-is-playing');
|
||||
_volume(mediaEl);
|
||||
|
||||
if( mediaDuration ) {
|
||||
mediaDuration.innerHTML = _time(mediaEl.currentTime);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
mediaEl.addEventListener('volumechange', function(){
|
||||
_volume(mediaEl);
|
||||
});
|
||||
|
||||
var ifLoaded = setInterval( function(){
|
||||
if( mediaEl.readyState === 4 ) {
|
||||
if( mediaDuration ) {
|
||||
mediaDuration.innerHTML = _time(mediaEl.duration);
|
||||
}
|
||||
|
||||
clearInterval(ifLoaded);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
if( mediaTrigger ) {
|
||||
mediaTrigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (mediaEl.paused) {
|
||||
mediaEl.play();
|
||||
} else {
|
||||
mediaEl.pause();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if( volumeTrigger ) {
|
||||
volumeTrigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (mediaEl.muted) {
|
||||
mediaEl.muted = false;
|
||||
} else {
|
||||
mediaEl.muted = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
565
public/js/modules/menus.js
Normal file
565
public/js/modules/menus.js
Normal file
@@ -0,0 +1,565 @@
|
||||
CNVS.Menus = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
var _init = function() {
|
||||
__core.getVars.headerWrapHeight = __core.getVars.elHeaderWrap?.offsetHeight;
|
||||
|
||||
var onClickMenus = [].slice.call(__core.getVars.elPrimaryMenus).filter( function(elem) {
|
||||
return elem.matches('.on-click');
|
||||
});
|
||||
|
||||
var onClickTopMenus = document.querySelectorAll('.top-links.on-click');
|
||||
|
||||
var onClickMenuCurrent = [];
|
||||
|
||||
onClickMenus.forEach( function(pMenu) {
|
||||
onClickMenuCurrent.push(pMenu.querySelector('.current'));
|
||||
});
|
||||
|
||||
var onClickTopMenuCurrent = [];
|
||||
|
||||
onClickTopMenus.forEach( function(topMenu) {
|
||||
onClickTopMenuCurrent.push(topMenu.querySelector('.current'));
|
||||
});
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
if( !e.target.closest('.primary-menu-trigger') && !e.target.closest('.primary-menu') ) {
|
||||
_reset();
|
||||
_functions();
|
||||
}
|
||||
|
||||
if ( !e.target.closest('.primary-menu.on-click') ) {
|
||||
onClickMenus.forEach( function(pMenu) {
|
||||
pMenu.querySelectorAll('.menu-item').forEach( function(item) {
|
||||
item.classList.remove('current');
|
||||
});
|
||||
});
|
||||
|
||||
onClickMenuCurrent?.forEach( function(current) {
|
||||
current?.classList.add('current');
|
||||
});
|
||||
}
|
||||
|
||||
if ( !e.target.closest('.top-links.on-click') ) {
|
||||
onClickTopMenus.forEach( function(topMenu) {
|
||||
topMenu.querySelectorAll('.top-links-sub-menu,.top-links-section').forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
});
|
||||
|
||||
onClickTopMenus.forEach( function(topMenu) {
|
||||
topMenu.querySelectorAll('.top-links-item').forEach( function(item) {
|
||||
item.classList.remove('current');
|
||||
});
|
||||
});
|
||||
|
||||
onClickTopMenuCurrent?.forEach( function(current) {
|
||||
current?.classList.add('current');
|
||||
});
|
||||
}
|
||||
}, false);
|
||||
|
||||
document.querySelectorAll( '.menu-item' ).forEach(function(el) {
|
||||
if( el.querySelectorAll('.sub-menu-container').length > 0 ) {
|
||||
el.classList.add('sub-menu');
|
||||
}
|
||||
|
||||
if( !el.classList.contains('mega-menu-title') && el.querySelectorAll('.sub-menu-container').length > 0 && el.querySelectorAll('.sub-menu-trigger').length < 1 ) {
|
||||
var subMenuTrigger = document.createElement('button');
|
||||
subMenuTrigger.classList = 'sub-menu-trigger fa-solid fa-chevron-right';
|
||||
subMenuTrigger.innerHTML = '<span class="visually-hidden">Open Sub-Menu</span>';
|
||||
el.append( subMenuTrigger );
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var _reset = function() {
|
||||
var body = __core.getVars.elBody,
|
||||
subMenusSel = '.mega-menu-content, .sub-menu-container',
|
||||
menuItemSel = '.menu-item';
|
||||
|
||||
document.querySelectorAll('.primary-menu-trigger').forEach( function(el) {
|
||||
el.classList.remove('primary-menu-trigger-active');
|
||||
});
|
||||
|
||||
__core.getVars.elPrimaryMenus.forEach( function(el) {
|
||||
if( !body.classList.contains('is-expanded-menu') ) {
|
||||
el.querySelector('.menu-container')?.classList.remove('d-block');
|
||||
} else {
|
||||
el.querySelector('.menu-container')?.classList.remove('d-block', 'd-none');
|
||||
|
||||
el.querySelectorAll(subMenusSel)?.forEach( function(item) {
|
||||
item.classList.remove('d-none');
|
||||
});
|
||||
|
||||
document.querySelectorAll('.menu-container:not(.mobile-primary-menu)').forEach( function(el) {
|
||||
el.style.display = '';
|
||||
});
|
||||
|
||||
__core.getVars.elPrimaryMenus.forEach( function(el) {
|
||||
el.querySelectorAll('.mobile-primary-menu')?.forEach( function(elem) {
|
||||
elem.classList.remove('d-block');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
el.querySelectorAll(subMenusSel)?.forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
|
||||
el.classList.remove('primary-menu-active');
|
||||
|
||||
var classes = body.className.split(" ").filter( function(classText) {
|
||||
return !classText.startsWith('primary-menu-open');
|
||||
});
|
||||
|
||||
body.className = classes.join(" ").trim();
|
||||
});
|
||||
};
|
||||
|
||||
var _withIcon = function() {
|
||||
document.querySelectorAll('.mega-menu-content, .sub-menu-container').forEach( function(subMenu) {
|
||||
subMenu.querySelectorAll('.menu-item').forEach( function(item) {
|
||||
var link = item.querySelector('.menu-link');
|
||||
link?.querySelector('i') && link.querySelector('span')?.classList.add('menu-subtitle-icon-offset');
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var _arrows = function() {
|
||||
var addArrow = function(menuItemDiv) {
|
||||
if( menuItemDiv && !menuItemDiv.querySelector('.sub-menu-indicator') ) {
|
||||
var arrow = document.createElement("i");
|
||||
arrow.classList.add('sub-menu-indicator');
|
||||
|
||||
var customArrow = menuItemDiv.closest('.primary-menu')?.getAttribute('data-arrow-class') || 'fa-solid fa-caret-down';
|
||||
customArrow && customArrow.split(" ").forEach( function(className) {
|
||||
arrow.classList.add(className);
|
||||
});
|
||||
|
||||
menuItemDiv.append(arrow);
|
||||
}
|
||||
};
|
||||
|
||||
// Arrows for Top Links Items
|
||||
document.querySelectorAll( '.top-links-item' ).forEach( function(menuItem) {
|
||||
var menuItemDiv = menuItem.querySelector(':scope > a');
|
||||
menuItem.querySelector(':scope > .top-links-sub-menu, :scope > .top-links-section') && addArrow( menuItemDiv );
|
||||
});
|
||||
|
||||
// Arrows for Primary Menu Items
|
||||
document.querySelectorAll( '.menu-item' ).forEach( function(menuItem) {
|
||||
var menuItemDiv = menuItem.querySelector(':scope > .menu-link > div');
|
||||
( !menuItem.classList.contains('mega-menu-title') && menuItem.querySelector(':scope > .sub-menu-container, :scope > .mega-menu-content') ) && addArrow( menuItemDiv );
|
||||
});
|
||||
|
||||
// Arrows for Page Menu Items
|
||||
document.querySelectorAll( '.page-menu-item' ).forEach( function(menuItem) {
|
||||
var menuItemDiv = menuItem.querySelector(':scope > a > div');
|
||||
menuItem.querySelector(':scope > .page-menu-sub-menu') && addArrow( menuItemDiv );
|
||||
});
|
||||
};
|
||||
|
||||
var _invert = function(subMenuEl) {
|
||||
var subMenus = subMenuEl || document.querySelectorAll( '.mega-menu-content, .sub-menu-container, .top-links-section' );
|
||||
|
||||
// if( !__core.getVars.elBody.classList.contains('is-expanded-menu') ) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if( subMenus.length < 1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var primaryMenus;
|
||||
|
||||
subMenus.forEach( function(el) {
|
||||
primaryMenus = el.closest('.header-row')?.querySelectorAll('.primary-menu');
|
||||
el.classList.remove('menu-pos-invert');
|
||||
var elChildren = el.querySelectorAll(':scope > *');
|
||||
|
||||
elChildren.forEach( function(elChild) {
|
||||
elChild.style.display = 'block';
|
||||
});
|
||||
el.style.display = 'block';
|
||||
|
||||
var viewportOffset = el.getBoundingClientRect();
|
||||
|
||||
if( el.closest('.mega-menu-small') ) {
|
||||
var outside = __core.viewport().width - (viewportOffset.left + viewportOffset.width);
|
||||
if( outside < 0 ) {
|
||||
el.style.left = outside + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
if( __core.getVars.elBody.classList.contains('rtl') ) {
|
||||
if( viewportOffset.left < 0 ) {
|
||||
el.classList.add('menu-pos-invert');
|
||||
}
|
||||
}
|
||||
|
||||
if( __core.viewport().width - (viewportOffset.left + viewportOffset.width) < 0 ) {
|
||||
el.classList.add('menu-pos-invert');
|
||||
}
|
||||
});
|
||||
|
||||
subMenus.forEach( function(el) {
|
||||
var elChildren = el.querySelectorAll(':scope > *');
|
||||
elChildren.forEach( function(elChild) {
|
||||
elChild.style.display = '';
|
||||
});
|
||||
el.style.display = '';
|
||||
});
|
||||
|
||||
primaryMenus?.forEach( function(pMenu){
|
||||
pMenu.classList.add('primary-menu-init');
|
||||
});
|
||||
};
|
||||
|
||||
var _hover = function() {
|
||||
if( !__core.getVars.elBody.classList.contains('is-expanded-menu') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var menuHoverDelay = getComputedStyle(__core.getVars.elHeader).getPropertyValue('--cnvs-primary-menu-submenu-display-speed') || 666;
|
||||
|
||||
if( !isNaN(menuHoverDelay.split('ms')[0]) ) {
|
||||
menuHoverDelay = menuHoverDelay.split('ms')[0];
|
||||
} else if( !isNaN(menuHoverDelay.split('s')[0]) ) {
|
||||
menuHoverDelay = menuHoverDelay.split('s')[0] * 1000;
|
||||
}
|
||||
|
||||
[].slice.call(__core.getVars.elPrimaryMenus).filter( function(elem) {
|
||||
return !elem.matches('.on-click');
|
||||
}).forEach( function(pMenu) {
|
||||
pMenu.querySelectorAll('.sub-menu').forEach( function(item){
|
||||
var _t;
|
||||
|
||||
item.addEventListener('mouseenter', function() {
|
||||
clearTimeout(_t);
|
||||
item.classList.add('menu-item-hover');
|
||||
_invert(item.querySelectorAll('.mega-menu-content, .sub-menu-container'));
|
||||
});
|
||||
|
||||
item.addEventListener('mouseleave', function() {
|
||||
_t = setTimeout( function(){
|
||||
item.classList.remove('menu-item-hover');
|
||||
}, Number(menuHoverDelay));
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var _functions = function() {
|
||||
var subMenusSel = '.mega-menu-content, .sub-menu-container',
|
||||
menuItemSel = '.menu-item',
|
||||
subMenuSel = '.sub-menu',
|
||||
subMenuTriggerSel = '.sub-menu-trigger',
|
||||
body = __core.getVars.elBody.classList;
|
||||
|
||||
var triggersBtn = document.querySelectorAll( subMenuTriggerSel );
|
||||
var triggerLinks = new Array;
|
||||
|
||||
triggersBtn.forEach( function(el) {
|
||||
var triggerLink = el.closest('.menu-item').querySelector('.menu-link[href^="#"]');
|
||||
if( triggerLink ) {
|
||||
triggerLinks.push(triggerLink);
|
||||
}
|
||||
});
|
||||
|
||||
var triggers = [].slice.call(triggersBtn).concat([].slice.call(triggerLinks));
|
||||
|
||||
document.querySelectorAll(subMenuTriggerSel).forEach( function(el) {
|
||||
el.classList.remove('icon-rotate-90')
|
||||
});
|
||||
|
||||
/**
|
||||
* Mobile Menu Functionality
|
||||
*/
|
||||
if( !body.contains('is-expanded-menu') ) {
|
||||
// Reset Menus to their Closed State
|
||||
__core.getVars.elPrimaryMenus.forEach( function(el) {
|
||||
el.querySelectorAll(subMenusSel).forEach( function(elem) {
|
||||
elem.classList.add('d-none');
|
||||
body.remove("primary-menu-open");
|
||||
})
|
||||
});
|
||||
|
||||
triggers.forEach( function(trigger) {
|
||||
trigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var triggerEl = trigger;
|
||||
|
||||
if( !trigger.classList.contains('sub-menu-trigger') ) {
|
||||
triggerEl = trigger.closest(menuItemSel).querySelector(':scope > ' + subMenuTriggerSel);
|
||||
}
|
||||
|
||||
__core.siblings(triggerEl.closest(menuItemSel)).forEach( function(item) {
|
||||
item.querySelectorAll(subMenusSel).forEach( function(item) {
|
||||
item.classList.add('d-none');
|
||||
});
|
||||
});
|
||||
|
||||
if( triggerEl.closest('.mega-menu-content') ) {
|
||||
var parentSubMenuContainers = [];
|
||||
|
||||
__core.parents(triggerEl, menuItemSel).forEach( function(item) {
|
||||
parentSubMenuContainers.push(item.querySelector(':scope > ' + subMenusSel));
|
||||
});
|
||||
|
||||
[].slice.call(triggerEl.closest('.mega-menu-content').querySelectorAll(subMenusSel)).filter( function(item) {
|
||||
return !parentSubMenuContainers.includes(item);
|
||||
}).forEach( function(item) {
|
||||
item.classList.add('d-none');
|
||||
});
|
||||
}
|
||||
|
||||
_triggerState(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel, 'd-none');
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On-Click Menu Functionality
|
||||
*/
|
||||
if( body.contains('is-expanded-menu') ) {
|
||||
if( body.contains('side-header') || body.contains('overlay-menu') ) {
|
||||
__core.getVars.elPrimaryMenus.forEach( function(pMenu) {
|
||||
pMenu.classList.add('on-click');
|
||||
pMenu.querySelectorAll(subMenuTriggerSel).forEach( function(item) {
|
||||
item.style.zIndex = '-1';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
[].slice.call(__core.getVars.elPrimaryMenus).filter( function(elem) {
|
||||
return elem.matches('.on-click');
|
||||
}).forEach( function(pMenu) {
|
||||
var menuItemSubs = __core.has( pMenu.querySelectorAll(menuItemSel), subMenuTriggerSel );
|
||||
|
||||
menuItemSubs.forEach( function(el) {
|
||||
var triggerEl = el.querySelector(':scope > .menu-link');
|
||||
|
||||
triggerEl.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.siblings(triggerEl.closest(menuItemSel)).forEach( function(item) {
|
||||
item.querySelectorAll(subMenusSel).forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
});
|
||||
|
||||
if( triggerEl.closest('.mega-menu-content') ) {
|
||||
var parentSubMenuContainers = [];
|
||||
|
||||
__core.parents(triggerEl, menuItemSel).forEach( function(item) {
|
||||
parentSubMenuContainers.push(item.querySelector(':scope > ' + subMenusSel));
|
||||
});
|
||||
|
||||
[].slice.call(triggerEl.closest('.mega-menu-content').querySelectorAll(subMenusSel)).filter( function(item) {
|
||||
return !parentSubMenuContainers.includes(item);
|
||||
}).forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
}
|
||||
|
||||
_triggerState(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel, 'd-block');
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Top-Links On-Click Functionality
|
||||
*/
|
||||
document.querySelectorAll('.top-links').forEach( function(item) {
|
||||
if( item.classList.contains('on-click') || !body.contains('device-up-lg') ) {
|
||||
item.querySelectorAll('.top-links-item').forEach( function(menuItem) {
|
||||
if( menuItem.querySelectorAll('.top-links-sub-menu,.top-links-section').length > 0 ) {
|
||||
var triggerEl = menuItem.querySelector(':scope > a');
|
||||
|
||||
triggerEl.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.siblings(menuItem).forEach( function(item) {
|
||||
item.querySelectorAll('.top-links-sub-menu, .top-links-section').forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
});
|
||||
menuItem.querySelector(':scope > .top-links-sub-menu, :scope > .top-links-section').classList.toggle('d-block');
|
||||
__core.siblings(menuItem).forEach( function(item) {
|
||||
item.classList.remove('current');
|
||||
});
|
||||
menuItem.classList.toggle('current');
|
||||
};
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
_invert( document.querySelectorAll('.top-links-section') );
|
||||
|
||||
};
|
||||
|
||||
var _triggerState = function(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel, classCheck) {
|
||||
triggerEl.closest('.menu-container').querySelectorAll(subMenuTriggerSel).forEach( function(el) {
|
||||
el.classList.remove('icon-rotate-90');
|
||||
});
|
||||
|
||||
var triggerredSubMenus = triggerEl.closest(menuItemSel).querySelector( ':scope > ' + subMenusSel );
|
||||
var childSubMenus = triggerEl.closest(menuItemSel).querySelectorAll( subMenusSel );
|
||||
|
||||
if( classCheck == 'd-none' ) {
|
||||
if( triggerredSubMenus.classList.contains('d-none') ) {
|
||||
triggerredSubMenus.classList.remove('d-none');
|
||||
} else {
|
||||
childSubMenus.forEach( function(item) {
|
||||
item.classList.add('d-none');
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if( triggerredSubMenus.classList.contains('d-block') ) {
|
||||
childSubMenus.forEach( function(item) {
|
||||
item.classList.remove('d-block');
|
||||
});
|
||||
} else {
|
||||
triggerredSubMenus.classList.add('d-block');
|
||||
}
|
||||
}
|
||||
|
||||
_current(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel);
|
||||
}
|
||||
|
||||
var _current = function(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel) {
|
||||
[].slice.call(triggerEl.closest('.menu-container').querySelectorAll(menuItemSel)).forEach( function(item) {
|
||||
item.classList.remove('current');
|
||||
});
|
||||
|
||||
var setCurrent = function(item, menuItemSel, subMenusSel) {
|
||||
if( !__core.isHidden(item.closest(menuItemSel).querySelector(':scope > ' + subMenusSel)) ) {
|
||||
item.closest(menuItemSel).classList.add('current');
|
||||
item.closest(menuItemSel).querySelector(':scope > ' + subMenuTriggerSel)?.classList.add('icon-rotate-90');
|
||||
} else {
|
||||
item.closest(menuItemSel).classList.remove('current');
|
||||
item.closest(menuItemSel).querySelector(':scope > ' + subMenuTriggerSel)?.classList.remove('icon-rotate-90');
|
||||
}
|
||||
};
|
||||
|
||||
setCurrent(triggerEl, menuItemSel, subMenusSel, subMenuTriggerSel);
|
||||
__core.parents(triggerEl, menuItemSel).forEach( function(item) {
|
||||
setCurrent(item, menuItemSel, subMenusSel, subMenuTriggerSel);
|
||||
});
|
||||
};
|
||||
|
||||
var _trigger = function() {
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
document.querySelectorAll('.primary-menu-trigger').forEach( function(menuTrigger) {
|
||||
menuTrigger.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var elTarget = menuTrigger.getAttribute( 'data-target' ) || '*';
|
||||
|
||||
if( __core.filtered( __core.getVars.elPrimaryMenus, elTarget ).length < 1 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if( !body.contains('is-expanded-menu') ) {
|
||||
__core.getVars.elPrimaryMenus.forEach( function(el) {
|
||||
if( el.querySelectorAll('.mobile-primary-menu').length > 0 ) {
|
||||
el.matches(elTarget) && el.querySelectorAll('.mobile-primary-menu').forEach( function(elem) {
|
||||
elem.classList.toggle('d-block');
|
||||
});
|
||||
} else {
|
||||
el.matches(elTarget) && el.querySelectorAll('.menu-container').forEach( function(elem) {
|
||||
elem.classList.toggle('d-block');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
menuTrigger.classList.toggle('primary-menu-trigger-active');
|
||||
__core.getVars.elPrimaryMenus.forEach( function(elem) {
|
||||
elem.matches(elTarget) && elem.classList.toggle('primary-menu-active');
|
||||
});
|
||||
|
||||
body.toggle('primary-menu-open');
|
||||
|
||||
if( elTarget != '*' ) {
|
||||
body.toggle('primary-menu-open-' + elTarget.replace(/[^a-zA-Z0-9-]/g, ""));
|
||||
} else {
|
||||
body.toggle('primary-menu-open-all');
|
||||
}
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
var _fullWidth = function() {
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
if( !body.contains('is-expanded-menu') ) {
|
||||
document.querySelectorAll('.mega-menu-content, .top-search-form').forEach( function(el) {
|
||||
el.style.width = '';
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
var headerWidth = document.querySelector('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content')?.closest('.header-row').offsetWidth;
|
||||
|
||||
if( __core.getVars.elHeader.querySelectorAll('.container-fullwidth').length > 0 ) {
|
||||
document.querySelectorAll('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').forEach( function(el) {
|
||||
el.style.width = headerWidth + 'px';
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').forEach( function(el) {
|
||||
el.style.width = headerWidth + 'px';
|
||||
});
|
||||
|
||||
if( __core.getVars.elHeader.classList.contains('full-header') ) {
|
||||
document.querySelectorAll('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').forEach( function(el) {
|
||||
el.style.width = headerWidth + 'px';
|
||||
});
|
||||
}
|
||||
|
||||
if( __core.getVars.elHeader.classList.contains('floating-header') ) {
|
||||
var floatingHeaderPadding = getComputedStyle(document.querySelector('#header')).getPropertyValue('--cnvs-header-floating-padding');
|
||||
document.querySelectorAll('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').forEach( function(el) {
|
||||
el.style.width = (headerWidth + (Number(floatingHeaderPadding.split('px')[0]) *2)) + 'px';
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
_init();
|
||||
_reset();
|
||||
_withIcon();
|
||||
_arrows();
|
||||
_invert();
|
||||
_hover();
|
||||
_functions();
|
||||
_trigger();
|
||||
_fullWidth();
|
||||
|
||||
var windowWidth = __core.viewport().width;
|
||||
__core.getVars.resizers.menus = function() {
|
||||
if( windowWidth != __core.viewport().width ) {
|
||||
__base.menus();
|
||||
}
|
||||
};
|
||||
|
||||
__core.getVars.recalls.menureset = function() {
|
||||
_reset();
|
||||
_functions();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
128
public/js/modules/modal.js
Normal file
128
public/js/modules/modal.js
Normal file
@@ -0,0 +1,128 @@
|
||||
CNVS.Modal = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.lightbox.js', id: 'canvas-lightbox-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().magnificPopup;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-modal', event: 'pluginModalReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var closeButtonIcon = '<i class="bi-x-lg"></i>';
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elTarget = element.attr('data-target'),
|
||||
elTargetValue = '__cnvs_' + elTarget.split('#')[1],
|
||||
elDelay = element.attr('data-delay') || 500,
|
||||
elTimeout = element.attr('data-timeout'),
|
||||
elAnimateIn = element.attr('data-animate-in'),
|
||||
elAnimateOut = element.attr('data-animate-out'),
|
||||
elBgClick = element.attr('data-bg-click'),
|
||||
elCloseBtn = element.attr('data-close-btn'),
|
||||
elCookies = element.attr('data-cookies'),
|
||||
elCookiePath = element.attr('data-cookie-path'),
|
||||
elCookieExp = element.attr('data-cookie-expire');
|
||||
|
||||
if( elCookies == "false" ) {
|
||||
__core.cookie.remove( elTargetValue );
|
||||
}
|
||||
|
||||
if( elCookies == 'true' ) {
|
||||
var elementCookie = __core.cookie.get( elTargetValue );
|
||||
|
||||
if( typeof elementCookie !== 'undefined' && elementCookie == '0' ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if( elBgClick == 'false' ) {
|
||||
elBgClick = false;
|
||||
} else {
|
||||
elBgClick = true;
|
||||
}
|
||||
|
||||
if( elCloseBtn == 'false' ) {
|
||||
elCloseBtn = false;
|
||||
} else {
|
||||
elCloseBtn = true;
|
||||
}
|
||||
|
||||
elDelay = Number(elDelay) + 500;
|
||||
|
||||
setTimeout(function() {
|
||||
jQuery.magnificPopup.open({
|
||||
items: { src: elTarget },
|
||||
type: 'inline',
|
||||
mainClass: 'mfp-no-margins mfp-fade',
|
||||
closeBtnInside: false,
|
||||
fixedContentPos: true,
|
||||
closeOnBgClick: elBgClick,
|
||||
showCloseBtn: elCloseBtn,
|
||||
removalDelay: 500,
|
||||
closeIcon: closeButtonIcon,
|
||||
callbacks: {
|
||||
open: function(){
|
||||
if( elAnimateIn != '' ) {
|
||||
jQuery(elTarget).addClass( elAnimateIn + ' animated' );
|
||||
}
|
||||
},
|
||||
beforeClose: function(){
|
||||
if( elAnimateOut != '' ) {
|
||||
jQuery(elTarget).removeClass( elAnimateIn ).addClass( elAnimateOut );
|
||||
}
|
||||
},
|
||||
afterClose: function() {
|
||||
if( elAnimateIn != '' || elAnimateOut != '' ) {
|
||||
jQuery(elTarget).removeClass( elAnimateIn + ' ' + elAnimateOut + ' animated' );
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 0);
|
||||
}, elDelay );
|
||||
|
||||
if( document.querySelector('.modal-cookies-close') ) {
|
||||
document.querySelector('.modal-cookies-close').onclick = function() {
|
||||
jQuery.magnificPopup.close();
|
||||
|
||||
if( elCookies == 'true' ) {
|
||||
var cookieOps = {};
|
||||
|
||||
if( elCookieExp ) {
|
||||
cookieOps.expires = Number( elCookieExp );
|
||||
}
|
||||
|
||||
if( elCookiePath ) {
|
||||
cookieOps.path = elCookiePath;
|
||||
}
|
||||
|
||||
__core.cookie.set( elTargetValue, '0', cookieOps );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if( elTimeout != '' ) {
|
||||
setTimeout(function() {
|
||||
jQuery.magnificPopup.close();
|
||||
}, elDelay + Number(elTimeout) );
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
60
public/js/modules/navtree.js
Normal file
60
public/js/modules/navtree.js
Normal file
@@ -0,0 +1,60 @@
|
||||
CNVS.NavTree = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-navtree', event: 'pluginNavTreeReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elSpeed = element.attr('data-speed') || 250,
|
||||
elEasing = element.attr('data-easing') || 'swing',
|
||||
elArrow = element.attr('data-arrow-class') || 'fa-solid fa-angle-right';
|
||||
|
||||
element.find( 'ul li:has(ul)' ).addClass('sub-menu');
|
||||
element.find( 'ul li:has(ul) > a' ).filter(':not(:has(.sub-menu-indicator))').append( '<i class="sub-menu-indicator '+ elArrow +'"></i>' );
|
||||
|
||||
if( element.hasClass('on-hover') ){
|
||||
element.find( 'ul li:has(ul):not(.active)' ).hover( function(e){
|
||||
jQuery(this).children('ul').stop(true, true).slideDown( Number(elSpeed), elEasing);
|
||||
}, function(){
|
||||
jQuery(this).children('ul').delay(250).slideUp( Number(elSpeed), elEasing);
|
||||
});
|
||||
} else {
|
||||
element.find( 'ul li:has(ul) > a' ).off( 'click' ).on( 'click', function(){
|
||||
var childElement = jQuery(this);
|
||||
|
||||
element.find( 'ul li' ).not(childElement.parents()).removeClass('active');
|
||||
|
||||
childElement.parent().children('ul').slideToggle( Number(elSpeed), elEasing, function(){
|
||||
jQuery(this).find('ul').hide();
|
||||
jQuery(this).find('li.active').removeClass('active');
|
||||
});
|
||||
|
||||
element.find( 'ul li > ul' ).not(childElement.parent().children('ul')).not(childElement.parents('ul')).slideUp( Number(elSpeed), elEasing );
|
||||
childElement.parent('li:has(ul)').toggleClass('active');
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
186
public/js/modules/notifications.js
Normal file
186
public/js/modules/notifications.js
Normal file
@@ -0,0 +1,186 @@
|
||||
CNVS.Notifications = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.bootstrap.js', id: 'canvas-bootstrap-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && typeof bootstrap !== "undefined";
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-notify', event: 'pluginNotifyReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var element = selector,
|
||||
elPosition = element.attr('data-notify-position') || 'top-right',
|
||||
elType = element.attr('data-notify-type'),
|
||||
elMsg = element.attr('data-notify-msg') || 'Please set a message!',
|
||||
elTimeout = element.attr('data-notify-timeout') || 5000,
|
||||
elClose = element.attr('data-notify-close') || 'true',
|
||||
elAutoHide = element.attr('data-notify-autohide') || 'true',
|
||||
elId = 'toast-' + Math.floor( Math.random() * 10000 ),
|
||||
elTrigger = element.attr('data-notify-trigger') || 'self',
|
||||
elTarget = element.attr('data-notify-target'),
|
||||
elCloseHtml = '',
|
||||
elPosClass, elTypeClass, elCloseClass;
|
||||
|
||||
if( jQuery(elTarget).length > 0 && elTrigger == 'self' ) {
|
||||
var toast = bootstrap.Toast.getOrCreateInstance(jQuery(elTarget).get(0));
|
||||
toast.hide();
|
||||
|
||||
jQuery(elTarget).get(0).addEventListener('hidden.bs.toast', function() {
|
||||
CNVS.Notifications.init( selector );
|
||||
});
|
||||
}
|
||||
|
||||
switch( elType ){
|
||||
|
||||
case 'primary':
|
||||
elTypeClass = 'text-white bg-primary border-0';
|
||||
break;
|
||||
|
||||
case 'warning':
|
||||
elTypeClass = 'text-dark bg-warning border-0';
|
||||
break;
|
||||
|
||||
case 'error':
|
||||
elTypeClass = 'text-white bg-danger border-0';
|
||||
break;
|
||||
|
||||
case 'success':
|
||||
elTypeClass = 'text-white bg-success border-0';
|
||||
break;
|
||||
|
||||
case 'info':
|
||||
elTypeClass = 'bg-info text-dark border-0';
|
||||
break;
|
||||
|
||||
case 'dark':
|
||||
elTypeClass = 'text-white bg-dark border-0';
|
||||
break;
|
||||
|
||||
default:
|
||||
elTypeClass = '';
|
||||
break;
|
||||
}
|
||||
|
||||
switch( elPosition ){
|
||||
|
||||
case 'top-left':
|
||||
elPosClass = 'top-0 start-0';
|
||||
break;
|
||||
|
||||
case 'top-center':
|
||||
elPosClass = 'top-0 start-50 translate-middle-x';
|
||||
break;
|
||||
|
||||
case 'middle-left':
|
||||
elPosClass = 'top-50 start-0 translate-middle-y';
|
||||
break;
|
||||
|
||||
case 'middle-center':
|
||||
elPosClass = 'top-50 start-50 translate-middle';
|
||||
break;
|
||||
|
||||
case 'middle-right':
|
||||
elPosClass = 'top-50 end-0 translate-middle-y';
|
||||
break;
|
||||
|
||||
case 'bottom-left':
|
||||
elPosClass = 'bottom-0 start-0';
|
||||
break;
|
||||
|
||||
case 'bottom-center':
|
||||
elPosClass = 'bottom-0 start-50 translate-middle-x';
|
||||
break;
|
||||
|
||||
case 'bottom-right':
|
||||
elPosClass = 'bottom-0 end-0';
|
||||
break;
|
||||
|
||||
default:
|
||||
elPosClass = 'top-0 end-0';
|
||||
break;
|
||||
}
|
||||
|
||||
if( elType == 'info' || elType == 'warning' || !elType ) {
|
||||
elCloseClass = '';
|
||||
} else {
|
||||
elCloseClass = 'btn-close-white';
|
||||
}
|
||||
|
||||
if( elClose == 'true' ) {
|
||||
elCloseHtml = '<button type="button" class="btn-close '+ elCloseClass +' btn-sm me-2 mt-2 ms-auto" data-bs-dismiss="toast" aria-label="Close"></button>';
|
||||
}
|
||||
|
||||
if( elAutoHide != 'true' ) {
|
||||
elAutoHide = false;
|
||||
} else {
|
||||
elAutoHide = true;
|
||||
}
|
||||
|
||||
let elTemplate = '<div class="position-fixed '+ elPosClass +' p-3" style="z-index: 999999;">'+
|
||||
'<div id="'+ elId +'" class="toast p-2 hide '+ elTypeClass +'" role="alert" aria-live="assertive" aria-atomic="true">'+
|
||||
'<div class="d-flex">'+
|
||||
'<div class="toast-body">'+
|
||||
elMsg +
|
||||
'</div>'+
|
||||
elCloseHtml +
|
||||
'</div>'+
|
||||
'</div>';
|
||||
'</div>';
|
||||
|
||||
if( elTrigger == 'self' ) {
|
||||
if( !elTarget ) {
|
||||
element.attr( 'data-notify-target', '#'+elId );
|
||||
jQuery('body').append( elTemplate );
|
||||
}
|
||||
}
|
||||
|
||||
var toastElList = [].slice.call(document.querySelectorAll('.toast'));
|
||||
var toastList = toastElList.map( function(toastEl) {
|
||||
return new bootstrap.Toast(toastEl);
|
||||
});
|
||||
|
||||
toastList.forEach( function(toast) {
|
||||
toast.hide();
|
||||
});
|
||||
|
||||
var toastElement = element.attr('data-notify-target'),
|
||||
toastInstance = jQuery(toastElement),
|
||||
elMsgOld = toastInstance.find('.toast-body');
|
||||
|
||||
if( jQuery(toastElement).length > 0 ) {
|
||||
var toast = new bootstrap.Toast( toastInstance.get(0) ,{
|
||||
delay: Number(elTimeout),
|
||||
autohide: elAutoHide,
|
||||
});
|
||||
|
||||
toast.show();
|
||||
|
||||
if( elTrigger == 'self' ) {
|
||||
toastInstance.get(0).addEventListener('hidden.bs.toast', function() {
|
||||
toastInstance.parent().remove();
|
||||
element.get(0).removeAttribute( 'data-notify-target' );
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
298
public/js/modules/onepage.js
Normal file
298
public/js/modules/onepage.js
Normal file
@@ -0,0 +1,298 @@
|
||||
CNVS.OnePage = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _init = function(selector) {
|
||||
_hash();
|
||||
|
||||
if( __core.getVars.elLinkScrolls ) {
|
||||
__core.getVars.elLinkScrolls.forEach( function(el) {
|
||||
_getSettings( el, 'scrollTo' );
|
||||
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
_scroller( el, 'scrollTo', true );
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
if( __core.getVars.elOnePageMenus ) {
|
||||
__core.getVars.elOnePageMenus.forEach( function(onePageMenu) {
|
||||
__core.getVars.elOnePageActiveClass = onePageMenu.getAttribute('data-active-class') || 'current';
|
||||
__core.getVars.elOnePageParentSelector = onePageMenu.getAttribute('data-parent') || 'li';
|
||||
__core.getVars.elOnePageActiveOnClick = onePageMenu.getAttribute('data-onclick-active') || 'false';
|
||||
|
||||
onePageMenu.querySelectorAll('[data-href]').forEach( function(el) {
|
||||
_getSettings( el, 'onePage' );
|
||||
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
_scroller( el, 'onePage', true );
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var _hash = function() {
|
||||
if( __core.getOptions.scrollExternalLinks != true ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if( document.querySelector('a[data-href="'+ __core.getVars.hash +'"]') || document.querySelector('a[data-scrollto="'+ __core.getVars.hash +'"]') ) {
|
||||
window.onbeforeunload = function() {
|
||||
__core.scrollTo(0, 0, false, 'auto');
|
||||
};
|
||||
|
||||
__core.scrollTo(0, 0, false, 'auto');
|
||||
|
||||
var section = document.querySelector(__core.getVars.hash);
|
||||
|
||||
if( section ) {
|
||||
var int = setInterval( function() {
|
||||
var settings = section.getAttribute('data-onepage-settings') && JSON.parse( section.getAttribute('data-onepage-settings') );
|
||||
|
||||
if( settings ) {
|
||||
_scroll(section, settings, 0);
|
||||
clearInterval(int);
|
||||
}
|
||||
}, 250);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var _getSection = function(el, type) {
|
||||
var anchor;
|
||||
|
||||
if( type == 'scrollTo' ) {
|
||||
anchor = el.getAttribute('data-scrollto');
|
||||
} else {
|
||||
anchor = el.getAttribute('data-href');
|
||||
}
|
||||
|
||||
var section = document.querySelector( anchor );
|
||||
|
||||
return section;
|
||||
};
|
||||
|
||||
var _getSettings = function(el, type) {
|
||||
var section = _getSection(el, type);
|
||||
|
||||
if( !section ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
section.removeAttribute('data-onepage-settings');
|
||||
|
||||
var settings = _settings( section, el );
|
||||
|
||||
setTimeout( function() {
|
||||
if( !section.hasAttribute('data-onepage-settings') ) {
|
||||
section.setAttribute( 'data-onepage-settings', JSON.stringify( settings ) );
|
||||
}
|
||||
|
||||
__core.getVars.pageSectionEls = document.querySelectorAll('[data-onepage-settings]');
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
var _scroller = function(el, type, clicker = false) {
|
||||
var section = _getSection(el, type),
|
||||
sectionId = section.getAttribute('id'),
|
||||
settings;
|
||||
|
||||
if( !section ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if( clicker == true ) {
|
||||
settings = _settings(section, el, false);
|
||||
} else {
|
||||
settings = JSON.parse(section.getAttribute('data-onepage-settings'));
|
||||
}
|
||||
|
||||
if( type != 'scrollTo' && __core.getVars.elOnePageActiveOnClick == 'true' ) {
|
||||
parent = el.closest('.one-page-menu');
|
||||
|
||||
parent.querySelectorAll(__core.getVars.elOnePageParentSelector).forEach( function(el) {
|
||||
el.classList.remove( __core.getVars.elOnePageActiveClass );
|
||||
});
|
||||
|
||||
parent.querySelector('a[data-href="#' + sectionId + '"]').closest(__core.getVars.elOnePageParentSelector).classList.add( __core.getVars.elOnePageActiveClass );
|
||||
}
|
||||
|
||||
if( !__core.getVars.elBody.classList.contains('is-expanded-menu') || __core.getVars.elBody.classList.contains('overlay-menu') ) {
|
||||
__core.getVars.recalls.menureset();
|
||||
}
|
||||
|
||||
_scroll(section, settings, 250);
|
||||
};
|
||||
|
||||
var _scroll = function(section, settings, timeout) {
|
||||
setTimeout( function() {
|
||||
var sectionOffset = __core.offset(section).top;
|
||||
|
||||
if( !settings ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.scrollTo((sectionOffset - Number(settings.offset)), settings.speed, settings.easing);
|
||||
}, Number(timeout));
|
||||
};
|
||||
|
||||
var _position = function() {
|
||||
__core.getVars.elOnePageMenus && __core.getVars.elOnePageMenus.forEach( function(el) {
|
||||
el.querySelectorAll('[data-href]').forEach( function(item) {
|
||||
item.closest(__core.getVars.elOnePageParentSelector).classList.remove( __core.getVars.elOnePageActiveClass );
|
||||
});
|
||||
});
|
||||
|
||||
__core.getVars.elOnePageMenus && __core.getVars.elOnePageMenus.forEach( function(el) {
|
||||
el.querySelector('[data-href="#' + _current() + '"]')?.closest(__core.getVars.elOnePageParentSelector).classList.add( __core.getVars.elOnePageActiveClass );
|
||||
});
|
||||
};
|
||||
|
||||
var _current = function() {
|
||||
var currentOnePageSection;
|
||||
|
||||
if( typeof __core.getVars.pageSectionEls === 'undefined' ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.getVars.pageSectionEls.forEach( function(el) {
|
||||
var settings = el.getAttribute('data-onepage-settings') && JSON.parse( el.getAttribute('data-onepage-settings') );
|
||||
|
||||
if( settings ) {
|
||||
var h = __core.offset(el).top - settings.offset - 5,
|
||||
y = window.scrollY;
|
||||
|
||||
if( ( y >= h ) && ( y < h + el.offsetHeight ) && el.getAttribute('id') != currentOnePageSection && el.getAttribute('id') ) {
|
||||
currentOnePageSection = el.getAttribute('id');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return currentOnePageSection;
|
||||
};
|
||||
|
||||
var _settings = function(section, element, json=true) {
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
if( typeof section === 'undefined' || element.length < 1 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( section.hasAttribute('data-onepage-settings') && json ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var defaults = {
|
||||
offset: __core.getVars.topScrollOffset,
|
||||
speed: 1250,
|
||||
easing: false
|
||||
};
|
||||
|
||||
var settings = {},
|
||||
parentSettings = {},
|
||||
parent = element.closest( '.one-page-menu' );
|
||||
|
||||
parentSettings.offset = parent?.getAttribute( 'data-offset' ) || defaults.offset;
|
||||
parentSettings.speed = parent?.getAttribute( 'data-speed' ) || defaults.speed;
|
||||
parentSettings.easing = parent?.getAttribute( 'data-easing' ) || defaults.easing;
|
||||
|
||||
var elementSettings = {
|
||||
offset: element.getAttribute( 'data-offset' ) || parentSettings.offset,
|
||||
speed: element.getAttribute( 'data-speed' ) || parentSettings.speed,
|
||||
easing: element.getAttribute( 'data-easing' ) || parentSettings.easing,
|
||||
};
|
||||
|
||||
var elOffsetXXL = element.getAttribute( 'data-offset-xxl' ),
|
||||
elOffsetXL = element.getAttribute( 'data-offset-xl' ),
|
||||
elOffsetLG = element.getAttribute( 'data-offset-lg' ),
|
||||
elOffsetMD = element.getAttribute( 'data-offset-md' ),
|
||||
elOffsetSM = element.getAttribute( 'data-offset-sm' ),
|
||||
elOffsetXS = element.getAttribute( 'data-offset-xs' );
|
||||
|
||||
if( !elOffsetXS ) {
|
||||
elOffsetXS = Number(elementSettings.offset);
|
||||
}
|
||||
|
||||
if( !elOffsetSM ) {
|
||||
elOffsetSM = Number(elOffsetXS);
|
||||
}
|
||||
|
||||
if( !elOffsetMD ) {
|
||||
elOffsetMD = Number(elOffsetSM);
|
||||
}
|
||||
|
||||
if( !elOffsetLG ) {
|
||||
elOffsetLG = Number(elOffsetMD);
|
||||
}
|
||||
|
||||
if( !elOffsetXL ) {
|
||||
elOffsetXL = Number(elOffsetLG);
|
||||
}
|
||||
|
||||
if( !elOffsetXXL ) {
|
||||
elOffsetXXL = Number(elOffsetXL);
|
||||
}
|
||||
|
||||
if( body.contains('device-xs') ) {
|
||||
elementSettings.offset = elOffsetXS;
|
||||
} else if( body.contains('device-sm') ) {
|
||||
elementSettings.offset = elOffsetSM;
|
||||
} else if( body.contains('device-md') ) {
|
||||
elementSettings.offset = elOffsetMD;
|
||||
} else if( body.contains('device-lg') ) {
|
||||
elementSettings.offset = elOffsetLG;
|
||||
} else if( body.contains('device-xl') ) {
|
||||
elementSettings.offset = elOffsetXL;
|
||||
} else if( body.contains('device-xxl') ) {
|
||||
elementSettings.offset = elOffsetXXL;
|
||||
}
|
||||
|
||||
settings.offset = Number(elementSettings.offset);
|
||||
settings.speed = Number(elementSettings.speed);
|
||||
settings.easing = elementSettings.easing;
|
||||
|
||||
return settings;
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-onepage', event: 'pluginOnePageReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var scrollToLinks = __core.filtered( selector, '[data-scrollto]' ),
|
||||
onePageLinks = __core.filtered( selector, '.one-page-menu' );
|
||||
|
||||
if( scrollToLinks.length > 0 ) {
|
||||
__core.getVars.elLinkScrolls = scrollToLinks;
|
||||
}
|
||||
|
||||
if( onePageLinks.length > 0 ) {
|
||||
__core.getVars.elOnePageMenus = onePageLinks;
|
||||
}
|
||||
|
||||
_init(selector);
|
||||
_position();
|
||||
|
||||
window.addEventListener('scroll', function(){
|
||||
_position();
|
||||
}, {passive:true});
|
||||
|
||||
__core.getVars.resizers.onepage = function() {
|
||||
_init(selector);
|
||||
_position();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
92
public/js/modules/pagemenu.js
Normal file
92
public/js/modules/pagemenu.js
Normal file
@@ -0,0 +1,92 @@
|
||||
CNVS.PageMenu = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _sticky = function(stickyOffset) {
|
||||
var pageMenu = __core.getVars.elPageMenu;
|
||||
|
||||
if( window.scrollY > stickyOffset ) {
|
||||
if( __core.getVars.elBody.classList.contains('device-up-lg') ) {
|
||||
pageMenu.classList.add('sticky-page-menu');
|
||||
} else {
|
||||
if( pageMenu.getAttribute('data-mobile-sticky') == 'true' ) {
|
||||
pageMenu.classList.add('sticky-page-menu');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pageMenu.classList.remove('sticky-page-menu');
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var pageMenu = __core.getVars.elPageMenu,
|
||||
pageMenuWrap = pageMenu.querySelector('#page-menu-wrap'),
|
||||
pageMenuClone = pageMenu.querySelector('.page-menu-wrap-clone');
|
||||
|
||||
if( !pageMenuClone ) {
|
||||
pageMenuClone = document.createElement('div');
|
||||
pageMenuClone.classList = 'page-menu-wrap-clone';
|
||||
|
||||
pageMenuWrap.parentNode.insertBefore( pageMenuClone, pageMenuWrap.nextSibling);
|
||||
pageMenuClone = pageMenu.querySelector('.page-menu-wrap-clone');
|
||||
}
|
||||
|
||||
pageMenuClone.style.height = pageMenu.querySelector('#page-menu-wrap').offsetHeight + 'px';
|
||||
|
||||
pageMenu.querySelector('#page-menu-trigger').onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.getVars.elBody.classList.remove('top-search-open');
|
||||
pageMenu.classList.toggle('page-menu-open');
|
||||
};
|
||||
|
||||
pageMenu.querySelector('nav').onclick = function(e) {
|
||||
__core.getVars.elBody.classList.remove('top-search-open');
|
||||
document.getElementById('top-cart').classList.remove('top-cart-open');
|
||||
};
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
if( !e.target.closest('#page-menu') ) {
|
||||
pageMenu.classList.remove('page-menu-open');
|
||||
}
|
||||
}, false);
|
||||
|
||||
if( pageMenu.classList.contains('no-sticky') || pageMenu.classList.contains('dots-menu') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var headerHeight;
|
||||
|
||||
if( __core.getVars.elHeader.classList.contains('no-sticky') ) {
|
||||
headerHeight = 0;
|
||||
} else if( __core.getVars.elHeader.getAttribute('data-sticky-shrink') == 'false' ) {
|
||||
headerHeight = getComputedStyle(__core.getVars.elHeader).getPropertyValue('--cnvs-header-height').split('px')[0];
|
||||
} else {
|
||||
headerHeight = getComputedStyle(__core.getVars.elHeader).getPropertyValue('--cnvs-header-height-shrink').split('px')[0];
|
||||
}
|
||||
|
||||
pageMenu.style.setProperty("--cnvs-page-submenu-sticky-offset", headerHeight+'px');
|
||||
|
||||
setTimeout(function() {
|
||||
__core.getVars.pageMenuOffset = __core.offset(pageMenu).top - headerHeight;
|
||||
_sticky( __core.getVars.pageMenuOffset );
|
||||
}, 500);
|
||||
|
||||
window.addEventListener('scroll', function(){
|
||||
_sticky( __core.getVars.pageMenuOffset );
|
||||
}, {passive:true});
|
||||
|
||||
__core.getVars.resizers.pagemenu = function() {
|
||||
setTimeout( function() {
|
||||
__core.getVars.pageMenuOffset = __core.offset(pageMenu).top - headerHeight;
|
||||
_sticky( __core.getVars.pageMenuOffset );
|
||||
}, 250);
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
164
public/js/modules/pagetransition.js
Normal file
164
public/js/modules/pagetransition.js
Normal file
@@ -0,0 +1,164 @@
|
||||
CNVS.PageTransition = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
var body = __core.getVars.elBody;
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-pagetransition', event: 'pluginPageTransitionReady' });
|
||||
|
||||
if( body.classList.contains('no-transition') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if( !body.classList.contains('page-transition') ) {
|
||||
body.classList.add('page-transition');
|
||||
}
|
||||
|
||||
window.onpageshow = function(event) {
|
||||
if(event.persisted) {
|
||||
window.location.reload();
|
||||
}
|
||||
};
|
||||
|
||||
var pageTransition = document.querySelector('.page-transition-wrap');
|
||||
|
||||
var elAnimIn = body.getAttribute('data-animation-in') || 'fadeIn',
|
||||
elSpeedIn = body.getAttribute('data-speed-in') || 1000,
|
||||
elTimeoutActive = false,
|
||||
elTimeout = body.getAttribute('data-loader-timeout'),
|
||||
elLoader = body.getAttribute('data-loader'),
|
||||
elLoaderColor = body.getAttribute('data-loader-color'),
|
||||
elLoaderHtml = body.getAttribute('data-loader-html'),
|
||||
elLoaderAppend = '',
|
||||
elLoaderCSSVar = '';
|
||||
|
||||
if( !elTimeout ) {
|
||||
elTimeoutActive = false;
|
||||
elTimeout = false;
|
||||
} else {
|
||||
elTimeoutActive = true;
|
||||
elTimeout = Number(elTimeout);
|
||||
}
|
||||
|
||||
if( elLoaderColor ) {
|
||||
if( elLoaderColor == 'theme' ) {
|
||||
elLoaderCSSVar = ' style="--cnvs-loader-color:var(--cnvs-themecolor);"';
|
||||
} else {
|
||||
elLoaderCSSVar = ' style="--cnvs-loader-color:'+elLoaderColor+';"';
|
||||
}
|
||||
}
|
||||
|
||||
var elLoaderBefore = '<div class="css3-spinner"'+elLoaderCSSVar+'>',
|
||||
elLoaderAfter = '</div>';
|
||||
|
||||
if( elLoader == '2' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-flipper"></div>';
|
||||
} else if( elLoader == '3' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-double-bounce1"></div><div class="css3-spinner-double-bounce2"></div>';
|
||||
} else if( elLoader == '4' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-rect1"></div><div class="css3-spinner-rect2"></div><div class="css3-spinner-rect3"></div><div class="css3-spinner-rect4"></div><div class="css3-spinner-rect5"></div>';
|
||||
} else if( elLoader == '5' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-cube1"></div><div class="css3-spinner-cube2"></div>';
|
||||
} else if( elLoader == '6' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-scaler"></div>';
|
||||
} else if( elLoader == '7' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-grid-pulse"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>';
|
||||
} else if( elLoader == '8' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-clip-rotate"><div></div></div>';
|
||||
} else if( elLoader == '9' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-ball-rotate"><div></div><div></div><div></div></div>';
|
||||
} else if( elLoader == '10' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-zig-zag"><div></div><div></div></div>';
|
||||
} else if( elLoader == '11' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-triangle-path"><div></div><div></div><div></div></div>';
|
||||
} else if( elLoader == '12' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-ball-scale-multiple"><div></div><div></div><div></div></div>';
|
||||
} else if( elLoader == '13' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-ball-pulse-sync"><div></div><div></div><div></div></div>';
|
||||
} else if( elLoader == '14' ) {
|
||||
elLoaderAppend = '<div class="css3-spinner-scale-ripple"><div></div><div></div><div></div></div>';
|
||||
} else {
|
||||
elLoaderAppend = '<div class="css3-spinner-bounce1"></div><div class="css3-spinner-bounce2"></div><div class="css3-spinner-bounce3"></div>';
|
||||
}
|
||||
|
||||
if( !elLoaderHtml ) {
|
||||
elLoaderHtml = elLoaderAppend;
|
||||
}
|
||||
|
||||
elLoaderHtml = elLoaderBefore + elLoaderHtml + elLoaderAfter;
|
||||
|
||||
if( elAnimIn == 'fadeIn' ) {
|
||||
__core.getVars.elWrapper.classList.add('op-1');
|
||||
} else {
|
||||
__core.getVars.elWrapper.classList.add('not-animated');
|
||||
}
|
||||
|
||||
if( !pageTransition ) {
|
||||
var divPT = document.createElement('div');
|
||||
divPT.classList.add('page-transition-wrap');
|
||||
divPT.innerHTML = elLoaderHtml;
|
||||
body.prepend( divPT );
|
||||
pageTransition = document.querySelector('.page-transition-wrap');
|
||||
}
|
||||
|
||||
if( elSpeedIn ) {
|
||||
__core.getVars.elWrapper.style.setProperty('--cnvs-animate-duration', Number(elSpeedIn)+'ms');
|
||||
if( elAnimIn == 'fadeIn' ) {
|
||||
pageTransition.style.setProperty('--cnvs-animate-duration', Number(elSpeedIn)+'ms');
|
||||
}
|
||||
}
|
||||
|
||||
var endPageTransition = function() {
|
||||
elAnimIn.split(" ").forEach( function(_class) {
|
||||
pageTransition.classList.remove(_class);
|
||||
});
|
||||
|
||||
pageTransition.classList.add('fadeOut', 'animated');
|
||||
|
||||
var removePageTransition = function() {
|
||||
pageTransition.remove();
|
||||
if( elAnimIn != 'fadeIn' ) {
|
||||
__core.getVars.elWrapper.classList.remove('not-animated');
|
||||
(elAnimIn + ' animated').split(" ").forEach(function(_class) {
|
||||
__core.getVars.elWrapper.classList.add(_class);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var displayContent = function() {
|
||||
body.classList.remove('page-transition');
|
||||
|
||||
setTimeout(function() {
|
||||
(elAnimIn + ' animated').split(" ").forEach( function(_class) {
|
||||
__core.getVars.elWrapper.classList.remove(_class);
|
||||
});
|
||||
}, 333);
|
||||
|
||||
setTimeout(function() {
|
||||
__core.getVars.elWrapper.style.removeProperty('--cnvs-animate-duration');
|
||||
}, 666);
|
||||
};
|
||||
|
||||
pageTransition.addEventListener('transitionend', removePageTransition);
|
||||
pageTransition.addEventListener('animationend', removePageTransition);
|
||||
__core.getVars.elWrapper.addEventListener('transitionend', displayContent);
|
||||
__core.getVars.elWrapper.addEventListener('animationend', displayContent);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
if( document.readyState === 'complete' ) {
|
||||
endPageTransition();
|
||||
}
|
||||
|
||||
if( elTimeoutActive ) {
|
||||
setTimeout( endPageTransition, elTimeout );
|
||||
}
|
||||
|
||||
window.addEventListener('load', function(){
|
||||
endPageTransition();
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
198
public/js/modules/portfolioajax.js
Normal file
198
public/js/modules/portfolioajax.js
Normal file
@@ -0,0 +1,198 @@
|
||||
CNVS.PortfolioAjax = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _newNextPrev = function(portPostId) {
|
||||
var portNext = _getNext(portPostId);
|
||||
var portPrev = _getPrev(portPostId);
|
||||
var portNav = document.getElementById('portfolio-navigation');
|
||||
|
||||
if( !document.getElementById('prev-portfolio') && portPrev ) {
|
||||
var prevPortItem = document.createElement('a');
|
||||
prevPortItem.setAttribute('href', '#');
|
||||
prevPortItem.setAttribute('id', 'prev-portfolio');
|
||||
prevPortItem.setAttribute('data-id', portPrev);
|
||||
prevPortItem.innerHTML = '<i class="bi-arrow-left"></i>';
|
||||
prevPortItem && portNav?.insertBefore(prevPortItem, document.getElementById('close-portfolio'));
|
||||
}
|
||||
|
||||
if( !document.getElementById('next-portfolio') && portNext ) {
|
||||
var nextPortItem = document.createElement('a');
|
||||
nextPortItem.setAttribute('href', '#');
|
||||
nextPortItem.setAttribute('id', 'next-portfolio');
|
||||
nextPortItem.setAttribute('data-id', portNext);
|
||||
nextPortItem.innerHTML = '<i class="bi-arrow-right"></i>';
|
||||
nextPortItem && portNav?.insertBefore(nextPortItem, document.getElementById('close-portfolio'));
|
||||
}
|
||||
};
|
||||
|
||||
var _load = function(portPostId, prevPostPortId, getIt) {
|
||||
if( !getIt ) {
|
||||
getIt = false;
|
||||
}
|
||||
|
||||
var portNext = _getNext(portPostId);
|
||||
var portPrev = _getPrev(portPostId);
|
||||
|
||||
if( getIt == false ) {
|
||||
_close();
|
||||
__core.getVars.elBody.classList.add('portfolio-ajax-loading');
|
||||
// __core.getVars.portfolioAjax.loader.classList.add('loader-overlay-display');
|
||||
var portfolioDataLoader = document.getElementById(portPostId).getAttribute('data-loader');
|
||||
|
||||
fetch(portfolioDataLoader).then( function(response) {
|
||||
return response.text();
|
||||
}).then( function(html) {
|
||||
__core.getVars.portfolioAjax.container.innerHTML = html;
|
||||
|
||||
var nextPortfolio = document.getElementById('next-portfolio'),
|
||||
prevPortfolio = document.getElementById('prev-portfolio');
|
||||
|
||||
nextPortfolio?.classList.add('d-none');
|
||||
prevPortfolio?.classList.add('d-none');
|
||||
|
||||
if( portNext ) {
|
||||
nextPortfolio?.setAttribute('data-id', portNext);
|
||||
nextPortfolio?.classList.remove('d-none');
|
||||
}
|
||||
|
||||
if( portPrev ) {
|
||||
prevPortfolio?.setAttribute('data-id', portPrev);
|
||||
prevPortfolio?.classList.remove('d-none');
|
||||
}
|
||||
|
||||
_initAjax(portPostId);
|
||||
_open();
|
||||
|
||||
__core.getVars.portfolioAjax.items.forEach( function(item) {
|
||||
item.classList.remove('portfolio-active');
|
||||
});
|
||||
|
||||
document.getElementById(portPostId).classList.add('portfolio-active');
|
||||
}).catch( function(error) {
|
||||
console.warn('Something went wrong.', error);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var _close = function() {
|
||||
if( __core.getVars.portfolioAjax.wrapper && __core.getVars.portfolioAjax.wrapper.offsetHeight > 32 ) {
|
||||
__core.getVars.elBody.classList.remove('portfolio-ajax-loading');
|
||||
// __core.getVars.portfolioAjax.loader.classList.add('loader-overlay-display');
|
||||
__core.getVars.portfolioAjax.wrapper.classList.remove('portfolio-ajax-opened');
|
||||
|
||||
__core.getVars.portfolioAjax.wrapper.querySelector('#portfolio-ajax-single').addEventListener('transitionend', function() {
|
||||
__core.getVars.portfolioAjax.wrapper.querySelector('#portfolio-ajax-single').remove();
|
||||
});
|
||||
|
||||
__core.getVars.portfolioAjax.items.forEach( function(item) {
|
||||
item.classList.remove('portfolio-active');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var _open = function() {
|
||||
var countImages = __core.getVars.portfolioAjax.container.querySelectorAll('img').length;
|
||||
|
||||
if( countImages < 1 ) {
|
||||
_display();
|
||||
} else {
|
||||
__core.imagesLoaded(__core.getVars.portfolioAjax.container);
|
||||
__core.getVars.portfolioAjax.container.addEventListener( 'CanvasImagesLoaded', function() {
|
||||
_display();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var _display = function() {
|
||||
__core.getVars.portfolioAjax.container.style.display = 'block';
|
||||
__core.getVars.portfolioAjax.wrapper.classList.add('portfolio-ajax-opened');
|
||||
__core.getVars.elBody.classList.remove('portfolio-ajax-loading');
|
||||
// __core.getVars.portfolioAjax.loader.classList.remove('loader-overlay-display');
|
||||
setTimeout( function() {
|
||||
__core.runContainerModules( __core.getVars.portfolioAjax.wrapper );
|
||||
__core.scrollTo((__core.getVars.portfolioAjax.wrapperOffset - __core.getVars.topScrollOffset - 60), false, false);
|
||||
}, 500);
|
||||
}
|
||||
|
||||
var _getNext = function(portPostId) {
|
||||
var portNext = false;
|
||||
var hasNext = document.getElementById(portPostId).nextElementSibling;
|
||||
|
||||
if( hasNext ) {
|
||||
portNext = hasNext.getAttribute('id');
|
||||
}
|
||||
|
||||
return portNext;
|
||||
};
|
||||
|
||||
var _getPrev = function(portPostId) {
|
||||
var portPrev = false;
|
||||
var hasPrev = document.getElementById(portPostId).previousElementSibling;
|
||||
|
||||
if( hasPrev ) {
|
||||
portPrev = hasPrev.getAttribute('id');
|
||||
}
|
||||
|
||||
return portPrev;
|
||||
};
|
||||
|
||||
var _initAjax = function(portPostId) {
|
||||
__core.getVars.portfolioAjax.prevItem = document.getElementById(portPostId);
|
||||
|
||||
_newNextPrev(portPostId);
|
||||
|
||||
document.querySelectorAll('#next-portfolio, #prev-portfolio').forEach( function(el) {
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
_close();
|
||||
|
||||
var portPostId = el.getAttribute('data-id');
|
||||
document.getElementById(portPostId).classList.add('portfolio-active');
|
||||
_load(portPostId, __core.getVars.portfolioAjax.prevItem);
|
||||
};
|
||||
})
|
||||
|
||||
document.getElementById('close-portfolio').onclick = function(e) {
|
||||
e.preventDefault();
|
||||
_close();
|
||||
};
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-ajaxportfolio', event: 'pluginAjaxPortfolioReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.getVars.portfolioAjax.items = selector[0].querySelectorAll('.portfolio-item');
|
||||
__core.getVars.portfolioAjax.wrapper = document.getElementById('portfolio-ajax-wrap');
|
||||
__core.getVars.portfolioAjax.wrapperOffset = __core.offset(__core.getVars.portfolioAjax.wrapper).top;
|
||||
__core.getVars.portfolioAjax.container = document.getElementById('portfolio-ajax-container');
|
||||
__core.getVars.portfolioAjax.loader = document.getElementById('portfolio-ajax-loader');
|
||||
__core.getVars.portfolioAjax.prevItem = '';
|
||||
|
||||
selector[0].querySelectorAll('.portfolio-ajax-trigger').forEach( function(el) {
|
||||
if( !el.querySelector('i:nth-child(2)') ) {
|
||||
el.innerHTML += '<i class="bi-arrow-repeat icon-spin"></i>';
|
||||
}
|
||||
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var portPostId = e.target.closest('.portfolio-item').getAttribute('id');
|
||||
|
||||
if( !e.target.closest('.portfolio-item').classList.contains('portfolio-active') ) {
|
||||
_load(portPostId, __core.getVars.portfolioAjax.prevItem);
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
81
public/js/modules/pricingswitcher.js
Normal file
81
public/js/modules/pricingswitcher.js
Normal file
@@ -0,0 +1,81 @@
|
||||
CNVS.PricingSwitcher = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _staticValue;
|
||||
|
||||
var _switcher = function(check, switcher, pricing, defClass, actClass) {
|
||||
var value;
|
||||
|
||||
if( check.type == 'checkbox' ) {
|
||||
_staticValue = check.checked;
|
||||
} else if( check.type == 'radio' ) {
|
||||
if( check.checked ) {
|
||||
_staticValue = check.value;
|
||||
}
|
||||
} else {
|
||||
_staticValue = check.value;
|
||||
}
|
||||
|
||||
value = _staticValue;
|
||||
|
||||
switcher.querySelectorAll('.pts-switch')?.forEach( function(elem) {
|
||||
actClass.split(" ").forEach( function(_class) {
|
||||
elem.classList.remove(_class);
|
||||
});
|
||||
|
||||
defClass.split(" ").forEach( function(_class) {
|
||||
elem.classList.add(_class);
|
||||
});
|
||||
});
|
||||
|
||||
pricing.querySelectorAll('.pts-content')?.forEach( function(elem) {
|
||||
elem.classList.add('d-none');
|
||||
});
|
||||
|
||||
if( check.type == 'checkbox' ) {
|
||||
value = value ? 'true' : 'false';
|
||||
}
|
||||
|
||||
defClass.split(" ").forEach( function(_class) {
|
||||
switcher.querySelector('.pts-' + value)?.classList.remove(_class);
|
||||
});
|
||||
|
||||
actClass.split(" ").forEach( function(_class) {
|
||||
switcher.querySelector('.pts-' + value)?.classList.add(_class);
|
||||
});
|
||||
|
||||
pricing.querySelectorAll('.pts-content-' + value).forEach( function(el) {
|
||||
el.classList.remove('d-none');
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-pricing-switcher', event: 'pluginPricingSwitcherReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elCheck = element.querySelectorAll('[type="checkbox"], [type="radio"], select'),
|
||||
elDefClass = element.getAttribute('data-default-class') || 'text-muted op-05',
|
||||
elActClass = element.getAttribute('data-active-class') || 'fw-bold',
|
||||
elPricing = document.querySelector( element.getAttribute('data-container') );
|
||||
|
||||
elCheck.forEach( function(el) {
|
||||
_switcher(el, element, elPricing, elDefClass, elActClass);
|
||||
|
||||
el.addEventListener( 'change', function() {
|
||||
_switcher(el, element, elPricing, elDefClass, elActClass);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
56
public/js/modules/progress.js
Normal file
56
public/js/modules/progress.js
Normal file
@@ -0,0 +1,56 @@
|
||||
CNVS.Progress = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().countTo;
|
||||
}).then( function(cond) {
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-progress', event: 'pluginProgressReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elValue = element.getAttribute('data-percent') || 90,
|
||||
elSpeed = element.getAttribute('data-speed') || 1200,
|
||||
elBar = element.querySelector('.skill-progress-percent');
|
||||
|
||||
elSpeed = Number(elSpeed) + 'ms';
|
||||
|
||||
elBar.style.setProperty( '--cnvs-progress-speed', elSpeed );
|
||||
|
||||
var observer = new IntersectionObserver( function(entries, observer){
|
||||
entries.forEach( function(entry) {
|
||||
if (entry.isIntersecting) {
|
||||
if (!elBar.classList.contains('skill-animated')) {
|
||||
__modules.counter(element.querySelector('.counter'));
|
||||
|
||||
if ( element.classList.contains('skill-progress-vertical') ) {
|
||||
elBar.style.height = elValue + "%";
|
||||
elBar.classList.add('skill-animated');
|
||||
} else {
|
||||
elBar.style.width = elValue + "%";
|
||||
elBar.classList.add('skill-animated');
|
||||
}
|
||||
}
|
||||
|
||||
observer.unobserve( entry.target );
|
||||
}
|
||||
});
|
||||
}, {rootMargin: '0px 0px 50px'});
|
||||
|
||||
observer.observe( elBar );
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
72
public/js/modules/quantity.js
Normal file
72
public/js/modules/quantity.js
Normal file
@@ -0,0 +1,72 @@
|
||||
CNVS.Quantity = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-quantity', event: 'pluginQuantityReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var plus = element.querySelector('.plus'),
|
||||
minus = element.querySelector('.minus'),
|
||||
input = element.querySelector('.qty');
|
||||
|
||||
var eventChange = new Event("change");
|
||||
|
||||
plus.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var value = input.value,
|
||||
step = input.getAttribute('step') || 1,
|
||||
max = input.getAttribute('max'),
|
||||
intRegex = /^\d+$/;
|
||||
|
||||
if( max && ( Number(elValue) >= Number( max ) ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if( intRegex.test( value ) ) {
|
||||
var valuePlus = Number(value) + Number(step);
|
||||
input.value = valuePlus;
|
||||
} else {
|
||||
input.value = Number(step);
|
||||
}
|
||||
|
||||
input.dispatchEvent(eventChange);
|
||||
};
|
||||
|
||||
minus.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var value = input.value,
|
||||
step = input.getAttribute('step') || 1,
|
||||
min = input.getAttribute('min'),
|
||||
intRegex = /^\d+$/;
|
||||
|
||||
if( !min || min < 0 ) {
|
||||
min = 1;
|
||||
}
|
||||
|
||||
if( intRegex.test( value ) ) {
|
||||
if( Number(value) > Number(min) ) {
|
||||
var valueMinus = Number(value) - Number(step);
|
||||
input.value = valueMinus;
|
||||
}
|
||||
} else {
|
||||
input.value = Number(step);
|
||||
}
|
||||
|
||||
input.dispatchEvent(eventChange);
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
121
public/js/modules/readmore.js
Normal file
121
public/js/modules/readmore.js
Normal file
@@ -0,0 +1,121 @@
|
||||
CNVS.ReadMore = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
var _HEXtoRGBA = function(hex, op) {
|
||||
var c;
|
||||
|
||||
if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){
|
||||
c= hex.substring(1).split('');
|
||||
if(c.length==3){
|
||||
c= [c[0], c[0], c[1], c[1], c[2], c[2]];
|
||||
}
|
||||
c= '0x'+c.join('');
|
||||
return 'rgba('+[(c>>16)&255, (c>>8)&255, c&255].join(',')+','+op+')';
|
||||
}
|
||||
|
||||
console.log('Bad Hex');
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-readmore', event: 'pluginReadMoreReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var element = el,
|
||||
elSize = element.getAttribute('data-readmore-size') || '10rem',
|
||||
elSpeed = element.getAttribute('data-readmore-speed') || 500,
|
||||
elScrollUp = element.getAttribute('data-readmore-scrollup') || 'false',
|
||||
elTrigger = element.getAttribute('data-readmore-trigger') || '.read-more-trigger',
|
||||
elTriggerO = element.getAttribute('data-readmore-trigger-open') || 'Read More',
|
||||
elTriggerC = element.getAttribute('data-readmore-trigger-close') || 'Read Less',
|
||||
elMask;
|
||||
|
||||
element.style.height = '';
|
||||
element.classList.remove('read-more-wrap-open');
|
||||
|
||||
var elHeight = element.offsetHeight;
|
||||
|
||||
var elTriggerElement = element.querySelector( elTrigger );
|
||||
elTriggerElement.classList.remove('d-none');
|
||||
var elHeightN = elHeight + elTriggerElement.offsetHeight;
|
||||
|
||||
elTriggerElement.innerHTML = elTriggerO;
|
||||
elSpeed = Number( elSpeed );
|
||||
|
||||
element.classList.add('read-more-wrap');
|
||||
element.style.height = elSize;
|
||||
element.style.transitionDuration = elSpeed + 'ms';
|
||||
|
||||
if( !element.querySelector('.read-more-mask') ) {
|
||||
element.innerHTML += '<div class="read-more-mask"></div>';
|
||||
}
|
||||
|
||||
elMask = element.querySelector('.read-more-mask');
|
||||
|
||||
var elMaskD = element.getAttribute('data-readmore-mask') || 'true',
|
||||
elMaskColor = element.getAttribute('data-readmore-maskcolor') || '#FFF',
|
||||
elMaskSize = element.getAttribute('data-readmore-masksize') || '100%';
|
||||
|
||||
if( elMaskD == 'true' ) {
|
||||
elMask.style.height = elMaskSize;
|
||||
elMask.style.backgroundImage = 'linear-gradient( '+ _HEXtoRGBA( elMaskColor, 0 ) +', '+ _HEXtoRGBA( elMaskColor, 1 ) +' )';
|
||||
elMask.classList.add('op-ts', 'op-1');
|
||||
} else {
|
||||
elMask.classList.add('d-none');
|
||||
}
|
||||
|
||||
var elTriggerEl = element.querySelector(elTrigger);
|
||||
|
||||
// console.log( (element.getBoundingClientRect().top + document.body.scrollTop - __core.getVars.topScrollOffset) );
|
||||
|
||||
elTriggerEl.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if( element.classList.contains('read-more-wrap-open') ) {
|
||||
element.style.height = elSize;
|
||||
element.classList.remove('read-more-wrap-open');
|
||||
elTriggerEl.innerHTML = elTriggerO;
|
||||
setTimeout( function() {
|
||||
if( elScrollUp == 'true' ) {
|
||||
__core.scrollTo((element.offsetTop - __core.getVars.topScrollOffset), false, false);
|
||||
}
|
||||
}, elSpeed );
|
||||
if( elMaskD == 'true' ) {
|
||||
elMask.classList.add('op-ts', 'op-1');
|
||||
}
|
||||
} else {
|
||||
if( elTriggerC == 'false' ) {
|
||||
elTriggerEl.classList.add('d-none');
|
||||
}
|
||||
element.style.height = elHeightN + 'px';
|
||||
element.style.overflow = '';
|
||||
element.classList.add('read-more-wrap-open');
|
||||
if( elTriggerEl ) {
|
||||
elTriggerEl.innerHTML = elTriggerC;
|
||||
}
|
||||
if( elMaskD == 'true' ) {
|
||||
elMask.classList.remove('op-1');
|
||||
elMask.classList.add('op-0');
|
||||
}
|
||||
}
|
||||
|
||||
elTriggerEl = element.querySelector(elTrigger);
|
||||
};
|
||||
});
|
||||
|
||||
__core.getVars.resizers.readmore = function() {
|
||||
__modules.readmore();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
33
public/js/modules/resizevideos.js
Normal file
33
public/js/modules/resizevideos.js
Normal file
@@ -0,0 +1,33 @@
|
||||
CNVS.ResizeVideos = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.fitvids.js', id: 'canvas-fitvids-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().fitVids;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-fitvids', event: 'pluginFitVidsReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.parent().fitVids({
|
||||
customSelector: 'iframe[src*="youtube"],iframe[src*="vimeo"],iframe[src*="dailymotion"],iframe[src*="maps.google.com"],iframe[src*="google.com/maps"]',
|
||||
ignore: '.no-fv'
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
81
public/js/modules/roundedskills.js
Normal file
81
public/js/modules/roundedskills.js
Normal file
@@ -0,0 +1,81 @@
|
||||
CNVS.RoundedSkills = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _run = function(element, properties) {
|
||||
element.easyPieChart({
|
||||
size: properties.size,
|
||||
animate: properties.speed,
|
||||
scaleColor: false,
|
||||
trackColor: properties.trackcolor,
|
||||
lineWidth: properties.width,
|
||||
lineCap: 'square',
|
||||
barColor: properties.color
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.piechart.js', id: 'canvas-piechart-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().easyPieChart;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-piechart', event: 'pluginRoundedSkillReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each(function(){
|
||||
var element = jQuery(this),
|
||||
elSize = element.attr('data-size') || 140,
|
||||
elSpeed = element.attr('data-speed') || 2000,
|
||||
elWidth = element.attr('data-width') || 4,
|
||||
elColor = element.attr('data-color') || '#0093BF',
|
||||
elTrackColor = element.attr('data-trackcolor') || 'rgba(0,0,0,0.04)';
|
||||
|
||||
var properties = {
|
||||
size: Number( elSize ),
|
||||
speed: Number( elSpeed ),
|
||||
width: Number( elWidth ),
|
||||
color: elColor,
|
||||
trackcolor: elTrackColor
|
||||
};
|
||||
|
||||
element.css({ 'width': elSize+'px', 'height': elSize+'px', 'line-height': elSize+'px' });
|
||||
|
||||
if( jQuery('body').hasClass('device-up-lg') ){
|
||||
element.animate({opacity:0}, 10);
|
||||
var observer = new IntersectionObserver( function(entries, observer){
|
||||
entries.forEach( function(entry){
|
||||
if (entry.isIntersecting) {
|
||||
if (!element.hasClass('skills-animated')) {
|
||||
setTimeout( function(){
|
||||
element.css({opacity: 1});
|
||||
}, 100);
|
||||
|
||||
_run(element, properties);
|
||||
element.addClass('skills-animated');
|
||||
}
|
||||
observer.unobserve( entry.target );
|
||||
}
|
||||
});
|
||||
}, {rootMargin: '0px 0px 50px'});
|
||||
observer.observe( element[0] );
|
||||
} else {
|
||||
_run(element, properties);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
100
public/js/modules/schemetoggle.js
Normal file
100
public/js/modules/schemetoggle.js
Normal file
@@ -0,0 +1,100 @@
|
||||
CNVS.SchemeToggle = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
var _toggle = function(element, sibling=false, action=false) {
|
||||
var bodyClassToggle = element.getAttribute('data-bodyclass-toggle') || 'dark';
|
||||
var classAdd = element.getAttribute('data-add-class') || 'scheme-toggler-active';
|
||||
var classRemove = element.getAttribute('data-remove-class') || 'scheme-toggler-active';
|
||||
var htmlAdd = element.getAttribute('data-add-html');
|
||||
var htmlRemove = element.getAttribute('data-remove-html');
|
||||
var toggleType = element.getAttribute('data-type') || 'trigger';
|
||||
var remember = element.getAttribute('data-remember') || 'false';
|
||||
|
||||
if( __core.contains( bodyClassToggle, __core.getVars.elBody ) ) {
|
||||
__core.classesFn('add', classAdd, element);
|
||||
__core.classesFn('remove', classRemove, element);
|
||||
element.classList.add('body-state-toggled');
|
||||
|
||||
// Set Storage
|
||||
if( remember == "true" && action ) {
|
||||
__core.cookie.set('__cnvs_body_color_scheme', 'dark', 7);
|
||||
}
|
||||
|
||||
if( 'checkbox' == toggleType && sibling ) {
|
||||
element.querySelector('input[type=checkbox]').checked = true;
|
||||
} else {
|
||||
if( htmlAdd ) {
|
||||
element.innerHTML = htmlAdd;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__core.classesFn('add', classRemove, element);
|
||||
__core.classesFn('remove', classAdd, element);
|
||||
element.classList.remove('body-state-toggled');
|
||||
|
||||
// Remove Storage
|
||||
if( remember == "true" && action ) {
|
||||
__core.cookie.remove('__cnvs_body_color_scheme');
|
||||
}
|
||||
|
||||
if( 'checkbox' == toggleType && sibling ) {
|
||||
element.querySelector('input[type=checkbox]').checked = false;
|
||||
} else {
|
||||
if( htmlRemove ) {
|
||||
element.innerHTML = htmlRemove;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__base.setBSTheme();
|
||||
__modules.dataClasses();
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-schemetoggler', event: 'pluginSchemeTogglerReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var bodyClassToggle = element.getAttribute('data-bodyclass-toggle') || 'dark';
|
||||
var toggleType = element.getAttribute('data-type') || 'trigger';
|
||||
|
||||
_toggle(element);
|
||||
|
||||
if( 'checkbox' == toggleType ) {
|
||||
var elementCheck = element.querySelector('input[type=checkbox]');
|
||||
|
||||
elementCheck.addEventListener( 'change', function() {
|
||||
__core.classesFn('toggle', bodyClassToggle, __core.getVars.elBody);
|
||||
_toggle(element, false, true);
|
||||
|
||||
__core.siblings(element, selector).forEach( function(el) {
|
||||
_toggle(el, true);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
element.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.classesFn('toggle', bodyClassToggle, __core.getVars.elBody);
|
||||
_toggle(element, false, true);
|
||||
|
||||
__core.siblings(element, selector).forEach( function(el) {
|
||||
_toggle(el, true);
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
193
public/js/modules/scrolldetect.js
Normal file
193
public/js/modules/scrolldetect.js
Normal file
@@ -0,0 +1,193 @@
|
||||
CNVS.ScrollDetect = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _detects = [];
|
||||
|
||||
var _percent = function(params) {
|
||||
var percent = 0,
|
||||
ratio = 0,
|
||||
start = 0,
|
||||
end = 0;
|
||||
|
||||
var onScroll = function(params) {
|
||||
fastdom.measure( function(){
|
||||
var position = window.scrollY;
|
||||
|
||||
if( position >= params.start && position <= params.end ) {
|
||||
var startViewScroll = position - params.start;
|
||||
var offsetScroll = position - params.offset;
|
||||
percent = (startViewScroll / params.range.full) * 100;
|
||||
start = (startViewScroll / params.range.start);
|
||||
|
||||
if( position > (params.start + params.height) && position < (params.offset) ) {
|
||||
start = 1;
|
||||
end = 0;
|
||||
} else if( position >= (params.offset) ) {
|
||||
start = 1;
|
||||
end = (offsetScroll / params.range.end);
|
||||
} else {
|
||||
end = 0;
|
||||
}
|
||||
|
||||
ratio = start - end;
|
||||
} else if( position > params.end ) {
|
||||
percent = 100;
|
||||
ratio = 0;
|
||||
start = end = 1;
|
||||
} else {
|
||||
percent = ratio = start = end = 0;
|
||||
}
|
||||
|
||||
if( ratio > 0 ) {
|
||||
params.elem.classList.add('scroll-detect-inview');
|
||||
} else {
|
||||
params.elem.classList.remove('scroll-detect-inview');
|
||||
}
|
||||
|
||||
if( start > 0 && start < 1 ) {
|
||||
params.elem.classList.add('scroll-detect-inview-start');
|
||||
} else {
|
||||
params.elem.classList.remove('scroll-detect-inview-start');
|
||||
}
|
||||
|
||||
if( end > 0 && end < 1 ) {
|
||||
params.elem.classList.add('scroll-detect-inview-end');
|
||||
} else {
|
||||
params.elem.classList.remove('scroll-detect-inview-end');
|
||||
}
|
||||
|
||||
params.elem.style.setProperty('--cnvs-scroll-percent', percent);
|
||||
params.elem.style.setProperty('--cnvs-scroll-ratio', ratio);
|
||||
params.elem.style.setProperty('--cnvs-scroll-start', start);
|
||||
params.elem.style.setProperty('--cnvs-scroll-end', end);
|
||||
});
|
||||
};
|
||||
|
||||
onScroll(params);
|
||||
};
|
||||
|
||||
var _handle = function() {
|
||||
_detects.forEach( function(settings) {
|
||||
_percent(settings);
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.fastdom.js', id: 'canvas-fastdom-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof fastdom !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-scrolldetect', event: 'pluginScrollDetectReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var resizeObserver = new ResizeObserver( function(entries) {
|
||||
entries.forEach( function(entry) {
|
||||
if( !doing ) {
|
||||
var doing = setTimeout( function() {
|
||||
initParams(selector);
|
||||
doing = false;
|
||||
}, 333);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var initParams = function(selector) {
|
||||
_detects = [];
|
||||
|
||||
selector.forEach( function(elem) {
|
||||
var elemWidth = elem.offsetWidth,
|
||||
elemHeight = elem.offsetHeight,
|
||||
elemOffset = __core.offset(elem).top,
|
||||
viewportHeight = __core.getVars.viewport.height,
|
||||
includeWidth = elem.getAttribute('data-include-width'),
|
||||
includeHeight = elem.getAttribute('data-include-height'),
|
||||
includeOffset = elem.getAttribute('data-include-offset'),
|
||||
scrollOffset = elem.getAttribute('data-scroll-offset'),
|
||||
parallaxRatio = elem.getAttribute('data-parallax-ratio'),
|
||||
params = {};
|
||||
|
||||
if( scrollOffset ) {
|
||||
scrollOffset = scrollOffset.split('%');
|
||||
|
||||
if( scrollOffset.length > 1 ) {
|
||||
elemOffset = elemOffset + (viewportHeight * Number(scrollOffset[0]) * 0.01);
|
||||
} else if( scrollOffset.length == 1 && scrollOffset[0] ) {
|
||||
elemOffset = elemOffset + Number(scrollOffset[0]);
|
||||
}
|
||||
}
|
||||
|
||||
var scrollStart = elemOffset - viewportHeight,
|
||||
scrollEnd = elemOffset + elemHeight,
|
||||
scrollRange = scrollEnd - scrollStart;
|
||||
|
||||
params.elem = elem;
|
||||
params.start = scrollStart;
|
||||
params.end = scrollEnd;
|
||||
params.range = {
|
||||
start: elemHeight,
|
||||
end: elemHeight,
|
||||
full: scrollRange,
|
||||
};
|
||||
params.width = elemWidth;
|
||||
params.height = elemHeight;
|
||||
params.offset = elemOffset;
|
||||
|
||||
if( includeWidth == 'true' || (elem.classList.contains('parallax') && elem.getAttribute('data-parallax-direction') == 'horizontal') ) {
|
||||
elem.style.setProperty('--cnvs-scroll-width', params.width);
|
||||
}
|
||||
|
||||
if( includeHeight == 'true' || (elem.classList.contains('parallax') && elem.getAttribute('data-parallax-direction') != 'horizontal') ) {
|
||||
elem.style.setProperty('--cnvs-scroll-height', params.height);
|
||||
}
|
||||
|
||||
if( includeOffset == 'true' ) {
|
||||
elem.style.setProperty('--cnvs-scroll-offset', params.offset);
|
||||
}
|
||||
|
||||
if( !isNaN(parallaxRatio) ) {
|
||||
elem.style.setProperty('--cnvs-parallax-ratio', parallaxRatio);
|
||||
}
|
||||
|
||||
_percent(params);
|
||||
_detects.push(params);
|
||||
|
||||
resizeObserver.observe(elem);
|
||||
});
|
||||
};
|
||||
|
||||
initParams(selector);
|
||||
_handle();
|
||||
|
||||
// var ticking = false;
|
||||
window.addEventListener("scroll", function(){
|
||||
fastdom.mutate( function(){
|
||||
_handle();
|
||||
});
|
||||
// if (!ticking) {
|
||||
// window.requestAnimationFrame( function(){
|
||||
// _handle();
|
||||
// ticking = false;
|
||||
// });
|
||||
// ticking = true;
|
||||
// }
|
||||
}, {passive: true});
|
||||
|
||||
resizeObserver.observe(document.documentElement);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
235
public/js/modules/shapedivider.js
Normal file
235
public/js/modules/shapedivider.js
Normal file
File diff suppressed because one or more lines are too long
31
public/js/modules/sidepanel.js
Normal file
31
public/js/modules/sidepanel.js
Normal file
@@ -0,0 +1,31 @@
|
||||
CNVS.SidePanel = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
if( !e.target.closest('#side-panel') && !e.target.closest('.side-panel-trigger') ) {
|
||||
body.remove('side-panel-open');
|
||||
}
|
||||
}, false);
|
||||
|
||||
document.querySelectorAll('.side-panel-trigger').forEach( function(el) {
|
||||
el.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
body.toggle('side-panel-open');
|
||||
if( body.contains('device-touch') && body.contains('side-push-panel') ) {
|
||||
body.toggle('ohidden');
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
76
public/js/modules/sliderdimensions.js
Normal file
76
public/js/modules/sliderdimensions.js
Normal file
@@ -0,0 +1,76 @@
|
||||
CNVS.SliderDimensions = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var slider = document.querySelector('.slider-element'),
|
||||
sliderParallaxEl = document.querySelector('.slider-parallax'),
|
||||
body = __core.getVars.elBody,
|
||||
parallaxElHeight = sliderParallaxEl?.offsetHeight,
|
||||
parallaxElWidth = sliderParallaxEl?.offsetWidth,
|
||||
slInner = sliderParallaxEl?.querySelector('.slider-inner'),
|
||||
slSwiperW = slider.querySelector('.swiper-wrapper'),
|
||||
slSwiperS = slider.querySelector('.swiper-slide'),
|
||||
slFlexHeight = slider.classList.contains('h-auto') || slider.classList.contains('min-vh-0');
|
||||
|
||||
if( body.classList.contains('device-up-lg') ) {
|
||||
setTimeout(function() {
|
||||
if( slInner ) {
|
||||
slInner.style.height = parallaxElHeight + 'px';
|
||||
}
|
||||
if( slFlexHeight ) {
|
||||
parallaxElHeight = slider.querySelector('.slider-inner')?.querySelector('*').offsetHeight;
|
||||
slider.style.height = parallaxElHeight + 'px';
|
||||
if( slInner ) {
|
||||
slInner.style.height = parallaxElHeight + 'px';
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
|
||||
if( slFlexHeight && slSwiperS ) {
|
||||
var slSwiperFC = slSwiperS.querySelector('*');
|
||||
if( slSwiperFC.classList.contains('container') || slSwiperFC.classList.contains('container-fluid') ) {
|
||||
slSwiperFC = slSwiperFC.querySelector('*');
|
||||
}
|
||||
if( slSwiperFC.offsetHeight > slSwiperW.offsetHeight ) {
|
||||
slSwiperW.style.height = 'auto';
|
||||
}
|
||||
}
|
||||
|
||||
if( body.classList.contains('side-header') && slInner ) {
|
||||
slInner.style.width = parallaxElWidth + 'px';
|
||||
}
|
||||
|
||||
if( !body.classList.contains('stretched') ) {
|
||||
parallaxElWidth = __core.getVars.elWrapper.offsetWidth;
|
||||
if( slInner ) {
|
||||
slInner.style.width = parallaxElWidth + 'px';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if( slSwiperW ) {
|
||||
slSwiperW.style.height = '';
|
||||
}
|
||||
|
||||
if( sliderParallaxEl ) {
|
||||
sliderParallaxEl.style.height = '';
|
||||
}
|
||||
|
||||
if( slInner ) {
|
||||
slInner.style.width = '';
|
||||
slInner.style.height = '';
|
||||
}
|
||||
}
|
||||
|
||||
__core.getVars.resizers.sliderdimensions = function() {
|
||||
__base.sliderDimensions();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
94
public/js/modules/slidermenuclass.js
Normal file
94
public/js/modules/slidermenuclass.js
Normal file
@@ -0,0 +1,94 @@
|
||||
CNVS.SliderMenuClass = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
var _swiper = function() {
|
||||
if( !__core.getVars.elHeader.classList.contains('ignore-slider') && ( __core.getVars.elBody.classList.contains('is-expanded-menu') || ( __core.getVars.elHeader.classList.contains('transparent-header-responsive') && !__core.getVars.elBody.classList.contains('primary-menu-open') ) ) ) {
|
||||
var activeSlide = __core.getVars.elSlider.querySelector('.swiper-slide-active');
|
||||
_schemeChanger(activeSlide);
|
||||
}
|
||||
};
|
||||
|
||||
var _revolution = function() {
|
||||
if( !__core.getVars.elHeader.classList.contains('ignore-slider') && ( __core.getVars.elBody.classList.contains('is-expanded-menu') || ( __core.getVars.elHeader.classList.contains('transparent-header-responsive') && !__core.getVars.elBody.classList.contains('primary-menu-open') ) ) ) {
|
||||
var activeSlide = __core.getVars.elSlider.querySelector('.active-revslide');
|
||||
_schemeChanger(activeSlide);
|
||||
}
|
||||
};
|
||||
|
||||
var _schemeChanger = function(activeSlide) {
|
||||
if( !activeSlide ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var darkExists = false,
|
||||
oldClassesArray,
|
||||
noOfOldClasses;
|
||||
|
||||
if( activeSlide.classList.contains('dark') ){
|
||||
if( __core.getVars.headerClasses ) {
|
||||
oldClassesArray = __core.getVars.headerClasses;
|
||||
} else {
|
||||
oldClassesArray = '';
|
||||
}
|
||||
|
||||
noOfOldClasses = oldClassesArray.length;
|
||||
|
||||
if( noOfOldClasses > 0 ) {
|
||||
for( var i=0; i<noOfOldClasses; i++ ) {
|
||||
if( oldClassesArray[i] == 'dark' ) {
|
||||
darkExists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var headerToChange = document.querySelector('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)');
|
||||
if( headerToChange ) {
|
||||
headerToChange.classList.add('dark');
|
||||
}
|
||||
|
||||
if( !darkExists ) {
|
||||
var headerToChange = document.querySelector('#header.transparent-header.sticky-header,#header.transparent-header.semi-transparent.sticky-header,#header.transparent-header.floating-header.sticky-header');
|
||||
if( headerToChange ) {
|
||||
headerToChange.classList.remove('dark');
|
||||
}
|
||||
}
|
||||
__core.getVars.elHeaderWrap.classList.remove('not-dark');
|
||||
} else {
|
||||
if( __core.getVars.elBody.classList.contains('dark') ) {
|
||||
activeSlide.classList.add('not-dark');
|
||||
document.querySelector('#header.transparent-header:not(.semi-transparent,.floating-header)').classList.remove('dark');
|
||||
document.querySelector('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)')?.querySelector('#header-wrap').classList.add('not-dark');
|
||||
} else {
|
||||
document.querySelector('#header.transparent-header:not(.semi-transparent,.floating-header)').classList.remove('dark');
|
||||
__core.getVars.elHeaderWrap.classList.remove('not-dark');
|
||||
}
|
||||
}
|
||||
|
||||
if( __core.getVars.elHeader.classList.contains('sticky-header') ) {
|
||||
__base.headers();
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
if( !__core.getVars.elBody.classList.contains('is-expanded-menu') ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
_swiper();
|
||||
_revolution();
|
||||
__base.setBSTheme();
|
||||
|
||||
__core.getVars.resizers.slidermenuclass = function() {
|
||||
__base.sliderMenuClass();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
171
public/js/modules/sliderparallax.js
Normal file
171
public/js/modules/sliderparallax.js
Normal file
@@ -0,0 +1,171 @@
|
||||
CNVS.SliderParallax = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __mobile = SEMICOLON.Mobile;
|
||||
|
||||
var _settings;
|
||||
var _transform;
|
||||
var _transform2;
|
||||
|
||||
var _parallax = function(_settings) {
|
||||
if( !_settings.sliderPx.el ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
fastdom.measure( function(){
|
||||
_settings.scrollPos.y = window.scrollY;
|
||||
|
||||
if( _settings.body.classList.contains('is-expanded-menu') && !_settings.isMobile ) {
|
||||
if( ( _settings.height + _settings.sliderPx.offset + 50 ) > _settings.scrollPos.y ){
|
||||
_settings.classes.add('slider-parallax-visible');
|
||||
_settings.classes.remove('slider-parallax-invisible');
|
||||
if ( _settings.scrollPos.y > _settings.sliderPx.offset ) {
|
||||
if( typeof _settings.sliderPx.el.querySelector('.slider-inner') === 'object' ) {
|
||||
_transform = ((_settings.scrollPos.y-_settings.sliderPx.offset) * -.4);
|
||||
_transform2 = ((_settings.scrollPos.y-_settings.sliderPx.offset) * -.15);
|
||||
|
||||
_setParallax(0, _transform, _settings.sliderPx.inner);
|
||||
_setParallax(0, _transform2, _settings.sliderPx.caption);
|
||||
} else {
|
||||
_transform = ((_settings.scrollPos.y-_settings.sliderPx.offset) / 1.5);
|
||||
_transform2 = ((_settings.scrollPos.y-_settings.sliderPx.offset) / 7);
|
||||
|
||||
_setParallax(0, _transform, _settings.sliderPx.el);
|
||||
_setParallax(0, _transform2, _settings.sliderPx.caption);
|
||||
}
|
||||
} else {
|
||||
if( _settings.sliderPx.el.querySelector('.slider-inner') ) {
|
||||
_setParallax(0, 0, _settings.sliderPx.inner);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
} else {
|
||||
_setParallax(0, 0, _settings.sliderPx.el);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_settings.classes.add('slider-parallax-invisible');
|
||||
_settings.classes.remove('slider-parallax-visible');
|
||||
}
|
||||
} else {
|
||||
if( _settings.sliderPx.el.querySelector('.slider-inner') ) {
|
||||
_setParallax(0, 0, _settings.sliderPx.inner);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
} else {
|
||||
_setParallax(0, 0, _settings.sliderPx.el);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
}
|
||||
|
||||
_settings.classes.add('slider-parallax-visible');
|
||||
_settings.classes.remove('slider-parallax-invisible');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var _offset = function() {
|
||||
var sliderPx = __core.getVars.sliderParallax;
|
||||
|
||||
var sliderParallaxOffsetTop = 0,
|
||||
headerHeight = __core.getVars.elHeader?.offsetHeight || 0;
|
||||
|
||||
if( __core.getVars.elBody.classList.contains('side-header') || (__core.getVars.elHeader && __core.getNext(__core.getVars.elHeader, '.include-header').length > 0) ) {
|
||||
headerHeight = 0;
|
||||
}
|
||||
|
||||
// if( $pageTitle.length > 0 ) {
|
||||
// sliderParallaxOffsetTop = $pageTitle.outerHeight() + headerHeight - 20;
|
||||
// } else {
|
||||
// sliderParallaxOffsetTop = headerHeight - 20;
|
||||
// }
|
||||
|
||||
if( __core.getNext(__core.getVars.elSlider, '#header').length > 0 ) {
|
||||
sliderParallaxOffsetTop = 0;
|
||||
}
|
||||
|
||||
sliderPx.offset = sliderParallaxOffsetTop;
|
||||
};
|
||||
|
||||
var _setParallax = function(xPos, yPos, el) {
|
||||
if( el ) {
|
||||
fastdom.mutate( function(){
|
||||
el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)";
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var _elementFade = function(_settings) {
|
||||
if( _settings.sliderPx.el.length < 1 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
fastdom.mutate( function(){
|
||||
if( _settings.body.classList.contains('is-expanded-menu') && !_settings.isMobile ) {
|
||||
var tHeaderOffset;
|
||||
|
||||
if( (_settings.header && _settings.header.classList.contains('transparent-header')) || _settings.body.classList.contains('side-header') ) {
|
||||
tHeaderOffset = 100;
|
||||
} else {
|
||||
tHeaderOffset = 0;
|
||||
}
|
||||
|
||||
if( _settings.sliderPx.el.classList.contains('slider-parallax-visible') ) {
|
||||
_settings.sliderPx.el.querySelectorAll('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').forEach( function(el) {
|
||||
el.style.opacity = 1 - ( ( ( _settings.scrollPos.y - tHeaderOffset ) * 1.85 ) / _settings.height );
|
||||
});
|
||||
}
|
||||
} else {
|
||||
_settings.sliderPx.el.querySelectorAll('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').forEach( function(el) {
|
||||
el.style.opacity = 1;
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.fastdom.js', id: 'canvas-fastdom-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof fastdom !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
_settings = {
|
||||
sliderPx: __core.getVars.sliderParallax,
|
||||
body: __core.getVars.elBody,
|
||||
header: __core.getVars.elHeader,
|
||||
scrollPos: __core.getVars.scrollPos,
|
||||
isMobile: __mobile.any(),
|
||||
get height() {
|
||||
return this.sliderPx.el.offsetHeight;
|
||||
},
|
||||
get classes() {
|
||||
return this.sliderPx.el.classList;
|
||||
},
|
||||
};
|
||||
|
||||
if( _settings.sliderPx.el.querySelector('.slider-inner') ) {
|
||||
_setParallax(0, 0, _settings.sliderPx.inner);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
} else {
|
||||
_setParallax(0, 0, _settings.sliderPx.el);
|
||||
_setParallax(0, 0, _settings.sliderPx.caption);
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', function(){
|
||||
_parallax(_settings);
|
||||
_elementFade(_settings);
|
||||
}, {passive:true});
|
||||
|
||||
__core.getVars.resizers.sliderparallax = function() {
|
||||
_parallax(_settings);
|
||||
_elementFade(_settings);
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
34
public/js/modules/stickfooteronsmall.js
Normal file
34
public/js/modules/stickfooteronsmall.js
Normal file
@@ -0,0 +1,34 @@
|
||||
CNVS.StickFooterOnSmall = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __base = SEMICOLON.Base;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.getVars.elFooter.style.marginTop = '';
|
||||
|
||||
var windowH = __core.viewport().height,
|
||||
wrapperH = __core.getVars.elWrapper.offsetHeight;
|
||||
|
||||
if( !__core.getVars.elBody.classList.contains('sticky-footer') && __core.getVars.elFooter !== 'undefined' && __core.getVars.elWrapper.contains( __core.getVars.elFooter ) ) {
|
||||
if( windowH > wrapperH ) {
|
||||
__core.getVars.elFooter.style.marginTop = (windowH - wrapperH)+'px';
|
||||
}
|
||||
}
|
||||
|
||||
if( __core.getVars.elAppMenu ) {
|
||||
if((__core.viewport().height - (__core.getVars.elAppMenu.getBoundingClientRect().top + __core.getVars.elAppMenu.getBoundingClientRect().height)) === 0) {
|
||||
__core.getVars.elFooter.style.marginBottom = __core.getVars.elAppMenu.offsetHeight+'px';
|
||||
}
|
||||
}
|
||||
|
||||
__core.getVars.resizers.stickfooter = function() {
|
||||
__base.stickFooterOnSmall();
|
||||
};
|
||||
}
|
||||
};
|
||||
}();
|
||||
39
public/js/modules/stickysidebar.js
Normal file
39
public/js/modules/stickysidebar.js
Normal file
@@ -0,0 +1,39 @@
|
||||
CNVS.StickySidebar = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.stickysidebar.js', id: 'canvas-stickysidebar-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().scwStickySidebar;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-stickysidebar', event: 'pluginStickySidebarReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return false;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elTop = element.attr('data-offset-top') || 110,
|
||||
elBottom = element.attr('data-offset-bottom') || 50;
|
||||
|
||||
element.scwStickySidebar({
|
||||
additionalMarginTop: Number(elTop),
|
||||
additionalMarginBottom: Number(elBottom)
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
84
public/js/modules/subscribe.js
Normal file
84
public/js/modules/subscribe.js
Normal file
@@ -0,0 +1,84 @@
|
||||
CNVS.Subscribe = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.form.js', id: 'canvas-form-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().validate && jQuery().ajaxSubmit;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-form', event: 'pluginFormReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elAlert = element.attr('data-alert-type'),
|
||||
elLoader = element.attr('data-loader'),
|
||||
elResult = element.find('.widget-subscribe-form-result'),
|
||||
elRedirect = element.attr('data-redirect'),
|
||||
defButton, defButtonText, alertType;
|
||||
|
||||
element.find('form').validate({
|
||||
submitHandler: function(form) {
|
||||
|
||||
elResult.hide();
|
||||
|
||||
if( elLoader == 'button' ) {
|
||||
defButton = jQuery(form).find('button');
|
||||
defButtonText = defButton.html();
|
||||
|
||||
defButton.html('<i class="bi-arrow-repeat icon-spin nomargin"></i>');
|
||||
} else {
|
||||
jQuery(form).find('.bi-envelope-plus').removeClass('bi-envelope-plus').addClass('bi-arrow-repeat icon-spin');
|
||||
}
|
||||
|
||||
jQuery(form).ajaxSubmit({
|
||||
target: elResult,
|
||||
dataType: 'json',
|
||||
resetForm: true,
|
||||
success: function(data) {
|
||||
if( elLoader == 'button' ) {
|
||||
defButton.html( defButtonText );
|
||||
} else {
|
||||
jQuery(form).find('.bi-arrow-repeat').removeClass('bi-arrow-repeat icon-spin').addClass('bi-envelope-plus');
|
||||
}
|
||||
if( data.alert != 'error' && elRedirect ){
|
||||
window.location.replace( elRedirect );
|
||||
return true;
|
||||
}
|
||||
if( elAlert == 'inline' ) {
|
||||
if( data.alert == 'error' ) {
|
||||
alertType = 'alert-danger';
|
||||
} else {
|
||||
alertType = 'alert-success';
|
||||
}
|
||||
|
||||
elResult.addClass( 'alert ' + alertType ).html( data.message ).slideDown( 400 );
|
||||
} else {
|
||||
elResult.attr( 'data-notify-type', data.alert ).attr( 'data-notify-msg', data.message ).html('');
|
||||
__modules.notifications(elResult);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
69
public/js/modules/textrotator.js
Normal file
69
public/js/modules/textrotator.js
Normal file
@@ -0,0 +1,69 @@
|
||||
CNVS.TextRotator = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.textrotator.js', id: 'canvas-textrotator-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().Morphext && typeof Typed !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-textrotator', event: 'pluginTextRotatorReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elTyped = element.attr('data-typed') || 'false',
|
||||
elRotator = element.find('.t-rotate'),
|
||||
elAnimation = element.attr('data-rotate') || 'fade',
|
||||
elSpeed = element.attr('data-speed') || 1200,
|
||||
elSep = element.attr('data-separator') || ',';
|
||||
|
||||
if( elTyped == 'true' ) {
|
||||
var elTexts = elRotator.html().split( elSep ),
|
||||
elLoop = element.attr('data-loop') || 'true',
|
||||
elShuffle = element.attr('data-shuffle'),
|
||||
elCur = element.attr('data-cursor') || 'true',
|
||||
elSpeed = element.attr('data-speed') || 50,
|
||||
elBackSpeed = element.attr('data-backspeed') || 30,
|
||||
elBackDelay = element.attr('data-backdelay');
|
||||
|
||||
if( elLoop == 'true' ) { elLoop = true; } else { elLoop = false; }
|
||||
if( elShuffle == 'true' ) { elShuffle = true; } else { elShuffle = false; }
|
||||
if( elCur == 'true' ) { elCur = true; } else { elCur = false; }
|
||||
|
||||
elRotator.html( '' ).addClass('plugin-typed-init');
|
||||
|
||||
var typed = new Typed( elRotator[0], {
|
||||
strings: elTexts,
|
||||
typeSpeed: Number( elSpeed ),
|
||||
loop: elLoop,
|
||||
shuffle: elShuffle,
|
||||
showCursor: elCur,
|
||||
backSpeed: Number( elBackSpeed ),
|
||||
backDelay: Number( elBackDelay )
|
||||
});
|
||||
} else {
|
||||
var pluginData = elRotator.Morphext({
|
||||
animation: elAnimation,
|
||||
separator: elSep,
|
||||
speed: Number(elSpeed)
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
48
public/js/modules/textsplitter.js
Normal file
48
public/js/modules/textsplitter.js
Normal file
@@ -0,0 +1,48 @@
|
||||
CNVS.TextSplitter = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _getText = function(element) {
|
||||
return element.textContent || element.innerText;
|
||||
};
|
||||
|
||||
var _joiner = function(arr, joiner='span', glue=' ') {
|
||||
return arr.map( function(chunk) {
|
||||
return '<'+ joiner +'>' + chunk + '</'+ joiner +'>';
|
||||
}).join(glue);
|
||||
};
|
||||
|
||||
var _words = function(element, joiner='span') {
|
||||
return _joiner(_getText(element).split(' '), joiner, ' ');
|
||||
};
|
||||
|
||||
var _letters = function(element, joiner='span') {
|
||||
return _joiner(_getText(element).split(''), joiner, '');
|
||||
};
|
||||
|
||||
var _splitter = function(el, type = 'word') {
|
||||
el.innerHTML = type == 'letter' ? _letters(el) : _words(el);
|
||||
|
||||
el.querySelectorAll('span')?.forEach( function(elem, index) {
|
||||
elem.style.setProperty('--cnvs-split-index', index + 1);
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var type = el.getAttribute('data-split-type') || 'word';
|
||||
|
||||
_splitter(el, type);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
85
public/js/modules/tips.js
Normal file
85
public/js/modules/tips.js
Normal file
@@ -0,0 +1,85 @@
|
||||
CNVS.Tips = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
__core.loadJS({ file: 'plugins.bootstrap.js', id: 'canvas-bootstrap-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof bootstrap !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if( typeof cnvsTips === "undefined" || cnvsTips.length < 1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-tips', event: 'pluginTipsReady' });
|
||||
|
||||
var body = __core.getVars.elBody.classList;
|
||||
|
||||
if( body.contains('init-plugin-tips') ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var randomIndex = Math.floor(Math.random() * cnvsTips.length);
|
||||
var randomTip = cnvsTips[randomIndex];
|
||||
|
||||
var tipsEl = document.getElementById('cnvs-tips-element');
|
||||
|
||||
if( !tipsEl ) {
|
||||
var tipsHTML = '<div class="position-fixed bottom-0 end-0 p-3 text-start" style="z-index: 699;"><div id="cnvs-tips-element" data-notify-trigger="custom" data-notify-target="#cnvs-tips-element" data-notify-timeout="7777" class="toast hide p-3" role="alert" aria-live="assertive" aria-atomic="true" style="--bs-toast-max-width:400px;--bs-toast-bg: rgba(var(--bs-body-bg-rgb),.925);"><div class="toast-header bg-transparent border-0 mb-0 align-items-center pb-1"><h5 id="cnvs-tips-element-title" class="me-auto fs-6 fw-semibold mb-0"></h5><button type="button" class="btn-close me-1" data-bs-dismiss="toast" aria-label="Close"></button></div><div id="cnvs-tips-element-content" class="toast-body small pt-1"></div><a href="#" id="cnvs-tips-element-disable" class="text-muted text-decoration-underline op-06 h-op-08 px-2 pb-2 ms-1 mt-1 d-inline-block" data-cookies="true" style="font-size:.75rem;text-underline-offset:3px;">Disable Random Tips</a></div></div>';
|
||||
|
||||
__core.getVars.elWrapper.insertAdjacentHTML('beforeend', tipsHTML);
|
||||
tipsEl = document.getElementById('cnvs-tips-element');
|
||||
}
|
||||
|
||||
var tipsTitle = document.getElementById('cnvs-tips-element-title');
|
||||
var tipsContent = document.getElementById('cnvs-tips-element-content');
|
||||
var tipsDisable = document.getElementById('cnvs-tips-element-disable');
|
||||
var tipsEnable = document.getElementById('cnvs-tips-element-enable');
|
||||
|
||||
tipsTitle.innerHTML = randomTip.title;
|
||||
tipsContent.innerHTML = randomTip.content;
|
||||
|
||||
if( tipsDisable ) {
|
||||
tipsDisable.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var tipsToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('cnvs-tips-element'));
|
||||
tipsToast.hide();
|
||||
|
||||
__core.cookie.set('__cnvs_tips_cookies', 'hide', 1);
|
||||
};
|
||||
}
|
||||
|
||||
if( tipsEnable ) {
|
||||
tipsEnable.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
__core.cookie.remove('__cnvs_tips_cookies');
|
||||
window.location.reload();
|
||||
};
|
||||
}
|
||||
|
||||
(function(){
|
||||
var enabled = true;
|
||||
|
||||
if( __core.cookie.get('__cnvs_tips_cookies' ) == 'hide' ) {
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
if( enabled ) {
|
||||
body.add('init-plugin-tips');
|
||||
setTimeout(function(){
|
||||
__modules.notifications(tipsEl);
|
||||
}, Math.floor(Math.random() * 5000));
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
43
public/js/modules/toggle.js
Normal file
43
public/js/modules/toggle.js
Normal file
@@ -0,0 +1,43 @@
|
||||
CNVS.Toggle = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined';
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-toggles', event: 'pluginTogglesReady' });
|
||||
|
||||
selector = __core.getSelector( selector );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elSpeed = element.attr('data-speed') || 300,
|
||||
elState = element.attr('data-state');
|
||||
|
||||
if( elState != 'open' ){
|
||||
element.children('.toggle-content').hide();
|
||||
} else {
|
||||
element.addClass('toggle-active').children('.toggle-content').slideDown( Number(elSpeed) );
|
||||
}
|
||||
|
||||
element.children('.toggle-header').off( 'click' ).on( 'click', function(){
|
||||
element.toggleClass('toggle-active').children('.toggle-content').slideToggle( Number(elSpeed) );
|
||||
return true;
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
29
public/js/modules/topcart.js
Normal file
29
public/js/modules/topcart.js
Normal file
@@ -0,0 +1,29 @@
|
||||
CNVS.TopCart = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
if( !document.getElementById('top-cart-trigger') ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
document.getElementById('top-cart-trigger').onclick = function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
selector[0].classList.toggle('top-cart-open');
|
||||
};
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
if( !e.target.closest('#top-cart') ) {
|
||||
selector[0].classList.remove('top-cart-open');
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
};
|
||||
}();
|
||||
59
public/js/modules/topsearch.js
Normal file
59
public/js/modules/topsearch.js
Normal file
@@ -0,0 +1,59 @@
|
||||
CNVS.TopSearch = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
var searchForm = document.querySelector('.top-search-form');
|
||||
|
||||
if( !searchForm ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
searchForm.closest('.header-row')?.classList.add( 'top-search-parent' );
|
||||
|
||||
var topSearchParent = document.querySelector('.top-search-parent'),
|
||||
timeout;
|
||||
|
||||
selector[0].onclick = function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
clearTimeout( timeout );
|
||||
|
||||
__core.getVars.elBody.classList.toggle('top-search-open');
|
||||
document.getElementById('top-cart')?.classList.remove('top-cart-open');
|
||||
|
||||
__core.getVars.recalls.menureset();
|
||||
|
||||
if( __core.getVars.elBody.classList.contains('top-search-open') ) {
|
||||
topSearchParent?.classList.add('position-relative');
|
||||
} else {
|
||||
timeout = setTimeout( function() {
|
||||
topSearchParent?.classList.remove('position-relative');
|
||||
}, 500);
|
||||
}
|
||||
|
||||
__core.getVars.elBody.classList.remove("primary-menu-open");
|
||||
__core.getVars.elPageMenu && __core.getVars.elPageMenu.classList.remove('page-menu-open');
|
||||
|
||||
if (__core.getVars.elBody.classList.contains('top-search-open')){
|
||||
searchForm.querySelector('input').focus();
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener( 'click', function(e) {
|
||||
if (!e.target.closest('.top-search-form')) {
|
||||
__core.getVars.elBody.classList.remove('top-search-open');
|
||||
timeout = setTimeout( function() {
|
||||
topSearchParent?.classList.remove('position-relative');
|
||||
}, 500);
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
};
|
||||
}();
|
||||
116
public/js/modules/twitter.js
Normal file
116
public/js/modules/twitter.js
Normal file
@@ -0,0 +1,116 @@
|
||||
CNVS.Twitter = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
var __modules = SEMICOLON.Modules;
|
||||
|
||||
var _build = function(tweet, element, username) {
|
||||
var elFontClass = element.getAttribute('data-font-class') || 'font-body';
|
||||
|
||||
var status = tweet.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
|
||||
return '<a href="'+url+'" target="_blank">'+url+'</a>';
|
||||
}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
|
||||
return reply.charAt(0)+'<a href="https://twitter.com/'+reply.substring(1)+'" target="_blank">'+reply.substring(1)+'</a>';
|
||||
});
|
||||
|
||||
if( element.classList.contains('fslider') ) {
|
||||
var slide = document.createElement('div');
|
||||
slide.classList.add('slide');
|
||||
slide.innerHTML += '<p class="mb-3 '+elFontClass+'">'+status+'</p><small class="d-block"><a href="https://twitter.com/'+username+'/statuses/'+tweet.id_str+'" target="_blank">'+_time(tweet.created_at)+'</a></small>';
|
||||
element.querySelector('.slider-wrap').append(slide);
|
||||
} else {
|
||||
element.innerHTML += '<li><i class="fa-brands fa-x-twitter"></i><div><span>'+status+'</span><small><a href="https://twitter.com/'+username+'/statuses/'+tweet.id_str+'" target="_blank">'+_time(tweet.created_at)+'</a></small></div></li>';
|
||||
}
|
||||
}
|
||||
|
||||
var _time = function(time_value) {
|
||||
var parsed_date = new Date(time_value);
|
||||
var relative_to = new Date();
|
||||
var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
|
||||
delta = delta + (relative_to.getTimezoneOffset() * 60);
|
||||
|
||||
if (delta < 60) {
|
||||
return 'less than a minute ago';
|
||||
} else if(delta < 120) {
|
||||
return 'about a minute ago';
|
||||
} else if(delta < (60*60)) {
|
||||
return (parseInt(delta / 60)).toString() + ' minutes ago';
|
||||
} else if(delta < (120*60)) {
|
||||
return 'about an hour ago';
|
||||
} else if(delta < (24*60*60)) {
|
||||
return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
|
||||
} else if(delta < (48*60*60)) {
|
||||
return '1 day ago';
|
||||
} else {
|
||||
return (parseInt(delta / 86400)).toString() + ' days ago';
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-twitter', event: 'pluginTwitterFeedReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(element) {
|
||||
var elUser = element.getAttribute('data-username') || 'twitter',
|
||||
elCount = element.getAttribute('data-count') || 3,
|
||||
elLoader = element.getAttribute('data-loader') || 'include/twitter/tweets.php',
|
||||
elFetch = element.getAttribute('data-fetch-message') || 'Fetching Tweets from Twitter...';
|
||||
|
||||
var alert = element.querySelector('.twitter-widget-alert');
|
||||
|
||||
if( !alert ) {
|
||||
alert = document.createElement('div');
|
||||
alert.classList.add( 'alert', 'alert-warning', 'twitter-widget-alert', 'text-center' );
|
||||
element.prepend(alert);
|
||||
alert.innerHTML = '<div class="spinner-grow spinner-grow-sm me-2" role="status"><span class="visually-hidden">Loading...</span></div> ' + elFetch;
|
||||
}
|
||||
|
||||
fetch( elLoader + '?username='+ elUser ).then( function(response) {
|
||||
return response.json();
|
||||
}).then( function(tweets) {
|
||||
if( typeof tweets === 'object' && !tweets.isArray() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
alert.remove();
|
||||
var i = 0;
|
||||
tweets?.some( function(tw) {
|
||||
if( i == Number(elCount) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
_build(tw, element, elUser);
|
||||
i++;
|
||||
});
|
||||
|
||||
if( element.classList.contains('fslider') ) {
|
||||
var timer = setInterval( function() {
|
||||
if( element.querySelectorAll('.slide').length > 1 ) {
|
||||
element.classList.remove('customjs');
|
||||
|
||||
setTimeout( function() {
|
||||
__modules.flexSlider();
|
||||
jQuery(element).find( '.flexslider .slide' ).resize();
|
||||
}, 500);
|
||||
|
||||
clearInterval(timer);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}).catch( function(err) {
|
||||
console.log(err);
|
||||
alert.classList.remove( 'alert-warning' );
|
||||
alert.classList.add( 'alert-danger' );
|
||||
alert.innerHTML = 'Could not fetch Tweets from Twitter API. Please try again later.';
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
33
public/js/modules/videofacade.js
Normal file
33
public/js/modules/videofacade.js
Normal file
@@ -0,0 +1,33 @@
|
||||
CNVS.VideoFacade = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-videofacade', event: 'pluginVideoFacadeReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
|
||||
selector.forEach( function(element) {
|
||||
element.onclick = function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var videoContent = element.getAttribute('data-video-html'),
|
||||
videoRatio = element.getAttribute('data-video-ratio') || 'ratio ratio-16x9',
|
||||
videoPreviewEl = element.querySelector('.video-facade-preview'),
|
||||
videoContentEl = element.querySelector('.video-facade-content');
|
||||
|
||||
videoPreviewEl.classList.add('d-none');
|
||||
videoContentEl.innerHTML += videoContent;
|
||||
|
||||
videoRatio.split(" ").forEach( function(ratioClass) {
|
||||
videoContentEl.classList.add(ratioClass);
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
89
public/js/modules/viewportdetect.js
Normal file
89
public/js/modules/viewportdetect.js
Normal file
@@ -0,0 +1,89 @@
|
||||
CNVS.ViewportDetect = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
var _setBSTheme = function(target) {
|
||||
if( target.classList.contains('dark') ) {
|
||||
target.setAttribute('data-bs-theme', 'dark');
|
||||
} else {
|
||||
target.removeAttribute('data-bs-theme');
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-viewportdetect', event: 'pluginViewportDetectReady' });
|
||||
|
||||
selector = __core.getSelector( selector, false );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.forEach( function(el) {
|
||||
var elDelay = el.getAttribute('data-delay') || 0;
|
||||
var elClass = el.getAttribute('data-viewport-class') || "";
|
||||
var elClassOut = el.getAttribute('data-viewport-class-out') || "";
|
||||
var elClassTarget = el.getAttribute('data-viewport-class-target');
|
||||
var elThreshold = el.getAttribute('data-viewport-threshold') || "0";
|
||||
var elRootMargin = el.getAttribute('data-viewport-rootmargin') || "0px";
|
||||
|
||||
elClass = elClass.split(" ");
|
||||
elClassOut = elClassOut.split(" ");
|
||||
|
||||
var hasDark = false;
|
||||
|
||||
if( elClass.includes('dark') || elClassOut.includes('dark') ) {
|
||||
hasDark = true;
|
||||
}
|
||||
|
||||
elClassTarget = elClassTarget ? document.querySelector(elClassTarget) : false;
|
||||
|
||||
var observer = new IntersectionObserver( function(el) {
|
||||
el.forEach( function(entry) {
|
||||
var elTarget = entry.target;
|
||||
|
||||
if( !elClassTarget ) {
|
||||
elClassTarget = elTarget;
|
||||
}
|
||||
|
||||
if( entry.isIntersecting ) {
|
||||
setTimeout( function() {
|
||||
elTarget.classList.add('is-in-viewport');
|
||||
|
||||
elClass.forEach( function(_class) {
|
||||
_class && elClassTarget.classList.add(_class);
|
||||
});
|
||||
|
||||
elClassOut.forEach( function(_class) {
|
||||
_class && elClassTarget.classList.remove(_class);
|
||||
});
|
||||
|
||||
hasDark && _setBSTheme(elClassTarget);
|
||||
}, Number(elDelay));
|
||||
} else {
|
||||
elTarget.classList.remove('is-in-viewport');
|
||||
|
||||
elClass.forEach( function(_class) {
|
||||
_class && elClassTarget.classList.remove(_class);
|
||||
});
|
||||
|
||||
elClassOut.forEach( function(_class) {
|
||||
_class && elClassTarget.classList.add(_class);
|
||||
});
|
||||
|
||||
hasDark && _setBSTheme(elClassTarget);
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: parseFloat(elThreshold),
|
||||
rootMargin: elRootMargin,
|
||||
});
|
||||
|
||||
observer.observe(el);
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
113
public/js/modules/youtubebg.js
Normal file
113
public/js/modules/youtubebg.js
Normal file
@@ -0,0 +1,113 @@
|
||||
CNVS.YoutubeBG = function() {
|
||||
var __core = SEMICOLON.Core;
|
||||
|
||||
return {
|
||||
init: function(selector) {
|
||||
if( __core.getSelector(selector, false, false).length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
__core.loadJS({ file: 'plugins.youtube.js', id: 'canvas-youtube-js', jsFolder: true });
|
||||
|
||||
__core.isFuncTrue( function() {
|
||||
return typeof jQuery !== 'undefined' && jQuery().YTPlayer;
|
||||
}).then( function(cond) {
|
||||
if( !cond ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__core.initFunction({ class: 'has-plugin-youtubebg', event: 'pluginYoutubeBgVideoReady' });
|
||||
|
||||
selector = __core.getSelector( selector, true, '.mb_YTPlayer,.customjs' );
|
||||
if( selector.length < 1 ){
|
||||
return true;
|
||||
}
|
||||
|
||||
selector.each( function(){
|
||||
var element = jQuery(this),
|
||||
elVideo = element.attr('data-video'),
|
||||
elMute = element.attr('data-mute') || true,
|
||||
elRatio = element.attr('data-ratio') || '16/9',
|
||||
elQuality = element.attr('data-quality') || 'hd720',
|
||||
elOpacity = element.attr('data-opacity') || 1,
|
||||
elContainer = element.attr('data-container') || 'parent',
|
||||
elOptimize = element.attr('data-optimize') || true,
|
||||
elLoop = element.attr('data-loop') || true,
|
||||
elControls = element.attr('data-controls') || false,
|
||||
elVolume = element.attr('data-volume') || 50,
|
||||
elStart = element.attr('data-start') || 0,
|
||||
elStop = element.attr('data-stop') || 0,
|
||||
elAutoPlay = element.attr('data-autoplay') || true,
|
||||
elFullScreen = element.attr('data-fullscreen') || false,
|
||||
elCoverImage = element.attr('data-coverimage') || '',
|
||||
elPauseOnBlur = element.attr('data-pauseonblur') || true,
|
||||
elPlayIfVisible = element.attr('data-playifvisible') || false;
|
||||
|
||||
if( elMute == 'false' ) {
|
||||
elMute = false;
|
||||
}
|
||||
|
||||
if( elContainer == 'parent' ) {
|
||||
var parent = element.parent();
|
||||
if( parent.attr('id') ) {
|
||||
elContainer = '#' + parent.attr('id');
|
||||
} else {
|
||||
var ytPid = 'yt-bg-player-parent-' + Math.floor( Math.random() * 10000 );
|
||||
parent.attr( 'id', ytPid );
|
||||
elContainer = '#' + ytPid;
|
||||
}
|
||||
}
|
||||
|
||||
if( elOptimize == 'false' ) {
|
||||
elOptimize = false;
|
||||
}
|
||||
|
||||
if( elLoop == 'false' ) {
|
||||
elLoop = false;
|
||||
}
|
||||
|
||||
if( elControls == 'true' ) {
|
||||
elControls = true;
|
||||
}
|
||||
|
||||
if( elAutoPlay == 'false' ) {
|
||||
elAutoPlay = false;
|
||||
}
|
||||
|
||||
if( elFullScreen == 'true' ) {
|
||||
elFullScreen = true;
|
||||
}
|
||||
|
||||
if( elPauseOnBlur == 'true' ) {
|
||||
elPauseOnBlur = true;
|
||||
}
|
||||
|
||||
if( elPlayIfVisible == 'true' ) {
|
||||
elPlayIfVisible = true;
|
||||
}
|
||||
|
||||
element.YTPlayer({
|
||||
videoURL: elVideo,
|
||||
mute: elMute,
|
||||
ratio: elRatio,
|
||||
quality: elQuality,
|
||||
opacity: Number(elOpacity),
|
||||
containment: elContainer,
|
||||
optimizeDisplay: elOptimize,
|
||||
loop: elLoop,
|
||||
vol: Number(elVolume),
|
||||
startAt: Number(elStart),
|
||||
stopAt: Number(elStop),
|
||||
autoPlay: elAutoPlay,
|
||||
realfullscreen: elFullScreen,
|
||||
showYTLogo: false,
|
||||
showControls: false,
|
||||
coverImage: elCoverImage,
|
||||
stopMovieOnBlur: elPauseOnBlur,
|
||||
playOnlyIfVisible: elPlayIfVisible,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}();
|
||||
Reference in New Issue
Block a user