tinymce富文本格式刷

直接引入,在plugins和toolbar中添加 formatpainter

复制代码
!function(l) {
    "use strict";
    var e, r, t, n, o, m, i, d, a, u, c, v, s, g = function(e) {
        var r = e
          , t = function() {
            return r
        };
        return {
            get: t,
            set: function(e) {
                r = e
            },
            clone: function() {
                return g(t())
            }
        }
    }, f = function(e) {
        return parseInt(e, 10)
    }, p = function(e, r, t) {
        return {
            major: e,
            minor: r,
            patch: t
        }
    }, h = function(e) {
        var r = /([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(e);
        return r ? p(f(r[1]), f(r[2]), f(r[3])) : p(0, 0, 0)
    }, b = function(e, r) {
        var t = e - r;
        return 0 === t ? 0 : 0 < t ? 1 : -1
    }, y = function(e, r) {
        return !!e && -1 === function(e, r) {
            var t = b(e.major, r.major);
            if (0 !== t)
                return t;
            var n = b(e.minor, r.minor);
            if (0 !== n)
                return n;
            var o = b(e.patch, r.patch);
            return 0 !== o ? o : 0
        }(h([(t = e).majorVersion, t.minorVersion].join(".").split(".").slice(0, 3).join(".")), h(r));
        var t
    }, S = function() {}, O = function(e) {
        return function() {
            return e
        }
    }, N = O(!1), w = O(!0), T = function() {
        return x(0, 0)
    }, x = function(e, r) {
        return {
            major: e,
            minor: r
        }
    }, E = {
        nu: x,
        detect: function(e, r) {
            var t = String(r).toLowerCase();
            return 0 === e.length ? T() : function(e, r) {
                var t = function(e, r) {
                    for (var t = 0; t < e.length; t++) {
                        var n = e[t];
                        if (n.test(r))
                            return n
                    }
                }(e, r);
                if (!t)
                    return {
                        major: 0,
                        minor: 0
                    };
                var n = function(e) {
                    return Number(r.replace(t, "$" + e))
                };
                return x(n(1), n(2))
            }(e, t)
        },
        unknown: T
    }, k = "Edge", A = "Chrome", _ = "Opera", D = "Firefox", C = "Safari", L = function(e, r) {
        return function() {
            return r === e
        }
    }, P = function(e) {
        var r = e.current;
        return {
            current: r,
            version: e.version,
            isEdge: L(k, r),
            isChrome: L(A, r),
            isIE: L("IE", r),
            isOpera: L(_, r),
            isFirefox: L(D, r),
            isSafari: L(C, r)
        }
    }, R = {
        unknown: function() {
            return P({
                current: void 0,
                version: E.unknown()
            })
        },
        nu: P,
        edge: O(k),
        chrome: O(A),
        ie: O("IE"),
        opera: O(_),
        firefox: O(D),
        safari: O(C)
    }, I = "Windows", F = "Android", M = "Linux", B = "Solaris", j = "FreeBSD", U = function(e, r) {
        return function() {
            return r === e
        }
    }, V = function(e) {
        var r = e.current;
        return {
            current: r,
            version: e.version,
            isWindows: U(I, r),
            isiOS: U("iOS", r),
            isAndroid: U(F, r),
            isOSX: U("OSX", r),
            isLinux: U(M, r),
            isSolaris: U(B, r),
            isFreeBSD: U(j, r)
        }
    }, q = {
        unknown: function() {
            return V({
                current: void 0,
                version: E.unknown()
            })
        },
        nu: V,
        windows: O(I),
        ios: O("iOS"),
        android: O(F),
        linux: O(M),
        osx: O("OSX"),
        solaris: O(B),
        freebsd: O(j)
    }, z = function() {
        return X
    }, X = (e = function(e) {
        return e.isNone()
    }
    ,
    n = {
        fold: function(e, r) {
            return e()
        },
        is: N,
        isSome: N,
        isNone: w,
        getOr: t = function(e) {
            return e
        }
        ,
        getOrThunk: r = function(e) {
            return e()
        }
        ,
        getOrDie: function(e) {
            throw new Error(e || "error: getOrDie called on none.")
        },
        getOrNull: O(null),
        getOrUndefined: O(void 0),
        or: t,
        orThunk: r,
        map: z,
        each: S,
        bind: z,
        exists: N,
        forall: w,
        filter: z,
        equals: e,
        equals_: e,
        toArray: function() {
            return []
        },
        toString: O("none()")
    },
    Object.freeze && Object.freeze(n),
    n), H = function(t) {
        var e = O(t)
          , r = function() {
            return o
        }
          , n = function(e) {
            return e(t)
        }
          , o = {
            fold: function(e, r) {
                return r(t)
            },
            is: function(e) {
                return t === e
            },
            isSome: w,
            isNone: N,
            getOr: e,
            getOrThunk: e,
            getOrDie: e,
            getOrNull: e,
            getOrUndefined: e,
            or: r,
            orThunk: r,
            map: function(e) {
                return H(e(t))
            },
            each: function(e) {
                e(t)
            },
            bind: n,
            exists: n,
            forall: n,
            filter: function(e) {
                return e(t) ? o : X
            },
            toArray: function() {
                return [t]
            },
            toString: function() {
                return "some(" + t + ")"
            },
            equals: function(e) {
                return e.is(t)
            },
            equals_: function(e, r) {
                return e.fold(N, function(e) {
                    return r(t, e)
                })
            }
        };
        return o
    }, W = {
        some: H,
        none: z,
        from: function(e) {
            return null == e ? X : H(e)
        }
    }, Y = function(r) {
        return function(e) {
            return function(e) {
                if (null === e)
                    return "null";
                var r = typeof e;
                return "object" === r && (Array.prototype.isPrototypeOf(e) || e.constructor && "Array" === e.constructor.name) ? "array" : "object" === r && (String.prototype.isPrototypeOf(e) || e.constructor && "String" === e.constructor.name) ? "string" : r
            }(e) === r
        }
    }, G = Y("string"), $ = Y("array"), K = Y("boolean"), Z = Y("function"), J = Y("number"), Q = Array.prototype.slice, ee = Array.prototype.indexOf, re = Array.prototype.push, te = function(e, r) {
        return t = e,
        n = r,
        -1 < ee.call(t, n);
        var t, n
    }, ne = function(e, r) {
        for (var t = 0, n = e.length; t < n; t++) {
            if (r(e[t], t))
                return !0
        }
        return !1
    }, oe = function(e, r) {
        for (var t = e.length, n = new Array(t), o = 0; o < t; o++) {
            var i = e[o];
            n[o] = r(i, o)
        }
        return n
    }, ie = function(e, r) {
        for (var t = [], n = 0, o = e.length; n < o; n++) {
            var i = e[n];
            r(i, n) && t.push(i)
        }
        return t
    }, ae = function(e, r) {
        for (var t = 0, n = e.length; t < n; t++) {
            var o = e[t];
            if (r(o, t))
                return W.some(o)
        }
        return W.none()
    }, ue = function(e, r) {
        return function(e) {
            for (var r = [], t = 0, n = e.length; t < n; ++t) {
                if (!$(e[t]))
                    throw new Error("Arr.flatten item " + t + " was not an array, input: " + e);
                re.apply(r, e[t])
            }
            return r
        }(oe(e, r))
    }, ce = (Z(Array.from) && Array.from,
    function(e, r) {
        var t = String(r).toLowerCase();
        return ae(e, function(e) {
            return e.search(t)
        })
    }
    ), se = function(e, t) {
        return ce(e, t).map(function(e) {
            var r = E.detect(e.versionRegexes, t);
            return {
                current: e.name,
                version: r
            }
        })
    }, fe = function(e, t) {
        return ce(e, t).map(function(e) {
            var r = E.detect(e.versionRegexes, t);
            return {
                current: e.name,
                version: r
            }
        })
    }, le = function(e, r) {
        return -1 !== e.indexOf(r)
    }, me = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, de = function(r) {
        return function(e) {
            return le(e, r)
        }
    }, ve = [{
        name: "Edge",
        versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
        search: function(e) {
            return le(e, "edge/") && le(e, "chrome") && le(e, "safari") && le(e, "applewebkit")
        }
    }, {
        name: "Chrome",
        versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, me],
        search: function(e) {
            return le(e, "chrome") && !le(e, "chromeframe")
        }
    }, {
        name: "IE",
        versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
        search: function(e) {
            return le(e, "msie") || le(e, "trident")
        }
    }, {
        name: "Opera",
        versionRegexes: [me, /.*?opera\/([0-9]+)\.([0-9]+).*/],
        search: de("opera")
    }, {
        name: "Firefox",
        versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
        search: de("firefox")
    }, {
        name: "Safari",
        versionRegexes: [me, /.*?cpu os ([0-9]+)_([0-9]+).*/],
        search: function(e) {
            return (le(e, "safari") || le(e, "mobile/")) && le(e, "applewebkit")
        }
    }], ge = [{
        name: "Windows",
        search: de("win"),
        versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
    }, {
        name: "iOS",
        search: function(e) {
            return le(e, "iphone") || le(e, "ipad")
        },
        versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/]
    }, {
        name: "Android",
        search: de("android"),
        versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
    }, {
        name: "OSX",
        search: de("os x"),
        versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
    }, {
        name: "Linux",
        search: de("linux"),
        versionRegexes: []
    }, {
        name: "Solaris",
        search: de("sunos"),
        versionRegexes: []
    }, {
        name: "FreeBSD",
        search: de("freebsd"),
        versionRegexes: []
    }], pe = {
        browsers: O(ve),
        oses: O(ge)
    }, he = g(function(e, r) {
        var t, n, o, i, a, u, c, s, f, l, m, d, v = pe.browsers(), g = pe.oses(), p = se(v, e).fold(R.unknown, R.nu), h = fe(g, e).fold(q.unknown, q.nu);
        return {
            browser: p,
            os: h,
            deviceType: (n = p,
            o = e,
            i = r,
            a = (t = h).isiOS() && !0 === /ipad/i.test(o),
            u = t.isiOS() && !a,
            c = t.isiOS() || t.isAndroid(),
            s = c || i("(pointer:coarse)"),
            f = a || !u && c && i("(min-device-width:768px)"),
            l = u || c && !f,
            m = n.isSafari() && t.isiOS() && !1 === /safari/i.test(o),
            d = !l && !f && !m,
            {
                isiPad: O(a),
                isiPhone: O(u),
                isTablet: O(f),
                isPhone: O(l),
                isTouch: O(s),
                isAndroid: t.isAndroid,
                isiOS: t.isiOS,
                isWebView: O(m),
                isDesktop: O(d)
            })
        }
    }(l.navigator.userAgent, function(e) {
        return l.window.matchMedia(e).matches
    })), be = function() {
        return he.get()
    }, ye = Object.keys, Se = Object.hasOwnProperty, Oe = function(e, r) {
        for (var t = ye(e), n = 0, o = t.length; n < o; n++) {
            var i = t[n];
            r(e[i], i)
        }
    }, Ne = function(e, n) {
        var o = {};
        return Oe(e, function(e, r) {
            var t = n(e, r);
            o[t.k] = t.v
        }),
        o
    }, we = function(e) {
        return t = function(e) {
            return e
        }
        ,
        n = [],
        Oe(e, function(e, r) {
            n.push(t(e, r))
        }),
        n;
        var t, n
    }, Te = function(e, r) {
        return xe(e, r) ? W.from(e[r]) : W.none()
    }, xe = function(e, r) {
        return Se.call(e, r)
    }, Ee = (l.Node.ATTRIBUTE_NODE,
    l.Node.CDATA_SECTION_NODE,
    l.Node.COMMENT_NODE,
    l.Node.DOCUMENT_NODE,
    l.Node.DOCUMENT_TYPE_NODE,
    l.Node.DOCUMENT_FRAGMENT_NODE,
    l.Node.ELEMENT_NODE), ke = l.Node.TEXT_NODE, Ae = (l.Node.PROCESSING_INSTRUCTION_NODE,
    l.Node.ENTITY_REFERENCE_NODE,
    l.Node.ENTITY_NODE,
    l.Node.NOTATION_NODE,
    void 0 !== l.window ? l.window : Function("return this;")(),
    o = ke,
    function(e) {
        return e.dom().nodeType === o
    }
    ), _e = function(e, r, t) {
        !function(e, r, t) {
            if (!(G(t) || K(t) || J(t)))
                throw l.console.error("Invalid call to Attr.set. Key ", r, ":: Value ", t, ":: Element ", e),
                new Error("Attribute value was not simple");
            e.setAttribute(r, t + "")
        }(e.dom(), r, t)
    }, De = function(e, r) {
        var t = e.dom().getAttribute(r);
        return null === t ? void 0 : t
    }, Ce = function(e, r) {
        e.dom().removeAttribute(r)
    }, Le = function(e, r) {
        var t = De(e, r);
        return void 0 === t || "" === t ? [] : t.split(" ")
    }, Pe = function(e) {
        return void 0 !== e.dom().classList
    }, Re = function(e) {
        return Le(e, "class")
    }, Ie = function(e, r) {
        return o = r,
        i = Le(t = e, n = "class").concat([o]),
        _e(t, n, i.join(" ")),
        !0;
        var t, n, o, i
    }, Fe = function(e, r) {
        return o = r,
        0 < (i = ie(Le(t = e, n = "class"), function(e) {
            return e !== o
        })).length ? _e(t, n, i.join(" ")) : Ce(t, n),
        !1;
        var t, n, o, i
    }, Me = function(e, r) {
        var t;
        Pe(e) ? e.dom().classList.remove(r) : Fe(e, r);
        0 === (Pe(t = e) ? t.dom().classList : Re(t)).length && Ce(t, "class")
    }, Be = function(e) {
        if (null == e)
            throw new Error("Node cannot be null or undefined");
        return {
            dom: O(e)
        }
    }, je = {
        fromHtml: function(e, r) {
            var t = (r || l.document).createElement("div");
            if (t.innerHTML = e,
            !t.hasChildNodes() || 1 < t.childNodes.length)
                throw l.console.error("HTML does not have a single root node", e),
                new Error("HTML must have a single root node");
            return Be(t.childNodes[0])
        },
        fromTag: function(e, r) {
            var t = (r || l.document).createElement(e);
            return Be(t)
        },
        fromText: function(e, r) {
            var t = (r || l.document).createTextNode(e);
            return Be(t)
        },
        fromDom: Be,
        fromPoint: function(e, r, t) {
            var n = e.dom();
            return W.from(n.elementFromPoint(r, t)).map(Be)
        }
    }, Ue = function(e, r) {
        e.fire("FormatPainterToggle", {
            state: r
        })
    };
    (i = m || (m = {})).Retrival = "Retrieval",
    i.Application = "Application",
    (a = d || (d = {})).ListSchema = "ListSchema",
    a.SubstitutionSchema = "SubstitionSchema",
    (c = u || (u = {})).InsertUnorderedList = "InsertUnorderedList",
    c.InsertOrderedList = "InsertOrderedList",
    c.InsertDefinitionList = "InsertDefinitionList",
    (s = v || (v = {})).Table = "Table",
    s.Unspecified = "Unspecified";
    var Ve = function(e) {
        var r, t;
        r = je.fromDom(e.getBody()),
        t = "tox-cursor-format-painter",
        Pe(r) ? r.dom().classList.add(t) : Ie(r, t)
    }
      , qe = function(e, r) {
        var t;
        t = e,
        Me(je.fromDom(t.getBody()), "tox-cursor-format-painter"),
        r.set(m.Retrival),
        Ue(e, !1)
    }
      , ze = function(e, r) {
        r.get() === m.Application ? qe(e, r) : function(r, t) {
            var n = be()
              , o = g(!1);
            Ve(r),
            t.set(m.Application),
            Ue(r, !0),
            r.execCommand("mceRetrieveFormats");
            var i = function() {
                r.execCommand("mcePaintFormats"),
                qe(r, t)
            }
              , e = function() {
                t.get() === m.Application && i(),
                s()
            }
              , a = function(e) {
                t.get() === m.Application && ("touchcancel" === e.type && n.os.isAndroid() ? r.once("contextmenu", i) : o.get() ? i() : r.once("selectionchange", i)),
                s()
            }
              , u = function(e) {
                27 === e.keyCode && (qe(r, t),
                s())
            }
              , c = function(e) {
                o.set("touchmove" === e.type)
            };
            r.on("click", e),
            r.on("touchstart touchmove", c),
            r.on("touchend touchcancel", a),
            r.on("keydown", u);
            var s = function() {
                r.off("click", e),
                r.off("touchstart touchmove", c),
                r.off("touchend touchcancel", a),
                r.off("keydown", u)
            }
        }(e, r)
    }
      , Xe = function(e, r, t) {
        return 0 != (e.compareDocumentPosition(r) & t)
    }
      , He = function(e, r) {
        return Xe(e, r, l.Node.DOCUMENT_POSITION_CONTAINED_BY)
    }
      , We = Ee
      , Ye = function(e, r) {
        return e.dom() === r.dom()
    }
      , Ge = (be().browser.isIE(),
    function(e, r) {
        var t = e.dom();
        if (t.nodeType !== We)
            return !1;
        var n = t;
        if (void 0 !== n.matches)
            return n.matches(r);
        if (void 0 !== n.msMatchesSelector)
            return n.msMatchesSelector(r);
        if (void 0 !== n.webkitMatchesSelector)
            return n.webkitMatchesSelector(r);
        if (void 0 !== n.mozMatchesSelector)
            return n.mozMatchesSelector(r);
        throw new Error("Browser lacks native selectors")
    }
    );
    var $e = function(e, r, t) {
        for (var n = e.dom(), o = Z(t) ? t : O(!1); n.parentNode; ) {
            n = n.parentNode;
            var i = je.fromDom(n);
            if (r(i))
                return W.some(i);
            if (o(i))
                break
        }
        return W.none()
    }
      , Ke = function(e, r, t) {
        var n, o, i, a;
        return n = $e,
        a = t,
        function(e, r) {
            return r(e)
        }(o = e, i = r) ? W.some(o) : Z(a) && a(o) ? W.none() : n(o, i, a)
    }
      , Ze = {
        formatpainter_checklist: {
            selector: "ul",
            classes: "tox-checklist"
        },
        formatpainter_liststyletype: {
            selector: "ul,ol",
            styles: {
                listStyleType: "%value"
            }
        },
        formatpainter_borderstyle: {
            selector: "td,th",
            styles: {
                borderTopStyle: "%valueTop",
                borderRightStyle: "%valueRight",
                borderBottomStyle: "%valueBottom",
                borderLeftStyle: "%valueLeft"
            },
            remove_similar: !0
        },
        formatpainter_bordercolor: {
            selector: "td,th",
            styles: {
                borderTopColor: "%valueTop",
                borderRightColor: "%valueRight",
                borderBottomColor: "%valueBottom",
                borderLeftColor: "%valueLeft"
            },
            remove_similar: !0
        },
        formatpainter_backgroundcolor: {
            selector: "td,th",
            styles: {
                backgroundColor: "%value"
            },
            remove_similar: !0
        },
        formatpainter_removeformat: [{
            selector: "b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",
            remove: "all",
            split: !0,
            expand: !1,
            block_expand: !0,
            deep: !0
        }, {
            selector: "span",
            attributes: ["style", "class"],
            remove: "empty",
            split: !0,
            expand: !1,
            deep: !0
        }, {
            selector: "*:not(tr,td,th,table)",
            attributes: ["style", "class"],
            split: !1,
            expand: !1,
            deep: !0
        }],
        formatpainter_legacy_font: {
            inline: "font",
            attributes: {
                size: "%value"
            }
        }
    }
      , Je = function() {
        for (var e = 0, r = 0, t = arguments.length; r < t; r++)
            e += arguments[r].length;
        var n = Array(e)
          , o = 0;
        for (r = 0; r < t; r++)
            for (var i = arguments[r], a = 0, u = i.length; a < u; a++,
            o++)
                n[o] = i[a];
        return n
    }
      , Qe = function(i, e) {
        return Te(e, "selector").exists(function(e) {
            var r = i.getBody()
              , t = i.selection.getStart()
              , n = i.dom.getParents(t, O(!0), r)
              , o = i.selection.getSelectedBlocks();
            return i.dom.is(Je(n, o), e)
        })
    }
      , er = function(n, e) {
        return ne(n.formatter.get(e), function(e) {
            return r = n,
            xe(t = e, "inline") && !Qe(r, t);
            var r, t
        })
    }
      , rr = function(n, e, r) {
        return ne(e.get(r), function(e) {
            return r = n,
            xe(t = e, "block") || Qe(r, t);
            var r, t
        })
    }
      , tr = function(e) {
        return 1 < e.length && "%" === e.charAt(0)
    }
      , nr = function(e, r) {
        return ne(e.formatter.get(r), function(e) {
            return t = Te(r = e, "styles").exists(function(e) {
                return ne(we(e), tr)
            }),
            n = Te(r, "attributes").exists(function(e) {
                return ne(we(e), tr)
            }),
            t || n;
            var r, t, n
        })
    }
      , or = function(e) {
        return Ge(e, "OL,UL,DL")
    }
      , ir = function(e) {
        return Ge(e, "LI,DT,DD")
    }
      , ar = function(e, r, t) {
        var n, o = e.formatter, i = er(e, t.formatName), a = rr(e, o, t.formatName), u = (n = t.formatName,
        te(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], n));
        (r.table && u || r.inline && i || r.block && a && !u) && o.apply(t.formatName, t.substitutedVariables)
    }
      , ur = function(e, r) {
        var t, n, o, i = function(e) {
            return Ye(e, r)
        };
        return (t = Ke(je.fromDom(e.getStart()), or, i),
        n = Ke(je.fromDom(e.getEnd()), or, i),
        o = function(e, r) {
            return Ye(e, r)
        }
        ,
        t.isSome() && n.isSome() ? W.some(o(t.getOrDie(), n.getOrDie())) : W.none()).getOr(!1)
    }
      , cr = function(e) {
        var r = e.selection
          , t = r.getRng()
          , n = je.fromDom(e.getBody())
          , o = ie(e.selection.getSelectedBlocks().map(je.fromDom), ir)
          , i = t.collapsed && o.length
          , a = o.length && !ur(r, n);
        return 1 < o.length || i || a
    }
      , sr = function(n, e) {
        var r, t;
        r = n,
        t = e.context,
        r.formatter.remove("formatpainter_removeformat"),
        t === v.Table && function(e, r) {
            for (var t = 0, n = e.length; t < n; t++)
                r(e[t], t)
        }(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], function(e) {
            r.formatter.remove(e)
        }),
        cr(r) && r.execCommand("RemoveList");
        var o, i, a, u, c, s, f = (a = (o = n).selection.getStart(),
        u = o.selection.getRng().collapsed,
        c = 0 < o.dom.select("td[data-mce-selected]").length,
        s = !!o.dom.getParent(a, "TABLE"),
        {
            inline: !0,
            table: u && s || c,
            block: u || (i = o.selection,
            1 < i.getSelectedBlocks().length) || c
        });
        e.schemas.forEach(function(e) {
            switch (e.kind) {
            case d.ListSchema:
                r = n,
                t = e,
                f.block && r.execCommand(t.command);
                break;
            case d.SubstitutionSchema:
                ar(n, f, e)
            }
            var r, t
        })
    }
      , fr = function(e) {
        return Pe(e) ? function(e) {
            for (var r = e.dom().classList, t = new Array(r.length), n = 0; n < r.length; n++)
                t[n] = r.item(n);
            return t
        }(e) : Re(e)
    }
      , lr = function(e, r) {
        var t, n, o = e.dom(), i = l.window.getComputedStyle(o).getPropertyValue(r), a = "" !== i || null != (n = Ae(t = e) ? t.dom().parentNode : t.dom()) && n.ownerDocument.body.contains(n) ? i : mr(o, r);
        return null === a ? void 0 : a
    }
      , mr = function(e, r) {
        return void 0 !== (t = e).style && Z(t.style.getPropertyValue) ? e.style.getPropertyValue(r) : "";
        var t
    }
      , dr = function() {
        return (dr = Object.assign || function(e) {
            for (var r, t = 1, n = arguments.length; t < n; t++)
                for (var o in r = arguments[t])
                    Object.prototype.hasOwnProperty.call(r, o) && (e[o] = r[o]);
            return e
        }
        ).apply(this, arguments)
    }
      , vr = function() {
        for (var e = 0, r = 0, t = arguments.length; r < t; r++)
            e += arguments[r].length;
        var n = Array(e)
          , o = 0;
        for (r = 0; r < t; r++)
            for (var i = arguments[r], a = 0, u = i.length; a < u; a++,
            o++)
                n[o] = i[a];
        return n
    }
      , gr = function(o, e) {
        return Ne(e, function(e, r) {
            return {
                k: e.slice(1, e.length),
                v: (t = o,
                n = r,
                "class" === n ? fr(t).filter(function(e) {
                    return !/^(mce-.*)/.test(e)
                }).join(" ") : De(t, n))
            };
            var t, n
        })
    }
      , pr = function(e) {
        return (r = e,
        t = function(e) {
            return 1 < (r = e).length && "%" === r.charAt(0);
            var r
        }
        ,
        n = {},
        o = {},
        Oe(r, function(e, r) {
            (t(e, r) ? n : o)[r] = e
        }),
        {
            t: n,
            f: o
        }).t;
        var r, t, n, o
    }
      , hr = function(e, t) {
        var r = Te(e, "styles").map(function(e) {
            return n = t,
            r = pr(e),
            Ne(r, function(e, r) {
                return {
                    k: e.slice(1, e.length),
                    v: lr(n, (t = r,
                    t.replace(/([A-Z])/g, function(e) {
                        return "-" + e[0].toLowerCase()
                    })))
                };
                var t
            });
            var n, r
        })
          , n = Te(e, "attributes").map(function(e) {
            return gr(t, pr(e))
        })
          , o = dr(dr({}, r.getOr({})), n.getOr({}));
        return we(o).every(function(e) {
            return "" !== e
        }) ? W.some(o) : W.none()
    }
      , br = function(e, r, t) {
        return (n = e.get(r),
        0 === n.length ? W.none() : W.some(n[0])).bind(function(e) {
            return hr(e, t)
        }).map(function(e) {
            return {
                kind: d.SubstitutionSchema,
                formatName: r,
                substitutedVariables: e
            }
        });
        var n
    }
      , yr = function(t, n) {
        return (e = t,
        r = e.getParam("formatpainter_blacklisted_formats", "link,address,removeformat,formatpainter_removeformat", "string").split(/[ ,]/),
        ye(e.formatter.get()).filter(function(e) {
            return !te(r, e)
        })).filter(function(e) {
            var r = nr(t, e);
            return t.formatter.matchNode(n.dom(), e, {}, r)
        });
        var e, r
    }
      , Sr = function(e) {
        return (r = e,
        ae(we(u), function(e) {
            return r.queryCommandState(e)
        })).map(function(e) {
            return {
                kind: d.ListSchema,
                command: e
            }
        });
        var r
    }
      , Or = function(e) {
        var r, t, n, o, i, a = e.dom, u = e.selection.getStart();
        return {
            schemas: vr(Sr(e).toArray(), (n = e,
            o = u,
            i = n.dom.getParents(o, O(!0)),
            ue(oe(i, je.fromDom), function(r) {
                return ue(yr(n, r), function(e) {
                    return br(n.formatter, e, r).toArray()
                })
            }))),
            context: (r = a,
            t = u,
            r.getParent(t, "TABLE") ? v.Table : v.Unspecified)
        }
    }
      , Nr = function(e) {
        if (y(tinymce, "4.9.0"))
            return l.window.console.error("The format painter plugin requires at least version 4.9.0 of TinyMCE."),
            {};
        var t, r, n, o, i, a, u, c, s = g(m.Retrival), f = g({
            schemas: [],
            context: v.Unspecified
        });
        return (t = e).on("PreInit", function() {
            Oe(Ze, function(e, r) {
                t.formatter.get(r) || t.formatter.register(r, e)
            })
        }),
        n = s,
        o = f,
        (r = e).addCommand("mceToggleFormatPainter", function() {
            ze(r, n)
        }),
        r.addCommand("mcePaintFormats", function() {
            r.undoManager.transact(function() {
                sr(r, o.get())
            })
        }),
        r.addCommand("mceRetrieveFormats", function() {
            o.set(Or(r))
        }),
        (i = e).ui ? (u = i).ui.registry.addToggleButton("formatpainter", {
            active: !1,
            icon: "format-painter",
            tooltip: "Format Painter",
            onAction: function() {
                return u.execCommand("mceToggleFormatPainter")
            },
            onSetup: function(r) {
                var e = function(e) {
                    r.setActive(e.state)
                };
                return u.on("FormatPainterToggle", e),
                function() {
                    return u.off("FormatPainterToggle", e)
                }
            }
        }) : (a = i).addButton("formatpainter", {
            active: !1,
            icon: "format-painter",
            tooltip: "Format Painter",
            cmd: "mceToggleFormatPainter",
            onPostRender: function(r) {
                a.on("FormatPainterToggle", function(e) {
                    r.control.active(e.state)
                })
            }
        }),
        (c = e).addShortcut("Meta+alt+C", "", function() {
            c.execCommand("mceRetrieveFormats")
        }),
        c.addShortcut("Meta+alt+V", "", function() {
            c.execCommand("mcePaintFormats")
        }),
        {}
    };
    tinymce.PluginManager.add("formatpainter", Nr)
}(window);
复制代码

 

posted @   勤勤恳恳小码农  阅读(1472)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示