84 lines
3.6 KiB
Go
84 lines
3.6 KiB
Go
package enlightjs
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/fthvgb1/wp-go/app/phphelper"
|
|
"github.com/fthvgb1/wp-go/app/pkg/constraints"
|
|
"github.com/fthvgb1/wp-go/app/pkg/logs"
|
|
"github.com/fthvgb1/wp-go/app/theme/wp"
|
|
"github.com/fthvgb1/wp-go/app/wpconfig"
|
|
"github.com/fthvgb1/wp-go/helper/maps"
|
|
"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(constraints.AllScene, "enlighterjs-css", 20, `<link rel='stylesheet' id='enlighterjs-css' href='/wp-content/plugins/enlighter/cache/enlighterjs.min.css' media='all' />`)
|
|
|
|
h.PushCacheGroupFooterScript(constraints.AllScene, "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 = `<script src='/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=0A0B0C' id='enlighterjs-js'></script>
|
|
<script id='enlighterjs-js-after'>
|
|
!function(e,n){if("undefined"!=typeof EnlighterJS){var o=%s;(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console);
|
|
</script>`
|