Просмотр исходного кода

:sparkles: 增加公共代码 js/css 片段 https://github.com/siyuan-note/siyuan/issues/6143

Liang Ding 2 лет назад
Родитель
Сommit
54b29cb92f
4 измененных файлов с 133 добавлено и 3 удалено
  1. 2 0
      kernel/api/router.go
  2. 55 0
      kernel/api/snippet.go
  3. 25 0
      kernel/conf/snippet.go
  4. 51 3
      kernel/model/conf.go

+ 2 - 0
kernel/api/router.go

@@ -278,4 +278,6 @@ func ServeAPI(ginServer *gin.Engine) {
 
 
 	ginServer.Handle("POST", "/api/notification/pushMsg", model.CheckAuth, pushMsg)
 	ginServer.Handle("POST", "/api/notification/pushMsg", model.CheckAuth, pushMsg)
 	ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg)
 	ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg)
+
+	ginServer.Handle("POST", "/api/snippet/getSnippet", model.CheckAuth, getSnippet)
 }
 }

+ 55 - 0
kernel/api/snippet.go

@@ -0,0 +1,55 @@
+// SiYuan - Build Your Eternal Digital Garden
+// Copyright (c) 2020-present, b3log.org
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+package api
+
+import (
+	"net/http"
+
+	"github.com/88250/gulu"
+	"github.com/gin-gonic/gin"
+	"github.com/siyuan-note/siyuan/kernel/conf"
+	"github.com/siyuan-note/siyuan/kernel/model"
+	"github.com/siyuan-note/siyuan/kernel/util"
+)
+
+func getSnippet(c *gin.Context) {
+	ret := gulu.Ret.NewResult()
+	defer c.JSON(http.StatusOK, ret)
+
+	arg, ok := util.JsonArg(c, ret)
+	if !ok {
+		return
+	}
+
+	typ := arg["type"].(string)
+	enabledArg := int(arg["enabled"].(float64)) // 0:禁用,1:启用,2:全部
+	enabled := true
+	if 0 == enabledArg {
+		enabled = false
+	}
+
+	var snippets []*conf.Snippet
+	for _, s := range model.Snippets {
+		if ("all" == typ || s.Type == typ) && (2 == enabledArg || s.Enabled == enabled) {
+			snippets = append(snippets, s)
+		}
+	}
+
+	ret.Data = map[string]interface{}{
+		"snippets": snippets,
+	}
+}

+ 25 - 0
kernel/conf/snippet.go

@@ -0,0 +1,25 @@
+// SiYuan - Build Your Eternal Digital Garden
+// Copyright (c) 2020-present, b3log.org
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+package conf
+
+type Snippet struct {
+	Name    string `json:"name"`
+	Memo    string `json:"memo"`
+	Type    string `json:"type"` // js/css
+	Enabled bool   `json:"enabled"`
+	Content string `json:"content"`
+}

+ 51 - 3
kernel/model/conf.go

@@ -58,11 +58,11 @@ type AppConf struct {
 	UserData       string           `json:"userData"`       // 社区用户信息,对 User 加密存储
 	UserData       string           `json:"userData"`       // 社区用户信息,对 User 加密存储
 	User           *conf.User       `json:"-"`              // 社区用户内存结构,不持久化
 	User           *conf.User       `json:"-"`              // 社区用户内存结构,不持久化
 	Account        *conf.Account    `json:"account"`        // 帐号配置
 	Account        *conf.Account    `json:"account"`        // 帐号配置
-	ReadOnly       bool             `json:"readonly"`       // 是否是只读
+	ReadOnly       bool             `json:"readonly"`       // 是否是只读模式运行
 	LocalIPs       []string         `json:"localIPs"`       // 本地 IP 列表
 	LocalIPs       []string         `json:"localIPs"`       // 本地 IP 列表
 	AccessAuthCode string           `json:"accessAuthCode"` // 访问授权码
 	AccessAuthCode string           `json:"accessAuthCode"` // 访问授权码
-	System         *conf.System     `json:"system"`         // 系统
-	Keymap         *conf.Keymap     `json:"keymap"`         // 快捷键
+	System         *conf.System     `json:"system"`         // 系统配置
+	Keymap         *conf.Keymap     `json:"keymap"`         // 快捷键配置
 	Sync           *conf.Sync       `json:"sync"`           // 同步配置
 	Sync           *conf.Sync       `json:"sync"`           // 同步配置
 	Search         *conf.Search     `json:"search"`         // 搜索配置
 	Search         *conf.Search     `json:"search"`         // 搜索配置
 	Stat           *conf.Stat       `json:"stat"`           // 统计
 	Stat           *conf.Stat       `json:"stat"`           // 统计
@@ -285,6 +285,7 @@ func InitConf() {
 	}
 	}
 
 
 	util.SetNetworkProxy(Conf.System.NetworkProxy.String())
 	util.SetNetworkProxy(Conf.System.NetworkProxy.String())
+	loadSnippets()
 }
 }
 
 
 var langs = map[string]map[int]string{}
 var langs = map[string]map[int]string{}
@@ -659,3 +660,50 @@ func clearWorkspaceTemp() {
 
 
 	logging.LogInfof("cleared workspace temp")
 	logging.LogInfof("cleared workspace temp")
 }
 }
+
+var Snippets []*conf.Snippet // js/css 代码片段配置
+
+func loadSnippets() {
+	Snippets = []*conf.Snippet{}
+
+	jsonPath := filepath.Join(util.DataDir, "snippets/js.json")
+	var data []byte
+	var err error
+
+	if gulu.File.IsExist(jsonPath) {
+		data, err = filelock.ReadFile(jsonPath)
+		if nil != err {
+			logging.LogErrorf("load js snippets failed: %s", err)
+		} else {
+			var jsSnippets []*conf.Snippet
+			if err = gulu.JSON.UnmarshalJSON(data, &jsSnippets); nil != err {
+				logging.LogErrorf("unmarshal js snippets failed: %s", err)
+			} else {
+				if count := len(jsSnippets); 0 < count {
+					Snippets = append(Snippets, jsSnippets...)
+					logging.LogInfof("loaded js snippets [%d]", count)
+				}
+			}
+		}
+	}
+
+	jsonPath = filepath.Join(util.DataDir, "snippets/css.json")
+	if gulu.File.IsExist(jsonPath) {
+		data, err = filelock.ReadFile(jsonPath)
+
+		if nil != err {
+			logging.LogErrorf("load css snippets failed: %s", err)
+		} else {
+			var cssSnippets []*conf.Snippet
+			if err = gulu.JSON.UnmarshalJSON(data, &cssSnippets); nil != err {
+				logging.LogErrorf("unmarshal css snippets failed: %s", err)
+			} else {
+				if count := len(cssSnippets); 0 < count {
+					Snippets = append(Snippets, cssSnippets...)
+					logging.LogInfof("loaded css snippets [%d]", count)
+				}
+			}
+		}
+	}
+	return
+}