diff --git a/file/files.go b/file/files.go
index 966a19b..d02b5c3 100644
--- a/file/files.go
+++ b/file/files.go
@@ -168,6 +168,11 @@ func NewFile(w http.ResponseWriter, r *http.Request) {
fileType := args["fileType"].(string)
if !createFile(path, fileType) {
+ if "f" == fileType {
+ extension := filepath.Ext(path)
+ data["mode"] = getEditorMode(extension)
+
+ }
data["succ"] = false
}
}
diff --git a/i18n/zh_CN.json b/i18n/zh_CN.json
index 8112138..5eb1384 100644
--- a/i18n/zh_CN.json
+++ b/i18n/zh_CN.json
@@ -22,6 +22,7 @@
"goinstall": "go install",
"build_n_run": "构建 & 运行",
"full_screen": "全屏",
+ "unread_notification": "未读通知",
"notification_2": "没有检查到 gocode,这将会导致 [自动完成] 失效",
"notification_3": "没有检查到 ide_stub,这将会导致 [跳转到声明]、[查找使用] 失效"
}
\ No newline at end of file
diff --git a/notification/notifications.go b/notification/notifications.go
index 7081a28..34c1c27 100644
--- a/notification/notifications.go
+++ b/notification/notifications.go
@@ -77,9 +77,6 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
session.NotificationWS[sid] = &wsChan
- ret := map[string]interface{}{"output": "Notification initialized", "cmd": "init-notification"}
- wsChan.Conn.WriteJSON(&ret)
-
glog.V(4).Infof("Open a new [Notification] with session [%s], %d", sid, len(session.NotificationWS))
// 添加用户事件处理器
@@ -100,14 +97,5 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
glog.Error("Notification WS ERROR: " + err.Error())
return
}
-
- ret = map[string]interface{}{"output": "", "cmd": "notification-output"}
-
- if err := wsChan.Conn.WriteJSON(&ret); err != nil {
- glog.Error("Notification WS ERROR: " + err.Error())
- return
- }
-
- wsChan.Time = time.Now()
}
}
diff --git a/static/css/base.css b/static/css/base.css
index 32e12c5..da12083 100644
--- a/static/css/base.css
+++ b/static/css/base.css
@@ -234,7 +234,7 @@ ul {
}
/* end editor */
-/* start output */
+/* start bottom-window-group */
.bottom-window-group .tabs {
background-color: #CAD3E3;
border-top: 1px solid #8E97A7;
@@ -245,13 +245,39 @@ ul {
cursor: pointer;
}
+.bottom-window-group .tabs-panel {
+ height: 133px;
+}
+
.bottom-window-group textarea {
border-width: 0;
color: #555555;
height: 130px;
width: 100%;
}
-/* end output */
+
+.bottom-window-group .notification,
+.bottom-window-group .search,
+.bottom-window-group .output {
+ height: 133px;
+ overflow: auto;
+}
+
+.bottom-window-group .notification > table {
+ width: 100%;
+}
+
+.bottom-window-group .notification td {
+ border-bottom: 1px solid #DDD;
+ line-height: 20px;
+}
+
+.bottom-window-group .notification .type,
+.bottom-window-group .notification .severity {
+ width: 50px;
+ padding: 0 5px;
+}
+/* end bottom-window-group */
/* start footer */
.notification-count {
diff --git a/static/js/editor.js b/static/js/editor.js
index d58e3ac..220842e 100644
--- a/static/js/editor.js
+++ b/static/js/editor.js
@@ -267,6 +267,9 @@ var editors = {
"Ctrl-S": function () {
wide.saveFile();
},
+ "Shift-Ctrl-S": function () {
+ wide.saveAllFiles();
+ },
"Shift-Alt-F": function () {
wide.fmt();
},
diff --git a/static/js/notification.js b/static/js/notification.js
index 96fb8b8..6314bba 100644
--- a/static/js/notification.js
+++ b/static/js/notification.js
@@ -1,6 +1,6 @@
var notification = {
- init: function() {
- $(".notification-count").click(function() {
+ init: function () {
+ $(".notification-count").click(function () {
wide.bottomWindowTab.setCurrent("notification");
$(".bottom-window-group .notification").focus();
$(this).hide();
@@ -8,28 +8,32 @@ var notification = {
this._initWS();
},
- _initWS: function() {
+ _initWS: function () {
var notificationWS = new WebSocket(config.channel.shell + '/notification/ws?sid=' + config.wideSessionId);
- notificationWS.onopen = function() {
+ notificationWS.onopen = function () {
console.log('[notification onopen] connected');
};
- notificationWS.onmessage = function(e) {
- var data = JSON.parse(e.data);
- if ('init-notification' !== data.cmd) {
- $(".notification-count").show();
- $('.bottom-window-group .notification').text(
- $('.bottom-window-group .notification').text() + data.output);
- }
+ notificationWS.onmessage = function (e) {
+ var data = JSON.parse(e.data),
+ $notification = $('.bottom-window-group .notification > table'),
+ notificationHTML = '';
+
+ notificationHTML += '
' + data.severity
+ + ' | ' + data.message
+ + ' | ' + data.type + ' |
';
+ $notification.append(notificationHTML);
+
+ $(".notification-count").show();
};
- notificationWS.onclose = function(e) {
+ notificationWS.onclose = function (e) {
console.log('[notification onclose] disconnected (' + e.code + ')');
delete notificationWS;
};
- notificationWS.onerror = function(e) {
+ notificationWS.onerror = function (e) {
console.log('[notification onerror] ' + e);
};
}
diff --git a/static/js/tree.js b/static/js/tree.js
index d83da23..9b758c2 100644
--- a/static/js/tree.js
+++ b/static/js/tree.js
@@ -121,7 +121,8 @@ var tree = {
tree.fileTree.addNodes(wide.curNode, [{
"name": name,
"iconSkin": iconSkin,
- "path": request.path
+ "path": request.path,
+ "mode": data.mode
}]);
}
});
diff --git a/static/js/wide.js b/static/js/wide.js
index 9204f92..7727ef3 100644
--- a/static/js/wide.js
+++ b/static/js/wide.js
@@ -1,9 +1,9 @@
var outputWS = new WebSocket(config.channel.output + '/output/ws?sid=' + config.wideSessionId);
-outputWS.onopen = function() {
+outputWS.onopen = function () {
console.log('[output onopen] connected');
};
-outputWS.onmessage = function(e) {
+outputWS.onmessage = function (e) {
console.log('[output onmessage]' + e.data);
var data = JSON.parse(e.data);
@@ -20,10 +20,10 @@ outputWS.onmessage = function(e) {
url: '/run',
data: JSON.stringify(request),
dataType: "json",
- beforeSend: function(data) {
+ beforeSend: function (data) {
$('.bottom-window-group .output').text('');
},
- success: function(data) {
+ success: function (data) {
}
});
@@ -54,11 +54,11 @@ outputWS.onmessage = function(e) {
$('.bottom-window-group .output').text($('.bottom-window-group .output').text() + data.output);
}
};
-outputWS.onclose = function(e) {
+outputWS.onclose = function (e) {
console.log('[output onclose] disconnected (' + e.code + ')');
delete outputWS;
};
-outputWS.onerror = function(e) {
+outputWS.onerror = function (e) {
console.log('[output onerror] ' + e);
};
@@ -66,26 +66,26 @@ var wide = {
curNode: undefined,
curEditor: undefined,
bottomWindowTab: undefined,
- _initLayout: function() {
+ _initLayout: function () {
var mainH = $(window).height() - $(".menu").height() - $(".footer").height() - 2;
$(".content, .ztree").height(mainH);
$(".edit-panel").height(mainH - $(".bottom-window-group").height());
},
- _initBottomWindowGroup: function() {
+ _initBottomWindowGroup: function () {
this.bottomWindowTab = new Tabs({
id: ".bottom-window-group",
- clickAfter: function(id) {
+ clickAfter: function (id) {
this._$tabsPanel.find("." + id).focus();
}
});
},
- init: function() {
+ init: function () {
this._initLayout();
this._initBottomWindowGroup();
- $("body").bind("mousedown", function(event) {
+ $("body").bind("mousedown", function (event) {
if (!(event.target.id === "dirRMenu" || $(event.target).closest("#dirRMenu").length > 0)) {
$("#dirRMenu").hide();
}
@@ -102,7 +102,7 @@ var wide = {
});
},
- saveFile: function() {
+ _save: function () {
var request = newWideRequest();
request.file = $(".edit-header .current span:eq(0)").attr("title");
request.code = wide.curEditor.getValue();
@@ -112,24 +112,29 @@ var wide = {
url: '/file/save',
data: JSON.stringify(request),
dataType: "json",
- success: function(data) {
+ success: function (data) {
}
});
},
- saveAllFiles: function() {
- // TODO: save all files
+ saveFile: function () {
+ // 格式化后会对文件进行保存
+ this.fmt();
},
- closeFile: function() {
+ saveAllFiles: function () {
+ // TODO: save all files
+ console.log("TODO: ssave all files");
+ },
+ closeFile: function () {
// TODO: close file
},
- closeAllFiles: function() {
+ closeAllFiles: function () {
// TODO: close all files
},
- exit: function() {
+ exit: function () {
// TODO: exit
},
// 构建 & 运行.
- run: function() {
+ run: function () {
var request = newWideRequest();
request.file = $(".edit-header .current span:eq(0)").attr("title");
request.code = wide.curEditor.getValue();
@@ -141,14 +146,14 @@ var wide = {
url: '/build',
data: JSON.stringify(request),
dataType: "json",
- beforeSend: function(data) {
+ beforeSend: function (data) {
$('.bottom-window-group .output').text('');
},
- success: function(data) {
+ success: function (data) {
}
});
},
- goget: function() {
+ goget: function () {
var request = newWideRequest();
request.file = $(".edit-header .current span:eq(0)").attr("title");
@@ -157,14 +162,14 @@ var wide = {
url: '/go/get',
data: JSON.stringify(request),
dataType: "json",
- beforeSend: function(data) {
+ beforeSend: function (data) {
$('.bottom-window-group .output').text('');
},
- success: function(data) {
+ success: function (data) {
}
});
},
- goinstall: function() {
+ goinstall: function () {
var request = newWideRequest();
request.file = $(".edit-header .current span:eq(0)").attr("title");
request.code = wide.curEditor.getValue();
@@ -174,14 +179,14 @@ var wide = {
url: '/go/install',
data: JSON.stringify(request),
dataType: "json",
- beforeSend: function(data) {
+ beforeSend: function (data) {
$('.bottom-window-group .output').text('');
},
- success: function(data) {
+ success: function (data) {
}
});
},
- fmt: function() {
+ fmt: function () {
var path = $(".edit-header .current span:eq(0)").attr("title");
var mode = wide.curNode.mode;
@@ -192,13 +197,13 @@ var wide = {
request.cursorCh = wide.curEditor.getCursor().ch;
switch (mode) {
- case "text/x-go":
+ case "text/x-go": // 会保存文件
$.ajax({
type: 'POST',
url: '/go/fmt',
data: JSON.stringify(request),
dataType: "json",
- success: function(data) {
+ success: function (data) {
if (data.succ) {
wide.curEditor.setValue(data.code);
}
@@ -206,13 +211,13 @@ var wide = {
});
break;
- case "text/html":
+ case "text/html": // 会保存文件
$.ajax({
type: 'POST',
url: '/html/fmt',
data: JSON.stringify(request),
dataType: "json",
- success: function(data) {
+ success: function (data) {
if (data.succ) {
wide.curEditor.setValue(data.code);
}
@@ -226,7 +231,7 @@ var wide = {
var json = JSON.parse(wide.curEditor.getValue());
wide.curEditor.setValue(JSON.stringify(json, "", " "));
- this.save();
+ wide._save();
} catch (e) {
delete e;
}
@@ -234,12 +239,14 @@ var wide = {
break;
default :
// TODO: XML 格式化处理
+ // 所有文件格式化后都需要进行保存
+ wide._save();
break;
}
}
};
-$(document).ready(function() {
+$(document).ready(function () {
wide.init();
tree.init();
menu.init();
diff --git a/view/index.html b/view/index.html
index f570544..10e3683 100644
--- a/view/index.html
+++ b/view/index.html
@@ -153,7 +153,7 @@
@@ -163,7 +163,7 @@