*/
// TODO 层级
Notebook.renderShareNotebooks = function(sharedUserInfos, shareNotebooks) {
if(isEmpty(sharedUserInfos)) {
return;
}
if(!shareNotebooks || typeof shareNotebooks != "object" || shareNotebooks.length < 0) {
return;
}
var $shareNotebooks = $("#shareNotebooks");
var user2ShareNotebooks = {};
for(var i in shareNotebooks) {
var userNotebooks = shareNotebooks[i];
user2ShareNotebooks[userNotebooks.UserId] = userNotebooks;
}
for(var i in sharedUserInfos) {
var userInfo = sharedUserInfos[i];
var userNotebooks = user2ShareNotebooks[userInfo.UserId] || {ShareNotebooks:[]};
userNotebooks.ShareNotebooks = [{NotebookId: "-2", Title: "默认共享"}].concat(userNotebooks.ShareNotebooks)
var username = userInfo.Username || userInfo.Email;
var header = tt('
', username, username);
var body = '
';
for(var j in userNotebooks.ShareNotebooks) {
var notebook = userNotebooks.ShareNotebooks[j];
body += tt('- ?
', notebook.NotebookId, notebook.Title)
}
body += "
";
$shareNotebooks.append(header + body + "
")
}
}
// 左侧导航, 选中某个notebook
Notebook.selectNotebook = function(target) {
$(".notebook-item").removeClass("curSelectedNode");
$(target).addClass("curSelectedNode");
};
// 新建笔记导航
Notebook.changeNotebookNavForNewNote = function(notebookId, title) {
// 没有notebookId, 则选择第1个notebook
// 第一个是全部笔记
if(!notebookId) {
var notebook = Notebook.notebooks[0];
notebookId = notebook.NotebookId;
title = notebook.Title;
}
if(!title) {
var notebook = Notebook.cache[0];
title = notebook.Title;
}
if(!Notebook.isAllNotebookId(notebookId) && !Notebook.isTrashNotebookId(notebookId)) {
$("#curNotebookForNewNote").html(title).attr("notebookId", notebookId);
} else if(!$("#curNotebookForNewNote").attr("notebookId")) {
// 但又没有一个笔记, 默认选第一个吧
// 这里很可能会死循环, 万一用户没有其它笔记呢?
// 服务端肯定要在新建一个用户时给他创建一个默认笔记本的
if(Notebook.notebooks.length > 2) {
var notebook = Notebook.notebooks[1];
notebookId = notebook.NotebookId;
title = notebook.Title;
Notebook.changeNotebookNavForNewNote(notebookId, title);
}
}
}
// 改变导航, 两处
// 单击左侧, 单击新建下拉时调用
// 1 选中左侧导航,
// 2 notelist上面 >
// 3 新建笔记 - js >
// 转成我的nav <-> 共享
Notebook.toggleToMyNav = function(userId, notebookId) {
$("#sharedNotebookNavForListNav").hide();
$("#myNotebookNavForListNav").show();
$("#newMyNote").show();
$("#newSharedNote").hide();
// 搜索tag隐藏
$("#tagSearch").hide();
}
Notebook.changeNotebookNav = function(notebookId) {
Notebook.curNotebookId = notebookId;
Notebook.toggleToMyNav();
// 1 改变当前的notebook
Notebook.selectNotebook($(tt('#notebook [notebookId="?"]', notebookId)));
var notebook = Notebook.cache[notebookId];
if(!notebook) {
return;
}
// 2
Notebook.changeCurNotebookTitle(notebook.Title);
// 3
Notebook.changeNotebookNavForNewNote(notebookId, notebook.Title);
}
Notebook.isAllNotebookId = function(notebookId) {
return notebookId == Notebook.allNotebookId;
}
Notebook.isTrashNotebookId = function(notebookId) {
return notebookId == Notebook.trashNotebookId;
}
// 当前选中的笔记本是否是"所有"
// called by Note
Notebook.curActiveNotebookIsAll = function() {
return Notebook.isAllNotebookId($("#notebookList .active").attr("notebookId"));
}
// 改变笔记本
// 0. 改变样式
// 1. 改变note, 此时需要先保存
// 2. ajax得到该notebook下的所有note
// 3. 使用Note.RederNotes()
// callback Pjax, 当popstate时调用
Notebook.changeNotebookSeq = 1;
Notebook.changeNotebook = function(notebookId, callback, needRendNoteId) {
var me = this;
// 如果找不到
if(!Notebook.cache[notebookId]) {
return;
}
Notebook.changeNotebookNav(notebookId);
Notebook.curNotebookId = notebookId;
// 1
Note.curChangedSaveIt();
// 2 先清空所有
Note.clearAll();
var url = "/note/listNotes/";
var param = {notebookId: notebookId};
// 废纸篓
if(Notebook.isTrashNotebookId(notebookId)) {
url = "/note/listTrashNotes";
param = {};
} else if(Notebook.isAllNotebookId(notebookId)) {
param = {};
// 得到全部的...
cacheNotes = Note.getNotesByNotebookId();
// 数量一致
if(!isEmpty(cacheNotes)) {
if(callback) {
callback(cacheNotes);
} else {
Note.renderNotesAndTargetNote(cacheNotes, needRendNoteId);
}
return;
}
} else {
cacheNotes = Note.getNotesByNotebookId(notebookId);
var notebook = Notebook.cache[notebookId];
notebook.Title = trimTitle(notebook.Title);
if(!notebook) {
return;
}
var len = cacheNotes ? cacheNotes.length : 0;
// 如果为0, 从服务器上拿
if(len != 0 && len == notebook.NumberNotes) {
if(callback) {
callback(cacheNotes);
} else {
Note.renderNotesAndTargetNote(cacheNotes, needRendNoteId);
}
return;
} else {
Note.clearCacheByNotebookId(notebookId);
log('数量不一致');
}
}
// 2 得到笔记本
// 这里可以缓存起来, note按notebookId缓存
// 这里可能点击过快导致前面点击的后来才返回
me.showNoteAndEditorLoading();
me.changeNotebookSeq++;
(function(seq) {
var callback2 = function(cacheNotes) {
// 后面点击过快, 之前的结果不要了
if(seq != me.changeNotebookSeq) {
log("notebook changed too fast!");
log(cacheNotes);
return;
}
if(callback) {
callback(cacheNotes);
} else {
Note.renderNotesAndTargetNote(cacheNotes, needRendNoteId);
}
me.hideNoteAndEditorLoading();
};
if(Notebook.isTrashNotebookId(notebookId)) {
Service.noteService.getTrashNotes(callback2);
} else {
Service.noteService.getNotes(notebookId, callback2);
}
// ajaxGet(url, param, );
})(me.changeNotebookSeq);
};
// 改变标签, isStarred是否是星笔记本
Notebook.changeCurNotebookTitle = function(title, isStarred, subTitle, isTag, isSearch) {
var me = this;
var title = isTag ? title : trimTitle(title);
$("#curNotebookForListNote").html(title);
me.isStarred = isStarred;
me.isTag = isTag;
me.isSearch = isSearch;
};
// 笔记列表与编辑器的mask loading
Notebook.showNoteAndEditorLoading = function() {
$("#noteAndEditorMask").show();
};
Notebook.hideNoteAndEditorLoading = function() {
$("#noteAndEditorMask").hide();
};
// 是否是当前选中的notebookId
// 还包括共享
// called by Note
Notebook.isCurNotebook = function(notebookId) {
return $(tt('#notebookList [notebookId="?"], #shareNotebooks [notebookId="?"]', notebookId, notebookId)).attr("class") == "active";
};
// 改变nav, 为了新建note
// called by Note
Notebook.changeNotebookForNewNote = function(notebookId) {
// 废纸篓
if(Notebook.isTrashNotebookId(notebookId) || Notebook.isAllNotebookId(notebookId)) {
return;
}
Notebook.changeNotebookNav(notebookId, true);
Notebook.curNotebookId = notebookId;
// 2 得到笔记本
// 这里可以缓存起来, note按notebookId缓存
Service.noteService.getNotes(notebookId, function(notes) {
// note 导航
Note.renderNotes(notes, true);
});
};
//---------------------------
// 显示共享信息
Notebook.listNotebookShareUserInfo = function(target) {
var notebookId = $(target).attr("notebookId");
showDialogRemote("/share/listNotebookShareUserInfo", {notebookId: notebookId});
}
// 共享笔记本
Notebook.shareNotebooks= function(target) {
var title = $(target).text();
showDialog("dialogShareNote", {title: "分享笔记本给好友-" + title});
setTimeout(function() {
$("#friendsEmail").focus();
}, 500);
var notebookId = $(target).attr("notebookId");
shareNoteOrNotebook(notebookId, false);
}
//-----------------------------
// 设为blog/unset
Notebook.setNotebook2Blog = function(target) {
var notebookId = $(target).attr("notebookId");
var notebook = Notebook.cache[notebookId];
var isBlog = true;
if(notebook.IsBlog != undefined) {
isBlog = !notebook.IsBlog;
}
// 那么, 如果当前是该notebook下, 重新渲染之
if(Notebook.curNotebookId == notebookId) {
if(isBlog) {
$("#noteList .item-blog").show();
} else {
$("#noteList .item-blog").hide();
}
// 如果当前在所有笔记本下
} else if(Notebook.curNotebookId == Notebook.allNotebookId){
$("#noteItemList .item").each(function(){
var noteId = $(this).attr("noteId");
var note = Note.cache[noteId];
if(note.NotebookId == notebookId) {
if(isBlog) $(this).find(".item-blog").show();
else $(this).find(".item-blog").hide();
}
});
}
ajaxPost("/notebook/setNotebook2Blog", {notebookId: notebookId, isBlog: isBlog}, function(ret) {
if(ret) {
// 这里要设置notebook下的note的blog状态
Note.setAllNoteBlogStatus(notebookId, isBlog);
Notebook.setCache({NotebookId: notebookId, IsBlog: isBlog});
}
});
}
// 添加, 修改完后都要对notebook的列表重新计算 TODO
// 修改笔记本标题
Notebook.updateNotebookTitle = function(target) {
var self = Notebook;
var notebookId = $(target).attr("notebookId");
if(self.tree2) {
self.tree2.editName(self.tree2.getNodeByTId(notebookId));
} else {
self.tree.editName(self.tree.getNodeByTId(notebookId));
}
};
Notebook.doUpdateNotebookTitle = function(notebookId, newTitle) {
var self = Notebook;
newTitle = trimTitle(newTitle);
NotebookService.updateNotebookTitle(notebookId, newTitle, function() {
// 修改缓存
Notebook.cache[notebookId].Title = newTitle;
// 改变nav
Notebook.changeNav();
// 同步
if(self.tree2) {
var notebook = self.tree.getNodeByTId(notebookId);
notebook.Title = newTitle;
self.tree.updateNode(notebook); // 同步到对方
}
});
};
// 修改标题 for sync
Notebook.renderUpdateNoteTitle = function(notebookId, newTitle) {
var self = this;
// 修改缓存
if(!Notebook.cache[notebookId]) {
return;
}
Notebook.cache[notebookId].Title = trimTitle(newTitle);
// 改变nav
Notebook.changeNav();
var notebook = self.tree.getNodeByTId(notebookId);
if(!notebook) {
return;
}
notebook.Title = newTitle;
if(self.tree) {
self.tree.updateNode(notebook);
}
if(self.tree2) {
self.tree2.updateNode(notebook);
}
};
//-----------
// 添加笔记本
// 1 确保是展开的
// 2 在所有后面添加
Notebook.addNotebookSeq = 1; // inputId
Notebook.addNotebook = function() {
var self = Notebook;
if($("#myNotebooks").hasClass("closed")) {
$("#myNotebooks .folderHeader").trigger("click");
}
// 添加并修改
self.tree.addNodes(null, {Title: "", NotebookId: getObjectId(), IsNew: true}, true, true);
}
// rename 调用
Notebook.doAddNotebook = function(notebookId, title, parentNotebookId) {
var self = Notebook;
Service.notebookService.addNotebook(notebookId, title, parentNotebookId, function(ret) {
if(ret.NotebookId) {
Notebook.cache[ret.NotebookId] = ret;
var notebook = self.tree.getNodeByTId(notebookId);
$.extend(notebook, ret);
notebook.IsNew = false;
// 选中之
Notebook.changeNotebook(notebookId);
// 改变nav
Notebook.changeNav();
}
});
}
//-------------
// 添加子笔记本
Notebook.addChildNotebook = function(target) {
var self = Notebook;
if($("#myNotebooks").hasClass("closed")) {
$("#myNotebooks .folderHeader").trigger("click");
}
var notebookId = $(target).attr("notebookId");
// 添加并修改
self.tree.addNodes(self.tree.getNodeByTId(notebookId), {Title: "", NotebookId: getObjectId(), IsNew: true}, false, true);
}
//-------------
// 删除
Notebook.deleteNotebook = function(target) {
var self = Notebook;
var notebookId = $(target).attr("notebookId");
if(!notebookId) {
return;
}
// TODO, 如果删除的是父, 那子树要移到前面去
// 查看是否有子
if(self.getSubNotebooks(notebookId)) {
alert('This notebook has sub notebooks, please delete sub notebooks firstly.');
return;
}
NotebookService.deleteNotebook(notebookId, function(ok, msg) {
if(!ok) {
alert(msg || "error");
return;
}
self.deleteNotebookFromTree(notebookId);
})
};
Notebook.deleteNotebookFromTree = function(notebookId) {
var self = this;
self.tree.removeNode(self.tree.getNodeByTId(notebookId));
if(self.tree2) {
self.tree2.removeNode(self.tree2.getNodeByTId(notebookId));
}
delete Notebook.cache[notebookId];
// 改变nav
Notebook.changeNav();
};
// 清空垃圾
Notebook.clearTrash = function() {
var me = this;
if(confirm(getMsg('Are you sure ?'))) {
NoteService.clearTrash(function() {
if(Notebook.curNotebookId == Notebook.trashNotebookId) {
Note.clearAll();
Note.showEditorMask();
}
});
}
};
//---------------
// 笔记本解决冲突
//----------------------
// 冲突解决, 增量sync时
// note是服务器端的笔记, newNote是本地复制后的笔记
Notebook.fixSyncConflict = function(note, newNote) {
// Note.cache[note.NoteId] = note;
// Note.cache[newNote.NoteId] = newNote;
/*
Note.addNoteCache(note);
Note.addNoteCache(newNote);
var target = $(tt('[noteId="?"]', note.NoteId)); //
// 如果当前笔记在笔记列表中, 那么生成一个新笔记放在这个笔记上面
if(target.length > 0) {
var newHtmlObject = Note._getNoteHtmlObjct(note);
newHtmlObject.insertBefore(target);
}
// 当前这个换成新复制的
target.attr('noteId', newNote.NoteId);
// 重新render 左侧下, 因为有冲突了, 不要render内容啊
// 如果当前编辑的是这个笔记, 那切换到newNote上来
if(Note.curNoteId == note.NoteId) {
Note.curNoteId = newNote.NoteId;
}
*/
};
// notebooks
// <- server 服务器端添加过来的
Notebook.addSync = function(notebooks) {
var me = this;
if(isEmpty(notebooks)) {
return;
}
console.log('web add sync notebook');
for(var i in notebooks) {
var notebook = notebooks[i];
Notebook.setCache(notebook);
me.tree.addNodes(me.tree.getNodeByTId(notebook.ParentNotebookId),
{Title: notebook.Title, NotebookId: notebook.NotebookId, IsNew: false}, // IsNew: false啊!!!
true, true, false);
}
}
// 本地 -> 添加到服务器上的
// 不用做任何操作
Notebook.addChange = function(notebooks) {
return;
};
// 更新
// 不对移动做修改, 只修改标题
Notebook.updateSync = function(notebooks) {
var me = this;
if(isEmpty(notebooks)) {
return;
}
log("update notebook sync");
for(var i in notebooks) {
var notebook = notebooks[i];
// 更新可以是本笔记本删除后, 更新的服务器版
if(me.cache[notebook.NotebookId]) {
me.renderUpdateNoteTitle(notebook.NotebookId, notebook.Title);
} else {
Notebook.setCache(notebook);
me.tree.addNodes(me.tree.getNodeByTId(notebook.ParentNotebookId), {Title: notebook.Title, NotebookId: notebook.NotebookId, IsNew: true}, true, true, false);
}
}
};
// 删除
Notebook.deleteSync = function(notebooks) {
var me = this;
if(isEmpty(notebooks)) {
return;
}
log('delete notebook sync');
for(var i in notebooks) {
var notebookId = notebooks[i];
// 删除
me.deleteNotebookFromTree(notebookId);
}
};
// 初始化
Notebook.init = function() {
//-------------------
// 点击notebook
/*
$("#myNotebooks").on("click", "ul.folderBody li a", function() {
var notebookId = $(this).attr("notebookId");
Notebook.changeNotebook(notebookId);
});
*/
// min
$("#minNotebookList").on("click", "li", function() {
var notebookId = $(this).find("a").attr("notebookId");
Notebook.changeNotebook(notebookId);
});
//-------------------
// 右键菜单
function newNotebookListMenu() {
var me = this;
this.target = '';
this.menu = new gui.Menu();
this.addSub = new gui.MenuItem({
label: getMsg('Add sub notebook'),
click: function(e) {
Notebook.addChildNotebook(me.target);
}
});
this.rename = new gui.MenuItem({
label: getMsg('Rename'),
click: function(e) {
Notebook.updateNotebookTitle(me.target);
}
});
this.del = new gui.MenuItem({
label: getMsg('Delete'),
click: function(e) {
Notebook.deleteNotebook(me.target);
}
});
this.menu.append(this.addSub);
this.menu.append(this.rename);
this.menu.append(this.del);
// 导入菜单
var importMenus = Api.getImportMenus();
if(importMenus && importMenus.length) {
var importSubmenus = new gui.Menu();
for(var i = 0; i < importMenus.length; ++i) {
var clickCallback = importMenus[i].click;
if(clickCallback) {
importMenus[i].click = function() {
var notebookId = $(me.target).attr("notebookId");
var notebook = Notebook.getNotebook(notebookId);
clickCallback(notebook);
}
}
importSubmenus.append(new gui.MenuItem(importMenus[i]));
}
this.imports = new gui.MenuItem({
submenu: importSubmenus,
label: getMsg('Import notes')
});
this.menu.append(this.imports);
}
this.enable = function(name, ok) {
this[name].enabled = ok;
}
this.popup = function(e, target, isSearch) {
me.target = target;
var notebookId = $(target).attr("notebookId");
if(Notebook.isTrashNotebookId(notebookId)) {
newClearTrashMenuSys.popup(e);
return;
}
if(Notebook.isAllNotebookId(notebookId)) {
return;
}
var notebook = Notebook.cache[notebookId];
if(!notebook) {
return;
}
// 是否已公开为blog
/*
if(!notebook.IsBlog) {
items.push("unset2Blog");
} else {
items.push("set2Blog");
}
*/
// 是否还有笔记
if(Note.notebookHasNotes(notebookId)) {
this.del.enabled = false;
} else {
this.del.enabled = true;
}
if(isSearch) {
this.addSub.enabled = false;
} else {
this.addSub.enabled = true;
}
this.menu.popup(gui.getCurrentWindow(), e.originalEvent.x, e.originalEvent.y);
}
}
var newNotebookListMenuSys = new newNotebookListMenu();
// 清空回收站
function newClearTrashMenu() {
var me = this;
this.menu = new gui.Menu();
this.clear = new gui.MenuItem({
label: 'Clear trash',
click: function(e) {
Notebook.clearTrash();
}
});
this.menu.append(this.clear);
this.popup = function(e, target) {
this.menu.popup(gui.getCurrentWindow(), e.originalEvent.x, e.originalEvent.y);
}
}
var newClearTrashMenuSys = new newClearTrashMenu();
// 添加笔记本
$("#addNotebookPlus").click(function(e) {
e.stopPropagation();
Notebook.addNotebook();
});
// notebook setting
$("#notebookList").on("click", ".notebook-setting", function(e) {
e.preventDefault();
e.stopPropagation();
var $p = $(this).parent();
newNotebookListMenuSys.popup(e, $p);
});
$("#notebookList").on('contextmenu', 'li a', function(e) {
newNotebookListMenuSys.popup(e, $(this));
});
$("#notebookListForSearch").on('contextmenu', 'li a', function(e) {
newNotebookListMenuSys.popup(e, $(this), true);
});
$("#notebookListForSearch").on("click", ".notebook-setting", function(e) {
e.preventDefault();
e.stopPropagation();
var $p = $(this).parent();
newNotebookListMenuSys.popup(e, $p, true);
});
};