//------------------------------------ // 共享, notbeook, note //------------------------------------ // 默认共享notebook id Share.defaultNotebookId = "share0"; Share.defaultNotebookTitle = getMsg("defaultShare"); Share.sharedUserInfos = {}; // userId => {} // 在render时就创建, 以后复用之 Share.userNavs = {}; // userId => {"forList":html, "forNew":html} // 缓存都不要, 统一放在Note.cache中 // 放在这里, 只是为了debug, 分离 Share.notebookCache = {}; // notebooks 的cache Share.cache = {}; // note的cache // 分享的弹出框是note的 Share.dialogIsNote = true; // 设置缓存 note // 弃用 Share.setCache = function(note) { if(!note || !note.NoteId) { return; } Share.cache[note.NoteId] = note; }; /** * 我的共享notebooks
*/ // TODO 层级 // shareNotebooks = {userId => {}} Share.getNotebooksForNew = function(userId, notebooks) { var self = this; var navForNewNote = ""; var len = notebooks.length; for(var i = 0; i < len; ++i) { var notebook = notebooks[i]; notebook.IsShared = true; notebook.UserId = userId; self.notebookCache[notebook.NotebookId] = notebook; // notebook的cache也缓存一份, 为了显示标题 Notebook.cache[notebook.NotebookId] = notebook; var classes = ""; var subs = false; if(!isEmpty(notebook.Subs)) { log(11); log(notebook.Subs); var subs = self.getNotebooksForNew(userId, notebook.Subs); if(subs) { classes = "dropdown-submenu"; } } var eachForNew = ""; if(notebook.Perm) { var eachForNew = tt(''; } navForNewNote += eachForNew; } return navForNewNote; } Share.trees = {}; Share.renderShareNotebooks = function(sharedUserInfos, shareNotebooks) { var self = Share; if(isEmpty(sharedUserInfos)) { return; } if(!shareNotebooks || typeof shareNotebooks != "object" || shareNotebooks.length < 0) { shareNotebooks = {}; } var $shareNotebooks = $("#shareNotebooks"); // render每一个用户的share给我的笔记本, 之前先建一个默认共享 for(var i in sharedUserInfos) { var userInfo = sharedUserInfos[i]; var userNotebooksPre = shareNotebooks[userInfo.UserId] || []; userNotebooks = [{NotebookId: self.defaultNotebookId, Title: Share.defaultNotebookTitle}].concat(userNotebooksPre) self.notebookCache[self.defaultNotebookId] = userNotebooks[0]; var username = userInfo.Username || userInfo.Email; userInfo.Username = username; Share.sharedUserInfos[userInfo.UserId] = userInfo; var userId = userInfo.UserId; var header = tt('
  • ?
    ', userInfo.UserId, username); var friendId = "friendContainer_" + userId; var body = ''; $shareNotebooks.append(header + body + "
  • ") self.trees[userId] = $.fn.zTree.init($("#" + friendId), Notebook.getTreeSetting(true, true), userNotebooks); self.userNavs[userId] = {"forNew": self.getNotebooksForNew(userId, userNotebooksPre)}; log(self.userNavs); } $(".friend-notebooks").hover(function () { if (!$(this).hasClass("showIcon")) { $(this).addClass("showIcon"); } }, function() { $(this).removeClass("showIcon"); }); $(".friend-header i").click(function() { var $this = $(this); var $tree = $(this).parent().next(); if($tree.is(":hidden")) { $tree.slideDown("fast"); $this.removeClass("fa-angle-right fa-angle-down").addClass("fa-angle-down"); } else { $tree.slideUp("fast"); $this.removeClass("fa-angle-right fa-angle-down").addClass("fa-angle-right"); } }); //----------------------------- // contextmenu shareNotebooks // 删除共享笔记本 var shareNotebookMenu = { width: 180, items: [ { text: getMsg("deleteSharedNotebook"), icon: "", faIcon: "fa-trash-o", action: Share.deleteShareNotebook } ], onShow: applyrule, onContextMenu: beforeContextMenu, parent: "#shareNotebooks", children: ".notebook-item", }; function applyrule(menu) { return; } // 默认共享不能删除 function beforeContextMenu() { var notebookId = $(this).attr("notebookId"); return !Share.isDefaultNotebookId(notebookId); } var menuNotebooks = $("#shareNotebooks").contextmenu(shareNotebookMenu); //--------------------------- // contextmenu shareNotebooks // 删除某用户所有的 var shareUserMenu = { width: 180, items: [ { text: getMsg("deleteAllShared"), icon: "", faIcon: "fa-trash-o", action: Share.deleteUserShareNoteAndNotebook } ], parent: "#shareNotebooks", children: ".friend-header", }; var menuUser = $("#shareNotebooks").contextmenu(shareUserMenu); $(".friend-header").on("click", ".notebook-setting", function(e) { e.preventDefault(); e.stopPropagation(); var $p = $(this).parent(); menuUser.showMenu(e, $p); }); $("#shareNotebooks .notebook-item").on("click", ".notebook-setting", function(e) { e.preventDefault(); e.stopPropagation(); var $p = $(this).parent(); menuNotebooks.showMenu(e, $p); }); }; Share.isDefaultNotebookId = function(notebookId) { return Share.defaultNotebookId == notebookId; } // 转成共享的nav // for list和for new // 如果forNew没有, 那么还是保持我的nav Share.toggleToSharedNav = function(userId, notebookId) { var self = this; // for list $("#curNotebookForListNote").html(Share.notebookCache[notebookId].Title + '(' + Share.sharedUserInfos[userId].Username + ")"); Note.listIsIn(false, false, true); // for new // 如果该用户下有新建的note, 那么列出, 如果没有, 则列出我的笔记 var forNew = Share.userNavs[userId].forNew; if(forNew) { $("#notebookNavForNewSharedNote").html(forNew); // 新建之, 可能当前选择的没有权限新建. 此时需要得到第一个 var curNotebookId = ""; var curNotebookTitle = ""; if(Share.notebookCache[notebookId].Perm) { curNotebookId = notebookId; curNotebookTitle = Share.notebookCache[notebookId].Title; } else { // 得到第一个 var $f = $("#notebookNavForNewSharedNote li").eq(0); curNotebookId = $f.attr("notebookId"); curNotebookTitle = $f.find(".new-note-left").text(); } $("#curNotebookForNewSharedNote").html(curNotebookTitle + '(' + Share.sharedUserInfos[userId].Username + ')'); $("#curNotebookForNewSharedNote").attr("notebookId", curNotebookId); $("#curNotebookForNewSharedNote").attr("userId", userId); $("#newSharedNote").show(); $("#newMyNote").hide(); } else { // 展示出我的笔记 $("#newMyNote").show(); $("#newSharedNote").hide(); } // 隐藏tag $("#tagSearch").hide(); } // 刷新加载共享的笔记本, page.js调用 Share.firstRenderShareNote = function(ownerUserId, notebookId, noteId) { $("#myShareNotebooks .folderHeader").trigger("click"); // 这里, 可能这个笔记本是子笔记本, 所以先扩展 Notebook.expandNotebookTo(notebookId, ownerUserId); Share.changeNotebook(ownerUserId, notebookId, function(notes) { Note.renderNotes(notes); // 不push state Note.changeNoteForPjax(noteId, false, false); }); }; //改变笔记本 //0. 改变样式 //1. 改变note, 此时需要先保存 //2. ajax得到该notebook下的所有note //3. 使用Note.RederNotes() Share.changeNotebook = function(userId, notebookId, callback) { var me = this; Notebook.curNotebookId = notebookId; // 选中 var $t = $(tt('#friendContainer_? a[notebookId="?"]', userId, notebookId)); if($t.length == 0) { // 切换到默认共享中 // 表示是popstate的默认共享笔记本下 Notebook.selectNotebook($(tt('#friendContainer_? a[notebookId="?"]', userId, me.defaultNotebookId))); notebookId = me.defaultNotebookId; } else { Notebook.selectNotebook($t); } // 改变nav!!!! TODO Share.toggleToSharedNav(userId, notebookId); // 1 Note.curChangedSaveIt(); // 2 先清空所有 Note.clearAll(); var url = "/share/listShareNotes"; var param = {userId: userId}; if(!Share.isDefaultNotebookId(notebookId)) { param.notebookId = notebookId; } // 2 得到笔记本 // 这里可以缓存起来, note按notebookId缓存 ajaxGet(url, param, function(ret) { // note 导航 // // 如果是特定笔记本下的notes, 那么传过来的没有权限信息, 此时权限由notebookId决定 if(param.notebookId) { } if(callback) { callback(ret); } else { Note.renderNotes(ret, false, true); // 渲染第一个 // 这里, 有点小复杂, 还要判断权限... if(!isEmpty(ret)) { // 定位 Note.changeNoteForPjax(ret[0].NoteId, true, false); } else { } } }); } // 是否有更新权限 // called by Note Share.hasUpdatePerm = function(noteId) { var note = Share.cache[noteId]; if(!note) { note = Note.getNote(noteId); } if(!note || !note.Perm) { return false; } return true; } //--------------------------- // 我删除别人共享给我的笔记本 Share.deleteShareNotebook = function(target) { if(confirm("Are you sure to delete it?")) { var notebookId = $(target).attr("notebookId"); var fromUserId = $(target).closest(".friend-notebooks").attr("fromUserId"); // 谁共享给了我 from ajaxGet("/share/DeleteShareNotebookBySharedUser", {notebookId: notebookId, fromUserId: fromUserId}, function(ret) { if(ret) { $(target).parent().remove(); } }); } } Share.deleteShareNote = function(target) { var noteId = $(target).attr("noteId"); var fromUserId = $(target).attr("fromUserId"); // 谁共享给了我 from ajaxGet("/share/DeleteShareNoteBySharedUser", {noteId: noteId, fromUserId: fromUserId}, function(ret) { if(ret) { $(target).remove(); } }); } Share.deleteUserShareNoteAndNotebook = function(target) { if(confirm("Are you sure to delete all shared notebooks and notes?")) { var fromUserId = $(target).attr("fromUserId"); // 谁共享给了我 from ajaxGet("/share/deleteUserShareNoteAndNotebook", {fromUserId: fromUserId}, function(ret) { if(ret) { $(target).parent().remove(); } }); } } // 新建shared note Share.changeNotebookForNewNote = function(notebookId) { // 改变nav for list, for new Notebook.selectNotebook($(tt('#shareNotebooks [notebookId="?"]', notebookId))); var userId = Share.notebookCache[notebookId].UserId; Share.toggleToSharedNav(userId, notebookId); // 得到笔记本 var url = "/share/listShareNotes"; var param = {userId: userId, notebookId: notebookId}; // 2 得到笔记本 // 这里可以缓存起来, note按notebookId缓存 ajaxGet(url, param, function(ret) { // note 导航 Note.renderNotes(ret, true, true); }); } // 删除笔记, 我有权限, 且是我创建的笔记 Share.deleteSharedNote = function(target, contextmenuItem) { Note.deleteNote(target, contextmenuItem, true); }; Share.copySharedNote = function(target, contextmenuItem) { Note.copyNote(target, contextmenuItem, true); }; Share.contextmenu = null; Share.initContextmenu = function(notebooksCopy) { if(Share.contextmenu) { Share.contextmenu.destroy(); } //--------------------- // context menu //--------------------- var noteListMenu = { width: 180, items: [ { text: getMsg("copyToMyNotebook"), alias: "copy", faIcon: "fa-copy", type: "group", width: 180, items: notebooksCopy }, { type: "splitLine" }, { text: getMsg("delete"), alias: "delete", icon: "", faIcon: "fa-trash-o", action: Share.deleteSharedNote } ], onShow: applyrule, parent: "#noteItemList", children: ".item-shared", } function applyrule(menu) { var noteId = $(this).attr("noteId"); var note = Note.getNote(noteId); var items = []; if(Note.inBatch || !note) { items.push("delete"); } // 批量操作时, 不让删除 if(note && !(note.Perm && note.CreatedUserId == UserInfo.UserId)) { items.push("delete"); } // 不是自己的创建的不能删除 menu.applyrule({ name: "target...", disable: true, items: items }); } Share.contextmenu = $("#noteItemList .item-shared").contextmenu(noteListMenu); }; $(function() { // note setting $("#noteItemList").on("click", ".item-shared .item-setting", function(e) { e.preventDefault(); e.stopPropagation(); // 得到ID var $p = $(this).parent(); Share.contextmenu.showMenu(e, $p); }); //--------------------------- // 新建笔记 // 1. 直接点击新建 OR // 2. 点击nav for new note $("#newSharedNoteBtn").click(function() { var notebookId = $("#curNotebookForNewSharedNote").attr('notebookId'); var userId = $("#curNotebookForNewSharedNote").attr('userId'); Note.newNote(notebookId, true, userId); }); $("#newShareNoteMarkdownBtn").click(function() { var notebookId = $("#curNotebookForNewSharedNote").attr('notebookId'); var userId = $("#curNotebookForNewSharedNote").attr('userId'); Note.newNote(notebookId, true, userId, true); }); $("#notebookNavForNewSharedNote").on("click", "li div", function() { var notebookId = $(this).parent().attr("notebookId"); var userId = $(this).parent().attr("userId"); if($(this).text() == "M") { Note.newNote(notebookId, true, userId, true); } else { Note.newNote(notebookId, true, userId); } }); //------------------ // 添加共享 $("#leanoteDialogRemote").on("click", ".change-perm", function() { var self = this; var perm = $(this).attr("perm"); var noteOrNotebookId = $(this).attr("noteOrNotebookId"); var toUserId = $(this).attr("toUserId"); var toHtml = getMsg("writable"); var toPerm = "1"; if(perm == "1") { toHtml = getMsg("readOnly"); toPerm = "0"; } var url = "/share/updateShareNotebookPerm"; var param = {perm: toPerm, toUserId: toUserId}; if(Share.dialogIsNote) { url = "/share/updateShareNotePerm"; param.noteId = noteOrNotebookId; } else { param.notebookId = noteOrNotebookId; } ajaxGet(url, param, function(ret) { if(ret) { $(self).html(toHtml); $(self).attr("perm", toPerm); } }); }); $("#leanoteDialogRemote").on("click", ".delete-share", function() { var self = this; var noteOrNotebookId = $(this).attr("noteOrNotebookId"); var toUserId = $(this).attr("toUserId"); var url = "/share/deleteShareNotebook"; var param = {toUserId: toUserId}; if(Share.dialogIsNote) { url = "/share/deleteShareNote"; param.noteId = noteOrNotebookId; } else { param.notebookId = noteOrNotebookId; } ajaxGet(url, param, function(ret) { if(ret) { $(self).parent().parent().remove(); } }); }); // 添加共享 var seq = 1; $("#leanoteDialogRemote").on("click", "#addShareNotebookBtn", function() { seq++; var tpl = '#'; tpl += ''; tpl += ' '; tpl += ''; tpl += ' '; tpl += ""; $("#shareNotebookTable tbody").prepend(tpl); $("#tr" + seq + " #friendsEmail").focus(); }); //------------------- // 发送邀请邮件 $("#registerEmailBtn").click(function() { var content = $("#emailContent").val(); var toEmail = $("#toEmail").val(); if(!content) { showAlert("#registerEmailMsg", getMsg("emailBodyRequired"), "danger"); return; } post("/user/sendRegisterEmail", {content: content, toEmail: toEmail}, function(ret) { showAlert("#registerEmailMsg", getMsg("sendSuccess"), "success"); hideDialog2("#sendRegisterEmailDialog", 1000); }, this); }); }); // trSeq 1,2,3... function addShareNoteOrNotebook(trSeq) { var trId = "#tr" + trSeq; var id = Share.dialogNoteOrNotebookId; var emails = isEmailFromInput(trId + " #friendsEmail", "#shareMsg", getMsg("inputFriendEmail")); if(!emails) { return; } var shareNotePerm = $(trId + ' input[name="perm' + trSeq + '"]:checked').val() || 0; var perm = shareNotePerm; // emails = emails.split(";"); var url = "/share/addShareNote"; var data = {noteId: id, emails: [emails], perm: shareNotePerm}; if(!Share.dialogIsNote) { url = "/share/addShareNotebook"; data = {notebookId: id, emails: [emails], perm: shareNotePerm}; } hideAlert("#shareMsg"); post(url, data, function(ret) { var ret = ret[emails]; if(ret) { // 成功 // 成功了则去掉输入框 if(ret.Ok) { var tpl = tt('?', '#'); tpl += tt('?', emails); tpl += tt('?', id, perm, ret.Id, !perm || perm == '0' ? getMsg("readOnly") : getMsg("writable")); tpl += tt('' + getMsg("delete") +'', id, ret.Id); $(trId).html(tpl); } else { var shareUrl = UrlPrefix + '/register?iu=' + UserInfo.Username; showAlert("#shareMsg", getMsg('friendNotExits', [getMsg("app"), '']) + '
    ' + getMsg("sendInviteEmailToYourFriend") + ', ' + getMsg("send"), "warning"); } } }, trId + " .btn-success"); } // 发送邀请邮件 function sendRegisterEmail(email) { showDialog2("#sendRegisterEmailDialog", {postShow: function() { $("#emailContent").val(getMsg("inviteEmailBody", [UserInfo.Username, getMsg("app")])); setTimeout(function() { $("#emailContent").focus(); }, 500); $("#toEmail").val(email); }}); } function deleteShareNoteOrNotebook(trSeq) { $("#tr" + trSeq).remove(); }