init
This commit is contained in:
app
controllers
AuthController.goBaseController.goBlogController.goFileController.goIndexController.goMobileController.goNoteContentHistoryController.goNoteController.goNotebookController.goOauthController.goShareController.goUserController.goinit.go
db
i18n
info
BlogInfo.goNoteInfo.goNotebookInfo.goREADME.mdRe.goShareNotebookNoteInfo.goSuggestionInfo.goTagInfo.goTokenInfo.goUserInfo.gocommon.go
init.golea
release
routes
service
AuthService.goBlogService.goNoteContentHistoryService.goNoteService.goNotebookService.goPwdService.goREADME.mdShareService.goSuggestionService.goTagService.goTokenService.goTrashService.goUserService.gocommon.goinit.go
test
tmp
views
App
Blog
Errors
File
Home
find_password.htmlfind_password2.htmlfind_password2_timeout.htmlfooter.htmlheader.htmlheader_box.htmlindex.htmllogin.htmlmodal.htmlregister.html
Mobile
Note
Notebook
Oauth
Share
User
conf
messages
public
css
blog
blog.cssblog_daqi.cssblog_daqi.lessblog_default.cssblog_default.lessblog_default2.cssblog_left_fixed.cssblog_left_fixed.less
bootstrap-theme.cssbootstrap-theme.min.cssbootstrap.cssbootstrap.min.cssbootstrap修改editor.csseditor.lessfont-awesome-4.0.3
css
fonts
FontAwesome.otffontawesome-webfont.eotfontawesome-webfont.svgfontawesome-webfont.ttffontawesome-webfont.woff
less
bordered-pulled.lesscore.lessfixed-width.lessfont-awesome.lessicons.lesslarger.lesslist.lessmixins.lesspath.lessrotated-flipped.lessspinning.lessstacked.lessvariables.less
scss
theme
fonts
open-sans2
DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woffcJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woffk3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woffxjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff
weibo
images
favicon.icofavicon_ever.ico
home
leanote
logo-100.giflogo-120.giflogo-20-a-6.pnglogo-32-a-5.pnglogo-32-a-7.pnglogo-32.pnglogo-60-a-6.pnglogo-60.gifold-preview.png
loading-24.gifloading-30.gifloading-32.gifloading-a-20-2.gifloading-a-20.gifloading-a-24.giflogo.pngnoise.pngoutofcode.pngslider
js
ZeroClipboard
all.jsapp
blog
note-min.jsnote.jsnotebook-min.jsnotebook.jspage-min.jspage.jsshare-min.jsshare.jstag-min.jstag.jscontextmenu
ever
i18n
jQuery-slimScroll-1.3.0
jquery-1.9.0.min.jsjquery-cookie-min.jsjquery-cookie.jsobject_id-min.jsobject_id.jsmdeditor
css
bootstrap-responsive.cssbootstrap.cssindex2.html
smoothness
images
animated-overlay.gifui-bg_flat_0_aaaaaa_40x100.pngui-bg_flat_75_ffffff_40x100.pngui-bg_glass_55_fbf9ee_1x400.pngui-bg_glass_65_ffffff_1x400.pngui-bg_glass_75_dadada_1x400.pngui-bg_glass_75_e6e6e6_1x400.pngui-bg_glass_95_fef1ec_1x400.pngui-bg_highlight-soft_75_cccccc_1x100.pngui-icons_222222_256x240.pngui-icons_2e83ff_256x240.pngui-icons_454545_256x240.pngui-icons_888888_256x240.pngui-icons_cd0a0a_256x240.png
jquery-ui-1.10.2.custom.cssjquery-ui-1.10.2.custom.min.csseditor
Markdown.Extra-min.jsMarkdown.Extra.jscss_browser_selector.jseditor-min.jseditor.csseditor.jseditor2.csseditor2.js
google-code-prettify
lang-apollo.jslang-basic.jslang-clj.jslang-css.jslang-dart.jslang-erlang.jslang-go.jslang-hs.jslang-lisp.jslang-llvm.jslang-lua.jslang-matlab.jslang-ml.jslang-mumps.jslang-n.jslang-pascal.jslang-proto.jslang-r.jslang-rd.jslang-scala.jslang-sql.jslang-tcl.jslang-tex.jslang-vb.jslang-vhdl.jslang-wiki.jslang-xq.jslang-yaml.jsmine.cssprettify.cssprettify.jsrun_prettify.js
jquery.autosize-min.jsjquery.waitforimages-min.jsjquery.waitforimages.jsmathJax-min.jsmathJax.jsmd-helppagedown
LICENSE.txtMarkdown.Converter-min.jsMarkdown.Converter.jsMarkdown.Editor-min.jsMarkdown.Editor.jsMarkdown.Sanitizer-min.jsMarkdown.Sanitizer.jsREADME.txt
scrollLink-min.jsscrollLink.jsunderscore-min.jsunderscore.jsdemo
local
node-pagedown.jspackage.jsonresources
wmd-buttons.pngfont-awesome
css
font
FontAwesome.otffontawesome-webfont.eotfontawesome-webfont.svgfontawesome-webfont.ttffontawesome-webfont.woff
scss
img
mobile
tinymce
classes
AddOnManager.jsCompat.jsEditor.jsEditorCommands.jsEditorManager.jsEnterKey.jsEnv.jsFocusManager.jsForceBlocks.jsFormatter.jsLegacyInput.jsShortcuts.jsUndoManager.jsWindowManager.js
index.htmljquery.tinymce.min.jsdom
ControlSelection.jsDOMUtils.jsDomQuery.jsEventUtils.jsRange.jsRangeUtils.jsScriptLoader.jsSelection.jsSerializer.jsSizzle.jQuery.jsSizzle.jsTreeWalker.jsTridentSelection.js
html
jquery.tinymce.jsui
AbsoluteLayout.jsButton.jsButtonGroup.jsCheckbox.jsCollection.jsColorButton.jsComboBox.jsContainer.jsControl.jsDomUtils.jsDragHelper.jsElementPath.jsFactory.jsFieldSet.jsFilePicker.jsFitLayout.jsFlexLayout.jsFloatPanel.jsFlowLayout.jsForm.jsFormItem.jsFormatControls.jsGridLayout.jsIframe.jsKeyboardNavigation.jsLabel.jsLayout.jsListBox.jsMenu.jsMenuBar.jsMenuButton.jsMenuItem.jsMessageBox.jsMovable.jsPanel.jsPanelButton.jsPath.jsRadio.jsResizable.jsResizeHandle.jsScrollable.jsSelector.jsSpacer.jsSplitButton.jsStackLayout.jsTabPanel.jsTextBox.jsThrobber.jsToolbar.jsTooltip.jsWidget.jsWindow.js
util
langs
plugins
advlist
anchor
autolink
autoresize
autosave
bbcode
charmap
code
codemirror
CodeMirror
.gitattributes.gitignore.travis.ymlAUTHORSCONTRIBUTING.mdLICENSEREADME.mdpackage.json
LICENSE.txtREADME.txtaddon
comment
dialog
display
edit
fold
hint
anyword-hint.jscss-hint.jshtml-hint.jsjavascript-hint.jspig-hint.jspython-hint.jsshow-hint.cssshow-hint.jssql-hint.jsxml-hint.js
lint
merge
mode
runmode
scroll
search
selection
tern
wrap
bin
bower.jsondemo
activeline.htmlanywordhint.htmlbidi.htmlbtree.htmlbuffers.htmlchangemode.htmlclosebrackets.htmlclosetag.htmlcomplete.htmlemacs.htmlfolding.htmlfullscreen.htmlhardwrap.htmlhtml5complete.htmlindentwrap.htmllint.htmlloadmode.htmlmarker.htmlmarkselection.htmlmatchhighlighter.htmlmatchtags.htmlmerge.htmlmultiplex.htmlmustache.htmlplaceholder.htmlpreview.htmlresize.htmlrunmode.htmlsearch.htmlspanaffectswrapping_shim.htmltern.htmltheme.htmltrailingspace.htmlvariableheight.htmlvim.htmlvisibletabs.htmlwidget.htmlxmlcomplete.html
doc
activebookmark.jscompress.htmldocs.cssinternals.htmllogo.pnglogo.svgmanual.htmlrealworld.htmlreleases.htmlreporting.htmlupgrade_v2.2.htmlupgrade_v3.html
index.htmlkeymap
lib
mode
apl
asterisk
clike
clojure
cobol
coffeescript
commonlisp
css
d
diff
dtd
ecl
eiffel
erlang
fortran
gas
gfm
gherkin
go
groovy
haml
haskell
haxe
htmlembedded
htmlmixed
http
index.htmljade
javascript
jinja2
julia
less
livescript
lua
markdown
meta.jsmirc
mllike
nginx
ntriples
octave
pascal
pegjs
perl
php
pig
properties
python
q
r
rpm
rst
ruby
rust
sass
scheme
shell
sieve
smalltalk
smarty
smartymixed
sparql
sql
stex
tcl
tiddlywiki
tiki
toml
turtle
vb
vbscript
velocity
verilog
xml
xquery
yaml
z80
test
comment_test.jsdoc_test.jsdriver.jsemacs_test.jsindex.html
lint
mode_test.cssmode_test.jsphantom_driver.jsrun.jssearch_test.jstest.jsvim_test.jstheme
3024-day.css3024-night.cssambiance-mobile.cssambiance.cssbase16-dark.cssbase16-light.cssblackboard.csscobalt.csseclipse.csselegant.csserlang-dark.csslesser-dark.cssmbo.cssmidnight.cssmonokai.cssneat.cssnight.cssparaiso-dark.cssparaiso-light.csspastel-on-dark.cssrubyblue.csssolarized.cssthe-matrix.csstomorrow-night-eighties.csstwilight.cssvibrant-ink.cssxq-dark.cssxq-light.css
img
langs
plugin.jsplugin.min.jssource.htmlcodesyntax
compat3x
contextmenu
directionality
emoticons
img
smiley-cool.gifsmiley-cry.gifsmiley-embarassed.gifsmiley-foot-in-mouth.gifsmiley-frown.gifsmiley-innocent.gifsmiley-kiss.gifsmiley-laughing.gifsmiley-money-mouth.gifsmiley-sealed.gifsmiley-smile.gifsmiley-surprised.gifsmiley-tongue-out.gifsmiley-undecided.gifsmiley-wink.gifsmiley-yell.gif
plugin.jsplugin.min.jsexample
example_dependency
fullpage
fullscreen
hr
image
importcss
insertdatetime
layer
leanote_code
leanote_image
leanote_nav
legacyoutput
link
lists
media
nonbreaking
noneditable
pagebreak
paste
preview
print
save
searchreplace
spellchecker
tabfocus
table
template
textcolor
upload_image
visualblocks
css
img
address.gifarticle.gifaside.gifblockquote.gifdiv.giffigure.gifh1.gifh2.gifh3.gifh4.gifh5.gifh6.gifhgroup.gifol.gifp.gifpre.gifsection.giful.gif
plugin.jsplugin.min.jsvisualchars
wordcount
skins
custom
content.inline.min.csscontent.min.css
fonts
icomoon-small.eoticomoon-small.svgicomoon-small.ttficomoon-small.wofficomoon.eoticomoon.svgicomoon.ttficomoon.woffreadme.md
img
skin.ie7.min.cssskin.jsonskin.min.csslightgray
AbsoluteLayout.lessAnimations.lessButton.lessButtonGroup.lessCheckbox.lessColorButton.lessComboBox.lessContainer.lessContent.Inline.lessContent.Objects.lessContent.lessFieldSet.lessFitLayout.lessFloatPanel.lessFlowLayout.lessIcons.Ie7.lessIcons.lessIframe.lessLabel.lessListBox.lessMenu.lessMenuBar.lessMenuButton.lessMenuItem.lessMixins.lessPanel.lessPath.lessRadio.lessReset.lessResizeHandle.lessScrollable.lessSpacer.lessSplitButton.lessStackLayout.lessTabPanel.lessTextBox.lessThrobber.lessTinyMCE.lessToolTip.lessVariables.lessWindow.lesscontent.inline.min.csscontent.min.css
fonts
readme.mdtinymce-small.dev.svgtinymce-small.eottinymce-small.svgtinymce-small.ttftinymce-small.wofftinymce.dev.svgtinymce.eottinymce.svgtinymce.ttftinymce.woff
img
skin.dev.lessskin.ie7.lessskin.ie7.min.cssskin.lessskin.min.cssthemes
modern
upload
52d3e8ac99c37b7f0d000001
5368c9fc99c37b095a000006
images
594
public/js/app/notebook.js
Normal file
594
public/js/app/notebook.js
Normal file
@ -0,0 +1,594 @@
|
||||
Notebook.curNotebookId = "";
|
||||
Notebook.cache = {}; // notebookId => {};
|
||||
Notebook.notebooks = []; // 按次序
|
||||
// <li role="presentation"><a role="menuitem" tabindex="-1" href="#">CSS</a></li>
|
||||
Notebook.notebookNavForListNote = ""; // html 为了note list上面和新建时的ul
|
||||
Notebook.notebookNavForNewNote = ""; // html 为了note list上面和新建时的ul
|
||||
|
||||
// 设置缓存
|
||||
Notebook.setCache = function(notebook) {
|
||||
var notebookId = notebook.NotebookId;
|
||||
if(!notebookId) {
|
||||
return;
|
||||
}
|
||||
if(!Notebook.cache[notebookId]) {
|
||||
Notebook.cache[notebookId] = {};
|
||||
}
|
||||
$.extend(Notebook.cache[notebookId], notebook);
|
||||
}
|
||||
|
||||
Notebook.getCurNotebookId = function() {
|
||||
return Notebook.curNotebookId;
|
||||
};
|
||||
|
||||
// 得到notebook标题, 给note显示其notebook标题用
|
||||
// called by Note
|
||||
Notebook.getNotebook = function(notebookId) {
|
||||
return Notebook.cache[notebookId];
|
||||
}
|
||||
// called by Note
|
||||
Notebook.getNotebookTitle = function(notebookId) {
|
||||
var notebook = Notebook.cache[notebookId];
|
||||
if(notebook) {
|
||||
return notebook.Title;
|
||||
} else {
|
||||
return "未知";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的notebooks
|
||||
<ul class="folderBody" id="notebookList">
|
||||
<li><a class="active">所有</a></li>
|
||||
<li><a class="active">Hadoop</a></li>
|
||||
<li><a>August 13, 2013</a></li>
|
||||
</ul>
|
||||
*/
|
||||
// TODO 层级
|
||||
Notebook.allNotebookId = "0";
|
||||
Notebook.trashNotebookId = "-1";
|
||||
Notebook.curNotebookIsTrashOrAll = function() {
|
||||
return Notebook.curNotebookId == Notebook.trashNotebookId || Notebook.curNotebookId == Notebook.allNotebookId ;
|
||||
}
|
||||
Notebook.renderNotebooks = function(notebooks) {
|
||||
if(!notebooks || typeof notebooks != "object" || notebooks.length < 0) {
|
||||
notebooks = [];
|
||||
}
|
||||
|
||||
notebooks = [{NotebookId: Notebook.allNotebookId, Title: getMsg("all")}].concat(notebooks);
|
||||
notebooks.push({NotebookId: Notebook.trashNotebookId, Title: getMsg("trash")});
|
||||
Notebook.notebooks = notebooks; // 缓存之
|
||||
|
||||
var $notebookList = $("#notebookList");
|
||||
var nav = "";
|
||||
for(var i in notebooks) {
|
||||
var notebook = notebooks[i];
|
||||
Notebook.cache[notebook.NotebookId] = notebook;
|
||||
var classes = "";
|
||||
if(i == 0) {
|
||||
classes = "active";
|
||||
Notebook.curNotebookId = notebook.NotebookId;
|
||||
}
|
||||
$notebookList.append(t('<li><a class="?" notebookId="?">?</a></li>', classes, notebook.NotebookId, notebook.Title))
|
||||
}
|
||||
|
||||
// 渲染nav
|
||||
Notebook.renderNav();
|
||||
|
||||
// 渲染第一个notebook作为当前
|
||||
Notebook.changeNotebookNavForNewNote(notebooks[0].NotebookId);
|
||||
}
|
||||
|
||||
// RenderNotebooks调用,
|
||||
// nav 为了新建, 快速选择, 移动笔记
|
||||
// 这些在添加,修改,删除notebooks都要变动!!!
|
||||
Notebook.renderNav = function(nav) {
|
||||
var navForListNote = "";
|
||||
var navForNewNote = "";
|
||||
var navForMoveNote = "";
|
||||
var len = Notebook.notebooks.length-1;
|
||||
var contextmenu = [];
|
||||
for(var i in Notebook.notebooks) {
|
||||
var notebook = Notebook.notebooks[i];
|
||||
var each = t('<li role="presentation"><a role="menuitem" tabindex="-1" href="#" notebookId="?">?</a></li>', notebook.NotebookId, notebook.Title);
|
||||
var eachForNew = t('<li role="presentation" class="clearfix"><div class="new-note-left pull-left" title="为该笔记本新建笔记" href="#" notebookId="?">?</div><div title="为该笔记本新建markdown笔记" class="new-note-right pull-left" notebookId="?">Markdown</div></li>', notebook.NotebookId, notebook.Title, notebook.NotebookId);
|
||||
navForListNote += each;
|
||||
if(i != 0 && i != len) {
|
||||
navForMoveNote += each;
|
||||
navForNewNote += eachForNew;
|
||||
}
|
||||
}
|
||||
|
||||
$("#notebookNavForListNote").html(navForListNote);
|
||||
$("#notebookNavForNewNote").html(navForNewNote);
|
||||
$("#notebookNavForMoveNote").html(navForMoveNote);
|
||||
}
|
||||
|
||||
// 修改,添加,删除notebook后调用
|
||||
// 改变nav
|
||||
// 直接从html中取!
|
||||
Notebook.changeNav = function() {
|
||||
var navForListNote = "";
|
||||
var navForNewNote = "";
|
||||
|
||||
var i = 0;
|
||||
var $list = $("#notebookList li a");
|
||||
var len = $list.length - 1;
|
||||
$list.each(function() {
|
||||
var notebookId = $(this).attr("notebookId");
|
||||
var notebook = Notebook.cache[notebookId];
|
||||
var each = t('<li role="presentation"><a role="menuitem" tabindex="-1" href="#" notebookId="?">?</a></li>', notebook.NotebookId, notebook.Title);
|
||||
var eachForNew = t('<li role="presentation" class="clearfix"><div class="new-note-left pull-left" title="为该笔记本新建笔记" href="#" notebookId="?">?</div><div title="为该笔记本新建markdown笔记" class="new-note-right pull-left" notebookId="?">Markdown</div></li>', notebook.NotebookId, notebook.Title, notebook.NotebookId);
|
||||
|
||||
navForListNote += each;
|
||||
var isActive = $(this).hasClass('active'); // 万一修改的是已选择的, 那么...
|
||||
if(isActive) {
|
||||
$("#curNotebookForListNote").html(notebook.Title);
|
||||
}
|
||||
if(i != 0 && i != len) {
|
||||
navForNewNote += eachForNew;
|
||||
if(isActive) {
|
||||
$("#curNotebookForNewNote").html(notebook.Title);
|
||||
}
|
||||
}
|
||||
i++;
|
||||
});
|
||||
|
||||
$("#notebookNavForListNote").html(navForListNote);
|
||||
$("#notebookNavForNewNote").html(navForNewNote);
|
||||
$("#notebookNavForMoveNote").html(navForNewNote);
|
||||
|
||||
// 移动, 复制重新来, 因为nav变了, 移动至-----的notebook导航也变了
|
||||
Note.initContextmenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的共享notebooks
|
||||
<div id="shareNotebooks">
|
||||
<div class="folderNote closed">
|
||||
<div class="folderHeader">
|
||||
<a>
|
||||
<h1>
|
||||
<i class="fa fa-angle-right"></i>
|
||||
Life's</h1>
|
||||
</a>
|
||||
</div>
|
||||
<ul class="folderBody">
|
||||
<li><a>Hadoop</a></li>
|
||||
<li><a>Node webkit</a></li>
|
||||
<li><a>Hadoop</a></li>
|
||||
<li><a>Node webkit</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
*/
|
||||
// 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 = t('<div class="folderNote closed"><div class="folderHeader"><a><h1 title="? 的共享"><i class="fa fa-angle-right"></i>?</h1></a></div>', username, username);
|
||||
var body = '<ul class="folderBody">';
|
||||
for(var j in userNotebooks.ShareNotebooks) {
|
||||
var notebook = userNotebooks.ShareNotebooks[j];
|
||||
body += t('<li><a notebookId="?">?</a></li>', notebook.NotebookId, notebook.Title)
|
||||
}
|
||||
body += "</ul>";
|
||||
|
||||
$shareNotebooks.append(header + body + "</div>")
|
||||
}
|
||||
}
|
||||
|
||||
// 左侧导航, 选中某个notebook
|
||||
Notebook.selectNotebook = function(target) {
|
||||
$("#notebook li a").removeClass("active");
|
||||
$(target).addClass("active");
|
||||
};
|
||||
|
||||
// 新建笔记导航
|
||||
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.toggleToMyNav();
|
||||
|
||||
// 1
|
||||
Notebook.selectNotebook($(t('#notebookList [notebookId="?"]', notebookId)));
|
||||
|
||||
var notebook = Notebook.cache[notebookId];
|
||||
|
||||
if(!notebook) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 2
|
||||
$("#curNotebookForListNote").html(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()
|
||||
Notebook.changeNotebook = function(notebookId) {
|
||||
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)) { // 万一真的是没有呢?
|
||||
Note.renderNotesAndFirstOneContent(cacheNotes);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
cacheNotes = Note.getNotesByNotebookId(notebookId);
|
||||
if(!isEmpty(cacheNotes)) { // 万一真的是没有呢?
|
||||
Note.renderNotesAndFirstOneContent(cacheNotes);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 2 得到笔记本
|
||||
// 这里可以缓存起来, note按notebookId缓存
|
||||
ajaxGet(url, param, Note.renderNotesAndFirstOneContent);
|
||||
}
|
||||
|
||||
// 是否是当前选中的notebookId
|
||||
// 还包括共享
|
||||
// called by Note
|
||||
Notebook.isCurNotebook = function(notebookId) {
|
||||
return $(t('#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);
|
||||
Notebook.curNotebookId = notebookId;
|
||||
|
||||
var url = "/note/ListNotes/";
|
||||
var param = {notebookId: notebookId};
|
||||
|
||||
// 2 得到笔记本
|
||||
// 这里可以缓存起来, note按notebookId缓存
|
||||
ajaxGet(url, param, function(ret) {
|
||||
// note 导航
|
||||
Note.renderNotes(ret, 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("blog/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 notebookTitle = $(target).text();
|
||||
var id = "editNotebookTitle";
|
||||
$(target).html(t('<input type="text" value="?" everValue="?" id="?" notebookId="?"/>', notebookTitle, notebookTitle, id, $(target).attr("notebookId")));
|
||||
$("#" + id).focus();
|
||||
}
|
||||
Notebook.doUpdateNotebookTitle = function() {
|
||||
var title = $(this).val();
|
||||
var everTitle = $(this).attr("everTitle");
|
||||
var notebookId = $(this).attr("notebookId");
|
||||
|
||||
if(!title) {
|
||||
title = everTitle;
|
||||
}
|
||||
$(this).parent().html(title);
|
||||
|
||||
if(title != everTitle) {
|
||||
ajaxPost("/notebook/updateNotebookTitle", {notebookId: notebookId, title: title}, function(ret) {
|
||||
// 修改缓存
|
||||
Notebook.cache[notebookId].Title = title;
|
||||
// 改变nav
|
||||
Notebook.changeNav();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//-----------
|
||||
// 添加笔记本
|
||||
// 1 确保是展开的
|
||||
// 2 在所有后面添加<li></li>
|
||||
Notebook.addNotebookSeq = 1; // inputId
|
||||
Notebook.addNotebook = function() {
|
||||
if($("#myNotebooks").hasClass("closed")) {
|
||||
$("#myNotebooks .folderHeader").trigger("click");
|
||||
}
|
||||
var inputId = "newNotebookInput" + Notebook.addNotebookSeq;
|
||||
Notebook.addNotebookSeq++;
|
||||
$("#notebookList li").eq(0).after(t('<li><a><input id="?"/></a></li>', inputId));
|
||||
|
||||
$("#" + inputId).focus();
|
||||
|
||||
// 回车调用blur
|
||||
enterBlur("#" + inputId);
|
||||
$("#" + inputId).blur(function() {
|
||||
// 为防多次发生blur
|
||||
$(this).unbind("blur");
|
||||
|
||||
var title = $(this).val();
|
||||
if(!title) {
|
||||
$(this).parent().parent().remove();
|
||||
} else {
|
||||
// 添加之
|
||||
var notebookId = getObjectId();
|
||||
var $a = $(this).parent();
|
||||
ajaxPost("/notebook/addNotebook", {notebookId: notebookId, title: title}, function(ret) {
|
||||
if(ret.NotebookId) {
|
||||
Notebook.cache[ret.NotebookId] = ret;
|
||||
$a.attr("notebookId", notebookId);
|
||||
$a.html(title);
|
||||
// 选中之
|
||||
Notebook.changeNotebook(notebookId);
|
||||
|
||||
// 改变nav
|
||||
Notebook.changeNav();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//-------------
|
||||
// 删除
|
||||
Notebook.deleteNotebook = function(target) {
|
||||
var notebookId = $(target).attr("notebookId");
|
||||
if(!notebookId) {
|
||||
return;
|
||||
}
|
||||
|
||||
ajaxGet("/notebook/deleteNotebook", {notebookId: notebookId}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
$(target).parent().remove();
|
||||
delete Notebook.cache[notebookId];
|
||||
// 改变nav
|
||||
Notebook.changeNav();
|
||||
} else {
|
||||
alert(ret.Msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(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);
|
||||
});
|
||||
|
||||
//-------------------
|
||||
// 右键菜单
|
||||
var notebookListMenu = {
|
||||
width: 150,
|
||||
items: [
|
||||
{ text: "分享给好友", alias: 'shareToFriends', icon: "", faIcon: "fa-share-square-o", action: Notebook.listNotebookShareUserInfo},
|
||||
{ type: "splitLine" },
|
||||
{ text: "公开为博客", alias: 'set2Blog', icon: "", action: Notebook.setNotebook2Blog },
|
||||
{ text: "取消公开为博客", alias: 'unset2Blog', icon: "", action: Notebook.setNotebook2Blog }, // Unset
|
||||
{ type: "splitLine" },
|
||||
{ text: "重命名", icon: "", action: Notebook.updateNotebookTitle },
|
||||
{ text: "删除", icon: "", alias: 'delete', faIcon: "fa-trash-o", action: Notebook.deleteNotebook }
|
||||
],
|
||||
onShow: applyrule,
|
||||
onContextMenu: beforeContextMenu,
|
||||
parent: "#notebookList ",
|
||||
children: "li a"
|
||||
}
|
||||
|
||||
// 修改笔记本标题, blur后修改标题之
|
||||
enterBlur("#notebookList", "input#editNotebookTitle");
|
||||
$("#notebookList").on("blur", "input#editNotebookTitle", Notebook.doUpdateNotebookTitle);
|
||||
|
||||
function applyrule(menu) {
|
||||
var notebookId = $(this).attr("notebookId");
|
||||
var notebook = Notebook.cache[notebookId];
|
||||
if(!notebook) {
|
||||
return;
|
||||
}
|
||||
var items = [];
|
||||
// 是否已公开为blog
|
||||
if(!notebook.IsBlog) {
|
||||
items.push("unset2Blog");
|
||||
} else {
|
||||
items.push("set2Blog");
|
||||
}
|
||||
// 是否还有笔记
|
||||
if(Note.notebookHasNotes(notebookId)) {
|
||||
items.push("delete");
|
||||
}
|
||||
menu.applyrule({
|
||||
name: "target2",
|
||||
disable: true,
|
||||
items: items
|
||||
});
|
||||
}
|
||||
// 哪个不能
|
||||
function beforeContextMenu() {
|
||||
var notebookId = $(this).attr("notebookId");
|
||||
return !Notebook.isTrashNotebookId(notebookId) && !Notebook.isAllNotebookId(notebookId);
|
||||
}
|
||||
$("#notebookList li a").contextmenu(notebookListMenu);
|
||||
|
||||
//------------------
|
||||
// 添加notebook
|
||||
// 右键菜单
|
||||
var addNotebookContextmenu = {
|
||||
width: 150,
|
||||
items: [
|
||||
{ text: "添加笔记本", icon: "", action: Notebook.addNotebook },
|
||||
],
|
||||
parent: "#myNotebooks",
|
||||
children: ""
|
||||
}
|
||||
$("#myNotebooks").contextmenu(addNotebookContextmenu);
|
||||
|
||||
//---------------
|
||||
// 点击中部notebook nav
|
||||
$("#notebookNavForListNote").on("click", "li", function() {
|
||||
var notebookId = $(this).find("a").attr("notebookId");
|
||||
Notebook.changeNotebook(notebookId);
|
||||
});
|
||||
|
||||
// 添加笔记本
|
||||
$("#addNotebookPlus").click(function(e) {
|
||||
e.stopPropagation();
|
||||
Notebook.addNotebook();
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user