X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ddb7f33868ea499ab8f48a7062f145e8c0fbe02f..HEAD:/resources/js/components/page-picker.js diff --git a/resources/js/components/page-picker.js b/resources/js/components/page-picker.js index 577e9f6db..5ab511595 100644 --- a/resources/js/components/page-picker.js +++ b/resources/js/components/page-picker.js @@ -1,14 +1,20 @@ +import {Component} from './component'; -class PagePicker { +function toggleElem(elem, show) { + elem.toggleAttribute('hidden', !show); +} + +export class PagePicker extends Component { + + setup() { + this.input = this.$refs.input; + this.resetButton = this.$refs.resetButton; + this.selectButton = this.$refs.selectButton; + this.display = this.$refs.display; + this.defaultDisplay = this.$refs.defaultDisplay; + this.buttonSep = this.$refs.buttonSeperator; - 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.selectorEndpoint = this.$opts.selectorEndpoint; this.value = this.input.value; this.setupListeners(); @@ -17,15 +23,23 @@ class PagePicker { setupListeners() { this.selectButton.addEventListener('click', this.showPopup.bind(this)); this.display.parentElement.addEventListener('click', this.showPopup.bind(this)); + this.display.addEventListener('click', e => e.stopPropagation()); - this.resetButton.addEventListener('click', event => { + this.resetButton.addEventListener('click', () => { this.setValue('', ''); }); } showPopup() { - window.EntitySelectorPopup.show(entity => { + /** @type {EntitySelectorPopup} * */ + const selectorPopup = window.$components.first('entity-selector-popup'); + selectorPopup.show(entity => { this.setValue(entity.id, entity.name); + }, { + initialValue: '', + searchEndpoint: this.selectorEndpoint, + entityTypes: 'page', + entityPermission: 'view', }); } @@ -36,13 +50,13 @@ class PagePicker { } controlView(name) { - let hasValue = this.value && this.value !== 0; + const 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(); + const id = this.getAssetIdFromVal(); this.display.textContent = `#${id}, ${name}`; this.display.href = window.baseUrl(`/link/${id}`); } @@ -53,10 +67,3 @@ class PagePicker { } } - -function toggleElem(elem, show) { - let display = (elem.tagName === 'BUTTON' || elem.tagName === 'SPAN') ? 'inline-block' : 'block'; - elem.style.display = show ? display : 'none'; -} - -export default PagePicker; \ No newline at end of file