diff --git a/app/cmd/reload/reload.go b/app/cmd/reload/reload.go
index 2943072..2d721aa 100644
--- a/app/cmd/reload/reload.go
+++ b/app/cmd/reload/reload.go
@@ -169,6 +169,19 @@ func VarsBy[T any](fn func() T) *safety.Var[T] {
})
return ss
}
+func MapBy[K comparable, T any](fn func(*safety.Map[K, T])) *safety.Map[K, T] {
+ m := safety.NewMap[K, T]()
+ if fn != nil {
+ fn(m)
+ }
+ calls = append(calls, func() {
+ m.Flush()
+ if fn != nil {
+ fn(m)
+ }
+ })
+ return m
+}
func Push(fn ...func()) {
calls = append(calls, fn...)
diff --git a/app/plugins/comment.go b/app/plugins/comment.go
index 3e1ad8b..f6fa69e 100644
--- a/app/plugins/comment.go
+++ b/app/plugins/comment.go
@@ -6,7 +6,6 @@ import (
"github.com/fthvgb1/wp-go/helper/slice"
str "github.com/fthvgb1/wp-go/helper/strings"
"github.com/gin-gonic/gin"
- "net/url"
"strconv"
"strings"
)
@@ -32,13 +31,12 @@ type CommentHtml interface {
func FormatComments(c *gin.Context, i CommentHtml, comments []models.Comments, maxDepth int) string {
tree := treeComments(comments)
- u := c.Request.Header.Get("Referer")
+
var isTls bool
- if u != "" {
- uu, _ := url.Parse(u)
- if uu.Scheme == "https" {
- isTls = true
- }
+ if c.Request.TLS != nil {
+ isTls = true
+ } else {
+ isTls = "https" == strings.ToLower(c.Request.Header.Get("X-Forwarded-Proto"))
}
h := CommentHandler{
Context: c,
diff --git a/app/theme/twentyseventeen/script.go b/app/theme/twentyseventeen/script.go
index 576f9a1..b51b9d9 100644
--- a/app/theme/twentyseventeen/script.go
+++ b/app/theme/twentyseventeen/script.go
@@ -8,6 +8,21 @@ import (
)
func pushScripts(h *wp.Handle) {
+ wp.AddStaticLocalize("twentyseventeen-skip-link-focus-fix", "twentyseventeenScreenReaderText", map[string]any{
+ "quote": ``,
+ })
+ wp.AddStaticLocalize("wp-custom-header", "_wpCustomHeaderSettings", map[string]any{
+ "mimeType": `video/mp4`,
+ "posterUrl": `/wp-content/uploads/2023/01/cropped-wallhaven-9dm7dd-1.png`,
+ "videoUrl": `/wp-content/uploads/2023/06/BloodMoon_GettyRM_495644264_1080_HD_ZH-CN.mp4`,
+ "width": `2000`,
+ "height": `1199`,
+ "minWidth": `900`,
+ "minHeight": `500`,
+ "l10n": map[string]any{
+ "pause": `暂停背景视频`, "play": `播放背景视频`, "pauseSpeak": `视频已暂停。`, "playSpeak": `视频正在播放。`,
+ },
+ })
h.PushCacheGroupHeadScript(constraints.AllScene, "{theme}.head", 30, func(h *wp.Handle) string {
head := headScript
if "dark" == wpconfig.GetThemeModsVal(ThemeName, "colorscheme", "light") {
diff --git a/app/theme/wp/customheader.go b/app/theme/wp/customheader.go
index abe362c..a650893 100644
--- a/app/theme/wp/customheader.go
+++ b/app/theme/wp/customheader.go
@@ -134,14 +134,9 @@ func CustomVideo(h *Handle, scene ...string) (ok bool) {
}
scripts = slice.Map(scripts, func(t string) string {
return fmt.Sprintf(`
-`, t, str.Replaces(t, [][]string{
- {"/wp-includes/js/dist/vendor/"},
- {"/wp-includes/js/dist/"},
- {"/wp-includes/js/"},
- {".min.js"},
- {".js"},
- {"wp-", ""},
- }))
+`, t, str.Replaces(t, [][]string{{
+ "/wp-includes/js/dist/vendor/", "/wp-includes/js/dist/", "/wp-includes/js/", ".min.js", ".js", "wp-", "",
+ }}))
})
var tr = `\n", handle, position, scp)
+ }
+ return scp
+}
+
+func AddScript(handle string, src string, deps []string, ver string, args any) {
+ script := NewScript(handle, src, deps, ver, args)
+ scripts.Store(handle, script)
+}
+
+type Script struct {
+ Handle string `json:"handle,omitempty"`
+ Src string `json:"src,omitempty"`
+ Deps []string `json:"deps,omitempty"`
+ Ver string `json:"ver,omitempty"`
+ Args any `json:"args,omitempty"`
+ Extra map[string][]string `json:"extra,omitempty"`
+ Textdomain string `json:"textdomain,omitempty"`
+ TranslationsPath string `json:"translations_path,omitempty"`
+}
+
+func NewScript(handle string, src string, deps []string, ver string, args any) *Script {
+ return &Script{Handle: handle, Src: src, Deps: deps, Ver: ver, Args: args}
+}
+
+func AddDynamicData(h *Handle, handle, key, data string) {
+ da := helper.GetContextVal(h.C, "__scriptDynamicData__", map[string]map[string][]string{})
+ m, ok := da[handle]
+ if !ok {
+ m = map[string][]string{}
+ }
+ m[key] = append(m[key], data)
+ da[handle] = m
+}
+
+func GetDynamicData(h *Handle, handle, key string) string {
+ da := helper.GetContextVal(h.C, "__scriptDynamicData__", map[string]map[string][]string{})
+ if len(da) < 1 {
+ return ""
+ }
+ m, ok := da[handle]
+ if !ok {
+ return ""
+ }
+ mm, ok := m[key]
+ if !ok {
+ return ""
+ }
+ return strings.Join(mm, "\n")
+}
+
+func SetTranslation(handle, domain, path string) {
+ hh, ok := scripts.Load(handle)
+ if !ok {
+ return
+ }
+ if !slice.IsContained(hh.Deps, handle) {
+ hh.Deps = append(hh.Deps, "wp-i18n")
+ }
+ if domain == "" {
+ domain = "default"
+ }
+ hh.Textdomain = domain
+ hh.TranslationsPath = path
+}
+
+var __elements = map[string]string{
+ "link": "a:where(:not(.wp-element-button))", // The `where` is needed to lower the specificity.
+ "heading": "h1, h2, h3, h4, h5, h6",
+ "h1": "h1",
+ "h2": "h2",
+ "h3": "h3",
+ "h4": "h4",
+ "h5": "h5",
+ "h6": "h6",
+ // We have the .wp-block-button__link class so that this will target older buttons that have been serialized.
+ "button": ".wp-element-button, .wp-block-button__link",
+ // The block classes are necessary to target older content that won't use the new class names.
+ "caption": ".wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption",
+ "cite": "cite",
+}
+
+const RootBlockSelector = "body"
+
+type node struct {
+ Path []string
+ Selector string
+}
+
+var __validElementPseudoSelectors = map[string][]string{
+ "link": {":link", ":any-link", ":visited", ":hover", ":focus", ":active"},
+ "button": {":link", ":any-link", ":visited", ":hover", ":focus", ":active"},
+}
+
+var blockSupportFeatureLevelSelectors = map[string]string{
+ "__experimentalBorder": "border",
+ "color": "color",
+ "spacing": "spacing",
+ "typography": "typography",
+}
+
+func appendToSelector(selector, toAppend, position string) string {
+ s := strings.Split(selector, ",")
+ if position == "" {
+ position = "right"
+ }
+ return strings.Join(slice.Map(s, func(t string) string {
+ var l, r string
+ if position == "right" {
+ l = t
+ r = toAppend
+ } else {
+ l = toAppend
+ r = t
+ }
+ return str.Join(l, r)
+ }), ",")
+}
+
+func __removeComment(m map[string]any) {
+ delete(m, "//")
+ for _, v := range m {
+ mm, ok := v.(map[string]any)
+ if ok {
+ __removeComment(mm)
+ }
+ }
+}
+
+func scopeSelector(scope, selector string) string {
+ scopes := strings.Split(scope, ",")
+ selectors := strings.Split(selector, ",")
+ var a []string
+ for _, outer := range scopes {
+ outer = strings.Trim(outer, " \t\n\r\x00\x0B")
+ for _, inner := range selectors {
+ inner = strings.Trim(inner, " \t\n\r\x00\x0B")
+ if outer != "" && inner != "" {
+ a = append(a, str.Join(outer, " ", inner))
+ } else if outer == "" {
+ a = append(a, inner)
+ } else if inner == "" {
+ a = append(a, outer)
+ }
+ }
+ }
+ return strings.Join(a, ", ")
+}
+
+func getBlockNodes(m map[string]any) []map[string]any {
+ selectors, _ := maps.GetStrAnyVal[map[string]any](m, "blocks_metadata")
+ mm, _ := maps.GetStrAnyVal[map[string]any](m, "theme_json.styles.blocks")
+ var nodes []map[string]any
+ for k, v := range mm {
+ vv, ok := v.(map[string]any)
+ if !ok {
+ continue
+ }
+ s, _ := maps.GetStrAnyVal[string](selectors, str.Join(k, ".supports.selector"))
+ d, _ := maps.GetStrAnyVal[string](selectors, str.Join(k, ".duotone"))
+ f, _ := maps.GetStrAnyVal[string](selectors, str.Join(k, ".features"))
+ n, ok := maps.GetStrAnyVal[map[string]any](vv, "variations")
+ var variationSelectors []node
+ if ok {
+ for variation := range n {
+ ss, _ := maps.GetStrAnyVal[string](selectors, str.Join(k, ".styleVariations.", variation))
+ variationSelectors = append(variationSelectors, node{
+ Path: []string{"styles", "blocks", k, "variations", variation},
+ Selector: ss,
+ })
+ }
+ }
+ nodes = append(nodes, map[string]any{
+ "name": k,
+ "path": []string{"styles", "blocks", k},
+ "selector": s,
+ "duotone": d,
+ "features": f,
+ "variations": variationSelectors,
+ })
+ e, ok := maps.GetStrAnyVal[map[string]any](vv, "elements")
+ if !ok {
+ continue
+ }
+ for element, vvv := range e {
+ _, ok = vvv.(map[string]any)
+ if !ok {
+ continue
+ }
+ key := str.Join(k, ".elements.", element)
+ selector, _ := maps.GetStrAnyVal[string](selectors, key)
+ nodes = append(nodes, map[string]any{
+ "path": []string{"styles", "blocks", k, "elements", element},
+ "selector": selector,
+ })
+ if val, ok := __validElementPseudoSelectors[element]; ok {
+ for _, ss := range val {
+ _, ok = maps.GetStrAnyVal[string](vv, str.Join("elements.", ss))
+ if !ok {
+ continue
+ }
+ nodes = append(nodes, map[string]any{
+ "path": []string{"styles", "blocks", k, "elements", element},
+ "selector": appendToSelector(selector, ss, ""),
+ })
+ }
+ }
+ }
+ }
+ return nodes
+}
+
+func getSettingNodes(m, setting map[string]any) []node {
+ var nodes []node
+ nodes = append(nodes, node{
+ Path: []string{"settings"},
+ Selector: RootBlockSelector,
+ })
+ selectors, _ := maps.GetStrAnyVal[map[string]any](m, "blocks_metadata")
+ s, ok := maps.GetStrAnyVal[map[string]any](setting, "settings.blocks")
+ if !ok {
+ return nil
+ }
+ for name := range s {
+ selector, ok := maps.GetStrAnyVal[string](selectors, str.Join(name, ".supports.selector"))
+ if ok {
+ nodes = append(nodes, node{
+ Path: []string{"settings", "blocks", name},
+ Selector: selector,
+ })
+ }
+ }
+ return nodes
+}
+
+type ThemeJson struct {
+ blocksMetaData map[string]any
+ themeJson map[string]any
+}
+
+var presetsMetadata = []presetMeta{
+ {
+ path: []string{"color", "palette"},
+ preventOverride: []string{"color", "defaultPalette"},
+ useDefaultNames: false,
+ valueKey: "color",
+ valueFunc: nil,
+ cssVars: "--wp--preset--color--$slug",
+ classes: map[string]string{
+ ".has-$slug-color": "color",
+ ".has-$slug-background-color": "background-color",
+ ".has-$slug-border-color": "border-color",
+ },
+ properties: []string{"color", "background-color", "border-color"},
+ }, {
+ path: []string{"color", "gradients"},
+ preventOverride: []string{"color", "defaultGradients"},
+ useDefaultNames: false,
+ valueKey: "gradient",
+ valueFunc: nil,
+ cssVars: "--wp--preset--gradient--$slug",
+ classes: map[string]string{
+ ".has-$slug-gradient-background": "background",
+ },
+ properties: []string{"background"},
+ }, {
+ path: []string{"color", "duotone"},
+ preventOverride: []string{"color", "defaultDuotone"},
+ useDefaultNames: false,
+ valueKey: "",
+ valueFunc: wpGetDuotoneFilterProperty,
+ cssVars: "--wp--preset--duotone--$slug",
+ classes: map[string]string{},
+ properties: []string{"filter"},
+ }, {
+ path: []string{"typography", "fontSizes"},
+ preventOverride: []string{},
+ useDefaultNames: true,
+ valueKey: "",
+ valueFunc: wpGetTypographyFontSizeValue,
+ cssVars: "--wp--preset--font-size--$slug",
+ classes: map[string]string{
+ ".has-$slug-font-size": "font-size",
+ },
+ properties: []string{"font-size"},
+ }, {
+ path: []string{"typography", "fontFamilies"},
+ preventOverride: []string{},
+ useDefaultNames: false,
+ valueKey: "fontFamily",
+ valueFunc: nil,
+ cssVars: "--wp--preset--font-family--$slug",
+ classes: map[string]string{
+ ".has-$slug-font-family": "font-family",
+ },
+ properties: []string{"font-family"},
+ }, {
+ path: []string{"spacing", "spacingSizes"},
+ preventOverride: []string{},
+ useDefaultNames: true,
+ valueKey: "size",
+ valueFunc: nil,
+ cssVars: "--wp--preset--spacing--$slug",
+ classes: map[string]string{},
+ properties: []string{"padding", "margin"},
+ }, {
+ path: []string{"shadow", "presets"},
+ preventOverride: []string{"shadow", "defaultPresets"},
+ useDefaultNames: false,
+ valueKey: "shadow",
+ valueFunc: nil,
+ cssVars: "--wp--preset--shadow--$slug",
+ classes: map[string]string{},
+ properties: []string{"box-shadow"},
+ },
+}
+
+type presetMeta struct {
+ path []string
+ preventOverride []string
+ useDefaultNames bool
+ valueFunc func(map[string]string, map[string]any) string
+ valueKey string
+ cssVars string
+ classes map[string]string
+ properties []string
+}
+
+type declaration struct {
+ name string
+ value string
+}
+
+func wpGetDuotoneFilterProperty(preset map[string]string, _ map[string]any) string {
+ v, ok := preset["colors"]
+ if ok && "unset" == v {
+ return "none"
+ }
+ id, ok := preset["slug"]
+ if ok {
+ id = str.Join("wp-duotone-", id)
+ }
+ return str.Join(`url('#`, id, "')")
+}
+
+func wpGetTypographyFontSizeValue(preset map[string]string, m map[string]any) string {
+ size, ok := preset["size"]
+ if !ok {
+ return ""
+ }
+ if size == "" || size == "0" {
+ return size
+ }
+ origin := "custom"
+ if !wpconfig.HasThemeJson() {
+ origin = "theme"
+ }
+ typographySettings, ok := maps.GetStrAnyVal[map[string]any](m, "typography")
+ if !ok {
+ return size
+ }
+ fluidSettings, ok := maps.GetStrAnyVal[map[string]any](typographySettings, "fluid")
+
+ //todo so complex dying 👻
+ _ = fluidSettings
+ _ = origin
+ return size
+}
+
+var __themeJson *safety.Var[ThemeJson]
+
+func GetThemeJson() ThemeJson {
+ return __themeJson.Load()
+}
+
+func wpGetTypographyValueAndUnit(value string, options map[string]any) {
+ /*options := maps.Merge(options, map[string]any{
+ "coerce_to": "",
+ "root_size_value": 16,
+ "acceptable_units": []string{"rem", "px", "em"},
+ })
+ u, _ := maps.GetStrAnyVal[[]string](options, "acceptable_units")
+ acceptableUnitsGroup := strings.Join(u, "|")*/
+
+}
+
+func computeThemeVars(m map[string]any) []declaration {
+ //todo ......
+ return nil
+}
+
+func computePresetVars(m map[string]any, origins []string) []declaration {
+ var declarations []declaration
+ for _, metadatum := range presetsMetadata {
+ slug := getSettingsValuesBySlug(m, metadatum, origins)
+ for k, v := range slug {
+ declarations = append(declarations, declaration{
+ name: strings.Replace(metadatum.cssVars, "$slug", k, -1),
+ value: v,
+ })
+ }
+ }
+ return declarations
+}
+
+func getSettingsValuesBySlug(m map[string]any, meta presetMeta, origins []string) map[string]string {
+ perOrigin := maps.GetStrAnyValWithDefaults[map[string]any](m, strings.Join(meta.path, "."), nil)
+ r := map[string]string{}
+ for _, origin := range origins {
+ if vv, ok := maps.GetStrAnyVal[[]map[string]string](perOrigin, origin); ok {
+ for _, preset := range vv {
+ slug := preset["slug"]
+ value := ""
+ if vv, ok := preset[meta.valueKey]; ok && vv != "" {
+ value = vv
+ } else if meta.valueFunc != nil {
+ value = meta.valueFunc(preset, m)
+ }
+ r[slug] = value
+ }
+ }
+ }
+ return r
+}
+
+func setSpacingSizes(t ThemeJson) {
+ m, _ := maps.GetStrAnyVal[map[string]any](t.themeJson, "settings.spacing.spacingScale")
+ unit, _ := maps.GetStrAnyVal[string](m, "unit")
+ currentStep, _ := maps.GetStrAnyVal[float64](m, "mediumStep")
+ mediumStep := currentStep
+ steps, _ := maps.GetStrAnyVal[float64](m, "steps")
+ operator, _ := maps.GetStrAnyVal[string](m, "operator")
+ increment, _ := maps.GetStrAnyVal[float64](m, "increment")
+ stepsMidPoint := math.Round(steps / 2)
+ reminder := float64(0)
+ xSmallCount := ""
+ var sizes []map[string]string
+ slug := 40
+ for i := stepsMidPoint - 1; i > 0 && slug > 0 && steps > 1; i-- {
+ if "+" == operator {
+ currentStep -= increment
+ } else if increment > 1 {
+ currentStep /= increment
+ } else {
+ currentStep *= increment
+ }
+ if currentStep <= 0 {
+ reminder = i
+ break
+ }
+ name := "small"
+ if i != stepsMidPoint-1 {
+ name = str.Join(xSmallCount, "X-Small")
+ }
+ sizes = append(sizes, map[string]string{
+ "name": name,
+ "slug": number.IntToString(slug),
+ "size": fmt.Sprintf("%v%s", number.Round(currentStep, 2), unit),
+ })
+ if i == stepsMidPoint-2 {
+ xSmallCount = strconv.Itoa(2)
+ }
+ if i < stepsMidPoint-2 {
+ n := str.ToInt[int](xSmallCount)
+ n++
+ xSmallCount = strconv.Itoa(n)
+ }
+ slug -= 10
+ }
+ slice.ReverseSelf(sizes)
+ sizes = append(sizes, map[string]string{
+ "name": "Medium",
+ "slug": "50",
+ "size": str.Join(number.ToString(mediumStep), unit),
+ })
+ currentStep = mediumStep
+ slug = 60
+ xLargeCount := ""
+ stepsAbove := steps - stepsMidPoint + reminder
+ for aboveMidpointCount := float64(0); aboveMidpointCount < stepsAbove; aboveMidpointCount++ {
+ if "+" == operator {
+ currentStep += increment
+ } else if increment >= 1 {
+ currentStep *= increment
+ } else {
+ currentStep /= increment
+ }
+ name := "Large"
+ if 0 != aboveMidpointCount {
+ name = str.Join(xLargeCount, "X-Large")
+ }
+ sizes = append(sizes, map[string]string{
+ "name": name,
+ "slug": strconv.Itoa(slug),
+ "size": fmt.Sprintf("%v%s", number.Round(currentStep, 2), unit),
+ })
+ if aboveMidpointCount == 1 {
+ xLargeCount = strconv.Itoa(2)
+ }
+ if aboveMidpointCount > 1 {
+ x := str.ToInt[int](xLargeCount)
+ x++
+ xLargeCount = strconv.Itoa(x)
+ }
+ slug += 10
+ }
+ if steps <= 7 {
+ for i := 0; i < len(sizes); i++ {
+ sizes[i]["name"] = strconv.Itoa(i + 1)
+ }
+ }
+ maps.SetStrAnyVal(t.themeJson, "settings.spacing.spacingSizes.default", sizes)
+}
+
+func (j ThemeJson) getCssVariables(settingNodes []node, origins []string) string {
+ var s strings.Builder
+ for _, settingNode := range settingNodes {
+ if "" == settingNode.Selector {
+ continue
+ }
+ n := maps.GetStrAnyValWithDefaults[map[string]any](j.themeJson, strings.Join(settingNode.Path, "."), nil)
+ declarations := computePresetVars(n, origins)
+ declarations = append(declarations, computeThemeVars(j.themeJson)...)
+ s.WriteString(toRuleset(settingNode.Selector, declarations))
+ }
+ return s.String()
+}
+
+func toRuleset(selector string, declarations []declaration) string {
+ if len(declarations) < 1 {
+ return ""
+ }
+ s := slice.Reduce(declarations, func(t declaration, r string) string {
+ return str.Join(r, t.name, ":", t.value, ";")
+ }, "")
+ return str.Join(selector, "{", s, "}")
+}
+
+func getStyleNodes(t ThemeJson) []node {
+ var styleNodes = []node{
+ {[]string{"styles"}, "body"},
+ }
+ m := maps.GetStrAnyValWithDefaults[map[string]any](t.themeJson, "styles.elements", nil)
+ if len(m) < 1 {
+ return nil
+ }
+ for e, s := range __elements {
+ _, ok := m[e]
+ if !ok {
+ continue
+ }
+ styleNodes = append(styleNodes, node{[]string{"styles", "elements", e}, s})
+ ss, ok := __validElementPseudoSelectors[e]
+ if ok {
+ for _, sel := range ss {
+ if maps.IsExists(__elements, sel) {
+ styleNodes = append(styleNodes, node{
+ Path: []string{"styles", "elements", e},
+ Selector: appendToSelector(s, sel, ""),
+ })
+ }
+ }
+ }
+ }
+ blocks, _ := maps.GetStrAnyVal[map[string]any](t.blocksMetaData, "theme_json.styles.blocks")
+ maps.SetStrAnyVal(t.themeJson, "styles.blocks", blocks)
+ blockNodes := getBlockNodes(t.blocksMetaData)
+ for _, blockNode := range blockNodes {
+ p, ok := maps.GetStrAnyVal[[]string](blockNode, "path")
+ s, oo := maps.GetStrAnyVal[string](blockNode, "selector")
+ if ok && oo {
+ styleNodes = append(styleNodes, node{Path: p, Selector: s})
+ }
+ }
+
+ return styleNodes
+}
+
+var validOrigins = []string{"default", "theme", "custom"}
+
+func GetStyletSheet(t ThemeJson, types, origins []string, options map[string]string) string {
+ styleNodes := getStyleNodes(t)
+ settingsNodes := getSettingNodes(t.blocksMetaData, t.themeJson)
+ if types == nil && !wpconfig.HasThemeJson() {
+ types = []string{"variables", "presets", "base-layout-styles"}
+ } else if types == nil {
+ types = []string{"variables", "styles", "presets"}
+ }
+ if origins == nil {
+ origins = validOrigins
+ }
+ rootStyleKey, _ := slice.SearchFirst(styleNodes, func(n node) bool {
+ return n.Selector == RootBlockSelector
+ })
+ rootSettingsKey, _ := slice.SearchFirst(settingsNodes, func(n node) bool {
+ return n.Selector == RootBlockSelector
+ })
+ if os, ok := options["scope"]; ok {
+ for i := range settingsNodes {
+ settingsNodes[i].Selector = scopeSelector(os, settingsNodes[i].Selector)
+ }
+ for i := range styleNodes {
+ styleNodes[i].Selector = scopeSelector(os, styleNodes[i].Selector)
+ }
+ }
+ if or, ok := options["root_selector"]; ok && or != "" {
+ if rootSettingsKey > -1 {
+ settingsNodes[rootSettingsKey].Selector = or
+ }
+ if rootStyleKey > -1 && rootStyleKey < len(settingsNodes) {
+ settingsNodes[rootStyleKey].Selector = or
+ }
+ }
+ var s string
+ if slice.IsContained(types, "variables") {
+ s = t.getCssVariables(settingsNodes, origins)
+ slice.Delete(&types, slice.IndexOf(types, "variables"))
+ }
+ if slice.IsContained(types, "styles") {
+ s = t.getCssVariables(settingsNodes, origins)
+ }
+
+ return s
+}
diff --git a/app/theme/wp/scripts.json b/app/theme/wp/scripts.json
new file mode 100644
index 0000000..b231917
--- /dev/null
+++ b/app/theme/wp/scripts.json
@@ -0,0 +1,1605 @@
+{
+ "utils": {
+ "handle": "utils",
+ "src": "/wp-includes/js/utils.min.js",
+ "deps": [],
+ "ver": false,
+ "extra": {
+ "data": "var userSettings \u003d {\"url\":\"\\/\",\"uid\":\"0\",\"time\":\"1687343531\",\"secure\":\"\"};"
+ }
+ },
+ "common": {
+ "handle": "common",
+ "src": "/wp-admin/js/common.min.js",
+ "deps": [
+ "jquery",
+ "hoverIntent",
+ "utils",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "wp-sanitize": {
+ "handle": "wp-sanitize",
+ "src": "/wp-includes/js/wp-sanitize.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "sack": {
+ "handle": "sack",
+ "src": "/wp-includes/js/tw-sack.min.js",
+ "deps": [],
+ "ver": "1.6.1",
+ "args": 1,
+ "extra": []
+ },
+ "quicktags": {
+ "handle": "quicktags",
+ "src": "/wp-includes/js/quicktags.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var quicktagsL10n \u003d {\"closeAllOpenTags\":\"\\u5173\\u95ed\\u6240\\u6709\\u6253\\u5f00\\u7684\\u6807\\u7b7e\",\"closeTags\":\"\\u5173\\u95ed\\u6807\\u7b7e\",\"enterURL\":\"\\u8f93\\u5165URL\",\"enterImageURL\":\"\\u8f93\\u5165\\u56fe\\u7247URL\",\"enterImageDescription\":\"\\u8f93\\u5165\\u56fe\\u7247\\u7684\\u63cf\\u8ff0\",\"textdirection\":\"\\u6587\\u672c\\u65b9\\u5411\",\"toggleTextdirection\":\"\\u5207\\u6362\\u7f16\\u8f91\\u5668\\u6587\\u672c\\u4e66\\u5199\\u65b9\\u5411\",\"dfw\":\"\\u514d\\u6253\\u6270\\u5199\\u4f5c\\u6a21\\u5f0f\",\"strong\":\"\\u7c97\\u4f53\",\"strongClose\":\"\\u5173\\u95ed\\u7c97\\u4f53\\u6807\\u7b7e\",\"em\":\"\\u659c\\u4f53\",\"emClose\":\"\\u5173\\u95ed\\u659c\\u4f53\\u6807\\u7b7e\",\"link\":\"\\u63d2\\u5165\\u94fe\\u63a5\",\"blockquote\":\"\\u6bb5\\u843d\\u5f15\\u7528\",\"blockquoteClose\":\"\\u5173\\u95ed\\u6bb5\\u843d\\u5f15\\u7528\\u6807\\u7b7e\",\"del\":\"\\u5220\\u9664\\u7684\\u6587\\u5b57\\uff08\\u5220\\u9664\\u7ebf\\uff09\",\"delClose\":\"\\u5173\\u95ed\\u5220\\u9664\\u7ebf\\u6807\\u7b7e\",\"ins\":\"\\u63d2\\u5165\\u7684\\u6587\\u5b57\",\"insClose\":\"\\u5173\\u95ed\\u63d2\\u5165\\u7684\\u6587\\u5b57\\u6807\\u7b7e\",\"image\":\"\\u63d2\\u5165\\u56fe\\u7247\",\"ul\":\"\\u9879\\u76ee\\u7b26\\u53f7\\u5217\\u8868\",\"ulClose\":\"\\u5173\\u95ed\\u9879\\u76ee\\u7b26\\u53f7\\u5217\\u8868\\u6807\\u7b7e\",\"ol\":\"\\u7f16\\u53f7\\u5217\\u8868\",\"olClose\":\"\\u5173\\u95ed\\u7f16\\u53f7\\u5217\\u8868\\u6807\\u7b7e\",\"li\":\"\\u5217\\u8868\\u9879\\u76ee\",\"liClose\":\"\\u5173\\u95ed\\u5217\\u8868\\u9879\\u76ee\\u6807\\u7b7e\",\"code\":\"\\u4ee3\\u7801\",\"codeClose\":\"\\u5173\\u95ed\\u4ee3\\u7801\\u6807\\u7b7e\",\"more\":\"\\u63d2\\u5165\\u201cMore\\u201d\\u6807\\u7b7e\"};"
+ }
+ },
+ "colorpicker": {
+ "handle": "colorpicker",
+ "src": "/wp-includes/js/colorpicker.min.js",
+ "deps": [
+ "prototype"
+ ],
+ "ver": "3517m",
+ "extra": []
+ },
+ "editor": {
+ "handle": "editor",
+ "src": "/wp-admin/js/editor.min.js",
+ "deps": [
+ "utils",
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "clipboard": {
+ "handle": "clipboard",
+ "src": "/wp-includes/js/clipboard.min.js",
+ "deps": [],
+ "ver": "2.0.11",
+ "args": 1,
+ "extra": []
+ },
+ "wp-ajax-response": {
+ "handle": "wp-ajax-response",
+ "src": "/wp-includes/js/wp-ajax-response.min.js",
+ "deps": [
+ "jquery",
+ "wp-a11y"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var wpAjax \u003d {\"noPerm\":\"\\u62b1\\u6b49\\uff0c\\u60a8\\u4e0d\\u80fd\\u8fd9\\u4e48\\u505a\\u3002\",\"broken\":\"\\u51fa\\u73b0\\u4e86\\u95ee\\u9898\\u3002\"};"
+ }
+ },
+ "wp-api-request": {
+ "handle": "wp-api-request",
+ "src": "/wp-includes/js/api-request.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var wpApiSettings \u003d {\"root\":\"http:\\/\\/wp.test\\/wp-json\\/\",\"nonce\":\"80e72e77d3\",\"versionString\":\"wp\\/v2\\/\"};"
+ }
+ },
+ "wp-pointer": {
+ "handle": "wp-pointer",
+ "src": "/wp-includes/js/wp-pointer.min.js",
+ "deps": [
+ "jquery-ui-core",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "autosave": {
+ "handle": "autosave",
+ "src": "/wp-includes/js/autosave.min.js",
+ "deps": [
+ "heartbeat"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "heartbeat": {
+ "handle": "heartbeat",
+ "src": "/wp-includes/js/heartbeat.min.js",
+ "deps": [
+ "jquery",
+ "wp-hooks"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var heartbeatSettings \u003d {\"ajaxurl\":\"\\/wp-admin\\/admin-ajax.php\"};"
+ }
+ },
+ "wp-auth-check": {
+ "handle": "wp-auth-check",
+ "src": "/wp-includes/js/wp-auth-check.min.js",
+ "deps": [
+ "heartbeat",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "wp-lists": {
+ "handle": "wp-lists",
+ "src": "/wp-includes/js/wp-lists.min.js",
+ "deps": [
+ "wp-ajax-response",
+ "jquery-color"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "prototype": {
+ "handle": "prototype",
+ "src": "https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js",
+ "deps": [],
+ "ver": "1.7.1",
+ "extra": []
+ },
+ "scriptaculous-root": {
+ "handle": "scriptaculous-root",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/scriptaculous.js",
+ "deps": [
+ "prototype"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-builder": {
+ "handle": "scriptaculous-builder",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/builder.js",
+ "deps": [
+ "scriptaculous-root"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-dragdrop": {
+ "handle": "scriptaculous-dragdrop",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/dragdrop.js",
+ "deps": [
+ "scriptaculous-builder",
+ "scriptaculous-effects"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-effects": {
+ "handle": "scriptaculous-effects",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/effects.js",
+ "deps": [
+ "scriptaculous-root"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-slider": {
+ "handle": "scriptaculous-slider",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/slider.js",
+ "deps": [
+ "scriptaculous-effects"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-sound": {
+ "handle": "scriptaculous-sound",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/sound.js",
+ "deps": [
+ "scriptaculous-root"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous-controls": {
+ "handle": "scriptaculous-controls",
+ "src": "https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/controls.js",
+ "deps": [
+ "scriptaculous-root"
+ ],
+ "ver": "1.9.0",
+ "extra": []
+ },
+ "scriptaculous": {
+ "handle": "scriptaculous",
+ "src": false,
+ "deps": [
+ "scriptaculous-dragdrop",
+ "scriptaculous-slider",
+ "scriptaculous-controls"
+ ],
+ "ver": false,
+ "extra": []
+ },
+ "cropper": {
+ "handle": "cropper",
+ "src": "/wp-includes/js/crop/cropper.js",
+ "deps": [
+ "scriptaculous-dragdrop"
+ ],
+ "ver": false,
+ "extra": []
+ },
+ "jquery": {
+ "handle": "jquery",
+ "src": false,
+ "deps": [
+ "jquery-core",
+ "jquery-migrate"
+ ],
+ "ver": "3.6.4",
+ "extra": []
+ },
+ "jquery-core": {
+ "handle": "jquery-core",
+ "src": "/wp-includes/js/jquery/jquery.min.js",
+ "deps": [],
+ "ver": "3.6.4",
+ "extra": []
+ },
+ "jquery-migrate": {
+ "handle": "jquery-migrate",
+ "src": "/wp-includes/js/jquery/jquery-migrate.min.js",
+ "deps": [],
+ "ver": "3.4.0",
+ "extra": []
+ },
+ "jquery-ui-core": {
+ "handle": "jquery-ui-core",
+ "src": "/wp-includes/js/jquery/ui/core.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-core": {
+ "handle": "jquery-effects-core",
+ "src": "/wp-includes/js/jquery/ui/effect.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-blind": {
+ "handle": "jquery-effects-blind",
+ "src": "/wp-includes/js/jquery/ui/effect-blind.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-bounce": {
+ "handle": "jquery-effects-bounce",
+ "src": "/wp-includes/js/jquery/ui/effect-bounce.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-clip": {
+ "handle": "jquery-effects-clip",
+ "src": "/wp-includes/js/jquery/ui/effect-clip.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-drop": {
+ "handle": "jquery-effects-drop",
+ "src": "/wp-includes/js/jquery/ui/effect-drop.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-explode": {
+ "handle": "jquery-effects-explode",
+ "src": "/wp-includes/js/jquery/ui/effect-explode.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-fade": {
+ "handle": "jquery-effects-fade",
+ "src": "/wp-includes/js/jquery/ui/effect-fade.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-fold": {
+ "handle": "jquery-effects-fold",
+ "src": "/wp-includes/js/jquery/ui/effect-fold.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-highlight": {
+ "handle": "jquery-effects-highlight",
+ "src": "/wp-includes/js/jquery/ui/effect-highlight.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-puff": {
+ "handle": "jquery-effects-puff",
+ "src": "/wp-includes/js/jquery/ui/effect-puff.min.js",
+ "deps": [
+ "jquery-effects-core",
+ "jquery-effects-scale"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-pulsate": {
+ "handle": "jquery-effects-pulsate",
+ "src": "/wp-includes/js/jquery/ui/effect-pulsate.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-scale": {
+ "handle": "jquery-effects-scale",
+ "src": "/wp-includes/js/jquery/ui/effect-scale.min.js",
+ "deps": [
+ "jquery-effects-core",
+ "jquery-effects-size"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-shake": {
+ "handle": "jquery-effects-shake",
+ "src": "/wp-includes/js/jquery/ui/effect-shake.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-size": {
+ "handle": "jquery-effects-size",
+ "src": "/wp-includes/js/jquery/ui/effect-size.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-slide": {
+ "handle": "jquery-effects-slide",
+ "src": "/wp-includes/js/jquery/ui/effect-slide.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-effects-transfer": {
+ "handle": "jquery-effects-transfer",
+ "src": "/wp-includes/js/jquery/ui/effect-transfer.min.js",
+ "deps": [
+ "jquery-effects-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-accordion": {
+ "handle": "jquery-ui-accordion",
+ "src": "/wp-includes/js/jquery/ui/accordion.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-autocomplete": {
+ "handle": "jquery-ui-autocomplete",
+ "src": "/wp-includes/js/jquery/ui/autocomplete.min.js",
+ "deps": [
+ "jquery-ui-menu",
+ "wp-a11y"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": {
+ "data": "var uiAutocompleteL10n \u003d {\"noResults\":\"\\u672a\\u627e\\u5230\\u7ed3\\u679c\\u3002\",\"oneResult\":\"\\u627e\\u52301\\u4e2a\\u7ed3\\u679c\\u3002\\u4f7f\\u7528\\u4e0a\\u4e0b\\u65b9\\u5411\\u952e\\u6765\\u5bfc\\u822a\\u3002\",\"manyResults\":\"\\u627e\\u5230%d\\u4e2a\\u7ed3\\u679c\\u3002\\u4f7f\\u7528\\u4e0a\\u4e0b\\u65b9\\u5411\\u952e\\u6765\\u5bfc\\u822a\\u3002\",\"itemSelected\":\"\\u5df2\\u9009\\u62e9\\u9879\\u76ee\\u3002\"};"
+ }
+ },
+ "jquery-ui-button": {
+ "handle": "jquery-ui-button",
+ "src": "/wp-includes/js/jquery/ui/button.min.js",
+ "deps": [
+ "jquery-ui-core",
+ "jquery-ui-controlgroup",
+ "jquery-ui-checkboxradio"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-datepicker": {
+ "handle": "jquery-ui-datepicker",
+ "src": "/wp-includes/js/jquery/ui/datepicker.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-dialog": {
+ "handle": "jquery-ui-dialog",
+ "src": "/wp-includes/js/jquery/ui/dialog.min.js",
+ "deps": [
+ "jquery-ui-resizable",
+ "jquery-ui-draggable",
+ "jquery-ui-button"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-menu": {
+ "handle": "jquery-ui-menu",
+ "src": "/wp-includes/js/jquery/ui/menu.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-mouse": {
+ "handle": "jquery-ui-mouse",
+ "src": "/wp-includes/js/jquery/ui/mouse.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-progressbar": {
+ "handle": "jquery-ui-progressbar",
+ "src": "/wp-includes/js/jquery/ui/progressbar.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-selectmenu": {
+ "handle": "jquery-ui-selectmenu",
+ "src": "/wp-includes/js/jquery/ui/selectmenu.min.js",
+ "deps": [
+ "jquery-ui-menu"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-slider": {
+ "handle": "jquery-ui-slider",
+ "src": "/wp-includes/js/jquery/ui/slider.min.js",
+ "deps": [
+ "jquery-ui-mouse"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-spinner": {
+ "handle": "jquery-ui-spinner",
+ "src": "/wp-includes/js/jquery/ui/spinner.min.js",
+ "deps": [
+ "jquery-ui-button"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-tabs": {
+ "handle": "jquery-ui-tabs",
+ "src": "/wp-includes/js/jquery/ui/tabs.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-tooltip": {
+ "handle": "jquery-ui-tooltip",
+ "src": "/wp-includes/js/jquery/ui/tooltip.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-checkboxradio": {
+ "handle": "jquery-ui-checkboxradio",
+ "src": "/wp-includes/js/jquery/ui/checkboxradio.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-controlgroup": {
+ "handle": "jquery-ui-controlgroup",
+ "src": "/wp-includes/js/jquery/ui/controlgroup.min.js",
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-draggable": {
+ "handle": "jquery-ui-draggable",
+ "src": "/wp-includes/js/jquery/ui/draggable.min.js",
+ "deps": [
+ "jquery-ui-mouse"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-droppable": {
+ "handle": "jquery-ui-droppable",
+ "src": "/wp-includes/js/jquery/ui/droppable.min.js",
+ "deps": [
+ "jquery-ui-draggable"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-resizable": {
+ "handle": "jquery-ui-resizable",
+ "src": "/wp-includes/js/jquery/ui/resizable.min.js",
+ "deps": [
+ "jquery-ui-mouse"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-selectable": {
+ "handle": "jquery-ui-selectable",
+ "src": "/wp-includes/js/jquery/ui/selectable.min.js",
+ "deps": [
+ "jquery-ui-mouse"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-sortable": {
+ "handle": "jquery-ui-sortable",
+ "src": "/wp-includes/js/jquery/ui/sortable.min.js",
+ "deps": [
+ "jquery-ui-mouse"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-position": {
+ "handle": "jquery-ui-position",
+ "src": false,
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-ui-widget": {
+ "handle": "jquery-ui-widget",
+ "src": false,
+ "deps": [
+ "jquery-ui-core"
+ ],
+ "ver": "1.13.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-form": {
+ "handle": "jquery-form",
+ "src": "/wp-includes/js/jquery/jquery.form.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "4.3.0",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-color": {
+ "handle": "jquery-color",
+ "src": "/wp-includes/js/jquery/jquery.color.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "2.2.0",
+ "args": 1,
+ "extra": []
+ },
+ "schedule": {
+ "handle": "schedule",
+ "src": "/wp-includes/js/jquery/jquery.schedule.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "20m",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-query": {
+ "handle": "jquery-query",
+ "src": "/wp-includes/js/jquery/jquery.query.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "2.2.3",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-serialize-object": {
+ "handle": "jquery-serialize-object",
+ "src": "/wp-includes/js/jquery/jquery.serialize-object.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "0.2-wp",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-hotkeys": {
+ "handle": "jquery-hotkeys",
+ "src": "/wp-includes/js/jquery/jquery.hotkeys.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "0.0.2m",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-table-hotkeys": {
+ "handle": "jquery-table-hotkeys",
+ "src": "/wp-includes/js/jquery/jquery.table-hotkeys.min.js",
+ "deps": [
+ "jquery",
+ "jquery-hotkeys"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "jquery-touch-punch": {
+ "handle": "jquery-touch-punch",
+ "src": "/wp-includes/js/jquery/jquery.ui.touch-punch.js",
+ "deps": [
+ "jquery-ui-core",
+ "jquery-ui-mouse"
+ ],
+ "ver": "0.2.2",
+ "args": 1,
+ "extra": []
+ },
+ "suggest": {
+ "handle": "suggest",
+ "src": "/wp-includes/js/jquery/suggest.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "1.1-20110113",
+ "args": 1,
+ "extra": []
+ },
+ "imagesloaded": {
+ "handle": "imagesloaded",
+ "src": "/wp-includes/js/imagesloaded.min.js",
+ "deps": [],
+ "ver": "4.1.4",
+ "args": 1,
+ "extra": []
+ },
+ "masonry": {
+ "handle": "masonry",
+ "src": "/wp-includes/js/masonry.min.js",
+ "deps": [
+ "imagesloaded"
+ ],
+ "ver": "4.2.2",
+ "args": 1,
+ "extra": []
+ },
+ "jquery-masonry": {
+ "handle": "jquery-masonry",
+ "src": "/wp-includes/js/jquery/jquery.masonry.min.js",
+ "deps": [
+ "jquery",
+ "masonry"
+ ],
+ "ver": "3.1.2b",
+ "args": 1,
+ "extra": []
+ },
+ "thickbox": {
+ "handle": "thickbox",
+ "src": "/wp-includes/js/thickbox/thickbox.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "3.1-20121105",
+ "args": 1,
+ "extra": {
+ "data": "var thickboxL10n \u003d {\"next\":\"\\u4e0b\\u4e00\\u9875 \u003e\",\"prev\":\"\u003c \\u4e0a\\u4e00\\u9875\",\"image\":\"\\u56fe\\u7247\",\"of\":\"\\/\",\"close\":\"\\u5173\\u95ed\",\"noiframes\":\"\\u8fd9\\u4e2a\\u529f\\u80fd\\u9700\\u8981iframe\\u7684\\u652f\\u6301\\u3002\\u60a8\\u53ef\\u80fd\\u7981\\u6b62\\u4e86iframe\\u7684\\u663e\\u793a\\uff0c\\u6216\\u60a8\\u7684\\u6d4f\\u89c8\\u5668\\u4e0d\\u652f\\u6301\\u6b64\\u529f\\u80fd\\u3002\",\"loadingAnimation\":\"http:\\/\\/wp.test\\/wp-includes\\/js\\/thickbox\\/loadingAnimation.gif\"};"
+ }
+ },
+ "jcrop": {
+ "handle": "jcrop",
+ "src": "/wp-includes/js/jcrop/jquery.Jcrop.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "0.9.15",
+ "extra": []
+ },
+ "swfobject": {
+ "handle": "swfobject",
+ "src": "/wp-includes/js/swfobject.js",
+ "deps": [],
+ "ver": "2.2-20120417",
+ "extra": []
+ },
+ "moxiejs": {
+ "handle": "moxiejs",
+ "src": "/wp-includes/js/plupload/moxie.min.js",
+ "deps": [],
+ "ver": "1.3.5",
+ "extra": []
+ },
+ "plupload": {
+ "handle": "plupload",
+ "src": "/wp-includes/js/plupload/plupload.min.js",
+ "deps": [
+ "moxiejs"
+ ],
+ "ver": "2.1.9",
+ "extra": []
+ },
+ "plupload-all": {
+ "handle": "plupload-all",
+ "src": false,
+ "deps": [
+ "plupload"
+ ],
+ "ver": "2.1.1",
+ "extra": []
+ },
+ "plupload-html5": {
+ "handle": "plupload-html5",
+ "src": false,
+ "deps": [
+ "plupload"
+ ],
+ "ver": "2.1.1",
+ "extra": []
+ },
+ "plupload-flash": {
+ "handle": "plupload-flash",
+ "src": false,
+ "deps": [
+ "plupload"
+ ],
+ "ver": "2.1.1",
+ "extra": []
+ },
+ "plupload-silverlight": {
+ "handle": "plupload-silverlight",
+ "src": false,
+ "deps": [
+ "plupload"
+ ],
+ "ver": "2.1.1",
+ "extra": []
+ },
+ "plupload-html4": {
+ "handle": "plupload-html4",
+ "src": false,
+ "deps": [
+ "plupload"
+ ],
+ "ver": "2.1.1",
+ "extra": []
+ },
+ "plupload-handlers": {
+ "handle": "plupload-handlers",
+ "src": "/wp-includes/js/plupload/handlers.min.js",
+ "deps": [
+ "clipboard",
+ "jquery",
+ "plupload",
+ "underscore",
+ "wp-a11y",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "extra": {
+ "data": "var pluploadL10n \u003d {\"queue_limit_exceeded\":\"\\u60a8\\u5411\\u961f\\u5217\\u4e2d\\u6dfb\\u52a0\\u7684\\u6587\\u4ef6\\u8fc7\\u591a\\u3002\",\"file_exceeds_size_limit\":\"%s\\u8d85\\u8fc7\\u4e86\\u7ad9\\u70b9\\u7684\\u6700\\u5927\\u4e0a\\u4f20\\u9650\\u5236\\u3002\",\"zero_byte_file\":\"\\u6587\\u4ef6\\u4e3a\\u7a7a\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"invalid_filetype\":\"\\u62b1\\u6b49\\uff0c\\u60a8\\u65e0\\u6743\\u4e0a\\u4f20\\u6b64\\u6587\\u4ef6\\u7c7b\\u578b\\u3002\",\"not_an_image\":\"\\u8be5\\u6587\\u4ef6\\u4e0d\\u662f\\u56fe\\u7247\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"image_memory_exceeded\":\"\\u8fbe\\u5230\\u5185\\u5b58\\u9650\\u5236\\uff0c\\u8bf7\\u4f7f\\u7528\\u5c0f\\u4e00\\u4e9b\\u7684\\u6587\\u4ef6\\u3002\",\"image_dimensions_exceeded\":\"\\u8be5\\u6587\\u4ef6\\u8d85\\u8fc7\\u4e86\\u6700\\u5927\\u5927\\u5c0f\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"default_error\":\"\\u4e0a\\u4f20\\u65f6\\u53d1\\u751f\\u4e86\\u9519\\u8bef\\u3002\\u8bf7\\u7a0d\\u540e\\u518d\\u8bd5\\u3002\",\"missing_upload_url\":\"\\u914d\\u7f6e\\u6709\\u8bef\\u3002\\u8bf7\\u8054\\u7cfb\\u60a8\\u7684\\u670d\\u52a1\\u5668\\u7ba1\\u7406\\u5458\\u3002\",\"upload_limit_exceeded\":\"\\u60a8\\u53ea\\u80fd\\u4e0a\\u4f20\\u4e00\\u4e2a\\u6587\\u4ef6\\u3002\",\"http_error\":\"\\u4ece\\u670d\\u52a1\\u5668\\u6536\\u5230\\u9884\\u6599\\u4e4b\\u5916\\u7684\\u54cd\\u5e94\\u3002\\u6b64\\u6587\\u4ef6\\u53ef\\u80fd\\u5df2\\u88ab\\u6210\\u529f\\u4e0a\\u4f20\\u3002\\u8bf7\\u68c0\\u67e5\\u5a92\\u4f53\\u5e93\\u6216\\u5237\\u65b0\\u672c\\u9875\\u3002\",\"http_error_image\":\"\\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u56fe\\u7247\\u3002\\u5982\\u679c\\u670d\\u52a1\\u5668\\u7e41\\u5fd9\\u6216\\u6ca1\\u6709\\u8db3\\u591f\\u7684\\u8d44\\u6e90\\u6765\\u5b8c\\u6210\\u4efb\\u52a1\\uff0c\\u5c31\\u4f1a\\u53d1\\u751f\\u8fd9\\u79cd\\u60c5\\u51b5\\u3002\\u4e0a\\u4f20\\u8f83\\u5c0f\\u7684\\u56fe\\u7247\\u53ef\\u80fd\\u4f1a\\u6709\\u6240\\u5e2e\\u52a9\\u3002\\u5efa\\u8bae\\u7684\\u6700\\u5927\\u5c3a\\u5bf8\\u4e3a 2560 \\u50cf\\u7d20\\u3002\",\"upload_failed\":\"\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"big_upload_failed\":\"\\u8bf7\\u5c1d\\u8bd5\\u4f7f\\u7528%1$s\\u6807\\u51c6\\u7684\\u6d4f\\u89c8\\u5668\\u4e0a\\u4f20\\u5de5\\u5177%2$s\\u6765\\u4e0a\\u4f20\\u8fd9\\u4e2a\\u6587\\u4ef6\\u3002\",\"big_upload_queued\":\"%s\\u8d85\\u51fa\\u4e86\\u60a8\\u6d4f\\u89c8\\u5668\\u5bf9\\u9ad8\\u7ea7\\u591a\\u6587\\u4ef6\\u4e0a\\u4f20\\u5de5\\u5177\\u6240\\u505a\\u7684\\u5927\\u5c0f\\u9650\\u5236\\u3002\",\"io_error\":\"IO\\u9519\\u8bef\\u3002\",\"security_error\":\"\\u5b89\\u5168\\u9519\\u8bef\\u3002\",\"file_cancelled\":\"\\u6587\\u4ef6\\u5df2\\u53d6\\u6d88\\u3002\",\"upload_stopped\":\"\\u4e0a\\u4f20\\u505c\\u6b62\\u3002\",\"dismiss\":\"\\u4e0d\\u518d\\u663e\\u793a\",\"crunching\":\"\\u5904\\u7406\\u4e2d\\u2026\",\"deleted\":\"\\u79fb\\u52a8\\u81f3\\u56de\\u6536\\u7ad9\\u3002\",\"error_uploading\":\"\\u201c%s\\u201d\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"unsupported_image\":\"\\u6b64\\u56fe\\u7247\\u65e0\\u6cd5\\u5728\\u7f51\\u9875\\u6d4f\\u89c8\\u5668\\u4e2d\\u663e\\u793a\\u3002 \\u4e3a\\u4e86\\u8fbe\\u5230\\u6700\\u4f73\\u6548\\u679c\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u683c\\u5f0f\\u3002\",\"noneditable_image\":\"web \\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u8be5\\u56fe\\u7247\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u6216PNG \\u683c\\u5f0f\\u3002\",\"file_url_copied\":\"\\u6587\\u4ef6URL\\u5df2\\u590d\\u5236\\u81f3\\u526a\\u8d34\\u677f\"};"
+ }
+ },
+ "wp-plupload": {
+ "handle": "wp-plupload",
+ "src": "/wp-includes/js/plupload/wp-plupload.min.js",
+ "deps": [
+ "plupload",
+ "jquery",
+ "json2",
+ "media-models"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var pluploadL10n \u003d {\"queue_limit_exceeded\":\"\\u60a8\\u5411\\u961f\\u5217\\u4e2d\\u6dfb\\u52a0\\u7684\\u6587\\u4ef6\\u8fc7\\u591a\\u3002\",\"file_exceeds_size_limit\":\"%s\\u8d85\\u8fc7\\u4e86\\u7ad9\\u70b9\\u7684\\u6700\\u5927\\u4e0a\\u4f20\\u9650\\u5236\\u3002\",\"zero_byte_file\":\"\\u6587\\u4ef6\\u4e3a\\u7a7a\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"invalid_filetype\":\"\\u62b1\\u6b49\\uff0c\\u60a8\\u65e0\\u6743\\u4e0a\\u4f20\\u6b64\\u6587\\u4ef6\\u7c7b\\u578b\\u3002\",\"not_an_image\":\"\\u8be5\\u6587\\u4ef6\\u4e0d\\u662f\\u56fe\\u7247\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"image_memory_exceeded\":\"\\u8fbe\\u5230\\u5185\\u5b58\\u9650\\u5236\\uff0c\\u8bf7\\u4f7f\\u7528\\u5c0f\\u4e00\\u4e9b\\u7684\\u6587\\u4ef6\\u3002\",\"image_dimensions_exceeded\":\"\\u8be5\\u6587\\u4ef6\\u8d85\\u8fc7\\u4e86\\u6700\\u5927\\u5927\\u5c0f\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"default_error\":\"\\u4e0a\\u4f20\\u65f6\\u53d1\\u751f\\u4e86\\u9519\\u8bef\\u3002\\u8bf7\\u7a0d\\u540e\\u518d\\u8bd5\\u3002\",\"missing_upload_url\":\"\\u914d\\u7f6e\\u6709\\u8bef\\u3002\\u8bf7\\u8054\\u7cfb\\u60a8\\u7684\\u670d\\u52a1\\u5668\\u7ba1\\u7406\\u5458\\u3002\",\"upload_limit_exceeded\":\"\\u60a8\\u53ea\\u80fd\\u4e0a\\u4f20\\u4e00\\u4e2a\\u6587\\u4ef6\\u3002\",\"http_error\":\"\\u4ece\\u670d\\u52a1\\u5668\\u6536\\u5230\\u9884\\u6599\\u4e4b\\u5916\\u7684\\u54cd\\u5e94\\u3002\\u6b64\\u6587\\u4ef6\\u53ef\\u80fd\\u5df2\\u88ab\\u6210\\u529f\\u4e0a\\u4f20\\u3002\\u8bf7\\u68c0\\u67e5\\u5a92\\u4f53\\u5e93\\u6216\\u5237\\u65b0\\u672c\\u9875\\u3002\",\"http_error_image\":\"\\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u56fe\\u7247\\u3002\\u5982\\u679c\\u670d\\u52a1\\u5668\\u7e41\\u5fd9\\u6216\\u6ca1\\u6709\\u8db3\\u591f\\u7684\\u8d44\\u6e90\\u6765\\u5b8c\\u6210\\u4efb\\u52a1\\uff0c\\u5c31\\u4f1a\\u53d1\\u751f\\u8fd9\\u79cd\\u60c5\\u51b5\\u3002\\u4e0a\\u4f20\\u8f83\\u5c0f\\u7684\\u56fe\\u7247\\u53ef\\u80fd\\u4f1a\\u6709\\u6240\\u5e2e\\u52a9\\u3002\\u5efa\\u8bae\\u7684\\u6700\\u5927\\u5c3a\\u5bf8\\u4e3a 2560 \\u50cf\\u7d20\\u3002\",\"upload_failed\":\"\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"big_upload_failed\":\"\\u8bf7\\u5c1d\\u8bd5\\u4f7f\\u7528%1$s\\u6807\\u51c6\\u7684\\u6d4f\\u89c8\\u5668\\u4e0a\\u4f20\\u5de5\\u5177%2$s\\u6765\\u4e0a\\u4f20\\u8fd9\\u4e2a\\u6587\\u4ef6\\u3002\",\"big_upload_queued\":\"%s\\u8d85\\u51fa\\u4e86\\u60a8\\u6d4f\\u89c8\\u5668\\u5bf9\\u9ad8\\u7ea7\\u591a\\u6587\\u4ef6\\u4e0a\\u4f20\\u5de5\\u5177\\u6240\\u505a\\u7684\\u5927\\u5c0f\\u9650\\u5236\\u3002\",\"io_error\":\"IO\\u9519\\u8bef\\u3002\",\"security_error\":\"\\u5b89\\u5168\\u9519\\u8bef\\u3002\",\"file_cancelled\":\"\\u6587\\u4ef6\\u5df2\\u53d6\\u6d88\\u3002\",\"upload_stopped\":\"\\u4e0a\\u4f20\\u505c\\u6b62\\u3002\",\"dismiss\":\"\\u4e0d\\u518d\\u663e\\u793a\",\"crunching\":\"\\u5904\\u7406\\u4e2d\\u2026\",\"deleted\":\"\\u79fb\\u52a8\\u81f3\\u56de\\u6536\\u7ad9\\u3002\",\"error_uploading\":\"\\u201c%s\\u201d\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"unsupported_image\":\"\\u6b64\\u56fe\\u7247\\u65e0\\u6cd5\\u5728\\u7f51\\u9875\\u6d4f\\u89c8\\u5668\\u4e2d\\u663e\\u793a\\u3002 \\u4e3a\\u4e86\\u8fbe\\u5230\\u6700\\u4f73\\u6548\\u679c\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u683c\\u5f0f\\u3002\",\"noneditable_image\":\"web \\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u8be5\\u56fe\\u7247\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u6216PNG \\u683c\\u5f0f\\u3002\",\"file_url_copied\":\"\\u6587\\u4ef6URL\\u5df2\\u590d\\u5236\\u81f3\\u526a\\u8d34\\u677f\"};"
+ }
+ },
+ "swfupload": {
+ "handle": "swfupload",
+ "src": "/wp-includes/js/swfupload/swfupload.js",
+ "deps": [],
+ "ver": "2201-20110113",
+ "extra": []
+ },
+ "swfupload-all": {
+ "handle": "swfupload-all",
+ "src": false,
+ "deps": [
+ "swfupload"
+ ],
+ "ver": "2201",
+ "extra": []
+ },
+ "swfupload-handlers": {
+ "handle": "swfupload-handlers",
+ "src": "/wp-includes/js/swfupload/handlers.min.js",
+ "deps": [
+ "swfupload-all",
+ "jquery"
+ ],
+ "ver": "2201-20110524",
+ "extra": {
+ "data": "var swfuploadL10n \u003d {\"queue_limit_exceeded\":\"\\u60a8\\u5411\\u961f\\u5217\\u4e2d\\u6dfb\\u52a0\\u7684\\u6587\\u4ef6\\u8fc7\\u591a\\u3002\",\"file_exceeds_size_limit\":\"%s\\u8d85\\u8fc7\\u4e86\\u7ad9\\u70b9\\u7684\\u6700\\u5927\\u4e0a\\u4f20\\u9650\\u5236\\u3002\",\"zero_byte_file\":\"\\u6587\\u4ef6\\u4e3a\\u7a7a\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"invalid_filetype\":\"\\u62b1\\u6b49\\uff0c\\u60a8\\u65e0\\u6743\\u4e0a\\u4f20\\u6b64\\u6587\\u4ef6\\u7c7b\\u578b\\u3002\",\"not_an_image\":\"\\u8be5\\u6587\\u4ef6\\u4e0d\\u662f\\u56fe\\u7247\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"image_memory_exceeded\":\"\\u8fbe\\u5230\\u5185\\u5b58\\u9650\\u5236\\uff0c\\u8bf7\\u4f7f\\u7528\\u5c0f\\u4e00\\u4e9b\\u7684\\u6587\\u4ef6\\u3002\",\"image_dimensions_exceeded\":\"\\u8be5\\u6587\\u4ef6\\u8d85\\u8fc7\\u4e86\\u6700\\u5927\\u5927\\u5c0f\\uff0c\\u8bf7\\u9009\\u62e9\\u5176\\u4ed6\\u6587\\u4ef6\\u3002\",\"default_error\":\"\\u4e0a\\u4f20\\u65f6\\u53d1\\u751f\\u4e86\\u9519\\u8bef\\u3002\\u8bf7\\u7a0d\\u540e\\u518d\\u8bd5\\u3002\",\"missing_upload_url\":\"\\u914d\\u7f6e\\u6709\\u8bef\\u3002\\u8bf7\\u8054\\u7cfb\\u60a8\\u7684\\u670d\\u52a1\\u5668\\u7ba1\\u7406\\u5458\\u3002\",\"upload_limit_exceeded\":\"\\u60a8\\u53ea\\u80fd\\u4e0a\\u4f20\\u4e00\\u4e2a\\u6587\\u4ef6\\u3002\",\"http_error\":\"\\u4ece\\u670d\\u52a1\\u5668\\u6536\\u5230\\u9884\\u6599\\u4e4b\\u5916\\u7684\\u54cd\\u5e94\\u3002\\u6b64\\u6587\\u4ef6\\u53ef\\u80fd\\u5df2\\u88ab\\u6210\\u529f\\u4e0a\\u4f20\\u3002\\u8bf7\\u68c0\\u67e5\\u5a92\\u4f53\\u5e93\\u6216\\u5237\\u65b0\\u672c\\u9875\\u3002\",\"http_error_image\":\"\\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u56fe\\u7247\\u3002\\u5982\\u679c\\u670d\\u52a1\\u5668\\u7e41\\u5fd9\\u6216\\u6ca1\\u6709\\u8db3\\u591f\\u7684\\u8d44\\u6e90\\u6765\\u5b8c\\u6210\\u4efb\\u52a1\\uff0c\\u5c31\\u4f1a\\u53d1\\u751f\\u8fd9\\u79cd\\u60c5\\u51b5\\u3002\\u4e0a\\u4f20\\u8f83\\u5c0f\\u7684\\u56fe\\u7247\\u53ef\\u80fd\\u4f1a\\u6709\\u6240\\u5e2e\\u52a9\\u3002\\u5efa\\u8bae\\u7684\\u6700\\u5927\\u5c3a\\u5bf8\\u4e3a 2560 \\u50cf\\u7d20\\u3002\",\"upload_failed\":\"\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"big_upload_failed\":\"\\u8bf7\\u5c1d\\u8bd5\\u4f7f\\u7528%1$s\\u6807\\u51c6\\u7684\\u6d4f\\u89c8\\u5668\\u4e0a\\u4f20\\u5de5\\u5177%2$s\\u6765\\u4e0a\\u4f20\\u8fd9\\u4e2a\\u6587\\u4ef6\\u3002\",\"big_upload_queued\":\"%s\\u8d85\\u51fa\\u4e86\\u60a8\\u6d4f\\u89c8\\u5668\\u5bf9\\u9ad8\\u7ea7\\u591a\\u6587\\u4ef6\\u4e0a\\u4f20\\u5de5\\u5177\\u6240\\u505a\\u7684\\u5927\\u5c0f\\u9650\\u5236\\u3002\",\"io_error\":\"IO\\u9519\\u8bef\\u3002\",\"security_error\":\"\\u5b89\\u5168\\u9519\\u8bef\\u3002\",\"file_cancelled\":\"\\u6587\\u4ef6\\u5df2\\u53d6\\u6d88\\u3002\",\"upload_stopped\":\"\\u4e0a\\u4f20\\u505c\\u6b62\\u3002\",\"dismiss\":\"\\u4e0d\\u518d\\u663e\\u793a\",\"crunching\":\"\\u5904\\u7406\\u4e2d\\u2026\",\"deleted\":\"\\u79fb\\u52a8\\u81f3\\u56de\\u6536\\u7ad9\\u3002\",\"error_uploading\":\"\\u201c%s\\u201d\\u4e0a\\u4f20\\u5931\\u8d25\\u3002\",\"unsupported_image\":\"\\u6b64\\u56fe\\u7247\\u65e0\\u6cd5\\u5728\\u7f51\\u9875\\u6d4f\\u89c8\\u5668\\u4e2d\\u663e\\u793a\\u3002 \\u4e3a\\u4e86\\u8fbe\\u5230\\u6700\\u4f73\\u6548\\u679c\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u683c\\u5f0f\\u3002\",\"noneditable_image\":\"web \\u670d\\u52a1\\u5668\\u65e0\\u6cd5\\u5904\\u7406\\u8be5\\u56fe\\u7247\\uff0c\\u8bf7\\u5728\\u4e0a\\u4f20\\u524d\\u5c06\\u5176\\u8f6c\\u6362\\u4e3aJPEG\\u6216PNG \\u683c\\u5f0f\\u3002\",\"file_url_copied\":\"\\u6587\\u4ef6URL\\u5df2\\u590d\\u5236\\u81f3\\u526a\\u8d34\\u677f\"};"
+ }
+ },
+ "comment-reply": {
+ "handle": "comment-reply",
+ "src": "/wp-includes/js/comment-reply.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "json2": {
+ "handle": "json2",
+ "src": "/wp-includes/js/json2.min.js",
+ "deps": [],
+ "ver": "2015-05-03",
+ "extra": {
+ "conditional": "lt IE 8"
+ }
+ },
+ "underscore": {
+ "handle": "underscore",
+ "src": "/wp-includes/js/underscore.min.js",
+ "deps": [],
+ "ver": "1.13.4",
+ "args": 1,
+ "extra": []
+ },
+ "backbone": {
+ "handle": "backbone",
+ "src": "/wp-includes/js/backbone.min.js",
+ "deps": [
+ "underscore",
+ "jquery"
+ ],
+ "ver": "1.4.1",
+ "args": 1,
+ "extra": []
+ },
+ "wp-util": {
+ "handle": "wp-util",
+ "src": "/wp-includes/js/wp-util.min.js",
+ "deps": [
+ "underscore",
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var _wpUtilSettings \u003d {\"ajax\":{\"url\":\"\\/wp-admin\\/admin-ajax.php\"}};"
+ }
+ },
+ "wp-backbone": {
+ "handle": "wp-backbone",
+ "src": "/wp-includes/js/wp-backbone.min.js",
+ "deps": [
+ "backbone",
+ "wp-util"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "revisions": {
+ "handle": "revisions",
+ "src": "/wp-admin/js/revisions.min.js",
+ "deps": [
+ "wp-backbone",
+ "jquery-ui-slider",
+ "hoverIntent"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "imgareaselect": {
+ "handle": "imgareaselect",
+ "src": "/wp-includes/js/imgareaselect/jquery.imgareaselect.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "mediaelement": {
+ "handle": "mediaelement",
+ "src": false,
+ "deps": [
+ "jquery",
+ "mediaelement-core",
+ "mediaelement-migrate"
+ ],
+ "ver": "4.2.17",
+ "args": 1,
+ "extra": {
+ "data": "var _wpmejsSettings \u003d {\"pluginPath\":\"\\/wp-includes\\/js\\/mediaelement\\/\",\"classPrefix\":\"mejs-\",\"stretching\":\"responsive\",\"audioShortcodeLibrary\":\"mediaelement\",\"videoShortcodeLibrary\":\"mediaelement\"};"
+ }
+ },
+ "mediaelement-core": {
+ "handle": "mediaelement-core",
+ "src": "/wp-includes/js/mediaelement/mediaelement-and-player.min.js",
+ "deps": [],
+ "ver": "4.2.17",
+ "args": 1,
+ "extra": {
+ "before": [
+ false,
+ "var mejsL10n \u003d {\"language\":\"zh\",\"strings\":{\"mejs.download-file\":\"\\u4e0b\\u8f7d\\u6587\\u4ef6\",\"mejs.install-flash\":\"\\u60a8\\u6b63\\u5728\\u4f7f\\u7528\\u7684\\u6d4f\\u89c8\\u5668\\u672a\\u5b89\\u88c5\\u6216\\u542f\\u7528Flash\\u64ad\\u653e\\u5668\\uff0c\\u8bf7\\u542f\\u7528\\u60a8\\u7684Flash\\u64ad\\u653e\\u5668\\u63d2\\u4ef6\\uff0c\\u6216\\u4ece https:\\/\\/get.adobe.com\\/flashplayer\\/ \\u4e0b\\u8f7d\\u6700\\u65b0\\u7248\\u3002\",\"mejs.fullscreen\":\"\\u5168\\u5c4f\",\"mejs.play\":\"\\u64ad\\u653e\",\"mejs.pause\":\"\\u6682\\u505c\",\"mejs.time-slider\":\"\\u65f6\\u95f4\\u8f74\",\"mejs.time-help-text\":\"\\u4f7f\\u7528\\u5de6\\/\\u53f3\\u7bad\\u5934\\u952e\\u6765\\u524d\\u8fdb\\u4e00\\u79d2\\uff0c\\u4e0a\\/\\u4e0b\\u7bad\\u5934\\u952e\\u6765\\u524d\\u8fdb\\u5341\\u79d2\\u3002\",\"mejs.live-broadcast\":\"\\u73b0\\u573a\\u76f4\\u64ad\",\"mejs.volume-help-text\":\"\\u4f7f\\u7528\\u4e0a\\/\\u4e0b\\u7bad\\u5934\\u952e\\u6765\\u589e\\u9ad8\\u6216\\u964d\\u4f4e\\u97f3\\u91cf\\u3002\",\"mejs.unmute\":\"\\u53d6\\u6d88\\u9759\\u97f3\",\"mejs.mute\":\"\\u9759\\u97f3\",\"mejs.volume-slider\":\"\\u97f3\\u91cf\",\"mejs.video-player\":\"\\u89c6\\u9891\\u64ad\\u653e\\u5668\",\"mejs.audio-player\":\"\\u97f3\\u9891\\u64ad\\u653e\\u5668\",\"mejs.captions-subtitles\":\"\\u8bf4\\u660e\\u6587\\u5b57\\u6216\\u5b57\\u5e55\",\"mejs.captions-chapters\":\"\\u7ae0\\u8282\",\"mejs.none\":\"\\u65e0\",\"mejs.afrikaans\":\"\\u5357\\u975e\\u8377\\u5170\\u8bed\",\"mejs.albanian\":\"\\u963f\\u5c14\\u5df4\\u5c3c\\u4e9a\\u8bed\",\"mejs.arabic\":\"\\u963f\\u62c9\\u4f2f\\u8bed\",\"mejs.belarusian\":\"\\u767d\\u4fc4\\u7f57\\u65af\\u8bed\",\"mejs.bulgarian\":\"\\u4fdd\\u52a0\\u5229\\u4e9a\\u8bed\",\"mejs.catalan\":\"\\u52a0\\u6cf0\\u7f57\\u5c3c\\u4e9a\\u8bed\",\"mejs.chinese\":\"\\u4e2d\\u6587\",\"mejs.chinese-simplified\":\"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\",\"mejs.chinese-traditional\":\"\\u4e2d\\u6587(\\uff08\\u7e41\\u4f53\\uff09\",\"mejs.croatian\":\"\\u514b\\u7f57\\u5730\\u4e9a\\u8bed\",\"mejs.czech\":\"\\u6377\\u514b\\u8bed\",\"mejs.danish\":\"\\u4e39\\u9ea6\\u8bed\",\"mejs.dutch\":\"\\u8377\\u5170\\u8bed\",\"mejs.english\":\"\\u82f1\\u8bed\",\"mejs.estonian\":\"\\u7231\\u6c99\\u5c3c\\u4e9a\\u8bed\",\"mejs.filipino\":\"\\u83f2\\u5f8b\\u5bbe\\u8bed\",\"mejs.finnish\":\"\\u82ac\\u5170\\u8bed\",\"mejs.french\":\"\\u6cd5\\u8bed\",\"mejs.galician\":\"\\u52a0\\u5229\\u897f\\u4e9a\\u8bed\",\"mejs.german\":\"\\u5fb7\\u8bed\",\"mejs.greek\":\"\\u5e0c\\u814a\\u8bed\",\"mejs.haitian-creole\":\"\\u6d77\\u5730\\u514b\\u91cc\\u5965\\u5c14\\u8bed\",\"mejs.hebrew\":\"\\u5e0c\\u4f2f\\u6765\\u8bed\",\"mejs.hindi\":\"\\u5370\\u5730\\u8bed\",\"mejs.hungarian\":\"\\u5308\\u7259\\u5229\\u8bed\",\"mejs.icelandic\":\"\\u51b0\\u5c9b\\u8bed\",\"mejs.indonesian\":\"\\u5370\\u5ea6\\u5c3c\\u897f\\u4e9a\\u8bed\",\"mejs.irish\":\"\\u7231\\u5c14\\u5170\\u8bed\",\"mejs.italian\":\"\\u610f\\u5927\\u5229\\u8bed\",\"mejs.japanese\":\"\\u65e5\\u8bed\",\"mejs.korean\":\"\\u97e9\\u8bed\",\"mejs.latvian\":\"\\u62c9\\u8131\\u7ef4\\u4e9a\\u8bed\",\"mejs.lithuanian\":\"\\u7acb\\u9676\\u5b9b\\u8bed\",\"mejs.macedonian\":\"\\u9a6c\\u5176\\u987f\\u8bed\",\"mejs.malay\":\"\\u9a6c\\u6765\\u8bed\",\"mejs.maltese\":\"\\u9a6c\\u8033\\u4ed6\\u8bed\",\"mejs.norwegian\":\"\\u632a\\u5a01\\u8bed\",\"mejs.persian\":\"\\u6ce2\\u65af\\u8bed\",\"mejs.polish\":\"\\u6ce2\\u5170\\u8bed\",\"mejs.portuguese\":\"\\u8461\\u8404\\u7259\\u8bed\",\"mejs.romanian\":\"\\u7f57\\u9a6c\\u5c3c\\u4e9a\\u8bed\",\"mejs.russian\":\"\\u4fc4\\u8bed\",\"mejs.serbian\":\"\\u585e\\u5c14\\u7ef4\\u4e9a\\u8bed\",\"mejs.slovak\":\"\\u65af\\u6d1b\\u4f10\\u514b\\u8bed\",\"mejs.slovenian\":\"\\u65af\\u6d1b\\u6587\\u5c3c\\u4e9a\\u8bed\",\"mejs.spanish\":\"\\u897f\\u73ed\\u7259\\u8bed\",\"mejs.swahili\":\"\\u65af\\u74e6\\u5e0c\\u91cc\\u8bed\",\"mejs.swedish\":\"\\u745e\\u5178\\u8bed\",\"mejs.tagalog\":\"\\u4ed6\\u52a0\\u7984\\u8bed\",\"mejs.thai\":\"\\u6cf0\\u8bed\",\"mejs.turkish\":\"\\u571f\\u8033\\u5176\\u8bed\",\"mejs.ukrainian\":\"\\u4e4c\\u514b\\u5170\\u8bed\",\"mejs.vietnamese\":\"\\u8d8a\\u5357\\u8bed\",\"mejs.welsh\":\"\\u5a01\\u5c14\\u58eb\\u8bed\",\"mejs.yiddish\":\"\\u610f\\u7b2c\\u7eea\\u8bed\"}};"
+ ]
+ }
+ },
+ "mediaelement-migrate": {
+ "handle": "mediaelement-migrate",
+ "src": "/wp-includes/js/mediaelement/mediaelement-migrate.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "mediaelement-vimeo": {
+ "handle": "mediaelement-vimeo",
+ "src": "/wp-includes/js/mediaelement/renderers/vimeo.min.js",
+ "deps": [
+ "mediaelement"
+ ],
+ "ver": "4.2.17",
+ "args": 1,
+ "extra": []
+ },
+ "wp-mediaelement": {
+ "handle": "wp-mediaelement",
+ "src": "/wp-includes/js/mediaelement/wp-mediaelement.min.js",
+ "deps": [
+ "mediaelement"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "wp-codemirror": {
+ "handle": "wp-codemirror",
+ "src": "/wp-includes/js/codemirror/codemirror.min.js",
+ "deps": [],
+ "ver": "5.29.1-alpha-ee20357",
+ "extra": []
+ },
+ "csslint": {
+ "handle": "csslint",
+ "src": "/wp-includes/js/codemirror/csslint.js",
+ "deps": [],
+ "ver": "1.0.5",
+ "extra": []
+ },
+ "esprima": {
+ "handle": "esprima",
+ "src": "/wp-includes/js/codemirror/esprima.js",
+ "deps": [],
+ "ver": "4.0.0",
+ "extra": []
+ },
+ "jshint": {
+ "handle": "jshint",
+ "src": "/wp-includes/js/codemirror/fakejshint.js",
+ "deps": [
+ "esprima"
+ ],
+ "ver": "2.9.5",
+ "extra": []
+ },
+ "jsonlint": {
+ "handle": "jsonlint",
+ "src": "/wp-includes/js/codemirror/jsonlint.js",
+ "deps": [],
+ "ver": "1.6.2",
+ "extra": []
+ },
+ "htmlhint": {
+ "handle": "htmlhint",
+ "src": "/wp-includes/js/codemirror/htmlhint.js",
+ "deps": [],
+ "ver": "0.9.14-xwp",
+ "extra": []
+ },
+ "htmlhint-kses": {
+ "handle": "htmlhint-kses",
+ "src": "/wp-includes/js/codemirror/htmlhint-kses.js",
+ "deps": [
+ "htmlhint"
+ ],
+ "ver": false,
+ "extra": []
+ },
+ "code-editor": {
+ "handle": "code-editor",
+ "src": "/wp-admin/js/code-editor.min.js",
+ "deps": [
+ "jquery",
+ "wp-codemirror",
+ "underscore"
+ ],
+ "ver": false,
+ "extra": []
+ },
+ "wp-theme-plugin-editor": {
+ "handle": "wp-theme-plugin-editor",
+ "src": "/wp-admin/js/theme-plugin-editor.min.js",
+ "deps": [
+ "common",
+ "wp-util",
+ "wp-sanitize",
+ "jquery",
+ "jquery-ui-core",
+ "wp-a11y",
+ "underscore",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "wp-playlist": {
+ "handle": "wp-playlist",
+ "src": "/wp-includes/js/mediaelement/wp-playlist.min.js",
+ "deps": [
+ "wp-util",
+ "backbone",
+ "mediaelement"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "zxcvbn-async": {
+ "handle": "zxcvbn-async",
+ "src": "/wp-includes/js/zxcvbn-async.min.js",
+ "deps": [],
+ "ver": "1.0",
+ "extra": {
+ "data": "var _zxcvbnSettings \u003d {\"src\":\"http:\\/\\/wp.test\\/wp-includes\\/js\\/zxcvbn.min.js\"};"
+ }
+ },
+ "password-strength-meter": {
+ "handle": "password-strength-meter",
+ "src": "/wp-admin/js/password-strength-meter.min.js",
+ "deps": [
+ "jquery",
+ "zxcvbn-async",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var pwsL10n \u003d {\"unknown\":\"\\u5bc6\\u7801\\u5f3a\\u5ea6\\u672a\\u77e5\",\"short\":\"\\u975e\\u5e38\\u5f31\",\"bad\":\"\\u5f31\",\"good\":\"\\u4e2d\\u7b49\",\"strong\":\"\\u5f3a\",\"mismatch\":\"\\u4e0d\\u5339\\u914d\"};"
+ },
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "application-passwords": {
+ "handle": "application-passwords",
+ "src": "/wp-admin/js/application-passwords.min.js",
+ "deps": [
+ "jquery",
+ "wp-util",
+ "wp-api-request",
+ "wp-date",
+ "wp-i18n",
+ "wp-hooks"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "auth-app": {
+ "handle": "auth-app",
+ "src": "/wp-admin/js/auth-app.min.js",
+ "deps": [
+ "jquery",
+ "wp-api-request",
+ "wp-i18n",
+ "wp-hooks"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "user-profile": {
+ "handle": "user-profile",
+ "src": "/wp-admin/js/user-profile.min.js",
+ "deps": [
+ "jquery",
+ "password-strength-meter",
+ "wp-util",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var userProfileL10n \u003d {\"user_id\":\"0\",\"nonce\":\"c166979845\"};"
+ },
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "language-chooser": {
+ "handle": "language-chooser",
+ "src": "/wp-admin/js/language-chooser.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "user-suggest": {
+ "handle": "user-suggest",
+ "src": "/wp-admin/js/user-suggest.min.js",
+ "deps": [
+ "jquery-ui-autocomplete"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "admin-bar": {
+ "handle": "admin-bar",
+ "src": "/wp-includes/js/admin-bar.min.js",
+ "deps": [
+ "hoverintent-js"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "wplink": {
+ "handle": "wplink",
+ "src": "/wp-includes/js/wplink.min.js",
+ "deps": [
+ "jquery",
+ "wp-a11y"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var wpLinkL10n \u003d {\"title\":\"\\u63d2\\u5165\\u6216\\u7f16\\u8f91\\u94fe\\u63a5\",\"update\":\"\\u66f4\\u65b0\",\"save\":\"\\u6dfb\\u52a0\\u94fe\\u63a5\",\"noTitle\":\"\\uff08\\u65e0\\u6807\\u9898\\uff09\",\"noMatchesFound\":\"\\u672a\\u627e\\u5230\\u7ed3\\u679c\\u3002\",\"linkSelected\":\"\\u94fe\\u63a5\\u5df2\\u9009\\u62e9\\u3002\",\"linkInserted\":\"\\u94fe\\u63a5\\u5df2\\u63d2\\u5165\\u3002\",\"minInputLength\":\"3\"};"
+ }
+ },
+ "wpdialogs": {
+ "handle": "wpdialogs",
+ "src": "/wp-includes/js/wpdialog.min.js",
+ "deps": [
+ "jquery-ui-dialog"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "word-count": {
+ "handle": "word-count",
+ "src": "/wp-admin/js/word-count.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "media-upload": {
+ "handle": "media-upload",
+ "src": "/wp-admin/js/media-upload.min.js",
+ "deps": [
+ "thickbox",
+ "shortcode"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "hoverIntent": {
+ "handle": "hoverIntent",
+ "src": "/wp-includes/js/hoverIntent.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": "1.10.2",
+ "args": 1,
+ "extra": []
+ },
+ "hoverintent-js": {
+ "handle": "hoverintent-js",
+ "src": "/wp-includes/js/hoverintent-js.min.js",
+ "deps": [],
+ "ver": "2.2.1",
+ "args": 1,
+ "extra": []
+ },
+ "customize-base": {
+ "handle": "customize-base",
+ "src": "/wp-includes/js/customize-base.min.js",
+ "deps": [
+ "jquery",
+ "json2",
+ "underscore"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-loader": {
+ "handle": "customize-loader",
+ "src": "/wp-includes/js/customize-loader.min.js",
+ "deps": [
+ "customize-base"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-preview": {
+ "handle": "customize-preview",
+ "src": "/wp-includes/js/customize-preview.min.js",
+ "deps": [
+ "wp-a11y",
+ "customize-base"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-models": {
+ "handle": "customize-models",
+ "src": "/wp-includes/js/customize-models.js",
+ "deps": [
+ "underscore",
+ "backbone"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-views": {
+ "handle": "customize-views",
+ "src": "/wp-includes/js/customize-views.js",
+ "deps": [
+ "jquery",
+ "underscore",
+ "imgareaselect",
+ "customize-models",
+ "media-editor",
+ "media-views"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-controls": {
+ "handle": "customize-controls",
+ "src": "/wp-admin/js/customize-controls.min.js",
+ "deps": [
+ "customize-base",
+ "wp-a11y",
+ "wp-util",
+ "jquery-ui-core"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var _wpCustomizeControlsL10n \u003d {\"activate\":\"\\u542f\\u7528\\u5e76\\u53d1\\u5e03\",\"save\":\"\\u4fdd\\u5b58\\u5e76\\u53d1\\u5e03\",\"publish\":\"\\u53d1\\u5e03\",\"published\":\"\\u5df2\\u53d1\\u5e03\",\"saveDraft\":\"\\u4fdd\\u5b58\\u8349\\u7a3f\",\"draftSaved\":\"\\u8349\\u7a3f\\u5df2\\u4fdd\\u5b58\",\"updating\":\"\\u6b63\\u5728\\u66f4\\u65b0\",\"schedule\":\"\\u8ba1\\u5212\",\"scheduled\":\"\\u5df2\\u6392\\u5165\\u8ba1\\u5212\",\"invalid\":\"\\u65e0\\u6548\",\"saveBeforeShare\":\"\\u8981\\u5206\\u4eab\\u9884\\u89c8\\uff0c\\u8bf7\\u5148\\u4fdd\\u5b58\\u60a8\\u7684\\u4fee\\u6539\\u3002\",\"futureDateError\":\"\\u60a8\\u5fc5\\u987b\\u63d0\\u4f9b\\u4e00\\u4e2a\\u5c06\\u6765\\u7684\\u65e5\\u671f\\u6765\\u8ba1\\u5212\\u53d1\\u5e03\\u3002\",\"saveAlert\":\"\\u79bb\\u5f00\\u8fd9\\u4e2a\\u9875\\u9762\\uff0c\\u60a8\\u6240\\u505a\\u7684\\u66f4\\u6539\\u5c06\\u4e22\\u5931\\u3002\",\"saved\":\"\\u5df2\\u4fdd\\u5b58\",\"cancel\":\"\\u53d6\\u6d88\",\"close\":\"\\u5173\\u95ed\",\"action\":\"\\u64cd\\u4f5c\",\"discardChanges\":\"\\u653e\\u5f03\\u4fee\\u6539\",\"cheatin\":\"\\u51fa\\u73b0\\u4e86\\u95ee\\u9898\\u3002\",\"notAllowedHeading\":\"\\u60a8\\u9700\\u8981\\u66f4\\u9ad8\\u7ea7\\u522b\\u7684\\u6743\\u9650\\u3002\",\"notAllowed\":\"\\u62b1\\u6b49\\uff0c\\u60a8\\u4e0d\\u80fd\\u81ea\\u5b9a\\u4e49\\u6b64\\u7ad9\\u70b9\\u3002\",\"previewIframeTitle\":\"\\u7ad9\\u70b9\\u9884\\u89c8\",\"loginIframeTitle\":\"\\u4f1a\\u8bdd\\u5df2\\u8fc7\\u671f\",\"collapseSidebar\":\"\\u9690\\u85cf\\u63a7\\u5236\\u680f\",\"expandSidebar\":\"\\u663e\\u793a\\u63a7\\u5236\\u680f\",\"untitledBlogName\":\"\\u672a\\u547d\\u540d\",\"unknownRequestFail\":\"\\u770b\\u6765\\u51fa\\u73b0\\u4e86\\u95ee\\u9898\\u3002\\u8bf7\\u7b49\\u5f85\\u51e0\\u79d2\\u5e76\\u91cd\\u8bd5\\u3002\",\"themeDownloading\":\"\\u6b63\\u5728\\u4e0b\\u8f7d\\u60a8\\u7684\\u65b0\\u4e3b\\u9898\\u2026\",\"themePreviewWait\":\"\\u6b63\\u5728\\u8bbe\\u7f6e\\u5b9e\\u65f6\\u9884\\u89c8\\uff0c\\u8bf7\\u7a0d\\u7b49\\u3002\",\"revertingChanges\":\"\\u56de\\u6eda\\u672a\\u53d1\\u5e03\\u7684\\u4fee\\u6539\\u2026\",\"trashConfirm\":\"\\u60a8\\u786e\\u5b9a\\u8981\\u4e22\\u5f03\\u672a\\u53d1\\u5e03\\u7684\\u4fee\\u6539\\u5417\\uff1f\",\"takenOverMessage\":\"%s\\u5df2\\u63a5\\u7ba1\\u5e76\\u6b63\\u5728\\u5b9a\\u5236\\u3002\",\"autosaveNotice\":\"\\u6709\\u6bd4\\u60a8\\u6b63\\u5728\\u9884\\u89c8\\u7684\\u4fee\\u6539\\u66f4\\u65b0\\u7684\\u81ea\\u52a8\\u4fdd\\u5b58\\u3002\u003ca href\u003d\\\"%s\\\"\u003e\\u6062\\u590d\\u81ea\\u52a8\\u4fdd\\u5b58\u003c\\/a\u003e\",\"videoHeaderNotice\":\"\\u6b64\\u4e3b\\u9898\\u5728\\u6b64\\u9875\\u4e0d\\u652f\\u6301\\u89c6\\u9891\\u9875\\u7709\\u3002\\u8bf7\\u8bbf\\u95ee\\u9996\\u9875\\u6216\\u5176\\u4ed6\\u652f\\u6301\\u89c6\\u9891\\u9875\\u7709\\u7684\\u9875\\u9762\\u3002\",\"allowedFiles\":\"\\u5141\\u8bb8\\u7684\\u6587\\u4ef6\",\"customCssError\":{\"singular\":\"\\u5728\\u60a8\\u4fdd\\u5b58\\u524d\\u5fc5\\u987b\\u4fee\\u6b63%d\\u4e2a\\u9519\\u8bef\\u3002\",\"plural\":\"\\u5728\\u60a8\\u4fdd\\u5b58\\u524d\\u5fc5\\u987b\\u4fee\\u6b63%d\\u4e2a\\u9519\\u8bef\\u3002\"},\"pageOnFrontError\":\"\\u4e3b\\u9875\\u548c\\u6587\\u7ae0\\u9875\\u5fc5\\u987b\\u4e0d\\u540c\\u3002\",\"saveBlockedError\":{\"singular\":\"\\u7531\\u4e8e %s \\u4e2a\\u8bbe\\u7f6e\\u65e0\\u6548\\uff0c\\u65e0\\u6cd5\\u4fdd\\u5b58\\u3002\",\"plural\":\"\\u7531\\u4e8e %s \\u4e2a\\u8bbe\\u7f6e\\u65e0\\u6548\\uff0c\\u65e0\\u6cd5\\u4fdd\\u5b58\\u3002\"},\"scheduleDescription\":\"\\u8ba1\\u5212\\u60a8\\u7684\\u5b9a\\u5236\\u4fee\\u6539\\u6765\\u5728\\u5c06\\u6765\\u7684\\u65e5\\u671f\\u53d1\\u5e03\\u3002\",\"themePreviewUnavailable\":\"\\u62b1\\u6b49\\uff0c\\u5f53\\u60a8\\u8ba1\\u5212\\u66f4\\u6539\\u6216\\u4fdd\\u5b58\\u4e3a\\u8349\\u7a3f\\u65f6\\u65e0\\u6cd5\\u9884\\u89c8\\u65b0\\u4e3b\\u9898\\u3002\\u8bf7\\u53d1\\u5e03\\u60a8\\u7684\\u66f4\\u6539\\u6216\\u7b49\\u5f85\\u5176\\u53d1\\u5e03\\u540e\\u518d\\u8fdb\\u884c\\u9884\\u89c8\\u3002\",\"themeInstallUnavailable\":\"\\u7531\\u4e8e\\u5b89\\u88c5\\u9700\\u8981SFTP\\u51ed\\u636e\\uff0c\\u56e0\\u6b64\\u60a8\\u8fd8\\u65e0\\u6cd5\\u4ece\\u6b64\\u5904\\u5b89\\u88c5\\u65b0\\u4e3b\\u9898\\u3002\\u8bf7\u003ca href\u003d\\\"http:\\/\\/wp.test\\/wp-admin\\/theme-install.php\\\"\u003e\\u5728\\u7ba1\\u7406\\u754c\\u9762\\u6dfb\\u52a0\\u4e3b\\u9898\u003c\\/a\u003e\\u3002\",\"publishSettings\":\"\\u53d1\\u5e03\\u8bbe\\u7f6e\",\"invalidDate\":\"\\u65e0\\u6548\\u65e5\\u671f\\u3002\",\"invalidValue\":\"\\u65e0\\u6548\\u503c\\u3002\",\"blockThemeNotification\":\"\\u597d\\u8036\\uff01\\u60a8\\u7684\\u4e3b\\u9898\\u652f\\u6301\\u5e26\\u6709\\u533a\\u5757\\u7684\\u7ad9\\u70b9\\u7f16\\u8f91\\u3002\u003ca href\u003d\\\"https:\\/\\/wordpress.org\\/documentation\\/article\\/site-editor\\/\\\"\u003e\\u4e86\\u89e3\\u66f4\\u591a\u003c\\/a\u003e\\u3002 \u003cbutton type\u003d\\\"button\\\" data-action\u003d\\\"http:\\/\\/wp.test\\/wp-admin\\/site-editor.php\\\" class\u003d\\\"button switch-to-editor\\\"\u003e\\u4f7f\\u7528\\u7ad9\\u70b9\\u7f16\\u8f91\\u5668\u003c\\/button\u003e\"};"
+ }
+ },
+ "customize-selective-refresh": {
+ "handle": "customize-selective-refresh",
+ "src": "/wp-includes/js/customize-selective-refresh.min.js",
+ "deps": [
+ "jquery",
+ "wp-util",
+ "customize-preview"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-widgets": {
+ "handle": "customize-widgets",
+ "src": "/wp-admin/js/customize-widgets.min.js",
+ "deps": [
+ "jquery",
+ "jquery-ui-sortable",
+ "jquery-ui-droppable",
+ "wp-backbone",
+ "customize-controls"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-preview-widgets": {
+ "handle": "customize-preview-widgets",
+ "src": "/wp-includes/js/customize-preview-widgets.min.js",
+ "deps": [
+ "jquery",
+ "wp-util",
+ "customize-preview",
+ "customize-selective-refresh"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-nav-menus": {
+ "handle": "customize-nav-menus",
+ "src": "/wp-admin/js/customize-nav-menus.min.js",
+ "deps": [
+ "jquery",
+ "wp-backbone",
+ "customize-controls",
+ "accordion",
+ "nav-menu",
+ "wp-sanitize"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "customize-preview-nav-menus": {
+ "handle": "customize-preview-nav-menus",
+ "src": "/wp-includes/js/customize-preview-nav-menus.min.js",
+ "deps": [
+ "jquery",
+ "wp-util",
+ "customize-preview",
+ "customize-selective-refresh"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "wp-custom-header": {
+ "handle": "wp-custom-header",
+ "src": "/wp-includes/js/wp-custom-header.min.js",
+ "deps": [
+ "wp-a11y"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "accordion": {
+ "handle": "accordion",
+ "src": "/wp-admin/js/accordion.min.js",
+ "deps": [
+ "jquery"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "shortcode": {
+ "handle": "shortcode",
+ "src": "/wp-includes/js/shortcode.min.js",
+ "deps": [
+ "underscore"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "media-models": {
+ "handle": "media-models",
+ "src": "/wp-includes/js/media-models.min.js",
+ "deps": [
+ "wp-backbone"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": {
+ "data": "var _wpMediaModelsL10n \u003d {\"settings\":{\"ajaxurl\":\"\\/wp-admin\\/admin-ajax.php\",\"post\":{\"id\":0}}};"
+ }
+ },
+ "wp-embed": {
+ "handle": "wp-embed",
+ "src": "/wp-includes/js/wp-embed.min.js",
+ "deps": [],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "media-views": {
+ "handle": "media-views",
+ "src": "/wp-includes/js/media-views.min.js",
+ "deps": [
+ "utils",
+ "media-models",
+ "wp-plupload",
+ "jquery-ui-sortable",
+ "wp-mediaelement",
+ "wp-api-request",
+ "wp-a11y",
+ "clipboard",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "media-editor": {
+ "handle": "media-editor",
+ "src": "/wp-includes/js/media-editor.min.js",
+ "deps": [
+ "shortcode",
+ "media-views",
+ "wp-i18n"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": [],
+ "textdomain": "default",
+ "translations_path": ""
+ },
+ "media-audiovideo": {
+ "handle": "media-audiovideo",
+ "src": "/wp-includes/js/media-audiovideo.min.js",
+ "deps": [
+ "media-editor"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "mce-view": {
+ "handle": "mce-view",
+ "src": "/wp-includes/js/mce-view.min.js",
+ "deps": [
+ "shortcode",
+ "jquery",
+ "media-views",
+ "media-audiovideo"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ },
+ "wp-api": {
+ "handle": "wp-api",
+ "src": "/wp-includes/js/wp-api.min.js",
+ "deps": [
+ "jquery",
+ "backbone",
+ "underscore",
+ "wp-api-request"
+ ],
+ "ver": false,
+ "args": 1,
+ "extra": []
+ }
+}
\ No newline at end of file
diff --git a/app/theme/wp/siteicon.go b/app/theme/wp/siteicon.go
index 1fdc3ca..164342a 100644
--- a/app/theme/wp/siteicon.go
+++ b/app/theme/wp/siteicon.go
@@ -9,7 +9,7 @@ import (
"strings"
)
-var sizes = []string{"site_icon-270", "site_icon-32", "site_icon-192", "site_icon-180"}
+var iconSizes = []string{"site_icon-270", "site_icon-32", "site_icon-192", "site_icon-180"}
func CalSiteIcon(h *Handle) (r string) {
id := str.ToInteger[uint64](wpconfig.GetOption("site_icon"), 0)
@@ -21,7 +21,7 @@ func CalSiteIcon(h *Handle) (r string) {
return
}
m := strings.Join(strings.Split(icon.AttachmentMetadata.File, "/")[:2], "/")
- size := slice.FilterAndMap(sizes, func(t string) (string, bool) {
+ size := slice.FilterAndMap(iconSizes, func(t string) (string, bool) {
s, ok := icon.AttachmentMetadata.Sizes[t]
if !ok {
return "", false
diff --git a/app/theme/wp/wp.go b/app/theme/wp/wp.go
index 7af924d..4b34edc 100644
--- a/app/theme/wp/wp.go
+++ b/app/theme/wp/wp.go
@@ -14,6 +14,7 @@ import (
"html/template"
"net/http"
"os"
+ "strings"
)
type Handle struct {
@@ -281,3 +282,10 @@ func NewHandleFn(fn HandleFn[*Handle], order float64, name string) HandleCall {
func NothingToDo(h *Handle) {
h.Abort()
}
+
+func (h *Handle) IsHttps() bool {
+ if h.C.Request.TLS != nil {
+ return true
+ }
+ return "https" == strings.ToLower(h.C.Request.Header.Get("X-Forwarded-Proto"))
+}
diff --git a/app/wpconfig/options.go b/app/wpconfig/options.go
index f3e02bb..c239fe0 100644
--- a/app/wpconfig/options.go
+++ b/app/wpconfig/options.go
@@ -2,11 +2,15 @@ package wpconfig
import (
"context"
+ "github.com/fthvgb1/wp-go/app/cmd/reload"
"github.com/fthvgb1/wp-go/app/phphelper"
+ "github.com/fthvgb1/wp-go/app/pkg/config"
"github.com/fthvgb1/wp-go/app/pkg/models"
"github.com/fthvgb1/wp-go/helper/maps"
"github.com/fthvgb1/wp-go/model"
"github.com/fthvgb1/wp-go/safety"
+ "os"
+ "path/filepath"
"strings"
)
@@ -31,15 +35,43 @@ func InitOptions() error {
for _, option := range ops {
options.Store(option["k"], option["v"])
}
+ themeJson = reload.VarsBy(hasThemeJson)
return nil
}
+var themeJson *safety.Var[bool]
+
+func HasThemeJson() bool {
+ if themeJson == nil {
+ return false
+ }
+ return themeJson.Load()
+}
+
+func hasThemeJson() bool {
+ styleSheet := GetOption("stylesheet")
+ rootDir := config.GetConfig().WpDir
+ dir := filepath.Join(rootDir, "wp-content/themes", styleSheet, "theme.json")
+ _, err := os.Stat(dir)
+ if err == nil {
+ return true
+ }
+ template := GetOption("template")
+ dir = filepath.Join(rootDir, "wp-content/themes", template, "theme.json")
+ _, err = os.Stat(dir)
+ return err == nil
+}
+
func GetOption(k string) string {
v, ok := options.Load(k)
if ok {
return v
}
- vv, err := model.GetField[models.Options](ctx, "option_value", model.Conditions(model.Where(model.SqlBuilder{{"option_name", k}})))
+ vv, err := model.GetField[models.Options](ctx, "option_value", model.Conditions(
+ model.Where(
+ model.SqlBuilder{{"option_name", k}}),
+ ),
+ )
options.Store(k, vv)
if err != nil {
return ""
diff --git a/helper/maps/function.go b/helper/maps/function.go
index e8f6279..23edaa0 100644
--- a/helper/maps/function.go
+++ b/helper/maps/function.go
@@ -1,6 +1,10 @@
package maps
-import "strings"
+import (
+ "github.com/fthvgb1/wp-go/helper/slice"
+ "golang.org/x/exp/constraints"
+ "strings"
+)
func GetStrAnyVal[T any](m map[string]any, key string, delimiter ...string) (r T, o bool) {
separator := "."
@@ -111,7 +115,7 @@ func GetAnyAnyValWithDefaults[T any](m map[any]any, defaults T, key ...any) (r T
return
}
-func RecursiveSetStrVal[T any](m map[string]any, k string, v T, delimiter ...string) {
+func SetStrAnyVal[T any](m map[string]any, k string, v T, delimiter ...string) {
del := "."
if len(delimiter) > 0 && delimiter[0] != "" {
del = delimiter[0]
@@ -148,7 +152,7 @@ func RecursiveSetStrVal[T any](m map[string]any, k string, v T, delimiter ...str
mx[kk[len(kk)-1]] = v
}
-func RecursiveSetAnyVal[T any](m map[any]any, v T, k ...any) {
+func SetAnyAnyVal[T any](m map[any]any, v T, k ...any) {
if len(k) < 1 {
return
} else if len(k) == 1 {
@@ -162,10 +166,10 @@ func RecursiveSetAnyVal[T any](m map[any]any, v T, k ...any) {
mm = map[any]any{}
preKey := k[0:i]
if len(preKey) == 0 {
- RecursiveSetAnyVal(m, mm, key...)
+ SetAnyAnyVal(m, mm, key...)
} else {
m, _ := GetAnyAnyMapVal[map[any]any](m, preKey...)
- RecursiveSetAnyVal(m, mm, k[i])
+ SetAnyAnyVal(m, mm, k[i])
}
}
}
@@ -173,3 +177,26 @@ func RecursiveSetAnyVal[T any](m map[any]any, v T, k ...any) {
mm, _ := GetAnyAnyMapVal[map[any]any](m, key...)
mm[k[len(k)-1]] = v
}
+
+func AscEahByKey[K constraints.Ordered, V any](m map[K]V, fn func(K, V)) {
+ orderedEahByKey(m, slice.ASC, fn)
+}
+func DescEahByKey[K constraints.Ordered, V any](m map[K]V, fn func(K, V)) {
+ orderedEahByKey(m, slice.ASC, fn)
+}
+
+func orderedEahByKey[K constraints.Ordered, V any](m map[K]V, ordered int, fn func(K, V)) {
+ keys := Keys(m)
+ slice.Sorts(keys, ordered)
+ for _, key := range keys {
+ fn(key, m[key])
+ }
+}
+
+func Flip[K, V comparable](m map[K]V) map[V]K {
+ mm := make(map[V]K, len(m))
+ for k, v := range m {
+ mm[v] = k
+ }
+ return mm
+}
diff --git a/helper/maps/function_test.go b/helper/maps/function_test.go
index 9807712..c69d52f 100644
--- a/helper/maps/function_test.go
+++ b/helper/maps/function_test.go
@@ -240,7 +240,7 @@ func TestRecursiveSetAnyVal(t *testing.T) {
target := map[any]any{"m": map[any]any{3: map[any]any{"key": 3.4}}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- RecursiveSetAnyVal(tt.args.m, tt.args.v, tt.args.k...)
+ SetAnyAnyVal(tt.args.m, tt.args.v, tt.args.k...)
if !reflect.DeepEqual(tt.args.m, target) {
t.Fatalf("not equal target")
}
@@ -287,7 +287,7 @@ func TestRecursiveSetStrVal(t *testing.T) {
target := map[string]any{"aa": map[string]any{"bb": map[string]any{"cc": 1}}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- RecursiveSetStrVal(tt.args.m, tt.args.k, tt.args.v)
+ SetStrAnyVal(tt.args.m, tt.args.k, tt.args.v)
if !reflect.DeepEqual(target, tt.args.m) {
t.Fatal()
}
diff --git a/helper/number/number.go b/helper/number/number.go
index 40bbeee..7e22ce4 100644
--- a/helper/number/number.go
+++ b/helper/number/number.go
@@ -106,3 +106,8 @@ func Counters[T constraints.Integer]() func() T {
return count
}
}
+
+func Round(f float64, precision int) float64 {
+ p := math.Pow10(precision)
+ return math.Floor(f*p+0.5) / p
+}
diff --git a/helper/strings/strings.go b/helper/strings/strings.go
index b2219b9..6cc38c7 100644
--- a/helper/strings/strings.go
+++ b/helper/strings/strings.go
@@ -93,6 +93,10 @@ func Replace(s string, replace map[string]string) string {
}
return s
}
+
+// Replaces replace string by slice as order
+//
+// [][]string sub []string like {old1,old2,old3,....,newString} all old[x] will be replaced by lasted newString
func Replaces(s string, replace [][]string) string {
for _, v := range replace {
if len(v) < 1 {
@@ -100,7 +104,9 @@ func Replaces(s string, replace [][]string) string {
} else if len(v) == 1 {
s = strings.ReplaceAll(s, v[0], "")
} else {
- s = strings.ReplaceAll(s, v[0], v[1])
+ for _, s2 := range v[0 : len(v)-1] {
+ s = strings.ReplaceAll(s, s2, v[len(v)-1])
+ }
}
}
return s