forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			43 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {UIElement} from "../UIElement"; | ||
|  | import {UIEventSource} from "../UIEventSource"; | ||
|  | 
 | ||
|  | 
 | ||
|  | export class CollapseButton extends UIElement { | ||
|  |     public isCollapsed = new UIEventSource(false); | ||
|  | 
 | ||
|  |     constructor(idToCollapse: string) { | ||
|  |         super(undefined); | ||
|  |         this.ListenTo(this.isCollapsed); | ||
|  |         this.isCollapsed.addCallback((collapse) => { | ||
|  |             const el = document.getElementById(idToCollapse); | ||
|  |             if (el === undefined || el === null) { | ||
|  |                 console.log("Element not found") | ||
|  |                 return; | ||
|  |             } | ||
|  |             if (collapse) { | ||
|  |                 el.style.height = "3.5em"; | ||
|  |                 el.style.width = "15em"; | ||
|  |             } else { | ||
|  |                 el.style.height = "auto"; | ||
|  |                 el.style.width = "auto"; | ||
|  |             } | ||
|  |         }); | ||
|  | 
 | ||
|  |         const self = this; | ||
|  |         this.onClick(() => { | ||
|  |             self.isCollapsed.setData(!self.isCollapsed.data); | ||
|  |         }) | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     protected InnerRender(): string { | ||
|  |         const up = './assets/arrow-up.svg'; | ||
|  |         const down = './assets/arrow-down.svg'; | ||
|  |         let arrow = up; | ||
|  |         if (this.isCollapsed.data) { | ||
|  |             arrow = down; | ||
|  |         } | ||
|  |         return `<img class='collapse-button' src='${arrow}' alt='collapse'>`; | ||
|  |     } | ||
|  | 
 | ||
|  | } |