member i18n
This commit is contained in:
@ -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 == "" {
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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中获取
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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()
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
@ -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())
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
@ -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, ¬eContent)
|
db.Get(db.NoteContents, noteId, ¬eContent)
|
||||||
|
@ -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
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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() {
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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>
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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) {});
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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");
|
||||||
|
@ -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);
|
||||||
|
@ -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>
|
||||||
|
@ -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">
|
||||||
|
@ -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">
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
@ -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='[
|
||||||
|
Reference in New Issue
Block a user