Merge branch 'dev-life' into dev
Conflicts: app/init.go app/service/UserService.go conf/app.conf conf/routes mongodb_backup/leanote_install_data/albums.metadata.json mongodb_backup/leanote_install_data/attachs.metadata.json mongodb_backup/leanote_install_data/blog_comments.metadata.json mongodb_backup/leanote_install_data/blog_likes.metadata.json mongodb_backup/leanote_install_data/blog_singles.metadata.json mongodb_backup/leanote_install_data/configs.bson mongodb_backup/leanote_install_data/configs.metadata.json mongodb_backup/leanote_install_data/email_logs.metadata.json mongodb_backup/leanote_install_data/files.metadata.json mongodb_backup/leanote_install_data/find_pwds.metadata.json mongodb_backup/leanote_install_data/group_users.metadata.json mongodb_backup/leanote_install_data/groups.metadata.json mongodb_backup/leanote_install_data/has_share_notes.metadata.json mongodb_backup/leanote_install_data/leanote.ShareNotes.metadata.json mongodb_backup/leanote_install_data/leanote.has_share_notes.metadata.jso n mongodb_backup/leanote_install_data/note_content_histories.metadata.json mongodb_backup/leanote_install_data/note_contents.metadata.json mongodb_backup/leanote_install_data/note_images.metadata.json mongodb_backup/leanote_install_data/notebooks.bson mongodb_backup/leanote_install_data/notebooks.metadata.json mongodb_backup/leanote_install_data/notes.bson mongodb_backup/leanote_install_data/notes.metadata.json mongodb_backup/leanote_install_data/reports.metadata.json mongodb_backup/leanote_install_data/sessions.metadata.json mongodb_backup/leanote_install_data/share_notebooks.metadata.json mongodb_backup/leanote_install_data/share_notes.metadata.json mongodb_backup/leanote_install_data/suggestions.metadata.json mongodb_backup/leanote_install_data/system.indexes.bson mongodb_backup/leanote_install_data/tag_count.metadata.json mongodb_backup/leanote_install_data/tags.metadata.json mongodb_backup/leanote_install_data/themes.metadata.json mongodb_backup/leanote_install_data/tokens.metadata.json mongodb_backup/leanote_install_data/user_blogs.metadata.json mongodb_backup/leanote_install_data/users.bson mongodb_backup/leanote_install_data/users.metadata.json public/blog/themes/default/theme.json public/blog/themes/elegant/theme.json public/blog/themes/nav_fixed/theme.json public/images/logo/leanote_icon_blue.jpg public/js/app/note-min.js public/js/app/note.js public/js/app/notebook-min.js public/js/app/notebook.js public/js/app/tag-min.js public/js/app/tag.js public/tinymce/plugins/paste/plugin.dev.js public/tinymce/plugins/spellchecker/plugin.min.js public/tinymce/tinymce.dev.js public/tinymce/tinymce.jquery.dev.js
This commit is contained in:
6
public/js/app/note-min.js
vendored
6
public/js/app/note-min.js
vendored
File diff suppressed because one or more lines are too long
6
public/js/app/notebook-min.js
vendored
6
public/js/app/notebook-min.js
vendored
File diff suppressed because one or more lines are too long
@ -21,6 +21,10 @@ Notebook.getCurNotebookId = function() {
|
||||
return Notebook.curNotebookId;
|
||||
};
|
||||
|
||||
Notebook.getCurNotebook = function() {
|
||||
return Notebook.cache[Notebook.curNotebookId];
|
||||
};
|
||||
|
||||
// 笔记本的笔记数量更新
|
||||
Notebook._updateNotebookNumberNotes = function(notebookId, n) {
|
||||
var self = this;
|
||||
@ -248,7 +252,17 @@ Notebook.renderNotebooks = function(notebooks) {
|
||||
if(!notebooks || typeof notebooks != "object" || notebooks.length < 0) {
|
||||
notebooks = [];
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
// title可能有<script>
|
||||
for(var i = 0, len = notebooks.length; i < len; ++i) {
|
||||
var notebook = notebooks[i];
|
||||
notebook.Title = trimTitle(notebook.Title);
|
||||
}
|
||||
|
||||
>>>>>>> dev-life
|
||||
notebooks = [{NotebookId: Notebook.allNotebookId, Title: getMsg("all"), drop:false, drag: false}].concat(notebooks);
|
||||
notebooks.push({NotebookId: Notebook.trashNotebookId, Title: getMsg("trash"), drop:false, drag: false});
|
||||
Notebook.notebooks = notebooks; // 缓存之
|
||||
@ -579,6 +593,7 @@ Notebook.curActiveNotebookIsAll = function() {
|
||||
// 2. ajax得到该notebook下的所有note
|
||||
// 3. 使用Note.RederNotes()
|
||||
// callback Pjax, 当popstate时调用
|
||||
Notebook.changeNotebookSeq = 1;
|
||||
Notebook.changeNotebook = function(notebookId, callback) {
|
||||
var me = this;
|
||||
Notebook.changeNotebookNav(notebookId);
|
||||
@ -602,29 +617,38 @@ Notebook.changeNotebook = function(notebookId, callback) {
|
||||
param = {};
|
||||
// 得到全部的...
|
||||
cacheNotes = Note.getNotesByNotebookId();
|
||||
if(!isEmpty(cacheNotes)) { // 万一真的是没有呢?
|
||||
// 数量一致
|
||||
if(!isEmpty(cacheNotes)) {
|
||||
if(callback) {
|
||||
callback(cacheNotes);
|
||||
} else {
|
||||
Note.renderNotesAndFirstOneContent(cacheNotes);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cacheNotes = Note.getNotesByNotebookId(notebookId);
|
||||
if(!isEmpty(cacheNotes)) { // 万一真的是没有呢? 执行后面的ajax
|
||||
var notebook = Notebook.cache[notebookId];
|
||||
var len = cacheNotes ? cacheNotes.length : 0;
|
||||
// alert( notebook.NumberNotes + " " + len);
|
||||
if(len == notebook.NumberNotes) {
|
||||
if(callback) {
|
||||
callback(cacheNotes);
|
||||
} else {
|
||||
Note.renderNotesAndFirstOneContent(cacheNotes);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
Note.clearCacheByNotebookId(notebookId);
|
||||
log('数量不一致');
|
||||
}
|
||||
}
|
||||
|
||||
// 2 得到笔记本
|
||||
// 这里可以缓存起来, note按notebookId缓存
|
||||
// 这里可能点击过快导致前面点击的后来才返回
|
||||
me.showNoteAndEditorLoading();
|
||||
<<<<<<< HEAD
|
||||
ajaxGet(url, param, function(cacheNotes) {
|
||||
if(callback) {
|
||||
callback(cacheNotes);
|
||||
@ -633,6 +657,25 @@ Notebook.changeNotebook = function(notebookId, callback) {
|
||||
}
|
||||
me.hideNoteAndEditorLoading();
|
||||
});
|
||||
=======
|
||||
me.changeNotebookSeq++;
|
||||
(function(seq) {
|
||||
ajaxGet(url, param, function(cacheNotes) {
|
||||
// 后面点击过快, 之前的结果不要了
|
||||
if(seq != me.changeNotebookSeq) {
|
||||
log("notebook changed too fast!");
|
||||
log(cacheNotes);
|
||||
return;
|
||||
}
|
||||
if(callback) {
|
||||
callback(cacheNotes);
|
||||
} else {
|
||||
Note.renderNotesAndFirstOneContent(cacheNotes);
|
||||
}
|
||||
me.hideNoteAndEditorLoading();
|
||||
});
|
||||
})(me.changeNotebookSeq);
|
||||
>>>>>>> dev-life
|
||||
}
|
||||
|
||||
// 笔记列表与编辑器的mask loading
|
||||
|
2
public/js/app/page-min.js
vendored
2
public/js/app/page-min.js
vendored
File diff suppressed because one or more lines are too long
@ -996,7 +996,7 @@ LeaAce = {
|
||||
aceEditor.setOption("wrap", "free");
|
||||
aceEditor.setShowInvisibles(false);
|
||||
aceEditor.setAutoScrollEditorIntoView(true);
|
||||
aceEditor.setOption("maxLines", 100);
|
||||
aceEditor.setOption("maxLines", 10000);
|
||||
aceEditor.commands.addCommand({
|
||||
name: "undo",
|
||||
bindKey: {win: "Ctrl-z", mac: "Command-z"},
|
||||
|
6
public/js/app/tag-min.js
vendored
6
public/js/app/tag-min.js
vendored
File diff suppressed because one or more lines are too long
@ -33,8 +33,8 @@ Tag.t = $("#tags");
|
||||
Tag.getTags = function() {
|
||||
var tags = [];
|
||||
Tag.t.children().each(function(){
|
||||
var text = $(this).text();
|
||||
text = text.substring(0, text.length - 1); // 把X去掉
|
||||
var text = $(this).data('tag');
|
||||
// text = text.substring(0, text.length - 1); // 把X去掉
|
||||
text = Tag.mapCn2En[text] || text;
|
||||
tags.push(text);
|
||||
});
|
||||
@ -121,7 +121,7 @@ Tag.renderReadOnlyTags = function(tags) {
|
||||
// 添加tag
|
||||
// tag = {classes:"label label-red", text:"红色"}
|
||||
// tag = life
|
||||
Tag.appendTag = function(tag) {
|
||||
Tag.appendTag = function(tag, save) {
|
||||
var isColor = false;
|
||||
var classes, text;
|
||||
|
||||
@ -144,22 +144,34 @@ Tag.appendTag = function(tag) {
|
||||
classes = "label label-default";
|
||||
}
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
var rawText = text;
|
||||
>>>>>>> dev-life
|
||||
if(LEA.locale == "zh") {
|
||||
text = Tag.mapEn2Cn[text] || text;
|
||||
rawText = Tag.mapCn2En[rawText] || rawText;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
text = text.replace(/[\r\n]/g, '');
|
||||
tag = tt('<span class="?">?<i title="' + getMsg("delete") + '">X</i></span>', classes, Note._toHtmlEntity(text));
|
||||
=======
|
||||
tag = tt('<span class="?" data-tag="?">?<i title="' + getMsg("delete") + '">X</i></span>', classes, text, text);
|
||||
>>>>>>> dev-life
|
||||
|
||||
// 避免重复
|
||||
var isExists = false;
|
||||
$("#tags").children().each(function() {
|
||||
if (isColor) {
|
||||
var tagHtml = $("<div></div>").append($(this).clone()).html();
|
||||
if (tagHtml == tag) {
|
||||
$(this).remove();
|
||||
isExists = true;
|
||||
}
|
||||
} else if (text + "X" == $(this).text()) {
|
||||
$(this).remove();
|
||||
isExists = true;
|
||||
}
|
||||
});
|
||||
|
||||
@ -170,6 +182,22 @@ Tag.appendTag = function(tag) {
|
||||
if (!isColor) {
|
||||
reRenderTags();
|
||||
}
|
||||
|
||||
// 笔记已污染
|
||||
if(save) {
|
||||
Note.curNoteIsDirtied();
|
||||
|
||||
// 如果之前不存, 则添加之
|
||||
if(!isExists) {
|
||||
Note.curChangedSaveIt(true, function() {
|
||||
ajaxPost("/tag/updateTag", {tag: rawText}, function(ret) {
|
||||
if(reIsOk(ret)) {
|
||||
Tag.addTagNav(ret.Item);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 为了颜色间隔, add, delete时调用
|
||||
@ -186,24 +214,66 @@ function reRenderTags() {
|
||||
i++;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 删除tag
|
||||
Tag.removeTag = function($target) {
|
||||
var tag = $target.data('tag');
|
||||
$target.remove();
|
||||
reRenderTags();
|
||||
if(LEA.locale == "zh") {
|
||||
tag = Tag.mapCn2En[tag] || tag;
|
||||
}
|
||||
Note.curChangedSaveIt(true, function() {
|
||||
ajaxPost("/tag/updateTag", {tag: tag}, function(ret) {
|
||||
if(reIsOk(ret)) {
|
||||
Tag.addTagNav(ret.Item);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
//-----------
|
||||
// 左侧nav en -> cn
|
||||
Tag.tags = [];
|
||||
Tag.renderTagNav = function(tags) {
|
||||
var me = this;
|
||||
tags = tags || [];
|
||||
Tag.tags = tags;
|
||||
$("#tagNav").html('');
|
||||
for(var i in tags) {
|
||||
var tag = tags[i];
|
||||
if(tag == "red" || tag == "blue" || tag == "yellow" || tag == "green") {
|
||||
continue;
|
||||
var noteTag = tags[i];
|
||||
var tag = noteTag.Tag;
|
||||
var text = tag;
|
||||
if(LEA.locale == "zh") {
|
||||
var text = Tag.mapEn2Cn[tag] || text;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
var text = Note._toHtmlEntity(Tag.mapEn2Cn[tag] || tag);
|
||||
text = text.replace(/[\r\n]/g, '');
|
||||
var classes = Tag.classes[tag] || "label label-default";
|
||||
$("#tagNav").append(tt('<li data-tag="?"><a> <span class="?">?</span></li>', text, classes, text));
|
||||
=======
|
||||
var classes = Tag.classes[tag] || "label label-default";
|
||||
$("#tagNav").append(tt('<li data-tag="?"><a> <span class="?">?</span> <span class="tag-delete">X</span></li>', tag, classes, text));
|
||||
>>>>>>> dev-life
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 添加的标签重新render到左边, 放在第一个位置
|
||||
// 重新render
|
||||
Tag.addTagNav = function(newTag) {
|
||||
var me = this;
|
||||
for(var i in me.tags) {
|
||||
var noteTag = me.tags[i];
|
||||
if(noteTag.Tag == newTag.Tag) {
|
||||
me.tags.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
me.tags.unshift(newTag);
|
||||
me.renderTagNav(me.tags);
|
||||
};
|
||||
|
||||
// 事件
|
||||
$(function() {
|
||||
@ -251,7 +321,7 @@ $(function() {
|
||||
Tag.appendTag({
|
||||
classes : a.attr("class"),
|
||||
text : a.text()
|
||||
});
|
||||
}, true);
|
||||
});
|
||||
// 这是个问题, 为什么? 捕获不了事件?, input的blur造成
|
||||
/*
|
||||
@ -266,14 +336,33 @@ $(function() {
|
||||
*/
|
||||
|
||||
$("#tags").on("click", "i", function() {
|
||||
$(this).parent().remove();
|
||||
reRenderTags();
|
||||
Tag.removeTag($(this).parent());
|
||||
});
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
//----------
|
||||
//
|
||||
function deleteTag() {
|
||||
$li = $(this).closest('li');
|
||||
var tag = $.trim($li.data("tag"));
|
||||
if(confirm("Are you sure ?")) {
|
||||
ajaxPost("/tag/deleteTag", {tag: tag}, function(re) {
|
||||
if(reIsOk(re)) {
|
||||
var item = re.Item; // 被删除的
|
||||
Note.deleteNoteTag(item, tag);
|
||||
$li.remove();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
>>>>>>> dev-life
|
||||
//-------------
|
||||
// nav 标签搜索
|
||||
function searchTag() {
|
||||
var tag = $.trim($(this).data("tag"));
|
||||
var $li = $(this).closest('li');
|
||||
var tag = $.trim($li.data("tag"));
|
||||
// tag = Tag.mapCn2En[tag] || tag;
|
||||
|
||||
// 学习changeNotebook
|
||||
@ -284,8 +373,15 @@ $(function() {
|
||||
// 2 先清空所有
|
||||
// 也会把curNoteId清空
|
||||
Note.clearAll();
|
||||
<<<<<<< HEAD
|
||||
|
||||
$("#tagSearch").html($(this).html()).show();
|
||||
=======
|
||||
|
||||
$("#tagSearch").html($li.html()).show();
|
||||
$("#tagSearch .tag-delete").remove();
|
||||
|
||||
>>>>>>> dev-life
|
||||
showLoading();
|
||||
ajaxGet("/note/searchNoteByTags", {tags: [tag]}, function(notes) {
|
||||
hideLoading();
|
||||
@ -301,6 +397,8 @@ $(function() {
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#myTag .folderBody").on("click", "li", searchTag);
|
||||
$("#minTagNav").on("click", "li", searchTag);
|
||||
$("#myTag .folderBody").on("click", "li .label", searchTag);
|
||||
// $("#minTagNav").on("click", "li", searchTag);
|
||||
|
||||
$("#myTag .folderBody").on("click", "li .tag-delete", deleteTag);
|
||||
});
|
2
public/js/common-min.js
vendored
2
public/js/common-min.js
vendored
File diff suppressed because one or more lines are too long
@ -759,7 +759,7 @@ function post(url, param, func, btnId) {
|
||||
|
||||
// 是否是正确的email
|
||||
function isEmail(email) {
|
||||
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[0-9a-zA-Z]{2,3}$/;
|
||||
var myreg = /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9\-]+@([a-zA-Z0-9\-]+[_|\_|\.|\-]?)*[a-zA-Z0-9\-]+\.[0-9a-zA-Z]{2,3}$/;
|
||||
return myreg.test(email);
|
||||
}
|
||||
|
||||
@ -967,8 +967,9 @@ var vd = {
|
||||
return result;
|
||||
},
|
||||
isEmail: function(emailValue){
|
||||
var emailPattern=/^[^@.]+@([^@.]+\.)+[^@.]+$/; //邮箱的正则表达式
|
||||
var emailPattern=/^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9\-]+@([a-zA-Z0-9\-]+[_|\_|\.|\-]?)*[a-zA-Z0-9\-]+\.[0-9a-zA-Z]{2,3}$/; //邮箱的正则表达式
|
||||
result=emailPattern.test(emailValue);
|
||||
|
||||
return result;
|
||||
},
|
||||
isBlank: function(o) {
|
||||
@ -1024,7 +1025,7 @@ var vd = {
|
||||
if(val === "" && !is_required(target)) {
|
||||
return true;
|
||||
}
|
||||
return isEmail(val);
|
||||
return vd.isEmail(val);
|
||||
},
|
||||
noSpecialChars: function(target) {
|
||||
var val = get_val(target);
|
||||
@ -1275,4 +1276,8 @@ function setHash(key, value) {
|
||||
}
|
||||
}
|
||||
location.href = "#" + str;
|
||||
}
|
||||
}
|
||||
|
||||
var trimTitle = function(title) {
|
||||
return title.replace(/<.*?script.*?>/g, '');
|
||||
};
|
@ -11,7 +11,7 @@ pre.prettyprint {
|
||||
}
|
||||
|
||||
code.prettyprint,pre.prettyprint {
|
||||
padding: 8px;
|
||||
padding: 18px;
|
||||
background-color: #f7f7f9;
|
||||
border: 1px solid #e1e1e8;
|
||||
-moz-border-radius: 3px;
|
||||
|
Reference in New Issue
Block a user