Toggle button for YouTrack
当前为
// ==UserScript==
// @name Toggl-Button YouTrack
// @namespace https://gitlab.paragon-es.de/toggl-button
// @version 1.3
// @include http*://youtrack.*/*
// @include http*://*/youtrack/*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_info
// @grant GM_registerMenuCommand
// @require https://greatest.deepsurf.us/scripts/2670-toggllibrary/code/TogglLibrary.js
// @resource togglStyle https://gitlab.paragon-es.de/toggl-button/core/raw/latest/TogglLibrary.css
// @description Toggle button for YouTrack
// ==/UserScript==
new TogglButtonGM('.fsi-layout.container .content_fsi', function (elem) {
var description, projectIds = [],
numElem = elem.querySelector('.issueId', elem),
titleElem = elem.querySelector('.issue-summary', elem),
projectElem = document.querySelector('.fsi-properties .fsi-property .regCC a'),
linkElem = document.querySelector('.issueContainer .links-panel .links .link'),
stopCallback = null;
description = titleElem.textContent.trim();
if (numElem !== null) {
description = numElem.textContent.trim() + " " + description;
stopCallback = function(date, duration) {
var parts = numElem.textContent.trim().split('-');
GM_xmlhttpRequest({
method: "GET",
url: document.location.origin + "/rest/admin/project/" + parts[0] + "/timetracking",
onload: function (result) {
if (result.status === 200) {
if (result.responseText.indexOf('<settings enabled="true">') > 0) {
GM_xmlhttpRequest({
method: "POST",
url: document.location.origin + "/rest/issue/" + numElem.textContent.trim() + "/timetracking/workitem",
headers: {
"Content-Type": "application/xml"
},
dataType: 'xml',
data: '<workItem><date>'+date+'</date><duration>'+Math.floor(duration / 60)+'</duration><description>automatic</description></workItem>'
});
}
}
}
});
}
}
if (projectElem !== null) {
projectIds.push(projectElem.textContent.trim());
}
if (linkElem !== null) {
projectIds.push(linkElem.textContent.trim());
}
return {
className: 'youtrack',
description: description,
projectIds: projectIds,
stopCallback: stopCallback
};
});