just for rename
This commit is contained in:
1 parent
af9a820cbf
commit
f20565d54b
64 files changed
+7694
No files matched your search
@@ -0,0 +1,130 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Blog</h3></div>
|
||||
|
||||
<section class="panel panel-default">
|
||||
<div class="row wrapper">
|
||||
<div class="col-sm-5 m-b-xs">
|
||||
<button class="btn btn-sm btn-default">
|
||||
Action1
|
||||
</button>
|
||||
<button class="btn btn-sm btn-default">
|
||||
Action2
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-4 m-b-xs">
|
||||
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group search-group">
|
||||
<input type="text" class="input-sm form-control" placeholder="Title" id="keywords" value="{{.keywords}}" />
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-sm btn-default" type="button" data-url="/adminBlog/index">Search</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped b-t b-light">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20">
|
||||
<input type="checkbox">
|
||||
</th>
|
||||
{{$url := urlConcat "/adminBlog/index" "keywords" .keywords}}
|
||||
<th
|
||||
{{sorterTh $url "title" .sorter}}
|
||||
>
|
||||
Title
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "userId" .sorter}}
|
||||
>
|
||||
Username
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
|
||||
<th
|
||||
{{sorterTh $url "createdTime" .sorter}}
|
||||
>
|
||||
Create Date
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .blogs}}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="post[]" value="2">
|
||||
</td>
|
||||
<td>
|
||||
<a href="/blog/view/{{.NoteId.Hex}}" target="_blank">{{.Title|raw}}</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/blog/{{.UserId.Hex}}" target="_blank">
|
||||
{{.User.Username}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{{.CreatedTime|datetime}}
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<footer class="panel-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-4 hidden-xs">
|
||||
<button class="btn btn-sm btn-default">
|
||||
Action1
|
||||
</button>
|
||||
<button class="btn btn-sm btn-default">
|
||||
Action2
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-4 text-center">
|
||||
<small class="text-muted inline m-t-sm m-b-sm">
|
||||
showing 20-30 of 50 items
|
||||
</small>
|
||||
</div>
|
||||
<div class="col-sm-4 text-right text-center-xs">
|
||||
{{set . "url" (urlConcat "/adminBlog/index" "sorter" .sorter "keywords" .keywords)}}
|
||||
{{template "admin/user/page.html" .}}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".change-recommend").click(function() {
|
||||
var isRecommend = +$(this).data("recommend");
|
||||
var noteId = $(this).data("id");
|
||||
var t = this;
|
||||
$(t).button("loading");
|
||||
ajaxGet("/adminBlog/setRecommend", {noteId: noteId, recommend: !isRecommend}, function() {
|
||||
$(t).button("reset");
|
||||
$(t).text(isRecommend ? "N" : "Y");
|
||||
$(t).data("recommend", !isRecommend);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,33 @@
|
||||
{{if gt .pageInfo.TotalPage 1}}
|
||||
<ul class="pagination pagination-sm m-t-none m-b-none">
|
||||
<li class="{{if eq $.pageInfo.CurPage 1}}disabled{{end}}" >
|
||||
<a href="{{if eq $.pageInfo.CurPage 1}}javascript:;{{else}}{{sub $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-left">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{{range $i := N 1 .pageInfo.TotalPage}}
|
||||
{{if eq $i $.pageInfo.CurPage}}
|
||||
<li class="active">
|
||||
<a href="javascript:;">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="">
|
||||
<a href="{{urlConcat $.url "page" $i}}">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{end}}
|
||||
{{end}}
|
||||
|
||||
<li class="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}disabled{{end}}" >
|
||||
<a href="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}javascript:;{{else}}{{add $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-right">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{{end}}
|
||||
@@ -0,0 +1,639 @@
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
<h4 class="m-t-xs">
|
||||
Button options
|
||||
</h4>
|
||||
<div class="doc-buttons">
|
||||
<a href="#" class="btn btn-s-md btn-default">
|
||||
Default
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-primary">
|
||||
Primary
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-success">
|
||||
Success
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-info">
|
||||
Info
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-warning">
|
||||
Warning
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-danger">
|
||||
Danger
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-dark">
|
||||
Dark
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-default disabled">
|
||||
Disabled
|
||||
</a>
|
||||
</div>
|
||||
<h4 class="m-t">
|
||||
Button size
|
||||
</h4>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default btn-lg">
|
||||
Large button
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default">
|
||||
Default button
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default btn-sm">
|
||||
Small button
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default btn-xs">
|
||||
Extra small button
|
||||
</a>
|
||||
</p>
|
||||
<h4 class="m-t-lg">
|
||||
Button dropdowns
|
||||
</h4>
|
||||
<p class="text-muted">
|
||||
Single button dropdowns
|
||||
</p>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
Action
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-success dropdown-toggle" data-toggle="dropdown">
|
||||
Action
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
|
||||
Action
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
|
||||
Action
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Split button dropdowns & variation
|
||||
</p>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-default">
|
||||
Action
|
||||
</button>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group dropup">
|
||||
<button class="btn btn-default">
|
||||
Action
|
||||
</button>
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Another action
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Something else here
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Separated link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="m-t-lg">
|
||||
Button with icon
|
||||
</h4>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default">
|
||||
<i class="fa fa-html5">
|
||||
</i>
|
||||
Html5
|
||||
</a>
|
||||
<a href="#" class="btn btn-info">
|
||||
<i class="fa fa-css3">
|
||||
</i>
|
||||
CSS3
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default btn-lg btn-block">
|
||||
<i class="fa fa-bars pull-right">
|
||||
</i>
|
||||
Block button with icon
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" class="btn btn-default btn-block">
|
||||
<i class="fa fa-bars pull-left">
|
||||
</i>
|
||||
Block button with icon
|
||||
</a>
|
||||
</p>
|
||||
<h4 class="m-t-lg">
|
||||
Button icon
|
||||
</h4>
|
||||
<p id="social-buttons">
|
||||
<a href="#" class="btn btn-sm btn-icon btn-info">
|
||||
<i class="fa fa-twitter">
|
||||
</i>
|
||||
</a>
|
||||
<a href="#" class="btn btn-sm btn-icon btn-success">
|
||||
<i class="fa fa-facebook">
|
||||
</i>
|
||||
</a>
|
||||
<a href="#" class="btn btn-sm btn-icon btn-danger">
|
||||
<i class="fa fa-google-plus">
|
||||
</i>
|
||||
</a>
|
||||
</p>
|
||||
<h4 class="m-t-lg">
|
||||
Button icon rounded
|
||||
</h4>
|
||||
<p id="social-buttons">
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-icon btn-default">
|
||||
<i class="fa fa-twitter">
|
||||
</i>
|
||||
</a>
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-icon btn-default">
|
||||
<i class="fa fa-facebook">
|
||||
</i>
|
||||
</a>
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-icon btn-default">
|
||||
<i class="fa fa-google-plus">
|
||||
</i>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4 class="m-t-xs">
|
||||
Rounded button
|
||||
</h4>
|
||||
<div class="doc-buttons">
|
||||
<a href="#" class="btn btn-s-md btn-default btn-rounded">
|
||||
Default
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-primary btn-rounded">
|
||||
Primary
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-success btn-rounded">
|
||||
Success
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-info btn-rounded">
|
||||
Info
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-warning btn-rounded">
|
||||
Warning
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-danger btn-rounded">
|
||||
Danger
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-dark btn-rounded">
|
||||
Dark
|
||||
</a>
|
||||
<a href="#" class="btn btn-s-md btn-default btn-rounded disabled">
|
||||
Disabled
|
||||
</a>
|
||||
</div>
|
||||
<h4 class="m-t-lg">
|
||||
Button groups
|
||||
</h4>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default">
|
||||
Left
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
Middle
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
Right
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Vertical button groups
|
||||
</p>
|
||||
<div class="btn-group-vertical m-b-sm">
|
||||
<button type="button" class="btn btn-default">
|
||||
Top
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
Middle
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
Bottom
|
||||
</button>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Nested button groups
|
||||
</p>
|
||||
<div class="btn-group m-b-sm">
|
||||
<button type="button" class="btn btn-default">
|
||||
1
|
||||
</button>
|
||||
<button type="button" class="btn btn-success">
|
||||
2
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
3
|
||||
</button>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
Dropdown
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
Dropdown link
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Dropdown link
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Dropdown link
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Justified button groups
|
||||
</p>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group btn-group-justified">
|
||||
<a href="#" class="btn btn-primary">
|
||||
Left
|
||||
</a>
|
||||
<a href="#" class="btn btn-info">
|
||||
Middle
|
||||
</a>
|
||||
<a href="#" class="btn btn-success">
|
||||
Right
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted">
|
||||
Multiple button groups
|
||||
</p>
|
||||
<div class="btn-toolbar">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default">
|
||||
1
|
||||
</button>
|
||||
<button type="button" class="btn btn-default active">
|
||||
2
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
3
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
4
|
||||
</button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default">
|
||||
5
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
6
|
||||
</button>
|
||||
<button type="button" class="btn btn-default">
|
||||
7
|
||||
</button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default">
|
||||
8
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="m-t-lg">
|
||||
Button components
|
||||
</h4>
|
||||
<p class="text-muted">
|
||||
<span>
|
||||
There are a few easy ways to quickly get started with Bootstrap, each
|
||||
one ...
|
||||
</span>
|
||||
<span class="text-muted hide" id="moreless">
|
||||
appealing to a different skill level and use case. Read through to see
|
||||
what suits your particular needs.
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<button href="#moreless" class="btn btn-sm btn-default" data-toggle="class:show">
|
||||
<i class="fa fa-plus text">
|
||||
</i>
|
||||
<span class="text">
|
||||
More
|
||||
</span>
|
||||
<i class="fa fa-minus text-active">
|
||||
</i>
|
||||
<span class="text-active">
|
||||
Less
|
||||
</span>
|
||||
</button>
|
||||
</p>
|
||||
<p>
|
||||
<button class="btn btn-default" id="btn-1" href="#btn-1" data-toggle="class:btn-success">
|
||||
<i class="fa fa-cloud-upload text">
|
||||
</i>
|
||||
<span class="text">
|
||||
Upload
|
||||
</span>
|
||||
<i class="fa fa-check text-active">
|
||||
</i>
|
||||
<span class="text-active">
|
||||
Success
|
||||
</span>
|
||||
</button>
|
||||
<button class="btn btn-default" data-toggle="button">
|
||||
<i class="fa fa-heart-o text">
|
||||
</i>
|
||||
<i class="fa fa-heart text-active text-danger">
|
||||
</i>
|
||||
</button>
|
||||
<button class="btn btn-default" data-toggle="button">
|
||||
<span class="text">
|
||||
<i class="fa fa-thumbs-up text-success">
|
||||
</i>
|
||||
25
|
||||
</span>
|
||||
<span class="text-active">
|
||||
<i class="fa fa-thumbs-down text-danger">
|
||||
</i>
|
||||
10
|
||||
</span>
|
||||
</button>
|
||||
<button class="btn btn-success" data-toggle="class:show inline" data-target="#spin"
|
||||
data-loading-text="Saving...">
|
||||
Save
|
||||
</button>
|
||||
<i class="fa fa-spin fa-spinner hide" id="spin">
|
||||
</i>
|
||||
</p>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
<label class="btn btn-sm btn-info active">
|
||||
<input type="radio" name="options" id="option1">
|
||||
<i class="fa fa-check text-active">
|
||||
</i>
|
||||
Male
|
||||
</label>
|
||||
<label class="btn btn-sm btn-success">
|
||||
<input type="radio" name="options" id="option2">
|
||||
<i class="fa fa-check text-active">
|
||||
</i>
|
||||
Female
|
||||
</label>
|
||||
<label class="btn btn-sm btn-primary">
|
||||
<input type="radio" name="options" id="option3">
|
||||
<i class="fa fa-check text-active">
|
||||
</i>
|
||||
N/A
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-b-sm">
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
<label class="btn btn-sm btn-default">
|
||||
<input type="checkbox" name="options" id="option1">
|
||||
option1
|
||||
</label>
|
||||
<label class="btn btn-sm btn-default">
|
||||
<input type="checkbox" name="options" id="option2">
|
||||
option2
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<h5 class="m-t-lg">
|
||||
Select Button
|
||||
</h5>
|
||||
<div class="btn-group m-r">
|
||||
<button data-toggle="dropdown" class="btn btn-sm btn-default dropdown-toggle">
|
||||
<span class="dropdown-label">
|
||||
Option1
|
||||
</span>
|
||||
<span class="caret">
|
||||
</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-select">
|
||||
<li class="active">
|
||||
<a href="#">
|
||||
<input type="radio" name="d-s-r" checked="">
|
||||
Option1
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<input type="radio" name="d-s-r">
|
||||
Option2
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<input type="radio" name="d-s-r">
|
||||
Option3
|
||||
</a>
|
||||
</li>
|
||||
<li class="disabled">
|
||||
<a href="#">
|
||||
<input type="radio" name="d-s-r" disabled="">
|
||||
I'm disabled
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h4 class="m-t-lg">
|
||||
<a href="#" class="pull-right text-sm" data-toggle="class:btn-rounded"
|
||||
data-target="#social-buttons a">
|
||||
Toggle
|
||||
</a>
|
||||
Social buttons
|
||||
</h4>
|
||||
<p id="social-buttons">
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-twitter">
|
||||
<i class="fa fa-fw fa-twitter">
|
||||
</i>
|
||||
Twitter
|
||||
</a>
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-facebook">
|
||||
<i class="fa fa-fw fa-facebook">
|
||||
</i>
|
||||
Facebook
|
||||
</a>
|
||||
<a href="#" class="btn btn-rounded btn-sm btn-gplus">
|
||||
<i class="fa fa-fw fa-google-plus">
|
||||
</i>
|
||||
Google+
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,55 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Mongodb Tool Configuration</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="data_form">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>mongodump path</label>
|
||||
<input type="text" class="form-control" name="mongodumpPath" value="{{.str.mongodumpPath}}" placeholder="">
|
||||
Please input the bin mongodump's absolute path
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>mongorestore path</label>
|
||||
<input type="text" class="form-control" name="mongorestorePath" value="{{.str.mongorestorePath}}" placeholder="">
|
||||
Please input the bin mongorestore's absolute path
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
init_validator("#data_form");
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#data_form").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminSetting/mongodb", getFormJsonData("data_form"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,115 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Backup & Restore</h3></div>
|
||||
|
||||
<style>
|
||||
.break-all {
|
||||
word-break:break-all; /*支持IE,chrome,FF不支持*/
|
||||
word-wrap:break-word;/*支持IE,chrome,FF*/
|
||||
}
|
||||
</style>
|
||||
<section class="panel panel-default">
|
||||
|
||||
<div class="row wrapper">
|
||||
<div class="col-sm-5 m-b-xs">
|
||||
<button class="btn btn-primary backup-btn">Backup</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped b-t b-light">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="136px">
|
||||
Date
|
||||
</th>
|
||||
<th width="">
|
||||
Remark
|
||||
</th>
|
||||
<th>
|
||||
Path
|
||||
</th>
|
||||
<th width="170px">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range $each := .backups}}
|
||||
<tr>
|
||||
<td>
|
||||
{{$each.createdTime|unixDatetime}}
|
||||
</td>
|
||||
<td>
|
||||
<textarea class="remark" data-id="{{$each.createdTime}}">{{$each.remark}}</textarea>
|
||||
</td>
|
||||
<td class="break-all">
|
||||
{{$each.path}}
|
||||
</td>
|
||||
<td>
|
||||
<button href="#" class="btn btn-sm btn-danger restore-btn" data-id="{{$each.createdTime}}">Restore</button>
|
||||
<a class="btn btn-sm btn-default download-attach" href="/adminData/download?createdTime={{$each.createdTime}}" target="_blank" title="Download" data-id=""><i class="fa fa-download"></i></a>
|
||||
<button class="btn btn-sm btn-warning delete-btn" title="Delete" data-id="{{$each.createdTime}}"><i class="fa fa-trash-o"></i></button>
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".backup-btn").click(function(){
|
||||
ajaxGet("/adminData/backup", {}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
art.tips("Success");
|
||||
location.reload();
|
||||
} else {
|
||||
art.alert(ret.Msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
// 还原
|
||||
$(".restore-btn").click(function() {
|
||||
var createdTime = $(this).data("id");
|
||||
art.confirm("Are you sure? <br />Note. Leanote will do the following steps: <br />1)Backup the current database first. <br />2) And then delete the database. <br />3) Restore database from the selected version.", function() {
|
||||
ajaxGet("/adminData/restore", {createdTime: createdTime}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
art.tips("Success");
|
||||
location.reload();
|
||||
} else {
|
||||
art.alert(ret.Msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
$(".delete-btn").click(function() {
|
||||
var createdTime = $(this).data("id");
|
||||
art.confirm("Are you sure?", function() {
|
||||
ajaxGet("/adminData/delete", {createdTime: createdTime}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
art.tips("Success");
|
||||
location.reload();
|
||||
} else {
|
||||
art.alert(ret.Msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
$(".remark").change(function() {
|
||||
var createdTime = $(this).data("id");
|
||||
var remark = $(this).val();
|
||||
ajaxPost("/adminData/updateRemark", {createdTime: createdTime, remark: remark}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
art.tips("Update Remark Success");
|
||||
} else {
|
||||
art.alert(ret.Msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,76 @@
|
||||
<div class="row" style="width: 500px;
|
||||
height: 500px;
|
||||
overflow-y: scroll;">
|
||||
|
||||
<div class="col-sm-12">
|
||||
<form id="sendEmailForm">
|
||||
<section class="panel panel-default">
|
||||
<header class="panel-heading font-bold">Email</header>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Email List</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emails">{{.emailsNl}}</textarea>
|
||||
input email line by line
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Select Old Email</label>
|
||||
<select class="form-control old-emails">
|
||||
<option value="">---Select---</option>
|
||||
{{range $subject, $body := .map.oldEmails}}
|
||||
<option>
|
||||
{{$subject}}
|
||||
</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" id="latestEmailSubject" name="latestEmailSubject" value="{{$.str.latestEmailSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" id="latestEmailBody" class="form-control" name="latestEmailBody">{{$.str.latestEmailBody}}</textarea>
|
||||
</div>
|
||||
<label class="checkbox-inline"> <input type="checkbox" id="saveAsOldEmail" name="saveAsOldEmail" value="1"> Save As Old Email </label>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submitEmail" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var oldEmails = eval("(" + {{json .map.oldEmails}} + ")");
|
||||
$(function() {
|
||||
$(".old-emails").change(function() {
|
||||
var subject = $(this).val();
|
||||
var body = oldEmails[subject];
|
||||
if(subject) {
|
||||
$("#latestEmailSubject").val(subject);
|
||||
$("#latestEmailBody").val(body);
|
||||
$("#saveAsOldEmail").prop("checked", false);
|
||||
}
|
||||
});
|
||||
|
||||
$("#submitEmail").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminEmail/sendToUsers2", getFormJsonData("sendEmailForm"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,191 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Email Logs</h3></div>
|
||||
|
||||
<section class="panel panel-default">
|
||||
<div class="row wrapper">
|
||||
<div class="col-sm-5 m-b-xs">
|
||||
<button class="btn btn-sm btn-default bulk-send">
|
||||
Send
|
||||
</button>
|
||||
<button class="btn btn-sm btn-default bulk-delete">
|
||||
Delete
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-4 m-b-xs">
|
||||
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group search-group">
|
||||
<input type="text" class="input-sm form-control" placeholder="Email" id="keywords" value="{{.keywords}}" />
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-sm btn-default" type="button" data-url="/adminEmail/list">Search</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped b-t b-light">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20">
|
||||
<input type="checkbox">
|
||||
</th>
|
||||
{{$url := urlConcat "/adminEmail/list" "keywords" .keywords}}
|
||||
<th
|
||||
{{sorterTh $url "email" .sorter}}
|
||||
>
|
||||
Email
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "subject" .sorter}}
|
||||
>
|
||||
Subject
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "ok" .sorter}}
|
||||
>
|
||||
Ok
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "msg" .sorter}}
|
||||
>
|
||||
Msg
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "createdTime" .sorter}}
|
||||
>
|
||||
Date
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .emails}}
|
||||
<tr id="tr_{{.LogId.Hex}}">
|
||||
<td>
|
||||
<input type="checkbox" class="ck" data-email="{{.Email}}" data-id="{{.LogId.Hex}}">
|
||||
</td>
|
||||
<td>
|
||||
{{.Email}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Subject}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Ok}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Msg}}
|
||||
</td>
|
||||
<td>
|
||||
{{.CreatedTime|datetime}}
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="btn btn-default send-email" data-email="{{.Email}}">Send</a>
|
||||
<a href="#" class="btn btn-default delete-email" data-id="{{.LogId.Hex}}">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<footer class="panel-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-4 hidden-xs">
|
||||
<button class="btn btn-sm btn-default bulk-send">
|
||||
Send
|
||||
</button>
|
||||
<button class="btn btn-sm btn-default bulk-delete">
|
||||
Delete
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-4 text-right text-center-xs">
|
||||
{{set . "url" (urlConcat "/adminEmail/list" "sorter" .sorter "keywords" .keywords)}}
|
||||
{{template "admin/user/page.html" .}}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".send-email").click(function() {
|
||||
openSendEmailDialog($(this).data("email"));
|
||||
});
|
||||
$(".bulk-send").click(function() {
|
||||
var emails = [];
|
||||
$(".ck:checked").each(function() {
|
||||
emails.push($(this).data("email"));
|
||||
});
|
||||
if(emails.length == 0) {
|
||||
art.alert("No user");
|
||||
return;
|
||||
}
|
||||
openSendEmailDialog(emails.join(","));
|
||||
});
|
||||
|
||||
function deleteEmails(ids) {
|
||||
if(!isArray(ids)) {
|
||||
ids = [ids];
|
||||
}
|
||||
ajaxPost("/adminEmail/deleteEmails", {ids: ids.join(",")}, function(ret) {
|
||||
if(ret.Ok) {
|
||||
if(ids.length > 8) {
|
||||
location.reload();
|
||||
}
|
||||
for(var i in ids) {
|
||||
$("#tr_" + ids[i]).remove();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(".delete-email").click(function() {
|
||||
var id = $(this).data('id');
|
||||
deleteEmails(id);
|
||||
});
|
||||
|
||||
$(".bulk-delete").click(function() {
|
||||
var ids = [];
|
||||
$(".ck:checked").each(function() {
|
||||
ids.push($(this).data("id"));
|
||||
});
|
||||
if(ids.length == 0) {
|
||||
art.alert("No email");
|
||||
return;
|
||||
}
|
||||
deleteEmails(ids);
|
||||
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,33 @@
|
||||
{{if gt .pageInfo.TotalPage 1}}
|
||||
<ul class="pagination pagination-sm m-t-none m-b-none">
|
||||
<li class="{{if eq $.pageInfo.CurPage 1}}disabled{{end}}" >
|
||||
<a href="{{if eq $.pageInfo.CurPage 1}}javascript:;{{else}}{{sub $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-left">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{{range $i := N 1 .pageInfo.TotalPage}}
|
||||
{{if eq $i $.pageInfo.CurPage}}
|
||||
<li class="active">
|
||||
<a href="javascript:;">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="">
|
||||
<a href="{{urlConcat $.url "page" $i}}">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{end}}
|
||||
{{end}}
|
||||
|
||||
<li class="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}disabled{{end}}" >
|
||||
<a href="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}javascript:;{{else}}{{add $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-right">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{{end}}
|
||||
@@ -0,0 +1,85 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Send Email</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-12">
|
||||
<form id="formContainer">
|
||||
<section class="panel panel-default">
|
||||
<header class="panel-heading font-bold">Email</header>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Email List</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="sendEmails">{{.str.sendEmails}}</textarea>
|
||||
input email line by line
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Select Old Email</label>
|
||||
<select class="form-control old-emails">
|
||||
<option value="">---Select---</option>
|
||||
{{range $subject, $body := .map.oldEmails}}
|
||||
<option>
|
||||
{{$subject}}
|
||||
</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" id="latestEmailSubject" name="latestEmailSubject" value="{{$.str.latestEmailSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" id="latestEmailBody" class="form-control" name="latestEmailBody">{{$.str.latestEmailBody}}</textarea>
|
||||
</div>
|
||||
<label class="checkbox-inline"> <input type="checkbox" id="saveAsOldEmail" name="saveAsOldEmail" value="1"> Save As Old Email </label>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
var oldEmails = eval("(" + {{json .map.oldEmails}} + ")");
|
||||
$(function() {
|
||||
init_validator("#formContainer");
|
||||
|
||||
$(".old-emails").change(function() {
|
||||
var subject = $(this).val();
|
||||
var body = oldEmails[subject];
|
||||
if(subject) {
|
||||
$("#latestEmailSubject").val(subject);
|
||||
$("#latestEmailBody").val(body);
|
||||
$("#saveAsOldEmail").prop("checked", false);
|
||||
}
|
||||
});
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#formContainer").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminEmail/sendEmailToEmails", getFormJsonData("formContainer"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,105 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Send Email to Users</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-12">
|
||||
<form id="formContainer">
|
||||
<section class="panel panel-default">
|
||||
<header class="panel-heading font-bold">User filter</header>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Search Email/Username</label>
|
||||
<input type="text" class="form-control" name="userFilterEmail" value="{{.str.userFilterEmail}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="checkbox-inline"> <input type="checkbox" name="verified" value="1"> Verfied </label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>White List</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="userFilterWhiteList">{{.str.userFilterWhiteList}}</textarea>
|
||||
input email line by line
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Black List</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="userFilterBlackList">{{.str.userFilterBlackList}}</textarea>
|
||||
input email line by line
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panel panel-default">
|
||||
<header class="panel-heading font-bold">Email</header>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Select Old Email</label>
|
||||
<select class="form-control old-emails">
|
||||
<option value="">---Select---</option>
|
||||
{{range $subject, $body := .map.oldEmails}}
|
||||
<option>
|
||||
{{$subject}}
|
||||
</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" id="latestEmailSubject" name="latestEmailSubject" value="{{$.str.latestEmailSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" id="latestEmailBody" class="form-control" name="latestEmailBody">{{$.str.latestEmailBody}}</textarea>
|
||||
</div>
|
||||
<label class="checkbox-inline"> <input type="checkbox" id="saveAsOldEmail" name="saveAsOldEmail" value="1"> Save As Old Email </label>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
var oldEmails = eval("(" + {{json .map.oldEmails}} + ")");
|
||||
$(function() {
|
||||
init_validator("#formContainer");
|
||||
|
||||
$(".old-emails").change(function() {
|
||||
var subject = $(this).val();
|
||||
var body = oldEmails[subject];
|
||||
if(subject) {
|
||||
$("#latestEmailSubject").val(subject);
|
||||
$("#latestEmailBody").val(body);
|
||||
$("#saveAsOldEmail").prop("checked", false);
|
||||
}
|
||||
});
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#formContainer").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminEmail/sendToUsers", getFormJsonData("formContainer"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,62 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Email Configuration</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="add_user_form">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Host</label>
|
||||
<input type="text" class="form-control" name="emailHost" value="{{.str.emailHost}}" placeholder="eg. smtp.ym.163.com">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Port</label>
|
||||
<input type="text" class="form-control" name="emailPort" value="{{.str.emailPort}}" placeholder="eg. 25">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Username</label>
|
||||
<input type="text" class="form-control" name="emailUsername" value="{{.str.emailUsername}}" placeholder="">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Password</label>
|
||||
<input type="text" class="form-control" name="emailPassword" value="{{.str.emailPassword}}" placeholder="">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
init_validator("#add_user_form");
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#add_user_form").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminEmail/set", getFormJsonData("add_user_form"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,325 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Email Template</h3></div>
|
||||
|
||||
<style>
|
||||
.preview {
|
||||
overflow: auto;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
label {
|
||||
}
|
||||
</style>
|
||||
|
||||
<form id="add_user_form">
|
||||
<section class="panel panel-default">
|
||||
<header class="panel-heading bg-light">
|
||||
<ul class="nav nav-tabs nav-justified">
|
||||
<li class="active"><a href="#tab1" data-toggle="tab">Layout</a></li>
|
||||
<li class=""><a href="#tab2" data-toggle="tab">Register</a></li>
|
||||
<li class=""><a href="#tab3" data-toggle="tab">Update Email</a></li>
|
||||
<li ><a href="#tab4" data-toggle="tab">Find Passord</a></li>
|
||||
<li ><a href="#tab5" data-toggle="tab">Invite Register</a></li>
|
||||
<li ><a href="#tab6" data-toggle="tab">Blog Comment</a></li>
|
||||
|
||||
</ul>
|
||||
</header>
|
||||
<div class="panel-body">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tab1">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Layout</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>$.subject</code>
|
||||
<code>$.siteUrl</code>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Header</label>
|
||||
<textarea type="text" id="emailHeader" rows="10" class="form-control" name="emailTemplateHeader">{{.str.emailTemplateHeader}}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Footer</label>
|
||||
<textarea type="text" id="emailFooter" rows="10" class="form-control" name="emailTemplateFooter">{{.str.emailTemplateFooter}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="tab2">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Register Welcome And Email Validation:</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>header</code>
|
||||
<code>footer</code>
|
||||
<code>$.siteUrl</code>
|
||||
<code>$.tokenUrl</code>
|
||||
<code>$.token</code>
|
||||
<code>$.tokenTimeout</code>
|
||||
<code>$.user.userId</code>
|
||||
<code>$.user.email</code>
|
||||
<code>$.user.username</code>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" name="emailTemplateRegisterSubject" value="{{.str.emailTemplateRegisterSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emailTemplateRegister">{{.str.emailTemplateRegister}}</textarea>
|
||||
</div>
|
||||
<div>
|
||||
Preview
|
||||
<div class="preview">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="tab3">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Update Email and Send Active Email</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>header</code>
|
||||
<code>footer</code>
|
||||
<code>$.siteUrl</code>
|
||||
<code>$.tokenUrl</code>
|
||||
<code>$.token</code>
|
||||
<code>$.tokenTimeout</code>
|
||||
<code>$.user.userId</code>
|
||||
<code>$.user.email</code>
|
||||
<code>$.user.username</code>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" name="emailTemplateUpdateEmailSubject" value="{{.str.emailTemplateUpdateEmailSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emailTemplateUpdateEmail">{{.str.emailTemplateUpdateEmail}}</textarea>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Preview
|
||||
<div class="preview">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tab4">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Find Passord</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>header</code>
|
||||
<code>footer</code>
|
||||
<code>$.siteUrl</code>
|
||||
<code>$.tokenUrl</code>
|
||||
<code>$.token</code>
|
||||
<code>$.tokenTimeout</code>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" name="emailTemplateFindPasswordSubject" value="{{.str.emailTemplateFindPasswordSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emailTemplateFindPassword">{{.str.emailTemplateFindPassword}}</textarea>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Preview
|
||||
<div class="preview">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tab5">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Invite Register</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>header</code>
|
||||
<code>footer</code>
|
||||
<code>$.siteUrl</code>
|
||||
<code>$.registerUrl</code>
|
||||
<code>$.user.username</code>
|
||||
<code>$.user.email</code>
|
||||
<code>$.content</code>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" name="emailTemplateInviteSubject" value="{{.str.emailTemplateInviteSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emailTemplateInvite">{{.str.emailTemplateInvite}}</textarea>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Preview
|
||||
<div class="preview">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="tab6">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<b>Blog Comment</b>
|
||||
<div>
|
||||
Available tokens:
|
||||
<code>header</code>
|
||||
<code>footer</code>
|
||||
<code>$.siteUrl</code>
|
||||
<code>$.blogUrl</code>
|
||||
|
||||
<br />
|
||||
<code>$.commentContent</code>
|
||||
|
||||
<br />
|
||||
<code>$.blog.id</code>
|
||||
<code>$.blog.title</code>
|
||||
<code>$.blog.url</code>
|
||||
|
||||
<br />
|
||||
<code>$.commentUser.userId</code>
|
||||
<code>$.commentUser.username</code>
|
||||
<code>$.commentUser.email</code>
|
||||
<code>$.commentUser.isBlogAuthor</code>
|
||||
|
||||
<br />
|
||||
<code>$.commentedUser.userId</code>
|
||||
<code>$.commentedUser.username</code>
|
||||
<code>$.commentedUser.email</code>
|
||||
<code>$.commentedUser.isBlogAuthor</code>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input type="text" class="form-control" name="emailTemplateCommentSubject" value="{{.str.emailTemplateCommentSubject}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<textarea type="text" rows="10" class="form-control" name="emailTemplateComment">{{.str.emailTemplateComment}}</textarea>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Preview
|
||||
<div class="preview">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
$("code").each(function() {
|
||||
var h = $(this).text();
|
||||
$(this).text("{" + "{" + h + "}" + "}");
|
||||
});
|
||||
|
||||
function previewEmail(t) {
|
||||
var $p = $(t).closest(".row");
|
||||
var tpl = $(t).val();
|
||||
var subject = $p.find("input").val() || "";
|
||||
var $preview = $p.find(".preview");
|
||||
|
||||
var header = $("#emailHeader").val();
|
||||
var footer = $("#emailFooter").val();
|
||||
|
||||
header = header.replace("{" + "{$.subject}" + "}", subject);
|
||||
tpl = tpl.replace("{" + "{header}" + "}", header);
|
||||
tpl = tpl.replace("{" + "{footer}" + "}", footer);
|
||||
|
||||
$preview.html(tpl);
|
||||
}
|
||||
|
||||
$("textarea").each(function() {
|
||||
previewEmail(this);
|
||||
});
|
||||
|
||||
$("textarea").keyup(function() {
|
||||
previewEmail(this);
|
||||
});
|
||||
|
||||
init_validator("#add_user_form");
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#add_user_form").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminEmail/template", getFormJsonData("add_user_form"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,30 @@
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<script src="/js/jquery-1.9.0.min.js"></script>
|
||||
<script src="/js/bootstrap.js"></script>
|
||||
<script src="/public/admin/js/artDialog/jquery.artDialog.js?skin=default"></script>
|
||||
<script src="/public/js/common.js"></script>
|
||||
<script src="/public/admin/js/admin.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
var pathname = location.pathname; // admin/t
|
||||
var search = location.search; // ?t=xxx, 如果有?page呢
|
||||
var fullPath = pathname;
|
||||
if(search.indexOf("?t=") >= 0) {
|
||||
var fullPath = pathname + search; // /admin/t?t=xxx
|
||||
}
|
||||
|
||||
$("#nav > li").removeClass("active");
|
||||
// 自己
|
||||
var $thisLi = $('#nav a[href^="' + fullPath + '"]').parent();
|
||||
$thisLi.addClass("active");
|
||||
// 父也active
|
||||
$thisLi.parent().parent().addClass('active');
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="keywords" content="leanote,leanote.com">
|
||||
<meta name="description" content="leanote, {{msg $ "moto"}}">
|
||||
<meta name="author" content="leanote">
|
||||
<title>{{.title}}</title>
|
||||
|
||||
<link href="/css/bootstrap.css" rel="stylesheet">
|
||||
<link href="/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
||||
<link href="/public/admin/css/admin.css" rel="stylesheet">
|
||||
<style>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function log(o) {
|
||||
if(window.console) {
|
||||
console.log(o);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="headerContainer" class="navbar-fixed-top">
|
||||
<div class="container" style="clearfix" id="header">
|
||||
<div class="pull-left">
|
||||
<h1 id="logo" class="clearfix">
|
||||
<a href="/admin/index"></a>
|
||||
<span>Admin</span>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,89 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Dashboard</h3></div>
|
||||
<section class="panel panel-default">
|
||||
<div class="row m-l-none m-r-none bg-light lter">
|
||||
<div class="col-sm-6 col-md-3 padder-v b-r b-light">
|
||||
<span class="fa-stack fa-2x pull-left m-r-sm">
|
||||
<i class="fa fa-circle fa-stack-2x text-info"></i>
|
||||
<i class="fa fa-users fa-stack-1x text-white"></i>
|
||||
</span>
|
||||
<a class="clear" href="/adminUser/index">
|
||||
<span class="h3 block m-t-xs"><strong>{{.countUser}}</strong></span>
|
||||
<small class="text-muted text-uc">Users</small>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-3 padder-v b-r b-light lt">
|
||||
<span class="fa-stack fa-2x pull-left m-r-sm">
|
||||
<i class="fa fa-circle fa-stack-2x text-warning"></i>
|
||||
<i class="fa fa-file-o fa-stack-1x text-white"></i>
|
||||
</span>
|
||||
<a class="clear" href="javascript:;">
|
||||
<span class="h3 block m-t-xs"><strong>{{.countNote}}</strong></span>
|
||||
<small class="text-muted text-uc">Notes</small>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-3 padder-v b-r b-light">
|
||||
<span class="fa-stack fa-2x pull-left m-r-sm">
|
||||
<i class="fa fa-circle fa-stack-2x text-info"></i>
|
||||
<i class="fa fa-bold fa-stack-1x text-white"></i>
|
||||
</span>
|
||||
<a class="clear" href="/adminBlog/index">
|
||||
<span class="h3 block m-t-xs"><strong>{{.countBlog}}</strong></span>
|
||||
<small class="text-muted text-uc">Blogs</small>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 最新动态 -->
|
||||
<section class="panel panel-default">
|
||||
<h4 class="font-thin padder">
|
||||
Leanote Events
|
||||
</h4>
|
||||
<ul class="list-group" id="eventsList"></ul>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
<section class="panel panel-default">
|
||||
<form>
|
||||
<textarea class="form-control no-border" rows="3" placeholder="Suggestions to leanote"></textarea>
|
||||
</form>
|
||||
<footer class="panel-footer bg-light lter">
|
||||
<button class="btn btn-info pull-right btn-sm">
|
||||
POST
|
||||
</button>
|
||||
<ul class="nav nav-pills nav-sm">
|
||||
</footer>
|
||||
</section>
|
||||
-->
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script>
|
||||
$(function() {
|
||||
// leanote动态
|
||||
var url = "http://leanote.com/blog/listCateLatest/5446753cfacfaa4f56000000";
|
||||
function renderItem(item) {
|
||||
return '<li class="list-group-item"><p><a target="_blank" href="http://leanote.com/blog/view/' + item.NoteId + '">' + item.Title + '</a></p><small class="block text-muted"><i class="fa fa-clock-o"></i> ' + goNowToDatetime(item.PublicTime) + '</small></li>';
|
||||
}
|
||||
$.ajax({
|
||||
dataType: "jsonp",//跨域访问 dataType 必须是jsonp 类型。
|
||||
url: url,
|
||||
type: "GET",
|
||||
jsonp: "callback",
|
||||
jsonpCallback: "jsonpCallback",
|
||||
success: function(data) {
|
||||
if(typeof data == "object" && data.Ok) {
|
||||
var list = data.List;
|
||||
var html = "";
|
||||
for(var i = 0; i < list.length; ++i) {
|
||||
var item = list[i];
|
||||
html += renderItem(item);
|
||||
}
|
||||
$("#eventsList").html(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,196 @@
|
||||
<nav class="nav-primary hidden-xs">
|
||||
<ul class="nav" id="nav">
|
||||
|
||||
<li class="active">
|
||||
<a href="/admin/index">
|
||||
<i class="fa fa-dashboard icon">
|
||||
<b class="bg-success">
|
||||
</b>
|
||||
</i>
|
||||
<span>
|
||||
Dashboard
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
<li id="adminUserNav">
|
||||
<a href="#">
|
||||
<i class="fa fa-users icon">
|
||||
<b class="bg-danger">
|
||||
</b>
|
||||
</i>
|
||||
<span class="pull-right">
|
||||
<i class="fa fa-angle-down text">
|
||||
</i>
|
||||
<i class="fa fa-angle-up text-active">
|
||||
</i>
|
||||
</span>
|
||||
<span>
|
||||
User
|
||||
</span>
|
||||
</a>
|
||||
<!-- 导航列表 -->
|
||||
<ul class="nav lt">
|
||||
<li>
|
||||
<a href="/adminUser/index">
|
||||
<span>
|
||||
Users
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/adminUser/add">
|
||||
<span>
|
||||
Add User
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/adminBlog/index">
|
||||
<i class="fa fa-file icon">
|
||||
<b class="bg-warning">
|
||||
</b>
|
||||
</i>
|
||||
<span>
|
||||
Blog
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li id="adminEmailNav">
|
||||
<a href="#layout">
|
||||
<i class="fa fa-envelope-o icon">
|
||||
<b class="bg-warning">
|
||||
</b>
|
||||
</i>
|
||||
<span class="pull-right">
|
||||
<i class="fa fa-angle-down text">
|
||||
</i>
|
||||
<i class="fa fa-angle-up text-active">
|
||||
</i>
|
||||
</span>
|
||||
<span>
|
||||
Email
|
||||
</span>
|
||||
</a>
|
||||
<ul class="nav lt">
|
||||
<li>
|
||||
<a href="/admin/t?t=email/set">
|
||||
<span>
|
||||
Configuration
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/t?t=email/template">
|
||||
<span>
|
||||
Template
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/t?t=email/sendToUsers">
|
||||
<span>
|
||||
Send Email to Users
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/t?t=email/send">
|
||||
<span>
|
||||
Send Email
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/adminEmail/list">
|
||||
<span>
|
||||
Email Logs
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li id="adminSettingNav">
|
||||
<a href="#layout">
|
||||
<i class="fa fa-cog icon">
|
||||
<b class="bg-info">
|
||||
</b>
|
||||
</i>
|
||||
<span class="pull-right">
|
||||
<i class="fa fa-angle-down text">
|
||||
</i>
|
||||
<i class="fa fa-angle-up text-active">
|
||||
</i>
|
||||
</span>
|
||||
<span>
|
||||
Setting
|
||||
</span>
|
||||
</a>
|
||||
<ul class="nav lt">
|
||||
<li>
|
||||
<a href="/admin/t?t=setting/demo">
|
||||
<span>
|
||||
Demo User
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/admin/t?t=setting/openRegister">
|
||||
<span>
|
||||
Open Register
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/admin/t?t=setting/shareNote">
|
||||
<span>
|
||||
Register Share Note
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-columns icon">
|
||||
<b class="bg-success">
|
||||
</b>
|
||||
</i>
|
||||
<span class="pull-right">
|
||||
<i class="fa fa-angle-down text">
|
||||
</i>
|
||||
<i class="fa fa-angle-up text-active">
|
||||
</i>
|
||||
</span>
|
||||
|
||||
<span>
|
||||
Data
|
||||
</span>
|
||||
</a>
|
||||
<ul class="nav lt">
|
||||
<li>
|
||||
<a href="/admin/t?t=data/configuration">
|
||||
<span>
|
||||
Mongodb Tool Configuration
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/adminData/index">
|
||||
<span>
|
||||
Backup & Restore
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -0,0 +1,52 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Demo User</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="add_user_form">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Demo Username</label>
|
||||
<input type="text" class="form-control" name="demoUsername" value="{{.str.demoUsername}}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Demo Password</label>
|
||||
<input type="text" class="form-control" name="demoPassword" value="{{.str.demoPassword}}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
init_validator("#add_user_form");
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#add_user_form").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminSetting/doDemo", getFormJsonData("add_user_form"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,48 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Open Register</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="form_data">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Open ?</label>
|
||||
<input type="checkbox" class="form-control" name="openRegister" {{if .str.openRegister}}checked="checked"{{end}} value="1">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
init_validator("#form_data");
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#form_data").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminSetting/openRegister", getFormJsonData("form_data"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,173 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Register Share Note</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="formContainer">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Shared UserId</label>
|
||||
<input type="text" class="form-control" name="registerSharedUserId" value="{{.str.registerSharedUserId}}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Shared Notebooks</label>
|
||||
<div class="clearfix" id="notebooks">
|
||||
{{range $notebook := .arrMap.registerSharedNotebooks}}
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" placeholder="notebookId" name="registerSharedNotebookIds[]"
|
||||
value="{{$notebook.notebookId}}"
|
||||
>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotebookPerms[]">
|
||||
<option value="0" {{if eq $notebook.perm "0"}}selected{{end}}>Read Only</option>
|
||||
<option value="1" {{if eq $notebook.perm "1"}}selected{{end}}>Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" placeholder="notebookId" name="registerSharedNotebookIds[]">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotebookPerms[]">
|
||||
<option value="0">Read Only</option>
|
||||
<option value="1">Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" placeholder="notebookId" name="registerSharedNotebookIds[]">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotebookPerms[]">
|
||||
<option value="0">Read Only</option>
|
||||
<option value="1">Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
The notebooks will shared to register user
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Shared Notes</label>
|
||||
<div class="clearfix" id="notebooks">
|
||||
{{range $note := .arrMap.registerSharedNotes}}
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" name="registerSharedNoteIds[]"
|
||||
value="{{$note.noteId}}"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotePerms[]">
|
||||
<option value="0" {{if eq $note.perm "0"}}selected{{end}}>Read Only</option>
|
||||
<option value="1" {{if eq $note.perm "1"}}selected{{end}}>Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" placeholder="noteId" name="registerSharedNoteIds[]">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotePerms[]">
|
||||
<option value="0">Read Only</option>
|
||||
<option value="1">Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<input type="text" class="form-control" placeholder="noteId" name="registerSharedNoteIds[]">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" name="registerSharedNotePerms[]">
|
||||
<option value="0">Read Only</option>
|
||||
<option value="1">Writable</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
The notes will shared to register user
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Copy Notes</label>
|
||||
<div class="clearfix" id="notebooks">
|
||||
{{range $noteId := .arr.registerCopyNoteIds}}
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<input type="text" class="form-control" name="registerCopyNoteIds[]"
|
||||
value="{{$noteId}}"
|
||||
placeholder="noteId"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<input type="text" class="form-control" name="registerCopyNoteIds[]" placeholder="noteId"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<input type="text" class="form-control" name="registerCopyNoteIds[]" placeholder="noteId"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
The notes will copy to register user
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
var a = "{{json .arrMap}}"
|
||||
|
||||
|
||||
$(function() {
|
||||
|
||||
init_validator("#formContainer");
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#formContainer").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/adminSetting/shareNote", getFormJsonData("formContainer"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg)
|
||||
} else {
|
||||
art.tips(ret.Msg || "Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,123 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="app">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>
|
||||
leanote admin
|
||||
</title>
|
||||
<meta name="description" content="leanote admin"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
|
||||
<link href="/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
||||
<link href="/public/admin/css/bootstrap.3.2.0.min.css" rel="stylesheet">
|
||||
<link href="/public/admin/css/admin.css" rel="stylesheet">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="/public/admin/js/ie/html5shiv.js"></script>
|
||||
<script src="/public/admin/js/ie/respond.min.js"></script>
|
||||
<script src="/public/admin/js/ie/excanvas.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="">
|
||||
<section class="vbox">
|
||||
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
||||
<div class="navbar-header aside-md clearfix" id="logo">
|
||||
<a href="/admin/index" class="navbar-brand" data-toggle="fullscreen"></a>
|
||||
<div>Admin</div>
|
||||
</div>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right m-n hidden-xs nav-user">
|
||||
<li class="hidden-xs">
|
||||
<a href="http://leanote.com" class="dk" target="_blank">
|
||||
Leanote Home
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-xs">
|
||||
<a href="https://github.com/leanote/leanote" class="dk" target="_blank">
|
||||
Leanote Github
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-xs">
|
||||
<a href="http://lea.leanote.com" class="dk" target="_blank">
|
||||
lea++
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-xs">
|
||||
<a href="/note" class="dk" target="_blank">
|
||||
My Note
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-xs">
|
||||
<a href="/blog/admin" class="dk" target="_blank">
|
||||
My Blog
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden-xs">
|
||||
<a href="/logout" class="dk">
|
||||
Logout
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
<section>
|
||||
<section class="hbox stretch">
|
||||
<!-- .aside -->
|
||||
<aside class="bg-light lter b-r aside-md hidden-print hidden-xs" id="nav">
|
||||
<section class="vbox">
|
||||
<!--
|
||||
<header class="header bg-primary lter text-center clearfix">
|
||||
<div class="btn-group">
|
||||
<div class="hidden-nav-xs">
|
||||
<a class="btn btn-sm btn-primary">
|
||||
Welcome, admin!
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
-->
|
||||
|
||||
<section class="w-f scrollable">
|
||||
<div class="slim-scroll" data-height="auto" data-disable-fade-out="true"
|
||||
data-distance="0" data-size="5px" data-color="#333333">
|
||||
<!-- nav -->
|
||||
{{template "admin/nav.html" .}}
|
||||
<!-- / nav -->
|
||||
</div>
|
||||
</section>
|
||||
<footer class="footer lt hidden-xs b-t b-light" style="min-height: initial;
|
||||
padding: 10px 15px;text-align:center;">
|
||||
<a href="http://leanote.com" target="_blank">leanote</a> © 2014
|
||||
<!--
|
||||
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-default btn-icon">
|
||||
<i class="fa fa-angle-left text">
|
||||
</i>
|
||||
<i class="fa fa-angle-right text-active">
|
||||
</i>
|
||||
</a>
|
||||
-->
|
||||
</footer>
|
||||
</section>
|
||||
</aside>
|
||||
<!-- /.aside -->
|
||||
<section id="content">
|
||||
<section class="vbox">
|
||||
<section class="scrollable padder">
|
||||
<!-- 导航
|
||||
<ul class="breadcrumb no-border no-radius b-b b-light pull-in">
|
||||
<li>
|
||||
<a href="index.html">
|
||||
<i class="fa fa-home">
|
||||
</i>
|
||||
Home
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
Elements
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
Components
|
||||
</li>
|
||||
</ul>
|
||||
-->
|
||||
<!-- 主要内容区 -->
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Add User</h3></div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<form id="add_user_form">
|
||||
<section class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label>Email</label>
|
||||
<input type="text" class="form-control" name="email" data-rule-required="true" data-rule-email="true">
|
||||
</div>
|
||||
<div class="form-group pull-in clearfix">
|
||||
<div class="col-sm-6">
|
||||
<label>Enter password</label>
|
||||
<input type="password" class="form-control" data-rule-required="true" id="pwd" name="pwd" data-rule-minlength="6">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<label>Confirm password</label>
|
||||
<input type="password" class="form-control parsley-validated" data-rule-equalto="#pwd" data-rule-required="true" name="password2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="panel-footer text-right bg-light lter">
|
||||
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||
</footer>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
init_validator("#add_user_form");
|
||||
|
||||
$("#submit").click(function(e){
|
||||
e.preventDefault();
|
||||
var t = this;
|
||||
if($("#add_user_form").valid()) {
|
||||
$(t).button('loading');
|
||||
ajaxPost("/auth/doRegister", getFormJsonData("add_user_form"), function(ret){
|
||||
$(t).button('reset')
|
||||
if(!ret.Ok) {
|
||||
art.alert(ret.Msg);
|
||||
} else {
|
||||
art.tips("Success");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,157 @@
|
||||
{{template "admin/top.html" .}}
|
||||
<div class="m-b-md"> <h3 class="m-b-none">Users</h3></div>
|
||||
|
||||
<section class="panel panel-default">
|
||||
<div class="row wrapper">
|
||||
<div class="col-sm-5 m-b-xs">
|
||||
<select class="input-sm form-control input-s-sm inline v-middle">
|
||||
<option value="">
|
||||
Bulk action
|
||||
</option>
|
||||
<option value="1">
|
||||
Send Email
|
||||
</option>
|
||||
</select>
|
||||
<button class="btn btn-sm btn-default bulk-btn">
|
||||
Apply
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-4 m-b-xs">
|
||||
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group search-group">
|
||||
<input type="text" class="input-sm form-control" placeholder="Email" id="keywords" value="{{.keywords}}" />
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-sm btn-default" type="button" data-url="/adminUser/index">Search</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped b-t b-light">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20">
|
||||
<input type="checkbox">
|
||||
</th>
|
||||
{{$url := urlConcat "/adminUser/index" "keywords" .keywords}}
|
||||
<th
|
||||
{{sorterTh $url "email" .sorter}}
|
||||
>
|
||||
Email
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "username" .sorter}}
|
||||
>
|
||||
Username
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "verified" .sorter}}
|
||||
>
|
||||
Verified
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
{{sorterTh $url "createdTime" .sorter}}
|
||||
>
|
||||
Register Date
|
||||
<span class="th-sort">
|
||||
<i class="fa fa-sort-down"></i>
|
||||
<i class="fa fa-sort-up"></i>
|
||||
<i class="fa fa-sort"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th width="30">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .users}}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" class="ck" data-email="{{.Email}}" data-id="{{.UserId.Hex}}">
|
||||
</td>
|
||||
<td>
|
||||
<a target="_blank" href="/blog/{{.UserId.Hex}}">{{.Email}}</a>
|
||||
</td>
|
||||
<td>
|
||||
{{.Username}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Verified}}
|
||||
</td>
|
||||
<td>
|
||||
{{.CreatedTime|datetime}}
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="btn btn-default send-email" data-email="{{.Email}}">Send Email</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<footer class="panel-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-4 hidden-xs">
|
||||
<select class="input-sm form-control input-s-sm inline v-middle">
|
||||
<option value="">
|
||||
Bulk action
|
||||
</option>
|
||||
<option value="1">
|
||||
Send Email
|
||||
</option>
|
||||
</select>
|
||||
<button class="btn btn-sm btn-default bulk-btn">
|
||||
Apply
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-8 text-right text-center-xs">
|
||||
{{set . "url" (urlConcat "/adminUser/index" "sorter" .sorter "keywords" .keywords)}}
|
||||
{{template "admin/user/page.html" .}}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
{{template "admin/footer.html" .}}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".send-email").click(function() {
|
||||
openSendEmailDialog($(this).data("email"));
|
||||
});
|
||||
$(".bulk-btn").click(function() {
|
||||
// email
|
||||
if($(this).prev().val() == "1") {
|
||||
var emails = [];
|
||||
$(".ck:checked").each(function() {
|
||||
emails.push($(this).data("email"));
|
||||
});
|
||||
if(emails.length == 0) {
|
||||
art.alert("No user");
|
||||
return;
|
||||
}
|
||||
openSendEmailDialog(emails.join(","));
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{{template "admin/end.html" .}}
|
||||
@@ -0,0 +1,33 @@
|
||||
{{if gt .pageInfo.TotalPage 1}}
|
||||
<ul class="pagination pagination-sm m-t-none m-b-none">
|
||||
<li class="{{if eq $.pageInfo.CurPage 1}}disabled{{end}}" >
|
||||
<a href="{{if eq $.pageInfo.CurPage 1}}javascript:;{{else}}{{sub $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-left">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{{range $i := N 1 .pageInfo.TotalPage}}
|
||||
{{if eq $i $.pageInfo.CurPage}}
|
||||
<li class="active">
|
||||
<a href="javascript:;">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="">
|
||||
<a href="{{urlConcat $.url "page" $i}}">
|
||||
{{$i}}
|
||||
</a>
|
||||
</li>
|
||||
{{end}}
|
||||
{{end}}
|
||||
|
||||
<li class="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}disabled{{end}}" >
|
||||
<a href="{{if eq .pageInfo.CurPage .pageInfo.TotalPage}}javascript:;{{else}}{{add $.pageInfo.CurPage | urlConcat $.url "page" }}{{end}}">
|
||||
<i class="fa fa-chevron-right">
|
||||
</i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{{end}}
|
||||
Reference in new issue
Block a user