mindoc/static/js/editor.js

601 lines
18 KiB
Go
Raw Normal View History

/**
* Created by lifei6671 on 2017/4/29 0029.
*/
/**
*
*/
function openLastSelectedNode() {
//如果文档树或编辑器没有准备好则不加载文档
if (window.treeCatalog == null || window.editor == null) {
return false;
}
var $isSelected = false;
if (window.localStorage) {
var $selectedNodeId = window.sessionStorage.getItem("MinDoc::LastLoadDocument:" + window.book.identify);
try {
if ($selectedNodeId) {
//遍历文档树判断是否存在节点
$.each(window.documentCategory, function (i, n) {
if (n.id == $selectedNodeId && !$isSelected) {
var $node = {"id": n.id};
window.treeCatalog.deselect_all();
window.treeCatalog.select_node($node);
$isSelected = true;
}
});
}
} catch ($ex) {
console.log($ex)
}
}
//如果节点不存在,则默认选中第一个节点
if (!$isSelected && window.documentCategory.length > 0) {
var doc = window.documentCategory[0];
if (doc && doc.id > 0) {
var node = {"id": doc.id};
$("#sidebar").jstree(true).select_node(node);
$isSelected = true;
}
}
return $isSelected;
}
/**
*
* @param $node
*/
function setLastSelectNode($node) {
if (window.localStorage) {
if (typeof $node === "undefined" || !$node) {
window.sessionStorage.removeItem("MinDoc::LastLoadDocument:" + window.book.identify);
} else {
var nodeId = $node.id ? $node.id : $node.node.id;
window.sessionStorage.setItem("MinDoc::LastLoadDocument:" + window.book.identify, nodeId);
}
}
}
/**
*
* @param node
* @param parent
*/
function jstree_save(node, parent) {
var parentNode = window.treeCatalog.get_node(parent.parent);
var nodeData = window.getSiblingSort(parentNode);
if (parent.parent !== parent.old_parent) {
parentNode = window.treeCatalog.get_node(parent.old_parent);
var newNodeData = window.getSiblingSort(parentNode);
if (newNodeData.length > 0) {
nodeData = nodeData.concat(newNodeData);
}
}
var index = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
locales = {
'zh-CN': {
saveSortSucc: '',
},
'en': {
saveSortSucc: 'Save sort success',
}
}
$.ajax({
url: window.sortURL,
type: "post",
data: JSON.stringify(nodeData),
success: function (res) {
layer.close(index);
if (res.errcode === 0) {
layer.msg(locales[lang].saveSortSucc);
} else {
layer.msg(res.message);
}
}
})
}
/**
*
*/
function openCreateCatalogDialog($node) {
var $then = $("#addDocumentModal");
var doc_id = $node ? $node.id : 0;
$then.find("input[name='parent_id']").val(doc_id);
2018-08-24 19:16:34 +08:00
$then.find("input[name='doc_id']").val('');
$then.find("input[name='doc_name']").val('');
$then.modal("show");
}
/**
*
* @param node
* @returns {Array}
*/
function getSiblingSort(node) {
var data = [];
for (var key in node.children) {
var index = data.length;
data[index] = {
"id": parseInt(node.children[key]),
"sort": parseInt(key),
"parent": Number(node.id) ? Number(node.id) : 0
};
}
return data;
2017-06-09 18:14:55 +08:00
}
/**
*
* @param $node
*/
function openDeleteDocumentDialog($node) {
locales = {
'zh-CN': {
saveSortSucc: '',
confirmDeleteDoc: '',
confirm: '',
cancel: '',
deleteFailed: '',
confirmLeave: ''
},
'en': {
saveSortSucc: 'Save sort success',
confirmDeleteDoc: 'Are you sure you want to delete this document?',
confirm: 'Confirm',
cancel: 'Cancel',
deleteFailed: 'Delete Failed',
confirmLeave: 'The content you entered has not been saved. Are you sure you want to leave this page?'
}
}
langs = locales[lang];
var index = layer.confirm(langs.confirmDeleteDoc, {
btn: [langs.confirm, langs.cancel] //按钮
}, function () {
$.post(window.deleteURL, {"identify": window.book.identify, "doc_id": $node.id}).done(function (res) {
layer.close(index);
if (res.errcode === 0) {
window.treeCatalog.delete_node($node);
window.documentCategory.remove(function (item) {
return item.id == $node.id;
});
// console.log(window.documentCategory)
setLastSelectNode();
} else {
layer.msg(lang.deleteFailed, {icon: 2})
}
}).fail(function () {
layer.close(index);
layer.msg(lang.deleteFailed, {icon: 2})
});
});
}
/**
*
* @param $node
*/
function openEditCatalogDialog($node) {
var $then = $("#addDocumentModal");
var doc_id = parseInt($node ? $node.id : 0);
var text = $node ? $node.text : '';
var parentId = $node && $node.parent !== '#' ? $node.parent : 0;
$then.find("input[name='doc_id']").val(doc_id);
$then.find("input[name='parent_id']").val(parentId);
$then.find("input[name='doc_name']").val(text);
var open = $node.a_attr && $node.a_attr.opened ? $node.a_attr.opened : 0;
console.log($node)
$then.find("input[name='is_open'][value='" + open + "']").prop("checked", "checked");
for (var index in window.documentCategory) {
var item = window.documentCategory[index];
if (item.id === doc_id) {
$then.find("input[name='doc_identify']").val(item.identify);
break;
}
}
$then.modal({show: true});
}
/**
*
* @param $node
*/
function pushDocumentCategory($node) {
for (var index in window.documentCategory) {
var item = window.documentCategory[index];
if (item.id === $node.id) {
window.documentCategory[index] = $node;
return;
}
}
window.documentCategory.push($node);
}
2017-05-12 19:14:29 +08:00
/**
* Vue
* @param $lists
*/
function pushVueLists($lists) {
2017-05-13 12:12:37 +08:00
window.vueApp.lists = [];
$.each($lists, function (i, item) {
2017-05-12 19:14:29 +08:00
window.vueApp.lists.push(item);
});
2017-05-12 19:14:29 +08:00
}
/**
*
*/
function releaseBook() {
locales = {
'zh-CN': {
publishToQueue: '',
},
'en': {
publishToQueue: 'The publish task has been pushed to the queue</br> and will be executed soon.',
}
}
$.ajax({
url: window.releaseURL,
data: {"identify": window.book.identify},
type: "post",
dataType: "json",
success: function (res) {
if (res.errcode === 0) {
layer.msg(locales[lang].publishToQueue);
} else {
layer.msg(res.message);
}
}
});
}
//实现小提示
$("[data-toggle='tooltip']").hover(function () {
var title = $(this).attr('data-title');
var direction = $(this).attr("data-direction");
var tips = 3;
if (direction === "top") {
tips = 1;
} else if (direction === "right") {
tips = 2;
} else if (direction === "bottom") {
tips = 3;
} else if (direction === "left") {
tips = 4;
}
index = layer.tips(title, this, {
tips: tips
});
}, function () {
layer.close(index);
});
//弹出创建文档的遮罩层
$("#btnAddDocument").on("click", function () {
$("#addDocumentModal").modal("show");
});
//用于还原创建文档的遮罩层
$("#addDocumentModal").on("hidden.bs.modal", function () {
$(this).find("form").html(window.sessionStorage.getItem("MinDoc::addDocumentModal"));
var $then = $("#addDocumentModal");
2018-08-24 19:16:34 +08:00
$then.find("input[name='parent_id']").val('');
$then.find("input[name='doc_id']").val('');
$then.find("input[name='doc_name']").val('');
}).on("shown.bs.modal", function () {
$(this).find("input[name='doc_name']").focus();
}).on("show.bs.modal", function () {
window.sessionStorage.setItem("MinDoc::addDocumentModal", $(this).find("form").html())
});
function showError($msg, $id) {
if (!$id) {
$id = "#form-error-message"
}
$($id).addClass("error-message").removeClass("success-message").text($msg);
return false;
}
function showSuccess($msg, $id) {
if (!$id) {
$id = "#form-error-message"
}
$($id).addClass("success-message").removeClass("error-message").text($msg);
return true;
}
2017-05-20 15:27:03 +08:00
window.documentHistory = function () {
locales = {
'zh-CN': {
hisVer: '',
},
'en': {
hisVer: 'Historic version',
}
}
2017-05-25 15:19:17 +08:00
layer.open({
type: 2,
title: locales[lang].hisVer,
2017-05-25 15:19:17 +08:00
shadeClose: true,
shade: 0.8,
area: ['700px', '80%'],
2017-05-25 15:19:17 +08:00
content: window.historyURL + "?identify=" + window.book.identify + "&doc_id=" + window.selectNode.id,
end: function () {
if (window.SelectedId) {
var selected = {
node: {
id: window.SelectedId
}
};
2017-05-25 15:19:17 +08:00
window.loadDocument(selected);
window.SelectedId = null;
2017-05-20 15:27:03 +08:00
}
2017-05-25 15:19:17 +08:00
}
});
};
2017-06-09 18:14:55 +08:00
function uploadImage($id, $callback) {
locales = {
'zh-CN': {
unsupportType: '',
uploadFailed: ''
},
'en': {
unsupportType: 'Unsupport image type',
uploadFailed: 'Upload image failed'
}
}
2017-06-09 18:14:55 +08:00
/** 粘贴上传图片 **/
document.getElementById($id).addEventListener('paste', function (e) {
if (e.clipboardData && e.clipboardData.items) {
var clipboard = e.clipboardData;
for (var i = 0, len = clipboard.items.length; i < len; i++) {
if (clipboard.items[i].kind === 'file' || clipboard.items[i].type.indexOf('image') > -1) {
var imageFile = clipboard.items[i].getAsFile();
var fileName = String((new Date()).valueOf());
switch (imageFile.type) {
case "image/png" :
fileName += ".png";
break;
case "image/jpg" :
fileName += ".jpg";
break;
case "image/jpeg" :
fileName += ".jpeg";
break;
case "image/gif" :
fileName += ".gif";
break;
default :
layer.msg(locales[lang].unsupportType);
return;
}
var form = new FormData();
form.append('editormd-image-file', imageFile, fileName);
var layerIndex = 0;
$.ajax({
url: window.imageUploadURL,
type: "POST",
dataType: "json",
data: form,
processData: false,
contentType: false,
beforeSend: function () {
layerIndex = $callback('before');
},
error: function () {
layer.close(layerIndex);
$callback('error');
layer.msg(locales[lang].uploadFailed);
},
success: function (data) {
layer.close(layerIndex);
$callback('success', data);
if (data.errcode !== 0) {
layer.msg(data.message);
}
2017-06-09 18:14:55 +08:00
}
});
e.preventDefault();
}
2017-06-09 18:14:55 +08:00
}
}
});
}
2017-05-20 15:27:03 +08:00
function uploadResource($id, $callback) {
locales = {
'zh-CN': {
unsupportType: '/',
uploadFailed: '/'
},
'en': {
unsupportType: 'Unsupport image/video type',
uploadFailed: 'Upload image/video failed'
}
}
/** 粘贴上传的资源 **/
document.getElementById($id).addEventListener('paste', function (e) {
if (e.clipboardData && e.clipboardData.items) {
var clipboard = e.clipboardData;
for (var i = 0, len = clipboard.items.length; i < len; i++) {
if (clipboard.items[i].kind === 'file' || clipboard.items[i].type.indexOf('image') > -1) {
var resource = clipboard.items[i].getAsFile();
var fileName = String((new Date()).valueOf());
console.log(resource.type)
switch (resource.type) {
case "image/png" :
fileName += ".png";
break;
case "image/jpg" :
fileName += ".jpg";
break;
case "image/jpeg" :
fileName += ".jpeg";
break;
case "image/gif" :
fileName += ".gif";
break;
case "video/mp4":
fileName += ".mp4";
break;
case "video/webm":
fileName += ".webm";
break;
default :
layer.msg(locales[lang].unsupportType);
return;
}
var form = new FormData();
form.append('editormd-resource-file', resource, fileName);
var layerIndex = 0;
$.ajax({
url: window.imageUploadURL,
type: "POST",
dataType: "json",
data: form,
processData: false,
contentType: false,
beforeSend: function () {
layerIndex = $callback('before');
},
error: function () {
layer.close(layerIndex);
$callback('error');
layer.msg(locales[lang].uploadFailed);
},
success: function (data) {
layer.close(layerIndex);
$callback('success', data);
}
});
e.preventDefault();
}
}
}
});
}
2018-01-27 13:56:45 +08:00
/**
*
*/
function initHighlighting() {
$('pre code,pre.ql-syntax').each(function (i, block) {
hljs.highlightBlock(block);
});
}
2017-05-25 15:19:17 +08:00
$(function () {
locales = {
'zh-CN': {
attachments: ' ',
},
'en': {
attachments: ' attachments',
}
}
2017-05-25 15:19:17 +08:00
window.vueApp = new Vue({
el: "#attachList",
data: {
lists: []
2017-05-25 15:19:17 +08:00
},
delimiters: ['${', '}'],
methods: {
removeAttach: function ($attach_id) {
2017-05-25 15:19:17 +08:00
var $this = this;
var item = $this.lists.filter(function ($item) {
return $item.attachment_id == $attach_id;
});
if (item && item[0].hasOwnProperty("state")) {
2017-05-25 15:19:17 +08:00
$this.lists = $this.lists.filter(function ($item) {
return $item.attachment_id != $attach_id;
});
return;
2017-05-20 15:27:03 +08:00
}
2017-05-25 15:19:17 +08:00
$.ajax({
url: window.removeAttachURL,
type: "post",
data: {"attach_id": $attach_id},
success: function (res) {
if (res.errcode === 0) {
2017-05-25 15:19:17 +08:00
$this.lists = $this.lists.filter(function ($item) {
return $item.attachment_id != $attach_id;
});
} else {
2017-05-25 15:19:17 +08:00
layer.msg(res.message);
}
}
});
2017-05-20 15:27:03 +08:00
}
2017-05-25 15:19:17 +08:00
},
watch: {
lists: function ($lists) {
$("#attachInfo").text(" " + $lists.length + locales[lang].attachments)
2017-05-25 15:19:17 +08:00
}
}
2017-05-20 15:27:03 +08:00
});
/**
* 30s
*/
if (window.book && window.book.auto_save) {
setTimeout(function () {
setInterval(function () {
var $then = $("#markdown-save");
if (!window.saveing && $then.hasClass("change")) {
$then.trigger("click");
}
}, 30000);
}, 30000);
}
/**
*
*/
$(window).on("beforeunload", function () {
if ($("#markdown-save").hasClass("change")) {
return '';
}
});
});
2017-05-25 15:19:17 +08:00