PageSourceSearch

https://www.lasipiha.fi/minify/?t=system/fluid2&f=scripts/plugins/…ions-splitter.js,scripts/product.js&v=2.0.4

js lasipiha.fi collected 2026-09-27 00:51:03 UTC 14,895 bytes, 34 lines download raw bytes

1;(function($){'use strict';const QuantityDiscounts={discountsList:'.ProductQuantityDiscounts',init:function(config){$.extend(true,this,config);this.$quantityDiscounts=$(this.discountsList);this.manipulateLists();},manipulateLists:function(){this.$quantityDiscounts.each(function(){const $this=$(this);const price=$this.data('product-list-price')*1;const prefix=$this.data('prefix');const suffix=$this.data('suffix');$('dt',$this).each(function(){const $this=$(this);const $next=$(this).next('dd');const discountPrice=parseFloat($next.text().replace(/\s/g,'').replace(',','.'));const discountPercentage=Math.round(100-(discountPrice/price)*100);if(price<=discountPrice){$this.hide().next().hide();return;}
2if(discountPercentage<1){return;}
3$this.prepend(prefix+' ');$next.append(' '+suffix);$('<span>').html('-'+discountPercentage+'%').addClass('QuantityDiscountPercentage').appendTo($next);});$this.addClass('Visible');});}};$.extend(true,window,{MCF:{QuantityDiscounts:QuantityDiscounts}});})(jQuery);;;(function($){'use strict';let prevArrow=`
4		<button class="ActionButton ActionButtonPrev" data-images-action="prev">
5			<span>{PREV}</span>
6		</button>`;let nextArrow=`
7		<button class="ActionButton ActionButtonNext" data-images-action="next">
8			<span>{NEXT}</span>
9		</button>`;const ProductImages={images:'[data-images]',thumbnails:'[data-images-thumbnails]',caption:'[data-image-caption]',wrapAround:true,activeClass:'ActiveImage',txtButtonPrev:'Edellinen',txtButtonNext:'Seuraava',fancybox:true,fancyboxSettings:{groupAll:true,groupAttr:'.ProductImage',on:{"Carousel.ready Carousel.change":(fancybox)=>{const slide=fancybox.getSlide();MCF.ProductImages.jumpToIndex(slide.index);}}},init:function(config){$.extend(true,this,config);this.bindEvents();this.createButtons();this.createCaptions();if(this.fancybox==true){this.initFancybox();}},bindEvents:function(){$(document).on('click','[data-images-action]',$.proxy(this.onAction,this));$(document).on('click','.ProductThumbnail',$.proxy(this.onThumbnailClick,this));window.addEventListener('resize',()=>{const $activeImage=$(this.images).find('.'+this.activeClass);this.change($activeImage);});const slideObserver=new IntersectionObserver((entries,observer)=>{entries.forEach(entry=>{if(entry.isIntersecting){const $slide=$(entry.target);$slide.addClass(this.activeClass).removeAttr('aria-hidden').siblings().removeClass(this.activeClass).attr('aria-hidden','true');if($slide.parent().data('pending-index')===$slide.index()){$slide.parent().removeData('pending-index');}
10this.refresh($slide.closest(this.images));this.changeCaption();}});},{threshold:.1});$(this.images).each(function(){$(this).find('.ProductMainImageContainer').children().each(function(){slideObserver.observe(this);});});},initFancybox:function(){$(this.images).each($.proxy(function(i,elem){$(elem).addClass('ProductImages-'+i);Fancybox.bind('.ProductImages-'+i+' .ProductImage',this.fancyboxSettings);},this));},createButtons:function(){$(this.images).each(function(){const $mainImage=$(this);const $imagesContainer=$mainImage.find('.ProductImage').parent();const $images=$imagesContainer.children();if($images.length<2){return false;}
11const prev=$mainImage.data('images-text-prev')||this.txtButtonPrev;const next=$mainImage.data('images-text-next')||this.txtButtonNext;prevArrow=prevArrow.replace('{PREV}',prev);nextArrow=nextArrow.replace('{NEXT}',next);const $arrows=$('<div class="ProductMainActions"></div>').appendTo($mainImage).append(prevArrow).append(nextArrow);});},createCaptions:function(){$(this.images).find('[data-caption]').each(function(){const title=$(this).closest('[data-images-product-name]').data('images-product-name');const caption=$(this).data('caption');if(caption==title){$(this).removeAttr('data-caption');}});},onAction:function(evt){const $target=$(evt.currentTarget);const $images=$target.closest(this.images).find('.ProductImage').parent();const $slides=$images.children();const action=$target.data('images-action')||undefined;if(action!='next'&&action!='prev'){return false;}
12const pendingIndex=$images.data('pending-index');const currentIndex=pendingIndex!=null?pendingIndex:$slides.index($images.find('.'+this.activeClass));let targetIndex=currentIndex+(action=='next'?1:-1);if(targetIndex>=$slides.length){if(this.wrapAround!=true){return false;}
13targetIndex=0;}
14if(targetIndex<0){if(this.wrapAround!=true){return false;}
15targetIndex=$slides.length-1;}
16$images.data('pending-index',targetIndex);this.change($slides.eq(targetIndex),'smooth');},onThumbnailClick:function(evt){evt.preventDefault();const $target=$(evt.currentTarget);const $images=$target.closest(this.thumbnails).prev();const $changeTo=$images.find('.ProductImage[href="'+$target.attr('href')+'"]');$changeTo.parent().removeData('pending-index');this.change($changeTo,'auto');},changeCaption:function(text){const captionSelector=this.caption;$(this.images).each(function(i){const $images=$(this);const $caption=$images.find(captionSelector);if($caption.length){const currentCaption=$images.find('.ActiveImage').data('caption');if(text){$caption.text(text);return false;}
17$caption.text(currentCaption);}});},change:function($changeTo,behavior){behavior=behavior||'auto';const isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(isSafari){behavior='auto';}
18const $images=$changeTo.parent();if(!$changeTo.length){return false;}
19const position=$changeTo[0].offsetLeft;$images[0].scrollTo({left:position,behavior:behavior});},jumpToIndex:function(index,$instance){const $images=$instance||$(this.images);const $targetImg=$images.find('.ProductImage').eq(index);$targetImg.parent().removeData('pending-index');this.change($targetImg);},refresh:function($mainImage){this.refreshThumbs($mainImage);if(this.wrapAround==true){return false;}
20this.refreshButtons($mainImage);},refreshButtons:function($mainImage){const $activeImage=$mainImage.find('.'+this.activeClass);const $prevArrow=$('[data-images-action="prev"]',$mainImage).prop('disabled',true);const $nextArrow=$('[data-images-action="next"]',$mainImage).prop('disabled',true);if($activeImage.next().length){$nextArrow.prop('disabled',false);}
21if($activeImage.prev().length){$prevArrow.prop('disabled',false);}},refreshThumbs:function($mainImage){const $activeImage=$mainImage.find('.'+this.activeClass);const $thumbs=$mainImage.next(this.thumbnails);
21const $activeThumb=$thumbs.find('.ProductThumbnail[href="'+$activeImage.attr('href')+'"]');if($activeThumb.length){$activeThumb.parent().addClass('ActiveThumb').siblings().removeClass('ActiveThumb');}}};$.extend(true,window,{MCF:{ProductImages:ProductImages}});})(jQuery);;;(function($){'use strict';var Variations={selectedClass:'SelectedCheck',variations:'.BuyFormVariationRadio',afterRadioItemClick:function(){},init:function(config){$.extend(true,this,config);this.bindEvents();this.wrapRadioChecks();},bindEvents:function(){$(document).on('click','.RadioCheck',$.proxy(this.onRadioItemClick,this));},wrapRadioChecks:function(){var $variations=$(this.variations);var selectedClass=this.selectedClass;$variations.find('.Checks').addClass('CustomRadioChecks');$variations.each(function(){var $label=$(this).find('.Checks > label');$label.each(function(){var $input=$(this).children('input');var $checkItem=$(this).next('p').addBack().wrapAll('<div class="RadioCheck"/>').parent();var disabled=$input.is(':disabled');var checked=$input.is(':checked');if(checked){$checkItem.addClass(selectedClass);}
22if(disabled){$checkItem.addClass('DisabledCheck');}});});},onRadioItemClick:function(evt){var $checkItem=$(evt.currentTarget);var selectedClass=this.selectedClass;var disabled=$checkItem.find('input').is(':disabled');if(disabled){return false;}
23$checkItem.addClass(selectedClass).siblings().removeClass(selectedClass);this.afterRadioItemClick(evt);}};$.extend(true,window,{MCF:{Variations:Variations}});})(jQuery);;;(function($){'use strict';var VariationImages={formSelector:'.BuyFormVariationSelect, .BuyFormVariationRadio',thumbnails:'[data-images-thumbnails]',init:function(config){$.extend(true,this,config);this.$form=$(this.formSelector);this.bindEvents();},bindEvents:function(){this.$form.on('change',$.proxy(this.onVariationChange,this));},onVariationChange:function(evt){var $target=$(evt.currentTarget);var isRadio=$target.closest('.FormItem').is('.BuyFormVariationRadio');var val='';if(isRadio==true){val=$(':checked',$target).val();}else{val=$(':selected',$target).val();}
24this.getImageUrl(val,$target);},getImageUrl:function(id,$target){var $variation=$('[data-variation-images]').find('[data-variation-id="'+id+'"]');var imgUrl=$variation.data('variation-image').split('/')[3];this.findThumb(imgUrl,$target);},findThumb:function(imgUrl,$target){var $product=$target.closest('.Product');var $thumb=$(this.thumbnails).find('[src$="/'+imgUrl+'"]').closest('.ProductThumbnail');if($product.length){$thumb=$(this.thumbnails,$product).find('[src$="/'+imgUrl+'"]').closest('.ProductThumbnail');}
25this.selectThumb($thumb);},selectThumb:function($thumb){var index=$thumb.closest('li').index();MCF.ProductImages.jumpToIndex(index,$thumb.closest('.ProductImages'));}};$.extend(true,window,{MCF:{VariationImages:VariationImages}});})(jQuery);;(function($){'use strict';var PRICE_REGEX=/,\W([\d\Wa-z]+)$/;var uniqId=1;var VariationsSplitter={match:function(){},selectText:'Choose',_attributes:{},init:function(config){$.extend(this,config);this.run($('.BuyForm:not(:has(.HiddenInput[name*="[bundle_id]"]))'));},run:function($forms){var self=this;$forms.each(function(index,form){var $form=$(form);if($form.data('variations')){return;}
26var formData=self.parse($form);if(!formData){return;}
27var $original=$form.find('[class*=BuyFormVariation]');$original.hide().after(self.render(formData));$form.data('variations',true);});},render:function(formData,state){state=state||[];var self=this;var $items=$('<div class="FormItem Variations" />');formData.selections.forEach(function(selection,index){var $item=$('<div class="FormItem" />');var $select=$('<select />');var statePath=state.slice(0,index);var visibleOptions=selection.options.filter(function(option){var optionPath=option.path.slice(0,index);return optionPath.join('.')===statePath.join('.');});if(!visibleOptions.length){return;}
28$('<label />').text(selection.attribute).attr('for',selection.id).appendTo($item);$select.attr('id',selection.id).data('index',index).appendTo($item);$('<option />').text(self.selectText).val('').appendTo($select);visibleOptions.forEach(function(option){var price=option.price?', '+option.price:null;$('<option />').text([option.value,price].join('')).val(option.value).appendTo($select);});$select.val(state[index]);$item.appendTo($items);return $items;});$items.on('change','select',function(evt){var nextState=$items.find('select').toArray().slice(0,$(evt.target).data('index')+1).map(function(select){return $(select).val();}).filter(function(value){return!!value;});$items.replaceWith(self.render(formData,nextState));});var firstMatch=formData.variations.find(function(variation){if(state.length>0){return variation.path.join('.').startsWith(state.join('.'));}});var selected=formData.variations.find(function(variation){return variation.path.join('.')===state.join('.');});formData.submitButton.prop('disabled',!selected);formData.variations.forEach(function(variation){variation.input.prop('checked',fal
28se);});if(selected){selected.input.prop('checked',true);}
29if(selected&&selected.availability){$('<div class="FormItem" />').text(selected.availability).appendTo($items);}
30this.match(firstMatch,selected);return $items;},parse:function($form){var $variations=$form.find('[class*=BuyFormVariation] label:contains("|")');if(!$variations.length){return null;}
31var variations=this.parseVariations($variations);var selections=this.variationsToSelections(variations);var $submitButton=$form.find('.AddToCart');return{variations:variations,selections:selections,submitButton:$submitButton};},parseVariations:function($variations){var self=this;return $variations.toArray().map(function(variation){return self.parseVariation($(variation));});},parseVariation:function($variation){var variation={input:this.parseVariationInput($variation),price:this.parseVariationPrice($variation),attributes:this.parseVariationAttributes($variation),availability:this.parseVariationAvailability($variation)};variation.path=variation.attributes.map(function(attribute){return attribute.value;});return variation;},parseVariationInput:function($variation){return $variation.find('> input');},parseVariationPrice:function($variation){var match=$.trim($variation.text()).match(PRICE_REGEX);return match?match[1]:undefined;},parseVariationAttributes:function($variation){var self=this;return $.trim($variation.text().replace(PRICE_REGEX,'')).split('|').map(function(descriptor){var parts=descriptor.split(':');var name=$.trim(parts[0]);var value=$.trim(parts[1]);var attribute=name.toLocaleLowerCase();self._attributes[attribute]=self._attributes[attribute]||name;return{name:self._attributes[attribute],value:value};});},parseVariationAvailability:function($variation){var $availability=$variation.next('.FormHelp');return $availability.length?$.trim($availability.text()):undefined;},variationsToSelections:function(variations){return variations.reduce(function(selections,variation){variation.attributes.forEach(function(attribute,index){var selection=selections.find(function(other){return other.attribute===attribute.name;});if(!selection){var id='variations-'+uniqId++;selection={id:id,attribute:attribute.name,options:[]};selections.push(selection);}
32var path=variation.attributes.slice(0,index).map(function(part){return part.value;});var option=selection.options.find(function(other){return(other.value===attribute.value&&other.path.join('.')===path.join('.'));});if(!option){option={value:attribute.value,path:path};selection.options.push(option);}
33if(index===variation.attributes.length-1){option.price=variation.price;}});return selections;},[]);}};$.extend(true,window,{MCF:{VariationsSplitter:VariationsSplitter}});})(jQuery);;$(document).ready(function(){'use strict';$.each(['QuantityDiscounts','Variations','VariationImages'],function(index,name){var plugin=MCF[name];if(plugin){plugin.init();}});MCF.ProductImages.init({images:'[data-images]',thumbnails:'[data-images-thumbnails]',wrapAround:true,fancybox:true,fancyboxSettings:{l10n:MCF.Modals.fancyboxDefaults.l10n,Thumbs:{type:"classic",},Toolbar:{display:{left:[],middle:["zoomIn","zoomOut",],right:["close"],},}}});MCF.VariationsSplitter.init({selectText:MCF.dictionary.Choose,match:function(firstMatch,selected){selected=selected||firstMatch;if(selected){MCF.VariationImages.getImageUrl(selected.input.val(),selected.input);}}});function addAnchorLinkIds(){$('#ProductReviews .ReviewsPagination a').each(function(){$(this).attr('href',$(this).attr('href')+'#ProductReviews');});}
34addAnchorLinkIds();});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.