forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			No EOL
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			No EOL
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {UIEventSource} from "../../Logic/UIEventSource";
 | |
| import {UIElement} from "../UIElement";
 | |
| import Combine from "../Base/Combine";
 | |
| // @ts-ignore
 | |
| import $ from "jquery"
 | |
| 
 | |
| export class SlideShow extends UIElement {
 | |
| 
 | |
|     private readonly _embeddedElements: UIEventSource<UIElement[]>
 | |
| 
 | |
|     constructor(
 | |
|         embeddedElements: UIEventSource<UIElement[]>) {
 | |
|         super(embeddedElements);
 | |
|         this._embeddedElements = embeddedElements;
 | |
|         this._embeddedElements.addCallbackAndRun(elements => {
 | |
|             for (const element of elements ?? []) {
 | |
|                 element.SetClass("slick-carousel-content")
 | |
|             }
 | |
|         })
 | |
| 
 | |
|     }
 | |
| 
 | |
|     InnerRender(): string {
 | |
|         return new Combine(
 | |
|                 this._embeddedElements.data,
 | |
|             ).SetClass("block slick-carousel")
 | |
|             .Render();
 | |
|     }
 | |
| 
 | |
|     Update() {
 | |
|         super.Update();
 | |
|         for (const uiElement of this._embeddedElements.data) {
 | |
|             uiElement.Update();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     protected InnerUpdate(htmlElement: HTMLElement) {
 | |
|         super.InnerUpdate(htmlElement);
 | |
|         require("slick-carousel")
 | |
|         if(this._embeddedElements.data.length == 0){
 | |
|             return;
 | |
|         }
 | |
|         // @ts-ignore
 | |
|         $('.slick-carousel').not('.slick-initialized').slick({
 | |
|             autoplay: true,
 | |
|             arrows: true,
 | |
|             dots: true,
 | |
|             lazyLoad: 'progressive',
 | |
|             variableWidth: true,
 | |
|             centerMode: true,
 | |
|             centerPadding: "60px",
 | |
|             adaptive: true  
 | |
|         });
 | |
|     }
 | |
| 
 | |
| } |