"use strict";
(function ($){
"use strict";
preloader();
loadElementorInit();
effectBackForward();
async function reloadAjax($off, $el=$(document)){
dsnGrid.initTheme();
if(!$off){
window.$effectScroll=await effectScroller();
window.$animate=await dsnGrid.effectAnimate();
}
await $('.hidden[data-dsn="bg_section"]').each(function (){
$(this).next().append($(this));
$(this).css({
zIndex: -1
});
$(this).removeClass('hidden');
});
await $effectScroll.start();
await $animate.allInt();
await loadLazyImage($el, ['bg', 'src']);
await sliderPortfolio();
await fancyBox();
await justifiedGallery($el);
await compareTowImage();
await serviceSection($el);
await scrollBarWidth();
await menuInit();
await dropHash();
await initMap($el);
await accordion($el);
await projectSlider();
await Headline($el);
await tabs($el);
if(!$off) await Isotope($el);else setTimeout(Isotope, 500);
if(!$body.hasClass('elementor-editor-active')) dsnAjax()&&(await dsnAjax().start());
await list_project($el);
await inputNumber($el);
await mouseCirMove($off);
}
function reloadElement($off, $el=$(document)){
if(typeof $animate!=='undefined'){
$animate.animateWorkScroll($el);
$animate.customAnimation($el);
$animate.animateImageScroll($el);
$animate.parallaxHover($el);
$animate.parallaxImg($el);
$animate.animateSkills($el);
}
loadLazyImage($el, 'bg');
projectSlider($el);
justifiedGallery($el);
compareTowImage($el);
sliderPortfolio($el);
serviceSection($el);
accordion($el);
Isotope($el).then(()=> initMap($el));
Headline($el);
tabs($el);
inputNumber($el);
list_project($el);
setTimeout(()=> ScrollTrigger.refresh(), 1000);
}
function tabs($el){
$el.find(".dsn-tabs").each(function (){
const $this=$(this);
$this.on("click", ".link-click", function (){
$(this).addClass("active").siblings().removeClass("active");
$this.find("#" + $(this).attr("id") + "-content").fadeIn(1000).siblings().hide();
});
dsnGrid.killAjax(()=> {
$this.off("click", ".link-click");
});
});
}
function Headline($el){
if($.isFunction($.fn.animatedHeadline)){
$el.find('.ah-headline:not(.dsn-active-line)').animatedHeadline();
$el.find('.ah-headline').addClass('dsn-active-line');
}}
function accordion($el=$(document)){
$el.find(".dsn-accordion").each(function (){
const $this=$(this),
acc_q=$this.find(".accordion__question");
acc_q.on("click", function (){
const content=$(this).next();
$this.find(".accordion__answer").not(content).slideUp(400);
acc_q.not(this).removeClass("expanded");
$(this).toggleClass("expanded");
$this.find('.accordion__item').removeClass("active");
if($(this).hasClass('expanded')) $(this).parents('.accordion__item').addClass("active");
content.slideToggle(400);
});
dsnGrid.killAjax(function (){
acc_q.off('click');
});
});
}
function initMap($el=$(document)){
const map_id=$el.find(".map-custom"),
mapScriptId=document.getElementById("map_api");
if(map_id.length <=0) return;
if(mapScriptId===null){
const GOOGLE_MAP_KEY=dsnParam.map.api,
script=document.createElement("script");
script.type="text/javascript";
script.id="map_api";
script.src="https://maps.googleapis.com/maps/api/js?key=" + GOOGLE_MAP_KEY;
document.body.appendChild(script);
}
setTimeout(function (){
try {
map_id.each(function (){
let map_att=$(this),
lat=dsnGrid.getData(this, "lat"),
leg=dsnGrid.getData(this, "len"),
zoom=dsnGrid.getData(this, "zoom");
const letLeng=new google.maps.LatLng(lat, leg),
map=new google.maps.Map(map_att.get(0), {
center: {
lat: lat,
lng: leg
},
mapTypeControl: false,
scrollwheel: false,
draggable: true,
streetViewControl: false,
navigationControl: false,
zoom: zoom,
styles: [{
"featureType": "water",
"elementType": "geometry",
"stylers": [{
"color": "#e9e9e9"
}, {
"lightness": 17
}]
}, {
"featureType": "landscape",
"elementType": "geometry",
"stylers": [{
"color": "#f5f5f5"
}, {
"lightness": 20
}]
}, {
"featureType": "road.highway",
"elementType": "geometry.fill",
"stylers": [{
"color": "#ffffff"
}, {
"lightness": 17
}]
}, {
"featureType": "road.highway",
"elementType": "geometry.stroke",
"stylers": [{
"color": "#ffffff"
}, {
"lightness": 29
}, {
"weight": 0.2
}]
}, {
"featureType": "road.arterial",
"elementType": "geometry",
"stylers": [{
"color": "#ffffff"
}, {
"lightness": 18
}]
}, {
"featureType": "road.local",
"elementType": "geometry",
"stylers": [{
"color": "#ffffff"
}, {
"lightness": 16
}]
}, {
"featureType": "poi",
"elementType": "geometry",
"stylers": [{
"color": "#f5f5f5"
}, {
"lightness": 21
}]
}, {
"featureType": "poi.park",
"elementType": "geometry",
"stylers": [{
"color": "#dedede"
}, {
"lightness": 21
}]
}, {
"elementType": "labels.text.stroke",
"stylers": [{
"visibility": "on"
}, {
"color": "#ffffff"
}, {
"lightness": 16
}]
}, {
"elementType": "labels.text.fill",
"stylers": [{
"saturation": 36
}, {
"color": "#333333"
}, {
"lightness": 40
}]
}, {
"elementType": "labels.icon",
"stylers": [{
"visibility": "off"
}]
}, {
"featureType": "transit",
"elementType": "geometry",
"stylers": [{
"color": "#f2f2f2"
}, {
"lightness": 19
}]
}, {
"featureType": "administrative",
"elementType": "geometry.fill",
"stylers": [{
"color": "#fefefe"
}, {
"lightness": 20
}]
}, {
"featureType": "administrative",
"elementType": "geometry.stroke",
"stylers": [{
"color": "#fefefe"
}, {
"lightness": 17
}, {
"weight": 1.2
}]
}]
});
google.maps.event.addDomListener(window, "resize", function (){
let center=map.getCenter();
google.maps.event.trigger(map, "resize");
map.setCenter(center);
});
new google.maps.Marker({
position: letLeng,
animation: google.maps.Animation.BOUNCE,
icon: dsnParam.map.marker_icon,
title: "ASL",
map: map
});
});
} catch (e){
console.log(e);
}}, 1000);
}
function preloader(){
const preloader=$("#dsn_preloader");
if(!preloader.length){
window.addEventListener('DOMContentLoaded', function (){
reloadAjax().catch($err=> {
console.log($err);
});
});
return false;
}
$body.css('overflow', 'hidden');
const progress_number=preloader.find(".loading-count"),
preloader_progress=preloader.find('.dsn-progress-path'),
present={
value: 0
};
const updateVal=(val, isSetVal)=> {
progress_number.text(val.toFixed(0));
preloader_progress.css("stroke-dashoffset", 300 - val * 3);
if(isSetVal) present.value=val;
};
const timer=dsnGrid.pageLoad({
startTime: 0,
endTime: 100,
duration: 1000,
onProgress(val){
updateVal(val, true);
}});
window.addEventListener('DOMContentLoaded', function (){
clearInterval(timer);
const tl=gsap.timeline();
tl.to(present, 1, {
value: 100,
onUpdate(){
updateVal(present.value, true);
}}).call(function (){
reloadAjax().catch($err=> {
console.log($err);
});
}).to(preloader.find('> *:not(.bg-load)'), {
autoAlpha: 0
}).to(preloader.find('.bg-load'), {
yPercent: -100,
ease: Expo.easeInOut,
duration: 1.5
}).to(preloader.find('.bg-load .separator__path'), {
attr: {
d: dsnGrid.getData(preloader.find('.bg-load .separator__path').get(0), 'to')
},
ease: "Power4.easeInOut",
duration: 1.5
}, '-=1.5').fromTo("#main_root", 1, {
y: 400
}, {
y: 0,
clearProps: true,
ease: Expo.easeInOut
}, "-=1.2").call(function (){
preloader.remove();
ScrollTrigger.update();
$body.css('overflow', '');
ScrollTrigger.getAll().forEach($item=> {
$item.refresh();
});
});
});
}
function effectBackForward(){
$wind.on("popstate", function (e){
if(window.location.hash.length){
$wind.scrollTop(0);
dsnGrid.scrollTop(window.location.hash, 1, -100);
return;
}
if(document.location.href.indexOf("#") > -1){
return;
}
setTimeout(function (){
dsnAjax().backAnimate(e);
}, 50);
});
}
function dsnAjax(){
return dsnGrid.dsnAjax({
className: 'dsn-ajax-effect',
beforeSend: ()=> $body.css('overflow', 'hidden'),
async success(data){
const animate={
value: 0
};
return gsap.to(animate, 0.2, {
value: 100,
delay: 1,
onStart(){
reloadAjax(true).catch($err=> {
console.error($err);
});
}});
},
onComplete(){
setTimeout(()=> {
$body.css('overflow', '');
}, 500);
ScrollTrigger.refresh();
}});
}
function menuInit(){
var _targets$toggle4;
const menu=document.getElementById("site_menu_header");
if(!menu) return;
const targets={
toggle: menu.querySelector("#navbar_toggle"),
backgroundMain: menu.querySelector(".bg-load:not(.dsn-svg-transition)"),
svg: menu.querySelector("svg.bg-load path"),
subMenu: $(menu).find("li.nav-item.has-sub-menu > a"),
back: $(menu).find("li.dsn-back"),
hamburger: menu.classList.contains('dsn-hamburger'),
scrDown: 0
};
const reserved=dsnGrid.useState(false, (newValue, oldValue)=> oldValue&&removeOpenMenu());
const typeNav=dsnGrid.useState(targets.hamburger, newValue=> newValue ? menu.classList.add("dsn-hamburger"):menu.classList.remove("dsn-hamburger"));
const removeOpenMenu=()=> menu.querySelectorAll('ul').forEach(item=> item.classList.remove('open'));
const TransEnd=()=> {
var _menu$querySelector;
return reserved.getValue()&&((_menu$querySelector=menu.querySelector('.primary-nav'))===null||_menu$querySelector===void 0 ? void 0:_menu$querySelector.classList.add('open'));
};
const onCompleteAnimate=e => {
e.classList.toggle('open');
menu.classList.toggle('dsn-open');
$body.toggleClass('over-hidden');
reserved.setValue(!reserved.getValue());
};
const handleClick=e => {
e.preventDefault();
e.stopPropagation();
e.currentTarget.closest('.open').classList.remove('open');
};
const handleClickSubMenu=function (e){
var _e$currentTarget, _e$currentTarget$pare, _e$currentTarget$pare2;
if(!typeNav.getValue()) return;
handleClick(e);
(_e$currentTarget=e.currentTarget)===null||_e$currentTarget===void 0 ? void 0:(_e$currentTarget$pare=_e$currentTarget.parentElement)===null||_e$currentTarget$pare===void 0 ? void 0:(_e$currentTarget$pare2=_e$currentTarget$pare.querySelector('ul'))===null||_e$currentTarget$pare2===void 0 ? void 0:_e$currentTarget$pare2.classList.add("open");
};
const handleClickBackMenu=e => {
handleClick(e);
e.currentTarget.closest('ul').closest('li').closest('ul').classList.add("open");
};
const toggleClick=function (){
if(!reserved.getValue()){
dsnGrid.svgAnimate.up(targets.svg, TransEnd).to("#dsn-scrollbar", {
y: -200,
duration: 1,
ease: 'power4.in'
}, "top").set(targets.backgroundMain, {
autoAlpha: 1
}, "center");
onCompleteAnimate(this);
} else dsnGrid.svgAnimate.down(targets.svg, ()=> onCompleteAnimate(this)).to("#dsn-scrollbar", {
y: 0,
clearProps: "y",
duration: 1,
ease: 'power4'
}, "-=1").set(targets.backgroundMain, {
autoAlpha: 0
}, "center");
};
const resizeNav=function (){
if(window.innerWidth > 991&&typeNav.getValue()){
typeNav.setValue(false);
}else if(window.innerWidth <=991&&!typeNav.getValue()){
typeNav.setValue(true);
}else if(dsnGrid.isMobile()){
typeNav.setValue(true);
}};
if(!targets.hamburger){
window.addEventListener('resize', resizeNav);
resizeNav();
}
new Promise(resolve=> setTimeout(()=> resolve(), 300)).then(()=> {
var _targets$toggle;
return dsnGrid.spltting.Char((_targets$toggle=targets.toggle)===null||_targets$toggle===void 0 ? void 0:_targets$toggle.querySelector('.text-menu'));
}).then(()=> {
var _targets$toggle2;
return dsnGrid.spltting.Char((_targets$toggle2=targets.toggle)===null||_targets$toggle2===void 0 ? void 0:_targets$toggle2.querySelector('.text-open'));
}).then(()=> {
var _targets$toggle3;
return dsnGrid.spltting.Char((_targets$toggle3=targets.toggle)===null||_targets$toggle3===void 0 ? void 0:_targets$toggle3.querySelector('.text-close'));
}).then(()=> {
targets.back.find(".text-toggle-back").each(function ($index){
setTimeout(()=> dsnGrid.spltting.Char(this), 10 * $index);
});
}).then(()=> {
menu.querySelectorAll('ul').forEach((item, index)=> {
item.style.setProperty('--dsn-li-name', "dsn" + index);
Object.keys(item.children).forEach($key=> {
item.children[$key].style.setProperty('--dsn-li-index', $key);
});
});
}).then(()=> {
gsap.set(menu, {
yPercent: -100,
autoAlpha: 0
});
menu.classList.remove('d-none');
gsap.to(menu, {
yPercent: 0,
autoAlpha: 0,
delay: 1,
clearProps: true
});
});
$effectScroll.getListener(function (e, x, y){
if(y > 170){
if(targets.scrDown < y){
menu.classList.add("nav-bg", "hide-nav");
}else{
menu.classList.remove("hide-nav");
}}else{
menu.classList.remove("nav-bg", "hide-nav");
}
targets.scrDown=y;
});
(_targets$toggle4=targets.toggle)===null||_targets$toggle4===void 0 ? void 0:_targets$toggle4.addEventListener('click', toggleClick);
targets.subMenu.on('click', handleClickSubMenu);
targets.back.on('click', handleClickBackMenu);
dsnGrid.killAjax(function (){
var _targets$toggle5;
(_targets$toggle5=targets.toggle)===null||_targets$toggle5===void 0 ? void 0:_targets$toggle5.removeEventListener('click', toggleClick);
targets.subMenu.off('click', handleClickSubMenu);
targets.back.off('click', handleClickBackMenu);
});
}
function dropHash(){
const linked={
hash: $("a[href=\"#\"]"),
scroll: $("[href*=\"#\"]:not([href=\"#\"]):not(.comment-reply-link):not(#cancel-comment-reply-link):not(.wc-tabs .wc-effect-tab)")
};
linked.hash.on("click", function (e){
e.preventDefault();
});
linked.scroll.on("click", function (e){
e.preventDefault();
let href=$($(this).attr("href"));
if(!href.length){
href=null;
return false;
}
const option=$(this).data('dsn-option');
dsnGrid.scrollTop(href.get(0).offsetTop, option);
href=null;
});
if(window.location.hash.length){
$wind.scrollTop(0);
dsnGrid.scrollTop(window.location.hash);
}
dsnGrid.killAjax(function (){
linked.hash.off("click");
linked.scroll.off("click");
});
}
function scrollBarWidth(){
const scrollDiv=document.createElement("div");
scrollDiv.style.cssText="width:100px;height:100px;overflow: scroll;position: absolute;top: -9999px;";
document.body.appendChild(scrollDiv);
$body.css('--dsn-width-scroll', scrollDiv.offsetWidth - scrollDiv.clientWidth + "px");
document.body.removeChild(scrollDiv);
}
async function Isotope($el=$(document)){
const createIso=async function ($item){
if(!$item.length) return;
$item.addClass('use-filter');
return $item.isotope({
itemSelector: '.grid-item'
});
};
await $el.find('.root-posts').each(function (){
const rootPosts=$(this),
$filtering=rootPosts.find('.dsn-filtering .filtering'),
$isoItem=rootPosts.hasClass('has-filter') ? rootPosts.find('.dsn-posts'):rootPosts.find('.dsn-isotope'),
$buttonAjax=rootPosts.find('.button-load-more');
if(!$filtering.length&&!$isoItem.length&&!$buttonAjax.length) return;
const handleClickFilter=function ($iso){
if(!$filtering.length) return $iso;
const handleClick=function (){
$(this).addClass('active').siblings().removeClass("active");
$iso.isotope({
filter: $(this).attr("data-filter")
});
};
$filtering.find('button').on("click", handleClick);
return $iso;
};
const handleAjax=function ($iso){
if(!$buttonAjax.length) return;
const $option=dsnGrid.getOptionAjax($buttonAjax.get(0));
dsnGrid.loadMore({
el: $buttonAjax,
option: $option,
isotope: $iso,
success: function (data){
$animate.parallaxHover();
$animate.workMetroContent();
},
filtering: $filtering,
posts: rootPosts.find('.dsn-posts')
});
return $iso;
};
createIso($isoItem).then(handleClickFilter).then(handleAjax).then(function ($iso){
dsnGrid.killAjax(function (){
$filtering.find('button').off('click');
if($iso) $iso.isotope('destroy');
$buttonAjax.off('click');
});
});
});
await $el.find(".dsn-isotope:not(.use-filter)").each(function (){
if($(this).parent('.root-posts').length) return;
createIso($(this)).then(function ($iso){
dsnGrid.killAjax(function (){
if($iso) $iso.isotope('destroy');
});
});
});
}
function loadLazyImage($el=$(document), $type, $args={}){
if(typeof $type==='object'){
$type.forEach($item=> {
loadLazyImage($el, $item);
});
}else{
const dsnData=$el.find("[data-dsn-" + $type + "]");
dsnData.each(function ($index){
const $args={};
if(dsnData.length - 1===$index&&$type==="src") $args.onComplete=()=> {
$('.swiper-container.swiper-initialized').each(function (){
var _swiper$passedParams;
const swiper=this.swiper;
if(!(swiper===null||swiper===void 0 ? void 0:(_swiper$passedParams=swiper.passedParams)===null||_swiper$passedParams===void 0 ? void 0:_swiper$passedParams.loop)) return;
swiper.loopDestroy();
swiper.loopCreate();
swiper.update();
swiper.updateSlides();
});
$('.dsn-isotope').each(function (){
$(this).isotope({
itemSelector: '.grid-item'
});
});
};else $args.onComplete=()=> {
$('.dsn-isotope').each(function (){
$(this).isotope({
itemSelector: '.grid-item'
});
});
};
setTimeout(()=> {
dsnGrid.loadData(this, $type, $args);
}, 1000);
});
}}
function serviceSection($el=$(document)){
if(dsnGrid.isMobile()) return;
($el.hasClass("service-with-img") ? $el.find('.dsn-service'):$el.find(".service-with-img")).each(function (){
const serviceItem=$(this).find(".service-item"),
onEnter=function (){
serviceItem.not(this).removeClass('active');
this.classList.add("active");
serviceItem.not(this).find('.service_description ').slideUp(400);
$(this).find('.service_description ').slideDown(400);
};
serviceItem.first().addClass("active");
serviceItem.on('mouseenter', onEnter);
dsnGrid.killAjax(function (){
serviceItem.off('mouseenter', onEnter);
});
});
}
function effectScroller(){
const Scrollbar=window.Scrollbar;
const locked_scroll="locked-scroll";
const contentScrollbar="dsn-scrollbar";
return {
isScroller: function ($print){
const myScrollbar=document.getElementById(contentScrollbar);
const hasSc = !$body.hasClass("dsn-effect-scroll")||dsnGrid.isMobile()||myScrollbar===null;
if(hasSc&&$print){
$body.addClass("dsn-mobile");
}
return !hasSc;
},
contactForm: function (){
const form=$('.contact-modal .contact-container');
if(form.length) Scrollbar.init(form.get(0), {
damping: dsnParam.scrollbar.speed
});
},
woocommerceList: function (){
const form=$('#dsn_cart .woocommerce ul.cart_list, #dsn_cart .woocommerce ul.product_list_widget');
if(form.length) Scrollbar.init(form.get(0), {
damping: dsnParam.scrollbar.speed
});
},
sidebarScroll: function (){
const comment=document.querySelector(".dsn-sidebar .sidebar-single");
if(comment!==null) Scrollbar.init(comment, {
damping: dsnParam.scrollbar.speed||0.05
});
},
createScroll: function ($target){
if($target!==null) Scrollbar.init($target, {
damping: dsnParam.scrollbar.speed||0.05
});
},
start: function (){
$body.removeClass(locked_scroll);
dsnGrid.scrollTop(0, {
duration: 0.01
});
if(!this.isScroller(true)) return;
const scroll=Scrollbar.init(document.getElementById(contentScrollbar), {
damping: dsnParam.scrollbar.speed,
renderByPixels: true,
continuousScrolling: false,
delegateTo: document
});
this.sidebarScroll();
ScrollTrigger.defaults({
scroller: "#dsn-scrollbar",
pinType: 'transform'
});
ScrollTrigger.scrollerProxy(document.getElementById(contentScrollbar), {
scrollTop(value){
if(arguments.length){
scroll.scrollTop=value;
}
return scroll.scrollTop;
},
scrollLeft(value){
if(arguments.length){
scroll.scrollLeft=value;
}
return scroll.scrollLeft;
}});
$effectScroll.getListener(ScrollTrigger.update);
},
locked: function (){
var _this$getScrollbar;
$body.addClass(locked_scroll);
this.isScroller()&&((_this$getScrollbar=this.getScrollbar())===null||_this$getScrollbar===void 0 ? void 0:_this$getScrollbar.destroy());
},
getScrollbar: function ($id){
if($id===undefined){
return Scrollbar.get(document.getElementById(contentScrollbar));
}
return Scrollbar.get(document.querySelector($id));
},
getListener: function (listener, $useWin=true){
if(listener===undefined) return;
let $this=this;
const scroll=e => {
listener(e, window.scrollX, window.scrollY);
};
if($this.isScroller()){
$this.getScrollbar().addListener(e=> {
listener(e, e.offset.x, e.offset.y);
});
}else{
if($useWin){
$wind.on("scroll", scroll);
}}
$this=null;
}};}
function compareTowImage($el=$(document)){
$el.find('.dsn-compare-container').each(function (){
const compare=dsnGrid.compareTowImg(this);
dsnGrid.killAjax(function (){
compare.destroy();
});
});
}
function fancyBox(){
if(!window.Fancybox) return;
Fancybox.defaults.Hash=false;
Fancybox.bind(".vid");
Fancybox.bind("[data-fancybox]");
Fancybox.bind(".woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image  a");
dsnGrid.killAjax(function (){
Fancybox.unbind(".vid");
Fancybox.unbind("[data-fancybox]");
});
}
function projectSlider($el=$(document)){
const relationAnotherSlider=function (){
const syn=$(this).parent().find(dsnGrid.getData(this, "controllers"));
if(!syn.length) return;
this.optionSwiper['thumbs']={
swiper: {
el: syn.find('.swiper-container').get(0),
allowTouchMove: false,
slidesPerView: 1,
speed: option.speed||1000,
parallax: true,
autoHeight: true
}};
this.optionSwiper.breakpoints['768']={
slidesPerView: 1,
spaceBetween: 0
};};
const swiper=function (option){
delete this.optionSwiper;
const swiper=new Swiper(this.querySelector(".swiper"), option);
dsnGrid.killAjax(function (){
swiper.destroy();
});
};
$el.find(".dsn-swiper:not(.dsn-swiper-initialized)").each(function (){
this.classList.add('dsn-swiper-initialized');
this.optionSwiper=dsnGrid.getData(this, 'option');
this.optionSwiper.breakpoints['0']={
slidesPerView: 1,
spaceBetween: 0
};
const getNavigation=($targetEl, $targetCustom)=> {
const custom=this.querySelector('.dsn-arrow-custom');
if(!custom) return this.querySelector($targetEl);
return $('.dsn-nav-arrow[data-dsn-id="' + custom.getAttribute('data-dsn-id') + '"]').find($targetCustom).get(0);
};
relationAnotherSlider.bind(this)();
swiper.bind(this)($.extend(true, {
speed: 1000,
lazy: true,
pagination: {
el: this.querySelector('.swiper-pagination'),
clickable: true,
dynamicBullets: true,
type: dsnGrid.getData(this.querySelector('.swiper-pagination'), 'type', 'bullets')
},
navigation: {
nextEl: getNavigation('.swiper-next ,.next-container', '.dsn-nav-right'),
prevEl: getNavigation('.swiper-prev , .prev-container', '.dsn-nav-left')
},
on: {
init(){
this.touchEventsData.formElements="*";
},
touchStart(){
gsap.to($(this.$el).find('.swiper-slide'), {
scale: 0.95,
ease: "none",
duration: 0.5
});
},
touchEnd(){
gsap.to($(this.$el).find('.swiper-slide'), {
scale: 1,
ease: "none",
duration: 0.5
});
}}
}, this.optionSwiper));
});
}
function justifiedGallery($el=$(document)){
$el.find(".gallery-portfolio").each(function (){
if(!window.fjGallery) return;
const option=dsnGrid.getData(this, 'option')||{};
const gallery=fjGallery(this, { ...option,
itemSelector: '.fj-gallery-item',
onJustify: function (){
ScrollTrigger.refresh();
}});
dsnGrid.killAjax(function (){
fjGallery(gallery, 'destroy');
});
});
}
function sliderPortfolio($el=$(document)){
let tl=gsap.timeline();
const initSlider=async function (){
await this.querySelectorAll('.dsn-slider-content .slide-content [data-dsn-split=\"chars\"]').forEach(function ($item){
dsnGrid.spltting.Char($item, true);
});
await this.querySelectorAll('.dsn-slider-content .head-meta').forEach(function ($item){
dsnGrid.spltting.Items($item, "span");
});
};
const init=swiper=> {
swiper.slides.forEach(item=> {
const video=item.querySelector('.swiper-slide:not(.swiper-slide-active) video');
if(video) video.pause();
});
};
const activeVideo=swiper=> {
const newVideo=swiper.slides[swiper.activeIndex].querySelector('video');
const oldVideo=swiper.slides[swiper.previousIndex].querySelector('video');
if(newVideo) newVideo.play();
if(oldVideo) oldVideo.pause();
};
const getContent=(swiper, contentRef)=> {
const oldNum=swiper.slides[swiper.previousIndex].getAttribute("data-dsn-id");
const newNum=swiper.slides[swiper.activeIndex].getAttribute("data-dsn-id");
return [newNum, oldNum, contentRef.querySelector('[data-dsn-id="' + newNum + '"]'), contentRef.querySelector('[data-dsn-id="' + oldNum + '"]')];
};
function slideChange(swiper){
const contentSlider=this.querySelector('.dsn-slider-content');
if(!contentSlider) return;
activeVideo(swiper);
const [newNum, oldNum, newContent, oldContent]=getContent(swiper, contentSlider),
[newTitle, oldTitle]=[Array.from(newContent.querySelectorAll('.title .char')||[]), Array.from(oldContent.querySelectorAll('.title .char')||[])],
$isRight=oldNum < newNum,
animate={
show: {
autoAlpha: 1,
y: 0,
stagger: {
amount: 0.3,
from: "center"
},
ease: "back.out(4)",
rotation: 0,
scale: 1,
yoyo: true
},
hide: {
autoAlpha: 0,
y: !$isRight ? "25%":"-25%",
stagger: {
amount: 0.3,
from: "center"
},
ease: "back.in(4)",
yoyo: true,
rotation: 8,
scale: 1.1
}};
const current=Number.parseInt(newNum, 10) + 1,
num=this.querySelector(".slider-current-index");
if(num) num.innerHTML=current > 9 ? current:'0' + current;
if(swiper.dsnOnChange) swiper.dsnOnChange(newNum, oldNum, newContent, oldContent);
tl.progress(1);
tl=new gsap.timeline();
oldContent.classList.remove("dsn-active-animate");
tl.fromTo(oldTitle, 0.4, animate.show, animate.hide).call(function (){
oldContent.classList.remove("dsn-active");
newContent.classList.add("dsn-active");
newContent.classList.add("dsn-active-animate");
}).fromTo(newTitle, 0.8, animate.hide, animate.show, "-=.005");
}
const swiper=function (){
const option=Object.assign({}, {
on: {
init,
slideChange: slideChange.bind(this)
}}, dsnGrid.getData(this, 'option')||{}, {
autoHeight: false
});
if(window.innerWidth > 767) option.pagination={
el: this.querySelector('.swiper-pagination'),
clickable: true,
dynamicBullets: true,
dynamicMainBullets: 1,
type: 'bullets'
};
return new Swiper(this.querySelector(".content-slider .swiper-container"), option);
};
const NavSwiper=function (container, swiper){
var _swiper$passedParams2, _swiper$passedParams3;
const navContainer=container.querySelector('.next-paginate');
setTimeout(function (){
gsap.to($(container).find('.bg-container'), {
opacity: 1
});
}, 3000);
if(!navContainer) return false;
if(window.innerWidth > 575){
navContainer.querySelectorAll('h6.sm-title-block').forEach($item=> {
const s=dsnGrid.spltting.Char($item);
s.chars.forEach(($item, $index)=> {
$index=$index + 5;
$item.setAttribute('data-swiper-parallax-y', `${$index * 9}%`);
$item.setAttribute(`data-swiper-parallax-opacity`, '0');
$item.setAttribute('data-swiper-parallax-duration', $index * 100);
$item.classList.add('swiper-parallax-transform');
if(s.chars.length===$index - 4){
const arrow=s.el.closest('.box-content').querySelector('.next-arrow');
arrow.setAttribute('data-swiper-parallax-y', `${$index * 3}%`);
arrow.setAttribute(`data-swiper-parallax-opacity`, '0');
arrow.setAttribute('data-swiper-parallax-duration', $index * 100);
arrow.classList.add('swiper-parallax-transform');
}});
});
}
const navSlider=new Swiper(navContainer, {
speed: ((_swiper$passedParams2=swiper.passedParams)===null||_swiper$passedParams2===void 0 ? void 0:_swiper$passedParams2.speed)||1000,
loop: ((_swiper$passedParams3=swiper.passedParams)===null||_swiper$passedParams3===void 0 ? void 0:_swiper$passedParams3.loop)||false,
touchRatio: 0.2,
resistanceRatio: 0.65,
effect: 'fade',
parallax: true,
allowTouchMove: false
});
swiper.thumbs.swiper=navSlider;
setTimeout(function (){
navContainer.classList.remove('d-none');
}, 3000);
return navSlider;
};
const NavSwiperPrev=function (container, swiper, nav){
var _swiper$passedParams4, _swiper$passedParams5;
const navContainer=container.querySelector('.prev-paginate');
setTimeout(function (){
gsap.to($(container).find('.bg-container'), {
opacity: 1
});
}, 3000);
if(!navContainer) return false;
if(window.innerWidth > 575){
navContainer.querySelectorAll('h6.sm-title-block').forEach($item=> {
const s=dsnGrid.spltting.Char($item);
s.chars.forEach(($item, $index)=> {
if($index===0){
$index=$index + 4;
const arrow=s.el.closest('.box-content').querySelector('.prev-arrow');
arrow.setAttribute('data-swiper-parallax-y', `${$index * 3}%`);
arrow.setAttribute(`data-swiper-parallax-opacity`, '0');
arrow.classList.add('swiper-parallax-transform');
$index=0;
}
$index=$index + 5;
$item.setAttribute('data-swiper-parallax-y', `${$index * 9}%`);
$item.setAttribute(`data-swiper-parallax-opacity`, '0');
$item.setAttribute('data-swiper-parallax-duration', $index * 100);
$item.classList.add('swiper-parallax-transform');
});
});
}
const navSlider=new Swiper(navContainer, {
speed: ((_swiper$passedParams4=swiper.passedParams)===null||_swiper$passedParams4===void 0 ? void 0:_swiper$passedParams4.speed)||1000,
loop: ((_swiper$passedParams5=swiper.passedParams)===null||_swiper$passedParams5===void 0 ? void 0:_swiper$passedParams5.loop)||false,
touchRatio: 0.2,
resistanceRatio: 0.65,
effect: 'fade',
parallax: true,
allowTouchMove: false
});
nav.thumbs.swiper=navSlider;
setTimeout(function (){
navContainer.classList.remove('d-none');
}, 3000);
return navSlider;
};
const webGelOption=function (){
const images=[];
$(this).find(".bg-container .slide-item").each(function (){
const slide_content=$(this).find('.image-bg'),
id=$(this).data('dsn-id');
if(slide_content.find('video').length){
images[id]={
posters: slide_content.find('video').get(0),
src: slide_content.find('video').attr("data-dsn-poster"),
overlay: slide_content.data("overlay")
};}else{
const img=slide_content.find('img');
const srcImg=img.data('dsn-src');
images[id]={
src: srcImg!==null&&srcImg!==void 0 ? srcImg:img.attr("src"),
overlay: slide_content.data("overlay")
};}});
if(images.length) $(this).find(".bg-container").attr("data-overlay", images[0].overlay);
return images;
};
$el.find(".main-slider:not(.dsn-swiper-initialized)").each(function (){
this.classList.add('dsn-swiper-initialized');
initSlider.bind(this)().then(swiper.bind(this)).then(function (swiper){
const handleNext=function (){
if(tl.isActive()) return;
if(swiper.slides.length===swiper.activeIndex + 1&&!swiper.passedParams.loop){
swiper.slideTo(0);
}else{
swiper.slideNext();
}},
handlePrev=function (){
if(tl.isActive()) return;
if(swiper.activeIndex===0&&!swiper.passedParams.loop){
swiper.slideTo(swiper.slides.length);
}else{
swiper.slidePrev();
}},
nextArrow=$(this).find('.next-arrow'),
prevArrow=$(this).find('.prev-arrow');
if(nextArrow.length) nextArrow.on('click', handleNext);
if(prevArrow.length) prevArrow.on('click', handlePrev);
const nav=NavSwiper(this, swiper);
const navPrev=NavSwiperPrev(this, swiper, nav);
let webGel=null;
if(this.classList.contains('dsn-webgl')) webGel=dsnGrid.WebGLDistortionHoverEffects({
imgs: webGelOption.bind(this)(),
...(dsnGrid.getData(this, 'webgl', {})||{}),
direction: swiper.params.direction,
parent: this.querySelector('.bg-container'),
swiper,
onStart({
parent,
item
}){
parent.setAttribute('data-overlay', item.overlay);
}});
dsnGrid.killAjax(function (){
if(nextArrow.length) nextArrow.off('click', handleNext);
if(prevArrow.length) prevArrow.off('click', handlePrev);
tl.kill();
swiper.destroy();
webGel.destroy();
if(nav) nav.destroy();
if(navPrev) navPrev.destroy();
});
}.bind(this));
});
}
function loadElementorInit(){
$wind.on("elementor/frontend/init", function (){
if(typeof elementor!=="undefined"){
elementorFrontend.hooks.addAction("frontend/element_ready/global", function ($element){
let hdev=$element.find('.hdev-element-wrap');
let next_el=hdev.next();
if(hdev.hasClass('has-animate-text')){
next_el.attr('data-dsn-animate', 'section');
}
reloadElement(true, $element);
});
}});
}
function mouseCirMove($off){
const $element=$("#dsn_cursor"),
inner=$("#dsn_cursor_inner");
if(!$element.length||dsnGrid.isMobile()||!$body.hasClass("dsn-cursor-effect")) return;
const mouseStop='dsn-stop-cursor';
if(!$off){
dsnGrid.mouseMove($element, {
speed: dsnParam.cursor.speed,
mouseStop,
inner: {
el: inner,
speed: dsnParam.cursor.speedInner
}});
}
const defaultEl=$element.css(['opacity', 'width', 'height', 'borderColor', 'background']),
{
stop,
run
}={
stop: ()=> $body.addClass(mouseStop),
run: ()=> $body.removeClass(mouseStop)
};
dsnGrid.mouseHover("a:not(> img):not(.vid) , .dsn-button-sidebar,  button , .button-load-more , [data-cursor=\"open\"]", {
enter: ()=> gsap.to($element, 0.5, {
width: 70,
height: 70,
opacity: 0.5,
backgroundColor: defaultEl.borderColor
}),
leave: ()=> gsap.to($element, 0.5, { ...defaultEl
})
});
dsnGrid.mouseHover(".c-hidden , .social-side a , .next-arrow , .prev-arrow , .dsn-btn.vid", {
enter(){
stop();
const {
x,
y,
width,
height
}=this.getBoundingClientRect();
gsap.to($element, 0.5, {
width,
height,
opacity: 0,
x,
y,
xPercent: 0,
yPercent: 0
});
gsap.to(inner, 0.1, {
opacity: 0
});
},
leave(){
run();
gsap.to($element, 0.5, { ...defaultEl,
xPercent: -50,
yPercent: -50
});
gsap.to(inner, 0.1, {
opacity: 1
});
}});
}
changeStyle();
function changeStyle(){
const options=$('#dsn_box_options');
options.on('click', function (){
const isDark=$body.hasClass('v-dark'),
_dark=$('.v-dark'),
_light=$('.v-light');
$body.toggleClass('v-dark');
_dark.removeClass('v-dark').addClass('v-light');
_light.addClass('v-dark').removeClass('v-light');
$.ajax({
url: dsnParam.ajaxStyle,
type: "post",
data: {
color: isDark ? 'v-light':'v-dark',
style: "off"
}});
});
}
function list_project($el=$(document)){
function changeState(_active, _remove, $product){
if(_active.hasClass('active')) return false;
_active.addClass('active');
_remove.removeClass('active');
$product.fadeOut(300, function (){
jQuery(this).toggleClass("list").fadeIn(300);
});
return false;
}
$el.find('.woocommerce').each(($index, $item)=> {
const $grid=$($item).find('.dsn_grid');
const $list=$($item).find('.dsn_list');
if(!$grid.length) return;
const $product=$($item).find('ul.dsn-shop');
$grid.on('click', function (){
return changeState($grid, $list, $product);
});
$list.on('click', function (){
return changeState($list, $grid, $product);
});
dsnGrid.killAjax(()=> {
$grid.off('click');
$list.off('click');
});
});
}
function inputNumber($el=$(document)){
$el.find('.quantity').each(function (){
const $this=$(this),
input=$this.find('input[type="number"]'),
btnUp=$this.find('.quantity-up'),
btnDown=$this.find('.quantity-down'),
min=input.attr('min')||1,
max=input.attr('max')||Number.MAX_VALUE;
btnUp.off('click');
btnUp.on('click', ChangeValue.bind(this, true));
btnDown.off('click');
btnDown.on('click', ChangeValue.bind(this, false));
function ChangeValue(_is_plus){
const oldValue=parseFloat(input.val());
let newVal=0;
if(_is_plus){
if(oldValue >=max){
newVal=oldValue;
}else{
newVal=oldValue + 1;
}}else{
if(oldValue <=min){
newVal=oldValue;
}else{
newVal=oldValue - 1;
}}
input.val(newVal);
input.trigger("change");
}});
}})(jQuery);
function sidebarOptions(){
document.body.classList.toggle('dsn-show-sidebar');
};