Files
leanote/app/views/member/blog/update_theme.html

370 lines
10 KiB
HTML
Raw Normal View History

2014-11-09 16:24:19 +08:00
{{template "member/top.html" .}}
<div class="m-b-md">
<h3 class="m-b-none">
{{if .isNew}}
2014-12-09 23:17:36 +08:00
{{msg $ "addTheme"}}
2014-11-09 16:24:19 +08:00
{{else}}
2014-12-09 23:17:36 +08:00
{{msg $ "updateTheme"}}
2014-11-09 16:24:19 +08:00
-
{{.theme.Name}}
{{end}}
2014-12-09 23:17:36 +08:00
<a class="btn btn-default" href="{{$.siteUrl}}/preview?themeId={{.themeId}}" target="_blank"><span class="fa fa-eye"></span> {{msg . "preview"}}</a>
<small>
2015-11-28 15:17:36 +08:00
<a target="_blank" href="https://github.com/leanote/leanote/wiki/leanote-blog-theme-api">{{msg . "needHelp"}} {{msg . "Leanote Blog Theme Api"}}</a>
2014-12-09 23:17:36 +08:00
</small>
2014-11-09 16:24:19 +08:00
</h3>
</div>
<style>
#tplContent * {
font-family: Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, monospace;
}
.image-list {
list-style: none;
padding: 0;
}
.image-list li {
display: inline-block;
margin-right: 5px;
text-align: center;
}
.image-list li .thumb {
width: 100px;
height: 100px;
line-height: 100px;
overflow: hidden;
border: 1px solid #ccc;
padding: 3px;
border-radius: 5px;
}
.op {
text-align: center;
}
</style>
<div class="row">
<div class="col-sm-4">
2014-11-09 16:24:19 +08:00
<section class="panel panel-default">
<header class="panel-heading">
2014-12-09 23:17:36 +08:00
{{msg . "tplStyleScript"}}:
2014-11-09 16:24:19 +08:00
</header>
2015-11-28 15:17:36 +08:00
<div class="panel-body" style="<!--height:430px;-->overflow: auto;">
2014-11-09 16:24:19 +08:00
<div class="list-group bg-white file-list">
{{range .myTpls}}
<a href="#" class="list-group-item " data-file="{{.}}">
<i class="fa fa-remove icon-muted remove-file" title="delete file" ></i>
<span class="filename" data-filename="{{.}}">{{.}}</span>
2014-11-09 16:24:19 +08:00
<span class="badge"></span>
</a>
{{end}}
</div>
</div>
<footer class="panel-footer text-right bg-light lter">
2014-12-09 23:17:36 +08:00
<a class="btn btn-default" id="newFile">{{msg . "newFile"}}</a>
2014-11-09 16:24:19 +08:00
</footer>
</section>
</div>
2015-11-28 15:17:36 +08:00
<div class="col-sm-8">
2014-11-09 16:24:19 +08:00
<section class="panel panel-default">
<header class="panel-heading">
2014-12-09 23:17:36 +08:00
{{msg . "currentFile"}}: <span id="curTpl">header.html</span>
2014-11-09 16:24:19 +08:00
<span id="msg"></span>
</header>
<div class="panel-body">
2015-11-28 15:17:36 +08:00
<div id="tplContent" class="form-control" style="width: 100%; height: 500px;"></div>
2014-11-09 16:24:19 +08:00
</div>
<footer class="panel-footer text-right bg-light lter">
<button type="submit" id="saveBtn" class="btn btn-success">{{msg . "save"}}</button>
</footer>
</section>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<section class="panel panel-default">
<header class="panel-heading">
2014-12-09 23:17:36 +08:00
{{msg . "image"}}: images/
2014-11-09 16:24:19 +08:00
</header>
<div class="panel-body">
<ul class="image-list" id="imageList">
</ul>
</div>
<footer class="panel-footer text-right bg-light lter">
<form id="formLogo" action="/member/blog/uploadThemeImage" method="post"
enctype="multipart/form-data" target="logoTarget">
<input type="hidden" name="themeId" value="{{.themeId}}" />
<input type="file" class="form-control" id="logo2" name="file"
onChange='$("#formLogo").submit();' />
</form>
<iframe id="logoTarget" name="logoTarget" src="#" style="display: none"></iframe>
</footer>
</section>
</div>
</div>
{{template "member/footer.html" .}}
2015-11-28 15:17:36 +08:00
<script src="/public/libs/ace/ace.js"></script>
2014-11-09 16:24:19 +08:00
<script>
var editor = ace.edit("tplContent");
editor.setTheme("ace/theme/tomorrow");
var urlPrefix = "{{.siteUrl}}";
var userId = "{{.userInfo.UserId.Hex}}";
var themeId = "{{.themeId}}";
var themeBasePath = "/{{$.theme.Path}}";
var theme = {
cache: {}, // filename => content
2015-11-28 15:17:36 +08:00
inited: {}, // filename => bool, 是否已初始化, 防止未加载完就切换到其它
2014-11-09 16:24:19 +08:00
curTplO: $("#curTpl"),
tplContentO: $("#tplContent"),
saveBtnO: $("#saveBtn"),
newFileO: $("#newFile"),
curTpl: "",
tplInfos: {"header.html": "{{msg . "header"}}", "footer.html": "{{msg . "footer"}}", "index.html": "{{msg . "index"}}", "cate.html": "{{msg . "cate"}}", "search.html": "{{msg . "search"}}", "single.html": "{{msg . "single"}}", "archive.html": "{{msg . "archive"}}", "post.html": "{{msg . "post"}}", "tags.html": "{{msg . "tags"}}", "tag_posts.html": "{{msg . "tag_posts"}}", "share_comment.html": "{{msg . "share_comment"}}", "404.html":"404", "theme.json": "{{msg . "themeJson"}}", "paging.html": "{{msg . "paging"}}", "highlight.html": "{{msg . "highlight"}}"},
2014-11-09 16:24:19 +08:00
init: function() {
var self = this;
self.showTplInfo();
$(".file-list").on("click", "a", function() {
$(".file-list a").removeClass("active");
var filename = $(this).data('file');
self.saveCurContent(); // 保存当前的
self.renderTpl(filename); // 再渲染
$(this).addClass("active");
});
self.renderTpl("header.html");
$(".file-list a").eq(0).addClass("active");
self.saveBtnO.click(function(){
self.saveCurContent($(this));
});
self.removeFile();
self.newFile();
self.initImage();
},
removeFile: function() {
var self = this;
$(".file-list").on("click", ".remove-file", function(e) {
e.stopPropagation();
var $a = $(this).closest("a");
var file = $a.data('file');
2015-11-28 15:17:36 +08:00
art.confirm(getMsg("Are you sure to delete") + ' ' + file + " ?", function() {
2014-11-09 16:24:19 +08:00
ajaxPost("/member/blog/deleteTpl", {themeId: themeId, filename: file}, function(re) {
// if(reIsOk(re)) {
2015-11-28 15:17:36 +08:00
art.tips(getMsg("Success"));
2014-11-09 16:24:19 +08:00
$a.remove();
if(self.curTpl == file) {
$(".file-list a").eq(0).trigger("click");
}
//} else {
// art.alert(re.Msg);
//}
2014-11-09 16:24:19 +08:00
})
});
});
},
newFile: function() {
var self = this;
self.newFileO.click(function() {
// 文件是否存在?
2015-11-28 15:17:36 +08:00
art.prompt(getMsg("Filename"), function(file) {
2014-11-09 16:24:19 +08:00
if(!file) {
return;
}
if($('[data-filename="' + file + '"]').length > 0) {
2015-11-28 15:17:36 +08:00
art.alert(getMsg('File exists'));
return;
}
2015-11-28 15:17:36 +08:00
var t = $('<a href="#" class="list-group-item " data-file="' + file + '"> <i class="fa fa-remove icon-muted remove-file" title="' + getMsg("Delete file") + '" ></i> <span class="filename" data-filename="' + file + '">' + file + '</span><span class="badge"></span></a>');
2014-11-09 16:24:19 +08:00
$(".file-list").append(t);
2015-11-28 15:17:36 +08:00
self.cache[file] = "";
2015-11-28 15:17:36 +08:00
self.inited[file] = true;
// trigger click, 选中之
t.click();
2014-11-09 16:24:19 +08:00
});
});
},
showTplInfo: function() {
var self = this;
$(".file-list a").each(function() {
var file = $(this).data("file");
var info = "";
info = self.tplInfos[file];
if(!info) {
if(file.indexOf(".css") > 0) {
2014-12-09 23:17:36 +08:00
info = "{{msg . "style"}}";
2014-11-09 16:24:19 +08:00
} else if(file.indexOf(".js") > 0) {
2014-12-09 23:17:36 +08:00
info = "{{msg . "script"}}";
2014-11-09 16:24:19 +08:00
} else if(file.indexOf(".html") > 0) {
2014-12-09 23:17:36 +08:00
info = "{{msg . "tpl"}}";
2014-11-09 16:24:19 +08:00
}
} else {
$(this).find(".remove-file").remove();
}
$(this).find(".badge").text(info);
});
},
msgO: $("#msg"),
saveCurContent: function(t) {
var self = this;
var content = editor.getValue()
var filename = self.curTpl;
if(!filename) {
return;
}
2014-11-09 16:24:19 +08:00
// 之前的内容是否有改动
if(self.cache[filename] == content) {
2015-11-28 15:17:36 +08:00
// console.log('content is same');
return;
}
// 内容都没有加载进来
if(!self.inited[filename]) {
// console.log('not inited');
2014-11-09 16:24:19 +08:00
return;
}
if(t) {
t.button("loading");
}
2014-12-09 23:17:36 +08:00
self.msgO.html("...");
2014-11-09 16:24:19 +08:00
ajaxPost("/member/blog/updateTplContent", {themeId: themeId, filename: self.curTpl, content: content}, function(re) {
if(t) {
t.button("reset");
}
if(reIsOk(re)) {
self.cache[filename] = content;
// art.tips("Success");
2014-12-09 23:17:36 +08:00
self.msgO.html("{{msg . "saveSuccess"}}")
2014-11-09 16:24:19 +08:00
setTimeout(function() {
self.msgO.html("");
}, 3000);
} else {
art.alert(re.Msg);
}
});
},
renderContent: function(name, content) {
var self = this;
self.curTplO.html(name);
2015-11-28 15:17:36 +08:00
// self.curTpl = name; // 这里才设置
2014-11-09 16:24:19 +08:00
var lang = "html";
if(name.indexOf(".js") > 0 || name.indexOf(".json") > 0) {
lang = "javascript";
} else if(name.indexOf(".css") > 0) {
lang = "css";
}
editor.setValue(content);
editor.session.setMode("ace/mode/" + lang);
editor.gotoLine(1);
setTimeout(function() {
editor.gotoLine(1);
}, 200);
},
renderTpl: function(name) {
var self = this;
var content = "";
2015-11-28 15:17:36 +08:00
self.curTpl = name; // 这里设置为空
if(self.cache[name] != undefined) {
2014-11-09 16:24:19 +08:00
content = self.cache[name];
self.renderContent(name, content);
return;
}
ajaxGet("/member/blog/getTplContent", {themeId: themeId, filename: name}, function(re){
if(reIsOk(re)) {
self.cache[name] = re.Item;
2015-11-28 15:17:36 +08:00
self.inited[name] = true;
// 以防点击过快, 响应不按顺序
if (self.curTpl == name) {
self.renderContent(name, re.Item);
} else {
alert(getMsg('Error'));
}
2014-11-09 16:24:19 +08:00
}
});
},
2014-11-09 16:24:19 +08:00
//-----------------
// theme images
imageListO: $("#imageList"),
initImage: function() {
var self = this;
self.reRenderImages();
self.imageListO.on("click", ".delete-image", function(re) {
var file = $(this).data('image');
var t = this;
2015-11-28 15:17:36 +08:00
art.confirm(getMsg("Are you sure to delete") + ' ' + file + " ?", function() {
2014-11-09 16:24:19 +08:00
ajaxPost("/member/blog/deleteThemeImage", {themeId: themeId, filename: file}, function(re) {
if(reIsOk(re)) {
2015-11-28 15:17:36 +08:00
art.tips(getMsg("Success"));
2014-11-09 16:24:19 +08:00
$(t).closest("li").remove();
} else {
art.alert(re.Msg);
}
});
});
});
},
renderImages: function(images) {
var self = this;
if(!images || images.length == 0) {
2015-11-28 15:17:36 +08:00
self.imageListO.html(getMsg("No images"));
2014-11-09 16:24:19 +08:00
return;
}
var html = "";
for(var i = 0; i < images.length; ++i) {
var image = images[i];
var path = themeBasePath + "/images/" + image;
html += '<li><div class="thumb"><img src="' + path + '"></div><div class="op"><span>' + image + '</span><br /><a class="btn btn-xs btn-warning delete-image" data-image="' + image + '"><span class="fa fa-remove"></span></a></div></li>';
}
self.imageListO.html(html);
},
reRenderImages: function() {
var self = this;
ajaxGet("/member/blog/listThemeImages", {themeId: themeId}, function(re) {
if(reIsOk(re)) {
var images = re.List;
self.renderImages(images);
}
});
},
}
2015-11-28 15:17:36 +08:00
$(function() {
2014-11-09 16:24:19 +08:00
theme.init();
$(window).keydown(function(e) {
if (e.keyCode == 83 && (e.ctrlKey || e.metaKey)) {
e.preventDefault();
theme.saveBtnO.trigger("click");
}
});
});
// filename, result, resultCode
function uploadFinish(ret) {
if (ret) {
if (ret.resultCode == '1') {
theme.reRenderImages();
art.tips(ret.result)
return;
}
art.alert(ret.result);
return;
}
// 上传出错
2015-11-28 15:17:36 +08:00
art.alert(getMsg("Error"));
2014-11-09 16:24:19 +08:00
}
</script>
{{template "member/end.html" .}}