| // ==UserScript== |
| // @name PlatformUITriageHelper |
| // @namespace http://www.eclipse.org/eclipse/platform-ui/greasemonkey |
| // @description Helps triaging bugs for Platform/UI |
| // @include https://bugs.eclipse.org/bugs/show_bug.cgi?id=* |
| // @grant GM_getValue |
| // @grant GM_setValue |
| // @grant GM_xmlhttpRequest |
| // ==/UserScript== |
| // Copyright (c) 2000, 2013 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial API and implementation |
| //var refreshInterval = 1000*60*60*24; |
| |
| var PlatformTriageHelper = { |
| init: function() { |
| PlatformTriageHelper.Page.init(); |
| }, |
| |
| Constants: { |
| refreshInterval: 1000*60*60, |
| triagedOwner: "platform-ui-triaged@eclipse.org", |
| dirtyMarker: '*' |
| }, |
| |
| Page: { |
| component: {}, |
| product: {}, |
| qa_contact: {}, |
| keywords: {}, |
| comment: {}, |
| assigned_to: {}, |
| short_desc: {}, |
| els: null, |
| myDiv: null, |
| header: null, |
| |
| init: function() { |
| PlatformTriageHelper.Page.els = document.forms[1].elements; |
| PlatformTriageHelper.Page.myDiv = document.createElement('div'); |
| PlatformTriageHelper.Page.header = document.getElementById('header'); |
| for (var i = 0; i < PlatformTriageHelper.Page.els.length; i++) { |
| if (PlatformTriageHelper.Page.els[i].name == "component") { |
| PlatformTriageHelper.Page.component = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "product") { |
| PlatformTriageHelper.Page.product = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "qa_contact") { |
| PlatformTriageHelper.Page.qa_contact = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "keywords") { |
| PlatformTriageHelper.Page.keywords = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "comment") { |
| PlatformTriageHelper.Page.comment = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "assigned_to") { |
| PlatformTriageHelper.Page.assigned_to = PlatformTriageHelper.Page.els[i]; |
| } |
| if (PlatformTriageHelper.Page.els[i].name == "short_desc") { |
| PlatformTriageHelper.Page.short_desc = PlatformTriageHelper.Page.els[i]; |
| } |
| } |
| |
| //alert("indices: " + PlatformTriageHelper.Page.component + ", " + PlatformTriageHelper.Page.keywords + ", " + PlatformTriageHelper.Page.assigned_to + ", " + PlatformTriageHelper.Page.short_desc); |
| //alert("assigned to: " + PlatformTriageHelper.Page.els[PlatformTriageHelper.Page.assigned_to].value + "qa_contact: " + PlatformTriageHelper.Page.els[PlatformTriageHelper.Page.qa_contact].value); |
| var addToCC = document.getElementById('addselfcc'); |
| if (addToCC != null) { |
| addToCC.checked = false; |
| } |
| |
| var elemChangedListener = function() { |
| var b = document.getElementById('knob-reassign-cmp'); |
| if (b != null) { |
| b.checked = true; |
| b.scrollIntoView(true); |
| } |
| }; |
| |
| PlatformTriageHelper.Page.product.addEventListener('change', elemChangedListener, false); |
| PlatformTriageHelper.Page.component.addEventListener('change', elemChangedListener, false); |
| PlatformTriageHelper.ComponentAreas.loadData(PlatformTriageHelper.Page.buildButtons); |
| }, |
| buildButtons: function() { |
| var combo = PlatformTriageHelper.Page.TriageSelectCombo.create(); |
| var extras = '<input id="myUpdate" type="button" value="Apply" />'; |
| var refresh = '<input type="button" value="RefreshJSON" id="refresher" /><div id="triage_desc"></div>'; |
| |
| PlatformTriageHelper.Page.myDiv.innerHTML = '<div style="border: solid black 2px">' + combo + extras + refresh |
| + '</div>'; |
| PlatformTriageHelper.Page.header.parentNode.insertBefore(PlatformTriageHelper.Page.myDiv, PlatformTriageHelper.Page.header); |
| |
| document.getElementById('refresher').addEventListener("click", |
| function() {PlatformTriageHelper.ComponentAreas.loadData(PlatformTriageHelper.Page.buildButtons, true)}, false); |
| |
| document.getElementById('triage_select').addEventListener('change', |
| PlatformTriageHelper.Page.TriageSelectCombo.onChangedListener, true); |
| |
| document.getElementById('myUpdate').addEventListener('click', |
| PlatformTriageHelper.Page.TriageSelectCombo.onClickListener, true); |
| }, |
| updateInfo: function(comp, owner, description, ccEmail) { |
| var b=document.getElementById('assigned_to'); |
| if (b!=null) { |
| b.value = PlatformTriageHelper.Constants.triagedOwner; |
| PlatformTriageHelper.Page.qa_contact.value=''; |
| } |
| |
| var s = document.getElementById('short_desc').value; |
| var sd = document.getElementById('short_desc_nonedit_display'); |
| var d = PlatformTriageHelper.Page.short_desc; |
| if (d!=null) { |
| if (s.indexOf('[' + comp + ']') == -1 ){ |
| d.value = '[' + comp + '] ' + d.value; |
| if (sd != null) { |
| sd.innerHTML = d.value; |
| } |
| } |
| d.scrollIntoView(true); |
| d.focus(); |
| } |
| PlatformTriageHelper.Page.markWindowAsDirty(); |
| }, |
| markWindowAsDirty: function() { |
| var winTitle = window.document.title; |
| if (winTitle.charAt(0) != PlatformTriageHelper.Constants.dirtyMarker) { |
| window.document.title = PlatformTriageHelper.Constants.dirtyMarker + winTitle; |
| } |
| }, |
| |
| TriageSelectCombo: { |
| create: function() { |
| var assignments = PlatformTriageHelper.ComponentAreas.container.assignments; |
| var users = PlatformTriageHelper.ComponentAreas.container.users; |
| var combo = "<a href='http://www.eclipse.org/eclipse/platform-ui/componentAreas.php'>Triage</a>: <select id=\"triage_select\">" |
| +"<option value=\"donothing\">Do Nothing</option>"; |
| |
| for (i = 0; i < assignments.length; i++) { |
| var ownerEmail; |
| var cc = assignments[i]["cc"]; |
| var ccEmail = null; |
| for (j = 0; j < users.length; j++) { |
| if (users[j].user == assignments[i].assignee) { |
| ownerEmail = users[j].email; |
| } |
| if (users[j].user === cc) { |
| ccEmail = users[j].email; |
| } |
| } |
| combo += "<option value=\"" + assignments[i].component + "\">" + assignments[i].component + "</option>"; |
| //buttons += buttonFor(assignments[i].component, ownerEmail, assignments[i].description, ccEmail); |
| } |
| return combo + '</select>'; |
| }, |
| onClickListener: function() { |
| var triage = document.getElementById('triage_select'); |
| var selection = triage.options[triage.selectedIndex].value; |
| var assignments = PlatformTriageHelper.ComponentAreas.container.assignments; |
| var users = PlatformTriageHelper.ComponentAreas.container.users; |
| |
| for (i=0; i<assignments.length; i++) { |
| if (selection == assignments[i].component) { |
| var ownerEmail; |
| var cc = assignments[i]["cc"]; |
| var ccEmail = null; |
| for (j = 0; j < users.length; j++) { |
| if (users[j].user == assignments[i].assignee) { |
| ownerEmail = users[j].email; |
| } |
| if (users[j].user === cc) { |
| ccEmail = users[j].email; |
| } |
| } |
| PlatformTriageHelper.Page.updateInfo(assignments[i].component, ownerEmail, assignments[i].description, ccEmail); |
| } |
| } |
| }, |
| onChangedListener: function() { |
| var triage = document.getElementById('triage_select'); |
| var selection = triage.options[triage.selectedIndex].value; |
| var assignments = PlatformTriageHelper.ComponentAreas.container.assignments; |
| var users = PlatformTriageHelper.ComponentAreas.container.users; |
| var found = false; |
| var desc = document.getElementById('triage_desc'); |
| for (i=0; i<assignments.length; i++) { |
| if (selection == assignments[i].component) { |
| var ownerEmail; |
| var cc = assignments[i]["cc"]; |
| var ccEmail = null; |
| for (j = 0; j < users.length; j++) { |
| if (users[j].user == assignments[i].assignee) { |
| ownerEmail = users[j].email; |
| } |
| if (users[j].user === cc) { |
| ccEmail = users[j].email; |
| } |
| } |
| desc.innerHTML = ownerEmail + ":" + assignments[i].description; |
| found = true; |
| } |
| } |
| if (!found) { |
| desc.innerHTML = ""; |
| } |
| } |
| }, |
| }, |
| |
| ComponentAreas: { |
| container: null, |
| onLoadDataListener: null, |
| loadData: function(listener, forceCacheRefresh) { |
| console.log("Getting data"); |
| var cachedJsonData = forceCacheRefresh? null: PlatformTriageHelper.ComponentAreas.getDataFromCache(); |
| if (cachedJsonData != null) { |
| PlatformTriageHelper.Console.log("Data cache is being used"); |
| PlatformTriageHelper.ComponentAreas.container = eval('(' + cachedJsonData + ')'); |
| if (listener != null) { |
| listener(); |
| } |
| return; |
| } |
| |
| var rText = ""; |
| GM_xmlhttpRequest({ |
| method : "GET", url : "http://www.eclipse.org/eclipse/platform-ui/componentAreas.json?random" + Math.random(), headers : { |
| "User-Agent" : "Platform UI Triage Helper", "Accept" : "text/plain", "Cache-Control": "public, no-cache", "pragma": "no-cache",} |
| , onreadystatechange : function(details) { |
| PlatformTriageHelper.Console.log("PlatformTriageHelper.ComponentAreas.loadData readyState: " + details.readyState); |
| if(details.readyState == 4) { |
| if (details.status == 200) { |
| PlatformTriageHelper.ComponentAreas.processResponse(details.responseText, listener); |
| PlatformTriageHelper.Console.log('JSON data received'); |
| //setTimeout(function() {PlatformTriageHelper.ComponentAreas.loadData(listener); }, PlatformTriageHelper.Constants.refreshInterval); |
| } else { |
| PlatformTriageHelper.Console.log("Error reading JSON"); |
| } |
| } |
| }}); |
| }, |
| getDataFromCache: function() { |
| var timecomp = new Date(); |
| var newTime = timecomp.getTime() + ''; |
| var oldTime = GM_getValue('JSONDate'); |
| var diff = (+newTime) - (+oldTime); |
| |
| if (GM_getValue('JSONCache') == null || (diff > PlatformTriageHelper.Constants.refreshInterval)){ |
| return null; |
| } |
| return GM_getValue('JSONCache'); |
| }, |
| processResponse: function(jsonResponse, listener) { |
| var cacheDate = new Date(); |
| var mil = cacheDate.getTime(); |
| mil = mil +''; |
| |
| PlatformTriageHelper.Console.log("loading data into cache"); |
| |
| GM_setValue('JSONDate', mil); |
| GM_setValue('JSONCache', jsonResponse); |
| PlatformTriageHelper.ComponentAreas.container = eval('(' + jsonResponse + ')'); |
| if (listener != null) { |
| listener(); |
| } |
| } |
| }, |
| |
| Console: { |
| log: function(message) { |
| if (console != null) { |
| console.log(message); |
| } |
| } |
| } |
| } |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| window.addEventListener("load", PlatformTriageHelper.init, false); |
| }); |