diff --git a/node_modules/notebook.js b/node_modules/notebook.js
index c237faf2..8e0b612c 100644
--- a/node_modules/notebook.js
+++ b/node_modules/notebook.js
@@ -434,6 +434,7 @@ var Notebook = {
var me = this;
// 服务器没有, 但是是发送更新的, 所以需要作为添加
+ // 情况很少见
if(notebookSyncInfo.changeNeedAdds) {
var needAddNotebooks = notebookSyncInfo.changeNeedAdds;
for(var i in needAddNotebooks) {
@@ -442,6 +443,7 @@ var Notebook = {
}
}
+ // pull
// 处理添加的, 更新的, 这里前端统一重新渲染!!
var adds = notebookSyncInfo.adds;
if (!isEmpty(adds) || !isEmpty(notebookSyncInfo.updates)) {
@@ -452,11 +454,15 @@ var Notebook = {
Web.reloadNotebook();
}
+ // push
if (!isEmpty(notebookSyncInfo.changeAdds)) {
- console.log(' has changeAdds notebook')
- console.log(notebookSyncInfo.changeAdds)
+ console.log(' has changeAdds notebook', notebookSyncInfo.changeAdds);
Web.addChangeNotebook(notebookSyncInfo.changeAdds);
}
+ if (!isEmpty(notebookSyncInfo.changeUpdates)) {
+ console.log(' has changeUpdates notebook', notebookSyncInfo.changeUpdates);
+ Web.updateChangeNotebook(notebookSyncInfo.changeUpdates);
+ }
if (!isEmpty(notebookSyncInfo.deletes)) {
// 处理删除的
diff --git a/node_modules/sync.js b/node_modules/sync.js
index 86db55b7..03597727 100644
--- a/node_modules/sync.js
+++ b/node_modules/sync.js
@@ -32,7 +32,7 @@ syncProgress 设置
var Sync = {
// 同步的信息, 返回给调用者
_syncInfo: {
- notebook: {changeAdds: [], changeConflicts: [], adds: [], deletes: [], updates: []},
+ notebook: {changeAdds: [], changeConflicts: [], adds: [], deletes: [], updates: [], changeUpdates: []},
note: {changeAdds: [], changeConflicts: [], adds: [], deletes: [], updates: [], conflicts: [], errors: []},
tag: {}
},
@@ -84,7 +84,7 @@ var Sync = {
// 同步信息
me._syncInfo = {
- notebook: {ok: false, changeAdds: [], changeConflicts: [], changeNeedAdds: [], adds: [], deletes: [], updates: []},
+ notebook: {ok: false, changeAdds: [], changeConflicts: [], changeNeedAdds: [], adds: [], deletes: [], updates: [], changeUpdates: []},
note: {ok: false, adds: [], changeAdds: [], changeConflicts: [], changeUpdates:[], changeNeedAdds: [], deletes: [], updates: [], conflicts: [], errors: []},
tag: {ok: false, adds: [], changeAdds: [], changeConflicts: [], changeNeedAdds: [], deletes: [], updates: [], conflicts: []},
};
@@ -884,8 +884,8 @@ var Sync = {
} else if(newNotebook.Msg == 'notExists') {
// 服务器端没有, 那么要作为添加
// 可能服务器上已删除, 此时应该要作为添加而不是更新
- me._syncInfo.notebook.changeNeedAdds.push(notebook);
- // me.fixSynced('notebook', 'changeNeedAdds', notebook);
+ // me._syncInfo.notebook.changeNeedAdds.push(notebook);
+ me.fixSynced('notebook', 'changeNeedAdds', notebook);
}
// me.checkNeedIncSyncAgain(newNotebook.Usn);
@@ -894,17 +894,15 @@ var Sync = {
else {
// 更新
// TODO 后端updateNotebook只要传Usn回来即可
- console.log(" 返回来的notebook" + newNotebook.Title)
+ console.log(" 返回来的notebook " + newNotebook.Title)
Notebook.updateNotebookForceForSendChange(notebook.NotebookId, newNotebook, function() {
if(notebook.LocalIsNew) {
- // 没用
- me._syncInfo.notebook.changeAdds.push(newNotebook);
- // me.fixSynced('notebook', 'changeAdds', newNotebook);
+ // me._syncInfo.notebook.changeAdds.push(newNotebook);
+ me.fixSynced('notebook', 'changeAdds', newNotebook);
} else {
- // 没用
- // me._syncInfo.notebook.updates.push(newNotebook);
- me.fixSynced('notebook', 'updates', newNotebook);
+ // me._syncInfo.notebook.changeUpdates.push(newNotebook);
+ me.fixSynced('notebook', 'changeUpdates', newNotebook);
}
// 这里才cb(), 因为先添加父, 再添加子
diff --git a/node_modules/web.js b/node_modules/web.js
index d1519cf4..d4ecced3 100644
--- a/node_modules/web.js
+++ b/node_modules/web.js
@@ -57,7 +57,10 @@ var Web = {
},
addChangeNotebook: function(notebooks) {
var me = this;
- me.Notebook.addChange(notebooks);
+ me.Notebook.addChanges(notebooks);
+ },
+ updateChangeNotebook: function (notebooks) {
+ this.Notebook.updateChanges(notebooks);
},
/*
fixNotebookConflicts: function(notebookInfo) {
diff --git a/public/js/app/note.js b/public/js/app/note.js
index 0d61c9ad..51dbdf66 100644
--- a/public/js/app/note.js
+++ b/public/js/app/note.js
@@ -2336,7 +2336,7 @@ Note.initContextmenu = function() {
}
});
- var ms = Note.getContextNotebooksSys(notebooks);
+ // var ms = Note.getContextNotebooksSys(notebooks);
// this.move.submenu = ms[0];
// this.copy.submenu = ms[1];
diff --git a/public/js/app/notebook.js b/public/js/app/notebook.js
index 06938238..90ca2765 100644
--- a/public/js/app/notebook.js
+++ b/public/js/app/notebook.js
@@ -3,7 +3,6 @@ Notebook.cache = {}; // notebookId => {};
Notebook.notebooks = []; // 按次序
//
CSS
Notebook.notebookNavForListNote = ""; // html 为了note list上面和新建时的ul
-Notebook.notebookNavForNewNote = ""; // html 为了note list上面和新建时的ul
// 设置缓存
Notebook.setCache = function(notebook) {
@@ -148,6 +147,7 @@ Notebook.getSubNotebooks = function(parentNotebookId) {
}
return nodes;
};
+
/**
* Simple Tree Setting(基本版)
* 笔记移动、复制时使用
@@ -202,16 +202,13 @@ Notebook.getTreeSetting = function(isSearch, isShare) {
icoObj = $("#" + treeId + " #" + treeNode.tId + "_ico");
switchObj.remove();
icoObj.before(switchObj);
- if(!isShare) {
- if(!Notebook.isAllNotebookId(treeNode.NotebookId) && !Notebook.isTrashNotebookId(treeNode.NotebookId)) {
- icoObj.after($('' + (treeNode.NumberNotes || 0) + ''));
- icoObj.after($(''));
- }
- } else {
- if(!Share.isDefaultNotebookId(treeNode.NotebookId)) {
- icoObj.after($(''));
- }
+
+ if(!Notebook.isAllNotebookId(treeNode.NotebookId) && !Notebook.isTrashNotebookId(treeNode.NotebookId)) {
+ icoObj.after($('' + (treeNode.NumberNotes || 0) + ''));
+ // icoObj.after($(''));
+ icoObj.after($(''));
}
+
if (treeNode.level > 1) {
var spaceStr = "";
switchObj.before(spaceStr);
@@ -270,34 +267,22 @@ Notebook.getTreeSetting = function(isSearch, isShare) {
// {siblings: [id1, id2], parentNotebookId: 'xx', curNotebookId: 'yy'}
NotebookService.dragNotebooks(ajaxData.curNotebookId, ajaxData.parentNotebookId, ajaxData.siblings);
- // ajaxPost("/notebook/dragNotebooks", {data: JSON.stringify(ajaxData)});
-
- // 这里慢!
setTimeout(function() {
Notebook.changeNav();
}, 100);
}
- if(!isShare) {
- var onClick = function(e, treeId, treeNode) {
- var notebookId = treeNode.NotebookId;
- Notebook.changeNotebook(notebookId);
- };
- var onDblClick = function(e) {
- var notebookId = $(e.target).attr("notebookId");
- if(!Notebook.isAllNotebookId(notebookId) && !Notebook.isTrashNotebookId(notebookId)) {
- self.updateNotebookTitle(e.target);
- }
+ var onClick = function(e, treeId, treeNode) {
+ var notebookId = treeNode.NotebookId;
+ Notebook.changeNotebook(notebookId);
+ };
+ var onDblClick = function(e) {
+ var notebookId = $(e.target).attr("notebookId");
+ if(!Notebook.isAllNotebookId(notebookId) && !Notebook.isTrashNotebookId(notebookId)) {
+ self.updateNotebookTitle(e.target);
}
- } else {
- var onClick = function(e, treeId, treeNode) {
- var notebookId = treeNode.NotebookId;
- var fromUserId = $(e.target).closest('.friend-notebooks').attr("fromUserId");
- Share.changeNotebook(fromUserId, notebookId);
- };
- var onDblClick = null;
- }
-
+ };
+
var setting = {
view: {
showLine: false,
@@ -341,6 +326,8 @@ Notebook.getTreeSetting = function(isSearch, isShare) {
$('#numberNotes_' + notebookId).html(Notebook._subNotebookNumberNotes[notebookId]);
Notebook._subNotebookNumberNotes[notebookId] = undefined;
}
+ // 子的dirty, new状态
+ Notebook.setDirtyOrNewForSub(notebookId);
});
}
}
@@ -373,7 +360,8 @@ Notebook.getTreeSetting = function(isSearch, isShare) {
};
return setting;
-}
+};
+
Notebook.allNotebookId = "0";
Notebook.trashNotebookId = "-1";
Notebook.curNotebookIsTrashOrAll = function() {
@@ -499,13 +487,6 @@ Notebook.searchNotebookForAddNote = function(key) {
notebooks2.push(notebooks[i]);
}
}
- if(isEmpty(notebooks2)) {
- $("#notebookNavForNewNote").html("");
- } else {
- $("#notebookNavForNewNote").html(self.getChangedNotebooks(notebooks2));
- }
- } else {
- $("#notebookNavForNewNote").html(self.everNavForNewNote);
}
}
@@ -531,42 +512,9 @@ Notebook.searchNotebookForList = function(key) {
self.tree2 = null;
$search.hide();
$notebookList.show();
- $("#notebookNavForNewNote").html(self.everNavForNewNote);
}
-}
-
-
-// 修改,添加,删除notebook后调用
-// 改变nav
-// 直接从html中取!
-Notebook.getChangedNotebooks = function(notebooks) {
- var self = this;
- var navForNewNote = "";
-
- var len = notebooks.length;
- for(var i = 0; i < len; ++i) {
- var notebook = notebooks[i];
-
- var classes = "";
- if(!isEmpty(notebook.Subs)) {
- classes = "dropdown-submenu";
- }
- var eachForNew = tt('?
M
', classes, notebook.NotebookId, notebook.Title, notebook.NotebookId);
-
- if(!isEmpty(notebook.Subs)) {
- eachForNew += "";
- }
-
- eachForNew += '';
-
- navForNewNote += eachForNew;
- }
- return navForNewNote;
};
-Notebook.everNavForNewNote = "";
Notebook.everNotebooks = [];
Notebook.changeNav = function() {
var self = Notebook;
@@ -579,21 +527,10 @@ Notebook.changeNav = function() {
pureNotebooks.push(notebooks[i]);
}
}
- var html = self.getChangedNotebooks(pureNotebooks);
-
- self.everNavForNewNote = html;
self.everNotebooks = pureNotebooks;
-
- $("#notebookNavForNewNote").html(html);
-
// 移动, 复制重新来, 因为nav变了, 移动至-----的notebook导航也变了
- // 这里速度很慢
- // var t1 = (new Date()).getTime();
Note.initContextmenu();
- // Share.initContextmenu(Note.notebooksCopy);
- // var t2 = (new Date()).getTime();
- // log(t2-t1);
-}
+};
/**
* 我的共享notebooks
@@ -949,6 +886,37 @@ Notebook.updateNotebookTitle = function(target) {
self.tree.editName(self.tree.getNodeByTId(notebookId));
}
};
+Notebook.subNotebookDirtyOrNew = {}; // notebookId => {dirty: new: }
+Notebook.setDirtyOrNew = function (notebookId, isDirty, isNew) {
+ if (this._setDirtyOrNew(notebookId, isDirty, isNew)) {
+ if (this.subNotebookDirtyOrNew[notebookId]) {
+ delete this.subNotebookDirtyOrNew[notebookId];
+ }
+ }
+ // 没找到, 可能是子笔记本, 还没展开
+ else {
+ this.subNotebookDirtyOrNew[notebookId] = {isDirty: isDirty, isNew: isNew};
+ }
+};
+
+Notebook.setDirtyOrNewForSub = function (notebookId, isDirty, isNew) {
+ var d = this.subNotebookDirtyOrNew[notebookId];
+ if (!d) {
+ return;
+ }
+ this._setDirtyOrNew(notebookId, d.isDirty, d.isNew);
+};
+
+Notebook._setDirtyOrNew = function (notebookId, isDirty, isNew) {
+ var $o = $('#' + notebookId + '_a');
+ if ($o.length) {
+ isDirty ? $o.addClass('nb-dirty') : $o.removeClass('nb-dirty');
+ isNew ? $o.addClass('nb-new') : $o.removeClass('nb-new');
+ return true;
+ }
+ return false;
+};
+
Notebook.doUpdateNotebookTitle = function(notebookId, newTitle) {
var self = Notebook;
newTitle = trimTitle(newTitle);
@@ -957,13 +925,15 @@ Notebook.doUpdateNotebookTitle = function(notebookId, newTitle) {
Notebook.cache[notebookId].Title = newTitle;
// 改变nav
Notebook.changeNav();
-
+
// 同步
if(self.tree2) {
var notebook = self.tree.getNodeByTId(notebookId);
notebook.Title = newTitle;
self.tree.updateNode(notebook); // 同步到对方
}
+
+ self.setDirtyOrNew(notebookId, true);
});
};
@@ -1117,10 +1087,21 @@ Notebook.fixSyncConflict = function(note, newNote) {
*/
};
+// push
// 本地 -> 添加到服务器上的
-// 不用做任何操作
-Notebook.addChange = function(notebooks) {
- return;
+// 前端取消dirty
+Notebook.addChanges = function(notebooks) {
+ var me = this;
+ if(isEmpty(notebooks)) {
+ return;
+ }
+ for(var i = 0; i < notebooks.length; ++i) {
+ var notebook = notebooks[i];
+ me.setDirtyOrNew(notebook.NotebookId, false, false);
+ }
+};
+Notebook.updateChanges = function(notebooks) {
+ this.addChanges(notebooks);
};
// 服务器adds/updates后, 一起渲染
@@ -1132,10 +1113,13 @@ Notebook.reload = function() {
// 定位到某个笔记本下
Notebook.expandNotebookTo(curNotebookId);
+
+ // 为了移动/复制笔记
+ me.changeNav();
});
};
-// 弃用, 一起渲染
+// 弃用, 一起渲染 reload
// notebooks
// <- server 服务器端添加过来的
// ? 如果是子先添加了, 再父添加呢?
@@ -1153,7 +1137,7 @@ Notebook.addSync = function(notebooks) {
true, true, false);
}
};
-// 弃用, 一起渲染
+// 弃用, 一起渲染 reload
// 更新
// 不对移动做修改, 只修改标题
Notebook.updateSync = function(notebooks) {
diff --git a/public/js/jquery.ztree.all-3.5.js b/public/js/jquery.ztree.all-3.5.js
index 616fa032..99ac753e 100644
--- a/public/js/jquery.ztree.all-3.5.js
+++ b/public/js/jquery.ztree.all-3.5.js
@@ -1193,7 +1193,14 @@
}
// life
// 加入notebookId
- html.push(" 0) ? "href='" + url + "'" : ""), " target='",view.makeNodeTarget(node),"' style='", fontStyle.join(''),
"'", ' notebookId="' + node.NotebookId + '" ');
if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {html.push("title='", title.replace(/'/g,"'").replace(//g,'>'),"'");}
diff --git a/public/themes/basic.less b/public/themes/basic.less
index b530794a..5eea50c6 100644
--- a/public/themes/basic.less
+++ b/public/themes/basic.less
@@ -524,32 +524,6 @@ h3 {
}
}
-.item-dirty {
- .dirty-bg {
- position: absolute;
- right: 0;
- bottom: 0;
- z-index: 1;
- width: 0;
- height: 0;
- border-top: 29px solid transparent;
- border-right: 23px solid #040421;
- }
-
- &::after {
- content: "\f093";
- position: absolute;
- right: 1px;
- bottom: 1px;
- z-index: 2;
- color: #FFF;
- /* font-size: 5px; */
- font: normal normal normal 14px/1 FontAwesome;
- /* font-size: inherit; */
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- }
-}
#noteItemList {
user-select: none;
@@ -672,6 +646,7 @@ h3 {
padding: 0 3px;
}
+
// 设置
.notebook-setting {
display: none;
@@ -2326,5 +2301,54 @@ img::selection {
list-style: none;
}
+// dirty
+
+.nb-dirty:after,
+.nb-new:after {
+ content: "";
+ width: 7px;
+ height: 7px;
+ background: #FF6363;
+ position: absolute;
+ right: 4px;
+ top: 11px;
+ border-radius: 50%;
+}
+
+.item-dirty {
+ &::after {
+ content: "";
+ width: 7px;
+ height: 7px;
+ background: #FF6363;
+ position: absolute;
+ right: 7px;
+ bottom: 6px;
+ border-radius: 50%;
+ }
+ // .dirty-bg {
+ // position: absolute;
+ // right: 0;
+ // bottom: 0;
+ // z-index: 1;
+ // width: 0;
+ // height: 0;
+ // border-top: 29px solid transparent;
+ // border-right: 23px solid #040421;
+ // }
+
+ // &::after {
+ // content: "\f093";
+ // position: absolute;
+ // right: 1px;
+ // bottom: 1px;
+ // z-index: 2;
+ // color: #FFF;
+ // font: normal normal normal 14px/1 FontAwesome;
+ // text-rendering: auto;
+ // -webkit-font-smoothing: antialiased;
+ // }
+}
+
@import '../css/includes/traffic.less';
@import '../css/includes/ani.less';