v1.0 beta init

This commit is contained in:
life
2014-10-22 16:20:45 +08:00
parent 8ae438272b
commit 593d2c2965
225 changed files with 27217 additions and 3675 deletions

View File

@@ -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>

View File

@@ -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" .}}

View File

@@ -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}}

View File

@@ -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" .}}

View File

@@ -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" .}}

View File

@@ -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" .}}

View File

@@ -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" .}}