From 05ea4899c5de8ddb7e4712eb5811511d160c85cf Mon Sep 17 00:00:00 2001 From: bvn13 Date: Mon, 29 Aug 2022 16:53:16 +0300 Subject: [PATCH] kaiten --- keiten-insert-jira-link.tempermonkey.js | 110 ++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 keiten-insert-jira-link.tempermonkey.js diff --git a/keiten-insert-jira-link.tempermonkey.js b/keiten-insert-jira-link.tempermonkey.js new file mode 100644 index 0000000..f9b533a --- /dev/null +++ b/keiten-insert-jira-link.tempermonkey.js @@ -0,0 +1,110 @@ +// ==UserScript== +// @name New Userscript +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description try to take over the world! +// @author bvn13 +// @match https://profeelab.kaiten.ru/space/*/card/* +// @icon https://www.google.com/s2/favicons?sz=64&domain=kaiten.ru +// @grant none +// @require https://raw.githubusercontent.com/dwachss/bililiteRange/master/bililiteRange.js +// @require https://code.jquery.com/jquery-2.1.4.min.js +// @require https://raw.githubusercontent.com/jquery/jquery-simulate/main/jquery.simulate.js +// @require https://raw.githubusercontent.com/j-ulrich/jquery-simulate-ext/master/src/jquery.simulate.ext.js +// @require https://raw.githubusercontent.com/j-ulrich/jquery-simulate-ext/master/src/jquery.simulate.key-sequence.js +// ==/UserScript== + +function exists(elem) { + return typeof(elem) != 'undefined' && elem != null; +} + +// https://stackoverflow.com/a/14234618/2798461 + +function collectionHas(a, b) { + for(var i = 0, len = a.length; i < len; i ++) { + if(a[i] == b) return true; + } + return false; +} +; +function findParentBySelector(elm, selector) { + var all = document.querySelectorAll(selector); + var cur = elm.parentNode; + while(cur && !collectionHas(all, cur)) { + cur = cur.parentNode; //go up + } + return cur; //will return null if not found +} +; + +// https://github.com/j-ulrich/jquery-simulate-ext/tree/7285c77ecf8c5ee7258f6317e601a281aaec04c2#usage + +function setTextAreaValue(textarea, value) { + if (exists(textarea)) { + setTimeout(function() { + jQuery(textarea).focus(); + //jQuery(textarea).html(value); + jQuery(textarea).simulate("key-sequence", {sequence: value}); + //jQuery(textarea).val(value); + //jQuery(textarea).text(value); + }, 100); + } else { + console.log("textarea dos not exist"); + } +} +; + +function getJiraLabel(url) { + var task = url.substring(url.lastIndexOf('/') + 1) + if (url.startsWith("https://jira.local.profee.com/browse/")) { + return task; + } else { + console.log("'" + url + "' not started with 'https://jira.local.profee.com/browse/'"); + } + return ""; +} +; + +function doc_keyUp(e) { + + //if (e.ctrlKey && e.key === 'ArrowDown') { + if (!e.shiftKey && !e.ctrlKey && e.key === 'Tab') { + var activeElement = document.activeElement; + var parent = findParentBySelector(document.activeElement, "div[data-test='newExternalLink']"); + if (exists(parent)) { + window.lastLink = activeElement; // save for shift+tab + var url = jQuery(activeElement).val(); + console.log(url); + var button = jQuery(parent).find("button:first"); + var textarea = undefined; + if (exists(button)) { + if (jQuery(button).text() == 'Добавить описание') { + jQuery(button).click(); + textarea = document.activeElement; + } else { + textarea = jQuery(parent).find("textarea:first"); + } + } + setTextAreaValue(textarea, getJiraLabel(url)); + } else { + console.log("parent not found"); + } + } + if (e.shiftKey && e.key === 'Tab') { + if (exists(window.lastLink)) { + setTimeout(function() { + jQuery(window.lastLink).focus(); + }, 100); + } + } +} +; + +(function() { + 'use strict'; + + // register the handler + document.addEventListener('keyup', doc_keyUp, false); + +})(); +