/home/preegmxb/byeaglytics-co.com/media/system/js/fields/joomla-field-user.js
((customElements, Joomla) => {
class JoomlaFieldUser extends HTMLElement {
constructor() {
super();
this.onUserSelect = '';
this.onchangeStr = ''; // Bind events
this.buttonClick = this.buttonClick.bind(this);
this.iframeLoad = this.iframeLoad.bind(this);
this.modalClose = this.modalClose.bind(this);
this.setValue = this.setValue.bind(this);
}
static get observedAttributes() {
return ['url', 'modal', 'modal-width', 'modal-height', 'input', 'input-name', 'button-select'];
}
get url() {
return this.getAttribute('url');
}
set url(value) {
this.setAttribute('url', value);
}
get modalClass() {
return this.getAttribute('modal');
}
set modalClass(value) {
this.setAttribute('modal', value);
}
get modalWidth() {
return this.getAttribute('modal-width');
}
set modalWidth(value) {
this.setAttribute('modal-width', value);
}
get modalHeight() {
return this.getAttribute('modal-height');
}
set modalHeight(value) {
this.setAttribute('modal-height', value);
}
get inputId() {
return this.getAttribute('input');
}
set inputId(value) {
this.setAttribute('input', value);
}
get inputNameClass() {
return this.getAttribute('input-name');
}
set inputNameClass(value) {
this.setAttribute('input-name', value);
}
get buttonSelectClass() {
return this.getAttribute('button-select');
}
set buttonSelectClass(value) {
this.setAttribute('button-select', value);
}
connectedCallback() {
// Set up elements
this.modal = this.querySelector(this.modalClass);
this.modalBody = this.querySelector('.modal-body');
this.input = this.querySelector(this.inputId);
this.inputName = this.querySelector(this.inputNameClass);
this.buttonSelect = this.querySelector(this.buttonSelectClass); // Bootstrap modal init
if (this.modal && window.bootstrap && window.bootstrap.Modal && !window.bootstrap.Modal.getInstance(this.modal)) {
Joomla.initialiseModal(this.modal, {
isJoomla: true
});
}
if (this.buttonSelect) {
this.buttonSelect.addEventListener('click', this.modalOpen.bind(this));
this.modal.addEventListener('hide', this.removeIframe.bind(this)); // Check for onchange callback,
this.onchangeStr = this.input.getAttribute('data-onchange');
if (this.onchangeStr) {
/* eslint-disable */
this.onUserSelect = new Function(this.onchangeStr);
this.input.addEventListener('change', this.onUserSelect);
/* eslint-enable */
}
}
}
disconnectedCallback() {
if (this.onchangeStr && this.input) {
this.input.removeEventListener('change', this.onUserSelect);
}
if (this.buttonSelect) {
this.buttonSelect.removeEventListener('click', this);
}
if (this.modal) {
this.modal.removeEventListener('hide', this);
}
}
buttonClick({
target
}) {
this.setValue(target.getAttribute('data-user-value'), target.getAttribute('data-user-name'));
this.modalClose();
}
iframeLoad() {
const iframeDoc = this.iframeEl.contentWindow.document;
const buttons = [].slice.call(iframeDoc.querySelectorAll('.button-select'));
buttons.forEach(button => {
button.addEventListener('click', this.buttonClick);
});
} // Opens the modal
modalOpen() {
// Reconstruct the iframe
this.removeIframe();
const iframe = document.createElement('iframe');
iframe.setAttribute('name', 'field-user-modal');
iframe.src = this.url.replace('{field-user-id}', this.input.getAttribute('id'));
iframe.setAttribute('width', this.modalWidth);
iframe.setAttribute('height', this.modalHeight);
this.modalBody.appendChild(iframe);
this.modal.open();
this.iframeEl = this.modalBody.querySelector('iframe'); // handle the selection on the iframe
this.iframeEl.addEventListener('load', this.iframeLoad);
} // Closes the modal
modalClose() {
Joomla.Modal.getCurrent().close();
this.modalBody.innerHTML = '';
} // Remove the iframe
removeIframe() {
this.modalBody.innerHTML = '';
} // Sets the value
setValue(value, name) {
this.input.setAttribute('value', value);
this.inputName.setAttribute('value', name || value); // trigger change event both on the input and on the custom element
this.input.dispatchEvent(new Event('change'));
this.dispatchEvent(new CustomEvent('change', {
detail: {
value,
name
},
bubbles: true
}));
}
}
customElements.define('joomla-field-user', JoomlaFieldUser);
})(customElements, Joomla);