mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-29 20:23:52 +08:00
2fbed3919b
So that multiple elements on the page can share the same popup, with different search options.
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
import {Component} from './component';
|
|
|
|
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;
|
|
|
|
this.selectorEndpoint = this.$opts.selectorEndpoint;
|
|
|
|
this.value = this.input.value;
|
|
this.setupListeners();
|
|
}
|
|
|
|
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', () => {
|
|
this.setValue('', '');
|
|
});
|
|
}
|
|
|
|
showPopup() {
|
|
/** @type {EntitySelectorPopup} * */
|
|
const selectorPopup = window.$components.first('entity-selector-popup');
|
|
selectorPopup.show(entity => {
|
|
this.setValue(entity.id, entity.name);
|
|
}, '', {
|
|
searchEndpoint: this.selectorEndpoint,
|
|
entityTypes: 'page',
|
|
entityPermission: 'view',
|
|
});
|
|
}
|
|
|
|
setValue(value, name) {
|
|
this.value = value;
|
|
this.input.value = value;
|
|
this.controlView(name);
|
|
}
|
|
|
|
controlView(name) {
|
|
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) {
|
|
const id = this.getAssetIdFromVal();
|
|
this.display.textContent = `#${id}, ${name}`;
|
|
this.display.href = window.baseUrl(`/link/${id}`);
|
|
}
|
|
}
|
|
|
|
getAssetIdFromVal() {
|
|
return Number(this.value);
|
|
}
|
|
|
|
}
|