member i18n

This commit is contained in:
lealife
2015-11-28 15:17:36 +08:00
parent bc0e09f222
commit b1f36dfbf1
26 changed files with 197 additions and 159 deletions

View File

@ -4,6 +4,7 @@ import (
"github.com/leanote/leanote/app/info" "github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea" . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel" "github.com/revel/revel"
"strings"
// "strconv" // "strconv"
) )
@ -127,6 +128,8 @@ func (c Auth) DoRegister(email, pwd, iu string) revel.Result {
return c.RenderRe(re) return c.RenderRe(re)
} }
email = strings.ToLower(email)
// 注册 // 注册
re.Ok, re.Msg = authService.Register(email, pwd, iu) re.Ok, re.Msg = authService.Register(email, pwd, iu)
@ -141,6 +144,7 @@ func (c Auth) DoRegister(email, pwd, iu string) revel.Result {
//-------- //--------
// 找回密码 // 找回密码
func (c Auth) FindPassword() revel.Result { func (c Auth) FindPassword() revel.Result {
c.SetLocale()
c.RenderArgs["title"] = c.Message("findPassword") c.RenderArgs["title"] = c.Message("findPassword")
c.RenderArgs["subTitle"] = c.Message("findPassword") c.RenderArgs["subTitle"] = c.Message("findPassword")
return c.RenderTemplate("home/find_password.html") return c.RenderTemplate("home/find_password.html")
@ -154,6 +158,7 @@ func (c Auth) DoFindPassword(email string) revel.Result {
// 点击链接后, 先验证之 // 点击链接后, 先验证之
func (c Auth) FindPassword2(token string) revel.Result { func (c Auth) FindPassword2(token string) revel.Result {
c.SetLocale()
c.RenderArgs["title"] = c.Message("findPassword") c.RenderArgs["title"] = c.Message("findPassword")
c.RenderArgs["subTitle"] = c.Message("findPassword") c.RenderArgs["subTitle"] = c.Message("findPassword")
if token == "" { if token == "" {

View File

@ -335,11 +335,11 @@ func (c Note) ToPdf(noteId, appKey string) revel.Result {
// 虽然传了cookie但是这里还是不能得到userId, 所以还是通过appKey来验证之 // 虽然传了cookie但是这里还是不能得到userId, 所以还是通过appKey来验证之
appKeyTrue, _ := revel.Config.String("app.secret") appKeyTrue, _ := revel.Config.String("app.secret")
if appKeyTrue != appKey { if appKeyTrue != appKey {
return c.RenderText("error") return c.RenderText("auth error")
} }
note := noteService.GetNoteById(noteId) note := noteService.GetNoteById(noteId)
if note.NoteId == "" { if note.NoteId == "" {
return c.RenderText("error") return c.RenderText("no note")
} }
noteUserId := note.UserId.Hex() noteUserId := note.UserId.Hex()
@ -428,7 +428,7 @@ func (c Note) ExportPdf(noteId string) revel.Result {
// 是否是有权限协作的 // 是否是有权限协作的
if !note.IsBlog && !shareService.HasReadPerm(noteUserId, userId, noteId) { if !note.IsBlog && !shareService.HasReadPerm(noteUserId, userId, noteId) {
re.Msg = "No Perm" re.Msg = "No Perm"
return c.RenderText("error") return c.RenderText("No Perm")
} }
} }

View File

@ -23,7 +23,7 @@ type Preview struct {
// 得到要预览的主题绝对路径 // 得到要预览的主题绝对路径
func (c Preview) getPreviewThemeAbsolutePath(themeId string) bool { func (c Preview) getPreviewThemeAbsolutePath(themeId string) bool {
if themeId != "" { if themeId != "" {
c.Session["themeId"] = themeId // 存到session中, 下次的url就不能带了 c.Session["themeId"] = themeId // 存到session中, 下次的url就不能带了, 待优化, 有时会取不到
} else { } else {
themeId = c.Session["themeId"] // 直接从session中获取 themeId = c.Session["themeId"] // 直接从session中获取
} }

View File

@ -540,7 +540,6 @@ func (c ApiNote) GetHistories(noteId string) revel.Result {
// 0.2 新增 // 0.2 新增
// 导出成PDF // 导出成PDF
// test localhost:9000/api/note/exportPdf?noteId=554f07bf05fcd15fa9000000&token=562211dc99c37ba6a7000001
func (c ApiNote) ExportPdf(noteId string) revel.Result { func (c ApiNote) ExportPdf(noteId string) revel.Result {
re := info.NewApiRe() re := info.NewApiRe()
userId := c.getUserId() userId := c.getUserId()

View File

@ -74,7 +74,7 @@ func (c MemberBlog) Index(sorter, keywords string) revel.Result {
userInfo := userService.GetUserInfo(userId) userInfo := userService.GetUserInfo(userId)
c.RenderArgs["userInfo"] = userInfo c.RenderArgs["userInfo"] = userInfo
c.RenderArgs["title"] = "Posts" c.RenderArgs["title"] = c.Message("Posts")
pageNumber := c.GetPage() pageNumber := c.GetPage()
sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"title", "urlTitle", "updatedTime", "publicTime", "createdTime"}) sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"title", "urlTitle", "updatedTime", "publicTime", "createdTime"})
pageInfo, blogs := blogService.ListAllBlogs(c.GetUserId(), "", keywords, false, pageNumber, userPageSize, sorterField, isAsc) pageInfo, blogs := blogService.ListAllBlogs(c.GetUserId(), "", keywords, false, pageNumber, userPageSize, sorterField, isAsc)
@ -85,6 +85,8 @@ func (c MemberBlog) Index(sorter, keywords string) revel.Result {
userAndBlog := userService.GetUserAndBlog(c.GetUserId()) userAndBlog := userService.GetUserAndBlog(c.GetUserId())
c.RenderArgs["userAndBlog"] = userAndBlog c.RenderArgs["userAndBlog"] = userAndBlog
c.common()
return c.RenderTemplate("member/blog/list.html") return c.RenderTemplate("member/blog/list.html")
} }
@ -97,7 +99,8 @@ func (c MemberBlog) UpdateBlogUrlTitle(noteId, urlTitle string) revel.Result {
// 修改笔记的urlTitle // 修改笔记的urlTitle
func (c MemberBlog) UpdateBlogAbstract(noteId string) revel.Result { func (c MemberBlog) UpdateBlogAbstract(noteId string) revel.Result {
c.RenderArgs["title"] = "Update Post Abstract" c.common()
c.RenderArgs["title"] = c.Message("Update Post Abstract")
note := noteService.GetNoteAndContent(noteId, c.GetUserId()) note := noteService.GetNoteAndContent(noteId, c.GetUserId())
if !note.Note.IsBlog { if !note.Note.IsBlog {
return c.E404() return c.E404()
@ -107,7 +110,6 @@ func (c MemberBlog) UpdateBlogAbstract(noteId string) revel.Result {
return c.RenderTemplate("member/blog/update_abstract.html") return c.RenderTemplate("member/blog/update_abstract.html")
} }
func (c MemberBlog) DoUpdateBlogAbstract(noteId, imgSrc, desc, abstract string) revel.Result { func (c MemberBlog) DoUpdateBlogAbstract(noteId, imgSrc, desc, abstract string) revel.Result {
re := info.NewRe() re := info.NewRe()
re.Ok = blogService.UpateBlogAbstract(c.GetUserId(), noteId, imgSrc, desc, abstract) re.Ok = blogService.UpateBlogAbstract(c.GetUserId(), noteId, imgSrc, desc, abstract)
return c.RenderJson(re) return c.RenderJson(re)
@ -116,24 +118,24 @@ func (c MemberBlog) DoUpdateBlogAbstract(noteId, imgSrc, desc, abstract string)
// 基本信息设置 // 基本信息设置
func (c MemberBlog) Base() revel.Result { func (c MemberBlog) Base() revel.Result {
c.common() c.common()
c.RenderArgs["title"] = "Blog Base Info" c.RenderArgs["title"] = c.Message("Blog Base Info")
return c.RenderTemplate("member/blog/base.html") return c.RenderTemplate("member/blog/base.html")
} }
func (c MemberBlog) Comment() revel.Result { func (c MemberBlog) Comment() revel.Result {
c.common() c.common()
c.RenderArgs["title"] = "Comment" c.RenderArgs["title"] = c.Message("Comment")
return c.RenderTemplate("member/blog/comment.html") return c.RenderTemplate("member/blog/comment.html")
} }
func (c MemberBlog) Paging() revel.Result { func (c MemberBlog) Paging() revel.Result {
c.common() c.common()
c.RenderArgs["title"] = "Paging" c.RenderArgs["title"] = c.Message("Paging")
return c.RenderTemplate("member/blog/paging.html") return c.RenderTemplate("member/blog/paging.html")
} }
func (c MemberBlog) Cate() revel.Result { func (c MemberBlog) Cate() revel.Result {
userBlog := c.common() userBlog := c.common()
c.RenderArgs["title"] = "Cate" c.RenderArgs["title"] = c.Message("Category")
notebooks := blogService.ListBlogNotebooks(c.GetUserId()) notebooks := blogService.ListBlogNotebooks(c.GetUserId())
notebooksMap := map[string]info.Notebook{} notebooksMap := map[string]info.Notebook{}
@ -190,10 +192,10 @@ func (c MemberBlog) DoAddOrUpdateSingle(singleId, title, content string) revel.R
} }
func (c MemberBlog) AddOrUpdateSingle(singleId string) revel.Result { func (c MemberBlog) AddOrUpdateSingle(singleId string) revel.Result {
c.common() c.common()
c.RenderArgs["title"] = "Add Single" c.RenderArgs["title"] = c.Message("Add Single")
c.RenderArgs["singleId"] = singleId c.RenderArgs["singleId"] = singleId
if singleId != "" { if singleId != "" {
c.RenderArgs["title"] = "Update Single" c.RenderArgs["title"] = c.Message("Update Single")
c.RenderArgs["single"] = blogService.GetSingle(singleId) c.RenderArgs["single"] = blogService.GetSingle(singleId)
} }
return c.RenderTemplate("member/blog/add_single.html") return c.RenderTemplate("member/blog/add_single.html")
@ -219,7 +221,7 @@ func (c MemberBlog) UpdateSingleUrlTitle(singleId, urlTitle string) revel.Result
func (c MemberBlog) Single() revel.Result { func (c MemberBlog) Single() revel.Result {
c.common() c.common()
c.RenderArgs["title"] = "Cate" c.RenderArgs["title"] = c.Message("Single")
c.RenderArgs["singles"] = blogService.GetSingles(c.GetUserId()) c.RenderArgs["singles"] = blogService.GetSingles(c.GetUserId())
return c.RenderTemplate("member/blog/single.html") return c.RenderTemplate("member/blog/single.html")
@ -234,7 +236,7 @@ func (c MemberBlog) Theme() revel.Result {
c.RenderArgs["optionThemes"] = themeService.GetDefaultThemes() c.RenderArgs["optionThemes"] = themeService.GetDefaultThemes()
c.RenderArgs["title"] = "Theme" c.RenderArgs["title"] = c.Message("Theme")
return c.RenderTemplate("member/blog/theme.html") return c.RenderTemplate("member/blog/theme.html")
} }
@ -251,7 +253,7 @@ func (c MemberBlog) UpdateTheme(themeId string, isNew int) revel.Result {
} }
c.common() c.common()
c.RenderArgs["title"] = "Upate Theme" c.RenderArgs["title"] = c.Message("Update Theme")
c.RenderArgs["isNew"] = isNew c.RenderArgs["isNew"] = isNew
// 先复制之 // 先复制之
@ -443,8 +445,8 @@ func (c MemberBlog) ImportTheme() revel.Result {
if err != nil { if err != nil {
re.Msg = fmt.Sprintf("%v", err) re.Msg = fmt.Sprintf("%v", err)
return c.RenderJson(re) return c.RenderJson(re)
} }
defer file.Close() defer file.Close()
// 生成上传路径 // 生成上传路径
userId := c.GetUserId() userId := c.GetUserId()

View File

@ -14,7 +14,7 @@ type MemberGroup struct {
func (c MemberGroup) Index() revel.Result { func (c MemberGroup) Index() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.SetLocale() c.SetLocale()
c.RenderArgs["title"] = "My Group" c.RenderArgs["title"] = c.Message("My Group")
c.RenderArgs["groups"] = groupService.GetGroupsAndUsers(c.GetUserId()) c.RenderArgs["groups"] = groupService.GetGroupsAndUsers(c.GetUserId())
return c.RenderTemplate("member/group/index.html") return c.RenderTemplate("member/group/index.html")
} }

View File

@ -13,7 +13,7 @@ type MemberIndex struct {
// admin 主页 // admin 主页
func (c MemberIndex) Index() revel.Result { func (c MemberIndex) Index() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.RenderArgs["title"] = "Leanote Member Center" c.RenderArgs["title"] = c.Message("Leanote Member Center")
c.RenderArgs["countNote"] = noteService.CountNote(c.GetUserId()) c.RenderArgs["countNote"] = noteService.CountNote(c.GetUserId())
c.RenderArgs["countBlog"] = noteService.CountBlog(c.GetUserId()) c.RenderArgs["countBlog"] = noteService.CountBlog(c.GetUserId())

View File

@ -13,28 +13,28 @@ type MemberUser struct {
func (c MemberUser) Username() revel.Result { func (c MemberUser) Username() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.SetLocale() c.SetLocale()
c.RenderArgs["title"] = "Username" c.RenderArgs["title"] = c.Message("Username")
return c.RenderTemplate("member/user/username.html") return c.RenderTemplate("member/user/username.html")
} }
func (c MemberUser) Email() revel.Result { func (c MemberUser) Email() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.SetLocale() c.SetLocale()
c.RenderArgs["title"] = "Email" c.RenderArgs["title"] = c.Message("Email")
return c.RenderTemplate("member/user/email.html") return c.RenderTemplate("member/user/email.html")
} }
func (c MemberUser) Password() revel.Result { func (c MemberUser) Password() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.SetLocale() c.SetLocale()
c.RenderArgs["title"] = "Password" c.RenderArgs["title"] = c.Message("Password")
return c.RenderTemplate("member/user/password.html") return c.RenderTemplate("member/user/password.html")
} }
func (c MemberUser) Avatar() revel.Result { func (c MemberUser) Avatar() revel.Result {
c.SetUserInfo() c.SetUserInfo()
c.SetLocale() c.SetLocale()
c.RenderArgs["title"] = "Avatar" c.RenderArgs["title"] = c.Message("Avatar")
c.RenderArgs["globalConfigs"] = configService.GetGlobalConfigForUser() c.RenderArgs["globalConfigs"] = configService.GetGlobalConfigForUser()
return c.RenderTemplate("member/user/avatar.html") return c.RenderTemplate("member/user/avatar.html")
} }

View File

@ -470,7 +470,8 @@ func (this *ShareService) GetShareNoteContent(noteId, myUserId, sharedUserId str
// 或者, 其notebook共享了我 // 或者, 其notebook共享了我
// Log(this.HasSharedNote(noteId, myUserId)) // Log(this.HasSharedNote(noteId, myUserId))
// Log(this.HasSharedNotebook(noteId, myUserId, sharedUserId)) // Log(this.HasSharedNotebook(noteId, myUserId, sharedUserId))
Log(this.HasReadPerm(sharedUserId, myUserId, noteId)) // Log(this.HasReadPerm(sharedUserId, myUserId, noteId))
if this.HasReadPerm(sharedUserId, myUserId, noteId) { if this.HasReadPerm(sharedUserId, myUserId, noteId) {
// if this.HasSharedNote(noteId, myUserId) || this.HasSharedNotebook(noteId, myUserId, sharedUserId) { // if this.HasSharedNote(noteId, myUserId) || this.HasSharedNotebook(noteId, myUserId, sharedUserId) {
db.Get(db.NoteContents, noteId, &noteContent) db.Get(db.NoteContents, noteId, &noteContent)

View File

@ -618,8 +618,6 @@ func (this *ThemeService) hasRound(vector [][]int, size int) (ok bool) {
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
visited := make([]int, size) visited := make([]int, size)
if this.hasRoundEach(vector, i, size, visited) { if this.hasRoundEach(vector, i, size, visited) {
Log(">>")
Log(i)
return true return true
} }
} }
@ -629,8 +627,6 @@ func (this *ThemeService) hasRound(vector [][]int, size int) (ok bool) {
// 从每个节点出发, 判断是否有环 // 从每个节点出发, 判断是否有环
func (this *ThemeService) hasRoundEach(vector [][]int, index int, size int, visited []int) (ok bool) { func (this *ThemeService) hasRoundEach(vector [][]int, index int, size int, visited []int) (ok bool) {
if visited[index] > 0 { if visited[index] > 0 {
Log("<")
Log(index)
return true return true
} }
visited[index] = 1 visited[index] = 1

View File

@ -28,8 +28,10 @@
<div class="form-group"> <div class="form-group">
<label for="content1">{{msg . "content"}}</label> <label for="content1">{{msg . "content"}}</label>
<div id="popularToolbar"></div> <div class="toolbar-content">
<textarea id="content1" name="content">{{.single.Content}}</textarea> <div id="popularToolbar" class="tool-bar"></div>
<div id="content1" class="content-ctn" name="content">{{if .single}}{{.single.Content|raw}}{{end}}</div>
</div>
</div> </div>
</div> </div>
<footer class="panel-footer text-right bg-light lter"> <footer class="panel-footer text-right bg-light lter">
@ -40,28 +42,16 @@
</div> </div>
</div> </div>
<style>
.mce-btn.mce-active, .mce-btn.mce-active:hover {
background-color: #FFFFFF;
}
.mce-btn {
background-color: #FFFFFF;
}
</style>
{{template "member/footer.html" .}} {{template "member/footer.html" .}}
<script type="text/javascript" src="/tinymce/tinymce.js"></script> <script type="text/javascript" src="/tinymce/tinymce.js"></script>
<script> <script>
var urlPrefix = "{{.siteUrl}}"; var urlPrefix = "{{.siteUrl}}";
var LeaAce = {nowIsInAce: function() {return false;}}; var LeaAce = null;
$(function() { $(function() {
tinymce.init({ tinymce.init({
selector : "#content1", selector : "#content1",
content_css : ["/css/editor/editor.css" ], theme: 'leanote',
theme : "leanote",
language : "{{.locale}}", language : "{{.locale}}",
height : 300,
width : "100%",
// skin : "custom",
plugins : [ plugins : [
"advlist autolink link lists charmap hr ", "advlist autolink link lists charmap hr ",
"searchreplace visualblocks visualchars tabfocus", "searchreplace visualblocks visualchars tabfocus",
@ -95,12 +85,12 @@ $(function() {
ajaxPost("/member/blog/doAddOrUpdateSingle/", data, function(re) { ajaxPost("/member/blog/doAddOrUpdateSingle/", data, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
// 添加成功后, 跳转之 // 添加成功后, 跳转之
art.tips("Success") art.tips(getMsg("Success"));
if(!data.pageId) { if(!data.pageId) {
location.href = "/member/blog/single"; location.href = "/member/blog/single";
} }
} else { } else {
art.alert(re.Msg || "error") art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });

View File

@ -69,7 +69,6 @@
</div> </div>
{{template "member/footer.html" .}} {{template "member/footer.html" .}}
<script type="text/javascript" src="/tinymce/tinymce.min.js"></script>
<script> <script>
var urlPrefix = "{{.siteUrl}}"; var urlPrefix = "{{.siteUrl}}";
$(function() { $(function() {

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "cate"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Category"}}</h3></div>
<div class="row"> <div class="row">
<div class="col-sm-8"> <div class="col-sm-8">
@ -46,9 +46,9 @@ $(function() {
}); });
ajaxPost("/member/blog/upateCateIds", {cateIds: ids}, function(re){ ajaxPost("/member/blog/upateCateIds", {cateIds: ids}, function(re){
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
} else { } else {
art.alert(re.Msg || "error"); art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });
@ -61,7 +61,7 @@ $(function() {
if(reIsOk(re)) { if(reIsOk(re)) {
$t.val(re.Item); $t.val(re.Item);
} else { } else {
art.alert(re.Msg || "error"); art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"><h3 class="m-b-none">{{msg . "postList"}}</h3></div> <div class="m-b-md"><h3 class="m-b-none">{{msg . "Posts"}}</h3></div>
<style> <style>
.url-title { .url-title {
width: 260px; width: 260px;
@ -15,7 +15,7 @@
<div class="input-group search-group"> <div class="input-group search-group">
<input type="text" class="input-sm form-control" placeholder="{{msg . "title"}}" id="keywords" value="{{.keywords}}" /> <input type="text" class="input-sm form-control" placeholder="{{msg . "title"}}" id="keywords" value="{{.keywords}}" />
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-sm btn-default" type="button" data-url="/member/blog/index">Search</button> <button class="btn btn-sm btn-default" type="button" data-url="/member/blog/index">{{leaMsg $ "Search"}}</button>
</span> </span>
</div> </div>
</div> </div>
@ -92,7 +92,7 @@
{{end}} {{end}}
<tr> <tr>
<td> <td>
<a href="{{$.userAndBlog.PostUrl}}/{{$.urlTitle}}" class="post" target="_blank">{{.Title|raw}}</a> <a href="{{$.userAndBlog.PostUrl}}/{{$.urlTitle}}" class="post" target="_blank">{{.Title}}</a>
</td> </td>
<td> <td>

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "single"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Single"}}</h3></div>
<div class="row"> <div class="row">
<div class="col-sm-8"> <div class="col-sm-8">
@ -47,22 +47,22 @@ $(function() {
}); });
ajaxPost("/member/blog/sortSingles", {singleIds: ids}, function(re){ ajaxPost("/member/blog/sortSingles", {singleIds: ids}, function(re){
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
} else { } else {
art.alert(re.Msg || "error"); art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });
$(".page-delete").click(function() { $(".page-delete").click(function() {
var singleId = $(this).data('id'); var singleId = $(this).data('id');
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure ?"), function() {
ajaxPost("/member/blog/deleteSingle", {singleId: singleId}, function(re){ ajaxPost("/member/blog/deleteSingle", {singleId: singleId}, function(re){
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
location.reload(); location.reload();
} else { } else {
art.alert(re.Msg || "error"); art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });
@ -76,7 +76,7 @@ $(function() {
if(reIsOk(re)) { if(reIsOk(re)) {
$t.val(re.Item); $t.val(re.Item);
} else { } else {
art.alert(re.Msg || "error"); art.alert(re.Msg || getMsg("Error"));
} }
}); });
}); });

View File

@ -1,7 +1,7 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md clearfix"> <div class="m-b-md clearfix">
<h3 class="m-b-none"> <h3 class="m-b-none">
{{msg . "themeSet"}} {{msg . "theme"}}
<small> <small>
(<a href="http://blog.leanote.com/post/545f1a5c380782565e000000" target="_blank">{{msg . "needHelp"}}</a> (<a href="http://blog.leanote.com/post/545f1a5c380782565e000000" target="_blank">{{msg . "needHelp"}}</a>
<a target="_blank" href="https://github.com/leanote/leanote/wiki/leanote-blog-theme-api">Leanote Blog Theme Api</a>) <a target="_blank" href="https://github.com/leanote/leanote/wiki/leanote-blog-theme-api">Leanote Blog Theme Api</a>)
@ -138,7 +138,7 @@
</div> </div>
{{template "member/footer.html" .}} {{template "member/footer.html" .}}
<script src="/js/require.js"></script>
<script> <script>
var urlPrefix = "{{.siteUrl}}"; var urlPrefix = "{{.siteUrl}}";
$(function() { $(function() {
@ -169,7 +169,7 @@ $(".btn-export").click(function() {
$(".btn-delete").click(function() { $(".btn-delete").click(function() {
var id = $(this).parent().data('id'); var id = $(this).parent().data('id');
var t = $(this); var t = $(this);
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure ?"), function() {
t.button("loading"); t.button("loading");
ajaxPost("/member/blog/deleteTheme", {themeId: id}, function(re) { ajaxPost("/member/blog/deleteTheme", {themeId: id}, function(re) {
t.button("reset"); t.button("reset");
@ -187,15 +187,15 @@ $(".btn-delete").click(function() {
$(".btn-install").click(function() { $(".btn-install").click(function() {
var id = $(this).parent().data('id'); var id = $(this).parent().data('id');
var t = $(this); var t = $(this);
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure to install it ?"), function() {
t.button("loading"); t.button("loading");
ajaxPost("/member/blog/installTheme", {themeId: id}, function(re) { ajaxPost("/member/blog/installTheme", {themeId: id}, function(re) {
t.button("reset"); t.button("reset");
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
location.reload(); location.reload();
} else { } else {
art.alert("Error"); art.alert(getMsg("Error"));
} }
}); });
}); });
@ -206,15 +206,15 @@ $(".btn-install").click(function() {
$(".btn-public").click(function() { $(".btn-public").click(function() {
var id = $(this).parent().data('id'); var id = $(this).parent().data('id');
var t = $(this); var t = $(this);
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure ?"), function() {
t.button("loading"); t.button("loading");
ajaxPost("/member/blog/publicTheme", {themeId: id}, function(re) { ajaxPost("/member/blog/publicTheme", {themeId: id}, function(re) {
t.button("reset"); t.button("reset");
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
location.reload(); location.reload();
} else { } else {
art.alert("Error"); art.alert(getMsg("Error"));
} }
}); });
}); });
@ -222,19 +222,17 @@ $(".btn-public").click(function() {
{{end}} {{end}}
}); });
</script>
<script src="/js/require.js"></script>
<script>
// 导入主题 // 导入主题
require.config({ require.config({
baseUrl: '/public', baseUrl: '/public',
paths: { paths: {
'import_theme': 'js/app/import_theme', 'import_theme': 'member/js/import_theme',
'jquery.ui.widget': 'tinymce/plugins/leaui_image/public/js/jquery.ui.widget', 'fileupload': 'js/plugins/libs-min/fileupload',
'fileupload': '/tinymce/plugins/leaui_image/public/js/jquery.fileupload',
'iframe-transport': '/tinymce/plugins/leaui_image/public/js/jquery.iframe-transport'
}, },
shim: {
'fileupload': {deps: ['jquery.ui.widget', 'iframe-transport']}
}
}); });
$(function() { $(function() {
require(['import_theme'], function(import_theme) {}); require(['import_theme'], function(import_theme) {});

View File

@ -7,38 +7,46 @@
</style> </style>
<div class="m-b-md"> <h3 class="m-b-none"> <div class="m-b-md"> <h3 class="m-b-none">
{{.note.Title}} - 摘要设置 {{.note.Title}} - {{msg $ "setAbstract"}}
</h3> </h3>
</div> </div>
<link rel="stylesheet" href="/tinymce/skins/custom/skin.min.css" type="text/css"> <link rel="stylesheet" href="/tinymce/skins/custom/skin.min.css" type="text/css">
<div class="row"> <div class="row">
<div class="col-sm-10"> <div class="col-sm-10">
<form id="formData"> <form id="formData">
<section class="panel panel-default"> <section class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
以下内容设置后, 以后修改笔记时将不自动获取. 若将该文章取消为博客后, 以下内容会自动获取.
{{leaMsg . "Once the abstract has been updated, it will not set the abstract automatically other than you cancel it."}}
<hr /> <hr />
<div class="alert alert-danger" id="baseMsg" style="display: none"></div> <div class="alert alert-danger" id="baseMsg" style="display: none"></div>
<div class="form-group">
<div class="form-group" id="mainImg">
<label> <label>
主图片 {{leaMsg $ "Main Image"}}
<a class="btn btn-default btn-select-img">从笔记中自动获取下一张</a> <a class="btn btn-default btn-select-img">
{{leaMsg $ "Get next image as main image from content"}}
</a>
</label> </label>
<div> <div style="border: 2px dashed #ccc; padding: 5px;">
<img src="{{.note.ImgSrc}}" class="img-src" id="imgSrc"/> <img src="{{.note.ImgSrc}}" class="img-src" id="imgSrc"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>描述</label> <label>{{leaMsg $ "Description" }}</label>
<textarea type="text" rows="6" class="form-control" id="desc" name="desc">{{.note.Desc}}</textarea> <textarea type="text" rows="6" class="form-control" id="desc" name="desc">{{.note.Desc}}</textarea>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="content1">摘要</label> <label for="content1">{{leaMsg $ "Abstract"}}</label>
<div id="popularToolbar"></div> <div class="toolbar-content">
<textarea id="content1" name="content">{{.note.Abstract}}</textarea> <div id="popularToolbar" class="tool-bar"></div>
<div id="content1" class="content-ctn" name="content">{{raw .note.Abstract}}</div>
</div>
</div> </div>
</div> </div>
<footer class="panel-footer text-right bg-light lter"> <footer class="panel-footer text-right bg-light lter">
@ -47,10 +55,15 @@
<div class="panel-body"> <div class="panel-body">
<p> <p>
原文: {{leaMsg . "Raw Content"}}:
<hr />
</p> </p>
<div id="rawContent"> <div id="rawContent">
{{if .note.IsMarkdown}}
<pre>{{.note.Content|raw}}</pre>
{{else}}
{{.note.Content|raw}} {{.note.Content|raw}}
{{end}}
</div> </div>
</div> </div>
</section> </section>
@ -62,20 +75,18 @@
<script type="text/javascript" src="/tinymce/tinymce.js"></script> <script type="text/javascript" src="/tinymce/tinymce.js"></script>
<script> <script>
var UrlPrefix = "{{.siteUrl}}"; var UrlPrefix = "{{.siteUrl}}";
var LeaAce = null;
$(function() { $(function() {
tinymce.init({ tinymce.init({
inline: true,
selector : "#content1", selector : "#content1",
content_css : [ "/css/bootstrap.css", "/css/editor/editor.css" ], theme: 'leanote',
skin : "custom",
language : "{{.locale}}", language : "{{.locale}}",
height : 300,
width : "100%",
skin : "custom",
plugins : [ plugins : [
"advlist autolink link leanote_image lists charmap hr ", "advlist autolink link lists charmap hr ",
"searchreplace visualblocks visualchars tabfocus", "searchreplace visualblocks visualchars tabfocus",
"table contextmenu directionality textcolor paste fullpage textcolor"], "table contextmenu directionality textcolor fullpage textcolor"],
toolbar1 : "formatselect |fontselect fontsizeselect| forecolor backcolor | bold italic underline strikethrough | bullist numlist", toolbar1 : "formatselect |fontselect fontsizeselect| forecolor backcolor | bold italic underline strikethrough | bullist numlist |",
menubar : false, menubar : false,
statusbar : false, statusbar : false,
font_formats : "Arial=arial,helvetica,sans-serif;" font_formats : "Arial=arial,helvetica,sans-serif;"
@ -108,19 +119,39 @@ $(function() {
}); });
}); });
// 选择主图 var isMarkdown = {{$.note.IsMarkdown}};
var $imgs = $("#rawContent").find("img");
var imgLen = $imgs.length; var images = [];
var imgSeq = 0; if (isMarkdown) {
var $imgSrc = $("#imgSrc"); var content = $('#rawContent').html();
$(".btn-select-img").click(function() { var reg = /!\[.*?\]\((.*)\)/g;
if(imgLen == 0) { var ret = reg.exec(content);
return; while(ret) {
images.push(ret[1]);
ret = reg.exec(content);
} }
// console.log(images);
}
// 选择主图
$("#rawContent").find("img").each(function () {
if($(this).attr('src')) {
images.push($(this).attr('src'));
}
});;
var imgLen = images.length;
var imgSeq = 0;
$imgSrc = $('#imgSrc');
if (imgLen) {
$(".btn-select-img").click(function() {
imgSeq++; imgSeq++;
imgSeq = imgSeq % imgLen; imgSeq = imgSeq % imgLen;
$imgSrc.attr("src", $imgs.eq(imgSeq).attr("src")); $imgSrc.attr("src", images[imgSeq]);
}); });
}
else {
$(".btn-select-img").hide();
}
}); });
</script> </script>

View File

@ -11,8 +11,8 @@
<a class="btn btn-default" href="{{$.siteUrl}}/preview?themeId={{.themeId}}" target="_blank"><span class="fa fa-eye"></span> {{msg . "preview"}}</a> <a class="btn btn-default" href="{{$.siteUrl}}/preview?themeId={{.themeId}}" target="_blank"><span class="fa fa-eye"></span> {{msg . "preview"}}</a>
<small> <small>
(<a href="http://blog.leanote.com/post/545f1a5c380782565e000000" target="_blank">{{msg . "needHelp"}}</a>
<a target="_blank" href="https://github.com/leanote/leanote/wiki/leanote-blog-theme-api">Leanote Blog Theme Api</a>) <a target="_blank" href="https://github.com/leanote/leanote/wiki/leanote-blog-theme-api">{{msg . "needHelp"}} {{msg . "Leanote Blog Theme Api"}}</a>
</small> </small>
</h3> </h3>
</div> </div>
@ -49,7 +49,7 @@
<header class="panel-heading"> <header class="panel-heading">
{{msg . "tplStyleScript"}}: {{msg . "tplStyleScript"}}:
</header> </header>
<div class="panel-body" style="height:430px;overflow: auto;"> <div class="panel-body" style="<!--height:430px;-->overflow: auto;">
<div class="list-group bg-white file-list"> <div class="list-group bg-white file-list">
{{range .myTpls}} {{range .myTpls}}
@ -67,6 +67,7 @@
</footer> </footer>
</section> </section>
</div> </div>
<div class="col-sm-8"> <div class="col-sm-8">
<section class="panel panel-default"> <section class="panel panel-default">
<header class="panel-heading"> <header class="panel-heading">
@ -74,7 +75,7 @@
<span id="msg"></span> <span id="msg"></span>
</header> </header>
<div class="panel-body"> <div class="panel-body">
<div id="tplContent" class="form-control" style="width: 100%; height: 400px;"></div> <div id="tplContent" class="form-control" style="width: 100%; height: 500px;"></div>
</div> </div>
<footer class="panel-footer text-right bg-light lter"> <footer class="panel-footer text-right bg-light lter">
<button type="submit" id="saveBtn" class="btn btn-success">{{msg . "save"}}</button> <button type="submit" id="saveBtn" class="btn btn-success">{{msg . "save"}}</button>
@ -107,7 +108,7 @@
</div> </div>
{{template "member/footer.html" .}} {{template "member/footer.html" .}}
<script src="/public/libs/ace/ace.js" type="text/javascript"></script> <script src="/public/libs/ace/ace.js"></script>
<script> <script>
var editor = ace.edit("tplContent"); var editor = ace.edit("tplContent");
editor.setTheme("ace/theme/tomorrow"); editor.setTheme("ace/theme/tomorrow");
@ -118,6 +119,7 @@ var themeId = "{{.themeId}}";
var themeBasePath = "/{{$.theme.Path}}"; var themeBasePath = "/{{$.theme.Path}}";
var theme = { var theme = {
cache: {}, // filename => content cache: {}, // filename => content
inited: {}, // filename => bool, 是否已初始化, 防止未加载完就切换到其它
curTplO: $("#curTpl"), curTplO: $("#curTpl"),
tplContentO: $("#tplContent"), tplContentO: $("#tplContent"),
saveBtnO: $("#saveBtn"), saveBtnO: $("#saveBtn"),
@ -153,10 +155,10 @@ var theme = {
e.stopPropagation(); e.stopPropagation();
var $a = $(this).closest("a"); var $a = $(this).closest("a");
var file = $a.data('file'); var file = $a.data('file');
art.confirm("Are you sure to delete " + file + " ?", function() { art.confirm(getMsg("Are you sure to delete") + ' ' + file + " ?", function() {
ajaxPost("/member/blog/deleteTpl", {themeId: themeId, filename: file}, function(re) { ajaxPost("/member/blog/deleteTpl", {themeId: themeId, filename: file}, function(re) {
// if(reIsOk(re)) { // if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
$a.remove(); $a.remove();
if(self.curTpl == file) { if(self.curTpl == file) {
$(".file-list a").eq(0).trigger("click"); $(".file-list a").eq(0).trigger("click");
@ -173,18 +175,20 @@ var theme = {
self.newFileO.click(function() { self.newFileO.click(function() {
// 文件是否存在? // 文件是否存在?
art.prompt(getMsg("Filename"), function(file) {
art.prompt("Filename", function(file) {
if(!file) { if(!file) {
return; return;
} }
if($('[data-filename="' + file + '"]').length > 0) { if($('[data-filename="' + file + '"]').length > 0) {
art.alert('File exists'); art.alert(getMsg('File exists'));
return; return;
} }
var t = $('<a href="#" class="list-group-item " data-file="' + file + '"> <i class="fa fa-remove icon-muted remove-file" title="delete file" ></i> <span class="filename" data-filename="' + file + '">' + file + '</span><span class="badge"></span></a>'); var t = $('<a href="#" class="list-group-item " data-file="' + file + '"> <i class="fa fa-remove icon-muted remove-file" title="' + getMsg("Delete file") + '" ></i> <span class="filename" data-filename="' + file + '">' + file + '</span><span class="badge"></span></a>');
$(".file-list").append(t); $(".file-list").append(t);
self.cache[file] = ""; self.cache[file] = "";
self.inited[file] = true;
// trigger click, 选中之 // trigger click, 选中之
t.click(); t.click();
}); });
@ -221,6 +225,12 @@ var theme = {
} }
// 之前的内容是否有改动 // 之前的内容是否有改动
if(self.cache[filename] == content) { if(self.cache[filename] == content) {
// console.log('content is same');
return;
}
// 内容都没有加载进来
if(!self.inited[filename]) {
// console.log('not inited');
return; return;
} }
@ -247,7 +257,7 @@ var theme = {
renderContent: function(name, content) { renderContent: function(name, content) {
var self = this; var self = this;
self.curTplO.html(name); self.curTplO.html(name);
self.curTpl = name; // 这里才设置 // self.curTpl = name; // 这里才设置
var lang = "html"; var lang = "html";
if(name.indexOf(".js") > 0 || name.indexOf(".json") > 0) { if(name.indexOf(".js") > 0 || name.indexOf(".json") > 0) {
lang = "javascript"; lang = "javascript";
@ -264,7 +274,7 @@ var theme = {
renderTpl: function(name) { renderTpl: function(name) {
var self = this; var self = this;
var content = ""; var content = "";
self.curTpl = ""; // 这里设置为空 self.curTpl = name; // 这里设置为空
if(self.cache[name] != undefined) { if(self.cache[name] != undefined) {
content = self.cache[name]; content = self.cache[name];
self.renderContent(name, content); self.renderContent(name, content);
@ -273,7 +283,13 @@ var theme = {
ajaxGet("/member/blog/getTplContent", {themeId: themeId, filename: name}, function(re){ ajaxGet("/member/blog/getTplContent", {themeId: themeId, filename: name}, function(re){
if(reIsOk(re)) { if(reIsOk(re)) {
self.cache[name] = re.Item; self.cache[name] = re.Item;
self.inited[name] = true;
// 以防点击过快, 响应不按顺序
if (self.curTpl == name) {
self.renderContent(name, re.Item); self.renderContent(name, re.Item);
} else {
alert(getMsg('Error'));
}
} }
}); });
}, },
@ -287,10 +303,10 @@ var theme = {
self.imageListO.on("click", ".delete-image", function(re) { self.imageListO.on("click", ".delete-image", function(re) {
var file = $(this).data('image'); var file = $(this).data('image');
var t = this; var t = this;
art.confirm("Are you sure to delete it " + file + " ?", function() { art.confirm(getMsg("Are you sure to delete") + ' ' + file + " ?", function() {
ajaxPost("/member/blog/deleteThemeImage", {themeId: themeId, filename: file}, function(re) { ajaxPost("/member/blog/deleteThemeImage", {themeId: themeId, filename: file}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
$(t).closest("li").remove(); $(t).closest("li").remove();
} else { } else {
art.alert(re.Msg); art.alert(re.Msg);
@ -302,7 +318,7 @@ var theme = {
renderImages: function(images) { renderImages: function(images) {
var self = this; var self = this;
if(!images || images.length == 0) { if(!images || images.length == 0) {
self.imageListO.html("无图片"); self.imageListO.html(getMsg("No images"));
return; return;
} }
var html = ""; var html = "";
@ -346,7 +362,7 @@ function uploadFinish(ret) {
return; return;
} }
// 上传出错 // 上传出错
art.alert("error"); art.alert(getMsg("Error"));
} }
</script> </script>

View File

@ -23,9 +23,11 @@ $(function() {
if(fullPath == "/member/index") { if(fullPath == "/member/index") {
fullPath = "/member"; fullPath = "/member";
} else if (fullPath == '/member/blog/updateTheme') {
fullPath = '/member/blog/theme';
} }
$("#nav > li").removeClass("active"); $("#nav > li").removeClass("active");
// alert(fullPath);
// 自己 // 自己
var $thisLi = $('#nav a[href="' + fullPath + '"]').parent(); var $thisLi = $('#nav a[href="' + fullPath + '"]').parent();
$thisLi.addClass("active"); $thisLi.addClass("active");

View File

@ -113,7 +113,7 @@ var group = {
addGroupEvent: function() { addGroupEvent: function() {
var self = this; var self = this;
$('.btn-add-group').click(function() { $('.btn-add-group').click(function() {
ajaxPost("/member/group/addGroup", {title: "Group Title"}, function(re) { ajaxPost("/member/group/addGroup", {title: getMsg("Group Title")}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
var group = re.Item; var group = re.Item;
self.groupsO.prepend(self.tGroupO.render(group)) self.groupsO.prepend(self.tGroupO.render(group))
@ -136,7 +136,7 @@ var group = {
var groupId = $(this).closest(".each-group").data("id"); var groupId = $(this).closest(".each-group").data("id");
ajaxPost("/member/group/updateGroupTitle", {groupId: groupId, title: val}, function(re) { ajaxPost("/member/group/updateGroupTitle", {groupId: groupId, title: val}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success") art.tips(getMsg("Success"));
t.data('ever', val) t.data('ever', val)
} }
}) })
@ -147,11 +147,11 @@ var group = {
var self = this; var self = this;
self.groupsO.on("click", ".delete-group", function() { self.groupsO.on("click", ".delete-group", function() {
var t = $(this); var t = $(this);
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure ?"), function() {
var groupId = t.closest(".each-group").data("id"); var groupId = t.closest(".each-group").data("id");
ajaxPost("/member/group/deleteGroup", {groupId: groupId}, function(re) { ajaxPost("/member/group/deleteGroup", {groupId: groupId}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
t.closest(".each-group").remove(); t.closest(".each-group").remove();
} else { } else {
art.alert(re.Msg); art.alert(re.Msg);
@ -182,7 +182,7 @@ var group = {
var p = t.closest("li"); var p = t.closest("li");
ajaxPost("/member/group/addUser", {groupId: groupId, email: email}, function(re) { ajaxPost("/member/group/addUser", {groupId: groupId, email: email}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
var html = self.tUserO.render(re.Item) var html = self.tUserO.render(re.Item)
p.before(html); p.before(html);
t.val(""); t.val("");
@ -198,12 +198,12 @@ var group = {
var self = this; var self = this;
self.groupsO.on("click", ".delete-user", function() { self.groupsO.on("click", ".delete-user", function() {
var t = $(this); var t = $(this);
art.confirm("Are you sure ?", function() { art.confirm(getMsg("Are you sure ?"), function() {
var groupId = t.closest(".each-group").data("id"); var groupId = t.closest(".each-group").data("id");
var userId = t.closest("li").data("id"); var userId = t.closest("li").data("id");
ajaxPost("/member/group/deleteUser", {groupId: groupId, userId: userId}, function(re) { ajaxPost("/member/group/deleteUser", {groupId: groupId, userId: userId}, function(re) {
if(reIsOk(re)) { if(reIsOk(re)) {
art.tips("Success"); art.tips(getMsg("Success"));
t.closest("li").remove(); t.closest("li").remove();
} else { } else {
art.alert(re.Msg); art.alert(re.Msg);

View File

@ -1,4 +1,4 @@
<nav class="nav-primary hidden-xs"> <nav class="nav-primary">
<ul class="nav" id="nav"> <ul class="nav" id="nav">
<li class="active"> <li class="active">
@ -34,7 +34,7 @@
<li> <li>
<a href="/member/user/avatar"> <a href="/member/user/avatar">
<span> <span>
{{msg . "avatar"}} {{msg . "Avatar"}}
</span> </span>
</a> </a>
</li> </li>
@ -42,7 +42,7 @@
<li> <li>
<a href="/member/user/username"> <a href="/member/user/username">
<span> <span>
{{msg . "username"}} {{msg . "Username"}}
</span> </span>
</a> </a>
</li> </li>
@ -50,14 +50,14 @@
<li> <li>
<a href="/member/user/email"> <a href="/member/user/email">
<span> <span>
{{msg . "email"}} {{msg . "Email"}}
</span> </span>
</a> </a>
</li> </li>
<li> <li>
<a href="/member/user/password"> <a href="/member/user/password">
<span> <span>
{{msg . "password"}} {{msg . "Password"}}
</span> </span>
</a> </a>
</li> </li>
@ -85,7 +85,7 @@
<li> <li>
<a href="/member/blog/index"> <a href="/member/blog/index">
<span> <span>
{{msg . "postList"}} {{msg . "Posts"}}
</span> </span>
</a> </a>
</li> </li>
@ -100,22 +100,21 @@
<li> <li>
<a href="/member/blog/comment"> <a href="/member/blog/comment">
<span> <span>
{{msg . "comment"}} {{msg . "Comment"}}
</span> </span>
</a> </a>
</li> </li>
<li> <li>
<a href="/member/blog/cate"> <a href="/member/blog/cate">
<span> <span>
{{msg . "cate"}} {{msg . "Category"}}
</span> </span>
</a> </a>
</li> </li>
<li> <li>
<a href="/member/blog/single"> <a href="/member/blog/single">
<span> <span>
{{msg . "single"}} {{msg . "Single"}}
</span> </span>
</a> </a>
</li> </li>
@ -129,7 +128,7 @@
<li> <li>
<a href="/member/blog/theme"> <a href="/member/blog/theme">
<span> <span>
{{msg . "theme"}} {{msg . "Theme"}}
</span> </span>
</a> </a>
</li> </li>

View File

@ -50,7 +50,7 @@
<section> <section>
<section class="hbox stretch"> <section class="hbox stretch">
<!-- .aside --> <!-- .aside -->
<aside class="bg-light lter b-r aside-md hidden-print hidden-xs" id="nav"> <aside class="bg-light lter b-r aside-md hidden-print" id="nav">
<section class="vbox"> <section class="vbox">
<!-- <!--
<header class="header bg-primary lter text-center clearfix"> <header class="header bg-primary lter text-center clearfix">

View File

@ -1,6 +1,6 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "avatar"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Avatar"}}</h3></div>
<div class="row"> <div class="row">

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "email"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Email"}}</h3></div>
<div class="row"> <div class="row">

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "password"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Password"}}</h3></div>
<div class="row"> <div class="row">
<div class="col-sm-8"> <div class="col-sm-8">
<form id="formData"> <form id="formData">

View File

@ -1,5 +1,5 @@
{{template "member/top.html" .}} {{template "member/top.html" .}}
<div class="m-b-md"> <h3 class="m-b-none">{{msg . "username"}}</h3></div> <div class="m-b-md"> <h3 class="m-b-none">{{msg . "Username"}}</h3></div>
<div class="row"> <div class="row">
@ -9,7 +9,7 @@
<div class="panel-body"> <div class="panel-body">
<div class="alert alert-danger" id="usernameMsg" style="display: none"></div> <div class="alert alert-danger" id="usernameMsg" style="display: none"></div>
<div class="form-group"> <div class="form-group">
<label>{{msg . "username"}}</label> <!-- <label>{{msg . "Username"}}</label> -->
<input type="text" class="form-control" id="username" <input type="text" class="form-control" id="username"
value="{{.userInfo.Username}}" value="{{.userInfo.Username}}"
data-rules='[ data-rules='[