158 lines
4.5 KiB
JavaScript
158 lines
4.5 KiB
JavaScript
/* globals svgEditor */
|
|
import cMenuLayersDialog from './cmenuLayersDialog.html'
|
|
|
|
const template = document.createElement('template')
|
|
template.innerHTML = cMenuLayersDialog
|
|
/**
|
|
* @class SeCMenuLayerDialog
|
|
*/
|
|
export class SeCMenuLayerDialog extends HTMLElement {
|
|
/**
|
|
* @function constructor
|
|
*/
|
|
constructor () {
|
|
super()
|
|
// create the shadowDom and insert the template
|
|
this._shadowRoot = this.attachShadow({ mode: 'open' })
|
|
this._shadowRoot.append(template.content.cloneNode(true))
|
|
this.source = ''
|
|
this._workarea = undefined
|
|
this.$sidePanels = document.getElementById('sidepanels')
|
|
this.$dialog = this._shadowRoot.querySelector('#cmenu_layers')
|
|
this.$duplicateLink = this._shadowRoot.querySelector('#se-dupe')
|
|
this.$deleteLink = this._shadowRoot.querySelector('#se-layer-delete')
|
|
this.$mergeDownLink = this._shadowRoot.querySelector('#se-merge-down')
|
|
this.$mergeAllLink = this._shadowRoot.querySelector('#se-merge-all')
|
|
}
|
|
|
|
/**
|
|
* @function init
|
|
* @param {any} name
|
|
* @returns {void}
|
|
*/
|
|
init (i18next) {
|
|
this.setAttribute('layers-dupe', i18next.t('layers.dupe'))
|
|
this.setAttribute('layers-del', i18next.t('layers.del'))
|
|
this.setAttribute('layers-merge_down', i18next.t('layers.merge_down'))
|
|
this.setAttribute('layers-merge_all', i18next.t('layers.merge_all'))
|
|
}
|
|
|
|
/**
|
|
* @function observedAttributes
|
|
* @returns {any} observed
|
|
*/
|
|
static get observedAttributes () {
|
|
return ['value', 'leftclick', 'layers-dupe', 'layers-del', 'layers-merge_down', 'layers-merge_all']
|
|
}
|
|
|
|
/**
|
|
* @function attributeChangedCallback
|
|
* @param {string} name
|
|
* @param {string} oldValue
|
|
* @param {string} newValue
|
|
* @returns {void}
|
|
*/
|
|
attributeChangedCallback (name, oldValue, newValue) {
|
|
if (oldValue === newValue) return
|
|
switch (name) {
|
|
case 'value':
|
|
this.source = newValue
|
|
if (newValue !== '' && newValue !== undefined) {
|
|
this._workarea = document.getElementById(this.source)
|
|
}
|
|
break
|
|
case 'layers-dupe':
|
|
this.$duplicateLink.textContent = newValue
|
|
break
|
|
case 'layers-del':
|
|
this.$deleteLink.textContent = newValue
|
|
break
|
|
case 'layers-merge_down':
|
|
this.$mergeDownLink.textContent = newValue
|
|
break
|
|
case 'layers-merge_all':
|
|
this.$mergeAllLink.textContent = newValue
|
|
break
|
|
default:
|
|
// super.attributeChangedCallback(name, oldValue, newValue);
|
|
break
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @function get
|
|
* @returns {any}
|
|
*/
|
|
get value () {
|
|
return this.getAttribute('value')
|
|
}
|
|
|
|
/**
|
|
* @function set
|
|
* @returns {void}
|
|
*/
|
|
set value (value) {
|
|
this.setAttribute('value', value)
|
|
}
|
|
|
|
/**
|
|
* @function get
|
|
* @returns {any}
|
|
*/
|
|
get leftclick () {
|
|
return this.getAttribute('leftclick')
|
|
}
|
|
|
|
/**
|
|
* @function set
|
|
* @returns {void}
|
|
*/
|
|
set leftclick (value) {
|
|
this.setAttribute('leftclick', value)
|
|
}
|
|
|
|
/**
|
|
* @function connectedCallback
|
|
* @returns {void}
|
|
*/
|
|
connectedCallback () {
|
|
const current = this
|
|
const onMenuOpenHandler = (e) => {
|
|
e.preventDefault()
|
|
current.$dialog.style.top = e.pageY + 'px'
|
|
current.$dialog.style.left = e.pageX - 126 + 'px'
|
|
current.$dialog.style.display = 'block'
|
|
}
|
|
const onMenuCloseHandler = (e) => {
|
|
if (e.button !== 2) {
|
|
current.$dialog.style.display = 'none'
|
|
}
|
|
}
|
|
const onMenuClickHandler = (e, action, id) => {
|
|
const triggerEvent = new CustomEvent('change', {
|
|
detail: {
|
|
trigger: action,
|
|
source: id
|
|
}
|
|
})
|
|
this.dispatchEvent(triggerEvent)
|
|
current.$dialog.style.display = 'none'
|
|
}
|
|
if (this._workarea !== undefined) {
|
|
this._workarea.addEventListener('contextmenu', onMenuOpenHandler)
|
|
if (this.getAttribute('leftclick') === 'true') {
|
|
svgEditor.$click(this._workarea, onMenuOpenHandler)
|
|
}
|
|
this._workarea.addEventListener('mousedown', onMenuCloseHandler)
|
|
this.$sidePanels.addEventListener('mousedown', onMenuCloseHandler)
|
|
}
|
|
svgEditor.$click(this.$duplicateLink, (evt) => onMenuClickHandler(evt, 'dupe', this.source))
|
|
svgEditor.$click(this.$deleteLink, (evt) => onMenuClickHandler(evt, 'delete', this.source))
|
|
svgEditor.$click(this.$mergeDownLink, (evt) => onMenuClickHandler(evt, 'merge_down', this.source))
|
|
svgEditor.$click(this.$mergeAllLink, (evt) => onMenuClickHandler(evt, 'merge_all', this.source))
|
|
}
|
|
}
|
|
|
|
// Register
|
|
customElements.define('se-cmenu-layers', SeCMenuLayerDialog)
|