akkd-all-sites

Akkd All Sites

  1. // #region UserScript Metadata
  2.  
  3. // ==UserScript==
  4.  
  5. // #region Info
  6.  
  7. // @name akkd-all-sites
  8. // @namespace 93akkord/userscripts
  9. // @version 0.0.9
  10. // @description Akkd All Sites
  11. // @copyright 2022+, Michael Barros (https://gf.qytechs.cn/en/users/1123632-93akkord)
  12. // @license CC-BY-NC-SA-4.0; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
  13. // @license GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0.txt
  14. // @author 93Akkord
  15. // @run-at document-start
  16. // @icon data:image/png;base64,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
  17.  
  18. // #endregion Info
  19.  
  20. // #region Matches/Includes/Excludes
  21.  
  22. // @include /^.*$/
  23.  
  24. // #endregion Matches/Includes/Excludes
  25.  
  26. // #region Grants
  27.  
  28. // @grant GM_addElement
  29. // @grant GM_addStyle
  30. // @grant GM_addValueChangeListener
  31. // @grant GM_cookie
  32. // @grant GM_deleteValue
  33. // @grant GM_download
  34. // @grant GM_getResourceText
  35. // @grant GM_getResourceURL
  36. // @grant GM_getTab
  37. // @grant GM_getTabs
  38. // @grant GM_getValue
  39. // @grant GM_listValues
  40. // @grant GM_log
  41. // @grant GM_notification
  42. // @grant GM_openInTab
  43. // @grant GM_registerMenuCommand
  44. // @grant GM_removeValueChangeListener
  45. // @grant GM_saveTab
  46. // @grant GM_setClipboard
  47. // @grant GM_setValue
  48. // @grant GM_unregisterMenuCommand
  49. // @grant GM_webRequest
  50. // @grant GM_xmlhttpRequest
  51. // @grant unsafeWindow
  52. // @grant window.close
  53. // @grant window.focus
  54. // @grant window.onurlchange
  55.  
  56. // #endregion Grants
  57.  
  58. // #region Resources
  59.  
  60. // #endregion Resources
  61.  
  62. // #region Requires
  63.  
  64. // @require https://code.jquery.com/jquery-3.2.1.min.js
  65. // @require https://cdnjs.cloudflare.com/ajax/libs/arrive/2.4.1/arrive.min.js
  66. // @require https://gf.qytechs.cn/scripts/474546-loglevel/code/loglevel.js
  67. // @require https://gf.qytechs.cn/scripts/474549-akkd-common/code/akkd-common.js
  68. // @require https://gf.qytechs.cn/scripts/474617-gm-config-93akkord-fork/code/GM_config-93Akkord-Fork.js
  69.  
  70. // #endregion Requires
  71.  
  72. // #region Other
  73.  
  74. // noframes
  75. // @connect *
  76.  
  77. // #endregion Other
  78.  
  79. // ==/UserScript==
  80.  
  81. // ==OpenUserJS==
  82.  
  83. // @author 93Akkord
  84.  
  85. // ==/OpenUserJS==
  86.  
  87. // #endregion UserScript Metadata
  88.  
  89. // #region Type References
  90.  
  91. /// <reference path='./node_modules/@types/tampermonkey/index.d.ts' />
  92. /// <reference path='./node_modules/@types/jquery/index.d.ts' />
  93. /// <reference path='./node_modules/@types/arrive/index.d.ts' />
  94.  
  95. // #endregion Type References
  96.  
  97. const logger = getLogger('akkd', { logLevel: log.levels.DEBUG });
  98.  
  99. function setupConfig(logger) {
  100. // demo: http://sizzlemctwizzle.github.io/GM_config/
  101. GM_config.init({
  102. id: `main-${location.host.replace(/\./g, '_')}`,
  103. title: 'Akkd All Sites Config',
  104.  
  105. fields: {
  106. // test: https://www.codingwithjesse.com/demo/2007-05-16-detect-browser-window-focus/
  107. always_focus: {
  108. label: 'Always Focus',
  109. type: 'checkbox',
  110. default: false,
  111. },
  112. },
  113.  
  114. events: {
  115. init: function () {
  116. init('loaded', () => alwaysOnFocus(GM_config.get('always_focus')));
  117. },
  118. open: function () {
  119. alwaysOnFocus(true);
  120. },
  121. save: function () {},
  122. close: function () {
  123. alwaysOnFocus(GM_config.get('always_focus'));
  124. },
  125. reset: function () {},
  126. },
  127. });
  128. }
  129.  
  130. let contextMenusSetup = false;
  131.  
  132. function registryContextMenuItems() {
  133. try {
  134. if (!contextMenusSetup) {
  135. createCustomContextMenu(document.body);
  136.  
  137. let menuId = GM_registerMenuCommand(`Config`, () => {
  138. GM_config.open();
  139. });
  140.  
  141. // let markdownLinkToClipboardId = GM_registerMenuCommand(`Markdown link to clipboard`, () => {
  142. // GM_setClipboard(`[${document.title}](${location.href})`);
  143. // });
  144.  
  145. contextMenusSetup = true;
  146. }
  147. } catch (error) {
  148. setTimeout(() => {
  149. registryContextMenuItems();
  150. }, 100);
  151. }
  152. }
  153.  
  154. /**
  155. *
  156. *
  157. * @author Michael Barros <michaelcbarros@gmail.com>
  158. * @param {any[]} arr
  159. * @returns {number}
  160. */
  161. function getPadLength(arr) {
  162. let padLength = 0;
  163.  
  164. for (const item of arr) {
  165. const width = String(item).length;
  166.  
  167. if (width > padLength) {
  168. padLength = width;
  169. }
  170. }
  171.  
  172. return padLength;
  173. }
  174.  
  175. /**
  176. *
  177. *
  178. * @author Michael Barros <michaelcbarros@gmail.com>
  179. * @param {any[][]} arrs
  180. * @returns {number[]}
  181. */
  182. function getPadLengthLists(arrs) {
  183. let cellCount = null;
  184.  
  185. for (const arr of arrs) {
  186. if (cellCount === null) {
  187. cellCount = arr.length;
  188. } else {
  189. if (cellCount !== arr.length) {
  190. throw new Error(`Different cell counts ${cellCount} <-> ${arr.length} :: ${arr}`);
  191. }
  192. }
  193. }
  194.  
  195. const padLengths = [];
  196.  
  197. for (let i = 0; i < cellCount; i++) {
  198. const columnItems = arrs.map((lst) => lst[i]);
  199.  
  200. padLengths.push(getPadLength(columnItems));
  201. }
  202.  
  203. return padLengths;
  204. }
  205.  
  206. /**
  207. *
  208. *
  209. * @author Michael Barros <michaelcbarros@gmail.com>
  210. * @param {HTMLTableElement} table
  211. * @returns {number[]}
  212. */
  213. function getTablePadLengthList(table) {
  214. let rows = [];
  215.  
  216. for (let i = 0; i < table.rows.length; i++) {
  217. let row = [];
  218.  
  219. for (let j = 0; j < table.rows[i].cells.length; j++) {
  220. let cell = table.rows[i].cells[j];
  221.  
  222. row.push(cell.textContent.trim());
  223. }
  224.  
  225. rows.push(row);
  226. }
  227.  
  228. return getPadLengthLists(rows);
  229. }
  230.  
  231. /**
  232. *
  233. *
  234. * @author Michael Barros <michaelcbarros@gmail.com>
  235. * @param {HTMLTableElement} table
  236. * @returns {string}
  237. */
  238. function htmlToMarkdown(table, firstRowHeader = true) {
  239. let padLengths = getTablePadLengthList(table);
  240. let markdown = [];
  241.  
  242. for (let i = 0; i < table.rows.length; i++) {
  243. let row = table.rows[i];
  244. let cells = [];
  245.  
  246. for (let j = 0; j < row.cells.length; j++) {
  247. let cell = row.cells[j];
  248.  
  249. cells.push(cell.textContent.trim().padEnd(padLengths[j]));
  250. }
  251.  
  252. markdown.push(`| ${cells.join(' | ')} |`);
  253.  
  254. if (firstRowHeader && i === 0) {
  255. cells = [];
  256.  
  257. for (let j = 0; j < row.cells.length; j++) {
  258. cells.push('-'.repeat(padLengths[j] + 2));
  259. }
  260.  
  261. markdown.push(`|${cells.join('|')}|`);
  262. }
  263. }
  264.  
  265. return markdown.join('\n');
  266. }
  267.  
  268. function exposeGlobalVariables() {
  269. function safeExposeJQuery() {
  270. let toExpose = [];
  271.  
  272. for (let i = 1; i <= 4; i++) {
  273. const jQueryVar = '$'.repeat(i);
  274.  
  275. try {
  276. if (getWindow()[jQueryVar].toString().includes('[Command Line API]')) {
  277. toExpose.push({ name: jQueryVar, value: window[jQueryVar] });
  278. }
  279. } catch (error) {}
  280. }
  281.  
  282. return toExpose;
  283. }
  284.  
  285. let variables = [
  286. // libs
  287. { name: 'jQuery', value: jQuery },
  288. // { name: '$', value: $ },
  289.  
  290. // functions/variables
  291. { name: 'pp', value: pp },
  292. { name: 'pformat', value: pformat },
  293. { name: 'getObjProps', value: getObjProps },
  294. { name: 'getUserDefinedGlobalProps', value: getUserDefinedGlobalProps },
  295. { name: 'getLocalStorageSize', value: getLocalStorageSize },
  296. { name: 'unsafeWindow', value: unsafeWindow },
  297. { name: 'getWindow', value: getWindow },
  298. { name: 'getTopWindow', value: getTopWindow },
  299. { name: 'getStyle', value: getStyle },
  300.  
  301. { name: 'GM_info', value: GM_info },
  302.  
  303. { name: 'alwaysOnFocus', value: alwaysOnFocus },
  304. ];
  305.  
  306. variables = variables.concat(safeExposeJQuery());
  307.  
  308. GM_info.script.grant.forEach((grant) => {
  309. if (grant.includes('GM_')) {
  310. variables.push({
  311. name: grant,
  312. value: window[grant],
  313. });
  314. }
  315. });
  316.  
  317. variables.forEach((variable, index, variables) => {
  318. try {
  319. setupWindowProps(getWindow(), variable.name, variable.value);
  320. } catch (error) {
  321. logger.error(`Unable to expose variable ${variable.name} into the global scope.`);
  322. }
  323. });
  324. }
  325.  
  326. function startPerformanceMonitor() {
  327. // if (getWindow().top != getWindow().self) {
  328. // setTimeout(() => {
  329. let _window = 'unsafeWindow' in window ? getWindow() : window;
  330.  
  331. class Stats {
  332. constructor({
  333. //
  334. containerId = 'performance-monitor-container',
  335. includeMem = true,
  336. includeMemOld = true,
  337. includeFps = true,
  338. includeMs = true,
  339. } = {}) {
  340. this.mode = 0;
  341. this.container = document.createElement('div');
  342. this.on = false;
  343. this.changing = false;
  344.  
  345. this.includeMem = includeMem;
  346. this.includeMemOld = includeMemOld;
  347. this.includeFps = includeFps;
  348. this.includeMs = includeMs;
  349.  
  350. this.container.id = containerId;
  351. this.container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
  352. this.container.style.display = 'none';
  353. this.container.addEventListener('click', (ev) => {
  354. if (!this.me.moving && !this.me.keyPressed) {
  355. ev.preventDefault();
  356.  
  357. this.showPanel(++this.mode % this.container.children.length);
  358. }
  359. });
  360.  
  361. this.beginTime = (performance || Date).now();
  362. this.prevTime = this.beginTime;
  363. this.frames = 0;
  364.  
  365. this.memPanel;
  366.  
  367. /** @type {Panel} */
  368. this.memPanelOld;
  369.  
  370. /** @type {Panel} */
  371. this.fpsPanel;
  372.  
  373. /** @type {Panel} */
  374. this.msPanel;
  375.  
  376. if (_window.self.performance && _window.self.performance.memory) {
  377. if (this.includeMem) {
  378. this.memPanel = new MemoryStats();
  379.  
  380. this.container.appendChild(this.memPanel.domElement);
  381. }
  382.  
  383. if (this.includeMemOld) {
  384. this.memPanelOld = this.addPanel(new Panel('MB', '#f08', '#201'));
  385. }
  386. }
  387.  
  388. if (this.includeFps) {
  389. this.fpsPanel = this.addPanel(new Panel('FPS', '#0ff', '#002'));
  390. }
  391.  
  392. if (this.includeMs) {
  393. this.msPanel = this.addPanel(new Panel('MS', '#0f0', '#020'));
  394. }
  395.  
  396. this.showPanel(0);
  397.  
  398. this.REVISION = 16;
  399. this.dom = this.container;
  400. this.domElement = this.container;
  401. this.setMode = this.showPanel;
  402.  
  403. this.me = new MoveableElement(this.container, true);
  404. this.me.init();
  405. }
  406.  
  407. showPanel(id) {
  408. for (let i = 0; i < this.container.children.length; i++) {
  409. this.container.children[i].style.display = i === id ? 'block' : 'none';
  410. }
  411.  
  412. this.mode = id;
  413. }
  414.  
  415. addPanel(panel) {
  416. this.container.appendChild(panel.dom);
  417.  
  418. return panel;
  419. }
  420.  
  421. begin() {
  422. this.beginTime = (performance || Date).now();
  423. }
  424.  
  425. end() {
  426. let time = (performance || Date).now();
  427. this.frames++;
  428.  
  429. if (this.msPanel) {
  430. this.msPanel.update(time - this.beginTime, 200);
  431. }
  432.  
  433. if (time >= this.prevTime + 1000) {
  434. if (this.fpsPanel) {
  435. this.fpsPanel.update((this.frames * 1000) / (time - this.prevTime), 100);
  436. }
  437.  
  438. this.prevTime = time;
  439. this.frames = 0;
  440.  
  441. if (this.memPanel) {
  442. this.memPanel.update(performance.memory.usedJSHeapSize / 1048576, performance.memory.jsHeapSizeLimit / 1048576);
  443. }
  444.  
  445. if (this.memPanelOld) {
  446. this.memPanelOld.update(performance.memory.usedJSHeapSize / 1048576, performance.memory.jsHeapSizeLimit / 1048576);
  447. }
  448. }
  449.  
  450. return time;
  451. }
  452.  
  453. update() {
  454. this.beginTime = this.end();
  455. }
  456.  
  457. start(cb) {
  458. if (!this.on) {
  459. this.on = true;
  460.  
  461. this.showPanel(this.mode);
  462.  
  463. this.container.style.display = 'block';
  464.  
  465. this.animate(cb);
  466. }
  467. }
  468.  
  469. stop() {
  470. this.on = false;
  471.  
  472. this.container.style.display = 'none';
  473. }
  474.  
  475. animate(cb) {
  476. let _animate = () => {
  477. this.begin();
  478.  
  479. if (cb) {
  480. cb();
  481. }
  482.  
  483. this.end();
  484.  
  485. if (this.on) {
  486. requestAnimationFrame(_animate);
  487. }
  488. };
  489.  
  490. requestAnimationFrame(_animate);
  491. }
  492. }
  493.  
  494. class Panel {
  495. constructor(name, foreground, background) {
  496. this.name = name;
  497. this.foreground = foreground;
  498. this.background = background;
  499.  
  500. this.min = Infinity;
  501. this.max = 0;
  502. this.PR = Math.round(_window.devicePixelRatio || 1);
  503. this.WIDTH = 80 * this.PR;
  504. this.HEIGHT = 48 * this.PR;
  505. this.TEXT_X = 3 * this.PR;
  506. this.TEXT_Y = 2 * this.PR;
  507. this.GRAPH_X = 3 * this.PR;
  508. this.GRAPH_Y = 15 * this.PR;
  509. this.GRAPH_WIDTH = 74 * this.PR;
  510. this.GRAPH_HEIGHT = 30 * this.PR;
  511. this.canvas = document.createElement('canvas');
  512.  
  513. this.canvas.width = this.WIDTH;
  514. this.canvas.height = this.HEIGHT;
  515. this.canvas.style.cssText = 'width:80px;height:48px;cursor:pointer';
  516.  
  517. this.context = this.canvas.getContext('2d');
  518.  
  519. this.context.font = 'bold ' + 9 * this.PR + 'px Helvetica,Arial,sans-serif';
  520. this.context.textBaseline = 'top';
  521. this.context.fillStyle = this.background;
  522.  
  523. this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);
  524.  
  525. this.context.fillStyle = this.foreground;
  526.  
  527. this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y);
  528. this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);
  529.  
  530. this.context.fillStyle = this.background;
  531. this.context.globalAlpha = 0.9;
  532.  
  533. this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);
  534.  
  535. this.dom = this.canvas;
  536. }
  537.  
  538. update(value, maxValue) {
  539. this.min = Math.min(this.min, value);
  540. this.max = Math.max(this.max, value);
  541. this.context.fillStyle = this.background;
  542. this.context.globalAlpha = 1;
  543.  
  544. this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y);
  545.  
  546. this.context.fillStyle = this.foreground;
  547.  
  548. this.context.fillText(Math.round(value) + ' ' + this.name + ' (' + Math.round(this.min) + '-' + Math.round(this.max) + ')', this.TEXT_X, this.TEXT_Y);
  549. this.context.drawImage(this.canvas, this.GRAPH_X + this.PR, this.GRAPH_Y, this.GRAPH_WIDTH - this.PR, this.GRAPH_HEIGHT, this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH - this.PR, this.GRAPH_HEIGHT);
  550. this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - this.PR, this.GRAPH_Y, this.PR, this.GRAPH_HEIGHT);
  551.  
  552. this.context.fillStyle = this.background;
  553. this.context.globalAlpha = 0.9;
  554.  
  555. this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - this.PR, this.GRAPH_Y, this.PR, Math.round((1 - value / maxValue) * this.GRAPH_HEIGHT));
  556. }
  557. }
  558.  
  559. function MemoryStats() {
  560. let msMin = 100;
  561. let msMax = 0;
  562. let GRAPH_HEIGHT = 30;
  563. let GRAPH_WIDTH = 74;
  564. let redrawMBThreshold = GRAPH_HEIGHT;
  565.  
  566. let container = document.createElement('div');
  567. container.style.display = 'none';
  568. container.id = 'stats';
  569. container.style.cssText = 'width:80px;height:48px;opacity:0.9;cursor:pointer;overflow:hidden;z-index:10000;will-change:transform;';
  570.  
  571. let msDiv = document.createElement('div');
  572. msDiv.id = 'ms';
  573. msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;';
  574. container.appendChild(msDiv);
  575.  
  576. let msText = document.createElement('div');
  577. msText.id = 'msText';
  578. msText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
  579. msText.innerHTML = 'Memory';
  580. msDiv.appendChild(msText);
  581.  
  582. let msGraph = document.createElement('div');
  583. msGraph.id = 'msGraph';
  584. msGraph.style.cssText = 'position:relative;width:74px;height:' + GRAPH_HEIGHT + 'px;background-color:#0f0';
  585. msDiv.appendChild(msGraph);
  586.  
  587. while (msGraph.children.length < GRAPH_WIDTH) {
  588. let bar = document.createElement('span');
  589. bar.style.cssText = 'width:1px;height:' + GRAPH_HEIGHT + 'px;float:left;background-color:#131';
  590. msGraph.appendChild(bar);
  591. }
  592.  
  593. let updateGraph = function (dom, height, color) {
  594. let child = dom.appendChild(dom.firstChild);
  595. child.style.height = height + 'px';
  596. if (color) child.style.backgroundColor = color;
  597. };
  598.  
  599. let redrawGraph = function (dom, oHFactor, hFactor) {
  600. [].forEach.call(dom.children, function (c) {
  601. let cHeight = c.style.height.substring(0, c.style.height.length - 2);
  602.  
  603. // Convert to MB, change factor
  604. let newVal = GRAPH_HEIGHT - ((GRAPH_HEIGHT - cHeight) / oHFactor) * hFactor;
  605.  
  606. c.style.height = newVal + 'px';
  607. });
  608. };
  609.  
  610. // polyfill usedJSHeapSize
  611. if (_window.performance && !performance.memory) {
  612. performance.memory = { usedJSHeapSize: 0, totalJSHeapSize: 0 };
  613. }
  614.  
  615. // support of the API?
  616. if (performance.memory.totalJSHeapSize === 0) {
  617. logger.warn('totalJSHeapSize === 0... performance.memory is only available in Chrome .');
  618. }
  619.  
  620. let sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  621. let precision;
  622. let i;
  623. function bytesToSize(bytes, nFractDigit) {
  624. if (bytes === 0) return 'n/a';
  625. nFractDigit = nFractDigit !== undefined ? nFractDigit : 0;
  626. precision = Math.pow(10, nFractDigit);
  627. i = Math.floor(Math.log(bytes) / Math.log(1024));
  628. return Math.round((bytes * precision) / Math.pow(1024, i)) / precision + ' ' + sizes[i];
  629. }
  630.  
  631. // TODO, add a sanity check to see if values are bucketed.
  632. // If so, remind user to adopt the --enable-precise-memory-info flag.
  633. // open -a "/Applications/Google Chrome.app" --args --enable-precise-memory-info
  634.  
  635. let lastTime = Date.now();
  636. let lastUsedHeap = performance.memory.usedJSHeapSize;
  637. let delta = 0;
  638. let color = '#131';
  639. let ms = 0;
  640. let mbValue = 0;
  641. let factor = 0;
  642. let newThreshold = 0;
  643.  
  644. return {
  645. domElement: container,
  646.  
  647. update: function () {
  648. // update at 30fps
  649. if (Date.now() - lastTime < 1000 / 30) return;
  650. lastTime = Date.now();
  651.  
  652. delta = performance.memory.usedJSHeapSize - lastUsedHeap;
  653. lastUsedHeap = performance.memory.usedJSHeapSize;
  654.  
  655. // if memory has gone down, consider it a GC and draw a red bar.
  656. color = delta < 0 ? '#830' : '#131';
  657.  
  658. ms = lastUsedHeap;
  659. msMin = Math.min(msMin, ms);
  660. msMax = Math.max(msMax, ms);
  661. msText.textContent = 'Mem: ' + bytesToSize(ms, 2);
  662.  
  663. mbValue = ms / (1024 * 1024);
  664.  
  665. if (mbValue > redrawMBThreshold) {
  666. factor = (mbValue - (mbValue % GRAPH_HEIGHT)) / GRAPH_HEIGHT;
  667. newThreshold = GRAPH_HEIGHT * (factor + 1);
  668. redrawGraph(msGraph, GRAPH_HEIGHT / redrawMBThreshold, GRAPH_HEIGHT / newThreshold);
  669. redrawMBThreshold = newThreshold;
  670. }
  671.  
  672. updateGraph(msGraph, GRAPH_HEIGHT - mbValue * (GRAPH_HEIGHT / redrawMBThreshold), color);
  673. },
  674. };
  675. }
  676.  
  677. let stats = new Stats({
  678. includeMemOld: false,
  679. // includeFps: false,
  680. // includeMs: false,
  681. });
  682.  
  683. function initPerformanceMonitor() {
  684. if (!document.body) {
  685. setTimeout(() => {
  686. initPerformanceMonitor();
  687. }, 250);
  688. } else {
  689. function setupIFrameEvents() {
  690. setTimeout(() => {
  691. let iframes = document.querySelectorAll('iframe');
  692.  
  693. for (let i = 0; i < iframes.length; i++) {
  694. try {
  695. const iframe = iframes[i];
  696.  
  697. /** @type {Window} */
  698. let _window = iframe.contentWindow;
  699.  
  700. _window.document.addEventListener('keydown', function (e) {
  701. if (e.ctrlKey && e.shiftKey && e.key.toLowerCase() == 'm') {
  702. e.cancelBubble = true;
  703. e.preventDefault();
  704. e.stopImmediatePropagation();
  705.  
  706. _window.parent.postMessage('performance-monitor-keybind', '*');
  707. }
  708. });
  709. } catch (error) {}
  710. }
  711. }, 5000);
  712. }
  713.  
  714. document.body.appendChild(stats.dom);
  715.  
  716. let changing = false;
  717.  
  718. function startOrStop() {
  719. if (!changing) {
  720. changing = true;
  721.  
  722. if (!stats.on) {
  723. stats.start();
  724. } else {
  725. stats.stop();
  726. }
  727.  
  728. setTimeout(() => {
  729. changing = false;
  730. }, 500);
  731. }
  732. }
  733.  
  734. document.addEventListener('keydown', function (e) {
  735. if (e.ctrlKey && e.shiftKey && e.key.toLowerCase() == 'm') {
  736. e.cancelBubble = true;
  737. e.preventDefault();
  738. e.stopImmediatePropagation();
  739.  
  740. startOrStop();
  741. }
  742. });
  743.  
  744. setupIFrameEvents();
  745.  
  746. /**
  747. *
  748. *
  749. * @author Michael Barros <michaelcbarros@gmail.com>
  750. * @param {MessageEvent} ev
  751. */
  752. function messageEvent(ev) {
  753. if (ev.data === 'performance-monitor-keybind' || ev.message === 'performance-monitor-keybind') {
  754. startOrStop();
  755. }
  756. }
  757.  
  758. _window.removeEventListener('message', messageEvent);
  759. _window.addEventListener('message', messageEvent);
  760. }
  761. }
  762.  
  763. if (getTopWindow() === getWindow()) {
  764. initPerformanceMonitor();
  765. }
  766. }
  767.  
  768. function alwaysOnFocusOld() {
  769. let on = GM_getValue('always_focus', false);
  770. let focusMenuCommandID;
  771.  
  772. /**
  773. *
  774. *
  775. * @author Michael Barros <michaelcbarros@gmail.com>
  776. * @param {boolean} [init=false]
  777. */
  778. function registerAlwaysFocusMenuCommand(init = false) {
  779. if (!init) {
  780. on = !on;
  781.  
  782. GM_setValue('always_focus', on);
  783. }
  784.  
  785. if (focusMenuCommandID != undefined) {
  786. GM_unregisterMenuCommand(focusMenuCommandID);
  787. }
  788.  
  789. focusMenuCommandID = GM_registerMenuCommand(`Always Focus: ${on ? 'on' : 'off'}`, () => {
  790. registerAlwaysFocusMenuCommand();
  791. });
  792.  
  793. _alwaysOnFocus(on);
  794. }
  795.  
  796. function _alwaysOnFocus(on) {
  797. if (!('originalFocusValues' in getWindow())) {
  798. getWindow().originalFocusValues = {
  799. 'unsafeWindow.onblur': unsafeWindow.onblur,
  800. 'unsafeWindow.blurred': unsafeWindow.blurred,
  801. 'unsafeWindow.document.hasFocus': unsafeWindow.document.hasFocus,
  802. 'unsafeWindow.window.onfocus': unsafeWindow.window.onfocus,
  803.  
  804. 'document.hidden': document.hidden,
  805. 'document.mozHidden': document.mozHidden,
  806. 'document.msHidden': document.msHidden,
  807. 'document.webkitHidden': document.webkitHidden,
  808. 'document.visibilityState': document.visibilityState,
  809.  
  810. 'unsafeWindow.document.onvisibilitychange': unsafeWindow.document.onvisibilitychange,
  811. };
  812. }
  813.  
  814. if (!('__eventHandler__' in getWindow())) {
  815. getWindow().__eventHandler__ = function (event) {
  816. event.stopImmediatePropagation();
  817. };
  818. }
  819.  
  820. function getNestedDot(obj, dotStr) {
  821. let parts = dotStr.split('.');
  822.  
  823. while (parts.length > 0) {
  824. let part = parts.shift();
  825.  
  826. obj = obj[part];
  827. }
  828.  
  829. return obj;
  830. }
  831.  
  832. if (on) {
  833. unsafeWindow.onblur = null;
  834. unsafeWindow.blurred = false;
  835.  
  836. unsafeWindow.document.hasFocus = function () {
  837. return true;
  838. };
  839. unsafeWindow.window.onfocus = function () {
  840. return true;
  841. };
  842.  
  843. Object.defineProperty(document, 'hidden', { value: false, configurable: true });
  844. Object.defineProperty(document, 'mozHidden', { value: false, configurable: true });
  845. Object.defineProperty(document, 'msHidden', { value: false, configurable: true });
  846. Object.defineProperty(document, 'webkitHidden', { value: false, configurable: true });
  847. Object.defineProperty(document, 'visibilityState', {
  848. get: function () {
  849. return 'visible';
  850. },
  851. configurable: true,
  852. });
  853.  
  854. unsafeWindow.document.onvisibilitychange = undefined;
  855.  
  856. let events = [
  857. 'visibilitychange',
  858. 'webkitvisibilitychange',
  859. 'blur', // may cause issues on some websites
  860. 'mozvisibilitychange',
  861. 'msvisibilitychange',
  862. ];
  863.  
  864. for (let i = 0; i < events.length; i++) {
  865. const event = events[i];
  866.  
  867. window.addEventListener(event, getWindow().__eventHandler__, true);
  868. }
  869. } else {
  870. let orig = getWindow().originalFocusValues;
  871.  
  872. unsafeWindow.onblur = orig['unsafeWindow.onblur'];
  873. unsafeWindow.blurred = orig['unsafeWindow.blurred'];
  874.  
  875. unsafeWindow.document.hasFocus = orig['unsafeWindow.document.hasFocus'];
  876. unsafeWindow.window.onfocus = orig['unsafeWindow.window.onfocus'];
  877.  
  878. // Object.defineProperty(document, 'hidden', { value: orig['document.hidden'] });
  879. // Object.defineProperty(document, 'mozHidden', { value: orig['document.mozHidden'] });
  880. // Object.defineProperty(document, 'msHidden', { value: orig['document.msHidden'] });
  881. // Object.defineProperty(document, 'webkitHidden', { value: orig['document.webkitHidden'] });
  882. document.hidden = orig['document.hidden'];
  883. document.mozHidden = orig['document.mozHidden'];
  884. document.msHidden = orig['document.msHidden'];
  885. document.webkitHidden = orig['document.webkitHidden'];
  886. document.visibilityState = orig['document.visibilityState'];
  887.  
  888. unsafeWindow.document.onvisibilitychange = orig['unsafeWindow.document.onvisibilitychange'];
  889.  
  890. let events = [
  891. 'visibilitychange',
  892. 'webkitvisibilitychange',
  893. 'blur', // may cause issues on some websites
  894. 'mozvisibilitychange',
  895. 'msvisibilitychange',
  896. ];
  897.  
  898. for (let i = 0; i < events.length; i++) {
  899. const event = events[i];
  900.  
  901. window.removeEventListener(event, getWindow().__eventHandler__, true);
  902. }
  903. }
  904. }
  905.  
  906. registerAlwaysFocusMenuCommand(true);
  907. }
  908.  
  909. /**
  910. *
  911. *
  912. * @author Michael Barros <michaelcbarros@gmail.com>
  913. * @param {boolean} on
  914. */
  915. function alwaysOnFocus(on) {
  916. if (!('originalFocusValues' in getWindow())) {
  917. getWindow().originalFocusValues = {
  918. 'unsafeWindow.onblur': unsafeWindow.onblur,
  919. 'unsafeWindow.blurred': unsafeWindow.blurred,
  920. 'unsafeWindow.document.hasFocus': unsafeWindow.document.hasFocus,
  921. 'unsafeWindow.window.onfocus': unsafeWindow.window.onfocus,
  922.  
  923. 'document.hidden': document.hidden,
  924. 'document.mozHidden': document.mozHidden,
  925. 'document.msHidden': document.msHidden,
  926. 'document.webkitHidden': document.webkitHidden,
  927. 'document.visibilityState': document.visibilityState,
  928.  
  929. 'unsafeWindow.document.onvisibilitychange': unsafeWindow.document.onvisibilitychange,
  930. };
  931. }
  932.  
  933. if (!('__eventHandler__' in getWindow())) {
  934. getWindow().__eventHandler__ = function (event) {
  935. event.stopImmediatePropagation();
  936. };
  937. }
  938.  
  939. function getNestedDot(obj, dotStr) {
  940. let parts = dotStr.split('.');
  941.  
  942. while (parts.length > 0) {
  943. let part = parts.shift();
  944.  
  945. obj = obj[part];
  946. }
  947.  
  948. return obj;
  949. }
  950.  
  951. if (on) {
  952. unsafeWindow.onblur = null;
  953. unsafeWindow.blurred = false;
  954.  
  955. unsafeWindow.document.hasFocus = function () {
  956. return true;
  957. };
  958. unsafeWindow.window.onfocus = function () {
  959. return true;
  960. };
  961.  
  962. Object.defineProperty(document, 'hidden', { value: false, configurable: true });
  963. Object.defineProperty(document, 'mozHidden', { value: false, configurable: true });
  964. Object.defineProperty(document, 'msHidden', { value: false, configurable: true });
  965. Object.defineProperty(document, 'webkitHidden', { value: false, configurable: true });
  966. Object.defineProperty(document, 'visibilityState', {
  967. get: function () {
  968. return 'visible';
  969. },
  970. configurable: true,
  971. });
  972.  
  973. unsafeWindow.document.onvisibilitychange = undefined;
  974.  
  975. let events = [
  976. 'visibilitychange',
  977. 'webkitvisibilitychange',
  978. 'blur', // may cause issues on some websites
  979. 'mozvisibilitychange',
  980. 'msvisibilitychange',
  981. ];
  982.  
  983. for (let i = 0; i < events.length; i++) {
  984. const event = events[i];
  985.  
  986. window.addEventListener(event, getWindow().__eventHandler__, true);
  987. }
  988. } else {
  989. let orig = getWindow().originalFocusValues;
  990.  
  991. unsafeWindow.onblur = orig['unsafeWindow.onblur'];
  992. unsafeWindow.blurred = orig['unsafeWindow.blurred'];
  993.  
  994. unsafeWindow.document.hasFocus = orig['unsafeWindow.document.hasFocus'];
  995. unsafeWindow.window.onfocus = orig['unsafeWindow.window.onfocus'];
  996.  
  997. // Object.defineProperty(document, 'hidden', { value: orig['document.hidden'] });
  998. // Object.defineProperty(document, 'mozHidden', { value: orig['document.mozHidden'] });
  999. // Object.defineProperty(document, 'msHidden', { value: orig['document.msHidden'] });
  1000. // Object.defineProperty(document, 'webkitHidden', { value: orig['document.webkitHidden'] });
  1001. document.hidden = orig['document.hidden'];
  1002. document.mozHidden = orig['document.mozHidden'];
  1003. document.msHidden = orig['document.msHidden'];
  1004. document.webkitHidden = orig['document.webkitHidden'];
  1005. document.visibilityState = orig['document.visibilityState'];
  1006.  
  1007. unsafeWindow.document.onvisibilitychange = orig['unsafeWindow.document.onvisibilitychange'];
  1008.  
  1009. let events = [
  1010. 'visibilitychange',
  1011. 'webkitvisibilitychange',
  1012. 'blur', // may cause issues on some websites
  1013. 'mozvisibilitychange',
  1014. 'msvisibilitychange',
  1015. ];
  1016.  
  1017. for (let i = 0; i < events.length; i++) {
  1018. const event = events[i];
  1019.  
  1020. window.removeEventListener(event, getWindow().__eventHandler__, true);
  1021. }
  1022. }
  1023. }
  1024.  
  1025. /**
  1026. *
  1027. *
  1028. * @author Michael Barros <michaelcbarros@gmail.com>
  1029. */
  1030. async function init(when) {
  1031. const DEFAULT_OPTIONS = {
  1032. use_vanilla: false,
  1033. };
  1034.  
  1035. let options = typeof arguments[1] == 'object' ? arguments[1] : {};
  1036. let func = typeof arguments[1] == 'object' ? arguments[2] : arguments[1];
  1037. let args = typeof arguments[1] == 'object' ? arguments[3] : arguments[2];
  1038.  
  1039. options = Object.assign(DEFAULT_OPTIONS, options);
  1040.  
  1041. async function runCallback() {
  1042. if (args && args.length > 0) {
  1043. await func(...args);
  1044. } else {
  1045. await func();
  1046. }
  1047. }
  1048.  
  1049. if (when == 'start') {
  1050. await runCallback();
  1051. } else if (when == 'ready') {
  1052. if (!options.use_vanilla) {
  1053. $(document).ready(async (e) => {
  1054. await runCallback();
  1055. });
  1056. } else {
  1057. document.addEventListener('DOMContentLoaded', async (e) => {
  1058. await runCallback();
  1059. });
  1060. }
  1061. } else if (when == 'loaded') {
  1062. if (!options.use_vanilla) {
  1063. $(document).on('readystatechange', async (e) => {
  1064. if (e.target.readyState == 'complete') {
  1065. await runCallback();
  1066. }
  1067. });
  1068. } else {
  1069. document.addEventListener('readystatechange', async (e) => {
  1070. if (e.target.readyState === 'complete') {
  1071. await runCallback();
  1072. }
  1073. });
  1074. }
  1075. }
  1076. }
  1077.  
  1078. class CustomContextMenuNew {
  1079. /**
  1080. * Example menuItems
  1081. *
  1082. * ```javascript
  1083. * let menuItems = [
  1084. * {
  1085. * type: 'item',
  1086. * label: 'Test1',
  1087. * onClick: () => {
  1088. * alert('test1');
  1089. * },
  1090. * },
  1091. * {
  1092. * type: 'item',
  1093. * label: 'Test2',
  1094. * onClick: () => {
  1095. * console.debug('test2');
  1096. * },
  1097. * },
  1098. * {
  1099. * type: 'break',
  1100. * },
  1101. * {
  1102. * type: 'item',
  1103. * label: 'Test3',
  1104. * onClick: () => {
  1105. * console.debug('test3');
  1106. * },
  1107. * },
  1108. * ];
  1109. * ```
  1110. * @author Michael Barros <michaelcbarros@gmail.com>
  1111. * @param {HTMLElement} elemToAttachTo
  1112. * @param {*} menuItems
  1113. * @memberof CustomContextMenuNew
  1114. */
  1115. constructor(elemToAttachTo, menuItems, onContextMenu, { id, isSubMenu = false, parentMenu, plusCtrlDown = false, useGMaddStyle = false }) {
  1116. this.cssElemId = `akkd-custom-context-menu-style`;
  1117.  
  1118. this.elem = elemToAttachTo;
  1119. this.menuItems = menuItems;
  1120. this.menu = null;
  1121. this.onContextMenu = onContextMenu;
  1122. this.id = id;
  1123. this.isSubMenu = isSubMenu;
  1124. this.useGMaddStyle = useGMaddStyle;
  1125. this.isSubMenuOpen = false;
  1126.  
  1127. /** @type {MouseEvent} */
  1128. this.contextMenuEvent;
  1129.  
  1130. /** @type {CustomContextMenuNew} */
  1131. this.parentMenu = parentMenu;
  1132. this.plusCtrlDown = plusCtrlDown;
  1133.  
  1134. this._addCss();
  1135. this._createMenu();
  1136. this._setupEvents();
  1137.  
  1138. this.hide = this._debounce(this.hide.bind(this), 500, true);
  1139. }
  1140.  
  1141. /**
  1142. *
  1143. *
  1144. * @author Michael Barros <michaelcbarros@gmail.com>
  1145. * @param {number} top
  1146. * @param {number} left
  1147. * @memberof CustomContextMenuNew
  1148. */
  1149. show(top, left) {
  1150. document.body.appendChild(this.menu);
  1151.  
  1152. this.menu.style.display = 'block';
  1153.  
  1154. this.menu.style.top = `${top}px`;
  1155. this.menu.style.left = `${left}px`;
  1156.  
  1157. this.menu.setAttribute('tabindex', '');
  1158. this.menu.focus();
  1159. }
  1160.  
  1161. hide() {
  1162. this.menu.style.display = 'none';
  1163.  
  1164. if (document.body.contains(this.menu)) {
  1165. this.menu.remove();
  1166. }
  1167. }
  1168.  
  1169. _setupEvents() {
  1170. if (this.elem) {
  1171. this.elem.addEventListener('contextmenu', (ev) => {
  1172. if ((this.plusCtrlDown && window.event.ctrlKey) || !this.plusCtrlDown) {
  1173. ev.preventDefault();
  1174.  
  1175. this.contextMenuEvent = ev;
  1176.  
  1177. if (this.onContextMenu) {
  1178. this.onContextMenu(ev);
  1179. }
  1180.  
  1181. this.show(ev.pageY, ev.pageX);
  1182. }
  1183. });
  1184. }
  1185.  
  1186. document.addEventListener('click', (ev) => {
  1187. if (document.body.contains(this.menu) && !this._isHover(this.menu) && !this.isSubMenu) {
  1188. if (!this.isSubMenuOpen) {
  1189. if (this.parentMenu) {
  1190. this.parentMenu.isSubMenuOpen = false;
  1191. }
  1192.  
  1193. this.hide();
  1194. }
  1195. }
  1196. });
  1197.  
  1198. window.addEventListener('blur', (ev) => {
  1199. if (this.parentMenu) {
  1200. this.parentMenu.isSubMenuOpen = false;
  1201. }
  1202.  
  1203. this.hide();
  1204. });
  1205.  
  1206. this.menu.addEventListener('blur', (ev) => {
  1207. if (this.parentMenu) {
  1208. this.parentMenu.isSubMenuOpen = false;
  1209. }
  1210.  
  1211. if (!this.isSubMenuOpen) {
  1212. this.hide();
  1213. }
  1214. });
  1215. }
  1216.  
  1217. _createMenu() {
  1218. this.menu = this._createMenuContainer();
  1219.  
  1220. let actionsContainer = this.menu.querySelector('.actions-container');
  1221.  
  1222. for (let i = 0; i < this.menuItems.length; i++) {
  1223. let itemConfig = this.menuItems[i];
  1224. /** @type {HTMLElement} */
  1225. let menuItem;
  1226.  
  1227. switch (itemConfig.type) {
  1228. case 'item':
  1229. menuItem = this._createItem(itemConfig);
  1230.  
  1231. if (menuItem) {
  1232. actionsContainer.appendChild(menuItem);
  1233. }
  1234.  
  1235. break;
  1236.  
  1237. case 'break':
  1238. case 'divider':
  1239. menuItem = this._createBreak(itemConfig);
  1240.  
  1241. if (menuItem) {
  1242. actionsContainer.appendChild(menuItem);
  1243. }
  1244.  
  1245. break;
  1246.  
  1247. case 'submenu':
  1248. menuItem = this._createSubMenu(itemConfig);
  1249.  
  1250. if (menuItem) {
  1251. actionsContainer.appendChild(menuItem);
  1252. }
  1253.  
  1254. break;
  1255.  
  1256. default:
  1257. break;
  1258. }
  1259. }
  1260. }
  1261.  
  1262. /**
  1263. *
  1264. *
  1265. * @author Michael Barros <michaelcbarros@gmail.com>
  1266. * @returns {HTMLElement}
  1267. * @memberof CustomContextMenuNew
  1268. */
  1269. _createMenuContainer() {
  1270. let html = String.raw/* html */ `<div class="akkd-menu-container">
  1271. <div class="akkd-scrollable-element" role="presentation" style="overflow: hidden; box-shadow: rgba(0, 0, 0, 0.36) 0px 2px 4px">
  1272. <div class="akkd-menu" role="presentation" style="overflow: hidden; max-height: 1294px">
  1273. <div class="akkd-action-bar animated vertical" style="color: rgb(240, 240, 240); background-color: rgb(60, 60, 60)">
  1274. <ul class="actions-container" role="toolbar" tabindex="0">
  1275.  
  1276. </ul>
  1277. </div>
  1278. </div>
  1279. <div role="presentation" aria-hidden="true" class="invisible scrollbar horizontal" style="position: absolute; width: 305px; height: 0px; left: 0px; bottom: 0px">
  1280. <div class="slider" style="position: absolute; top: 0px; left: 0px; height: 10px; transform: translate3d(0px, 0px, 0px); contain: strict; width: 305px"></div>
  1281. </div>
  1282. <div role="presentation" aria-hidden="true" class="invisible scrollbar vertical" style="position: absolute; width: 7px; height: 384px; right: 0px; top: 0px">
  1283. <div class="slider" style="position: absolute; top: 0px; left: 0px; width: 7px; transform: translate3d(0px, 0px, 0px); contain: strict; height: 384px"></div>
  1284. </div>
  1285. <div class="shadow"></div>
  1286. <div class="shadow"></div>
  1287. <div class="shadow"></div>
  1288. </div>
  1289. </div>`;
  1290.  
  1291. let elem = this._createElementsFromHTML(html);
  1292.  
  1293. if (this.id) {
  1294. elem.id = this.id;
  1295. }
  1296.  
  1297. return elem;
  1298. }
  1299.  
  1300. /**
  1301. *
  1302. *
  1303. * @author Michael Barros <michaelcbarros@gmail.com>
  1304. * @param {*} itemConfig
  1305. * @returns {HTMLElement}
  1306. * @memberof CustomContextMenuNew
  1307. */
  1308. _createItem(itemConfig) {
  1309. if (itemConfig.hide) return;
  1310.  
  1311. let html = String.raw/* html */ `<li class="action-item" role="presentation" tabindex="0">
  1312. <a class="action-menu-item" role="menuitem" tabindex="0" aria-checked="" aria-posinset="1" aria-setsize="13" style="color: rgb(240, 240, 240)">
  1313. <span class="menu-item-check codicon codicon-menu-selection" role="none" style="color: rgb(240, 240, 240)"></span>
  1314. <span class="action-label" aria-label="${itemConfig.label}">${itemConfig.label}</span>
  1315. <span class="keybinding">${''}</span>
  1316. </a>
  1317. </li>`;
  1318.  
  1319. let elem = this._createElementsFromHTML(html);
  1320.  
  1321. if (itemConfig.id) {
  1322. elem.id = itemConfig.id;
  1323. }
  1324.  
  1325. if (itemConfig.onClick) {
  1326. elem.addEventListener('click', (ev) => {
  1327. itemConfig.onClick(this.contextMenuEvent);
  1328.  
  1329. this.hide();
  1330. });
  1331. }
  1332.  
  1333. return elem;
  1334. }
  1335.  
  1336. /**
  1337. *
  1338. *
  1339. * @author Michael Barros <michaelcbarros@gmail.com>
  1340. * @returns {HTMLElement}
  1341. * @memberof CustomContextMenuNew
  1342. */
  1343. _createBreak(itemConfig) {
  1344. if (itemConfig.hide) return;
  1345.  
  1346. let html = String.raw/* html */ `<li class="action-item disabled" role="presentation">
  1347. <a class="action-label codicon separator disabled" role="presentation" aria-disabled="true" style="border-bottom-color: rgb(187, 187, 187)"></a>
  1348. </li>`;
  1349.  
  1350. let elem = this._createElementsFromHTML(html);
  1351.  
  1352. return elem;
  1353. }
  1354.  
  1355. /**
  1356. *
  1357. *
  1358. * @author Michael Barros <michaelcbarros@gmail.com>
  1359. * @param {*} itemConfig
  1360. * @returns {HTMLElement}
  1361. * @memberof CustomContextMenuNew
  1362. */
  1363. _createSubMenu(itemConfig) {
  1364. if (itemConfig.hide) return;
  1365.  
  1366. let html = String.raw/* html */ `<li class="action-item" role="presentation">
  1367. <a class="action-menu-item akkd-submenu-item" role="menuitem" aria-checked="" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-posinset="4" aria-setsize="13" style="color: rgb(240, 240, 240)">
  1368. <span class="menu-item-check codicon codicon-menu-selection" role="none" style="color: rgb(240, 240, 240)"></span>
  1369. <span class="action-label" aria-label="${itemConfig.label}">${itemConfig.label}</span>
  1370. <span class="submenu-indicator codicon codicon-menu-submenu" aria-hidden="true" style="color: rgb(240, 240, 240)"></span>
  1371. </a>
  1372. </li>`;
  1373.  
  1374. let elem = this._createElementsFromHTML(html);
  1375.  
  1376. if (itemConfig.id) {
  1377. elem.id = itemConfig.id;
  1378. }
  1379.  
  1380. elem.addEventListener('click', (ev) => {
  1381. /** @type {CustomContextMenuNew} */
  1382. let subMenu = itemConfig.menu(this, ev);
  1383.  
  1384. subMenu.parentMenu.isSubMenuOpen = true;
  1385.  
  1386. subMenu.show(ev.pageY, ev.pageX);
  1387. });
  1388.  
  1389. return elem;
  1390. }
  1391.  
  1392. /**
  1393. *
  1394. *
  1395. * @author Michael Barros <michaelcbarros@gmail.com>
  1396. * @param {string} htmlStr
  1397. * @returns {HTMLElement}
  1398. */
  1399. _createElementsFromHTML(htmlStr) {
  1400. let div = document.createElement('div');
  1401.  
  1402. div.innerHTML = htmlStr.trim();
  1403.  
  1404. return div.firstChild;
  1405. }
  1406.  
  1407. /**
  1408. *
  1409. *
  1410. * @author Michael Barros <michaelcbarros@gmail.com>
  1411. * @param {string} htmlStr
  1412. * @returns {HTMLStyleElement}
  1413. */
  1414. _createStyleElementFromCss(css) {
  1415. let style = document.createElement('style');
  1416.  
  1417. style.innerHTML = css.trim();
  1418.  
  1419. return style;
  1420. }
  1421.  
  1422. _isHover(elem) {
  1423. return elem.parentElement.querySelector(':hover') === elem;
  1424. }
  1425.  
  1426. _addCss() {
  1427. let css = String.raw`@font-face{font-family:codicon;src:url(data:font/truetype;charset=utf-8;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI3T0YrAAABjAAAAGBjbWFwF8EkrgAACEwAABfiZ2x5ZsbQXdAAACNkAADY4GhlYWRYl6BTAAAA4AAAADZoaGVhAlsCwwAAALwAAAAkaG10eNz1//4AAAHsAAAGYGxvY2EnvfAWAAAgMAAAAzJtYXhwArkBgQAAARgAAAAgbmFtZc1a5AQAAPxEAAAB9XBvc3ShG3uZAAD+PAAAFjkAAQAAASwAAAAAASz////+AS4AAQAAAAAAAAAAAAAAAAAAAZgAAQAAAAEAAE+9MY9fDzz1AAsBLAAAAAB8JbCAAAAAAHwlsID////9AS4BLQAAAAgAAgAAAAAAAAABAAABmAF1ABcAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQBKwGQAAUAAAC+ANIAAAAqAL4A0gAAAJAADgBNAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOpg6/8BLAAAABsBRwADAAAAAQAAAAAAAAAAAAAAAAACAAAAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLP//ASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAAAAABQAAAAMAAAAsAAAABAAABLIAAQAAAAADrAADAAEAAAAsAAMACgAABLIABAOAAAAAEAAQAAMAAOqI6ozqx+rJ6wnrTuv///8AAOpg6orqj+rJ6szrC+tQ//8AAAAAAAAAAAAAAAAAAAABABAAYABkANQA1AFOAdQAAAADANQBIwEgAKIBEQFkAQABQADrAUQAQwGNATUBPQE8AIMAMQEKAHgAtwDhADoBYgBtABYBiwCNAHoBHQD5APAA8QF1ALEAmACmAW8BTwB9AWABSAFXAVUBSQFYAV8BWgFTAKgBTgFcAAIABAAFAAoACwAMAA0ADgAPABAAEgAYABkAGgAbAE8AUABRAFIAVQBWAB4AHwAgACEAIgAlACcAKAApACoAKwAsAC0ALgAvADAANAA1ADYANwA4ADkAOwA8AD4APwBAAEIASABJAEoASwBaAFwAXgBhAGYAaABpAGoAawBsAG4AbwBwAHEAcgBzAHQAdQB2AHcAeQB7AH4AgQCCAIUAhgCHAIgAiQCKAIsAjACOAJAAkQCSAJMAlACVAJcAmQCaAJsAhgCcAJ0AngCjAKQApwCpAK0ArgCwALIAswC0ALUAugC7ALwAvQC+AL8AwADBANMA1QDWANkA3ADdAN4A3wDjAOQA5QDmAOcA6gDsAO0A7gDvAPMA9AD3APgA+wD8AQIBBgEHAQgBCQELAQwBDQEOAQ8BEAEVARYBFwEYARkBGgEbARwBHgEfASEBIgEkASUBJgEnASgBKQEqAS8BMAExATIBMwE0ATgBOQE6ATsBPgE/AUEBQgFDAUUBRgFKAUsBTAFNAVABUQFSAVQBVgFZAVsBXQFmAWcBcAFxAXIBcwF0AXYBdwF4AXkBegF+AYABgQGCAYUBhgGHAYkBigGOAY8BkAGRAZIBlgGXANcA2ADaANsAUwBUAGMAZABlAFcBXgBiAGcAYABOACMAJADoAH8AhACvAX8AAQAXAFgA0gD6ASwBYQEEAKUBNwE2AP4BRwEFARMATQGIAD0A6QCAAKoA4gD2ARQAJgEDAP0AMgAzAEEBYwGDAX0BewF8AKABKwEtAPUAXwGTAZUBlAFpAWoBawFsAW0BbgFoABEARwD/AI8BjABdALgAxADDAMIARgBFAEQAFAC5AJ8AoQBMAFsBLgCWAFkAFQCrAKwBAQAcAB0A4AATAYQA8gDRAMUAxgDLAMkAygDMAM0AzgDPANAAyADHAWUAtgESAHwABgAHAAgACQAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAATMAAAAAAAAAGYAADqYAAA6mAAAAADAADqYQAA6mEAAADUAADqYgAA6mIAAAEjAADqYwAA6mMAAAEgAADqZAAA6mQAAACiAADqZQAA6mUAAAERAADqZgAA6mYAAAFkAADqZwAA6mcAAAEAAADqaAAA6mgAAAFAAADqaQAA6mkAAADrAADqagAA6moAAAFEAADqawAA6msAAABDAADqbAAA6mwAAAGNAADqbQAA6m0AAAE1AADqbgAA6m4AAAE9AADqbwAA6m8AAAE8AADqcAAA6nAAAACDAADqcQAA6nEAAAAxAADqcgAA6nIAAAEKAADqcwAA6nMAAAB4AADqdAAA6nQAAAC3AADqdQAA6nUAAADhAADqdgAA6nYAAAA6AADqdwAA6ncAAAFiAADqeAAA6ngAAABtAADqeQAA6nkAAAAWAADqegAA6noAAAGLAADqewAA6nsAAACNAADqfAAA6nwAAAB6AADqfQAA6n0AAAEdAADqfgAA6n4AAAD5AADqfwAA6n8AAADwAADqgAAA6oAAAADxAADqgQAA6oEAAAF1AADqggAA6oIAAACxAADqgwAA6oMAAACYAADqhAAA6oQAAACmAADqhQAA6oUAAAFvAADqhgAA6oYAAAFPAADqhwAA6ocAAAB9AADqiAAA6ogAAAFgAADqigAA6ooAAAFIAADqiwAA6osAAAFXAADqjAAA6owAAAFVAADqjwAA6o8AAAFJAADqkAAA6pAAAAFYAADqkQAA6pEAAAFfAADqkgAA6pIAAAFaAADqkwAA6pMAAAFTAADqlAAA6pQAAACoAADqlQAA6pUAAAFOAADqlgAA6pYAAAFcAADqlwAA6pcAAAACAADqmAAA6pgAAAAEAADqmQAA6pkAAAAFAADqmgAA6poAAAAKAADqmwAA6psAAAALAADqnAAA6pwAAAAMAADqnQAA6p0AAAANAADqngAA6p4AAAAOAADqnwAA6p8AAAAPAADqoAAA6qAAAAAQAADqoQAA6qEAAAASAADqogAA6qIAAAAYAADqowAA6qMAAAAZAADqpAAA6qQAAAAaAADqpQAA6qUAAAAbAADqpgAA6qYAAABPAADqpwAA6qcAAABQAADqqAAA6qgAAABRAADqqQAA6qkAAABSAADqqgAA6qoAAABVAADqqwAA6qsAAABWAADqrAAA6qwAAAAeAADqrQAA6q0AAAAfAADqrgAA6q4AAAAgAADqrwAA6q8AAAAhAADqsAAA6rAAAAAiAADqsQAA6rEAAAAlAADqsgAA6rIAAAAnAADqswAA6rMAAAAoAADqtAAA6rQAAAApAADqtQAA6rUAAAAqAADqtgAA6rYAAAArAADqtwAA6rcAAAAsAADquAAA6rgAAAAtAADquQAA6rkAAAAuAADqugAA6roAAAAvAADquwAA6rsAAAAwAADqvAAA6rwAAAA0AADqvQAA6r0AAAA1AADqvgAA6r4AAAA2AADqvwAA6r8AAAA3AADqwAAA6sAAAAA4AADqwQAA6sEAAAA5AADqwgAA6sIAAAA7AADqwwAA6sMAAAA8AADqxAAA6sQAAAA+AADqxQAA6sUAAAA/AADqxgAA6sYAAABAAADqxwAA6scAAABCAADqyQAA6skAAABIAADqzAAA6swAAABJAADqzQAA6s0AAABKAADqzgAA6s4AAABLAADqzwAA6s8AAABaAADq0AAA6tAAAABcAADq0QAA6tEAAABeAADq0gAA6tIAAABhAADq0wAA6tMAAABmAADq1AAA6tQAAABoAADq1QAA6tUAAABpAADq1gAA6tYAAABqAADq1wAA6tcAAABrAADq2AAA6tgAAABsAADq2QAA6tkAAABuAADq2gAA6toAAABvAADq2wAA6tsAAABwAADq3AAA6twAAABxAADq3QAA6t0AAAByAADq3gAA6t4AAABzAADq3wAA6t8AAAB0AADq4AAA6uAAAAB1AADq4QAA6uEAAAB2AADq4gAA6uIAAAB3AADq4wAA6uMAAAB5AADq5AAA6uQAAAB7AADq5QAA6uUAAAB+AADq5gAA6uYAAACBAADq5wAA6ucAAACCAADq6AAA6ugAAACFAADq6QAA6ukAAACGAADq6gAA6uoAAACHAADq6wAA6usAAACIAADq7AAA6uwAAACJAADq7QAA6u0AAACKAADq7gAA6u4AAACLAADq7wAA6u8AAACMAADq8AAA6vAAAACOAADq8QAA6vEAAACQAADq8gAA6vIAAACRAADq8wAA6vMAAACSAADq9AAA6vQAAACTAADq9QAA6vUAAACUAADq9gAA6vYAAACVAADq9wAA6vcAAACXAADq+AAA6vgAAACZAADq+QAA6vkAAACaAADq+gAA6voAAACbAADq+wAA6vsAAACGAADq/AAA6vwAAACcAADq/QAA6v0AAACdAADq/gAA6v4AAACeAADq/wAA6v8AAACjAADrAAAA6wAAAACkAADrAQAA6wEAAACnAADrAgAA6wIAAACpAADrAwAA6wMAAACtAADrBAAA6wQAAACuAADrBQAA6wUAAACwAADrBgAA6wYAAACyAADrBwAA6wcAAACzAADrCAAA6wgAAAC0AADrCQAA6wkAAAC1AADrCwAA6wsAAAC6AADrDAAA6wwAAAC7AADrDQAA6w0AAAC8AADrDgAA6w4AAAC9AADrDwAA6w8AAAC+AADrEAAA6xAAAAC/AADrEQAA6xEAAADAAADrEgAA6xIAAADBAADrEwAA6xMAAADTAADrFAAA6xQAAADVAADrFQAA6xUAAADWAADrFgAA6xYAAADZAADrFwAA6xcAAADcAADrGAAA6xgAAADdAADrGQAA6xkAAADeAADrGgAA6xoAAADfAADrGwAA6xsAAADjAADrHAAA6xwAAADkAADrHQAA6x0AAADlAADrHgAA6x4AAADmAADrHwAA6x8AAADnAADrIAAA6yAAAADqAADrIQAA6yEAAADsAADrIgAA6yIAAADtAADrIwAA6yMAAADuAADrJAAA6yQAAADvAADrJQAA6yUAAADzAADrJgAA6yYAAAD0AADrJwAA6ycAAAD3AADrKAAA6ygAAAD4AADrKQAA6ykAAAD7AADrKgAA6yoAAAD8AADrKwAA6ysAAAECAADrLAAA6ywAAAEGAADrLQAA6y0AAAEHAADrLgAA6y4AAAEIAADrLwAA6y8AAAEJAADrMAAA6zAAAAELAADrMQAA6zEAAAEMAADrMgAA6zIAAAENAADrMwAA6zMAAAEOAADrNAAA6zQAAAEPAADrNQAA6zUAAAEQAADrNgAA6zYAAAEVAADrNwAA6zcAAAEWAADrOAAA6zgAAAEXAADrOQAA6zkAAAEYAADrOgAA6zoAAAEZAADrOwAA6zsAAAEaAADrPAAA6zwAAAEbAADrPQAA6z0AAAEcAADrPgAA6z4AAAEeAADrPwAA6z8AAAEfAADrQAAA60AAAAEhAADrQQAA60EAAAEiAADrQgAA60IAAAEkAADrQwAA60MAAAElAADrRAAA60QAAAEmAADrRQAA60UAAAEnAADrRgAA60YAAAEoAADrRwAA60cAAAEpAADrSAAA60gAAAEqAADrSQAA60kAAAEvAADrSgAA60oAAAEwAADrSwAA60sAAAExAADrTAAA60wAAAEyAADrTQAA600AAAEzAADrTgAA604AAAE0AADrUAAA61AAAAE4AADrUQAA61EAAAE5AADrUgAA61IAAAE6AADrUwAA61MAAAE7AADrVAAA61QAAAE+AADrVQAA61UAAAE/AADrVgAA61YAAAFBAADrVwAA61cAAAFCAADrWAAA61gAAAFDAADrWQAA61kAAAFFAADrWgAA61oAAAFGAADrWwAA61sAAAFKAADrXAAA61wAAAFLAADrXQAA610AAAFMAADrXgAA614AAAFNAADrXwAA618AAAFQAADrYAAA62AAAAFRAADrYQAA62EAAAFSAADrYgAA62IAAAFUAADrYwAA62MAAAFWAADrZAAA62QAAAFZAADrZQAA62UAAAFbAADrZgAA62YAAAFdAADrZwAA62cAAAFmAADraAAA62gAAAFnAADraQAA62kAAAFwAADragAA62oAAAFxAADrawAA62sAAAFyAADrbAAA62wAAAFzAADrbQAA620AAAF0AADrbgAA624AAAF2AADrbwAA628AAAF3AADrcAAA63AAAAF4AADrcQAA63EAAAF5AADrcgAA63IAAAF6AADrcwAA63MAAAF+AADrdAAA63QAAAGAAADrdQAA63UAAAGBAADrdgAA63YAAAGCAADrdwAA63cAAAGFAADreAAA63gAAAGGAADreQAA63kAAAGHAADregAA63oAAAGJAADrewAA63sAAAGKAADrfAAA63wAAAGOAADrfQAA630AAAGPAADrfgAA634AAAGQAADrfwAA638AAAGRAADrgAAA64AAAAGSAADrgQAA64EAAAGWAADrggAA64IAAAGXAADrgwAA64MAAADXAADrhAAA64QAAADYAADrhQAA64UAAADaAADrhgAA64YAAADbAADrhwAA64cAAABTAADriAAA64gAAABUAADriQAA64kAAABjAADrigAA64oAAABkAADriwAA64sAAABlAADrjAAA64wAAABXAADrjQAA640AAAFeAADrjgAA644AAABiAADrjwAA648AAABnAADrkAAA65AAAABgAADrkQAA65EAAABOAADrkgAA65IAAAAjAADrkwAA65MAAAAkAADrlAAA65QAAADoAADrlQAA65UAAAB/AADrlgAA65YAAACEAADrlwAA65cAAACvAADrmAAA65gAAAF/AADrmQAA65kAAAABAADrmgAA65oAAAAXAADrmwAA65sAAABYAADrnAAA65wAAADSAADrnQAA650AAAD6AADrngAA654AAAEsAADrnwAA658AAAFhAADroAAA66AAAAEEAADroQAA66EAAAClAADrogAA66IAAAE3AADrowAA66MAAAE2AADrpAAA66QAAAD+AADrpQAA66UAAAFHAADrpgAA66YAAAEFAADrpwAA66cAAAETAADrqAAA66gAAABNAADrqQAA66kAAAGIAADrqgAA66oAAAA9AADrqwAA66sAAADpAADrrAAA66wAAACAAADrrQAA660AAACqAADrrgAA664AAADiAADrrwAA668AAAD2AADrsAAA67AAAAEUAADrsQAA67EAAAAmAADrsgAA67IAAAEDAADrswAA67MAAAD9AADrtAAA67QAAAAyAADrtQAA67UAAAAzAADrtgAA67YAAABBAADrtwAA67cAAAFjAADruAAA67gAAAGDAADruQAA67kAAAF9AADrugAA67oAAAF7AADruwAA67sAAAF8AADrvAAA67wAAACgAADrvQAA670AAAErAADrvgAA674AAAEtAADrvwAA678AAAD1AADrwAAA68AAAABfAADrwQAA68EAAAGTAADrwgAA68IAAAGVAADrwwAA68MAAAGUAADrxAAA68QAAAFpAADrxQAA68UAAAFqAADrxgAA68YAAAFrAADrxwAA68cAAAFsAADryAAA68gAAAFtAADryQAA68kAAAFuAADrygAA68oAAAFoAADrywAA68sAAAARAADrzAAA68wAAABHAADrzQAA680AAAD/AADrzgAA684AAACPAADrzwAA688AAAGMAADr0AAA69AAAABdAADr0QAA69EAAAC4AADr0gAA69IAAADEAADr0wAA69MAAADDAADr1AAA69QAAADCAADr1QAA69UAAABGAADr1gAA69YAAABFAADr1wAA69cAAABEAADr2AAA69gAAAAUAADr2QAA69kAAAC5AADr2gAA69oAAACfAADr2wAA69sAAAChAADr3AAA69wAAABMAADr3QAA690AAABbAADr3gAA694AAAEuAADr3wAA698AAACWAADr4AAA6+AAAABZAADr4QAA6+EAAAAVAADr4gAA6+IAAACrAADr4wAA6+MAAACsAADr5AAA6+QAAAEBAADr5QAA6+UAAAAcAADr5gAA6+YAAAAdAADr5wAA6+cAAADgAADr6AAA6+gAAAATAADr6QAA6+kAAAGEAADr6gAA6+oAAADyAADr6wAA6+sAAADRAADr7AAA6+wAAADFAADr7QAA6+0AAADGAADr7gAA6+4AAADLAADr7wAA6+8AAADJAADr8AAA6/AAAADKAADr8QAA6/EAAADMAADr8gAA6/IAAADNAADr8wAA6/MAAADOAADr9AAA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b2RpY29uVmVyc2lvbiAxLjZjb2RpY29uVGhlIGljb24gZm9udCBmb3IgVmlzdWFsIFN0dWRpbyBDb2RlaHR0cDovL2ZvbnRlbGxvLmNvbQBjAG8AZABpAGMAbwBuAFIAZQBnAHUAbABhAHIAYwBvAGQAaQBjAG8AbgBjAG8AZABpAGMAbwBuAFYAZQByAHMAaQBvAG4AIAAxAC4ANgBjAG8AZABpAGMAbwBuAFQAaABlACAAaQBjAG8AbgAgAGYAbwBuAHQAIABmAG8AcgAgAFYAaQBzAHUAYQBsACAAUwB0AHUAZABpAG8AIABDAG8AZABlAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZAAdhY2NvdW50FGFjdGl2YXRlLWJyZWFrcG9pbnRzA2FkZAdhcmNoaXZlCmFycm93LWJvdGgRYXJyb3ctY2lyY2xlLWRvd24RYXJyb3ctY2lyY2xlLWxlZnQSYXJyb3ctY2lyY2xlLXJpZ2h0D2Fycm93LWNpcmNsZS11cAphcnJvdy1kb3duCmFycm93LWxlZnQLYXJyb3ctcmlnaHQQYXJyb3ctc21hbGwtZG93bhBhcnJvdy1zbWFsbC1sZWZ0EWFycm93LXNtYWxsLXJpZ2h0DmFycm93LXNtYWxsLXVwCmFycm93LXN3YXAIYXJyb3ctdXAMYXp1cmUtZGV2b3BzBWF6dXJlC2JlYWtlci1zdG9wBmJlYWtlcghiZWxsLWRvdARiZWxsBGJvbGQEYm9vawhib29rbWFyawticmFja2V0LWRvdA1icmFja2V0LWVycm9yCWJyaWVmY2FzZQlicm9hZGNhc3QHYnJvd3NlcgNidWcIY2FsZW5kYXINY2FsbC1pbmNvbWluZw1jYWxsLW91dGdvaW5nDmNhc2Utc2Vuc2l0aXZlCWNoZWNrLWFsbAVjaGVjawljaGVja2xpc3QMY2hldnJvbi1kb3duDGNoZXZyb24tbGVmdA1jaGV2cm9uLXJpZ2h0CmNoZXZyb24tdXAMY2hyb21lLWNsb3NlD2Nocm9tZS1tYXhpbWl6ZQ9jaHJvbWUtbWluaW1pemUOY2hyb21lLXJlc3RvcmUNY2lyY2xlLWZpbGxlZBNjaXJjbGUtbGFyZ2UtZmlsbGVkFGNpcmNsZS1sYXJnZS1vdXRsaW5lDmNpcmNsZS1vdXRsaW5lDGNpcmNsZS1zbGFzaA1jaXJjdWl0LWJvYXJkCWNsZWFyLWFsbAZjbGlwcHkJY2xvc2UtYWxsBWNsb3NlDmNsb3VkLWRvd25sb2FkDGNsb3VkLXVwbG9hZAVjbG91ZARjb2RlDGNvbGxhcHNlLWFsbApjb2xvci1tb2RlB2NvbWJpbmUSY29tbWVudC1kaXNjdXNzaW9uB2NvbW1lbnQOY29tcGFzcy1hY3RpdmULY29tcGFzcy1kb3QHY29tcGFzcwRjb3B5C2NyZWRpdC1jYXJkBGRhc2gJZGFzaGJvYXJkCGRhdGFiYXNlCWRlYnVnLWFsbA9kZWJ1Zy1hbHQtc21hbGwJZGVidWctYWx0J2RlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZBxkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsIGRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkFWRlYnVnLWJyZWFrcG9pbnQtZGF0YSRkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQZZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbh9kZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkFGRlYnVnLWJyZWFrcG9pbnQtbG9nHGRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQNZGVidWctY29uc29sZRRkZWJ1Zy1jb250aW51ZS1zbWFsbA5kZWJ1Zy1jb250aW51ZQ5kZWJ1Zy1jb3ZlcmFnZRBkZWJ1Zy1kaXNjb25uZWN0EmRlYnVnLWxpbmUtYnktbGluZQtkZWJ1Zy1wYXVzZQtkZWJ1Zy1yZXJ1bhNkZWJ1Zy1yZXN0YXJ0LWZyYW1lDWRlYnVnLXJlc3RhcnQWZGVidWctcmV2ZXJzZS1jb250aW51ZRdkZWJ1Zy1zdGFja2ZyYW1lLWFjdGl2ZRRkZWJ1Zy1zdGFja2ZyYW1lLWRvdBBkZWJ1Zy1zdGFja2ZyYW1lC2RlYnVnLXN0YXJ0D2RlYnVnLXN0ZXAtYmFjaw9kZWJ1Zy1zdGVwLWludG8OZGVidWctc3RlcC1vdXQPZGVidWctc3RlcC1vdmVyCmRlYnVnLXN0b3AFZGVidWcQZGVza3RvcC1kb3dubG9hZBNkZXZpY2UtY2FtZXJhLXZpZGVvDWRldmljZS1jYW1lcmENZGV2aWNlLW1vYmlsZQpkaWZmLWFkZGVkDGRpZmYtaWdub3JlZA1kaWZmLW1vZGlmaWVkDGRpZmYtcmVtb3ZlZAxkaWZmLXJlbmFtZWQEZGlmZgdkaXNjYXJkBGVkaXQNZWRpdG9yLWxheW91dAhlbGxpcHNpcwxlbXB0eS13aW5kb3cLZXJyb3Itc21hbGwFZXJyb3IHZXhjbHVkZQpleHBhbmQtYWxsBmV4cG9ydApleHRlbnNpb25zCmV5ZS1jbG9zZWQDZXllCGZlZWRiYWNrC2ZpbGUtYmluYXJ5CWZpbGUtY29kZQpmaWxlLW1lZGlhCGZpbGUtcGRmDmZpbGUtc3VibW9kdWxlFmZpbGUtc3ltbGluay1kaXJlY3RvcnkRZmlsZS1zeW1saW5rLWZpbGUIZmlsZS16aXAEZmlsZQVmaWxlcw1maWx0ZXItZmlsbGVkBmZpbHRlcgVmbGFtZQlmb2xkLWRvd24HZm9sZC11cARmb2xkDWZvbGRlci1hY3RpdmUOZm9sZGVyLWxpYnJhcnkNZm9sZGVyLW9wZW5lZAZmb2xkZXIEZ2VhcgRnaWZ0C2dpc3Qtc2VjcmV0CmdpdC1jb21taXQLZ2l0LWNvbXBhcmUJZ2l0LW1lcmdlF2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkF2dpdC1wdWxsLXJlcXVlc3QtY3JlYXRlFmdpdC1wdWxsLXJlcXVlc3QtZHJhZnQQZ2l0LXB1bGwtcmVxdWVzdA1naXRodWItYWN0aW9uCmdpdGh1Yi1hbHQPZ2l0aHViLWludmVydGVkBmdpdGh1YgVnbG9iZQpnby10by1maWxlB2dyYWJiZXIKZ3JhcGgtbGVmdApncmFwaC1saW5lDWdyYXBoLXNjYXR0ZXIFZ3JhcGgHZ3JpcHBlchFncm91cC1ieS1yZWYtdHlwZQVoZWFydAdoaXN0b3J5BGhvbWUPaG9yaXpvbnRhbC1ydWxlBWh1Ym90BWluYm94BmluZGVudARpbmZvB2luc3BlY3QLaXNzdWUtZHJhZnQOaXNzdWUtcmVvcGVuZWQGaXNzdWVzBml0YWxpYwZqZXJzZXkEanNvbg5rZWJhYi12ZXJ0aWNhbANrZXkDbGF3DWxheWVycy1hY3RpdmUKbGF5ZXJzLWRvdAZsYXllcnMXbGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQYbGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0D2xheW91dC1jZW50ZXJlZA5sYXlvdXQtbWVudWJhchNsYXlvdXQtcGFuZWwtY2VudGVyFGxheW91dC1wYW5lbC1qdXN0aWZ5EWxheW91dC1wYW5lbC1sZWZ0EmxheW91dC1wYW5lbC1yaWdodAxsYXlvdXQtcGFuZWwTbGF5b3V0LXNpZGViYXItbGVmdBRsYXlvdXQtc2lkZWJhci1yaWdodBBsYXlvdXQtc3RhdHVzYmFyBmxheW91dAdsaWJyYXJ5EWxpZ2h0YnVsYi1hdXRvZml4CWxpZ2h0YnVsYg1saW5rLWV4dGVybmFsBGxpbmsLbGlzdC1maWx0ZXIJbGlzdC1mbGF0DGxpc3Qtb3JkZXJlZA5saXN0LXNlbGVjdGlvbglsaXN0LXRyZWUObGlzdC11bm9yZGVyZWQKbGl2ZS1zaGFyZQdsb2FkaW5nCGxvY2F0aW9uCmxvY2stc21hbGwEbG9jawZtYWduZXQJbWFpbC1yZWFkBG1haWwIbWFya2Rvd24JbWVnYXBob25lB21lbnRpb24EbWVudQVtZXJnZQltaWxlc3RvbmUGbWlycm9yDG1vcnRhci1ib2FyZARtb3ZlEG11bHRpcGxlLXdpbmRvd3MEbXV0ZQhuZXctZmlsZQpuZXctZm9sZGVyB25ld2xpbmUKbm8tbmV3bGluZQRub3RlEW5vdGVib29rLXRlbXBsYXRlCG5vdGVib29rCG9jdG9mYWNlDG9wZW4tcHJldmlldwxvcmdhbml6YXRpb24Gb3V0cHV0B3BhY2thZ2UIcGFpbnRjYW4LcGFzcy1maWxsZWQEcGFzcwpwZXJzb24tYWRkBnBlcnNvbglwaWUtY2hhcnQDcGluDHBpbm5lZC1kaXJ0eQZwaW5uZWQLcGxheS1jaXJjbGUEcGxheQRwbHVnDXByZXNlcnZlLWNhc2UHcHJldmlldxBwcmltaXRpdmUtc3F1YXJlB3Byb2plY3QFcHVsc2UIcXVlc3Rpb24FcXVvdGULcmFkaW8tdG93ZXIJcmVhY3Rpb25zC3JlY29yZC1rZXlzDHJlY29yZC1zbWFsbAZyZWNvcmQEcmVkbwpyZWZlcmVuY2VzB3JlZnJlc2gFcmVnZXgPcmVtb3RlLWV4cGxvcmVyBnJlbW90ZQZyZW1vdmULcmVwbGFjZS1hbGwHcmVwbGFjZQVyZXBseQpyZXBvLWNsb25lD3JlcG8tZm9yY2UtcHVzaAtyZXBvLWZvcmtlZAlyZXBvLXB1bGwJcmVwby1wdXNoBHJlcG8GcmVwb3J0D3JlcXVlc3QtY2hhbmdlcwZyb2NrZXQScm9vdC1mb2xkZXItb3BlbmVkC3Jvb3QtZm9sZGVyA3JzcwRydWJ5CXJ1bi1hYm92ZQdydW4tYWxsCXJ1bi1iZWxvdwpydW4tZXJyb3JzCHNhdmUtYWxsB3NhdmUtYXMEc2F2ZQtzY3JlZW4tZnVsbA1zY3JlZW4tbm9ybWFsC3NlYXJjaC1zdG9wBnNlYXJjaBJzZXJ2ZXItZW52aXJvbm1lbnQOc2VydmVyLXByb2Nlc3MGc2VydmVyDXNldHRpbmdzLWdlYXIIc2V0dGluZ3MGc2hpZWxkB3NpZ24taW4Ic2lnbi1vdXQGc21pbGV5D3NvcnQtcHJlY2VkZW5jZQ5zb3VyY2UtY29udHJvbBBzcGxpdC1ob3Jpem9udGFsDnNwbGl0LXZlcnRpY2FsCHNxdWlycmVsCnN0YXItZW1wdHkJc3Rhci1mdWxsCXN0YXItaGFsZgtzdG9wLWNpcmNsZQxzeW1ib2wtYXJyYXkOc3ltYm9sLWJvb2xlYW4Mc3ltYm9sLWNsYXNzDHN5bWJvbC1jb2xvcg9zeW1ib2wtY29uc3RhbnQSc3ltYm9sLWVudW0tbWVtYmVyC3N5bWJvbC1lbnVtDHN5bWJvbC1ldmVudAxzeW1ib2wtZmllbGQLc3ltYm9sLWZpbGUQc3ltYm9sLWludGVyZmFjZQpzeW1ib2wta2V5DnN5bWJvbC1rZXl3b3JkDXN5bWJvbC1tZXRob2QLc3ltYm9sLW1pc2MQc3ltYm9sLW5hbWVzcGFjZQ5zeW1ib2wtbnVtZXJpYw9zeW1ib2wtb3BlcmF0b3IQc3ltYm9sLXBhcmFtZXRlcg9zeW1ib2wtcHJvcGVydHkMc3ltYm9sLXJ1bGVyDnN5bWJvbC1zbmlwcGV0DXN5bWJvbC1zdHJpbmcQc3ltYm9sLXN0cnVjdHVyZQ9zeW1ib2wtdmFyaWFibGUMc3luYy1pZ25vcmVkBHN5bmMFdGFibGUDdGFnBnRhcmdldAh0YXNrbGlzdAl0ZWxlc2NvcGUNdGVybWluYWwtYmFzaAx0ZXJtaW5hbC1jbWQPdGVybWluYWwtZGViaWFuDnRlcm1pbmFsLWxpbnV4E3Rlcm1pbmFsLXBvd2Vyc2hlbGwNdGVybWluYWwtdG11eA90ZXJtaW5hbC11YnVudHUIdGVybWluYWwJdGV4dC1zaXplCnRocmVlLWJhcnMKdGh1bWJzZG93bgh0aHVtYnN1cAV0b29scwV0cmFzaA10cmlhbmdsZS1kb3duDXRyaWFuZ2xlLWxlZnQOdHJpYW5nbGUtcmlnaHQLdHJpYW5nbGUtdXAHdHdpdHRlchJ0eXBlLWhpZXJhcmNoeS1zdWIUdHlwZS1oaWVyYXJjaHktc3VwZXIOdHlwZS1oaWVyYXJjaHkGdW5mb2xkE3VuZ3JvdXAtYnktcmVmLXR5cGUGdW5sb2NrBnVubXV0ZQp1bnZlcmlmaWVkDnZhcmlhYmxlLWdyb3VwD3ZlcmlmaWVkLWZpbGxlZAh2ZXJpZmllZAh2ZXJzaW9ucwl2bS1hY3RpdmUKdm0tY29ubmVjdAp2bS1vdXRsaW5lCnZtLXJ1bm5pbmcCdm0Ed2FuZAd3YXJuaW5nBXdhdGNoCndoaXRlc3BhY2UKd2hvbGUtd29yZAZ3aW5kb3cJd29yZC13cmFwEXdvcmtzcGFjZS10cnVzdGVkEXdvcmtzcGFjZS11bmtub3duE3dvcmtzcGFjZS11bnRydXN0ZWQHem9vbS1pbgh6b29tLW91dAAAAAAA) format('truetype');font-weight:400;font-style:normal}.context{position:absolute}.akkd-menu-container{-webkit-text-size-adjust:auto;-webkit-box-direction:normal;user-select:none;-moz-outline-radius:unset !important;outline:unset !important;outline-color:unset !important;outline-style:unset !important;outline-width:unset !important;outline-offset:unset !important;height:fit-content;font-family:-apple-system,BlinkMacSystemFont,'Segoe WPC','Segoe UI',HelveticaNeue-Light,system-ui,Ubuntu,'Droid Sans',sans-serif;font-size:16px;position:absolute;width:fit-content}.akkd-action-bar{white-space:nowrap}.akkd-action-bar .actions-container{-webkit-box-align:center;-ms-flex-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 auto;padding:0;width:100%}li.action-item:hover:not(.disabled){color:#fff;background-color:#094771}.akkd-action-bar.vertical .actions-container{display:inline-block}.akkd-action-bar .action-item{-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;cursor:pointer;display:block;justify-content:center;position:relative}.akkd-action-bar .action-item.disabled{cursor:default}.akkd-action-bar .action-item .codicon{display:block;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:16px;width:16px}.akkd-action-bar .action-item.disabled .action-label,.akkd-action-bar .action-item.disabled .action-label:before,.akkd-action-bar .action-item.disabled .action-label:hover{opacity:.4}.akkd-action-bar.vertical{text-align:left}.akkd-action-bar.vertical .action-item{display:block}.akkd-action-bar.vertical .action-label.separator{border-bottom:1px solid #bbb;display:block;margin-left:.8em;margin-right:.8em;padding-top:1px}.akkd-action-bar .action-item .action-label.separator{background-color:#bbb;cursor:default;height:16px;min-width:1px;padding:0;width:1px}.akkd-scrollable-element>.invisible{opacity:0}.akkd-scrollable-element>.shadow{display:none;position:absolute}.codicon[class*='codicon-']{text-transform:none;-moz-user-select:none;font:normal normal normal 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none;-ms-user-select:none}.akkd-menu .akkd-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}a.action-menu-item:hover{text-decoration:none}@media screen{.codicon-menu-selection:before{content:'\eab2'}.codicon-menu-submenu:before{content:'\eab6'}.akkd-scrollable-element>.scrollbar>.slider{background:rgba(121,121,121,0.4)}.akkd-scrollable-element>.scrollbar>.slider:hover{background:rgba(100,100,100,0.7)}}.akkd-menu .akkd-action-bar.vertical{margin-left:0;overflow:visible;overflow-x:visible;overflow-y:visible;padding:.5em 0;padding-top:.5em;padding-right:0;padding-bottom:.5em;padding-left:0}.akkd-menu .akkd-action-bar.vertical .keybinding,.akkd-menu .akkd-action-bar.vertical .submenu-indicator{display:inline-block;flex:2 1 auto;padding:0 1em;text-align:right;font-size:12px;line-height:1}.akkd-menu .akkd-action-bar.vertical .action-menu-item{flex:1 1 auto;display:flex;height:2em;align-items:center;position:relative;height:1.8em}.akkd-menu .akkd-action-bar .actions-container{display:flex;margin:0 auto;padding:0;width:100%;justify-content:flex-end}.akkd-menu .akkd-action-bar.vertical .actions-container{display:block}.akkd-menu .akkd-action-bar.vertical .action-item{border:thin solid transparent;position:static;overflow:visible;padding:0;transform:none;display:flex}.akkd-menu .akkd-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:0;margin-left:.8em;margin-right:.8em;margin-bottom:.5em;width:100%;height:0 !important;margin-left:.8em !important;margin-right:.8em !important;font-size:inherit;margin:.2em 0 .2em 0 !important}.akkd-menu .akkd-action-bar .action-item.disabled .action-label,.akkd-menu .akkd-action-bar .action-item.disabled .action-label:hover{opacity:.4}.akkd-menu .akkd-action-bar.vertical .action-label{flex:1 1 auto;text-decoration:none;padding:0 1em;background:0;font-size:12px;line-height:1}.akkd-menu{font-size:13px}.akkd-menu .akkd-action-bar.vertical .menu-item-check{position:absolute;visibility:hidden;width:1em;height:100%;font-size:inherit;width:2em}.akkd-menu .akkd-action-bar .action-item .codicon{display:flex;align-items:center;display:inline-block}.akkd-menu .akkd-action-bar.vertical .action-label:not(.separator){display:inline-block;box-sizing:border-box;margin:0}.akkd-menu .akkd-action-bar.vertical .action-label:not(.separator),.akkd-menu .akkd-action-bar.vertical .keybinding{font-size:inherit;padding:0 2em;padding-top:0;padding-right:2em;padding-bottom:0;padding-left:2em}`;
  1428.  
  1429. this._removeCss();
  1430.  
  1431. /** @type {HTMLStyleElement} */
  1432. let elem = this.useGMaddStyle ? GM_addStyle(css) : this._createStyleElementFromCss(css);
  1433.  
  1434. elem.id = this.cssElemId;
  1435.  
  1436. document.head.append(elem);
  1437. }
  1438.  
  1439. _removeCss() {
  1440. let styleElem = document.getElementById(this.cssElemId);
  1441.  
  1442. if (styleElem) {
  1443. styleElem.remove();
  1444. }
  1445. }
  1446.  
  1447. /**
  1448. * Returns a function, that, as long as it continues to be invoked, will not
  1449. * be triggered. The function will be called after it stops being called for
  1450. * N milliseconds. If `immediate` is passed, trigger the function on the
  1451. * leading edge, instead of the trailing.
  1452. *
  1453. * @param {function} func
  1454. * @param {Number} wait
  1455. * @param {Boolean} immediate
  1456. * @returns
  1457. */
  1458. _debounce(func, wait, immediate) {
  1459. let timeout;
  1460.  
  1461. return function () {
  1462. let context = this,
  1463. args = arguments;
  1464.  
  1465. let later = function () {
  1466. timeout = null;
  1467.  
  1468. if (!immediate) func.apply(context, args);
  1469. };
  1470.  
  1471. let callNow = immediate && !timeout;
  1472.  
  1473. clearTimeout(timeout);
  1474. timeout = setTimeout(later, wait);
  1475.  
  1476. if (callNow) func.apply(context, args);
  1477. };
  1478. }
  1479. }
  1480.  
  1481. function createCustomContextMenu(elem) {
  1482. let menu = new CustomContextMenuNew(
  1483. elem.parentElement,
  1484. [
  1485. {
  1486. type: 'item',
  1487. label: 'Markdown link to clipboard',
  1488. onClick: () => {
  1489. GM_setClipboard(`[${document.title}](${location.href})`);
  1490. },
  1491. hide: false,
  1492. },
  1493.  
  1494. {
  1495. type: 'item',
  1496. label: 'HTML table to Markdown table clipboard',
  1497. onClick: (ev) => {
  1498. let table = null;
  1499. let target = ev.target;
  1500.  
  1501. while (target) {
  1502. // Check if the clicked element is a table or is inside a table
  1503. if (target.tagName === 'TABLE') {
  1504. table = target;
  1505.  
  1506. break;
  1507. }
  1508.  
  1509. target = target.parentElement;
  1510. }
  1511.  
  1512. // If a table element is found, you can now work with it
  1513. if (table) {
  1514. let markdown = htmlToMarkdown(table);
  1515.  
  1516. GM_setClipboard(markdown);
  1517. }
  1518. },
  1519. hide: false,
  1520. },
  1521.  
  1522. {
  1523. type: 'divider',
  1524. hide: true,
  1525. },
  1526.  
  1527. {
  1528. type: 'submenu',
  1529. label: 'Explore data lineage',
  1530. menu: (parentMenu, ev) => {
  1531. let menu = new CustomContextMenuNew(
  1532. null,
  1533. [
  1534. {
  1535. type: 'item',
  1536. label: 'Markdown link to clipboard',
  1537. onClick: () => {
  1538. GM_setClipboard(`[${document.title}](${location.href})`);
  1539. },
  1540. hide: false,
  1541. },
  1542. ],
  1543. (ev) => {
  1544. elem.click();
  1545. },
  1546. { id: 'submenu-01', isSubMenu: true, parentMenu: parentMenu }
  1547. );
  1548.  
  1549. return menu;
  1550. },
  1551. onClick: () => {
  1552. // let monocleUrl = `https://${location.hostname}/workspace/data-integration/monocle/graph/datasets/${owner.stateNode.props.result.id}?upstream=true&branchId=${owner.stateNode.props.result.data.defaultBranch.name}`;
  1553.  
  1554. // window.open(monocleUrl, '_blank');
  1555. alert('Explore data lineage clicked!');
  1556. },
  1557. hide: true,
  1558. },
  1559. ],
  1560. (ev) => {
  1561. elem.click();
  1562. },
  1563. { id: 'main-menu', plusCtrlDown: true }
  1564. );
  1565. }
  1566.  
  1567. (async function () {
  1568. setupConfig(logger);
  1569. registryContextMenuItems();
  1570.  
  1571. GM_getTab((tab) => {
  1572. tab.title = document.title;
  1573.  
  1574. GM_saveTab(tab);
  1575. });
  1576.  
  1577. exposeGlobalVariables();
  1578. startPerformanceMonitor();
  1579. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址