plugin.min.js 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039
  1. /**
  2. * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3. * Licensed under the LGPL or a commercial license.
  4. * For LGPL see License.txt in the project root for license information.
  5. * For commercial licenses see https://www.tiny.cloud/
  6. *
  7. * Version: 5.10.0 (2021-10-11)
  8. */
  9. /*!
  10. * Tiny FormatPainter plugin
  11. *
  12. * Copyright 2010-2021 Tiny Technologies, Inc. All rights reserved.
  13. *
  14. * Version: 1.2.0-36
  15. */
  16. !function(m) {
  17. "use strict";
  18. var l = function(e) {
  19. var r = e
  20. , n = function() {
  21. return r
  22. };
  23. return {
  24. get: n,
  25. set: function(e) {
  26. r = e
  27. },
  28. clone: function() {
  29. return l(n())
  30. }
  31. }
  32. }
  33. , n = function(e) {
  34. return parseInt(e, 10)
  35. }
  36. , i = function(e, r) {
  37. var n = e - r;
  38. return 0 === n ? 0 : 0 < n ? 1 : -1
  39. }
  40. , t = function(e, r, n) {
  41. return {
  42. major: e,
  43. minor: r,
  44. patch: n
  45. }
  46. }
  47. , o = function(e) {
  48. var r = /([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(e);
  49. return r ? t(n(r[1]), n(r[2]), n(r[3])) : t(0, 0, 0)
  50. }
  51. , d = function(e, r) {
  52. return !!e && -1 === function(e, r) {
  53. var n = i(e.major, r.major);
  54. if (0 !== n)
  55. return n;
  56. var t = i(e.minor, r.minor);
  57. if (0 !== t)
  58. return t;
  59. var o = i(e.patch, r.patch);
  60. return 0 !== o ? o : 0
  61. }(o([(n = e).majorVersion, n.minorVersion].join(".").split(".").slice(0, 3).join(".")), o(r));
  62. var n
  63. }
  64. , a = function() {
  65. return (a = Object.assign || function(e) {
  66. for (var r, n = 1, t = arguments.length; n < t; n++)
  67. for (var o in r = arguments[n])
  68. Object.prototype.hasOwnProperty.call(r, o) && (e[o] = r[o]);
  69. return e
  70. }
  71. ).apply(this, arguments)
  72. };
  73. function c() {
  74. for (var e = 0, r = 0, n = arguments.length; r < n; r++)
  75. e += arguments[r].length;
  76. var t = Array(e)
  77. , o = 0;
  78. for (r = 0; r < n; r++)
  79. for (var i = arguments[r], a = 0, u = i.length; a < u; a++,
  80. o++)
  81. t[o] = i[a];
  82. return t
  83. }
  84. var e, r, u, s, f, v, g, p, h, b, y, S, O, N = function() {}, w = function(e) {
  85. return function() {
  86. return e
  87. }
  88. }, T = w(!1), x = w(!0), E = function() {
  89. return k(0, 0)
  90. }, k = function(e, r) {
  91. return {
  92. major: e,
  93. minor: r
  94. }
  95. }, _ = {
  96. nu: k,
  97. detect: function(e, r) {
  98. var n = String(r).toLowerCase();
  99. return 0 === e.length ? E() : function(e, r) {
  100. var n = function(e, r) {
  101. for (var n = 0; n < e.length; n++) {
  102. var t = e[n];
  103. if (t.test(r))
  104. return t
  105. }
  106. }(e, r);
  107. if (!n)
  108. return {
  109. major: 0,
  110. minor: 0
  111. };
  112. var t = function(e) {
  113. return Number(r.replace(n, "$" + e))
  114. };
  115. return k(t(1), t(2))
  116. }(e, n)
  117. },
  118. unknown: E
  119. }, A = "Edge", D = "Chrome", C = "Opera", R = "Firefox", L = "Safari", P = function(e, r) {
  120. return function() {
  121. return r === e
  122. }
  123. }, I = function(e) {
  124. var r = e.current;
  125. return {
  126. current: r,
  127. version: e.version,
  128. isEdge: P(A, r),
  129. isChrome: P(D, r),
  130. isIE: P("IE", r),
  131. isOpera: P(C, r),
  132. isFirefox: P(R, r),
  133. isSafari: P(L, r)
  134. }
  135. }, F = {
  136. unknown: function() {
  137. return I({
  138. current: void 0,
  139. version: _.unknown()
  140. })
  141. },
  142. nu: I,
  143. edge: w(A),
  144. chrome: w(D),
  145. ie: w("IE"),
  146. opera: w(C),
  147. firefox: w(R),
  148. safari: w(L)
  149. }, M = "Windows", B = "Android", j = "Linux", U = "Solaris", V = "FreeBSD", q = "ChromeOS", z = function(e, r) {
  150. return function() {
  151. return r === e
  152. }
  153. }, X = function(e) {
  154. var r = e.current;
  155. return {
  156. current: r,
  157. version: e.version,
  158. isWindows: z(M, r),
  159. isiOS: z("iOS", r),
  160. isAndroid: z(B, r),
  161. isOSX: z("OSX", r),
  162. isLinux: z(j, r),
  163. isSolaris: z(U, r),
  164. isFreeBSD: z(V, r),
  165. isChromeOS: z(q, r)
  166. }
  167. }, H = {
  168. unknown: function() {
  169. return X({
  170. current: void 0,
  171. version: _.unknown()
  172. })
  173. },
  174. nu: X,
  175. windows: w(M),
  176. ios: w("iOS"),
  177. android: w(B),
  178. linux: w(j),
  179. osx: w("OSX"),
  180. solaris: w(U),
  181. freebsd: w(V),
  182. chromeos: w(q)
  183. }, W = function() {
  184. return Y
  185. }, Y = (e = function(e) {
  186. return e.isNone()
  187. }
  188. ,
  189. s = {
  190. fold: function(e, r) {
  191. return e()
  192. },
  193. is: T,
  194. isSome: T,
  195. isNone: x,
  196. getOr: u = function(e) {
  197. return e
  198. }
  199. ,
  200. getOrThunk: r = function(e) {
  201. return e()
  202. }
  203. ,
  204. getOrDie: function(e) {
  205. throw new Error(e || "error: getOrDie called on none.")
  206. },
  207. getOrNull: w(null),
  208. getOrUndefined: w(void 0),
  209. or: u,
  210. orThunk: r,
  211. map: W,
  212. each: N,
  213. bind: W,
  214. exists: T,
  215. forall: x,
  216. filter: W,
  217. equals: e,
  218. equals_: e,
  219. toArray: function() {
  220. return []
  221. },
  222. toString: w("none()")
  223. },
  224. Object.freeze && Object.freeze(s),
  225. s), G = function(n) {
  226. var e = w(n)
  227. , r = function() {
  228. return o
  229. }
  230. , t = function(e) {
  231. return e(n)
  232. }
  233. , o = {
  234. fold: function(e, r) {
  235. return r(n)
  236. },
  237. is: function(e) {
  238. return n === e
  239. },
  240. isSome: x,
  241. isNone: T,
  242. getOr: e,
  243. getOrThunk: e,
  244. getOrDie: e,
  245. getOrNull: e,
  246. getOrUndefined: e,
  247. or: r,
  248. orThunk: r,
  249. map: function(e) {
  250. return G(e(n))
  251. },
  252. each: function(e) {
  253. e(n)
  254. },
  255. bind: t,
  256. exists: t,
  257. forall: t,
  258. filter: function(e) {
  259. return e(n) ? o : Y
  260. },
  261. toArray: function() {
  262. return [n]
  263. },
  264. toString: function() {
  265. return "some(" + n + ")"
  266. },
  267. equals: function(e) {
  268. return e.is(n)
  269. },
  270. equals_: function(e, r) {
  271. return e.fold(T, function(e) {
  272. return r(n, e)
  273. })
  274. }
  275. };
  276. return o
  277. }, $ = {
  278. some: G,
  279. none: W,
  280. from: function(e) {
  281. return null == e ? Y : G(e)
  282. }
  283. }, K = function(r) {
  284. return function(e) {
  285. return function(e) {
  286. if (null === e)
  287. return "null";
  288. var r = typeof e;
  289. 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
  290. }(e) === r
  291. }
  292. }, Z = K("string"), J = K("array"), Q = K("boolean"), ee = K("function"), re = K("number"), ne = Array.prototype.slice, te = Array.prototype.indexOf, oe = Array.prototype.push, ie = function(e, r) {
  293. return n = e,
  294. t = r,
  295. -1 < te.call(n, t);
  296. var n, t
  297. }, ae = function(e, r) {
  298. for (var n = 0, t = e.length; n < t; n++) {
  299. if (r(e[n], n))
  300. return !0
  301. }
  302. return !1
  303. }, ue = function(e, r) {
  304. for (var n = e.length, t = new Array(n), o = 0; o < n; o++) {
  305. var i = e[o];
  306. t[o] = r(i, o)
  307. }
  308. return t
  309. }, ce = function(e, r) {
  310. for (var n = [], t = 0, o = e.length; t < o; t++) {
  311. var i = e[t];
  312. r(i, t) && n.push(i)
  313. }
  314. return n
  315. }, se = function(e, r) {
  316. for (var n = 0, t = e.length; n < t; n++) {
  317. var o = e[n];
  318. if (r(o, n))
  319. return $.some(o)
  320. }
  321. return $.none()
  322. }, fe = function(e, r) {
  323. return function(e) {
  324. for (var r = [], n = 0, t = e.length; n < t; ++n) {
  325. if (!J(e[n]))
  326. throw new Error("Arr.flatten item " + n + " was not an array, input: " + e);
  327. oe.apply(r, e[n])
  328. }
  329. return r
  330. }(ue(e, r))
  331. }, me = (ee(Array.from) && Array.from,
  332. function(e, r) {
  333. var n = String(r).toLowerCase();
  334. return se(e, function(e) {
  335. return e.search(n)
  336. })
  337. }
  338. ), le = function(e, n) {
  339. return me(e, n).map(function(e) {
  340. var r = _.detect(e.versionRegexes, n);
  341. return {
  342. current: e.name,
  343. version: r
  344. }
  345. })
  346. }, de = function(e, n) {
  347. return me(e, n).map(function(e) {
  348. var r = _.detect(e.versionRegexes, n);
  349. return {
  350. current: e.name,
  351. version: r
  352. }
  353. })
  354. }, ve = function(e, r) {
  355. return -1 !== e.indexOf(r)
  356. }, ge = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, pe = function(r) {
  357. return function(e) {
  358. return ve(e, r)
  359. }
  360. }, he = [{
  361. name: "Edge",
  362. versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
  363. search: function(e) {
  364. return ve(e, "edge/") && ve(e, "chrome") && ve(e, "safari") && ve(e, "applewebkit")
  365. }
  366. }, {
  367. name: "Chrome",
  368. versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, ge],
  369. search: function(e) {
  370. return ve(e, "chrome") && !ve(e, "chromeframe")
  371. }
  372. }, {
  373. name: "IE",
  374. versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
  375. search: function(e) {
  376. return ve(e, "msie") || ve(e, "trident")
  377. }
  378. }, {
  379. name: "Opera",
  380. versionRegexes: [ge, /.*?opera\/([0-9]+)\.([0-9]+).*/],
  381. search: pe("opera")
  382. }, {
  383. name: "Firefox",
  384. versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
  385. search: pe("firefox")
  386. }, {
  387. name: "Safari",
  388. versionRegexes: [ge, /.*?cpu os ([0-9]+)_([0-9]+).*/],
  389. search: function(e) {
  390. return (ve(e, "safari") || ve(e, "mobile/")) && ve(e, "applewebkit")
  391. }
  392. }], be = [{
  393. name: "Windows",
  394. search: pe("win"),
  395. versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
  396. }, {
  397. name: "iOS",
  398. search: function(e) {
  399. return ve(e, "iphone") || ve(e, "ipad")
  400. },
  401. versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/]
  402. }, {
  403. name: "Android",
  404. search: pe("android"),
  405. versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
  406. }, {
  407. name: "OSX",
  408. search: pe("mac os x"),
  409. versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]
  410. }, {
  411. name: "Linux",
  412. search: pe("linux"),
  413. versionRegexes: []
  414. }, {
  415. name: "Solaris",
  416. search: pe("sunos"),
  417. versionRegexes: []
  418. }, {
  419. name: "FreeBSD",
  420. search: pe("freebsd"),
  421. versionRegexes: []
  422. }, {
  423. name: "ChromeOS",
  424. search: pe("cros"),
  425. versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/]
  426. }], ye = {
  427. browsers: w(he),
  428. oses: w(be)
  429. }, Se = l(function(e, r) {
  430. var n, t, o, i, a, u, c, s, f, m, l, d, v = ye.browsers(), g = ye.oses(), p = le(v, e).fold(F.unknown, F.nu), h = de(g, e).fold(H.unknown, H.nu);
  431. return {
  432. browser: p,
  433. os: h,
  434. deviceType: (t = p,
  435. o = e,
  436. i = r,
  437. a = (n = h).isiOS() && !0 === /ipad/i.test(o),
  438. u = n.isiOS() && !a,
  439. c = n.isiOS() || n.isAndroid(),
  440. s = c || i("(pointer:coarse)"),
  441. f = a || !u && c && i("(min-device-width:768px)"),
  442. m = u || c && !f,
  443. l = t.isSafari() && n.isiOS() && !1 === /safari/i.test(o),
  444. d = !m && !f && !l,
  445. {
  446. isiPad: w(a),
  447. isiPhone: w(u),
  448. isTablet: w(f),
  449. isPhone: w(m),
  450. isTouch: w(s),
  451. isAndroid: n.isAndroid,
  452. isiOS: n.isiOS,
  453. isWebView: w(l),
  454. isDesktop: w(d)
  455. })
  456. }
  457. }(m.navigator.userAgent, function(e) {
  458. return m.window.matchMedia(e).matches
  459. })), Oe = function() {
  460. return Se.get()
  461. }, Ne = Object.keys, we = Object.hasOwnProperty, Te = function(e, r) {
  462. for (var n = Ne(e), t = 0, o = n.length; t < o; t++) {
  463. var i = n[t];
  464. r(e[i], i)
  465. }
  466. }, xe = function(e, t) {
  467. var o = {};
  468. return Te(e, function(e, r) {
  469. var n = t(e, r);
  470. o[n.k] = n.v
  471. }),
  472. o
  473. }, Ee = function(n) {
  474. return function(e, r) {
  475. n[r] = e
  476. }
  477. }, ke = function(e, r) {
  478. var n, t, o, i, a = {}, u = {};
  479. return n = e,
  480. t = r,
  481. o = Ee(a),
  482. i = Ee(u),
  483. Te(n, function(e, r) {
  484. (t(e, r) ? o : i)(e, r)
  485. }),
  486. {
  487. t: a,
  488. f: u
  489. }
  490. }, _e = function(e) {
  491. return n = function(e) {
  492. return e
  493. }
  494. ,
  495. t = [],
  496. Te(e, function(e, r) {
  497. t.push(n(e, r))
  498. }),
  499. t;
  500. var n, t
  501. }, Ae = function(e, r) {
  502. return De(e, r) ? $.from(e[r]) : $.none()
  503. }, De = function(e, r) {
  504. return we.call(e, r)
  505. }, Ce = (m.Node.ATTRIBUTE_NODE,
  506. m.Node.CDATA_SECTION_NODE,
  507. m.Node.COMMENT_NODE,
  508. m.Node.DOCUMENT_NODE,
  509. m.Node.DOCUMENT_TYPE_NODE,
  510. m.Node.DOCUMENT_FRAGMENT_NODE,
  511. m.Node.ELEMENT_NODE), Re = m.Node.TEXT_NODE, Le = (m.Node.PROCESSING_INSTRUCTION_NODE,
  512. m.Node.ENTITY_REFERENCE_NODE,
  513. m.Node.ENTITY_NODE,
  514. m.Node.NOTATION_NODE,
  515. void 0 !== m.window ? m.window : Function("return this;")(),
  516. f = Re,
  517. function(e) {
  518. return e.dom().nodeType === f
  519. }
  520. ), Pe = function(e, r, n) {
  521. !function(e, r, n) {
  522. if (!(Z(n) || Q(n) || re(n)))
  523. throw m.console.error("Invalid call to Attr.set. Key ", r, ":: Value ", n, ":: Element ", e),
  524. new Error("Attribute value was not simple");
  525. e.setAttribute(r, n + "")
  526. }(e.dom(), r, n)
  527. }, Ie = function(e, r) {
  528. var n = e.dom().getAttribute(r);
  529. return null === n ? void 0 : n
  530. }, Fe = function(e, r) {
  531. e.dom().removeAttribute(r)
  532. }, Me = function(e, r) {
  533. var n = Ie(e, r);
  534. return void 0 === n || "" === n ? [] : n.split(" ")
  535. }, Be = function(e) {
  536. return void 0 !== e.dom().classList
  537. }, je = function(e) {
  538. return Me(e, "class")
  539. }, Ue = function(e, r) {
  540. return o = r,
  541. i = Me(n = e, t = "class").concat([o]),
  542. Pe(n, t, i.join(" ")),
  543. !0;
  544. var n, t, o, i
  545. }, Ve = function(e, r) {
  546. return o = r,
  547. 0 < (i = ce(Me(n = e, t = "class"), function(e) {
  548. return e !== o
  549. })).length ? Pe(n, t, i.join(" ")) : Fe(n, t),
  550. !1;
  551. var n, t, o, i
  552. }, qe = function(e, r) {
  553. var n;
  554. Be(e) ? e.dom().classList.remove(r) : Ve(e, r);
  555. 0 === (Be(n = e) ? n.dom().classList : je(n)).length && Fe(n, "class")
  556. }, ze = function(e) {
  557. if (null == e)
  558. throw new Error("Node cannot be null or undefined");
  559. return {
  560. dom: w(e)
  561. }
  562. }, Xe = {
  563. fromHtml: function(e, r) {
  564. var n = (r || m.document).createElement("div");
  565. if (n.innerHTML = e,
  566. !n.hasChildNodes() || 1 < n.childNodes.length)
  567. throw m.console.error("HTML does not have a single root node", e),
  568. new Error("HTML must have a single root node");
  569. return ze(n.childNodes[0])
  570. },
  571. fromTag: function(e, r) {
  572. var n = (r || m.document).createElement(e);
  573. return ze(n)
  574. },
  575. fromText: function(e, r) {
  576. var n = (r || m.document).createTextNode(e);
  577. return ze(n)
  578. },
  579. fromDom: ze,
  580. fromPoint: function(e, r, n) {
  581. var t = e.dom();
  582. return $.from(t.elementFromPoint(r, n)).map(ze)
  583. }
  584. }, He = function(e, r) {
  585. e.fire("FormatPainterToggle", {
  586. state: r
  587. })
  588. };
  589. (g = v || (v = {})).Retrival = "Retrieval",
  590. g.Application = "Application",
  591. (h = p || (p = {})).ListSchema = "ListSchema",
  592. h.SubstitutionSchema = "SubstitionSchema",
  593. (y = b || (b = {})).InsertUnorderedList = "InsertUnorderedList",
  594. y.InsertOrderedList = "InsertOrderedList",
  595. y.InsertDefinitionList = "InsertDefinitionList",
  596. (O = S || (S = {})).Table = "Table",
  597. O.Unspecified = "Unspecified";
  598. var We = function(e) {
  599. var r, n;
  600. r = Xe.fromDom(e.getBody()),
  601. n = "tox-cursor-format-painter",
  602. Be(r) ? r.dom().classList.add(n) : Ue(r, n)
  603. }
  604. , Ye = function(e, r) {
  605. var n;
  606. n = e,
  607. qe(Xe.fromDom(n.getBody()), "tox-cursor-format-painter"),
  608. r.set(v.Retrival),
  609. He(e, !1)
  610. }
  611. , Ge = function(e, r) {
  612. r.get() === v.Application ? Ye(e, r) : function(r, n) {
  613. var t = Oe()
  614. , o = l(!1);
  615. We(r),
  616. n.set(v.Application),
  617. He(r, !0),
  618. r.execCommand("mceRetrieveFormats");
  619. var i = function() {
  620. r.execCommand("mcePaintFormats"),
  621. Ye(r, n)
  622. }
  623. , e = function() {
  624. n.get() === v.Application && i(),
  625. s()
  626. }
  627. , a = function(e) {
  628. n.get() === v.Application && ("touchcancel" === e.type && t.os.isAndroid() ? r.once("contextmenu", i) : o.get() ? i() : r.once("selectionchange", i)),
  629. s()
  630. }
  631. , u = function(e) {
  632. 27 === e.keyCode && (Ye(r, n),
  633. s())
  634. }
  635. , c = function(e) {
  636. o.set("touchmove" === e.type)
  637. };
  638. r.on("click", e),
  639. r.on("touchstart touchmove", c),
  640. r.on("touchend touchcancel", a),
  641. r.on("keydown", u);
  642. var s = function() {
  643. r.off("click", e),
  644. r.off("touchstart touchmove", c),
  645. r.off("touchend touchcancel", a),
  646. r.off("keydown", u)
  647. }
  648. }(e, r)
  649. }
  650. , $e = function(e, r, n) {
  651. return 0 != (e.compareDocumentPosition(r) & n)
  652. }
  653. , Ke = function(e, r) {
  654. return $e(e, r, m.Node.DOCUMENT_POSITION_CONTAINED_BY)
  655. }
  656. , Ze = Ce
  657. , Je = function(e, r) {
  658. return e.dom() === r.dom()
  659. }
  660. , Qe = (Oe().browser.isIE(),
  661. function(e, r) {
  662. var n = e.dom();
  663. if (n.nodeType !== Ze)
  664. return !1;
  665. var t = n;
  666. if (void 0 !== t.matches)
  667. return t.matches(r);
  668. if (void 0 !== t.msMatchesSelector)
  669. return t.msMatchesSelector(r);
  670. if (void 0 !== t.webkitMatchesSelector)
  671. return t.webkitMatchesSelector(r);
  672. if (void 0 !== t.mozMatchesSelector)
  673. return t.mozMatchesSelector(r);
  674. throw new Error("Browser lacks native selectors")
  675. }
  676. );
  677. var er = function(e, r, n) {
  678. for (var t = e.dom(), o = ee(n) ? n : w(!1); t.parentNode; ) {
  679. t = t.parentNode;
  680. var i = Xe.fromDom(t);
  681. if (r(i))
  682. return $.some(i);
  683. if (o(i))
  684. break
  685. }
  686. return $.none()
  687. }
  688. , rr = function(e, r, n) {
  689. var t, o, i, a;
  690. return t = er,
  691. a = n,
  692. function(e, r) {
  693. return r(e)
  694. }(o = e, i = r) ? $.some(o) : ee(a) && a(o) ? $.none() : t(o, i, a)
  695. }
  696. , nr = {
  697. formatpainter_checklist: {
  698. selector: "ul",
  699. classes: "tox-checklist"
  700. },
  701. formatpainter_liststyletype: {
  702. selector: "ul,ol",
  703. styles: {
  704. listStyleType: "%value"
  705. }
  706. },
  707. formatpainter_borderstyle: {
  708. selector: "td,th",
  709. styles: {
  710. borderTopStyle: "%valueTop",
  711. borderRightStyle: "%valueRight",
  712. borderBottomStyle: "%valueBottom",
  713. borderLeftStyle: "%valueLeft"
  714. },
  715. remove_similar: !0
  716. },
  717. formatpainter_bordercolor: {
  718. selector: "td,th",
  719. styles: {
  720. borderTopColor: "%valueTop",
  721. borderRightColor: "%valueRight",
  722. borderBottomColor: "%valueBottom",
  723. borderLeftColor: "%valueLeft"
  724. },
  725. remove_similar: !0
  726. },
  727. formatpainter_backgroundcolor: {
  728. selector: "td,th",
  729. styles: {
  730. backgroundColor: "%value"
  731. },
  732. remove_similar: !0
  733. },
  734. formatpainter_removeformat: [{
  735. selector: "b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",
  736. remove: "all",
  737. split: !0,
  738. expand: !1,
  739. block_expand: !0,
  740. deep: !0
  741. }, {
  742. selector: "span",
  743. attributes: ["style", "class"],
  744. remove: "empty",
  745. split: !0,
  746. expand: !1,
  747. deep: !0
  748. }, {
  749. selector: "*:not(tr,td,th,table)",
  750. attributes: ["style", "class"],
  751. split: !1,
  752. expand: !1,
  753. deep: !0
  754. }],
  755. formatpainter_legacy_font: {
  756. inline: "font",
  757. attributes: {
  758. size: "%value"
  759. }
  760. }
  761. }
  762. , tr = function(i, e) {
  763. return Ae(e, "selector").exists(function(e) {
  764. var r = i.getBody()
  765. , n = i.selection.getStart()
  766. , t = i.dom.getParents(n, w(!0), r)
  767. , o = i.selection.getSelectedBlocks();
  768. return i.dom.is(c(t, o), e)
  769. })
  770. }
  771. , or = function(t, e) {
  772. return ae(t.formatter.get(e), function(e) {
  773. return r = t,
  774. De(n = e, "inline") && !tr(r, n);
  775. var r, n
  776. })
  777. }
  778. , ir = function(t, e, r) {
  779. return ae(e.get(r), function(e) {
  780. return r = t,
  781. De(n = e, "block") || tr(r, n);
  782. var r, n
  783. })
  784. }
  785. , ar = function(e) {
  786. return 1 < e.length && "%" === e.charAt(0)
  787. }
  788. , ur = function(e, r) {
  789. return ae(e.formatter.get(r), function(e) {
  790. return n = Ae(r = e, "styles").exists(function(e) {
  791. return ae(_e(e), ar)
  792. }),
  793. t = Ae(r, "attributes").exists(function(e) {
  794. return ae(_e(e), ar)
  795. }),
  796. n || t;
  797. var r, n, t
  798. })
  799. }
  800. , cr = function(e) {
  801. return Qe(e, "OL,UL,DL")
  802. }
  803. , sr = function(e) {
  804. return Qe(e, "LI,DT,DD")
  805. }
  806. , fr = function(e, r, n) {
  807. var t, o = e.formatter, i = or(e, n.formatName), a = ir(e, o, n.formatName), u = (t = n.formatName,
  808. ie(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], t));
  809. (r.table && u || r.inline && i || r.block && a && !u) && o.apply(n.formatName, n.substitutedVariables)
  810. }
  811. , mr = function(e, r) {
  812. var n, t, o, i = function(e) {
  813. return Je(e, r)
  814. };
  815. return (n = rr(Xe.fromDom(e.getStart()), cr, i),
  816. t = rr(Xe.fromDom(e.getEnd()), cr, i),
  817. o = function(e, r) {
  818. return Je(e, r)
  819. }
  820. ,
  821. n.isSome() && t.isSome() ? $.some(o(n.getOrDie(), t.getOrDie())) : $.none()).getOr(!1)
  822. }
  823. , lr = function(e) {
  824. var r = e.selection
  825. , n = r.getRng()
  826. , t = Xe.fromDom(e.getBody())
  827. , o = ce(e.selection.getSelectedBlocks().map(Xe.fromDom), sr)
  828. , i = n.collapsed && o.length
  829. , a = o.length && !mr(r, t);
  830. return 1 < o.length || i || a
  831. }
  832. , dr = function(t, e) {
  833. var r, n;
  834. r = t,
  835. n = e.context,
  836. r.formatter.remove("formatpainter_removeformat"),
  837. n === S.Table && function(e, r) {
  838. for (var n = 0, t = e.length; n < t; n++)
  839. r(e[n], n)
  840. }(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], function(e) {
  841. r.formatter.remove(e)
  842. }),
  843. lr(r) && r.execCommand("RemoveList");
  844. var o, i, a, u, c, s, f = (a = (o = t).selection.getStart(),
  845. u = o.selection.getRng().collapsed,
  846. c = 0 < o.dom.select("td[data-mce-selected]").length,
  847. s = !!o.dom.getParent(a, "TABLE"),
  848. {
  849. inline: !0,
  850. table: u && s || c,
  851. block: u || (i = o.selection,
  852. 1 < i.getSelectedBlocks().length) || c
  853. });
  854. e.schemas.forEach(function(e) {
  855. switch (e.kind) {
  856. case p.ListSchema:
  857. r = t,
  858. n = e,
  859. f.block && r.execCommand(n.command);
  860. break;
  861. case p.SubstitutionSchema:
  862. fr(t, f, e)
  863. }
  864. var r, n
  865. })
  866. }
  867. , vr = function(e) {
  868. return Be(e) ? function(e) {
  869. for (var r = e.dom().classList, n = new Array(r.length), t = 0; t < r.length; t++)
  870. n[t] = r.item(t);
  871. return n
  872. }(e) : je(e)
  873. }
  874. , gr = function(e, r) {
  875. var n, t, o = e.dom(), i = m.window.getComputedStyle(o).getPropertyValue(r), a = "" !== i || null != (t = Le(n = e) ? n.dom().parentNode : n.dom()) && t.ownerDocument.body.contains(t) ? i : pr(o, r);
  876. return null === a ? void 0 : a
  877. }
  878. , pr = function(e, r) {
  879. return void 0 !== (n = e).style && ee(n.style.getPropertyValue) ? e.style.getPropertyValue(r) : "";
  880. var n
  881. }
  882. , hr = function(o, e) {
  883. return xe(e, function(e, r) {
  884. return {
  885. k: e.slice(1, e.length),
  886. v: (n = o,
  887. t = r,
  888. "class" === t ? vr(n).filter(function(e) {
  889. return !/^(mce-.*)/.test(e)
  890. }).join(" ") : Ie(n, t))
  891. };
  892. var n, t
  893. })
  894. }
  895. , br = function(e) {
  896. return ke(e, function(e) {
  897. return 1 < (r = e).length && "%" === r.charAt(0);
  898. var r
  899. }).t
  900. }
  901. , yr = function(e, n) {
  902. var r = Ae(e, "styles").map(function(e) {
  903. return t = n,
  904. r = br(e),
  905. xe(r, function(e, r) {
  906. return {
  907. k: e.slice(1, e.length),
  908. v: gr(t, (n = r,
  909. n.replace(/([A-Z])/g, function(e) {
  910. return "-" + e[0].toLowerCase()
  911. })))
  912. };
  913. var n
  914. });
  915. var t, r
  916. })
  917. , t = Ae(e, "attributes").map(function(e) {
  918. return hr(n, br(e))
  919. })
  920. , o = a(a({}, r.getOr({})), t.getOr({}));
  921. return _e(o).every(function(e) {
  922. return "" !== e
  923. }) ? $.some(o) : $.none()
  924. }
  925. , Sr = function(e, r, n) {
  926. return (t = e.get(r),
  927. 0 === t.length ? $.none() : $.some(t[0])).bind(function(e) {
  928. return yr(e, n)
  929. }).map(function(e) {
  930. return {
  931. kind: p.SubstitutionSchema,
  932. formatName: r,
  933. substitutedVariables: e
  934. }
  935. });
  936. var t
  937. }
  938. , Or = function(n, t) {
  939. return (e = n,
  940. r = e.getParam("formatpainter_blacklisted_formats", "link,address,removeformat,formatpainter_removeformat", "string").split(/[ ,]/),
  941. Ne(e.formatter.get()).filter(function(e) {
  942. return !ie(r, e)
  943. })).filter(function(e) {
  944. var r = ur(n, e);
  945. return n.formatter.matchNode(t.dom(), e, {}, r)
  946. });
  947. var e, r
  948. }
  949. , Nr = function(e) {
  950. return (r = e,
  951. se(_e(b), function(e) {
  952. return r.queryCommandState(e)
  953. })).map(function(e) {
  954. return {
  955. kind: p.ListSchema,
  956. command: e
  957. }
  958. });
  959. var r
  960. }
  961. , wr = function(e) {
  962. var r, n, t, o, i, a = e.dom, u = e.selection.getStart();
  963. return {
  964. schemas: c(Nr(e).toArray(), (t = e,
  965. o = u,
  966. i = t.dom.getParents(o, w(!0)),
  967. fe(ue(i, Xe.fromDom), function(r) {
  968. return fe(Or(t, r), function(e) {
  969. return Sr(t.formatter, e, r).toArray()
  970. })
  971. }))),
  972. context: (r = a,
  973. n = u,
  974. r.getParent(n, "TABLE") ? S.Table : S.Unspecified)
  975. }
  976. }
  977. , Tr = function(e) {
  978. if (d(tinymce, "4.9.0"))
  979. return m.window.console.error("The format painter plugin requires at least version 4.9.0 of TinyMCE."),
  980. {};
  981. var n, r, t, o, i, a, u, c, s = l(v.Retrival), f = l({
  982. schemas: [],
  983. context: S.Unspecified
  984. });
  985. return (n = e).on("PreInit", function() {
  986. Te(nr, function(e, r) {
  987. n.formatter.get(r) || n.formatter.register(r, e)
  988. })
  989. }),
  990. t = s,
  991. o = f,
  992. (r = e).addCommand("mceToggleFormatPainter", function() {
  993. Ge(r, t)
  994. }),
  995. r.addCommand("mcePaintFormats", function() {
  996. r.undoManager.transact(function() {
  997. dr(r, o.get())
  998. })
  999. }),
  1000. r.addCommand("mceRetrieveFormats", function() {
  1001. o.set(wr(r))
  1002. }),
  1003. (i = e).ui ? (u = i).ui.registry.addToggleButton("formatpainter", {
  1004. active: !1,
  1005. icon: "format-painter",
  1006. tooltip: "Format Painter",
  1007. onAction: function() {
  1008. return u.execCommand("mceToggleFormatPainter")
  1009. },
  1010. onSetup: function(r) {
  1011. var e = function(e) {
  1012. r.setActive(e.state)
  1013. };
  1014. return u.on("FormatPainterToggle", e),
  1015. function() {
  1016. return u.off("FormatPainterToggle", e)
  1017. }
  1018. }
  1019. }) : (a = i).addButton("formatpainter", {
  1020. active: !1,
  1021. icon: "format-painter",
  1022. tooltip: "Format Painter",
  1023. cmd: "mceToggleFormatPainter",
  1024. onPostRender: function(r) {
  1025. a.on("FormatPainterToggle", function(e) {
  1026. r.control.active(e.state)
  1027. })
  1028. }
  1029. }),
  1030. (c = e).addShortcut("Meta+alt+C", "", function() {
  1031. c.execCommand("mceRetrieveFormats")
  1032. }),
  1033. c.addShortcut("Meta+alt+V", "", function() {
  1034. c.execCommand("mcePaintFormats")
  1035. }),
  1036. {}
  1037. };
  1038. tinymce.PluginManager.add("formatpainter", Tr)
  1039. }(window);