60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | 
 | ||
|  | class PagePicker { | ||
|  | 
 | ||
|  |     constructor(elem) { | ||
|  |         this.elem = elem; | ||
|  |         this.input = elem.querySelector('input'); | ||
|  |         this.resetButton = elem.querySelector('[page-picker-reset]'); | ||
|  |         this.selectButton = elem.querySelector('[page-picker-select]'); | ||
|  |         this.display = elem.querySelector('[page-picker-display]'); | ||
|  |         this.defaultDisplay = elem.querySelector('[page-picker-default]'); | ||
|  |         this.buttonSep = elem.querySelector('span.sep'); | ||
|  | 
 | ||
|  |         this.value = this.input.value; | ||
|  |         this.setupListeners(); | ||
|  |     } | ||
|  | 
 | ||
|  |     setupListeners() { | ||
|  |         // Select click
 | ||
|  |         this.selectButton.addEventListener('click', event => { | ||
|  |             window.EntitySelectorPopup.show(entity => { | ||
|  |                 this.setValue(entity.id, entity.name); | ||
|  |             }); | ||
|  |         }); | ||
|  | 
 | ||
|  |         this.resetButton.addEventListener('click', event => { | ||
|  |             this.setValue('', ''); | ||
|  |         }); | ||
|  |     } | ||
|  | 
 | ||
|  |     setValue(value, name) { | ||
|  |         this.value = value; | ||
|  |         this.input.value = value; | ||
|  |         this.controlView(name); | ||
|  |     } | ||
|  | 
 | ||
|  |     controlView(name) { | ||
|  |         let hasValue = this.value && this.value !== 0; | ||
|  |         toggleElem(this.resetButton, hasValue); | ||
|  |         toggleElem(this.buttonSep, hasValue); | ||
|  |         toggleElem(this.defaultDisplay, !hasValue); | ||
|  |         toggleElem(this.display, hasValue); | ||
|  |         if (hasValue) { | ||
|  |             let id = this.getAssetIdFromVal(); | ||
|  |             this.display.textContent = `#${id}, ${name}`; | ||
|  |             this.display.href = window.baseUrl(`/link/${id}`); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     getAssetIdFromVal() { | ||
|  |         return Number(this.value); | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function toggleElem(elem, show) { | ||
|  |     let display = (elem.tagName === 'BUTTON' || elem.tagName === 'SPAN') ? 'inline-block' : 'block'; | ||
|  |     elem.style.display = show ? display : 'none'; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = PagePicker; |