diff --git a/file/files.go b/file/files.go
index fa6fee8..a007c28 100644
--- a/file/files.go
+++ b/file/files.go
@@ -98,7 +98,8 @@ func GetFilesHandler(w http.ResponseWriter, r *http.Request) {
workspacePath := workspace + conf.PathSeparator + "src"
workspaceNode := Node{Name: workspace[strings.LastIndex(workspace, conf.PathSeparator)+1:],
- Path: workspacePath, IconSkin: "ico-ztree-dir-workspace ", Type: "d",
+ Path: filepath.ToSlash(workspacePath), /* jQuery data-index API can't accept "\", so we convert it to "/" */
+ IconSkin: "ico-ztree-dir-workspace ", Type: "d",
Creatable: true, Removable: false, IsGoAPI: false, Children: []*Node{}}
walk(workspacePath, &workspaceNode, true, true, false)
@@ -446,7 +447,9 @@ func walk(path string, node *Node, creatable, removable, isGOAPI bool) {
fio, _ := os.Lstat(fpath)
- child := Node{Name: filename, Path: fpath, Removable: removable, IsGoAPI: isGOAPI, Children: []*Node{}}
+ child := Node{Name: filename,
+ Path: filepath.ToSlash(fpath), /* jQuery data-index API can't accept "\", so we convert it to "/" */
+ Removable: removable, IsGoAPI: isGOAPI, Children: []*Node{}}
node.Children = append(node.Children, &child)
if nil == fio {
diff --git a/static/js/editors.js b/static/js/editors.js
index 1572fa4..c86f1e1 100644
--- a/static/js/editors.js
+++ b/static/js/editors.js
@@ -25,7 +25,7 @@ var editors = {
}
},
close: function () {
- $(".edit-panel .tabs > div[data-index=" + $(".edit-panel .frame").data("index") + "]").find(".ico-close").click();
+ $('.edit-panel .tabs > div[data-index="' + $('.edit-panel .frame').data('index') + ']').find('.ico-close').click();
},
closeOther: function () {
var currentIndex = $(".edit-panel .frame").data("index");
@@ -43,14 +43,14 @@ var editors = {
var firstIndex = removeData.splice(0, 1);
$("#dialogCloseEditor").data("removeData", removeData);
// 开始关闭
- $(".edit-panel .tabs > div[data-index=" + firstIndex + "]").find(".ico-close").click();
+ $('.edit-panel .tabs > div[data-index="' + firstIndex + '"]').find(".ico-close").click();
},
_removeAllMarker: function () {
var removeData = $("#dialogCloseEditor").data("removeData");
if (removeData && removeData.length > 0) {
var removeIndex = removeData.splice(0, 1);
$("#dialogCloseEditor").data("removeData", removeData);
- $(".edit-panel .tabs > div[data-index=" + removeIndex + "] .ico-close").click();
+ $('.edit-panel .tabs > div[data-index="' + removeIndex + '"] .ico-close').click();
}
if (wide.curEditor) {
wide.curEditor.focus();
@@ -97,7 +97,7 @@ var editors = {
"afterInit": function () {
$("#dialogCloseEditor button.save").click(function () {
var i = $("#dialogCloseEditor").data("index");
- wide.fmt(tree.fileTree.getNodeByTId(editors.data[i].id).path, editors.data[i].editor);
+ wide.fmt(editors.data[i].id, editors.data[i].editor);
editors.tabs.del(editors.data[i].id);
$("#dialogCloseEditor").dialog("close");
editors._removeAllMarker();
@@ -133,7 +133,8 @@ var editors = {
}
// set tree node selected
- var node = tree.fileTree.getNodeByTId(id);
+ var tId = tree.getTIdByPath(id);
+ var node = tree.fileTree.getNodeByTId(tId);
tree.fileTree.selectNode(node);
wide.curNode = node;
@@ -163,8 +164,8 @@ var editors = {
editors._removeAllMarker();
return true;
} else {
- $("#dialogCloseEditor").dialog("open", $(".edit-panel .tabs > div[data-index="
- + editors.data[i].id + "] > span:eq(0)").text());
+ $("#dialogCloseEditor").dialog("open", $('.edit-panel .tabs > div[data-index="'
+ + editors.data[i].id + '"] > span:eq(0)').text());
$("#dialogCloseEditor").data("index", i);
return false;
}
@@ -219,7 +220,8 @@ var editors = {
}
// set tree node selected
- var node = tree.fileTree.getNodeByTId(nextId);
+ var tId = tree.getTIdByPath(id);
+ var node = tree.fileTree.getNodeByTId(tId);
tree.fileTree.selectNode(node);
wide.curNode = node;
@@ -743,7 +745,7 @@ var editors = {
},
// 新建一个编辑器 Tab,如果已经存在 Tab 则切换到该 Tab.
newEditor: function (data, cursor) {
- var id = wide.curNode.tId;
+ var id = wide.curNode.path;
editors.tabs.add({
id: id,
diff --git a/static/js/hotkeys.js b/static/js/hotkeys.js
index a749545..04399f5 100644
--- a/static/js/hotkeys.js
+++ b/static/js/hotkeys.js
@@ -293,7 +293,7 @@ var hotkeys = {
case 40: // down
var node = {};
- if (!wide.curNode) { // select the first one if no node been selected
+ if (!wide.curNode) { // select the first one if no node been selected
node = tree.fileTree.getNodeByTId("files_1");
} else {
if (wide.curNode && tree.isBottomNode(wide.curNode)) {
@@ -426,19 +426,19 @@ var hotkeys = {
|| document.activeElement.className === "search") {
// 焦点在底部窗口组时,对底部进行切换
var tabs = ["output", "search", "notification"],
- nextId = "";
+ nextPath = "";
for (var i = 0, ii = tabs.length; i < ii; i++) {
if (document.activeElement.className === tabs[i]) {
if (i < ii - 1) {
- nextId = tabs[i + 1];
+ nextPath = tabs[i + 1];
} else {
- nextId = tabs[0];
+ nextPath = tabs[0];
}
break;
}
}
- bottomGroup.tabs.setCurrent(nextId);
- $(".bottom-window-group ." + nextId).focus();
+ bottomGroup.tabs.setCurrent(nextPath);
+ $(".bottom-window-group ." + nextPath).focus();
event.preventDefault();
@@ -446,16 +446,16 @@ var hotkeys = {
}
if (editors.data.length > 1) {
- var nextId = "";
+ var nextPath = "";
for (var i = 0, ii = editors.data.length; i < ii; i++) {
var currentId = editors.getCurrentId();
if (currentId) {
if (currentId === editors.data[i].id) {
if (i < ii - 1) {
- nextId = editors.data[i + 1].id;
+ nextPath = editors.data[i + 1].id;
wide.curEditor = editors.data[i + 1].editor;
} else {
- nextId = editors.data[0].id;
+ nextPath = editors.data[0].id;
wide.curEditor = editors.data[0].editor;
}
break;
@@ -463,8 +463,10 @@ var hotkeys = {
}
}
- editors.tabs.setCurrent(nextId);
- wide.curNode = tree.fileTree.getNodeByTId(nextId);
+ editors.tabs.setCurrent(nextPath);
+ var nextTId = tree.getTIdByPath(nextPath);
+ wide.curNode = tree.fileTree.getNodeByTId(nextTId);
+
tree.fileTree.selectNode(wide.curNode);
wide.refreshOutline();
var cursor = wide.curEditor.getCursor();
diff --git a/static/js/menu.js b/static/js/menu.js
index b43926c..e70f09a 100644
--- a/static/js/menu.js
+++ b/static/js/menu.js
@@ -122,7 +122,7 @@ var menu = {
return false;
}
for (var i = 0, ii = editors.data.length; i < ii; i++) {
- var path = tree.fileTree.getNodeByTId(editors.data[i].id).path;
+ var path = editors.data[i].id;
var editor = editors.data[i].editor;
if ("text/x-go" === editor.getOption("mode")) {
@@ -375,7 +375,7 @@ var menu = {
for (var i = 0, max = emptys.length; i < max; i++) {
var tabIndex = emptys[i].closest('div').data("index"),
text = $.trim(emptys[i].parent().text());
- emptysTip += '[' + $("#dialogPreference .tabs > div[data-index=" + tabIndex + "]").text()
+ emptysTip += '[' + $('#dialogPreference .tabs > div[data-index="' + tabIndex + '"]').text()
+ '] -> [' + text.substr(0, text.length - 1)
+ ']: ' + config.label.no_empty + "
";
}
diff --git a/static/js/session.js b/static/js/session.js
index 16c05dc..5e08678 100644
--- a/static/js/session.js
+++ b/static/js/session.js
@@ -93,7 +93,7 @@ var session = {
}
if (nodes[i].path === currentFile) {
- id = nodes[i].tId;
+ id = nodes[i].path;
// FIXME: 上面的展开是异步进行的,所以执行到这里的时候可能还没有展开完,导致定位不了可视区域
tree.fileTree.selectNode(nodes[i]);
diff --git a/static/js/tabs.js b/static/js/tabs.js
index 84b69aa..a7a0bd7 100644
--- a/static/js/tabs.js
+++ b/static/js/tabs.js
@@ -70,7 +70,7 @@ $.extend(Tabs.prototype, {
},
_hasId: function (id) {
var $tabs = this.obj._$tabs;
- if ($tabs.find("div[data-index=" + id + "]").length === 0) {
+ if ($tabs.find('div[data-index="' + id + '"]').length === 0) {
return false;
}
return true;
@@ -130,8 +130,8 @@ $.extend(Tabs.prototype, {
var $tabs = this.obj._$tabs;
return $tabs.children(".current").data("index");
},
- setCurrent: function (id) {
- if (!id) {
+ setCurrent: function (path) {
+ if (!path) {
return false;
}
@@ -139,7 +139,7 @@ $.extend(Tabs.prototype, {
$tabs = this.obj._$tabs;
var $currentTab = $tabs.children(".current");
- if ($currentTab.data("index") === id) {
+ if ($currentTab.data("index") === path) {
return false;
}
@@ -148,15 +148,15 @@ $.extend(Tabs.prototype, {
if (stack.length === this.obj.STACKSIZE) {
stack.splice(0, 1);
}
- if (stack[stack.length - 1] !== id) {
- this.obj._stack.push(id);
+ if (stack[stack.length - 1] !== path) {
+ this.obj._stack.push(path);
}
$tabs.children("div").removeClass("current");
$tabsPanel.children("div").hide();
- $tabs.children("div[data-index='" + id + "']").addClass("current");
- $tabsPanel.children("div[data-index='" + id + "']").show();
+ $tabs.children('div[data-index="' + path + '"]').addClass("current");
+ $tabsPanel.children('div[data-index="' + path + '"]').show();
if (typeof this.obj.setAfter === 'function') {
this.obj.setAfter();
diff --git a/static/js/tree.js b/static/js/tree.js
index 2586ec7..f13ff72 100644
--- a/static/js/tree.js
+++ b/static/js/tree.js
@@ -89,15 +89,16 @@ var tree = {
return tree.getAllParents(node.getParentNode(), parents);
}
},
- isParents: function (tId, parentTId) {
+ isParents: function (tId, parentPath) {
var node = tree.fileTree.getNodeByTId(tId);
if (!node || !node.parentTId) {
return false;
} else {
- if (node.parentTId === parentTId) {
+ var parentNode = tree.fileTree.getNodeByTId(node.parentTId);
+ if (node.path === parentPath) {
return true;
} else {
- return tree.isParents(node.parentTId, parentTId);
+ return tree.isParents(parentNode.tId, parentPath);
}
}
},
@@ -356,8 +357,8 @@ var tree = {
for (var i = 0, ii = editors.data.length; i < ii; i++) {
// 该节点文件已经打开
- if (editors.data[i].id === treeNode.tId) {
- editors.tabs.setCurrent(treeNode.tId);
+ if (editors.data[i].id === treeNode.path) {
+ editors.tabs.setCurrent(treeNode.path);
wide.curEditor = editors.data[i].editor;
if (!tempCursor) {
@@ -411,6 +412,7 @@ var tree = {
if (!tempCursor) {
tempCursor = CodeMirror.Pos(0, 0);
}
+
editors.newEditor(data, tempCursor);
wide.refreshOutline();
@@ -536,13 +538,13 @@ var tree = {
// update open editor tab name
for (var i = 0, ii = editors.data.length; i < ii; i++) {
- if (wide.curNode.tId === editors.data[i].id) {
+ if (wide.curNode.path === editors.data[i].id) {
var mode = CodeMirror.findModeByExtension(suffix);
if (mode) {
editors.data[i].editor.setOption("mode", mode.mime);
}
- var $currentSpan = $(".edit-panel .tabs > div[data-index=" + wide.curNode.tId + "] > span:eq(0)");
+ var $currentSpan = $('.edit-panel .tabs > div[data-index="' + wide.curNode.path + '"] > span:eq(0)');
$currentSpan.attr("title", request.newPath);
$currentSpan.html('' + wide.curNode.name);
break;
diff --git a/static/js/wide.js b/static/js/wide.js
index c33d204..b1a92db 100644
--- a/static/js/wide.js
+++ b/static/js/wide.js
@@ -130,15 +130,15 @@ var wide = {
if (!tree.isDir()) {
// 是文件的话,查看 editor 中是否被打开,如打开则移除
for (var i = 0, ii = editors.data.length; i < ii; i++) {
- if (editors.data[i].id === wide.curNode.tId) {
- $(".edit-panel .tabs > div[data-index=" + wide.curNode.tId + "]").find(".ico-close").click();
+ if (editors.data[i].id === wide.curNode.path) {
+ $('.edit-panel .tabs > div[data-index="' + wide.curNode.path + '"]').find(".ico-close").click();
break;
}
}
} else {
for (var i = 0, ii = editors.data.length; i < ii; i++) {
- if (tree.isParents(editors.data[i].id, wide.curNode.tId)) {
- $(".edit-panel .tabs > div[data-index=" + editors.data[i].id + "]").find(".ico-close").click();
+ if (tree.isParents(editors.data[i].id, wide.curNode.path)) {
+ $('.edit-panel .tabs > div[data-index="' + editors.data[i].id + '"]').find(".ico-close").click();
i--;
ii--;
}
diff --git a/views/index.html b/views/index.html
index 3560736..a0ffb45 100644
--- a/views/index.html
+++ b/views/index.html
@@ -398,12 +398,12 @@