frColorPicker

ColorPicker for Font Rendering (Customized)

当前为 2025-03-14 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/437214/1553313/frColorPicker.js

  1. // ==UserScript==
  2. // @name frColorPicker
  3. // @version 6.7.2
  4. // @author F9y4ng
  5. // @license GPL-3.0-only
  6. // @description ColorPicker for Font Rendering (Customized)
  7. // ==/UserScript==
  8.  
  9. (function (p, B) {
  10. "object" === typeof module && "object" === typeof module.exports
  11. ? (module.exports = function (z) {
  12. if (!z.document) throw Error("No Document!");
  13. return B(z);
  14. })
  15. : B(p);
  16. })("undefined" !== typeof window ? window : this, function (p) {
  17. var B = (function () {
  18. var z = function (b) {
  19. var d = Math.random().toString(36).slice(2);
  20. return d.slice(0, b - 4).padEnd(b - 3, Math.random().toString(36).slice(2)) + "." + d.slice(-3);
  21. },
  22. G = z(9),
  23. H = z(8),
  24. I = z(12),
  25. J = z(8),
  26. K = z(7),
  27. D,
  28. a = {
  29. initialized: !1,
  30. instances: [],
  31. readyQueue: [],
  32. register: function () {
  33. "undefined" !== typeof p &&
  34. p.document &&
  35. ("loading" === p.document.readyState
  36. ? p.document.addEventListener("DOMContentLoaded", a.pub.init, !1)
  37. : p.document.documentElement
  38. ? a.pub.init()
  39. : p.addEventListener("load", a.pub.init, !1));
  40. },
  41. getInstances: function () {
  42. for (var b = [], d = 0; d < a.instances.length; d += 1) a.instances[d] && a.instances[d].targetElement && b.push(a.instances[d]);
  43. return b;
  44. },
  45. createEl: function (b) {
  46. b = p.document.createElement(b);
  47. a.setData(b, "gui", !0);
  48. return b;
  49. },
  50. node: function (b) {
  51. if (!b) return null;
  52. if ("string" === typeof b) {
  53. var d = null;
  54. try {
  55. d = p.document.querySelector(b) || D.querySelector(b);
  56. } catch (e) {
  57. return null;
  58. }
  59. d || console.warn("No element matche: %s", b);
  60. return d;
  61. }
  62. return a.isNode(b) ? b : null;
  63. },
  64. isNode: function (b) {
  65. return "object" === typeof Node ? b instanceof Node : b && "object" === typeof b && "number" === typeof b.nodeType && "string" === typeof b.nodeName;
  66. },
  67. nodeName: function (b) {
  68. return b && b.nodeName ? b.nodeName.toLowerCase() : !1;
  69. },
  70. removeChildren: function (b) {
  71. for (; b.firstChild; ) b.removeChild(b.firstChild);
  72. },
  73. isTextInput: function (b) {
  74. return b && "input" === a.nodeName(b) && "text" === b.type.toLowerCase();
  75. },
  76. isButton: function (b) {
  77. if (!b) return !1;
  78. var d = a.nodeName(b);
  79. return "button" === d || ("input" === d && -1 < ["button", "submit", "reset"].indexOf(b.type.toLowerCase()));
  80. },
  81. isButtonEmpty: function (b) {
  82. switch (a.nodeName(b)) {
  83. case "input":
  84. return !b.value || "" === b.value.trim();
  85. case "button":
  86. return "" === b.textContent.trim();
  87. }
  88. return null;
  89. },
  90. isPassiveEventSupported: (function () {
  91. var b = !1;
  92. try {
  93. var d = Object.defineProperty({}, "passive", {
  94. get: function () {
  95. b = !0;
  96. },
  97. });
  98. p.addEventListener("testPassive", null, d);
  99. p.removeEventListener("testPassive", null, d);
  100. } catch (e) {
  101. console.error(e);
  102. }
  103. return b;
  104. })(),
  105. isColorAttrSupported: (function () {
  106. var b = p.document.createElement("input");
  107. return b.setAttribute && (b.setAttribute("type", "color"), b.type && "color" == b.type.toLowerCase()) ? !0 : !1;
  108. })(),
  109. dataProp: "_data_frcolorpicker",
  110. setData: function () {
  111. var b = arguments[0];
  112. if (3 === arguments.length) {
  113. b = b.hasOwnProperty(a.dataProp) ? b[a.dataProp] : (b[a.dataProp] = {});
  114. var d = arguments[1];
  115. b[d] = arguments[2];
  116. return !0;
  117. }
  118. if (2 === arguments.length && "object" === typeof arguments[1]) {
  119. b = b.hasOwnProperty(a.dataProp) ? b[a.dataProp] : (b[a.dataProp] = {});
  120. var e = arguments[1];
  121. for (d in e) e.hasOwnProperty(d) && (b[d] = e[d]);
  122. return !0;
  123. }
  124. throw Error("Invalid arguments");
  125. },
  126. removeData: function () {
  127. var b = arguments[0];
  128. if (!b.hasOwnProperty(a.dataProp)) return !0;
  129. for (var d = 1; d < arguments.length; d += 1) delete b[a.dataProp][arguments[d]];
  130. return !0;
  131. },
  132. getData: function (b, d, e) {
  133. if (!b.hasOwnProperty(a.dataProp))
  134. if (void 0 !== e) b[a.dataProp] = {};
  135. else return;
  136. b = b[a.dataProp];
  137. b.hasOwnProperty(d) || void 0 === e || (b[d] = e);
  138. return b[d];
  139. },
  140. getDataAttr: function (b, d) {
  141. return b.getAttribute("data-" + d);
  142. },
  143. setDataAttr: function (b, d, e) {
  144. b.setAttribute("data-" + d, e);
  145. },
  146. _attachedGroupEvents: {},
  147. attachGroupEvent: function (b, d, e, g) {
  148. a._attachedGroupEvents.hasOwnProperty(b) || (a._attachedGroupEvents[b] = []);
  149. a._attachedGroupEvents[b].push([d, e, g]);
  150. d.addEventListener(e, g, !1);
  151. },
  152. detachGroupEvents: function (b) {
  153. if (a._attachedGroupEvents.hasOwnProperty(b)) {
  154. for (var d = 0; d < a._attachedGroupEvents[b].length; d += 1) {
  155. var e = a._attachedGroupEvents[b][d];
  156. e[0].removeEventListener(e[1], e[2], !1);
  157. }
  158. delete a._attachedGroupEvents[b];
  159. }
  160. },
  161. preventDefault: function (b) {
  162. b.preventDefault && b.preventDefault();
  163. b.returnValue = !1;
  164. },
  165. triggerEvent: function (b, d, e, g) {
  166. if (b) {
  167. if ("function" === typeof Event) var l = new Event(d, { bubbles: e, cancelable: g });
  168. else (l = p.document.createEvent("Event")), l.initEvent(d, e, g);
  169. if (!l) return !1;
  170. a.setData(l, "internal", !0);
  171. b.dispatchEvent(l);
  172. return !0;
  173. }
  174. },
  175. triggerInputEvent: function (b, d, e, g) {
  176. b && a.isTextInput(b) && a.triggerEvent(b, d, e, g);
  177. },
  178. eventKey: function (b) {
  179. var d = { 9: "Tab", 13: "Enter", 27: "Escape" };
  180. return "string" === typeof b.code ? b.code : void 0 !== b.keyCode && d.hasOwnProperty(b.keyCode) ? d[b.keyCode] : null;
  181. },
  182. strList: function (b) {
  183. return b ? b.replace(/^\s+|\s+$/g, "").split(/\s+/) : [];
  184. },
  185. hasClass: function (b, d) {
  186. return d ? (void 0 !== b.classList ? b.classList.contains(d) : -1 != (" " + b.className.replace(/\s+/g, " ") + " ").indexOf(" " + d + " ")) : !1;
  187. },
  188. addClass: function (b, d) {
  189. d = a.strList(d);
  190. if (void 0 !== b.classList) for (var e = 0; e < d.length; e += 1) b.classList.add(d[e]);
  191. else for (e = 0; e < d.length; e += 1) a.hasClass(b, d[e]) || (b.className += (b.className ? " " : "") + d[e]);
  192. },
  193. removeClass: function (b, d) {
  194. d = a.strList(d);
  195. if (void 0 !== b.classList) for (var e = 0; e < d.length; e += 1) b.classList.remove(d[e]);
  196. else for (e = 0; e < d.length; e += 1) b.className = b.className.replace(new RegExp("^\\s*" + d[e] + "\\s*|\\s*" + d[e] + "\\s*$|\\s+" + d[e] + "(\\s+)", "g"), "$1");
  197. },
  198. getCompStyle: function (b) {
  199. return b instanceof ShadowRoot ? {} : (b = p.getComputedStyle ? p.getComputedStyle(b) : b.currentStyle) ? b : {};
  200. },
  201. setStyle: function (b, d, e, g) {
  202. e = e ? "important" : "";
  203. var l = null,
  204. k;
  205. for (k in d)
  206. if (d.hasOwnProperty(k)) {
  207. var q = null;
  208. null === d[k]
  209. ? (l || (l = a.getData(b, "origStyle")), l && l.hasOwnProperty(k) && (q = l[k]))
  210. : (g && (l || (l = a.getData(b, "origStyle", {})), l.hasOwnProperty(k) || (l[k] = b.style[k])), (q = d[k]));
  211. null !== q && b.style.setProperty(k, q, e);
  212. }
  213. },
  214. hexColor: function (b, d, e) {
  215. return "#" + (("0" + Math.round(b).toString(16)).slice(-2) + ("0" + Math.round(d).toString(16)).slice(-2) + ("0" + Math.round(e).toString(16)).slice(-2)).toUpperCase();
  216. },
  217. hexaColor: function (b, d, e, g) {
  218. return (
  219. "#" +
  220. (
  221. ("0" + Math.round(b).toString(16)).slice(-2) +
  222. ("0" + Math.round(d).toString(16)).slice(-2) +
  223. ("0" + Math.round(e).toString(16)).slice(-2) +
  224. ("0" + Math.round(255 * g).toString(16)).slice(-2)
  225. ).toUpperCase()
  226. );
  227. },
  228. rgbColor: function (b, d, e) {
  229. return "rgb(" + Math.round(b) + "," + Math.round(d) + "," + Math.round(e) + ")";
  230. },
  231. rgbaColor: function (b, d, e, g) {
  232. return "rgba(" + Math.round(b) + "," + Math.round(d) + "," + Math.round(e) + "," + Math.round(100 * (void 0 === g || null === g ? 1 : g)) / 100 + ")";
  233. },
  234. setBorderRadius: function (b, d) {
  235. a.setStyle(b, { "border-radius": d || "0" });
  236. },
  237. getElementPos: function (b, d) {
  238. var e = p.frDOMRects;
  239. "undefined" === typeof e && (e = { toggle: !1, cur: 1, prev: 1 });
  240. e = e.toggle ? e.cur : 1;
  241. var g = b.getBoundingClientRect();
  242. b = g.left * e;
  243. g = g.top * e;
  244. d || ((d = a.getViewPos()), (b += d[0] * e), (g += d[1] * e));
  245. return [b, g];
  246. },
  247. getElementSize: function (b) {
  248. return [b.offsetWidth, b.offsetHeight];
  249. },
  250. getAbsPointerPos: function (b) {
  251. var d = p.frDOMRects;
  252. "undefined" === typeof d && (d = { toggle: !1, cur: 1, prev: 1 });
  253. var e = 0,
  254. g = 0;
  255. "undefined" !== typeof b.changedTouches && b.changedTouches.length
  256. ? ((e = b.changedTouches[0].x * d.cur), (g = b.changedTouches[0].y * d.cur))
  257. : "number" === typeof b.x && ((e = b.x * d.cur), (g = b.y * d.cur));
  258. return { x: e, y: g };
  259. },
  260. getRelPointerPos: function (b) {
  261. var d = p.frDOMRects;
  262. "undefined" === typeof d && (d = { toggle: !1, cur: 1, prev: 1 });
  263. var e = (b.target || b.srcElement).getBoundingClientRect(),
  264. g = d.toggle ? d.cur : 1,
  265. l = 0,
  266. k = 0;
  267. "undefined" !== typeof b.changedTouches && b.changedTouches.length
  268. ? ((l = b.changedTouches[0].x * d.cur), (k = b.changedTouches[0].y * d.cur))
  269. : "number" === typeof b.x && ((l = b.x * d.cur), (k = b.y * d.cur));
  270. return { x: l - e.left * g, y: k - e.top * g };
  271. },
  272. getViewPos: function () {
  273. var b = p.document.documentElement;
  274. return [(p.pageXOffset || b.scrollLeft) - (b.clientLeft || 0), (p.pageYOffset || b.scrollTop) - (b.clientTop || 0)];
  275. },
  276. getViewSize: function () {
  277. var b = p.document.documentElement;
  278. return [p.innerWidth || b.clientWidth, p.innerHeight || b.clientHeight];
  279. },
  280. RGB_HSV: function (b, d, e) {
  281. b /= 255;
  282. d /= 255;
  283. e /= 255;
  284. var g = Math.min(Math.min(b, d), e),
  285. l = Math.max(Math.max(b, d), e),
  286. k = l - g;
  287. if (0 === k) return [null, 0, 100 * l];
  288. b = b === g ? 3 + (e - d) / k : d === g ? 5 + (b - e) / k : 1 + (d - b) / k;
  289. return [60 * (6 === b ? 0 : b), (k / l) * 100, 100 * l];
  290. },
  291. HSV_RGB: function (b, d, e) {
  292. e = (e / 100) * 255;
  293. if (null === b) return [e, e, e];
  294. b /= 60;
  295. d /= 100;
  296. var g = Math.floor(b),
  297. l = e * (1 - d);
  298. b = e * (1 - d * (g % 2 ? b - g : 1 - (b - g)));
  299. switch (g) {
  300. case 6:
  301. case 0:
  302. return [e, b, l];
  303. case 1:
  304. return [b, e, l];
  305. case 2:
  306. return [l, e, b];
  307. case 3:
  308. return [l, b, e];
  309. case 4:
  310. return [b, l, e];
  311. case 5:
  312. return [e, l, b];
  313. }
  314. },
  315. parseColorString: function (b) {
  316. var d = { rgba: null, format: null },
  317. e;
  318. if ((e = b.match(/^\W*([0-9A-F]{3,8})\W*$|^currentcolor$/i))) {
  319. if ("currentcolor" === e[0].toLowerCase()) return (d.format = "hexa"), (d.rgba = [255, 255, 255, 255]), d;
  320. if (8 === e[1].length)
  321. (d.format = "hexa"), (d.rgba = [parseInt(e[1].slice(0, 2), 16), parseInt(e[1].slice(2, 4), 16), parseInt(e[1].slice(4, 6), 16), parseInt(e[1].slice(6, 8), 16) / 255]);
  322. else if (6 === e[1].length) (d.format = "hex"), (d.rgba = [parseInt(e[1].slice(0, 2), 16), parseInt(e[1].slice(2, 4), 16), parseInt(e[1].slice(4, 6), 16), 1]);
  323. else if (3 === e[1].length)
  324. (d.format = "hex"), (d.rgba = [parseInt(e[1].charAt(0) + e[1].charAt(0), 16), parseInt(e[1].charAt(1) + e[1].charAt(1), 16), parseInt(e[1].charAt(2) + e[1].charAt(2), 16), 1]);
  325. else return !1;
  326. return d;
  327. }
  328. if ((e = b.match(/^\W*rgba?\(([^)]*)\)\W*$/i))) {
  329. b = e[1].split(",");
  330. e = /^\s*(\d+|\d*\.\d+|\d+\.\d*)\s*$/;
  331. var g, l, k, q;
  332. if (3 <= b.length && (g = b[0].match(e)) && (l = b[1].match(e)) && (k = b[2].match(e)))
  333. return (
  334. (d.format = "rgb"),
  335. (d.rgba = [parseFloat(g[1]) || 0, parseFloat(l[1]) || 0, parseFloat(k[1]) || 0, 1]),
  336. 4 <= b.length && (q = b[3].match(e)) && ((d.format = "rgba"), (d.rgba[3] = parseFloat(q[1]) || 0)),
  337. d
  338. );
  339. }
  340. return !1;
  341. },
  342. isAlphaFormat: function (b) {
  343. switch (b.toLowerCase()) {
  344. case "hexa":
  345. case "rgba":
  346. return !0;
  347. }
  348. return !1;
  349. },
  350. scaleCanvasForHighDPR: function (b) {
  351. var d = p.devicePixelRatio || 1;
  352. b.width *= d;
  353. b.height *= d;
  354. b.getContext("2d").scale(d, d);
  355. },
  356. genColorPreviewCanvas: function (b, d, e, g) {
  357. var l = Math.round(a.pub.previewSeparator.length),
  358. k = a.pub.chessboardSize,
  359. q = a.pub.chessboardColor1,
  360. r = a.pub.chessboardColor2;
  361. e = e ? e : 2 * k;
  362. var t = 2 * k,
  363. u = a.createEl("canvas"),
  364. x = u.getContext("2d");
  365. u.width = e;
  366. u.height = t;
  367. g && a.scaleCanvasForHighDPR(u);
  368. x.fillStyle = q;
  369. x.fillRect(0, 0, e, t);
  370. x.fillStyle = r;
  371. for (g = 0; g < e; g += 2 * k) x.fillRect(g, 0, k, k), x.fillRect(g + k, k, k, k);
  372. b && ((x.fillStyle = b), x.fillRect(0, 0, e, t));
  373. b = null;
  374. switch (d) {
  375. case "left":
  376. b = 0;
  377. x.clearRect(0, 0, l / 2, t);
  378. break;
  379. case "right":
  380. (b = e - l), x.clearRect(e - l / 2, 0, l / 2, t);
  381. }
  382. if (null !== b)
  383. for (x.lineWidth = 1, d = 0; d < a.pub.previewSeparator.length; d += 1)
  384. x.beginPath(), (x.strokeStyle = a.pub.previewSeparator[d]), x.moveTo(0.5 + b + d, 0), x.lineTo(0.5 + b + d, t), x.stroke();
  385. return { canvas: u, width: e, height: t };
  386. },
  387. redrawPosition: function () {
  388. if (a.picker && a.picker.owner) {
  389. var b = a.picker.owner;
  390. if (b.fixed) {
  391. var d = a.getElementPos(b.targetElement, !0);
  392. var e = [0, 0];
  393. } else (d = a.getElementPos(b.targetElement)), (e = a.getViewPos());
  394. var g = a.getElementSize(b.targetElement),
  395. l = a.getViewSize(),
  396. k = a.getPickerDims(b),
  397. q = [k.borderW, k.borderH];
  398. switch (b.position.toLowerCase()) {
  399. case "left":
  400. k = 1;
  401. var r = 0;
  402. var t = -1;
  403. break;
  404. case "right":
  405. k = 1;
  406. r = 0;
  407. t = 1;
  408. break;
  409. case "top":
  410. k = 0;
  411. r = 1;
  412. t = -1;
  413. break;
  414. default:
  415. (k = 0), (t = r = 1);
  416. }
  417. var u = (g[r] + q[r]) / 2;
  418. d = b.smartPosition
  419. ? [
  420. -e[k] + d[k] + q[k] > l[k] ? (-e[k] + d[k] + g[k] / 2 > l[k] / 2 && 0 <= d[k] + g[k] - q[k] ? d[k] + g[k] - q[k] : d[k]) : d[k],
  421. -e[r] + d[r] + g[r] + q[r] - u + u * t > l[r]
  422. ? -e[r] + d[r] + g[r] / 2 > l[r] / 2 && 0 <= d[r] + g[r] - u - u * t
  423. ? d[r] + g[r] - u - u * t - 4
  424. : d[r] + g[r] - u + u * t + 4
  425. : 0 <= d[r] + g[r] - u + u * t
  426. ? d[r] + g[r] - u + u * t - 4
  427. : d[r] + g[r] - u - u * t + 4,
  428. ]
  429. : [d[k], d[r] + g[r] - u + u * t - 4];
  430. a._drawPosition(d[k], d[r], b.fixed ? "fixed" : "absolute");
  431. }
  432. },
  433. _drawPosition: function (b, d, e) {
  434. a.picker.wrap.style.left = b + "px";
  435. a.picker.wrap.style.top = d + "px";
  436. a.picker.wrap.style.position = e;
  437. },
  438. getPickerDims: function (b) {
  439. var d = 2 * b.controlBorderWidth + b.width,
  440. e = 2 * b.controlBorderWidth + b.height,
  441. g = 2 * b.controlBorderWidth + 2 * a.getControlPadding(b) + b.sliderSize;
  442. a.getSliderChannel(b) && (d += g);
  443. b.hasAlphaChannel() && (d += g);
  444. b.closeButton && (e += 2 * b.controlBorderWidth + b.padding + b.buttonHeight);
  445. g = d + 2 * b.padding;
  446. var l = e + 2 * b.padding;
  447. return {
  448. contentW: d,
  449. contentH: e,
  450. paddedW: g,
  451. paddedH: l,
  452. borderW: g + 2 * b.borderWidth,
  453. borderH: l + 2 * b.borderWidth,
  454. };
  455. },
  456. getControlPadding: function (b) {
  457. return Math.max(b.padding / 2, 2 * b.pointerBorderWidth + b.pointerThickness - b.controlBorderWidth);
  458. },
  459. getPadYChannel: function (b) {
  460. switch (b.mode.charAt(1).toLowerCase()) {
  461. case "v":
  462. return "v";
  463. }
  464. return "s";
  465. },
  466. getSliderChannel: function (b) {
  467. if (2 < b.mode.length)
  468. switch (b.mode.charAt(2).toLowerCase()) {
  469. case "s":
  470. return "s";
  471. case "v":
  472. return "v";
  473. }
  474. return null;
  475. },
  476. triggerCallback: function (b, d) {
  477. if (b[d]) {
  478. var e = null;
  479. if ("string" === typeof b[d])
  480. try {
  481. e = new Function(b[d]);
  482. } catch (g) {
  483. console.error(g);
  484. }
  485. else e = b[d];
  486. e && e.call(b);
  487. }
  488. },
  489. triggerGlobal: function (b) {
  490. for (var d = a.getInstances(), e = 0; e < d.length; e += 1) d[e].trigger(b);
  491. },
  492. _pointerMoveEvent: { mouse: "mousemove", touch: "touchmove" },
  493. _pointerEndEvent: { mouse: "mouseup", touch: "touchend" },
  494. _pointerOrigin: null,
  495. onDocumentKeyUp: function (b) {
  496. -1 !== ["Tab", "Escape"].indexOf(a.eventKey(b)) && a.picker && a.picker.owner && a.picker.owner.tryHide();
  497. },
  498. onWindowResize: function (b) {
  499. a.redrawPosition();
  500. },
  501. onWindowScroll: function (b) {
  502. a.redrawPosition();
  503. },
  504. onParentScroll: function (b) {
  505. a.picker && a.picker.owner && a.picker.owner.tryHide();
  506. },
  507. onConfigIfMouseDown: function (b) {
  508. b = b.composedPath()[0] || b.target || b.srcElement;
  509. b.frcp && b.frcp instanceof a.pub
  510. ? b.frcp.showOnClick && !b.disabled && (a.picker && a.picker.owner ? a.picker.owner.tryHide() : b.frcp.show())
  511. : a.picker && a.picker.owner && a.picker.owner.tryHide();
  512. },
  513. onDocumentMouseDown: function (b) {
  514. if (!b.target || !b.target.nodeName || "fr-configure" !== b.target.nodeName.toLowerCase()) {
  515. var d = b.target || b.srcElement;
  516. if (a.getData(d, "gui")) {
  517. if (a.getData(d, "control")) a.onControlPointerStart(b, d, a.getData(d, "control"), "mouse");
  518. } else a.picker && a.picker.owner && a.picker.owner.tryHide();
  519. }
  520. },
  521. onPickerTouchStart: function (b) {
  522. var d = b.target || b.srcElement;
  523. if (a.getData(d, "control")) a.onControlPointerStart(b, d, a.getData(d, "control"), "touch");
  524. },
  525. onControlPointerStart: function (b, d, e, g) {
  526. var l = a.getData(d, "instance");
  527. a.preventDefault(b);
  528. var k = function (t, u) {
  529. a.attachGroupEvent("drag", t, a._pointerMoveEvent[g], a.onDocumentPointerMove(b, d, e, g, u));
  530. a.attachGroupEvent("drag", t, a._pointerEndEvent[g], a.onDocumentPointerEnd(b, d, e, g));
  531. };
  532. k(p.document, [0, 0]);
  533. if (p.parent && p.frameElement) {
  534. var q = p.frDOMRects;
  535. "undefined" === typeof q && (q = { toggle: !1, cur: 1, prev: 1 });
  536. q = q.toggle ? q.cur : 1;
  537. var r = p.frameElement.getBoundingClientRect();
  538. k(p.parent.window.document, [-r.left * q, -r.top * q]);
  539. }
  540. k = a.getAbsPointerPos(b);
  541. q = a.getRelPointerPos(b);
  542. a._pointerOrigin = { x: k.x - q.x, y: k.y - q.y };
  543. switch (e) {
  544. case "pad":
  545. "v" === a.getSliderChannel(l) && 0 === l.channels.v && l.fromHSVA(null, null, 100, null);
  546. a.setPad(l, b, 0, 0);
  547. break;
  548. case "sld":
  549. a.setSld(l, b, 0);
  550. break;
  551. case "asld":
  552. a.setASld(l, b, 0);
  553. }
  554. l.trigger("input");
  555. },
  556. onDocumentPointerMove: function (b, d, e, g, l) {
  557. return function (k) {
  558. var q = a.getData(d, "instance");
  559. switch (e) {
  560. case "pad":
  561. a.setPad(q, k, l[0], l[1]);
  562. break;
  563. case "sld":
  564. a.setSld(q, k, l[1]);
  565. break;
  566. case "asld":
  567. a.setASld(q, k, l[1]);
  568. }
  569. q.trigger("input");
  570. };
  571. },
  572. onDocumentPointerEnd: function (b, d, e, g) {
  573. return function (l) {
  574. l = a.getData(d, "instance");
  575. a.detachGroupEvents("drag");
  576. l.trigger("input");
  577. l.trigger("change");
  578. };
  579. },
  580. setPad: function (b, d, e, g) {
  581. d = a.getAbsPointerPos(d);
  582. e = (360 / (b.width - 1)) * (e + d.x - a._pointerOrigin.x - b.padding - b.controlBorderWidth);
  583. g = 100 - (100 / (b.height - 1)) * (g + d.y - a._pointerOrigin.y - b.padding - b.controlBorderWidth);
  584. switch (a.getPadYChannel(b)) {
  585. case "s":
  586. b.fromHSVA(e, g, null, null);
  587. break;
  588. case "v":
  589. b.fromHSVA(e, null, g, null);
  590. }
  591. },
  592. setSld: function (b, d, e) {
  593. d = a.getAbsPointerPos(d);
  594. e = 100 - (100 / (b.height - 1)) * (e + d.y - a._pointerOrigin.y - b.padding - b.controlBorderWidth);
  595. switch (a.getSliderChannel(b)) {
  596. case "s":
  597. b.fromHSVA(null, e, null, null);
  598. break;
  599. case "v":
  600. b.fromHSVA(null, null, e, null);
  601. }
  602. },
  603. setASld: function (b, d, e) {
  604. d = a.getAbsPointerPos(d);
  605. e = 1 - (1 / (b.height - 1)) * (e + d.y - a._pointerOrigin.y - b.padding - b.controlBorderWidth);
  606. 1 > e && ((d = b.getFormat()), "any" !== b.format.toLowerCase() || a.isAlphaFormat(d) || b._setFormat("hex" === d ? "hexa" : "rgba"));
  607. b.fromHSVA(null, null, null, e);
  608. },
  609. createPadCanvas: function () {
  610. var b = { elm: null, draw: null },
  611. d = a.createEl("canvas"),
  612. e = d.getContext("2d");
  613. b.elm = d;
  614. b.draw = function (g, l, k) {
  615. d.width = g;
  616. d.height = l;
  617. e.clearRect(0, 0, d.width, d.height);
  618. g = e.createLinearGradient(0, 0, d.width, 0);
  619. g.addColorStop(0, "#F00");
  620. g.addColorStop(1 / 6, "#FF0");
  621. g.addColorStop(2 / 6, "#0F0");
  622. g.addColorStop(0.5, "#0FF");
  623. g.addColorStop(4 / 6, "#00F");
  624. g.addColorStop(5 / 6, "#F0F");
  625. g.addColorStop(1, "#F00");
  626. e.fillStyle = g;
  627. e.fillRect(0, 0, d.width, d.height);
  628. g = e.createLinearGradient(0, 0, 0, d.height);
  629. switch (k.toLowerCase()) {
  630. case "s":
  631. g.addColorStop(0, "rgba(255,255,255,0)");
  632. g.addColorStop(1, "rgba(255,255,255,1)");
  633. break;
  634. case "v":
  635. g.addColorStop(0, "rgba(0,0,0,0)"), g.addColorStop(1, "rgba(0,0,0,1)");
  636. }
  637. e.fillStyle = g;
  638. e.fillRect(0, 0, d.width, d.height);
  639. };
  640. return b;
  641. },
  642. createSliderGradient: function () {
  643. var b = { elm: null, draw: null },
  644. d = a.createEl("canvas"),
  645. e = d.getContext("2d");
  646. b.elm = d;
  647. b.draw = function (g, l, k, q) {
  648. d.width = g;
  649. d.height = l;
  650. e.clearRect(0, 0, d.width, d.height);
  651. g = e.createLinearGradient(0, 0, 0, d.height);
  652. g.addColorStop(0, k);
  653. g.addColorStop(1, q);
  654. e.fillStyle = g;
  655. e.fillRect(0, 0, d.width, d.height);
  656. };
  657. return b;
  658. },
  659. createASliderGradient: function () {
  660. var b = { elm: null, draw: null },
  661. d = a.createEl("canvas"),
  662. e = d.getContext("2d");
  663. b.elm = d;
  664. b.draw = function (g, l, k) {
  665. d.width = g;
  666. d.height = l;
  667. e.clearRect(0, 0, d.width, d.height);
  668. g = d.width / 2;
  669. l = a.pub.chessboardColor2;
  670. e.fillStyle = a.pub.chessboardColor1;
  671. e.fillRect(0, 0, d.width, d.height);
  672. if (0 < g) for (var q = 0; q < d.height; q += 2 * g) (e.fillStyle = l), e.fillRect(0, q, g, g), e.fillRect(g, q + g, g, g);
  673. g = e.createLinearGradient(0, 0, 0, d.height);
  674. g.addColorStop(0, k);
  675. g.addColorStop(1, "rgba(0,0,0,0)");
  676. e.fillStyle = g;
  677. e.fillRect(0, 0, d.width, d.height);
  678. };
  679. return b;
  680. },
  681. flags: { leaveValue: 1, leaveAlpha: 2, leavePreview: 4 },
  682. enumOpts: {
  683. format: "auto any hex hexa rgb rgba".split(" "),
  684. previewPosition: ["left", "right"],
  685. mode: ["hsv", "hvs", "hs", "hv"],
  686. position: ["left", "right", "top", "bottom"],
  687. alphaChannel: ["auto", !0, !1],
  688. },
  689. deprecatedOpts: {
  690. styleElement: "previewElement",
  691. onFineChange: "onInput",
  692. overwriteImportant: "forceStyle",
  693. closable: "closeButton",
  694. insetWidth: "controlBorderWidth",
  695. insetColor: "controlBorderColor",
  696. refine: null,
  697. },
  698. pub: function (b, d, e) {
  699. function g(c, h) {
  700. if ("string" !== typeof c) throw Error("Invalid value for option name: " + c);
  701. if (a.enumOpts.hasOwnProperty(c) && ("string" === typeof h && (h = h.toLowerCase()), -1 === a.enumOpts[c].indexOf(h))) throw Error("Option '" + c + "' has invalid value: " + h);
  702. if (a.deprecatedOpts.hasOwnProperty(c)) {
  703. var m = a.deprecatedOpts[c];
  704. if (m) c = m;
  705. else throw Error("Option '" + c + "' is DEPRECATED");
  706. }
  707. m = "set__" + c;
  708. if ("function" === typeof f[m]) return f[m](h), !0;
  709. if (c in f) return (f[c] = h), !0;
  710. throw Error("Unrecognized configuration option: " + c);
  711. }
  712. function l() {
  713. f._processParentElementsInDOM();
  714. a.picker ||
  715. ((a.picker = {
  716. owner: null,
  717. wrap: a.createEl("fr-colorpicker"),
  718. box: a.createEl("div"),
  719. boxB: a.createEl("div"),
  720. pad: a.createEl("div"),
  721. padB: a.createEl("div"),
  722. padM: a.createEl("div"),
  723. padCanvas: a.createPadCanvas(),
  724. cross: a.createEl("div"),
  725. crossBY: a.createEl("div"),
  726. crossBX: a.createEl("div"),
  727. crossLY: a.createEl("div"),
  728. crossLX: a.createEl("div"),
  729. sld: a.createEl("div"),
  730. sldB: a.createEl("div"),
  731. sldM: a.createEl("div"),
  732. sldGrad: a.createSliderGradient(),
  733. sldPtrS: a.createEl("div"),
  734. sldPtrIB: a.createEl("div"),
  735. sldPtrMB: a.createEl("div"),
  736. sldPtrOB: a.createEl("div"),
  737. asld: a.createEl("div"),
  738. asldB: a.createEl("div"),
  739. asldM: a.createEl("div"),
  740. asldGrad: a.createASliderGradient(),
  741. asldPtrS: a.createEl("div"),
  742. asldPtrIB: a.createEl("div"),
  743. asldPtrMB: a.createEl("div"),
  744. asldPtrOB: a.createEl("div"),
  745. }),
  746. a.picker.pad.appendChild(a.picker.padCanvas.elm),
  747. a.picker.padB.appendChild(a.picker.pad),
  748. a.picker.cross.appendChild(a.picker.crossBY),
  749. a.picker.cross.appendChild(a.picker.crossBX),
  750. a.picker.cross.appendChild(a.picker.crossLY),
  751. a.picker.cross.appendChild(a.picker.crossLX),
  752. a.picker.padB.appendChild(a.picker.cross),
  753. a.picker.box.appendChild(a.picker.padB),
  754. a.picker.box.appendChild(a.picker.padM),
  755. a.picker.sld.appendChild(a.picker.sldGrad.elm),
  756. a.picker.sldB.appendChild(a.picker.sld),
  757. a.picker.sldB.appendChild(a.picker.sldPtrOB),
  758. a.picker.sldPtrOB.appendChild(a.picker.sldPtrMB),
  759. a.picker.sldPtrMB.appendChild(a.picker.sldPtrIB),
  760. a.picker.sldPtrIB.appendChild(a.picker.sldPtrS),
  761. a.picker.box.appendChild(a.picker.sldB),
  762. a.picker.box.appendChild(a.picker.sldM),
  763. a.picker.asld.appendChild(a.picker.asldGrad.elm),
  764. a.picker.asldB.appendChild(a.picker.asld),
  765. a.picker.asldB.appendChild(a.picker.asldPtrOB),
  766. a.picker.asldPtrOB.appendChild(a.picker.asldPtrMB),
  767. a.picker.asldPtrMB.appendChild(a.picker.asldPtrIB),
  768. a.picker.asldPtrIB.appendChild(a.picker.asldPtrS),
  769. a.picker.box.appendChild(a.picker.asldB),
  770. a.picker.box.appendChild(a.picker.asldM),
  771. a.picker.boxB.appendChild(a.picker.box),
  772. a.picker.wrap.appendChild(a.picker.boxB),
  773. a.picker.wrap.addEventListener("touchstart", a.onPickerTouchStart, a.isPassiveEventSupported ? { passive: !1 } : !1));
  774. var c = a.picker,
  775. h = !!a.getSliderChannel(f),
  776. m = f.hasAlphaChannel(),
  777. n = a.getPickerDims(f),
  778. v = 2 * f.pointerBorderWidth + f.pointerThickness + 2 * f.crossSize,
  779. w = a.getControlPadding(f),
  780. A = Math.min(f.borderRadius, Math.round(f.padding * Math.PI));
  781. c.wrap.className = I;
  782. c.wrap.style.clear = "both";
  783. c.wrap.style.display = "block";
  784. c.wrap.style.visibility = "visible";
  785. c.wrap.style.opacity = "1";
  786. c.wrap.style.width = n.borderW + "px";
  787. c.wrap.style.height = n.borderH + "px";
  788. c.wrap.style.zIndex = f.zIndex;
  789. c.box.className = J;
  790. c.box.style.width = n.paddedW + "px";
  791. c.box.style.height = n.paddedH + "px";
  792. c.box.style.position = "relative";
  793. c.boxB.className = K;
  794. c.boxB.style.position = "relative";
  795. c.boxB.style.setProperty("border", f.borderWidth + "px solid " + f.borderColor, "important");
  796. c.boxB.style.setProperty("background", f.backgroundColor, "important");
  797. a.setBorderRadius(c.boxB, A + "px");
  798. c.padM.style.background = "rgba(255,0,0,.2)";
  799. c.sldM.style.background = "rgba(0,255,0,.2)";
  800. c.asldM.style.background = "rgba(0,0,255,.2)";
  801. c.padM.style.opacity = c.sldM.style.opacity = c.asldM.style.opacity = "0";
  802. c.pad.style.position = "relative";
  803. c.pad.style.width = f.width + "px";
  804. c.pad.style.height = f.height + "px";
  805. c.padCanvas.draw(f.width, f.height, a.getPadYChannel(f));
  806. c.padB.style.position = "absolute";
  807. c.padB.style.left = f.padding + "px";
  808. c.padB.style.top = f.padding + "px";
  809. c.padB.style.border = f.controlBorderWidth + "px solid";
  810. c.padB.style.setProperty("border-color", f.controlBorderColor, "important");
  811. c.padM.style.position = "absolute";
  812. c.padM.style.left = "0px";
  813. c.padM.style.top = "0px";
  814. c.padM.style.width = f.padding + 2 * f.controlBorderWidth + f.width + w + "px";
  815. c.padM.style.height = 2 * f.controlBorderWidth + 2 * f.padding + f.height + "px";
  816. c.padM.style.cursor = "crosshair";
  817. a.setData(c.padM, { instance: f, control: "pad" });
  818. c.cross.style.position = "absolute";
  819. c.cross.style.left = c.cross.style.top = "0";
  820. c.cross.style.width = c.cross.style.height = v + "px";
  821. c.crossBY.style.position = c.crossBX.style.position = "absolute";
  822. c.crossBY.style.setProperty("background", f.pointerBorderColor, "important");
  823. c.crossBX.style.setProperty("background", f.pointerBorderColor, "important");
  824. c.crossBY.style.width = c.crossBX.style.height = 2 * f.pointerBorderWidth + f.pointerThickness + "px";
  825. c.crossBY.style.height = c.crossBX.style.width = v + "px";
  826. c.crossBY.style.left = c.crossBX.style.top = Math.floor(v / 2) - Math.floor(f.pointerThickness / 2) - f.pointerBorderWidth + "px";
  827. c.crossBY.style.top = c.crossBX.style.left = "0";
  828. c.crossLY.style.position = c.crossLX.style.position = "absolute";
  829. c.crossLY.style.setProperty("background", f.pointerColor, "important");
  830. c.crossLX.style.setProperty("background", f.pointerColor, "important");
  831. c.crossLY.style.height = c.crossLX.style.width = v - 2 * f.pointerBorderWidth + "px";
  832. c.crossLY.style.width = c.crossLX.style.height = f.pointerThickness + "px";
  833. c.crossLY.style.left = c.crossLX.style.top = Math.floor(v / 2) - Math.floor(f.pointerThickness / 2) + "px";
  834. c.crossLY.style.top = c.crossLX.style.left = f.pointerBorderWidth + "px";
  835. c.sld.style.overflow = "hidden";
  836. c.sld.style.width = f.sliderSize + "px";
  837. c.sld.style.height = f.height + "px";
  838. c.sldGrad.draw(f.sliderSize, f.height, "#000", "#000");
  839. c.sldB.style.display = h ? "block" : "none";
  840. c.sldB.style.position = "absolute";
  841. c.sldB.style.left = f.padding + f.width + 2 * f.controlBorderWidth + 2 * w + "px";
  842. c.sldB.style.top = f.padding + "px";
  843. c.sldB.style.setProperty("border", f.controlBorderWidth + "px solid " + f.controlBorderColor, "important");
  844. c.sldM.style.display = h ? "block" : "none";
  845. c.sldM.style.position = "absolute";
  846. c.sldM.style.left = f.padding + f.width + 2 * f.controlBorderWidth + w + "px";
  847. c.sldM.style.top = "0px";
  848. c.sldM.style.width = f.sliderSize + 2 * w + 2 * f.controlBorderWidth + (m ? 0 : Math.max(0, f.padding - w)) + "px";
  849. c.sldM.style.height = 2 * f.controlBorderWidth + 2 * f.padding + f.height + "px";
  850. c.sldM.style.cursor = "default";
  851. a.setData(c.sldM, { instance: f, control: "sld" });
  852. c.sldPtrIB.style.setProperty("border", f.pointerBorderWidth + "px solid " + f.pointerBorderColor, "important");
  853. c.sldPtrOB.style.setProperty("border", f.pointerBorderWidth + "px solid " + f.pointerBorderColor, "important");
  854. c.sldPtrOB.style.position = "absolute";
  855. c.sldPtrOB.style.left = -(2 * f.pointerBorderWidth + f.pointerThickness) + "px";
  856. c.sldPtrOB.style.top = "0";
  857. c.sldPtrMB.style.setProperty("border", f.pointerThickness + "px solid " + f.pointerColor, "important");
  858. c.sldPtrS.style.width = f.sliderSize + "px";
  859. c.sldPtrS.style.height = a.pub.sliderInnerSpace + "px";
  860. c.asld.style.overflow = "hidden";
  861. c.asld.style.width = f.sliderSize + "px";
  862. c.asld.style.height = f.height + "px";
  863. c.asldGrad.draw(f.sliderSize, f.height, "#000");
  864. c.asldB.style.display = m ? "block" : "none";
  865. c.asldB.style.position = "absolute";
  866. c.asldB.style.left = f.padding + f.width + 2 * f.controlBorderWidth + w + (h ? f.sliderSize + 3 * w + 2 * f.controlBorderWidth : 0) + "px";
  867. c.asldB.style.top = f.padding + "px";
  868. c.asldB.style.border = f.controlBorderWidth + "px solid";
  869. c.asldB.style.setProperty("border-color", f.controlBorderColor, "important");
  870. c.asldM.style.display = m ? "block" : "none";
  871. c.asldM.style.position = "absolute";
  872. c.asldM.style.left = f.padding + f.width + 2 * f.controlBorderWidth + w + (h ? f.sliderSize + 2 * w + 2 * f.controlBorderWidth : 0) + "px";
  873. c.asldM.style.top = "0px";
  874. c.asldM.style.width = f.sliderSize + 2 * w + 2 * f.controlBorderWidth + Math.max(0, f.padding - w) + "px";
  875. c.asldM.style.height = 2 * f.controlBorderWidth + 2 * f.padding + f.height + "px";
  876. c.asldM.style.cursor = "default";
  877. a.setData(c.asldM, { instance: f, control: "asld" });
  878. c.asldPtrIB.style.setProperty("border", f.pointerBorderWidth + "px solid " + f.pointerBorderColor, "important");
  879. c.asldPtrOB.style.setProperty("border", f.pointerBorderWidth + "px solid " + f.pointerBorderColor, "important");
  880. c.asldPtrOB.style.position = "absolute";
  881. c.asldPtrOB.style.left = -(2 * f.pointerBorderWidth + f.pointerThickness) + "px";
  882. c.asldPtrOB.style.top = "0";
  883. c.asldPtrMB.style.setProperty("border", f.pointerThickness + "px solid " + f.pointerColor, "important");
  884. c.asldPtrS.style.width = f.sliderSize + "px";
  885. c.asldPtrS.style.height = a.pub.sliderInnerSpace + "px";
  886. k();
  887. q();
  888. r();
  889. a.picker.owner && a.picker.owner !== f && a.removeClass(a.picker.owner.targetElement, a.pub.activeClassName);
  890. a.picker.owner = f;
  891. f.container === p.document.documentElement ? a.redrawPosition() : a._drawPosition(f, 0, 0, "relative", !1);
  892. c.wrap.parentNode !== f.container &&
  893. (h = a.node("dialog[id^='fr-dialog-']")) &&
  894. (h.appendChild(c.wrap), h.hasAttribute("open") && h.close && h.close(), (h.inert = !0), h.showModal && h.showModal(), h.removeAttribute("inert"), h.focus());
  895. a.addClass(f.targetElement, a.pub.activeClassName);
  896. }
  897. function k() {
  898. var c = a.getPadYChannel(f);
  899. c = Math.round((1 - f.channels[c] / 100) * (f.height - 1));
  900. var h = -Math.floor((2 * f.pointerBorderWidth + f.pointerThickness + 2 * f.crossSize) / 2);
  901. a.picker.cross.style.left = Math.round((f.channels.h / 360) * (f.width - 1)) + h + "px";
  902. a.picker.cross.style.top = c + h + "px";
  903. switch (a.getSliderChannel(f)) {
  904. case "s":
  905. h = a.HSV_RGB(f.channels.h, 100, f.channels.v);
  906. c = a.HSV_RGB(f.channels.h, 0, f.channels.v);
  907. h = "rgb(" + Math.round(h[0]) + "," + Math.round(h[1]) + "," + Math.round(h[2]) + ")";
  908. a.picker.sldGrad.draw(f.sliderSize, f.height, h, "rgb(" + Math.round(c[0]) + "," + Math.round(c[1]) + "," + Math.round(c[2]) + ")");
  909. break;
  910. case "v":
  911. (c = a.HSV_RGB(f.channels.h, f.channels.s, 100)),
  912. (h = "rgb(" + Math.round(c[0]) + "," + Math.round(c[1]) + "," + Math.round(c[2]) + ")"),
  913. a.picker.sldGrad.draw(f.sliderSize, f.height, h, "#000");
  914. }
  915. a.picker.asldGrad.draw(f.sliderSize, f.height, f.toHEXString());
  916. }
  917. function q() {
  918. var c = a.getSliderChannel(f);
  919. c &&
  920. (a.picker.sldPtrOB.style.top =
  921. Math.round((1 - f.channels[c] / 100) * (f.height - 1)) - (2 * f.pointerBorderWidth + f.pointerThickness) - Math.floor(a.pub.sliderInnerSpace / 2) + "px");
  922. a.picker.asldGrad.draw(f.sliderSize, f.height, f.toHEXString());
  923. }
  924. function r() {
  925. a.picker.asldPtrOB.style.top = Math.round((1 - f.channels.a) * (f.height - 1)) - (2 * f.pointerBorderWidth + f.pointerThickness) - Math.floor(a.pub.sliderInnerSpace / 2) + "px";
  926. }
  927. function t() {
  928. return a.picker && a.picker.owner === f;
  929. }
  930. function u(c) {
  931. "Enter" === a.eventKey(c) && (f.valueElement && f.processValueInput(f.valueElement.value), f.tryHide());
  932. }
  933. function x(c) {
  934. "Enter" === a.eventKey(c) && (f.alphaElement && f.processAlphaInput(f.alphaElement.value), f.tryHide());
  935. }
  936. function L(c) {
  937. a.getData(c, "internal") ||
  938. ((c = f.valueElement.value),
  939. f.processValueInput(f.valueElement.value),
  940. a.triggerCallback(f, "onChange"),
  941. f.valueElement.value !== c && a.triggerInputEvent(f.valueElement, "change", !0, !0));
  942. }
  943. function M(c) {
  944. a.getData(c, "internal") ||
  945. ((c = f.alphaElement.value),
  946. f.processAlphaInput(f.alphaElement.value),
  947. a.triggerCallback(f, "onChange"),
  948. a.triggerInputEvent(f.valueElement, "change", !0, !0),
  949. f.alphaElement.value !== c && a.triggerInputEvent(f.alphaElement, "change", !0, !0));
  950. }
  951. function N(c) {
  952. a.getData(c, "internal") || (f.valueElement && f.fromString(f.valueElement.value, a.flags.leaveValue), a.triggerCallback(f, "onInput"));
  953. }
  954. function O(c) {
  955. a.getData(c, "internal") ||
  956. (f.alphaElement && f.fromHSVA(null, null, null, parseFloat(f.alphaElement.value), a.flags.leaveAlpha),
  957. a.triggerCallback(f, "onInput"),
  958. a.triggerInputEvent(f.valueElement, "input", !0, !0));
  959. }
  960. D = d;
  961. D.addEventListener("click", a.onConfigIfMouseDown, !1);
  962. var f = this;
  963. e || (e = {});
  964. this.channels = { r: 255, g: 255, b: 255, h: 0, s: 0, v: 100, a: 1 };
  965. this.format = "auto";
  966. this.alpha = this.value = void 0;
  967. this.random = !1;
  968. this.previewElement = this.alphaElement = this.valueElement = this.onInput = this.onChange = void 0;
  969. this.previewPosition = "left";
  970. this.previewSize = 35;
  971. this.previewPadding = 8;
  972. this.forceStyle = this.uppercase = this.hash = this.required = !0;
  973. this.width = 186;
  974. this.height = 210;
  975. this.mode = "HSV";
  976. this.alphaChannel = "auto";
  977. this.position = "top";
  978. this.hideOnLeave = this.showOnClick = this.smartPosition = !0;
  979. this.sliderSize = 12;
  980. this.crossSize = 8;
  981. this.closeButton = !1;
  982. this.closeText = "Close";
  983. this.buttonColor = "rgba(0,0,0,1)";
  984. this.buttonHeight = 18;
  985. this.padding = 8;
  986. this.backgroundColor = "rgba(206,226,237,0.91)";
  987. this.borderWidth = 1;
  988. this.borderColor = "rgba(187,187,187,1)";
  989. this.borderRadius = 4;
  990. this.controlBorderWidth = 1;
  991. this.controlBorderColor = "rgba(187,187,187,0.7)";
  992. this.pointerColor = "rgba(76,76,76,1)";
  993. this.pointerBorderWidth = 1;
  994. this.pointerBorderColor = "rgba(255,255,255,0.6)";
  995. this.pointerThickness = 2;
  996. this.zIndex = 2147483646;
  997. this.container = void 0;
  998. this.minS = 0;
  999. this.maxS = 100;
  1000. this.minV = 0;
  1001. this.maxV = 100;
  1002. this.minA = 0;
  1003. this.maxA = 1;
  1004. this.option = function () {
  1005. if (!arguments.length) throw Error("No option specified");
  1006. if (1 === arguments.length && "string" === typeof arguments[0]) {
  1007. try {
  1008. var c = arguments[0];
  1009. if ("string" !== typeof c) throw Error("Invalid value for option name: " + c);
  1010. if (a.deprecatedOpts.hasOwnProperty(c)) {
  1011. var h = a.deprecatedOpts[c];
  1012. if (h) c = h;
  1013. else throw Error("Option '" + c + "' is DEPRECATED");
  1014. }
  1015. var m = "get__" + c;
  1016. if ("function" === typeof f[m]) var n = f[m](value);
  1017. else if (c in f) n = f[c];
  1018. else throw Error("Unrecognized configuration option: " + c);
  1019. return n;
  1020. } catch (v) {
  1021. console.error(v);
  1022. }
  1023. return !1;
  1024. }
  1025. if (2 <= arguments.length && "string" === typeof arguments[0]) {
  1026. try {
  1027. if (!g(arguments[0], arguments[1])) return !1;
  1028. } catch (v) {
  1029. return console.error(v), !1;
  1030. }
  1031. this.redraw();
  1032. this.exposeColor();
  1033. return !0;
  1034. }
  1035. if (1 === arguments.length && "object" === typeof arguments[0]) {
  1036. n = arguments[0];
  1037. c = !0;
  1038. for (m in n)
  1039. if (n.hasOwnProperty(m))
  1040. try {
  1041. g(m, n[m]) || (c = !1);
  1042. } catch (v) {
  1043. console.error(v), (c = !1);
  1044. }
  1045. this.redraw();
  1046. this.exposeColor();
  1047. return c;
  1048. }
  1049. throw Error("Invalid arguments");
  1050. };
  1051. this.channel = function (c, h) {
  1052. if ("string" !== typeof c) throw Error("Invalid value for channel name: " + c);
  1053. if (void 0 === h) return this.channels.hasOwnProperty(c.toLowerCase()) ? this.channels[c.toLowerCase()] : !1;
  1054. switch (c.toLowerCase()) {
  1055. case "r":
  1056. c = this.fromRGBA(h, null, null, null);
  1057. break;
  1058. case "g":
  1059. c = this.fromRGBA(null, h, null, null);
  1060. break;
  1061. case "b":
  1062. c = this.fromRGBA(null, null, h, null);
  1063. break;
  1064. case "h":
  1065. c = this.fromHSVA(h, null, null, null);
  1066. break;
  1067. case "s":
  1068. c = this.fromHSVA(null, h, null, null);
  1069. break;
  1070. case "v":
  1071. c = this.fromHSVA(null, null, h, null);
  1072. break;
  1073. case "a":
  1074. c = this.fromHSVA(null, null, null, h);
  1075. break;
  1076. default:
  1077. return !1;
  1078. }
  1079. return c ? (this.redraw(), !0) : !1;
  1080. };
  1081. this.trigger = function (c) {
  1082. c = a.strList(c);
  1083. for (var h = 0; h < c.length; h += 1) {
  1084. var m = c[h].toLowerCase(),
  1085. n = null;
  1086. switch (m) {
  1087. case "input":
  1088. n = "onInput";
  1089. break;
  1090. case "change":
  1091. n = "onChange";
  1092. }
  1093. n && a.triggerCallback(this, n);
  1094. a.triggerInputEvent(this.valueElement, m, !0, !0);
  1095. }
  1096. };
  1097. this.fromHSVA = function (c, h, m, n, v) {
  1098. void 0 === c && (c = null);
  1099. void 0 === h && (h = null);
  1100. void 0 === m && (m = null);
  1101. void 0 === n && (n = null);
  1102. if (null !== c) {
  1103. if (isNaN(c)) return !1;
  1104. this.channels.h = Math.max(0, Math.min(360, c));
  1105. }
  1106. if (null !== h) {
  1107. if (isNaN(h)) return !1;
  1108. this.channels.s = Math.max(0, Math.min(100, this.maxS, h), this.minS);
  1109. }
  1110. if (null !== m) {
  1111. if (isNaN(m)) return !1;
  1112. this.channels.v = Math.max(0, Math.min(100, this.maxV, m), this.minV);
  1113. }
  1114. if (null !== n) {
  1115. if (isNaN(n)) return !1;
  1116. this.channels.a = this.hasAlphaChannel() ? Math.max(0, Math.min(1, this.maxA, n), this.minA) : 1;
  1117. }
  1118. c = a.HSV_RGB(this.channels.h, this.channels.s, this.channels.v);
  1119. this.channels.r = c[0];
  1120. this.channels.g = c[1];
  1121. this.channels.b = c[2];
  1122. this.exposeColor(v);
  1123. return !0;
  1124. };
  1125. this.fromRGBA = function (c, h, m, n, v) {
  1126. void 0 === c && (c = null);
  1127. void 0 === h && (h = null);
  1128. void 0 === m && (m = null);
  1129. void 0 === n && (n = null);
  1130. if (null !== c) {
  1131. if (isNaN(c)) return !1;
  1132. c = Math.max(0, Math.min(255, c));
  1133. }
  1134. if (null !== h) {
  1135. if (isNaN(h)) return !1;
  1136. h = Math.max(0, Math.min(255, h));
  1137. }
  1138. if (null !== m) {
  1139. if (isNaN(m)) return !1;
  1140. m = Math.max(0, Math.min(255, m));
  1141. }
  1142. if (null !== n) {
  1143. if (isNaN(n)) return !1;
  1144. this.channels.a = this.hasAlphaChannel() ? Math.max(0, Math.min(1, this.maxA, n), this.minA) : 1;
  1145. }
  1146. c = a.RGB_HSV(null === c ? this.channels.r : c, null === h ? this.channels.g : h, null === m ? this.channels.b : m);
  1147. null !== c[0] && (this.channels.h = Math.max(0, Math.min(360, c[0])));
  1148. 0 !== c[2] && (this.channels.s = Math.max(0, this.minS, Math.min(100, this.maxS, c[1])));
  1149. this.channels.v = Math.max(0, this.minV, Math.min(100, this.maxV, c[2]));
  1150. c = a.HSV_RGB(this.channels.h, this.channels.s, this.channels.v);
  1151. this.channels.r = c[0];
  1152. this.channels.g = c[1];
  1153. this.channels.b = c[2];
  1154. this.exposeColor(v);
  1155. return !0;
  1156. };
  1157. this.fromHSV = function (c, h, m, n) {
  1158. return this.fromHSVA(c, h, m, null, n);
  1159. };
  1160. this.fromRGB = function (c, h, m, n) {
  1161. return this.fromRGBA(c, h, m, null, n);
  1162. };
  1163. this.fromString = function (c, h) {
  1164. if (!this.required && "" === c.trim()) return this.setPreviewElementBg(null), this.setValueElementValue(""), !0;
  1165. c = a.parseColorString(c);
  1166. if (!c) return !1;
  1167. "any" === this.format.toLowerCase() && (this._setFormat(c.format), a.isAlphaFormat(this.getFormat()) || (c.rgba[3] = 1));
  1168. this.fromRGBA(c.rgba[0], c.rgba[1], c.rgba[2], c.rgba[3], h);
  1169. return !0;
  1170. };
  1171. this.randomize = function (c, h, m, n, v, w, A, E) {
  1172. void 0 === c && (c = 0);
  1173. void 0 === h && (h = 100);
  1174. void 0 === m && (m = 0);
  1175. void 0 === n && (n = 100);
  1176. void 0 === v && (v = 0);
  1177. void 0 === w && (w = 359);
  1178. void 0 === A && (A = 1);
  1179. void 0 === E && (E = 1);
  1180. this.fromHSVA(
  1181. v + Math.floor(Math.random() * (w - v + 1)),
  1182. m + Math.floor(Math.random() * (n - m + 1)),
  1183. c + Math.floor(Math.random() * (h - c + 1)),
  1184. (100 * A + Math.floor(Math.random() * (100 * (E - A) + 1))) / 100
  1185. );
  1186. };
  1187. this.toString = function (c) {
  1188. void 0 === c && (c = this.getFormat());
  1189. switch (c.toLowerCase()) {
  1190. case "hex":
  1191. return this.toHEXString();
  1192. case "hexa":
  1193. return this.toHEXAString();
  1194. case "rgb":
  1195. return this.toRGBString();
  1196. case "rgba":
  1197. return this.toRGBAString();
  1198. }
  1199. return !1;
  1200. };
  1201. this.toHEXString = function () {
  1202. return a.hexColor(this.channels.r, this.channels.g, this.channels.b);
  1203. };
  1204. this.toHEXAString = function () {
  1205. return a.hexaColor(this.channels.r, this.channels.g, this.channels.b, this.channels.a);
  1206. };
  1207. this.toRGBString = function () {
  1208. return a.rgbColor(this.channels.r, this.channels.g, this.channels.b);
  1209. };
  1210. this.toRGBAString = function () {
  1211. return a.rgbaColor(this.channels.r, this.channels.g, this.channels.b, this.channels.a);
  1212. };
  1213. this.toGrayscale = function () {
  1214. return 0.213 * this.channels.r + 0.715 * this.channels.g + 0.072 * this.channels.b;
  1215. };
  1216. this.toCanvas = function () {
  1217. return a.genColorPreviewCanvas(this.toRGBAString()).canvas;
  1218. };
  1219. this.isLight = function () {
  1220. return 127.5 < this.toGrayscale();
  1221. };
  1222. this.hide = function () {
  1223. t() &&
  1224. (a.removeClass(f.targetElement, a.pub.activeClassName),
  1225. a.picker.wrap && a.picker.wrap.parentNode && a.picker.wrap.parentNode.removeChild(a.picker.wrap),
  1226. delete a.picker.owner);
  1227. };
  1228. this.show = function () {
  1229. l();
  1230. };
  1231. this.redraw = function () {
  1232. t() && l();
  1233. };
  1234. this.getFormat = function () {
  1235. return this._currentFormat;
  1236. };
  1237. this._setFormat = function (c) {
  1238. this._currentFormat = c.toLowerCase();
  1239. };
  1240. this.hasAlphaChannel = function () {
  1241. return "auto" === this.alphaChannel
  1242. ? "any" === this.format.toLowerCase() || a.isAlphaFormat(this.getFormat()) || void 0 !== this.alpha || void 0 !== this.alphaElement
  1243. : this.alphaChannel;
  1244. };
  1245. this.processValueInput = function (c) {
  1246. this.fromString(c) || this.exposeColor();
  1247. };
  1248. this.processAlphaInput = function (c) {
  1249. this.fromHSVA(null, null, null, parseFloat(c)) || this.exposeColor();
  1250. };
  1251. this.exposeColor = function (c) {
  1252. var h = this.toString(),
  1253. m = this.getFormat();
  1254. a.setDataAttr(this.targetElement, "current-color", h);
  1255. if (!(c & a.flags.leaveValue) && this.valueElement) {
  1256. if ("hex" === m || "hexa" === m) this.uppercase || (h = h.toLowerCase()), this.hash || (h = h.replace(/^#/, ""));
  1257. this.setValueElementValue(h);
  1258. }
  1259. c & a.flags.leaveAlpha || !this.alphaElement || this.setAlphaElementValue(Math.round(100 * this.channels.a) / 100);
  1260. c & a.flags.leavePreview ||
  1261. !this.previewElement ||
  1262. (a.isTextInput(this.previewElement) || (a.isButton(this.previewElement) && a.isButtonEmpty(this.previewElement)), this.setPreviewElementBg(this.toRGBAString()));
  1263. t() && (k(), q(), r());
  1264. };
  1265. this.setPreviewElementBg = function (c) {
  1266. if (this.previewElement) {
  1267. var h = null,
  1268. m = null;
  1269. if (a.isTextInput(this.previewElement) || (a.isButton(this.previewElement) && !a.isButtonEmpty(this.previewElement))) (h = this.previewPosition), (m = this.previewSize);
  1270. var n = [];
  1271. if (c) {
  1272. n.push({ size: "auto" });
  1273. var v = a.genColorPreviewCanvas("rgba(0,0,0,0)", h ? { left: "right", right: "left" }[h] : null, m, !0);
  1274. n.push({ size: v.width + "px " + v.height + "px" });
  1275. } else n.push({ size: "auto" });
  1276. v = [];
  1277. for (var w = 0; w < n.length; w += 1) v.push(n[w].size);
  1278. c = {
  1279. "--fr-input-color": c,
  1280. "--fr-input-color-edge": m + "px",
  1281. "--fr-input-color-edge2": m + 1 + "px",
  1282. "--fr-input-gb-size": v.join(", "),
  1283. };
  1284. a.setStyle(this.previewElement, c, !this.forceStyle);
  1285. c = { left: null, right: null };
  1286. h && (c[h] = this.previewSize + this.previewPadding + "px");
  1287. c = { "--fr-input-padding-left": c.left };
  1288. a.setStyle(this.previewElement, c, !this.forceStyle, !0);
  1289. }
  1290. };
  1291. this.setValueElementValue = function (c) {
  1292. this.valueElement && ("input" === a.nodeName(this.valueElement) ? (this.valueElement.value = c) : (this.valueElement.textContent = c));
  1293. };
  1294. this.setAlphaElementValue = function (c) {
  1295. this.alphaElement && ("input" === a.nodeName(this.alphaElement) ? (this.alphaElement.value = c) : (this.alphaElement.textContent = c));
  1296. };
  1297. this._processParentElementsInDOM = function () {
  1298. if (!this._parentElementsProcessed) {
  1299. this._parentElementsProcessed = !0;
  1300. var c = this.targetElement;
  1301. do {
  1302. var h = a.getCompStyle(c);
  1303. c instanceof ShadowRoot && (this.fixed = !0);
  1304. h.position && "fixed" === h.position.toLowerCase() && (this.fixed = !0);
  1305. c === this.targetElement || a.getData(c, "hasScrollListener") || (c.addEventListener("scroll", a.onParentScroll, !1), a.setData(c, "hasScrollListener", !0));
  1306. } while ((c = c.parentNode) && "body" !== a.nodeName(c));
  1307. }
  1308. };
  1309. this.tryHide = function () {
  1310. this.hideOnLeave && this.hide();
  1311. };
  1312. if (a.pub.options)
  1313. for (var y in a.pub.options)
  1314. if (a.pub.options.hasOwnProperty(y))
  1315. try {
  1316. g(y, a.pub.options[y]);
  1317. } catch (c) {
  1318. console.error(c);
  1319. }
  1320. d = [];
  1321. e.preset && ("string" === typeof e.preset ? (d = e.preset.split(/\s+/)) : Array.isArray(e.preset) ? (d = e.preset.slice()) : console.warn("Unrecognized value"));
  1322. -1 === d.indexOf("default") && d.push("default");
  1323. for (var F = d.length - 1; 0 <= F; --F) {
  1324. var C = d[F];
  1325. if (C && a.pub.presets.hasOwnProperty(C))
  1326. for (y in a.pub.presets[C])
  1327. if (a.pub.presets[C].hasOwnProperty(y))
  1328. try {
  1329. g(y, a.pub.presets[C][y]);
  1330. } catch (c) {
  1331. console.error(c);
  1332. }
  1333. }
  1334. d = ["preset"];
  1335. for (y in e)
  1336. if (e.hasOwnProperty(y) && -1 === d.indexOf(y))
  1337. try {
  1338. g(y, e[y]);
  1339. } catch (c) {
  1340. console.error(c);
  1341. }
  1342. this.container = void 0 === this.container ? p.document.documentElement : a.node(this.container);
  1343. if (!this.container) throw Error("No container element");
  1344. this.targetElement = a.node(b);
  1345. if (!this.targetElement) {
  1346. if ("string" === typeof b && /^[a-zA-Z][\w:.-]*$/.test(b)) throw Error("Need CSS selector.");
  1347. throw Error("No target element");
  1348. }
  1349. if (this.targetElement.frcp && this.targetElement.frcp instanceof a.pub) throw Error("Redundant Fr-Color-picker");
  1350. this.targetElement.frcp = this;
  1351. a.addClass(this.targetElement, a.pub.className);
  1352. a.instances.push(this);
  1353. a.isButton(this.targetElement) &&
  1354. ("button" !== this.targetElement.type.toLowerCase() && (this.targetElement.type = "button"),
  1355. a.isButtonEmpty(this.targetElement) &&
  1356. (a.removeChildren(this.targetElement),
  1357. this.targetElement.appendChild(p.document.createTextNode("\u00a0")),
  1358. (b = a.getCompStyle(this.targetElement)),
  1359. (parseFloat(b["min-width"]) || 0) < this.previewSize && a.setStyle(this.targetElement, { "min-width": this.previewSize + "px" }, this.forceStyle)));
  1360. void 0 === this.valueElement
  1361. ? a.isTextInput(this.targetElement) && (this.valueElement = this.targetElement)
  1362. : null !== this.valueElement && (this.valueElement = a.node(this.valueElement));
  1363. this.alphaElement && (this.alphaElement = a.node(this.alphaElement));
  1364. void 0 === this.previewElement ? (this.previewElement = this.targetElement) : null !== this.previewElement && (this.previewElement = a.node(this.previewElement));
  1365. this.valueElement &&
  1366. a.isTextInput(this.valueElement) &&
  1367. ((b = this.valueElement.oninput),
  1368. (this.valueElement.oninput = null),
  1369. this.valueElement.addEventListener("keydown", u, !1),
  1370. this.valueElement.addEventListener("change", L, !1),
  1371. this.valueElement.addEventListener("input", N, !1),
  1372. b && this.valueElement.addEventListener("input", b, !1),
  1373. this.valueElement.setAttribute("autocomplete", "off"),
  1374. this.valueElement.setAttribute("autocorrect", "off"),
  1375. this.valueElement.setAttribute("autocapitalize", "off"),
  1376. this.valueElement.setAttribute("spellcheck", !1));
  1377. this.alphaElement &&
  1378. a.isTextInput(this.alphaElement) &&
  1379. (this.alphaElement.addEventListener("keydown", x, !1),
  1380. this.alphaElement.addEventListener("change", M, !1),
  1381. this.alphaElement.addEventListener("input", O, !1),
  1382. this.alphaElement.setAttribute("autocomplete", "off"),
  1383. this.alphaElement.setAttribute("autocorrect", "off"),
  1384. this.alphaElement.setAttribute("autocapitalize", "off"),
  1385. this.alphaElement.setAttribute("spellcheck", !1));
  1386. b = "FFFFFF";
  1387. void 0 !== this.value ? (b = this.value) : this.valueElement && void 0 !== this.valueElement.value && (b = this.valueElement.value);
  1388. e = void 0;
  1389. void 0 !== this.alpha ? (e = "" + this.alpha) : this.alphaElement && void 0 !== this.alphaElement.value && (e = this.alphaElement.value);
  1390. this._currentFormat = null;
  1391. -1 < ["auto", "any"].indexOf(this.format.toLowerCase())
  1392. ? (this._currentFormat = (y = a.parseColorString(b)) ? y.format : "hex")
  1393. : (this._currentFormat = this.format.toLowerCase());
  1394. this.processValueInput(b);
  1395. void 0 !== e && this.processAlphaInput(e);
  1396. this.random && this.randomize.apply(this, Array.isArray(this.random) ? this.random : []);
  1397. },
  1398. };
  1399. a.pub.className = G;
  1400. a.pub.activeClassName = H;
  1401. a.pub.looseJSON = !0;
  1402. a.pub.presets = {};
  1403. a.pub.presets["default"] = {};
  1404. a.pub.sliderInnerSpace = 3;
  1405. a.pub.chessboardSize = 8;
  1406. a.pub.chessboardColor1 = "#666666";
  1407. a.pub.chessboardColor2 = "#999999";
  1408. a.pub.previewSeparator = [];
  1409. a.pub.init = function () {
  1410. if (!a.initialized)
  1411. for (
  1412. p.document.addEventListener("mousedown", a.onDocumentMouseDown, !1),
  1413. p.document.addEventListener("keyup", a.onDocumentKeyUp, !1),
  1414. p.addEventListener("resize", a.onWindowResize, !1),
  1415. p.addEventListener("scroll", a.onWindowScroll, !1),
  1416. a.initialized = !0;
  1417. a.readyQueue.length;
  1418.  
  1419. )
  1420. a.readyQueue.shift()();
  1421. };
  1422. a.pub.ready = function (b) {
  1423. if ("function" !== typeof b) return !1;
  1424. a.initialized ? b() : a.readyQueue.push(b);
  1425. return !0;
  1426. };
  1427. a.pub.trigger = function (b) {
  1428. var d = function () {
  1429. a.triggerGlobal(b);
  1430. };
  1431. a.initialized ? d() : a.pub.ready(d);
  1432. };
  1433. a.pub.hide = function () {
  1434. a.picker && a.picker.owner && a.picker.owner.hide();
  1435. };
  1436. a.pub.options = {};
  1437. a.pub.lookupClass = G;
  1438. a.pub.installByClassName = function () {
  1439. return !1;
  1440. };
  1441. a.register();
  1442. return a.pub;
  1443. })();
  1444. "undefined" === typeof p.FRColorPicker && (p.FRColorPicker = B);
  1445. return B;
  1446. });