mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-11 08:52:27 +08:00
refactor: eiblog
This commit is contained in:
162
website/admin/backLayout.html
Normal file
162
website/admin/backLayout.html
Normal file
@@ -0,0 +1,162 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="zh-cn">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{.Title}}</title>
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<link rel="stylesheet" href="/static/admin/style.css">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||||
<script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if lt IE 9]>
|
||||
<div class="alert alert-danger topframe" role="alert">你的浏览器实在<strong>太太太太太太旧了</strong>,放学别走,升级完浏览器再说 <a target="_blank" class="alert-link" href="http://browsehappy.com">立即升级</a></div>
|
||||
<![endif]-->
|
||||
<script src="/static/admin/jquery.js"></script>
|
||||
<script src="/static/admin/jquery-ui.js"></script>
|
||||
<script src="/static/admin/typecho.js"></script>
|
||||
<div class="typecho-head-nav clearfix" role="navigation">
|
||||
<nav id="typecho-nav-list">
|
||||
<ul class="root {{if .Console}}focus{{end}}">
|
||||
<li class="parent"><a target="_self" href="/admin/profile">控制台</a></dt>
|
||||
</li>
|
||||
<ul class="child">
|
||||
<li {{if eq .Path "/admin/profile"}}class="focus" {{end}}><a target="_self" href="/admin/profile">个人设置</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
<ul class="root {{if .Post}}focus{{end}}">
|
||||
<li class="parent"><a target="_self" href="/admin/write-post">撰写</a></dt>
|
||||
</li>
|
||||
<ul class="child">
|
||||
<li class="last {{if eq .Path "/admin/write-post"}}focus{{end}}"><a target="_self" href="/admin/write-post">撰写文章</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
<ul class="root {{if .Manage}}focus{{end}}">
|
||||
<li class="parent"><a target="_self" href="/admin/manage-posts">管理</a></dt>
|
||||
</li>
|
||||
<ul class="child">
|
||||
<li {{if eq .Path "/admin/manage-posts"}}class="focus" {{end}}><a target="_self" href="/admin/manage-posts">文章</a></li>
|
||||
<li {{if eq .Path "/admin/manage-series"}}class="focus" {{end}}><a target="_self" href="/admin/manage-series">专题</a></li>
|
||||
{{if eq .Path "/admin/add-serie"}}<li class="focus"><a target="_self" href="/admin/add-serie">{{if .Edit}}编辑专题{{else}}新增专题{{end}}</a></li>{{end}}
|
||||
<li class="last {{if eq .Path "/admin/manage-tags"}}focus{{end}}"><a target="_self" href="/admin/manage-tags">标签</a></li>
|
||||
<li class="last {{if eq .Path "/admin/manage-draft"}}focus{{end}}"><a target="_self" href="/admin/manage-draft">草稿箱</a></li>
|
||||
<li class="last {{if eq .Path "/admin/manage-trash"}}focus{{end}}"><a target="_self" href="/admin/manage-trash">回收箱</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
<ul class="root {{if .Setting}}focus{{end}}">
|
||||
<li class="parent"><a target="_self" href="/admin/options-general">设置</a></dt>
|
||||
</li>
|
||||
<ul class="child">
|
||||
<li {{if eq .Path "/admin/options-general"}}class="focus" {{end}}><a target="_self" href="/admin/options-general">基本</a></li>
|
||||
<li class="last {{if eq .Path "/admin/options-discussion"}}focus{{end}}"><a target="_self" href="/admin/options-discussion">阅读</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="operate">
|
||||
<a target="_self" title="{{.LastLogin}}" href="/admin/profile" class="author">{{.Author}}</a><a class="exit" href="/admin/login?logout=true">登出</a><a target="_blank" href="/">网站</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main">
|
||||
{{.LayoutContent}}
|
||||
</div>
|
||||
<div class="typecho-foot" role="contentinfo">
|
||||
<div class="copyright">
|
||||
<a href="http://typecho.org" class="i-logo-s">Typecho</a>
|
||||
<p>由 <a href="http://typecho.org">Typecho</a> 提供皮肤, 版本 1.0 (14.10.10)</p>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
$(document).ready(function() {
|
||||
// 处理消息机制
|
||||
(function () {
|
||||
cookies = {
|
||||
notice : $.cookie( 'notice'),
|
||||
noticeType : $.cookie( 'notice_type'),
|
||||
highlight : $.cookie('notice_highlight')
|
||||
},
|
||||
path = '/';
|
||||
|
||||
if (!!cookies.notice && 'success|notice|error'.indexOf(cookies.noticeType) >= 0) {
|
||||
var head = $('.typecho-head-nav'),
|
||||
p = $('<div class="message popup ' + cookies.noticeType + '">'
|
||||
+ '<ul><li>' + $.parseJSON(cookies.notice).join('</li><li>')
|
||||
+ '</li></ul></div>'), offset = 0;
|
||||
|
||||
if (head.length > 0) {
|
||||
p.insertAfter(head);
|
||||
offset = head.outerHeight();
|
||||
} else {
|
||||
p.prependTo(document.body);
|
||||
}
|
||||
|
||||
function checkScroll () {
|
||||
if ($(window).scrollTop() >= offset) {
|
||||
p.css({
|
||||
'position' : 'fixed',
|
||||
'top' : 0
|
||||
});
|
||||
} else {
|
||||
p.css({
|
||||
'position' : 'absolute',
|
||||
'top' : offset
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(window).scroll(function () {
|
||||
checkScroll();
|
||||
});
|
||||
|
||||
checkScroll();
|
||||
|
||||
p.slideDown(function () {
|
||||
var t = $(this), color = '#C6D880';
|
||||
|
||||
if (t.hasClass('error')) {
|
||||
color = '#FBC2C4';
|
||||
} else if (t.hasClass('notice')) {
|
||||
color = '#FFD324';
|
||||
}
|
||||
|
||||
t.effect('highlight', {color : color})
|
||||
.delay(5000).slideUp(function () {
|
||||
$(this).remove();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$.cookie('notice', null, {path : path});
|
||||
$.cookie('notice_type', null, {path : path});
|
||||
}
|
||||
|
||||
if (cookies.highlight) {
|
||||
$('#' + cookies.highlight).effect('highlight', 1000);
|
||||
$.cookie('notice_highlight', null, {path : path});
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
// 导航菜单 tab 聚焦时展开下拉菜单
|
||||
(function () {
|
||||
$('#typecho-nav-list').find('.parent a').focus(function() {
|
||||
$('#typecho-nav-list').find('.child').hide();
|
||||
$(this).parents('.root').find('.child').show();
|
||||
});
|
||||
$('.operate').find('a').focus(function() {
|
||||
$('#typecho-nav-list').find('.child').hide();
|
||||
});
|
||||
})();
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
3
website/admin/discussion.html
Normal file
3
website/admin/discussion.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{{define "admin-discussion"}}
|
||||
|
||||
{{end}}
|
||||
81
website/admin/draft.html
Normal file
81
website/admin/draft.html
Normal file
@@ -0,0 +1,81 @@
|
||||
{{define "admin-draft"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>草稿箱</h2>
|
||||
</div>
|
||||
<div class="row typecho-page-main manage-metas">
|
||||
<div class="col-mb-12" role="main">
|
||||
<form method="post" name="manage_draft" class="operate-form">
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a lang="此草稿箱下的所有内容将被永久删除, 你确认要删除这些文章吗?" href="/admin/api/draft-delete">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search" role="search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="typecho-table-wrap">
|
||||
<table class="typecho-list-table">
|
||||
<colgroup>
|
||||
<col width="20" />
|
||||
<col width="40%" />
|
||||
<col width="" />
|
||||
<col width="12%" />
|
||||
<col width="14%" />
|
||||
<col width="14%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>标题</th>
|
||||
<th>作者</th>
|
||||
<th>专题</th>
|
||||
<th>创建</th>
|
||||
<th>保存</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .List}}
|
||||
<tr id="mid-article-{{.ID}}">
|
||||
<td>
|
||||
<input type="checkbox" value="{{.ID}}" name="mid[]" />
|
||||
</td>
|
||||
<td><a href="/admin/write-post?cid={{.ID}}">{{.Title}}</a></td>
|
||||
<td>{{.Author}}</td>
|
||||
<td>{{if gt .SerieID 0}}专题ID:{{.SerieID}}{{else}}--{{end}}</td>
|
||||
<td>{{dateformat .CreateTime "2006/01/02 15:04"}}</td>
|
||||
<td>{{dateformat .UpdateTime "2006/01/02 15:04"}}</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
$('.typecho-list-table').tableSelectable({
|
||||
checkEl: 'input[type=checkbox]',
|
||||
rowEl: 'tr',
|
||||
selectAllEl: '.typecho-table-select-all',
|
||||
actionEl: '.dropdown-menu a,button.btn-operate'
|
||||
});
|
||||
|
||||
$('.btn-drop').dropdownMenu({
|
||||
btnEl: '.dropdown-toggle',
|
||||
menuEl: '.dropdown-menu'
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
3
website/admin/general.html
Normal file
3
website/admin/general.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{{define "admin-general"}}
|
||||
|
||||
{{end}}
|
||||
38
website/admin/login.html
Normal file
38
website/admin/login.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!Doctype html>
|
||||
<html lang="zh-cn">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" name=viewport>
|
||||
<meta name=robots content="noindex, nofollow">
|
||||
<title>登录 | {{.BTitle}}</title>
|
||||
<link rel=stylesheet href="/static/admin/style.css">
|
||||
</head>
|
||||
|
||||
<body class="body-100">
|
||||
<div class="typecho-login-wrap">
|
||||
<div class="typecho-login">
|
||||
<h1><a href="/">{{.BTitle}}</a></h1>
|
||||
<form action="/admin/login" method=post>
|
||||
<p>
|
||||
<label for=user class="sr-only">用户名</label>
|
||||
<input type=text id=user name=user placeholder="用户名" class="text-l w-100">
|
||||
</p>
|
||||
<p>
|
||||
<label for=password class="sr-only">密码</label>
|
||||
<input type=password id=password name=password class="text-l w-100" placeholder="密码">
|
||||
</p>
|
||||
<!-- <p>
|
||||
<label for=code class="sr-only">两步验证</label>
|
||||
<input type=text id=code name=code class="text-l w-100" placeholder="两步验证">
|
||||
</p> -->
|
||||
<p class=submit>
|
||||
<button type=submit class="btn btn-l w-100 primary">登录</button>
|
||||
</p>
|
||||
</form>
|
||||
<p class="more-link">管理后台皮肤来自于<a href="http://typecho.org" target=_blank>Typecho</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
846
website/admin/post.html
Normal file
846
website/admin/post.html
Normal file
@@ -0,0 +1,846 @@
|
||||
{{define "admin-post"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
{{if .Edit}}<h2>编辑 {{.Edit.Title}}</h2>{{else}}<h2>撰写文章</h2>{{end}}
|
||||
</div>
|
||||
<div class="row typecho-page-main typecho-post-area" role="form">
|
||||
<form action="/admin/api/post-add" method="post" name="write_post">
|
||||
<div class="col-mb-12 col-tb-9" role="main">
|
||||
{{if .Edit.IsDraft}}<cite class="edit-draft-notice">你正在编辑的是草稿, 你也可以 <a href="/admin/draft-delete?cid={{.Edit.ID}}">删除它</a></cite>{{end}}
|
||||
<p class="title">
|
||||
<label for="title" class="sr-only">标题</label>
|
||||
<input type="text" id="title" name="title" autocomplete="off" {{with .Edit}}value="{{.Title}}"{{end}} placeholder="标题" class="w-100 text title" />
|
||||
</p>
|
||||
<p class="mono url-slug">
|
||||
<label for="slug" class="sr-only">网址缩略名</label>
|
||||
https://{{.Domain}}/post/<input type="text" id="slug" name="slug" autocomplete="off" {{with .Edit}}value="{{.Slug}}" {{end}} class="mono" />.html </p>
|
||||
<p>
|
||||
<label for="text" class="sr-only">文章内容</label>
|
||||
<textarea style="height: 350px" autocomplete="off" id="text" name="text" class="w-100 mono">{{with .Edit}}{{.Content}}{{end}}</textarea>
|
||||
</p>
|
||||
<p class="submit clearfix">
|
||||
<span class="right">
|
||||
<input type="hidden" name="cid" {{with .Edit}}value="{{.ID}}"{{end}} />
|
||||
<button type="submit" name="do" value="save" id="btn-save" class="btn">保存草稿</button>
|
||||
<button type="submit" name="do" value="publish" class="btn primary" id="btn-submit">发布文章</button>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div id="edit-secondary" class="col-mb-12 col-tb-3" role="complementary">
|
||||
<ul class="typecho-option-tabs clearfix">
|
||||
<li class="active w-50"><a href="#tab-advance">选项</a></li>
|
||||
<li class="w-50"><a href="#tab-files" id="tab-files-btn">上传</a></li>
|
||||
</ul>
|
||||
<div id="tab-advance" class="tab-content">
|
||||
<section class="typecho-post-option" role="application">
|
||||
<label for="date" class="typecho-label">发布日期</label>
|
||||
<p>
|
||||
<input class="typecho-date w-100" type="text" name="date" id="date" {{with .Edit}}value="{{dateformat .CreateTime "2006-01-02 15:04"}}"{{end}} />
|
||||
</p>
|
||||
</section>
|
||||
<section class="typecho-post-option category-option">
|
||||
<label class="typecho-label">专题</label>
|
||||
<ul>
|
||||
<li>
|
||||
<input type="radio" id="serie-0" value="0" name="serie" checked="true"/>
|
||||
<label for="serie-0">默认专题</label>
|
||||
</li>
|
||||
{{range $k,$v:=.Series}}
|
||||
<li>
|
||||
<input type="radio" id="serie-{{$v.ID}}" value="{{$v.ID}}" name="serie" {{with $.Edit}}{{if eq .SerieID $v.ID}}checked="true"{{end}}{{end}}/>
|
||||
<label for="serie-{{$v.ID}}">{{$v.Name}}</label>
|
||||
</li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</section>
|
||||
<section class="typecho-post-option">
|
||||
<label for="token-input-tags" class="typecho-label">标签</label>
|
||||
<p>
|
||||
<input id="tags" name="tags" type="text" {{with .Edit}}value="{{join .Tags ","}}"{{end}} class="w-100 text" />
|
||||
</p>
|
||||
</section>
|
||||
<section class="typecho-post-option category-option">
|
||||
<label class="typecho-label">其它选项</label>
|
||||
<ul>
|
||||
<li>
|
||||
<input type="checkbox" id="update" value="true" name="update" />
|
||||
<label for="update">变动很大(更新时间)?</label>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
<!-- end #tab-advance -->
|
||||
<div id="tab-files" class="tab-content hidden">
|
||||
<div id="upload-panel" class="p">
|
||||
<div class="upload-area" draggable="true">拖放文件到这里
|
||||
<br>或者 <a href="###" class="upload-file">选择文件上传</a></div>
|
||||
<ul id="file-list">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end #tab-files -->
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
var error = $('.typecho-option .error:first');
|
||||
|
||||
if (error.length > 0) {
|
||||
$('html,body').scrollTop(error.parents('.typecho-option').offset().top);
|
||||
}
|
||||
|
||||
$('form').submit(function() {
|
||||
if (this.submitted) {
|
||||
return false;
|
||||
} else {
|
||||
this.submitted = true;
|
||||
}
|
||||
});
|
||||
|
||||
$('label input[type=text]').click(function(e) {
|
||||
var check = $('#' + $(this).parents('label').attr('for'));
|
||||
check.prop('checked', true);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<script src="/static/admin/timepicker.js"></script>
|
||||
<script src="/static/admin/tokeninput.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// 日期时间控件
|
||||
$('#date').mask('9999-99-99 99:99').datetimepicker({
|
||||
currentText: '现在',
|
||||
prevText: '上一月',
|
||||
nextText: '下一月',
|
||||
monthNames: ['一月', '二月', '三月', '四月',
|
||||
'五月', '六月', '七月', '八月',
|
||||
'九月', '十月', '十一月', '十二月'
|
||||
],
|
||||
dayNames: ['星期日', '星期一', '星期二',
|
||||
'星期三', '星期四', '星期五', '星期六'
|
||||
],
|
||||
dayNamesShort: ['周日', '周一', '周二', '周三',
|
||||
'周四', '周五', '周六'
|
||||
],
|
||||
dayNamesMin: ['日', '一', '二', '三',
|
||||
'四', '五', '六'
|
||||
],
|
||||
closeText: '完成',
|
||||
timeOnlyTitle: '选择时间',
|
||||
timeText: '时间',
|
||||
hourText: '时',
|
||||
amNames: ['上午', 'A'],
|
||||
pmNames: ['下午', 'P'],
|
||||
minuteText: '分',
|
||||
secondText: '秒',
|
||||
|
||||
dateFormat: 'yy-mm-dd',
|
||||
hour: (new Date()).getHours(),
|
||||
minute: (new Date()).getMinutes()
|
||||
});
|
||||
|
||||
// 聚焦
|
||||
$('#title').select();
|
||||
|
||||
// tag autocomplete 提示
|
||||
var tags = $('#tags'),
|
||||
tagsPre = [];
|
||||
|
||||
if (tags.length > 0) {
|
||||
var items = tags.val().split(','),
|
||||
result = [];
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var tag = items[i];
|
||||
|
||||
if (!tag) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tagsPre.push({
|
||||
id: tag,
|
||||
tags: tag
|
||||
});
|
||||
}
|
||||
|
||||
tags.tokenInput({{.Tags}}, {
|
||||
propertyToSearch: 'tags',
|
||||
tokenValue: 'tags',
|
||||
searchDelay: 0,
|
||||
preventDuplicates: true,
|
||||
animateDropdown: false,
|
||||
hintText: '请输入标签名',
|
||||
noResultsText: '此标签不存在, 按回车创建',
|
||||
prePopulate: tagsPre,
|
||||
|
||||
onResult: function(result, query) {
|
||||
if (!query) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
result = [];
|
||||
}
|
||||
|
||||
if (!result[0] || result[0]['id'] != query) {
|
||||
result.unshift({
|
||||
id: query,
|
||||
tags: query
|
||||
});
|
||||
}
|
||||
|
||||
return result.slice(0, 5);
|
||||
}
|
||||
});
|
||||
|
||||
// tag autocomplete 提示宽度设置
|
||||
$('#token-input-tags').focus(function() {
|
||||
var t = $('.token-input-dropdown'),
|
||||
offset = t.outerWidth() - t.width();
|
||||
t.width($('.token-input-list').outerWidth() - offset);
|
||||
});
|
||||
}
|
||||
|
||||
// 缩略名自适应宽度
|
||||
var slug = $('#slug');
|
||||
|
||||
if (slug.length > 0) {
|
||||
var wrap = $('<div />').css({
|
||||
'position': 'relative',
|
||||
'display': 'inline-block'
|
||||
}),
|
||||
justifySlug = $('<pre />').css({
|
||||
'display': 'block',
|
||||
'visibility': 'hidden',
|
||||
'height': slug.height(),
|
||||
'padding': '0 2px',
|
||||
'margin': 0
|
||||
}).insertAfter(slug.wrap(wrap).css({
|
||||
'left': 0,
|
||||
'top': 0,
|
||||
'minWidth': '5px',
|
||||
'position': 'absolute',
|
||||
'width': '100%'
|
||||
})),
|
||||
originalWidth = slug.width();
|
||||
|
||||
function justifySlugWidth() {
|
||||
var val = slug.val();
|
||||
justifySlug.text(val.length > 0 ? val : ' ');
|
||||
}
|
||||
|
||||
slug.bind('input propertychange', justifySlugWidth);
|
||||
justifySlugWidth();
|
||||
}
|
||||
|
||||
// 原始的插入图片和文件
|
||||
Typecho.insertFileToEditor = function(file, url, isImage) {
|
||||
var textarea = $('#text'),
|
||||
sel = textarea.getSelection(),
|
||||
html = isImage ? '<img src="' + url + '" alt="' + file + '" />' : '<a href="' + url + '">' + file + '</a>',
|
||||
offset = (sel ? sel.start : 0) + html.length;
|
||||
|
||||
textarea.replaceSelection(html);
|
||||
textarea.setSelection(offset, offset);
|
||||
};
|
||||
|
||||
var submitted = false,
|
||||
form = $('form[name=write_post],form[name=write_page]').submit(function() {
|
||||
submitted = true;
|
||||
}),
|
||||
savedData = null;
|
||||
|
||||
// 自动保存
|
||||
var locked = false,
|
||||
formAction = form.attr('action'),
|
||||
idInput = $('input[name=cid]'),
|
||||
cid = idInput.val(),
|
||||
autoSave = $('<span id="auto-save-message" class="left"></span>').prependTo('.submit'),
|
||||
autoSaveOnce = !!cid,
|
||||
lastSaveTime = null;
|
||||
|
||||
function autoSaveListener() {
|
||||
setInterval(function() {
|
||||
var data = form.serialize();
|
||||
|
||||
if (savedData != data && !locked) {
|
||||
locked = true;
|
||||
|
||||
autoSave.text('正在保存');
|
||||
$.post(formAction, data + '&do=auto', function(o) {
|
||||
savedData = data;
|
||||
lastSaveTime = o.time;
|
||||
idInput.val(o.cid);
|
||||
autoSave.text('已保存' + ' (' + o.time + ')').effect('highlight', 1000);
|
||||
locked = false;
|
||||
}, 'json');
|
||||
}
|
||||
}, 20000);
|
||||
}
|
||||
|
||||
if (autoSaveOnce) {
|
||||
savedData = form.serialize();
|
||||
autoSaveListener();
|
||||
}
|
||||
|
||||
$('#text').bind('input propertychange', function() {
|
||||
if (!locked) {
|
||||
autoSave.text('尚未保存' + (lastSaveTime ? ' (上次保存时间: ' + lastSaveTime + ')' : ''));
|
||||
}
|
||||
|
||||
if (!autoSaveOnce) {
|
||||
autoSaveOnce = true;
|
||||
autoSaveListener();
|
||||
}
|
||||
});
|
||||
|
||||
// 自动检测离开页
|
||||
var lastData = form.serialize();
|
||||
|
||||
$(window).bind('beforeunload', function() {
|
||||
if (!!savedData) {
|
||||
lastData = savedData;
|
||||
}
|
||||
|
||||
if (form.serialize() != lastData && !submitted) {
|
||||
return '内容已经改变尚未保存, 您确认要离开此页面吗?';
|
||||
}
|
||||
});
|
||||
|
||||
// 控制选项和附件的切换
|
||||
var fileUploadInit = false;
|
||||
$('#edit-secondary .typecho-option-tabs li').click(function() {
|
||||
$('#edit-secondary .typecho-option-tabs li').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
$('.tab-content').addClass('hidden');
|
||||
|
||||
var selected_tab = $(this).find('a').attr('href'),
|
||||
selected_el = $(selected_tab).removeClass('hidden');
|
||||
|
||||
if (!fileUploadInit) {
|
||||
selected_el.trigger('init');
|
||||
fileUploadInit = true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
// 自动隐藏密码框
|
||||
$('#visibility').change(function() {
|
||||
var val = $(this).val(),
|
||||
password = $('#post-password');
|
||||
|
||||
if ('password' == val) {
|
||||
password.removeClass('hidden');
|
||||
} else {
|
||||
password.addClass('hidden');
|
||||
}
|
||||
});
|
||||
|
||||
// 草稿删除确认
|
||||
$('.edit-draft-notice a').click(function () {
|
||||
if (confirm('您确认要删除这份草稿吗?')) {
|
||||
window.location.href = $(this).attr('href');
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script src="/static/admin/hyperdown.js"></script>
|
||||
<script src="/static/admin/pagedown.js"></script>
|
||||
<script src="/static/admin/pagedown-extra.js"></script>
|
||||
<script src="/static/admin/diff.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var textarea = $('#text'),
|
||||
toolbar = $('<div class="editor" id="wmd-button-bar" />').insertBefore(textarea.parent()),
|
||||
preview = $('<div id="wmd-preview" class="wmd-hidetab" />').insertAfter('.editor');
|
||||
|
||||
var options = {},
|
||||
isMarkdown = 1;
|
||||
|
||||
options.strings = {
|
||||
bold: '加粗 <strong> Ctrl+B',
|
||||
boldexample: '加粗文字',
|
||||
|
||||
italic: '斜体 <em> Ctrl+I',
|
||||
italicexample: '斜体文字',
|
||||
|
||||
link: '链接 <a> Ctrl+L',
|
||||
linkdescription: '请输入链接描述',
|
||||
|
||||
quote: '引用 <blockquote> Ctrl+Q',
|
||||
quoteexample: '引用文字',
|
||||
|
||||
code: '代码 <pre><code> Ctrl+K',
|
||||
codeexample: '请输入代码',
|
||||
|
||||
image: '图片 <img> Ctrl+G',
|
||||
imagedescription: '请输入图片描述',
|
||||
|
||||
olist: '数字列表 <ol> Ctrl+O',
|
||||
ulist: '普通列表 <ul> Ctrl+U',
|
||||
litem: '列表项目',
|
||||
|
||||
heading: '标题 <h1>/<h2> Ctrl+H',
|
||||
headingexample: '标题文字',
|
||||
|
||||
hr: '分割线 <hr> Ctrl+R',
|
||||
more: '摘要分割线 <!--more--> Ctrl+M',
|
||||
|
||||
undo: '撤销 - Ctrl+Z',
|
||||
redo: '重做 - Ctrl+Y',
|
||||
redomac: '重做 - Ctrl+Shift+Z',
|
||||
|
||||
fullscreen: '全屏 - Ctrl+J',
|
||||
exitFullscreen: '退出全屏 - Ctrl+E',
|
||||
fullscreenUnsupport: '此浏览器不支持全屏操作',
|
||||
|
||||
imagedialog: '<p><b>插入图片</b></p><p>请在下方的输入框内输入要插入的远程图片地址</p><p>您也可以使用附件功能插入上传的本地图片</p>',
|
||||
linkdialog: '<p><b>插入链接</b></p><p>请在下方的输入框内输入要插入的链接地址</p>',
|
||||
|
||||
ok: '确定',
|
||||
cancel: '取消',
|
||||
|
||||
help: 'Markdown语法帮助'
|
||||
};
|
||||
|
||||
var converter = new HyperDown(),
|
||||
editor = new Markdown.Editor(converter, '', options),
|
||||
diffMatch = new diff_match_patch(), last = '', preview = $('#wmd-preview'),
|
||||
mark = '@mark' + Math.ceil(Math.random() * 100000000) + '@',
|
||||
span = '<span class="diff" />',
|
||||
cache = {};
|
||||
|
||||
|
||||
// 自动跟随
|
||||
converter.hook('makeHtml', function (html) {
|
||||
// convert all comment
|
||||
html = html.replace(/<!--(.+?)-->/g, '<!--$1-->');
|
||||
|
||||
if (html.indexOf('<!--more-->') > 0) {
|
||||
var parts = html.split(/\s*<\!\-\-more\-\->\s*/),
|
||||
summary = parts.shift(),
|
||||
details = parts.join('');
|
||||
|
||||
html = '<div class="summary">' + summary + '</div>'
|
||||
+ '<div class="details">' + details + '</div>';
|
||||
}
|
||||
|
||||
|
||||
var diffs = diffMatch.diff_main(last, html);
|
||||
last = html;
|
||||
|
||||
if (diffs.length > 0) {
|
||||
var stack = [], markStr = mark;
|
||||
|
||||
for (var i = 0; i < diffs.length; i ++) {
|
||||
var diff = diffs[i], op = diff[0], str = diff[1]
|
||||
sp = str.lastIndexOf('<'), ep = str.lastIndexOf('>');
|
||||
|
||||
if (op != 0) {
|
||||
if (sp >=0 && sp > ep) {
|
||||
if (op > 0) {
|
||||
stack.push(str.substring(0, sp) + markStr + str.substring(sp));
|
||||
} else {
|
||||
var lastStr = stack[stack.length - 1], lastSp = lastStr.lastIndexOf('<');
|
||||
stack[stack.length - 1] = lastStr.substring(0, lastSp) + markStr + lastStr.substring(lastSp);
|
||||
}
|
||||
} else {
|
||||
if (op > 0) {
|
||||
stack.push(str + markStr);
|
||||
} else {
|
||||
stack.push(markStr);
|
||||
}
|
||||
}
|
||||
|
||||
markStr = '';
|
||||
} else {
|
||||
stack.push(str);
|
||||
}
|
||||
}
|
||||
|
||||
html = stack.join('');
|
||||
|
||||
if (!markStr) {
|
||||
var pos = html.indexOf(mark), prev = html.substring(0, pos),
|
||||
next = html.substr(pos + mark.length),
|
||||
sp = prev.lastIndexOf('<'), ep = prev.lastIndexOf('>');
|
||||
|
||||
if (sp >= 0 && sp > ep) {
|
||||
html = prev.substring(0, sp) + span + prev.substring(sp) + next;
|
||||
} else {
|
||||
html = prev + span + next;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 替换img
|
||||
html = html.replace(/<(img)\s+([^>]*)\s*src="([^"]+)"([^>]*)>/ig, function (all, tag, prefix, src, suffix) {
|
||||
if (!cache[src]) {
|
||||
cache[src] = false;
|
||||
} else {
|
||||
return '<span class="cache" data-width="' + cache[src][0] + '" data-height="' + cache[src][1] + '" '
|
||||
+ 'style="background:url(' + src + ') no-repeat left top; width:'
|
||||
+ cache[src][0] + 'px; height:' + cache[src][1] + 'px; display: inline-block; max-width: 100%;'
|
||||
+ '-webkit-background-size: contain;-moz-background-size: contain;-o-background-size: contain;background-size: contain;" />';
|
||||
}
|
||||
|
||||
return all;
|
||||
});
|
||||
|
||||
// 替换block
|
||||
html = html.replace(/<(iframe|embed)\s+([^>]*)>/ig, function (all, tag, src) {
|
||||
if (src[src.length - 1] == '/') {
|
||||
src = src.substring(0, src.length - 1);
|
||||
}
|
||||
|
||||
return '<div style="background: #ddd; height: 40px; overflow: hidden; line-height: 40px; text-align: center; font-size: 12px; color: #777">'
|
||||
+ tag + ' : ' + $.trim(src) + '</div>';
|
||||
});
|
||||
|
||||
return html;
|
||||
});
|
||||
|
||||
function cacheResize() {
|
||||
var t = $(this), w = parseInt(t.data('width')), h = parseInt(t.data('height')),
|
||||
ow = t.width();
|
||||
|
||||
t.height(h * ow / w);
|
||||
}
|
||||
|
||||
var to;
|
||||
editor.hooks.chain('onPreviewRefresh', function () {
|
||||
var diff = $('.diff', preview), scrolled = false;
|
||||
|
||||
if (to) {
|
||||
clearTimeout(to);
|
||||
}
|
||||
|
||||
$('img', preview).load(function () {
|
||||
var t = $(this), src = t.attr('src');
|
||||
|
||||
if (scrolled) {
|
||||
preview.scrollTo(diff, {
|
||||
offset : - 50
|
||||
});
|
||||
}
|
||||
|
||||
if (!!src && !cache[src]) {
|
||||
cache[src] = [this.width, this.height];
|
||||
}
|
||||
});
|
||||
|
||||
$('.cache', preview).resize(cacheResize).each(cacheResize);
|
||||
|
||||
var changed = $('.diff', preview).parent();
|
||||
if (!changed.is(preview)) {
|
||||
changed.css('background-color', 'rgba(255,230,0,0.5)');
|
||||
to = setTimeout(function () {
|
||||
changed.css('background-color', 'transparent');
|
||||
}, 4500);
|
||||
}
|
||||
|
||||
if (diff.length > 0) {
|
||||
var p = diff.position(), lh = diff.parent().css('line-height');
|
||||
lh = !!lh ? parseInt(lh) : 0;
|
||||
|
||||
if (p.top < 0 || p.top > preview.height() - lh) {
|
||||
preview.scrollTo(diff, {
|
||||
offset : - 50
|
||||
});
|
||||
scrolled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var input = $('#text'), th = textarea.height(), ph = preview.height(),
|
||||
uploadBtn = $('<button type="button" id="btn-fullscreen-upload" class="btn btn-link">'
|
||||
+ '<i class="i-upload">附件</i></button>')
|
||||
.prependTo('.submit .right')
|
||||
.click(function() {
|
||||
$('a', $('.typecho-option-tabs li').not('.active')).trigger('click');
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.typecho-option-tabs li').click(function () {
|
||||
uploadBtn.find('i').toggleClass('i-upload-active',
|
||||
$('#tab-files-btn', this).length > 0);
|
||||
});
|
||||
|
||||
editor.hooks.chain('enterFakeFullScreen', function () {
|
||||
th = textarea.height();
|
||||
ph = preview.height();
|
||||
$(document.body).addClass('fullscreen');
|
||||
var h = $(window).height() - toolbar.outerHeight();
|
||||
|
||||
textarea.css('height', h);
|
||||
preview.css('height', h);
|
||||
});
|
||||
|
||||
editor.hooks.chain('enterFullScreen', function () {
|
||||
$(document.body).addClass('fullscreen');
|
||||
|
||||
var h = window.screen.height - toolbar.outerHeight();
|
||||
textarea.css('height', h);
|
||||
preview.css('height', h);
|
||||
});
|
||||
|
||||
editor.hooks.chain('exitFullScreen', function () {
|
||||
$(document.body).removeClass('fullscreen');
|
||||
textarea.height(th);
|
||||
preview.height(ph);
|
||||
});
|
||||
|
||||
function initMarkdown() {
|
||||
editor.run();
|
||||
|
||||
var imageButton = $('#wmd-image-button'),
|
||||
linkButton = $('#wmd-link-button');
|
||||
|
||||
Typecho.insertFileToEditor = function (file, url, isImage) {
|
||||
var button = isImage ? imageButton : linkButton;
|
||||
|
||||
options.strings[isImage ? 'imagename' : 'linkname'] = file;
|
||||
button.trigger('click');
|
||||
|
||||
var checkDialog = setInterval(function () {
|
||||
if ($('.wmd-prompt-dialog').length > 0) {
|
||||
$('.wmd-prompt-dialog input').val(url).select();
|
||||
clearInterval(checkDialog);
|
||||
checkDialog = null;
|
||||
}
|
||||
}, 10);
|
||||
};
|
||||
|
||||
Typecho.uploadComplete = function (file) {
|
||||
Typecho.insertFileToEditor(file.title, file.url, file.isImage);
|
||||
};
|
||||
|
||||
// 编辑预览切换
|
||||
var edittab = $('.editor').prepend('<div class="wmd-edittab"><a href="#wmd-editarea" class="active">撰写</a><a href="#wmd-preview">预览</a></div>'),
|
||||
editarea = $(textarea.parent()).attr("id", "wmd-editarea");
|
||||
|
||||
$(".wmd-edittab a").click(function() {
|
||||
$(".wmd-edittab a").removeClass('active');
|
||||
$(this).addClass("active");
|
||||
$("#wmd-editarea, #wmd-preview").addClass("wmd-hidetab");
|
||||
|
||||
var selected_tab = $(this).attr("href"),
|
||||
selected_el = $(selected_tab).removeClass("wmd-hidetab");
|
||||
|
||||
// 预览时隐藏编辑器按钮
|
||||
if (selected_tab == "#wmd-preview") {
|
||||
$("#wmd-button-row").addClass("wmd-visualhide");
|
||||
} else {
|
||||
$("#wmd-button-row").removeClass("wmd-visualhide");
|
||||
}
|
||||
|
||||
// 预览和编辑窗口高度一致
|
||||
$("#wmd-preview").outerHeight($("#wmd-editarea").innerHeight());
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
initMarkdown();
|
||||
});
|
||||
</script>
|
||||
<script src="/static/admin/moxie.js"></script>
|
||||
<script src="/static/admin/plupload.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
function updateAttacmentNumber () {
|
||||
var btn = $('#tab-files-btn'),
|
||||
balloon = $('.balloon', btn),
|
||||
count = $('#file-list li .insert').length;
|
||||
|
||||
if (count > 0) {
|
||||
if (!balloon.length) {
|
||||
btn.html($.trim(btn.html()) + ' ');
|
||||
balloon = $('<span class="balloon"></span>').appendTo(btn);
|
||||
}
|
||||
|
||||
balloon.html(count);
|
||||
} else if (0 == count && balloon.length > 0) {
|
||||
balloon.remove();
|
||||
}
|
||||
}
|
||||
|
||||
$('.upload-area').bind({
|
||||
dragenter : function () {
|
||||
$(this).parent().addClass('drag');
|
||||
},
|
||||
|
||||
dragover : function (e) {
|
||||
$(this).parent().addClass('drag');
|
||||
},
|
||||
|
||||
drop : function () {
|
||||
$(this).parent().removeClass('drag');
|
||||
},
|
||||
|
||||
dragend : function () {
|
||||
$(this).parent().removeClass('drag');
|
||||
},
|
||||
|
||||
dragleave : function () {
|
||||
$(this).parent().removeClass('drag');
|
||||
}
|
||||
});
|
||||
|
||||
updateAttacmentNumber();
|
||||
|
||||
function fileUploadStart (file) {
|
||||
$('<li id="' + file.id + '" class="loading">'
|
||||
+ file.name + '</li>').appendTo('#file-list');
|
||||
}
|
||||
|
||||
function fileUploadError (error) {
|
||||
var file = error.file, code = error.code, word;
|
||||
|
||||
switch (code) {
|
||||
case plupload.FILE_SIZE_ERROR:
|
||||
word = '文件大小超过限制';
|
||||
break;
|
||||
case plupload.FILE_EXTENSION_ERROR:
|
||||
word = '文件扩展名不被支持';
|
||||
break;
|
||||
case plupload.FILE_DUPLICATE_ERROR:
|
||||
word = '文件已经上传过';
|
||||
break;
|
||||
case plupload.HTTP_ERROR:
|
||||
default:
|
||||
word = '上传出现错误';
|
||||
break;
|
||||
}
|
||||
|
||||
var fileError = '%s 上传失败'.replace('%s', file.name),
|
||||
li, exist = $('#' + file.id);
|
||||
|
||||
if (exist.length > 0) {
|
||||
li = exist.removeClass('loading').html(fileError);
|
||||
} else {
|
||||
li = $('<li>' + fileError + '<br />' + word + '</li>').appendTo('#file-list');
|
||||
}
|
||||
|
||||
li.effect('highlight', {color : '#FBC2C4'}, 2000, function () {
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
// fix issue #341
|
||||
this.removeFile(file);
|
||||
}
|
||||
|
||||
var completeFile = null;
|
||||
function fileUploadComplete (id, data) {
|
||||
var li = $('#' + id).removeClass('loading').data('title', data.title)
|
||||
.data('url', data.url)
|
||||
.data('image', data.isImage)
|
||||
.html('<input type="hidden" name="attachment[]" value="' + data.title + '" />'
|
||||
+ '<a class="insert" target="_blank" href="###" title="点击插入文件">' + data.title + '</a><div class="info">' + data.bytes
|
||||
+ ' <a class="file" target="_blank" href="'
|
||||
+ data.url + '" title="查看"><i class="i-edit"></i></a>'
|
||||
+ ' <a class="delete" href="###" title="删除"><i class="i-delete"></i></a></div>')
|
||||
.effect('highlight', 1000);
|
||||
|
||||
attachInsertEvent(li);
|
||||
attachDeleteEvent(li);
|
||||
updateAttacmentNumber();
|
||||
|
||||
if (!completeFile) {
|
||||
completeFile = data;
|
||||
}
|
||||
}
|
||||
|
||||
$('#tab-files').bind('init', function () {
|
||||
var uploader = new plupload.Uploader({
|
||||
browse_button : $('.upload-file').get(0),
|
||||
url : '/admin/api/file-upload',
|
||||
runtimes : 'html5,flash,html4',
|
||||
flash_swf_url : '/static/admin/Moxie.swf',
|
||||
drop_element : $('.upload-area').get(0),
|
||||
filters : {
|
||||
max_file_size : '2mb',
|
||||
prevent_duplicates : true
|
||||
},
|
||||
|
||||
init : {
|
||||
FilesAdded : function (up, files) {
|
||||
for (var i = 0; i < files.length; i ++) {
|
||||
fileUploadStart(files[i]);
|
||||
}
|
||||
|
||||
completeFile = null;
|
||||
uploader.start();
|
||||
},
|
||||
|
||||
UploadComplete : function () {
|
||||
if (completeFile) {
|
||||
Typecho.uploadComplete(completeFile);
|
||||
}
|
||||
},
|
||||
|
||||
FileUploaded : function (up, file, result) {
|
||||
if (200 == result.status) {
|
||||
var data = $.parseJSON(result.response);
|
||||
if (data) {
|
||||
fileUploadComplete(file.id, data);
|
||||
uploader.removeFile(file);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fileUploadError.call(uploader, {
|
||||
code : plupload.HTTP_ERROR,
|
||||
file : file
|
||||
});
|
||||
},
|
||||
|
||||
Error : function (up, error) {
|
||||
fileUploadError.call(uploader, error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
uploader.init();
|
||||
});
|
||||
|
||||
function attachInsertEvent (el) {
|
||||
$('.insert', el).click(function () {
|
||||
var t = $(this), p = t.parents('li');
|
||||
Typecho.insertFileToEditor(t.text(), p.data('url'), p.data('image'));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function attachDeleteEvent (el) {
|
||||
var file = $('a.insert', el).text();
|
||||
$('.delete', el).click(function () {
|
||||
if (confirm('确认要删除文件 %s 吗?'.replace('%s', file))) {
|
||||
var title = $(this).parents('li').data('title');
|
||||
$.post('/admin/api/file-delete',
|
||||
{'title' : title},
|
||||
function () {
|
||||
$(el).fadeOut(function () {
|
||||
$(this).remove();
|
||||
updateAttacmentNumber();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$('#file-list li').each(function () {
|
||||
attachInsertEvent(this);
|
||||
attachDeleteEvent(this);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{{end}}
|
||||
125
website/admin/posts.html
Normal file
125
website/admin/posts.html
Normal file
@@ -0,0 +1,125 @@
|
||||
{{define "admin-posts"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>管理文章<a href="/admin/write-post">新增</a></h2>
|
||||
</div>
|
||||
<div class="row typecho-page-main" role="main">
|
||||
<div class="col-mb-12 typecho-list">
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<form method="get">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a lang="你确认要删除这些文章吗?" href="/admin/api/post-delete">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search" role="search">
|
||||
{{if or .KW (gt .Serie 0)}}<a href="/admin/manage-posts">« 取消筛选</a>{{end}}
|
||||
<input type="text" class="text-s" placeholder="请输入关键字" value="{{if .KW}}{{.KW}}{{end}}" name="keywords" />
|
||||
<select name="serie">
|
||||
<option value="">所有专题</option>
|
||||
{{range .Series}}
|
||||
<option {{if eq $.Serie .ID}}selected{{end}} value="{{.ID}}">{{.Name}}
|
||||
{{end}}
|
||||
</select>
|
||||
<button type="submit" class="btn btn-s">筛选</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- end .typecho-list-operate -->
|
||||
<form method="post" name="manage_posts" class="operate-form">
|
||||
<div class="typecho-table-wrap">
|
||||
<table class="typecho-list-table">
|
||||
<colgroup>
|
||||
<col width="20" />
|
||||
<col width="6%" />
|
||||
<col width="40%" />
|
||||
<col width="" />
|
||||
<col width="12%" />
|
||||
<col width="14%" />
|
||||
<col width="14%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th> </th>
|
||||
<th>标题</th>
|
||||
<th>作者</th>
|
||||
<th>专题</th>
|
||||
<th>创建</th>
|
||||
<th>更新</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .List}}
|
||||
<tr id="post-{{.ID}}">
|
||||
<td>
|
||||
<input type="checkbox" value="{{.ID}}" name="cid[]" />
|
||||
</td>
|
||||
<td><a href="/post/{{.Slug}}.html#comments" class="balloon-button size-1">{{.Count}}</a></td>
|
||||
<td>
|
||||
<a href="/admin/write-post?cid={{.ID}}">{{.Title}}</a>
|
||||
<a target="_blank" href="/post/{{.Slug}}.html" title="浏览 {{.Title}}"><i class="i-exlink"></i></a>
|
||||
</td>
|
||||
<td>{{.Author}}</td>
|
||||
<td>{{if gt .SerieID 0}}专题ID:{{.SerieID}}{{else}}--{{end}}</td>
|
||||
<td>{{dateformat .CreateTime "06/01/02 15:04"}}</td>
|
||||
<td>{{dateformat .UpdateTime "06/01/02 15:04"}}</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
<!-- end .operate-form -->
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<form method="get">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a lang="你确认要删除这些文章吗?" href="/admin/api/post-delete">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="typecho-pager">
|
||||
{{if .Prev}}<li class="prev"><a href="/admin/manage-posts?{{html .Prev}}">«</a></li>{{end}}
|
||||
{{range $k,$v := .PP}}
|
||||
<li {{if eq $.Cur $k}}class="current"{{end}}><a href="/admin/manage-posts?{{html $v}}">{{$k}}</a></li>
|
||||
{{end}}
|
||||
{{if .Next}}<li class="next"><a href="/admin/manage-posts?{{html .Next}}">»</a></li>{{end}}
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
<!-- end .typecho-list-operate -->
|
||||
</div>
|
||||
<!-- end .typecho-list -->
|
||||
</div>
|
||||
<!-- end .typecho-page-main -->
|
||||
</div>
|
||||
<script>
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
$('.typecho-list-table').tableSelectable({
|
||||
checkEl: 'input[type=checkbox]',
|
||||
rowEl: 'tr',
|
||||
selectAllEl: '.typecho-table-select-all',
|
||||
actionEl: '.dropdown-menu a,button.btn-operate'
|
||||
});
|
||||
|
||||
$('.btn-drop').dropdownMenu({
|
||||
btnEl: '.dropdown-toggle',
|
||||
menuEl: '.dropdown-menu'
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
166
website/admin/profile.html
Normal file
166
website/admin/profile.html
Normal file
@@ -0,0 +1,166 @@
|
||||
{{define "admin-profile"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>个人设置</h2>
|
||||
</div>
|
||||
{{with .Account}}
|
||||
<div class="row typecho-page-main">
|
||||
<div class="col-mb-12 col-tb-3">
|
||||
<p>
|
||||
<img class="profile-avatar" src="//{{$.Qiniu.Domain}}/static/img/avatar.png" alt="{{.BlogName}}" />
|
||||
</p>
|
||||
<h2>{{.BlogName}}</h2>
|
||||
<p>{{.SubTitle}}</p>
|
||||
<p>最后登录: {{dateformat .LoginTime "2006/01/02 15:04"}}</p>
|
||||
</div>
|
||||
<div class="col-mb-12 col-tb-6 col-tb-offset-1 typecho-content-panel" role="form">
|
||||
<section>
|
||||
<h3>账号信息</h3>
|
||||
<form action="/admin/api/account" method="post" enctype="application/x-www-form-urlencoded">
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="info-0-1">
|
||||
个人邮箱</label>
|
||||
<input id="info-0-1" name="email" type="text" class="text" value="{{.Email}}" />
|
||||
<p class="description">
|
||||
用于发送告警邮件及其它通知, 建议填写, 如: example@163.com.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="info-0-2">
|
||||
移动电话</label>
|
||||
<input id="info-0-2" name="phoneNumber" type="text" class="text" value="{{.PhoneN}}" />
|
||||
<p class="description">
|
||||
选择填写, 如: +8615123456789.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="info-0-3">
|
||||
家庭住址</label>
|
||||
<input id="info-0-3" name="address" type="text" class="text" value="{{.Address}}" />
|
||||
<p class="description">
|
||||
选择填写, 如: xx省xx市xx区(县)xxxx小区xxx号.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option typecho-option-submit">
|
||||
<li>
|
||||
<button type="submit" class="btn primary">
|
||||
更新账号信息</button>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</section>
|
||||
<br>
|
||||
<section>
|
||||
<h3>博客信息</h3>
|
||||
<form action="/admin/api/blog" method="post" enctype="application/x-www-form-urlencoded">
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-1">
|
||||
博客昵称 *</label>
|
||||
<input id="blog-0-1" name="blogName" type="text" class="text" value="{{.BlogName}}" />
|
||||
<p class="description">
|
||||
用户昵称可以与用户名不同, 用于前台显示.
|
||||
<br />如果你将此项留空, 将默认使用登录用户名.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-2">
|
||||
标题显示 *</label>
|
||||
<input id="blog-0-2" name="bTitle" type="text" class="text" value="{{.BTitle}}" />
|
||||
<p class="description">
|
||||
用于所有页面的title组成, 如: Deepzz's Blog</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-3">
|
||||
个人格言</label>
|
||||
<input id="blog-0-3" name="subTitle" type="text" class="text" value="{{.SubTitle}}" />
|
||||
<p class="description">
|
||||
简介或格言, 如: 生活百般滋味, 人生需要笑对.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-4">
|
||||
备案号</label>
|
||||
<input id="blog-0-4" name="beiAn" type="text" class="text" value="{{.BeiAn}}" />
|
||||
<p class="description">
|
||||
用于底部显示, 不添加则不显示, 如: 蜀 ICP 备 16021362 号</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-5">
|
||||
专题前说</label>
|
||||
<textarea id="blog-0-5" name="seriessay">{{.SeriesSay}}</textarea>
|
||||
<p class="description">
|
||||
此文字用于专题前述, 会在专题最前方显示.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option">
|
||||
<li>
|
||||
<label class="typecho-label" for="blog-0-6">
|
||||
归档前说</label>
|
||||
<textarea id="blog-0-6" name="archivessay">{{.ArchivesSay}}</textarea>
|
||||
<p class="description">
|
||||
此文字用于归档前述, 会在归档最前方显示.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option typecho-option-submit" id="typecho-option-item-submit-4">
|
||||
<li>
|
||||
<button type="submit" class="btn primary">
|
||||
更新博客信息</button>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</section>
|
||||
<br>
|
||||
<section id="change-password">
|
||||
<h3>密码修改</h3>
|
||||
<form action="/admin/api/password" method="post" enctype="application/x-www-form-urlencoded">
|
||||
<ul class="typecho-option" id="typecho-option-item-oldpwd-11">
|
||||
<li>
|
||||
<label class="typecho-label" for="password-0-11">
|
||||
原始密码</label>
|
||||
<input id="password-0-11" name="old" type="password" class="w-60" />
|
||||
<p class="description">
|
||||
该账户旧密码.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option" id="typecho-option-item-newpwd-12">
|
||||
<li>
|
||||
<label class="typecho-label" for="password-0-12">
|
||||
用户密码</label>
|
||||
<input id="password-0-12" name="new" type="password" class="w-60" />
|
||||
<p class="description">
|
||||
为此用户分配一个密码.
|
||||
<br />建议使用特殊字符与字母、数字的混编样式,以增加系统安全性.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option" id="typecho-option-item-confirm-13">
|
||||
<li>
|
||||
<label class="typecho-label" for="confirm-0-13">
|
||||
用户密码确认</label>
|
||||
<input id="confirm-0-13" name="confirm" type="password" class="w-60" />
|
||||
<p class="description">
|
||||
请确认你的密码, 与上面输入的密码保持一致.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option typecho-option-submit" id="typecho-option-item-submit-14">
|
||||
<li>
|
||||
<button type="submit" class="btn primary">
|
||||
更新密码</button>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
74
website/admin/serie.html
Normal file
74
website/admin/serie.html
Normal file
@@ -0,0 +1,74 @@
|
||||
{{define "admin-serie"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
{{if .Edit}}
|
||||
<h2>编辑 {{with .Edit}}{{.Name}}{{end}}</h2>
|
||||
{{else}}
|
||||
<h2>新增专题</h2>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="row typecho-page-main" role="form">
|
||||
<div class="col-mb-12 col-tb-6 col-tb-offset-3">
|
||||
<form action="/admin/api/serie-add" method="post" enctype="application/x-www-form-urlencoded">
|
||||
<ul class="typecho-option" id="typecho-option-item-name-0">
|
||||
<li>
|
||||
<label class="typecho-label" for="name-0-1">
|
||||
专题名称 *</label>
|
||||
<input id="name-0-1" name="name" type="text" class="text" {{with .Edit}}value="{{.Name}}"{{end}} />
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option" id="typecho-option-item-slug-1">
|
||||
<li>
|
||||
<label class="typecho-label" for="slug-0-2">
|
||||
专题缩略名</label>
|
||||
<input id="slug-0-2" name="slug" type="text" class="text" {{with .Edit}}value="{{.Slug}}"{{end}} />
|
||||
<p class="description">
|
||||
专题缩略名用于创建友好的链接形式, 建议使用字母, 数字, 下划线和横杠.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="typecho-option" id="typecho-option-item-description-3">
|
||||
<li>
|
||||
<label class="typecho-label" for="description-0-3">
|
||||
专题描述</label>
|
||||
<textarea id="description-0-3" name="description">{{with .Edit}}{{.Desc}}{{end}} </textarea>
|
||||
<p class="description">
|
||||
此文字用于描述专题, 在有的主题中它会被显示.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<input type="hidden" name="mid" {{with .Edit}}value="{{.ID}}"{{end}} />
|
||||
<ul class="typecho-option typecho-option-submit" id="typecho-option-item--6">
|
||||
<li>
|
||||
<button type="submit" class="btn primary">
|
||||
{{if .Edit}}更新专题{{else}}新增专题{{end}}</button>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
$(document).ready(function () {
|
||||
var error = $('.typecho-option .error:first');
|
||||
|
||||
if (error.length > 0) {
|
||||
$('html,body').scrollTop(error.parents('.typecho-option').offset().top);
|
||||
}
|
||||
|
||||
$('form').submit(function () {
|
||||
if (this.submitted) {
|
||||
return false;
|
||||
} else {
|
||||
this.submitted = true;
|
||||
}
|
||||
});
|
||||
|
||||
$('label input[type=text]').click(function (e) {
|
||||
var check = $('#' + $(this).parents('label').attr('for'));
|
||||
check.prop('checked', true);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
110
website/admin/series.html
Normal file
110
website/admin/series.html
Normal file
@@ -0,0 +1,110 @@
|
||||
{{define "admin-series"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>管理专题<a href="/admin/add-serie">新增</a></h2>
|
||||
</div>
|
||||
<div class="row typecho-page-main manage-metas">
|
||||
<div class="col-mb-12" role="main">
|
||||
<form method="post" name="manage_categories" class="operate-form">
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a lang="此分类下的所有内容将被删除, 你确认要删除这些分类吗?" href="/admin/api/serie-delete">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search" role="search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="typecho-table-wrap">
|
||||
<table class="typecho-list-table">
|
||||
<colgroup>
|
||||
<col width="20" />
|
||||
<col width="10%" />
|
||||
<col width="45%" />
|
||||
<col width="30%" />
|
||||
<col width="10%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="nodrag">
|
||||
<th> </th>
|
||||
<th>ID</th>
|
||||
<th>名称</th>
|
||||
<th>创建</th>
|
||||
<th>文章数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .List}}
|
||||
<tr id="mid-category-{{.ID}}">
|
||||
<td>
|
||||
<input type="checkbox" value="{{.ID}}" name="mid[]" />
|
||||
</td>
|
||||
<td>{{.ID}}</td>
|
||||
<td>
|
||||
<a href="/admin/add-serie?mid={{.ID}}">{{.Name}}</a>
|
||||
<a target="_blank" href="/series.html#toc-{{.ID}}" title="浏览 {{.Name}}"><i class="i-exlink"></i></a>
|
||||
</td>
|
||||
<td>{{dateformat .CreateTime "2006/01/02 15:04"}}</td>
|
||||
<td><a class="balloon-button left size-50" href="#">{{len .Articles}}</a></td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
var table = $('.typecho-list-table').tableDnD({
|
||||
onDrop: function() {
|
||||
var ids = [];
|
||||
|
||||
$('input[type=checkbox]', table).each(function() {
|
||||
ids.push($(this).val());
|
||||
});
|
||||
|
||||
$.post('/admin/api/move',
|
||||
$.param({
|
||||
mid: ids
|
||||
}));
|
||||
|
||||
$('tr', table).each(function(i) {
|
||||
if (i % 2) {
|
||||
$(this).addClass('even');
|
||||
} else {
|
||||
$(this).removeClass('even');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
table.tableSelectable({
|
||||
checkEl: 'input[type=checkbox]',
|
||||
rowEl: 'tr',
|
||||
selectAllEl: '.typecho-table-select-all',
|
||||
actionEl: '.dropdown-menu a'
|
||||
});
|
||||
|
||||
$('.btn-drop').dropdownMenu({
|
||||
btnEl: '.dropdown-toggle',
|
||||
menuEl: '.dropdown-menu'
|
||||
});
|
||||
|
||||
$('.dropdown-menu button.merge').click(function() {
|
||||
var btn = $(this);
|
||||
btn.parents('form').attr('action', btn.attr('rel')).submit();
|
||||
});
|
||||
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
58
website/admin/tags.html
Normal file
58
website/admin/tags.html
Normal file
@@ -0,0 +1,58 @@
|
||||
{{define "admin-tags"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>管理标签</h2>
|
||||
</div>
|
||||
<div class="row typecho-page-main manage-metas">
|
||||
<div class="col-mb-12 col-tb-8" role="main">
|
||||
<form method="post" name="manage_tags" class="operate-form">
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<!-- <ul class="dropdown-menu"> -->
|
||||
<!-- <li><a lang="你确认要删除这些标签吗?" href="/admin/api/tag-delete">删除</a></li> -->
|
||||
<!-- </ul> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="typecho-list-notable tag-list clearfix">
|
||||
{{range $k,$v:=.List}}
|
||||
<li class="size-5"><input type="checkbox" name="mid[]" />{{$k}}<i class="i-edit"></i></li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-mb-12 col-tb-4" role="form">
|
||||
<p> 夏雷在天际回响<br> 纸船在水中荡漾<br> 时间就这么走了<br> 远离了三年的学堂<br> <br> 是否还记得前排的那个姑凉<br> 如今你又彷徨在谁的身旁<br> 那时我们都太迷茫<br> 沉醉在青春路上<br> <br> 嘴角扬起的微笑<br> 那是我们最美好的时光<br> 那个女孩的嘴角<br> 深深地印在我的胸膛<br> <br> 青春是多么昂扬<br> 奏响生命的乐章<br> 雨中漫步的时光<br> 在记忆流逝中远航<br> <br> 别了,我亲爱的课堂<br> 别了,我最好的同窗<br> 别了,敬爱三年的师长<br> 我多么希望,记忆停留归航<br> 2016/9.9殇星<br> </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
$(document).ready(function () {
|
||||
|
||||
$('.typecho-list-notable').tableSelectable({
|
||||
checkEl : 'input[type=checkbox]',
|
||||
rowEl : 'li',
|
||||
selectAllEl : '.typecho-table-select-all',
|
||||
actionEl : '.dropdown-menu a'
|
||||
});
|
||||
|
||||
$('.btn-drop').dropdownMenu({
|
||||
btnEl : '.dropdown-toggle',
|
||||
menuEl : '.dropdown-menu'
|
||||
});
|
||||
|
||||
$('.dropdown-menu button.merge').click(function () {
|
||||
var btn = $(this);
|
||||
btn.parents('form').attr('action', btn.attr('rel')).submit();
|
||||
});
|
||||
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
82
website/admin/trash.html
Normal file
82
website/admin/trash.html
Normal file
@@ -0,0 +1,82 @@
|
||||
{{define "admin-trash"}}
|
||||
<div class="body container">
|
||||
<div class="typecho-page-title">
|
||||
<h2>回收箱</h2>
|
||||
</div>
|
||||
<div class="row typecho-page-main manage-metas">
|
||||
<div class="col-mb-12" role="main">
|
||||
<form method="post" name="manage_trash" class="operate-form">
|
||||
<div class="typecho-list-operate clearfix">
|
||||
<div class="operate">
|
||||
<label><i class="sr-only">全选</i>
|
||||
<input type="checkbox" class="typecho-table-select-all" />
|
||||
</label>
|
||||
<div class="btn-group btn-drop">
|
||||
<button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only">操作</i>选中项 <i class="i-caret-down"></i></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a lang="你确认要恢复该文章到草稿箱吗?" href="/admin/api/trash-recover">恢复</a></li>
|
||||
<li><a lang="此回收箱下的所有内容将被删除, 你确认要删除这些文章吗?" href="/admin/api/trash-delete">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search" role="search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="typecho-table-wrap">
|
||||
<table class="typecho-list-table">
|
||||
<colgroup>
|
||||
<col width="20" />
|
||||
<col width="40%" />
|
||||
<col width="" />
|
||||
<col width="12%" />
|
||||
<col width="14%" />
|
||||
<col width="14%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>标题</th>
|
||||
<th>作者</th>
|
||||
<th>专题</th>
|
||||
<th>创建</th>
|
||||
<th>删除</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .List}}
|
||||
<tr id="mid-article-{{.ID}}">
|
||||
<td>
|
||||
<input type="checkbox" value="{{.ID}}" name="mid[]" />
|
||||
</td>
|
||||
<td>{{.Title}}</td>
|
||||
<td>{{.Author}}</td>
|
||||
<td>{{if gt .SerieID 0}}专题ID:{{.SerieID}}{{else}}--{{end}}</td>
|
||||
<td>{{dateformat .CreateTime "2006/01/02 15:04"}}</td>
|
||||
<td>{{dateformat .DeleteTime "2006/01/02 15:04"}}</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
$('.typecho-list-table').tableSelectable({
|
||||
checkEl: 'input[type=checkbox]',
|
||||
rowEl: 'tr',
|
||||
selectAllEl: '.typecho-table-select-all',
|
||||
actionEl: '.dropdown-menu a,button.btn-operate'
|
||||
});
|
||||
|
||||
$('.btn-drop').dropdownMenu({
|
||||
btnEl: '.dropdown-toggle',
|
||||
menuEl: '.dropdown-menu'
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
Reference in New Issue
Block a user