From 5f3deeb14466f69f75a514a9abe70c7c24683d95 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 20 Dec 2017 12:40:22 +0100 Subject: [PATCH] trigger click from treeview --- remix-debugger/src/ui/TreeView.js | 44 ++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/remix-debugger/src/ui/TreeView.js b/remix-debugger/src/ui/TreeView.js index d29a461909..44abebc0a7 100644 --- a/remix-debugger/src/ui/TreeView.js +++ b/remix-debugger/src/ui/TreeView.js @@ -25,9 +25,14 @@ var css = csjs` width: 10px; } ` + +var remixLib = require('remix-lib') +var EventManager = remixLib.EventManager + class TreeView { constructor (opts) { + this.event = new EventManager() this.extractData = opts.extractData || this.extractDataDefault this.formatSelf = opts.formatSelf || this.formatSelfDefault this.view = null @@ -51,7 +56,7 @@ class TreeView { renderObject (item, parent, key, expand, keyPath) { var data = this.extractData(item, parent, key) var children = (data.children || []).map((child, index) => { - return this.renderObject(child.value, data, child.key, expand, keyPath + ',' + child.key) + return this.renderObject(child.value, data, child.key, expand, keyPath + '/' + child.key) }) return this.formatData(key, data, children, expand, keyPath) } @@ -64,23 +69,32 @@ class TreeView { } formatData (key, data, children, expand, keyPath) { - var label = yo`
${this.formatSelf(key, data)}
` - var renderedChildren = '' - if (children.length) { - renderedChildren = yo`` + var label = yo`
${this.formatSelf(key, data)}
` + var renderedChildren = null + if (data.isNode || children.length) { + renderedChildren = yo`` renderedChildren.style.display = this.nodeIsExpanded[keyPath] !== undefined ? (this.nodeIsExpanded[keyPath] ? 'block' : 'none') : (expand ? 'block' : 'none') label.firstElementChild.className = renderedChildren.style.display === 'none' ? 'fa fa-caret-right' : 'fa fa-caret-down' - var self = this - label.onclick = function () { - this.firstElementChild.className = this.firstElementChild.className === 'fa fa-caret-right' ? 'fa fa-caret-down' : 'fa fa-caret-right' - var list = this.parentElement.querySelector('ul') - list.style.display = list.style.display === 'none' ? 'block' : 'none' - self.nodeIsExpanded[keyPath] = list.style.display === 'block' + if (children.length) { + var self = this + label.onclick = function () { + this.firstElementChild.className = this.firstElementChild.className === 'fa fa-caret-right' ? 'fa fa-caret-down' : 'fa fa-caret-right' + var list = this.parentElement.querySelector('ul') + list.style.display = list.style.display === 'none' ? 'block' : 'none' + self.nodeIsExpanded[keyPath] = list.style.display === 'block' + } + } else { + label.onclick = () => { + this.event.trigger('nodeClick', [keyPath, renderedChildren]) + } } } else { label.firstElementChild.style.visibility = 'hidden' + label.onclick = () => { + this.event.trigger('leafClick', [keyPath, renderedChildren]) + } } - return yo`
  • ${label}${renderedChildren}
  • ` + return yo`
  • ${label}${renderedChildren}
  • ` } formatSelfDefault (key, data) { @@ -94,14 +108,20 @@ class TreeView { return {key: index, value: item} }) ret.self = 'Array' + ret.isNode = true + ret.isLeaf = false } else if (item instanceof Object) { ret.children = Object.keys(item).map((key) => { return {key: key, value: item[key]} }) ret.self = 'Object' + ret.isNode = true + ret.isLeaf = false } else { ret.self = item ret.children = [] + ret.isNode = false + ret.isLeaf = true } return ret }