Merge branch 'master' into dev

# Conflicts:
#	views/book/setting.tpl
This commit is contained in:
Minho
2017-05-10 16:12:17 +08:00
12 changed files with 286 additions and 194 deletions

View File

@@ -12,7 +12,7 @@ MinDoc 的前身是 SmartWiki 文档系统。SmartWiki 是基于 PHP 框架 lara
# 安装与使用 # 安装与使用
**如果你的服务器上没有安装golang程序请手动设置一个环境变量如下键名为 ZONEINFO值为MinDoc程序所在路径。** **如果你的服务器上没有安装golang程序请手动设置一个环境变量如下键名为 ZONEINFO值为MinDoc跟目录下的/lib/time/zoneinfo.zip 。**
**Windows 教程:** [https://github.com/lifei6671/godoc/blob/master/README_WIN.md](https://github.com/lifei6671/godoc/blob/master/README_WIN.md) **Windows 教程:** [https://github.com/lifei6671/godoc/blob/master/README_WIN.md](https://github.com/lifei6671/godoc/blob/master/README_WIN.md)

View File

@@ -1,5 +1,7 @@
# Linux 下安装和配置 MinDoc # Linux 下安装和配置 MinDoc
**如果你的服务器上没有安装golang程序请手动设置一个环境变量如下键名为 ZONEINFO值为MinDoc跟目录下的/lib/time/zoneinfo.zip 绝对路径。**
**第一步 下载可执行文件** **第一步 下载可执行文件**
请从 [https://github.com/lifei6671/godoc/releases](https://github.com/lifei6671/godoc/releases) 下载最新版的可执行文件,一般文件名为 godoc_linux_amd.tar.gz . 请从 [https://github.com/lifei6671/godoc/releases](https://github.com/lifei6671/godoc/releases) 下载最新版的可执行文件,一般文件名为 godoc_linux_amd.tar.gz .

View File

@@ -1,5 +1,7 @@
# Windows 下安装和配置 MinDoc # Windows 下安装和配置 MinDoc
**如果你的服务器上没有安装golang程序请手动设置一个环境变量如下键名为 ZONEINFO值为MinDoc跟目录下的/lib/time/zoneinfo.zip 绝对路径。**
**第一步 下载可执行文件** **第一步 下载可执行文件**
请从 [https://github.com/lifei6671/godoc/releases](https://github.com/lifei6671/godoc/releases) 下载最新版的可执行文件,一般文件名为 godoc_windows_amd.zip . 请从 [https://github.com/lifei6671/godoc/releases](https://github.com/lifei6671/godoc/releases) 下载最新版的可执行文件,一般文件名为 godoc_windows_amd.zip .
@@ -40,7 +42,9 @@ db_password=123456
**第五步 启动程序** **第五步 启动程序**
此时,双击 godoc_windows_amd64.exe 文件,该程序会自动在后台执行,打开任务管理器会看到运行中的程序。 如果你设置了环境变量但是没有重启电脑请在cmd命令行启动 godoc_windows_amd64.exe 程序。
如果你设置了环境变量,并且重启了电脑,双击 godoc_windows_amd64.exe 即可。
稍等一分钟程序会自动初始化数据库并创建一个超级管理员账号admin 密码123456 稍等一分钟程序会自动初始化数据库并创建一个超级管理员账号admin 密码123456

View File

@@ -78,6 +78,7 @@ func (c *AccountController) Login() {
} }
} }
//用户注册.
func (c *AccountController) Register() { func (c *AccountController) Register() {
c.TplName = "account/register.tpl" c.TplName = "account/register.tpl"
@@ -329,6 +330,7 @@ func (c *AccountController) Logout(){
c.Redirect(beego.URLFor("AccountController.Login"),302) c.Redirect(beego.URLFor("AccountController.Login"),302)
} }
//验证码.
func (c *AccountController) Captcha() { func (c *AccountController) Captcha() {
c.Prepare() c.Prepare()

View File

@@ -557,7 +557,7 @@ func (c *BookController) SaveSort() {
beego.Error(err) beego.Error(err)
c.JsonResult(6003,"数据错误") c.JsonResult(6003,"数据错误")
} }
fmt.Printf("%+v",docs)
for _,item := range docs { for _,item := range docs {
if doc_id,ok := item["id"].(float64);ok { if doc_id,ok := item["id"].(float64);ok {
doc,err := models.NewDocument().Find(int(doc_id)); doc,err := models.NewDocument().Find(int(doc_id));

View File

@@ -32,10 +32,8 @@ func main() {
beego.SetStaticPath("uploads","uploads") beego.SetStaticPath("uploads","uploads")
beego.ErrorController(&controllers.ErrorController{}) beego.ErrorController(&controllers.ErrorController{})
beego.Run() beego.Run()
} }

View File

@@ -33,9 +33,12 @@ body{
width: 280px; width: 280px;
position: fixed; position: fixed;
border-top: 1px solid #DDDDDD; border-top: 1px solid #DDDDDD;
bottom: 0; bottom: 15px;
top: 40px; top: 40px;
background-color: #FAFAFA; background-color: #FAFAFA;
left: 0;
right: 0;
overflow-y:auto;
} }
.manual-category .manual-nav { .manual-category .manual-nav {
font-size: 14px; font-size: 14px;

View File

@@ -187,7 +187,3 @@ function showSuccess($msg,$id) {
$($id).addClass("success-message").removeClass("error-message").text($msg); $($id).addClass("success-message").removeClass("error-message").text($msg);
return true; return true;
} }

View File

@@ -10,6 +10,24 @@ $(function () {
}; };
wangEditor.config.menus.splice(0,0,"|"); wangEditor.config.menus.splice(0,0,"|");
wangEditor.config.menus.splice(0,0,"save"); wangEditor.config.menus.splice(0,0,"save");
wangEditor.config.menus.splice(0,0,"release");
//移除地图、背景色
editor.config.menus = $.map(wangEditor.config.menus, function(item, key) {
if (item === 'bgcolor') {
return null;
}
if (item === 'fullscreen') {
return null;
}
if (item === "undo"){
return null;
}
if (item === "redo"){
return null;
}
return item;
});
window.editor.ready(function () { window.editor.ready(function () {
if(window.documentCategory.length > 0){ if(window.documentCategory.length > 0){
@@ -251,4 +269,24 @@ $(function () {
}).on("move_node.jstree", jstree_save); }).on("move_node.jstree", jstree_save);
window.saveDocument = saveDocument; window.saveDocument = saveDocument;
window.releaseBook = function () {
if(Object.prototype.toString.call(window.documentCategory) === '[object Array]' && window.documentCategory.length > 0){
$.ajax({
url : window.releaseURL,
data :{"identify" : window.book.identify },
type : "post",
dataType : "json",
success : function (res) {
if(res.errcode === 0){
layer.msg("发布任务已推送到任务队列,稍后将在后台执行。");
}else{
layer.msg(res.message);
}
}
});
}else{
layer.msg("没有需要发布的文档")
}
};
}); });

View File

@@ -0,0 +1,47 @@
(function () {
// 获取 wangEditor 构造函数和 jquery
var E = window.wangEditor;
var $ = window.jQuery;
// 用 createMenu 方法创建菜单
E.createMenu(function (check) {
// 定义菜单id不要和其他菜单id重复。编辑器自带的所有菜单id可通过『参数配置-自定义菜单』一节查看
var menuId = 'release';
// check将检查菜单配置『参数配置-自定义菜单』一节描述中是否该菜单id如果没有则忽略下面的代码。
if (!check(menuId)) {
return;
}
// this 指向 editor 对象自身
var editor = this;
// 创建 menu 对象
var menu = new E.Menu({
editor: editor, // 编辑器对象
id: menuId, // 菜单id
title: '发布', // 菜单标题
// 正常状态和选中状态下的dom对象样式需要自定义
$domNormal: $('<a href="#" tabindex="-1"><i class="fa fa-cloud-upload" aria-hidden="true" name="release"></i></a>'),
$domSelected: $('<a href="#" tabindex="-1" class="selected"><i class="fa fa-cloud-upload" aria-hidden="true" name="release"></i></a>')
});
// 菜单正常状态下,点击将触发该事件
menu.clickEvent = function (e) {
window.releaseBook();
};
// 菜单选中状态下,点击将触发该事件
menu.clickEventSelected = function (e) {
};
// 增加到editor对象中
editor.menus[menuId] = menu;
});
})();

View File

@@ -83,59 +83,59 @@
</label> </label>
</div> </div>
</div> </div>
{{/* {{/*
<div class="form-group"> <div class="form-group">
<label></label> <label></label>
<div class="radio"> <div class="radio">
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" {{if eq .Model.CommentStatus "open"}}checked{{end}} name="comment_status" value="open"><span class="text"></span> <input type="radio" {{if eq .Model.CommentStatus "open"}}checked{{end}} name="comment_status" value="open"><span class="text"></span>
</label> </label>
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" {{if eq .Model.CommentStatus "closed"}}checked{{end}} name="comment_status" value="closed"><span class="text"></span> <input type="radio" {{if eq .Model.CommentStatus "closed"}}checked{{end}} name="comment_status" value="closed"><span class="text"></span>
</label> </label>
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" {{if eq .Model.CommentStatus "group_only"}}checked{{end}} name="comment_status" value="group_only"><span class="text"></span> <input type="radio" {{if eq .Model.CommentStatus "group_only"}}checked{{end}} name="comment_status" value="group_only"><span class="text"></span>
</label> </label>
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" {{if eq .Model.CommentStatus "registered_only"}}checked{{end}} name="comment_status" value="registered_only"><span class="text"></span> <input type="radio" {{if eq .Model.CommentStatus "registered_only"}}checked{{end}} name="comment_status" value="registered_only"><span class="text"></span>
</label> </label>
</div>
</div>
*/}}
{{if eq .Model.PrivatelyOwned 1}}
<div class="form-group">
<label>访问令牌</label>
<div class="row">
<div class="col-sm-10">
<input type="text" name="token" id="token" class="form-control" placeholder="访问令牌" readonly value="{{.Model.PrivateToken}}">
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-success btn-sm" id="createToken" data-loading-text="生成" data-action="create">生成</button>
<button type="button" class="btn btn-danger btn-sm" id="deleteToken" data-loading-text="删除" data-action="delete">删除</button>
</div>
</div>
</div>
{{end}}
<div class="form-group">
<button type="submit" id="btnSaveBookInfo" class="btn btn-success" data-loading-text="保存中...">保存修改</button>
<span id="form-error-message" class="error-message"></span>
</div>
</form>
</div> </div>
<div class="form-right">
<label>
<a href="javascript:;" data-toggle="modal" data-target="#upload-logo-panel">
<img src="{{.Model.Cover}}" onerror="this.src='/static/images/book.png'" alt="封面" style="max-width: 120px;border: 1px solid #999" id="headimgurl">
</a>
</label>
</div>
<div class="clearfix"></div>
</div> </div>
*/}}
{{if eq .Model.PrivatelyOwned 1}}
<div class="form-group">
<label>访问令牌</label>
<div class="row">
<div class="col-sm-10">
<input type="text" name="token" id="token" class="form-control" placeholder="访问令牌" readonly value="{{.Model.PrivateToken}}">
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-success btn-sm" id="createToken" data-loading-text="生成" data-action="create">生成</button>
<button type="button" class="btn btn-danger btn-sm" id="deleteToken" data-loading-text="删除" data-action="delete">删除</button>
</div>
</div>
</div>
{{end}}
<div class="form-group">
<button type="submit" id="btnSaveBookInfo" class="btn btn-success" data-loading-text="保存中...">保存修改</button>
<span id="form-error-message" class="error-message"></span>
</div>
</form>
</div> </div>
<div class="form-right">
<label>
<a href="javascript:;" data-toggle="modal" data-target="#upload-logo-panel">
<img src="{{.Model.Cover}}" onerror="this.src='/static/images/book.png'" alt="封面" style="max-width: 120px;border: 1px solid #999" id="headimgurl">
</a>
</label>
</div>
<div class="clearfix"></div>
</div> </div>
</div> </div>
{{template "widgets/footer.tpl" .}} </div>
</div>
{{template "widgets/footer.tpl" .}}
</div> </div>
<!-- Modal --> <!-- Modal -->
<div class="modal fade" id="changePrivatelyOwnedModal" tabindex="-1" role="dialog" aria-labelledby="changePrivatelyOwnedModalLabel"> <div class="modal fade" id="changePrivatelyOwnedModal" tabindex="-1" role="dialog" aria-labelledby="changePrivatelyOwnedModalLabel">
@@ -143,34 +143,34 @@
<form method="post" action="{{urlfor "BookController.PrivatelyOwned" }}" id="changePrivatelyOwnedForm"> <form method="post" action="{{urlfor "BookController.PrivatelyOwned" }}" id="changePrivatelyOwnedForm">
<input type="hidden" name="identify" value="{{.Model.Identify}}"> <input type="hidden" name="identify" value="{{.Model.Identify}}">
<input type="hidden" name="status" value="{{if eq .Model.PrivatelyOwned 0}}close{{else}}open{{end}}"> <input type="hidden" name="status" value="{{if eq .Model.PrivatelyOwned 0}}close{{else}}open{{end}}">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"> <h4 class="modal-title">
{{if eq .Model.PrivatelyOwned 0}} {{if eq .Model.PrivatelyOwned 0}}
转为私有 转为私有
{{else}}
转为共有
{{end}}
</h4>
</div>
<div class="modal-body">
{{if eq .Model.PrivatelyOwned 0}}
<span style="font-size: 14px;font-weight: 400;">确定将项目转为私有吗?</span>
<p></p>
<p class="text error-message">转为私有后需要通过阅读令牌才能访问该项目。</p>
{{else}} {{else}}
转为共有 <span style="font-size: 14px;font-weight: 400;"> 确定将项目转为公有吗?</span>
<p></p>
<p class="text error-message">转为公有后所有人都可以访问该项目。</p>
{{end}} {{end}}
</h4> </div>
<div class="modal-footer">
<span class="error-message" id="form-error-message1"></span>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" class="btn btn-primary" data-loading-text="变更中..." id="btnChangePrivatelyOwned">确定</button>
</div>
</div> </div>
<div class="modal-body">
{{if eq .Model.PrivatelyOwned 0}}
<span style="font-size: 14px;font-weight: 400;">确定将项目转为私有吗?</span>
<p></p>
<p class="text error-message">转为私有后需要通过阅读令牌才能访问该项目。</p>
{{else}}
<span style="font-size: 14px;font-weight: 400;"> 确定将项目转为公有吗?</span>
<p></p>
<p class="text error-message">转为公有后所有人都可以访问该项目。</p>
{{end}}
</div>
<div class="modal-footer">
<span class="error-message" id="form-error-message1"></span>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" class="btn btn-primary" data-loading-text="变更中..." id="btnChangePrivatelyOwned">确定</button>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@@ -216,22 +216,22 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<form method="post" id="deleteBookForm" action="{{urlfor "BookController.Delete"}}"> <form method="post" id="deleteBookForm" action="{{urlfor "BookController.Delete"}}">
<input type="hidden" name="identify" value="{{.Model.Identify}}"> <input type="hidden" name="identify" value="{{.Model.Identify}}">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">删除项目</h4> <h4 class="modal-title">删除项目</h4>
</div>
<div class="modal-body">
<span style="font-size: 14px;font-weight: 400;">确定删除项目吗?</span>
<p></p>
<p class="text error-message">删除项目后将无法找回。</p>
</div>
<div class="modal-footer">
<span id="form-error-message2" class="error-message"></span>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" id="btnDeleteBook" class="btn btn-primary" data-loading-text="删除中...">确定删除</button>
</div>
</div> </div>
<div class="modal-body">
<span style="font-size: 14px;font-weight: 400;">确定删除项目吗?</span>
<p></p>
<p class="text error-message">删除项目后将无法找回。</p>
</div>
<div class="modal-footer">
<span id="form-error-message2" class="error-message"></span>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" id="btnDeleteBook" class="btn btn-primary" data-loading-text="删除中...">确定删除</button>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@@ -240,25 +240,26 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<form action="{{urlfor "BookController.Transfer"}}" method="post" id="transferBookForm"> <form action="{{urlfor "BookController.Transfer"}}" method="post" id="transferBookForm">
<input type="hidden" name="identify" value="{{.Model.Identify}}"> <input type="hidden" name="identify" value="{{.Model.Identify}}">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="myModalLabel">项目转让</h4> <h4 class="modal-title" id="myModalLabel">项目转让</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="form-group"> <div class="form-group">
<label class="col-sm-2 control-label">接收账号</label> <label class="col-sm-2 control-label">接收账号</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="text" name="account" class="form-control" placeholder="接收者账号" id="receiveAccount" maxlength="50"> <input type="text" name="account" class="form-control" placeholder="接收者账号" id="receiveAccount" maxlength="50">
</div> </div>
</div>
<div class="clearfix"></div>
</div>
<div class="modal-footer">
<span id="form-error-message3" class="error-message"></span>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" id="btnTransferBook" class="btn btn-primary">确定转让</button>
</div> </div>
<div class="clearfix"></div>
</div> </div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="submit" id="btnTransferBook" class="btn btn-primary">确定转让</button>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@@ -277,108 +278,108 @@
window.modalHtml = $("#upload-logo-panel").find(".modal-body").html(); window.modalHtml = $("#upload-logo-panel").find(".modal-body").html();
}); });
$("#changePrivatelyOwnedForm").ajaxForm({ $("#changePrivatelyOwnedForm").ajaxForm({
beforeSumbit :function () { beforeSubmit :function () {
$("#btnChangePrivatelyOwned").button("loading"); $("#btnChangePrivatelyOwned").button("loading");
}, },
success :function (res) { success :function (res) {
if(res.errcode === 0){ if(res.errcode === 0){
window.location = window.location.href; window.location = window.location.href;
return;
}else{ }else{
showError(res.message,"#form-error-message1"); showError(res.message,"#form-error-message1");
} }
$("#btnChangePrivatelyOwned").button("reset"); $("#btnChangePrivatelyOwned").button("reset");
}, },
error :function () { error :function () {
showError("服务器异常","#form-error-message1"); showError("服务器异常","#form-error-message1");
$("#btnChangePrivatelyOwned").button("reset"); $("#btnChangePrivatelyOwned").button("reset");
} }
}); });
$("#createToken,#deleteToken").on("click",function () { $("#createToken,#deleteToken").on("click",function () {
var btn = $(this).button("loading"); var btn = $(this).button("loading");
var action = $(this).attr("data-action"); var action = $(this).attr("data-action");
$.ajax({ $.ajax({
url : "{{urlfor "BookController.CreateToken"}}", url : "{{urlfor "BookController.CreateToken"}}",
type :"post", type :"post",
data : { "identify" : {{.Model.Identify}} , "action" : action }, data : { "identify" : {{.Model.Identify}} , "action" : action },
dataType : "json", dataType : "json",
success : function (res) { success : function (res) {
if(res.errcode === 0){ if(res.errcode === 0){
$("#token").val(res.data); $("#token").val(res.data);
}else{ }else{
alert(res.message); alert(res.message);
} }
btn.button("reset"); btn.button("reset");
}, },
error : function () { error : function () {
btn.button("reset"); btn.button("reset");
alert("服务器错误"); alert("服务器错误");
} }
}) ; }) ;
}); });
$("#token").on("focus",function () { $("#token").on("focus",function () {
$(this).select(); $(this).select();
}); });
$("#bookEditForm").ajaxForm({ $("#bookEditForm").ajaxForm({
beforeSubmit : function () { beforeSubmit : function () {
var bookName = $.trim($("#bookName").val()); var bookName = $.trim($("#bookName").val());
if (bookName === "") { if (bookName === "") {
return showError("项目名称不能为空"); return showError("项目名称不能为空");
} }
$("#btnSaveBookInfo").button("loading"); $("#btnSaveBookInfo").button("loading");
}, },
success : function (res) { success : function (res) {
if(res.errcode === 0){ if(res.errcode === 0){
showSuccess("保存成功") showSuccess("保存成功")
}else{ }else{
showError("保存失败") showError("保存失败")
} }
$("#btnSaveBookInfo").button("reset"); $("#btnSaveBookInfo").button("reset");
}, },
error : function () { error : function () {
showError("服务错误"); showError("服务错误");
$("#btnSaveBookInfo").button("reset"); $("#btnSaveBookInfo").button("reset");
} }
}); });
$("#deleteBookForm").ajaxForm({ $("#deleteBookForm").ajaxForm({
beforeSubmit : function () { beforeSubmit : function () {
$("#btnDeleteBook").button("loading"); $("#btnDeleteBook").button("loading");
}, },
success : function (res) { success : function (res) {
if(res.errcode === 0){ if(res.errcode === 0){
window.location = "{{urlfor "BookController.Index"}}"; window.location = "{{urlfor "BookController.Index"}}";
}else{ }else{
showError(res.message,"#form-error-message2"); showError(res.message,"#form-error-message2");
} }
$("#btnDeleteBook").button("reset"); $("#btnDeleteBook").button("reset");
}, },
error : function () { error : function () {
showError("服务器异常","#form-error-message2"); showError("服务器异常","#form-error-message2");
$("#btnDeleteBook").button("reset"); $("#btnDeleteBook").button("reset");
} }
}); });
$("#transferBookForm").ajaxForm({ $("#transferBookForm").ajaxForm({
beforeSubmit : function () { beforeSubmit : function () {
var account = $.trim($("#receiveAccount").val()); var account = $.trim($("#receiveAccount").val());
if (account === ""){ if (account === ""){
return showError("接受者账号不能为空") return showError("接受者账号不能为空","#form-error-message3")
} }
$("#btnTransferBook").button("loading"); $("#btnTransferBook").button("loading");
}, },
success : function (res) { success : function (res) {
if(res.errcode === 0){ if(res.errcode === 0){
window.location = window.location.href; window.location = window.location.href;
}else{ }else{
showError(res.message); showError(res.message,"#form-error-message3");
} }
$("#btnTransferBook").button("reset"); $("#btnTransferBook").button("reset");
}, },
error : function () { error : function () {
$("#btnTransferBook").button("reset"); $("#btnTransferBook").button("reset");
} }
}); });
try { try {
var uploader = WebUploader.create({ var uploader = WebUploader.create({

View File

@@ -126,6 +126,7 @@
<script src="/static/jstree/3.3.4/jstree.min.js" type="text/javascript"></script> <script src="/static/jstree/3.3.4/jstree.min.js" type="text/javascript"></script>
<script src="/static/wangEditor/js/wangEditor.min.js" type="text/javascript"></script> <script src="/static/wangEditor/js/wangEditor.min.js" type="text/javascript"></script>
<script src="/static/wangEditor/plugins/save-menu.js" type="text/javascript"></script> <script src="/static/wangEditor/plugins/save-menu.js" type="text/javascript"></script>
<script src="/static/wangEditor/plugins/release-menu.js" type="text/javascript"></script>
<script type="text/javascript" src="/static/layer/layer.js"></script> <script type="text/javascript" src="/static/layer/layer.js"></script>
<script src="/static/to-markdown/dist/to-markdown.js" type="text/javascript"></script> <script src="/static/to-markdown/dist/to-markdown.js" type="text/javascript"></script>
<script src="/static/js/jquery.form.js" type="text/javascript"></script> <script src="/static/js/jquery.form.js" type="text/javascript"></script>