From 19e5f7a8aadeb9b1a84bfdd09d4efa38c47530b3 Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 28 Mar 2016 03:24:30 +0400 Subject: [PATCH] automatically expand single child directory chains --- .../ace_tree/lib/ace_tree/data_provider.js | 7 +--- plugins/c9.fs/fs.cache.xml.js | 1 + plugins/c9.ide.tree/tree.js | 37 ++++++++++++++----- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/node_modules/ace_tree/lib/ace_tree/data_provider.js b/node_modules/ace_tree/lib/ace_tree/data_provider.js index 4709fe1c..7e98b866 100644 --- a/node_modules/ace_tree/lib/ace_tree/data_provider.js +++ b/node_modules/ace_tree/lib/ace_tree/data_provider.js @@ -49,7 +49,7 @@ var DataProvider = function(root) { }; this.open = - this.expand = function(node, deep, silent, justLoaded) { + this.expand = function(node, deep, silent) { if (typeof deep != "number") deep = deep ? 100 : 0; if (!node) @@ -69,7 +69,7 @@ var DataProvider = function(root) { this.collapse(node, null, true); node.status = "loaded"; if (!err) - this.expand(node, null, false, true); + this.expand(node, null, false); }.bind(this)); this.setOpen(node, true); return; @@ -95,9 +95,6 @@ var DataProvider = function(root) { } } - if (justLoaded) - node.justLoaded = true; - this.rows = items.length; silent || this._signal("expand", node); }; diff --git a/plugins/c9.fs/fs.cache.xml.js b/plugins/c9.fs/fs.cache.xml.js index b3bc5b43..0b64994c 100644 --- a/plugins/c9.fs/fs.cache.xml.js +++ b/plugins/c9.fs/fs.cache.xml.js @@ -95,6 +95,7 @@ define(function(require, exports, module) { orphans[e.path] = node; orphan = true; } + node.$lastReadT = Date.now(); // Indicate this directory has been fully read model.setAttribute(node, "status", "loaded"); diff --git a/plugins/c9.ide.tree/tree.js b/plugins/c9.ide.tree/tree.js index 3ba6de42..5c89c149 100644 --- a/plugins/c9.ide.tree/tree.js +++ b/plugins/c9.ide.tree/tree.js @@ -405,15 +405,10 @@ define(function(require, exports, module) { emit("expand", { path: id }); - if (node.justLoaded) { - delete node.justLoaded; - return; - } - // Only save if we are not loading the tree if (!refreshing || loadedSettings != -1) { if (!node.isRoot) { - var refresh = !refreshing && node.status == "loaded"; + var refresh = !refreshing && node.status == "loaded" && Date.now() - node.$lastReadT > 500; watcher.watch(id, refresh); // watch children @@ -425,8 +420,10 @@ define(function(require, exports, module) { }); } - changed = true; - settings.save(); + if (!updateSingleDirectoryChain(true, node)) { + changed = true; + settings.save(); + } } }, plugin); @@ -452,10 +449,30 @@ define(function(require, exports, module) { }); } - changed = true; - settings.save(); + if (!updateSingleDirectoryChain(false, node)) { + changed = true; + settings.save(); + } }, plugin); + function updateSingleDirectoryChain(isExpand, node) { + if (!node.children || node.children.length !== 1) + return; + var child = node.children[0]; + if (!child || !child.isFolder || child.$depth > 0xff) + return; + + if (isExpand && !child.isOpen) { + expandNode(child); + return true; + } + else if (!isExpand && child.isOpen) { + updateSingleDirectoryChain(false, child); + delete expandedList[child.path]; + return true; + } + } + // Rename tree.on("beforeRename", function(e) { if (emit("beforeRename", e) === false)