mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 12:41:18 -07:00 
			
		
		
		
	Change-Id: I066c0e7f8ce87ec00b1141a1b44430444a819b42 (cherry picked from commit 05907a1a42da82737090d55046974d401f8af057)
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
<script>
 | 
						|
  import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte';
 | 
						|
  import { uniqueClasses } from './utils.js';
 | 
						|
 | 
						|
  export let zoom = undefined;
 | 
						|
  export let virtualIndex = undefined;
 | 
						|
 | 
						|
  let className = undefined;
 | 
						|
  export { className as class };
 | 
						|
 | 
						|
  let slideEl = null;
 | 
						|
  let slideClasses = 'swiper-slide';
 | 
						|
 | 
						|
  let swiper = null;
 | 
						|
  let eventAttached = false;
 | 
						|
 | 
						|
  const updateClasses = (_, el, classNames) => {
 | 
						|
    if (el === slideEl) {
 | 
						|
      slideClasses = classNames;
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  const attachEvent = () => {
 | 
						|
    if (!swiper || eventAttached) return;
 | 
						|
    swiper.on('_slideClass', updateClasses);
 | 
						|
    eventAttached = true;
 | 
						|
  };
 | 
						|
 | 
						|
  const detachEvent = () => {
 | 
						|
    if (!swiper) return;
 | 
						|
    swiper.off('_slideClass', updateClasses);
 | 
						|
    eventAttached = false;
 | 
						|
  };
 | 
						|
 | 
						|
  $: slideData = {
 | 
						|
    isActive:
 | 
						|
      slideClasses.indexOf('swiper-slide-active') >= 0 ||
 | 
						|
      slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,
 | 
						|
    isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,
 | 
						|
    isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,
 | 
						|
    isPrev:
 | 
						|
      slideClasses.indexOf('swiper-slide-prev') >= 0 ||
 | 
						|
      slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,
 | 
						|
    isNext:
 | 
						|
      slideClasses.indexOf('swiper-slide-next') >= 0 ||
 | 
						|
      slideClasses.indexOf('swiper-slide-duplicate-next') >= 0,
 | 
						|
  };
 | 
						|
 | 
						|
  onMount(() => {
 | 
						|
    if (typeof virtualIndex === 'undefined') return;
 | 
						|
    slideEl.onSwiper = (_swiper) => {
 | 
						|
      swiper = _swiper;
 | 
						|
      attachEvent();
 | 
						|
    };
 | 
						|
    attachEvent();
 | 
						|
  });
 | 
						|
 | 
						|
  afterUpdate(() => {
 | 
						|
    if (!slideEl || !swiper) return;
 | 
						|
    if (swiper.destroyed) {
 | 
						|
      if (slideClasses !== 'swiper-slide') {
 | 
						|
        slideClasses = 'swiper-slide';
 | 
						|
      }
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    attachEvent();
 | 
						|
  });
 | 
						|
 | 
						|
  beforeUpdate(() => {
 | 
						|
    attachEvent();
 | 
						|
  });
 | 
						|
 | 
						|
  onDestroy(() => {
 | 
						|
    if (!swiper) return;
 | 
						|
    detachEvent();
 | 
						|
  });
 | 
						|
</script>
 | 
						|
 | 
						|
<div
 | 
						|
  bind:this={slideEl}
 | 
						|
  class={uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`)}
 | 
						|
  data-swiper-slide-index={virtualIndex}
 | 
						|
  {...$$restProps}
 | 
						|
>
 | 
						|
  {#if zoom}
 | 
						|
    <div
 | 
						|
      class="swiper-zoom-container"
 | 
						|
      data-swiper-zoom={typeof zoom === 'number' ? zoom : undefined}
 | 
						|
    >
 | 
						|
      <slot data={slideData} />
 | 
						|
    </div>
 | 
						|
  {:else}
 | 
						|
    <slot data={slideData} />
 | 
						|
  {/if}
 | 
						|
</div>
 |