Merge layer_view extension (#995)
* Add tested version of layer_view extension * Fix linting errors * Modify button style to SVG-Edit colour palette
This commit is contained in:
@@ -104,6 +104,7 @@ export default class ConfigObj {
|
|||||||
* @property {boolean} [showGrid=false] Set by `ext-grid.js`; determines whether or not to show the grid by default
|
* @property {boolean} [showGrid=false] Set by `ext-grid.js`; determines whether or not to show the grid by default
|
||||||
* @property {boolean} [show_outside_canvas=true] Defines whether or not elements outside the canvas should be visible. Set and used in `svgcanvas.js`.
|
* @property {boolean} [show_outside_canvas=true] Defines whether or not elements outside the canvas should be visible. Set and used in `svgcanvas.js`.
|
||||||
* @property {boolean} [selectNew=true] If true, will replace the selection with the current element and automatically select element objects (when not in "path" mode) after they are created, showing their grips (v2.6).
|
* @property {boolean} [selectNew=true] If true, will replace the selection with the current element and automatically select element objects (when not in "path" mode) after they are created, showing their grips (v2.6).
|
||||||
|
* @property {boolean} [layerView=false] Set for 'ext-layer_view.js'; determines whether or not only current layer is shown by default
|
||||||
* Set and used in `svgcanvas.js` (`mouseUp`).
|
* Set and used in `svgcanvas.js` (`mouseUp`).
|
||||||
*/
|
*/
|
||||||
this.defaultConfig = {
|
this.defaultConfig = {
|
||||||
@@ -160,7 +161,8 @@ export default class ConfigObj {
|
|||||||
// EXTENSION (CLIENT VS. SERVER SAVING/OPENING)
|
// EXTENSION (CLIENT VS. SERVER SAVING/OPENING)
|
||||||
avoidClientSide: false, // Deprecated in favor of `avoidClientSideDownload`
|
avoidClientSide: false, // Deprecated in favor of `avoidClientSideDownload`
|
||||||
avoidClientSideDownload: false,
|
avoidClientSideDownload: false,
|
||||||
avoidClientSideOpen: false
|
avoidClientSideOpen: false,
|
||||||
|
layerView: false
|
||||||
}
|
}
|
||||||
|
|
||||||
this.curPrefs = {}
|
this.curPrefs = {}
|
||||||
@@ -184,7 +186,8 @@ export default class ConfigObj {
|
|||||||
'ext-shapes',
|
'ext-shapes',
|
||||||
'ext-polystar',
|
'ext-polystar',
|
||||||
'ext-storage',
|
'ext-storage',
|
||||||
'ext-opensave'
|
'ext-opensave',
|
||||||
|
'ext-layer_view'
|
||||||
]
|
]
|
||||||
this.curConfig = {
|
this.curConfig = {
|
||||||
// We do not put on defaultConfig to simplify object copying
|
// We do not put on defaultConfig to simplify object copying
|
||||||
|
|||||||
85
src/editor/extensions/ext-layer_view/ext-layer_view.js
Normal file
85
src/editor/extensions/ext-layer_view/ext-layer_view.js
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/**
|
||||||
|
* @file ext-layer_view.js
|
||||||
|
*
|
||||||
|
* @license MIT
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
const name = 'layer_view'
|
||||||
|
|
||||||
|
const loadExtensionTranslation = async function (svgEditor) {
|
||||||
|
let translationModule
|
||||||
|
const lang = svgEditor.configObj.pref('lang')
|
||||||
|
try {
|
||||||
|
translationModule = await import(`./locale/${lang}.js`)
|
||||||
|
} catch (_error) {
|
||||||
|
console.warn(`Missing translation (${lang}) for ${name} - using 'en'`)
|
||||||
|
translationModule = await import('./locale/en.js')
|
||||||
|
}
|
||||||
|
svgEditor.i18next.addResourceBundle(lang, name, translationModule.default)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name,
|
||||||
|
async init (_S) {
|
||||||
|
const svgEditor = this
|
||||||
|
const { svgCanvas } = svgEditor
|
||||||
|
const { $id, $click } = svgCanvas
|
||||||
|
await loadExtensionTranslation(svgEditor)
|
||||||
|
|
||||||
|
const clickLayerView = (e) => {
|
||||||
|
$id('tool_layerView').pressed = !$id('tool_layerView').pressed
|
||||||
|
updateLayerView(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateLayerView = (e) => {
|
||||||
|
const drawing = svgCanvas.getCurrentDrawing()
|
||||||
|
const curLayer = drawing.getCurrentLayerName()
|
||||||
|
let layer = drawing.getNumLayers()
|
||||||
|
while (layer--) {
|
||||||
|
const name = drawing.getLayerName(layer)
|
||||||
|
if (name !== curLayer && $id('tool_layerView').pressed) {
|
||||||
|
drawing.setLayerVisibility(name, false)
|
||||||
|
} else {
|
||||||
|
drawing.setLayerVisibility(name, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$id('layerlist').querySelectorAll('tr.layer').forEach(
|
||||||
|
function (el) {
|
||||||
|
const layervis = el.querySelector('td.layervis')
|
||||||
|
const vis = el.classList.contains('layersel') || !$id('tool_layerView').pressed ? 'layervis' : 'layerinvis layervis'
|
||||||
|
layervis.setAttribute('class', vis)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: svgEditor.i18next.t(`${name}:name`),
|
||||||
|
// The callback should be used to load the DOM with the appropriate UI items
|
||||||
|
layersChanged () {
|
||||||
|
if ($id('tool_layerView').pressed) {
|
||||||
|
updateLayerView()
|
||||||
|
} if (svgEditor.configObj.curConfig.layerView) {
|
||||||
|
svgEditor.configObj.curConfig.layerView = false
|
||||||
|
$id('tool_layerView').pressed = true
|
||||||
|
updateLayerView()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
layerVisChanged () {
|
||||||
|
if ($id('tool_layerView').pressed) {
|
||||||
|
$id('tool_layerView').pressed = !$id('tool_layerView').pressed
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback () {
|
||||||
|
const buttonTemplate = document.createElement('template')
|
||||||
|
const title = `${name}:buttons.0.title`
|
||||||
|
const key = `${name}:buttons.0.key`
|
||||||
|
buttonTemplate.innerHTML = `
|
||||||
|
<se-button id="tool_layerView" title="${title}" shortcut="${key}" src="layer_view.svg"></se-button>`
|
||||||
|
$id('editor_panel').append(buttonTemplate.content.cloneNode(true))
|
||||||
|
$click($id('tool_layerView'), clickLayerView.bind(this))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
src/editor/extensions/ext-layer_view/locale/en.js
Normal file
9
src/editor/extensions/ext-layer_view/locale/en.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
name: 'layerview',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
title: 'Enable/Disable Layer View',
|
||||||
|
key: 'Ctrl+Shift+L'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
6
src/editor/images/layer_view.svg
Normal file
6
src/editor/images/layer_view.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Modified from: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M4.97883 9.68508C2.99294 8.89073 2 8.49355 2 8C2 7.50645 2.99294 7.10927 4.97883 6.31492L7.7873 5.19153C9.77318 4.39718 10.7661 4 12 4C13.2339 4 14.2268 4.39718 16.2127 5.19153L19.0212 6.31492C21.0071 7.10927 22 7.50645 22 8C22 8.49355 21.0071 8.89073 19.0212 9.68508L16.2127 10.8085C14.2268 11.6028 13.2339 12 12 12C10.7661 12 9.77318 11.6028 7.7873 10.8085L4.97883 9.68508Z" stroke="#f9ba00" stroke-width="1.5"/>
|
||||||
|
<path d="M22 12C22 12 21.0071 12.8907 19.0212 13.6851L16.2127 14.8085C14.2268 15.6028 13.2339 16 12 16C10.7661 16 9.77318 15.6028 7.7873 14.8085L4.97883 13.6851C2.99294 12.8907 2 12 2 12" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round"/>
|
||||||
|
<path d="M22 16C22 16 21.0071 16.8907 19.0212 17.6851L16.2127 18.8085C14.2268 19.6028 13.2339 20 12 20C10.7661 20 9.77318 19.6028 7.7873 18.8085L4.97883 17.6851C2.99294 16.8907 2 16 2 16" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -285,6 +285,10 @@ class LayersPanel {
|
|||||||
})
|
})
|
||||||
evt.currentTarget.parentNode.classList.add('layersel')
|
evt.currentTarget.parentNode.classList.add('layersel')
|
||||||
self.editor.svgCanvas.setCurrentLayer(evt.currentTarget.textContent)
|
self.editor.svgCanvas.setCurrentLayer(evt.currentTarget.textContent)
|
||||||
|
// run extension when different layer is selected from listener
|
||||||
|
self.editor.svgCanvas.runExtensions(
|
||||||
|
'layersChanged'
|
||||||
|
)
|
||||||
evt.preventDefault()
|
evt.preventDefault()
|
||||||
})
|
})
|
||||||
element.addEventListener('mouseup', (evt) => {
|
element.addEventListener('mouseup', (evt) => {
|
||||||
@@ -302,6 +306,10 @@ class LayersPanel {
|
|||||||
const vis = evt.currentTarget.classList.contains('layerinvis')
|
const vis = evt.currentTarget.classList.contains('layerinvis')
|
||||||
self.editor.svgCanvas.setLayerVisibility(name, vis)
|
self.editor.svgCanvas.setLayerVisibility(name, vis)
|
||||||
evt.currentTarget.classList.toggle('layerinvis')
|
evt.currentTarget.classList.toggle('layerinvis')
|
||||||
|
// run extension if layer visibility is changed from listener
|
||||||
|
self.editor.svgCanvas.runExtensions(
|
||||||
|
'layerVisChanged'
|
||||||
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -313,6 +321,10 @@ class LayersPanel {
|
|||||||
tlayer.innerHTML = '<td style="color:white">_</td><td/>'
|
tlayer.innerHTML = '<td style="color:white">_</td><td/>'
|
||||||
layerlist.append(tlayer)
|
layerlist.append(tlayer)
|
||||||
}
|
}
|
||||||
|
// run extension when layer panel is populated
|
||||||
|
self.editor.svgCanvas.runExtensions(
|
||||||
|
'layersChanged'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user