Greasy Fork is available in English.
Adds some features on github.com, gitlab.com and moduon.team to integrate it with Moduon Team
当前为
// ==UserScript==
// @name MGit
// @original http://greasyfork.icu/es/scripts/390531-tgithub
// @author Eduardo de Miguel
// @version 1.05
// @grant none
// @run-at document-idle
// @namespace moduon
// @include /^https?:\/\/(?:www\.)?github\.com\/?.*$/
// @include /^https?:\/\/(?:www\.)?gitlab\.com\/?.*$/
// @include /^https?:\/\/(?:www\.)?moduon\.team\/?.*$/
// @description Adds some features on github.com, gitlab.com and moduon.team to integrate it with Moduon Team
// ==/UserScript==
(function (window) {
"use strict";
var MTGithub = {
ODOO_SERVER: 'https://www.moduon.team',
COMPANY_NAME: 'Moduon',
REGEX_TEMPLATES: {},
init: function () {
this._addRegexTemplate('MT', new RegExp(/\bMT-(\d+)/gi), `<a target='_blank' href='${this.ODOO_SERVER}/web#id=$1&model=project.task&view_type=form'>${this.COMPANY_NAME} - Task #$1</a>`);
this._replaceTask();
if (this._isLocationHost('github')) {
this._ghAddNavbarOptions();
}
},
/* CORE FUNCTIONS */
_isLocationHost: function (host) {
return document.location.host.toLowerCase().includes(host);
},
_addRegexTemplate: function (templateName, regex, html) {
this.REGEX_TEMPLATES[templateName] = { regex: regex, html: html };
},
_executeRegexReplace: function (templateName, text) {
if (templateName in this.REGEX_TEMPLATES && text.match(this.REGEX_TEMPLATES[templateName].regex)) {
return text.replace(this.REGEX_TEMPLATES[templateName].regex, this.REGEX_TEMPLATES[templateName].html);
}
return false;
},
/* COMMON FUNCTIONS */
_replaceTask: function () {
const searchAndParse = () => {
document.querySelectorAll('.comment-body,.note-text,.description,.commit-description,.oe_form_field_html>.o_readonly').forEach((elm) => {
const htmlTemplate = this._executeRegexReplace('MT', elm.innerHTML);
if (htmlTemplate) {
elm.innerHTML = htmlTemplate;
}
});
};
// Mutation Observer
if (typeof this.observer === 'undefined') {
let targetNode = undefined;
if (this._isLocationHost('github')) {
targetNode = document.getElementsByTagName('main')[0];
} else if (this._isLocationHost('gitlab')) {
targetNode = document.getElementById('notes-list');
} else if (this._isLocationHost('moduon')) {
targetNode = document.getElementsByClassName('o_web_client')[0];
}
if (typeof targetNode !== 'undefined') {
this.observer = new MutationObserver(searchAndParse);
this.observer.observe(targetNode, { childList: true, subtree: true });
}
}
searchAndParse();
},
/* GITHUB FUNCTIONS */
_ghAddNavbarOptions: function () {
const targetNode = document.getElementsByTagName('nav')[0];
if (typeof targetNode !== 'undefined') {
const exampleItem = targetNode.querySelector("a[href^='/pulls']");
const menuItem = document.createElement("A");
menuItem.className = exampleItem.className;
menuItem.style.cssText = exampleItem.style.cssText
menuItem.textContent = this.COMPANY_NAME;
menuItem.href = `/pulls?q=is%3Aopen+is%3Apr+archived%3Afalse+involves%3A${this.COMPANY_NAME}`;
targetNode.insertAdjacentElement('afterbegin', menuItem);
}
},
};
MTGithub.init();
})(window)