diff --git a/internal/plugins/wphandle/enlightjs/enlighterjs.go b/internal/plugins/wphandle/enlightjs/enlighterjs.go index 14584b4..bd911be 100644 --- a/internal/plugins/wphandle/enlightjs/enlighterjs.go +++ b/internal/plugins/wphandle/enlightjs/enlighterjs.go @@ -1,16 +1,82 @@ package enlightjs import ( - str "github.com/fthvgb1/wp-go/helper/strings" + "fmt" + "github.com/fthvgb1/wp-go/helper/maps" + "github.com/fthvgb1/wp-go/internal/phphelper" + "github.com/fthvgb1/wp-go/internal/pkg/logs" "github.com/fthvgb1/wp-go/internal/theme/wp" + "github.com/fthvgb1/wp-go/internal/wpconfig" + "github.com/goccy/go-json" ) +type Config struct { + Selectors Selectors `json:"selectors"` + Options Options `json:"options"` +} + +type Options struct { + Indent int64 `json:"indent,omitempty"` + AmpersandCleanup bool `json:"ampersandCleanup,omitempty"` + Linehover bool `json:"linehover,omitempty"` + RawcodeDbclick bool `json:"rawcodeDbclick,omitempty"` + TextOverflow string `json:"textOverflow,omitempty"` + Linenumbers int64 `json:"linenumbers,omitempty"` + Theme string `json:"theme,omitempty"` + Language string `json:"language,omitempty"` + RetainCssClasses bool `json:"retainCssClasses,omitempty"` + Collapse bool `json:"collapse,omitempty"` + ToolbarOuter string `json:"toolbarOuter,omitempty"` + ToolbarTop string `json:"toolbarTop,omitempty"` + ToolbarBottom string `json:"toolbarBottom,omitempty"` +} + +type Selectors struct { + Block string `json:"block,omitempty"` + Inline string `json:"inline,omitempty"` +} + func EnlighterJS(h *wp.Handle) { h.PushGroupHeadScript(20, ``) - h.PushGroupFooterScript(10, str.Join(``, "\n", enlighterjs)) + h.PushCacheGroupFooterScript("enlighterJs", 10, func(h *wp.Handle) string { + op := wpconfig.GetOption("enlighter-options") + opp, err := phphelper.UnPHPSerializeToStrAnyMap(op) + if err != nil { + logs.Error(err, "获取enlighter-option失败", op) + return "" + } + v := Config{ + Selectors: Selectors{ + Block: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-selector-block", "pre.EnlighterJSRAW"), + Inline: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-selector-inline", "code.EnlighterJSRAW"), + }, + Options: Options{ + Indent: maps.GetStrAnyValWithDefaults[int64](opp, "enlighterjs-indent", 4), + AmpersandCleanup: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-ampersandcleanup", true), + Linehover: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-linehover", true), + RawcodeDbclick: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-rawcodedbclick", true), + TextOverflow: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-textoverflow", "break"), + Linenumbers: maps.GetStrAnyValWithDefaults[int64](opp, "enlighterjs-linenumbers", 1), + Theme: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-theme", "enlighter"), + Language: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-language", "generic"), + RetainCssClasses: maps.GetStrAnyValWithDefaults(opp, "enlighterjs-retaincss", false), + Collapse: false, + ToolbarOuter: "", + ToolbarTop: "{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}", + ToolbarBottom: "", + }, + } + conf, err := json.Marshal(v) + if err != nil { + logs.Error(err, "json化enlighterjs配置失败") + return "" + } + return fmt.Sprintf(enlighterjs, conf) + }) } -var enlighterjs = ` +`