// ==UserScript==
// @name 获取分支
// @namespace http://tampermonkey.net/
// @version 1.3
// @description 创建bug、关闭bug等操作时,可以快速获取分支
// @author ydr
// @match http://jira.meitu.com/*
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
(function () {
'use strict';
const refreshTime = 1000;
//评论上的获取分支按钮
function addCommentButton() {
// 生成获取分支对应输入框和按钮UI
let $branch_span_comment = $('<span style="font-size: 15px" id="comment_text">输入id:</span>');
let $input_text = $('<input type="text" class="text medium-field" id="build_id_comment">');
let $branch_btn_comment = $('<input class="aui-button" type="button" value="获取分支" id="get_branch_btn_comment">');
let $last_branch_btn_comment = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_comment">');
// 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
var is_btn = document.getElementById('get_branch_btn_comment');
if (!is_btn) {
let $b = $branch_span_comment.append($input_text).append($branch_btn_comment).append($last_branch_btn_comment);
$("#addcomment").after($b);
}
}
//关闭jira时获取分支按钮
function closeJiraButton() {
// 因点击关闭按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
setTimeout(function () {
// 生成获取分支对应输入框和按钮UI
let $branch_span_close = $('<span id="close_text">输入id:</span>');
let $input_text_close = $('<input type="text" class="text medium-field" id="build_id_close">');
let $branch_btn_close = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_close">');
let $last_branch_btn_close = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_close">');
// 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
var is_close_btn = document.getElementById('get_branch_btn_close');
if (!is_close_btn) {
let $c = $branch_span_close.append($input_text_close).append($branch_btn_close).append($last_branch_btn_close);
$("#issue-workflow-transition-submit").before($c);
}
}, 800);
}
//重新打开jira时获取分支按钮
function openJiraButton() {
// 因点击重新打开按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
setTimeout(function () {
// 生成获取分支对应输入框和按钮UI
let $branch_span_open = $('<span id="open_text">输入id:</span>');
let $input_text_open = $('<input type="text" class="text medium-field" id="build_id_open">');
let $branch_btn_open = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_open"><br>');
let $last_branch_btn_open = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_open">');
// 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
var is_open_btn = document.getElementById('get_branch_btn_open');
if (!is_open_btn) {
let $d = $branch_span_open.append($input_text_open).append($branch_btn_open).append($last_branch_btn_open);
$("#issue-workflow-transition-submit").before($d);
}
}, 800);
}
// 创建jira时添加获取分支按钮
function addJiraButton() {
//创建jira上的获取分支按钮
let $branch_span = $('<label for="customfield_10304"></label>');
let $branch_btn = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn">');
let $a = $branch_span.append($branch_btn);
$("#customfield_10303").after($a);
let $last_branch_btn = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn">');
$branch_span.append($last_branch_btn);
}
// 通过平台+build id,获取对应分支,并回调到对应的函数上
function get_branch(platform, build_id) {
var url = '';
var branch = '';
var result = '';
// 获取iOS的分支
if (platform == 'iOS') {
url = 'http://ios.meitu-int.com/ipa/mtxx/build/' + build_id;
GM_xmlhttpRequest({
url: url,
method: 'GET',
onload: function (res) {
if (res.status === 200) {
// 通过正则匹配获取分支名称
var r = '<span class="branch-name">(.*?)</span>';
try {
branch = res.responseText.match(r)[1];
} catch {
branch = '未找到该包的分支';
}
} else {
branch = '未找到该包的分支';
}
// 拼接成分支+build id并返回
result = branch + '#' + build_id;
GM_setValue('branch_value', result);
},
onerror: function (err) {
result = '接口请求失败,建议重新关闭开启脚本再试试';
GM_setValue('branch_value', result);
}
});
}
// 获取Android的分支
else if (platform == 'Android') {
url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project=Meitu&build=' + build_id;
GM_xmlhttpRequest({
url: url,
method: 'GET',
onload: function (res) {
if (res.status === 200) {
// 通过正则匹配获取分支名称
var r = '"branch":"(.*?)"';
try {
branch = res.responseText.match(r)[1];
} catch {
branch = '未找到该包的分支';
}
} else {
console.log("失败");
branch = '未找到该包的分支';
}
// 拼接成分支+build id并返回
// 拼接成分支+build id并返回
result = branch + '#' + build_id;
console.log("Android分支:" + result);
GM_setValue('branch_value', result);
console.log("Android分支设置成功:" + result);
},
onerror: function (err) {
result = '接口请求失败,建议重新关闭开启脚本再试试';
GM_setValue('branch_value', result);
console.log("error");
console.log(err);
}
});
}
}
// 当是jira域名时,才触发后续的操作,如果不是则不触发
if (location.href.indexOf('jira.meitu.com') > 0) {
clearInterval(refreshTime);
setInterval(function () {
// 因创建jira入口较多,这边默认1s刷新一次
addJiraButton();
// 点击【备注】时,进行插入UI相关操作
$('#footer-comment-button').unbind("click").click(function () {
addJiraButton(); // 评论位置加入icon
var is_btn_comment = document.getElementById('get_branch_btn_comment');
// 如果不存在则添加
if (!is_btn_comment) {
addCommentButton();
}
});
// 点击【重新打开】时,进行插入UI相关操作
$('#action_id_31').unbind("click").click(function () {
var is_btn_open = document.getElementById('get_branch_btn_open');
// 如果不存在则添加
if (!is_btn_open) {
openJiraButton();
}
});
// 点击【关闭问题】时,进行插入UI相关操作
$('#action_id_21').unbind("click").click(function () {
console.log("点击几次");
//var is_btn_close_dialog = document.getElementById('workflow-transition-21-dialog');
var is_btn_close = document.getElementById('get_branch_btn_close');
// 如果不存在则添加
if (!is_btn_close) {
closeJiraButton();
}
});
// 评论入口,点击【获取分支】按钮时,获取对应分支
$("#get_branch_btn_comment").unbind("click").click(function () {
// 获取bug页面的平台
var platform_text = $("#customfield_10301-val").text();
var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
var input_build_id_comment = document.getElementById("build_id_comment").value;
var build_id_comment = input_build_id_comment.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
var comment_text = $("#addcomment textarea[id='comment']").val();
// 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
if (platform == '' || platform == "Web") {
get_branch('Android', build_id_comment);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var default_value = '未找到该包的分支'+"#"+build_id_comment
if (value == default_value){
get_branch('iOS', build_id_comment);
}
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
document.getElementById('build_id_comment').value = value;
var result_value = comment_text + value;
$("#addcomment textarea[id='comment']").val(result_value);
var e = document.getElementById("build_id_comment"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#addcomment textarea[id='comment']").focus();
}, 500);
}, 500);
}
else {
get_branch(platform, build_id_comment);
// 支持直接复制分支操作,设置了300ms的延迟,避免接口没来得及返回
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
document.getElementById('build_id_comment').value = value;
var result_value = comment_text + value;
$("#addcomment textarea[id='comment']").val(result_value);
var e = document.getElementById("build_id_comment"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#addcomment textarea[id='comment']").focus();
}, 500);
}
})
// 重新打开jira入口,点击【获取分支】按钮时,获取对应分支
$("#get_branch_btn_open").unbind("click").click(function () {
// 获取bug页面的平台
var platform_text = $("#customfield_10301-val").text();
var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
console.log("jira上的平台:", platform);
var input_build_id_open = document.getElementById("build_id_open").value;
var build_id_open = input_build_id_open.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
// 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
if (platform == '' || platform == "Web") {
get_branch('Android', build_id_open);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var default_value = '未找到该包的分支'+"#"+build_id_open
if (value == default_value){
get_branch('iOS', build_id_open);
}
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
document.getElementById('build_id_open').value = value;
var result_value = open_text + value;
$("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
var e = document.getElementById("build_id_open"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#workflow-transition-31-dialog textarea[id='comment']").focus();
}, 500);
}, 500);
} else {
get_branch(platform, build_id_open);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
console.log("重新打开jira获取的分支:",value);
document.getElementById('build_id_open').value = value;
var result_value = open_text + value;
$("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
var e = document.getElementById("build_id_open"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#workflow-transition-31-dialog textarea[id='comment']").focus();
}, 500);
}
})
// 关闭jira入口,点击【获取分支】按钮时,获取对应分支
$("#get_branch_btn_close").unbind("click").click(function () {
// 获取bug页面的平台
var platform_text = $("#customfield_10301-val").text();
var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
console.log("jira上的平台:", platform);
var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
console.log("有获取到吗?",close_text);
var input_build_id_close = document.getElementById("build_id_close").value;
var build_id_close = input_build_id_close.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
// 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
if (platform == '' || platform == "Web") {
get_branch('Android', build_id_close);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var default_value = '未找到该包的分支'+"#"+build_id_close
if (value == default_value){
get_branch('iOS', build_id_close);
}
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var result_value = close_text + value;
console.log("关闭jira获取的总文案:",result_value);
$("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
console.log("最终有执行到这边吗?",result_value);
document.getElementById('build_id_close').value = value;
var e = document.getElementById("build_id_close"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#workflow-transition-21-dialog textarea[id='comment']").focus();
}, 500);
}, 500);
} else {
get_branch(platform, build_id_close);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var result_value = close_text + value;
console.log("关闭jira获取的总文案:",result_value);
$("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
console.log("最终有执行到这边吗?",result_value);
document.getElementById('build_id_close').value = value;
var e = document.getElementById("build_id_close"); //对象是contents
e.select(); //选择对象 (全选)
document.execCommand("Copy"); //执行浏览器复制命令
$("#workflow-transition-21-dialog textarea[id='comment']").focus();
}, 500);
}
})
// 创建jira入口,点击【获取分支】按钮时,获取对应分支
$("#get_branch_btn").unbind("click").click(function () {
//获取创建bug页面上的平台
var create_platform = '';
var platform_list = ['Android', 'iOS', 'Web'];
let inputs = document.getElementsByName("customfield_10301");
// 遍历获取哪个平台是被选中的,从而根据平台去获取分支
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].checked) { // 选中则代表指向该平台
create_platform = platform_list[i]
}
};
var input_build_id = document.getElementById("customfield_10303").value;
var build_id = input_build_id.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
if (create_platform == '' || create_platform == "Web") {
get_branch('Android', build_id);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
var default_value = '未找到该包的分支'+"#"+build_id
if (value == default_value){
get_branch('iOS', build_id);
}
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
console.log("创建jira获取的分支:",value);
// 创建jira时的分支展示的地方
document.getElementById('customfield_10303').value = value;
}, 500);
}, 500);
//alert("请选择Android或iOS平台");
} else {
get_branch(create_platform, build_id);
setTimeout(function () {
var value = GM_getValue('branch_value', '未找到历史记录');
console.log("创建jira获取的分支:",value);
// 创建jira时的分支展示的地方
document.getElementById('customfield_10303').value = value;
}, 500);
}
});
// 创建bug获取上次分支按钮
$("#last_branch_btn").unbind("click").click(function () {
var value = GM_getValue('branch_value', '未找到记录');
document.getElementById('customfield_10303').value = value;
});
// 重新打开bug获取上次分支按钮
$("#last_branch_btn_open").unbind("click").click(function () {
var value = GM_getValue('branch_value', '未找到记录');
var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
var result_value = open_text + value;
$("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
$("#workflow-transition-31-dialog textarea[id='comment']").focus();
});
// 关闭bug获取上次分支按钮
$("#last_branch_btn_close").unbind("click").click(function () {
var value = GM_getValue('branch_value', '未找到记录');
var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
var result_value = close_text + value;
$("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
$("#workflow-transition-21-dialog textarea[id='comment']").focus();
});
// 评论bug获取上次分支按钮
$("#last_branch_btn_comment").unbind("click").click(function () {
var value = GM_getValue('branch_value', '未找到记录');
var comment_text = $("#addcomment textarea[id='comment']").val();
var result_value = comment_text + value;
$("#addcomment textarea[id='comment']").val(result_value);
$("#addcomment textarea[id='comment']").focus();
});
}, refreshTime);
}
// Your code here...
})();