Cat/modules/elements-view.js

67 lines
2.9 KiB
JavaScript

const {remote} = require('electron');
const {dialog,Menu,MenuItem} = remote;
module.exports = function(Cat) {
return {
init: function(dom) {
let treeView = document.querySelector('#elements-tree');
treeView.addEventListener('click-row', evt => {
if (!evt.detail.targetNode) return;
Cat.focusedProject.view.focusedElement = evt.detail.targetNode;
});
treeView.parentNode.addEventListener('contextmenu', evt => {
var target = evt.target;
if (target.tagName === 'CAT-TREE-CELL') {
target = target.parentNode;
}
const treeMenu = new Menu();
if (target !== null && target !== undefined && target === treeView.selectedRow) {
treeMenu.append(new MenuItem({label: 'Attach Animation', enabled: (Cat.focusedProject ? true : false), click() {
}}));
treeMenu.append(new MenuItem({label: 'Insert Element Before', enabled: (Cat.focusedProject ? true : false), click() {
}}));
treeMenu.append(new MenuItem({label: 'Insert Element Into', enabled: (Cat.focusedProject ? true : false), click() {
}}));
treeMenu.append(new MenuItem({label: 'Insert Element After', enabled: (Cat.focusedProject ? true : false), click() {
}}));
} else {
treeMenu.append(new MenuItem({label: 'Insert Element', enabled: (Cat.focusedProject ? true : false), click() {
}}));
}
if (target.tagName !== 'CAT-TREE-ROW') {
target = treeView.selectedRow;
}
treeMenu.append(new MenuItem({type: 'separator'}));
treeMenu.append(new MenuItem({label: 'Delete', enabled: (target ? true : false), click() {
treeView.removeRow(target);
}}));
treeMenu.popup({async: true});
});
treeView.addEventListener('remove-row', evt => {
console.log(evt.detail.row);
if (evt.detail.row.targetNode && evt.detail.row.targetNode.parentNode) evt.detail.row.targetNode.parentNode.removeChild(evt.detail.row.targetNode);
});
},
on: {
'project-closed': project => {
let elementsTree = document.querySelector('#elements-tree');
elementsTree.clear(false);
},
// Add hook for when an element is selected on the project view, we select the given row in our elements tree
'project-loaded': project => {
project.view.addEventListener('selected-element', evt => {
var el = this.elementsView.getMatchingRow(evt.detail);
if (el) this.elementsView.selectedRow = el;
});
},
// Add hook for when a project is focused, we rebuild the elements tree to correspond to the target DOM
'project-focused': project => {
this.elementsView = document.querySelector('#elements-tree');
this.elementsView.cloneDomToRows(project.getBody(), ["tagName", "class", "id"]);
}
}
}
};