UNPKG

json-object-editor

Version:

JOE the Json Object Editor | Platform Edition

84 lines (79 loc) 2.97 kB
class JoeButton extends HTMLElement { constructor() { super(); } static get observedAttributes() { return []; } connectedCallback() { this.schema = this.getAttribute('schema'); this.classList.add('joe-button') this.initialHTML = this.innerHTML.trim(); //var initialText = this.innerText.trim(); // this.newText = this.innerText.trim() && `<jb-text>${this.innerText.trim()}</jb-text>` ||''; this.render(); } render() { var atts = _joe.Components.getAttributes(this); var classesToAdd = []; var icon; var newHTML = ''; if(atts.schema){ this.schema = atts.schema; icon = _joe.schemas[this.schema] && _joe.schemas[this.schema].menuicon; icon && classesToAdd.push(`joe-svg-button`); } atts.color && classesToAdd.push(`joe-${atts.color}-button`); atts.icon && classesToAdd.push('joe-iconed-button',`joe-${atts.icon}-button`); this.overwrites = {}; if(atts.overwrites){ this.overwrites = eval('('+atts.overwrites+')'); } var actionPreset = false; if(atts.action){ var actString = ''; switch(atts.action){ case 'create': case 'new': var actKey = "create" //this.classList.add(`joe-${atts.action}-button`) classesToAdd.push(`joe-${actKey}-button`); var ovs = Object.keys(this.overwrites).length? ',overwrites:{'+Object.keys(this.overwrites).map(k=>{ return `'${k}':'${this.overwrites[k]}'`; }).join(',')+'}':''; if(atts.schema){ actString = `_joe.Object.${actKey}({schema:'${atts.schema}'${ovs}})`; newHTML = `new <b>${atts.schema.toUpperCase()}</b>`; classesToAdd.push('joe-iconed-button',`joe-plus-button`); } actionPreset = true; break; case 'preview': case 'view': let prefix= atts.prefix ||''; actString = `_joe.gotoFieldURL(this,'${prefix}');`; //actString="_joe.gotoFieldURL(this,\''+prefix+'\');" newHTML = `<jb-text>${atts.action} <b>${atts.schema.toUpperCase()}</b></jb-text>`; classesToAdd.push('joe-iconed-button',`joe-view-button`); actionPreset = true; break; default: actString = atts.action; break; } !this.hasClass('joe-field') && this.setAttribute('onclick',actString); } var guts = actionPreset?(newHTML|| this.initialHTML):(this.initialHTML || newHTML); this.innerHTML = (icon||'')+guts; /*this.innerText = '<button-text>'+this.innerText+'</button-text>';*/ this.classList.add(...classesToAdd); } attributeChangedCallback(attr, oldValue, newValue) { this.render(); } disconnectedCallback() {} } // window.addEventListener('load', function(){ window.customElements.define("joe-button", JoeButton); // })