| Index: Tools/GardeningServer/scripts/ui.js
|
| diff --git a/Tools/GardeningServer/scripts/ui.js b/Tools/GardeningServer/scripts/ui.js
|
| index caff590feadd5f87afcc390178dbed3d9b9335ae..f511e8a38c4f58789f0dc53314269cc16f3494c7 100644
|
| --- a/Tools/GardeningServer/scripts/ui.js
|
| +++ b/Tools/GardeningServer/scripts/ui.js
|
| @@ -27,25 +27,13 @@ var ui = ui || {};
|
|
|
| (function () {
|
|
|
| -ui.displayURLForBuilder = function(builderName)
|
| -{
|
| - return config.waterfallURL + '?' + base.queryParam({
|
| - 'builder': builderName
|
| - });
|
| -}
|
| -
|
| -ui.kUseNewWindowForLinksSetting = 'gardenomatic.use-new-window-for-links';
|
| +// FIXME: Put this all in a more appropriate place.
|
|
|
| ui.displayNameForBuilder = function(builderName)
|
| {
|
| return builderName.replace(/Webkit /i, '');
|
| }
|
|
|
| -ui.urlForCrbug = function(bugID)
|
| -{
|
| - return 'http://crbug.com/' + bugID;
|
| -}
|
| -
|
| ui.urlForFlakinessDashboard = function(opt_testNameList)
|
| {
|
| var testsParameter = opt_testNameList ? opt_testNameList.join(',') : '';
|
| @@ -57,252 +45,4 @@ ui.urlForEmbeddedFlakinessDashboard = function(opt_testNameList)
|
| return ui.urlForFlakinessDashboard(opt_testNameList) + '&showChrome=false';
|
| }
|
|
|
| -ui.setTargetForLink = function(anchor)
|
| -{
|
| - if (anchor.href.indexOf('#') === 0)
|
| - return;
|
| - if (ui.useNewWindowForLinks)
|
| - anchor.target = '_blank';
|
| - else
|
| - anchor.removeAttribute('target');
|
| -}
|
| -
|
| -ui.setUseNewWindowForLinks = function(enabled)
|
| -{
|
| - ui.useNewWindowForLinks = enabled;
|
| - if (enabled)
|
| - localStorage[ui.kUseNewWindowForLinksSetting] = 'true';
|
| - else
|
| - delete localStorage[ui.kUseNewWindowForLinksSetting];
|
| -
|
| - [].forEach.call(document.querySelectorAll('a'), function(link) {
|
| - ui.setTargetForLink(link);
|
| - });
|
| -}
|
| -ui.setUseNewWindowForLinks(!!localStorage[ui.kUseNewWindowForLinksSetting]);
|
| -
|
| -ui.createLinkNode = function(url, textContent)
|
| -{
|
| - var link = document.createElement('a');
|
| - link.href = url;
|
| - ui.setTargetForLink(link);
|
| - link.appendChild(document.createTextNode(textContent));
|
| - return link;
|
| -}
|
| -
|
| -ui.onebar = base.extends('div', {
|
| - init: function()
|
| - {
|
| - this.id = 'onebar';
|
| - this.innerHTML =
|
| - '<ul>' +
|
| - '<li><a href="#unexpected">Unexpected Failures</a></li>' +
|
| - '<li><a href="#results">Results</a></li>' +
|
| - '</ul>' +
|
| - '<div id="link-handling"><input type="checkbox" id="new-window-for-links"><label for="new-window-for-links">Open links in new window</label></div>' +
|
| - '<div id="unexpected"></div>' +
|
| - '<div id="results"></div>';
|
| - this._tabNames = [
|
| - 'unexpected',
|
| - 'results',
|
| - ]
|
| -
|
| - this._tabIndexToSavedScrollOffset = {};
|
| - this._tabs = $(this).tabs({
|
| - disabled: [this._tabNames.indexOf('results')],
|
| - show: function(event, ui) { this._restoreScrollOffset(ui.index); },
|
| - select: function(event, ui) {
|
| - this._saveScrollOffset();
|
| - window.location.hash = ui.tab.hash;
|
| - }.bind(this)
|
| - });
|
| - },
|
| - _saveScrollOffset: function() {
|
| - var tabIndex = this._tabs.tabs('option', 'selected');
|
| - this._tabIndexToSavedScrollOffset[tabIndex] = document.body.scrollTop;
|
| - },
|
| - _restoreScrollOffset: function(tabIndex)
|
| - {
|
| - document.body.scrollTop = this._tabIndexToSavedScrollOffset[tabIndex] || 0;
|
| - },
|
| - _setupHistoryHandlers: function()
|
| - {
|
| - function currentHash() {
|
| - var hash = window.location.hash;
|
| - return (!hash || hash == '#') ? '#unexpected' : hash;
|
| - }
|
| -
|
| - var self = this;
|
| - window.onhashchange = function(event) {
|
| - var tabName = currentHash().substring(1);
|
| - self._selectInternal(tabName);
|
| - };
|
| -
|
| - // When navigating from the browser chrome, we'll
|
| - // scroll to the #tabname contents. popstate fires before
|
| - // we scroll, so we can save the scroll offset first.
|
| - window.onpopstate = function() {
|
| - self._saveScrollOffset();
|
| - };
|
| - },
|
| - _setupLinkSettingHandler: function()
|
| - {
|
| - if (ui.useNewWindowForLinks)
|
| - document.getElementById('new-window-for-links').setAttribute('checked', true);
|
| - document.getElementById('new-window-for-links').addEventListener('change', function(event) {
|
| - ui.setUseNewWindowForLinks(this.checked);
|
| - });
|
| - },
|
| - attach: function()
|
| - {
|
| - document.body.insertBefore(this, document.body.firstChild);
|
| - this._setupLinkSettingHandler();
|
| - this._setupHistoryHandlers();
|
| - },
|
| - tabNamed: function(tabName)
|
| - {
|
| - if (this._tabNames.indexOf(tabName) == -1)
|
| - return null;
|
| - tab = document.getElementById(tabName);
|
| - // We perform this sanity check below to make sure getElementById
|
| - // hasn't given us a node in some other unrelated part of the document.
|
| - // that shouldn't happen normally, but it could happen if an attacker
|
| - // has somehow sneakily added a node to our document.
|
| - if (tab.parentNode != this)
|
| - return null;
|
| - return tab;
|
| - },
|
| - unexpected: function()
|
| - {
|
| - return this.tabNamed('unexpected');
|
| - },
|
| - results: function()
|
| - {
|
| - return this.tabNamed('results');
|
| - },
|
| - _selectInternal: function(tabName) {
|
| - var tabIndex = this._tabNames.indexOf(tabName);
|
| - this._tabs.tabs('enable', tabIndex);
|
| - this._tabs.tabs('select', tabIndex);
|
| - },
|
| - select: function(tabName)
|
| - {
|
| - this._saveScrollOffset();
|
| - this._selectInternal(tabName);
|
| - window.location = '#' + tabName;
|
| - }
|
| -});
|
| -
|
| -ui.TreeStatus = base.extends('div', {
|
| - addStatus: function(name)
|
| - {
|
| - var label = document.createElement('div');
|
| - label.textContent = " " + name + ' status: ';
|
| - this.appendChild(label);
|
| - var statusSpan = document.createElement('span');
|
| - statusSpan.textContent = '(Loading...) ';
|
| - label.appendChild(statusSpan);
|
| - treestatus.fetchTreeStatus(treestatus.urlByName(name), statusSpan);
|
| - },
|
| - init: function()
|
| - {
|
| - this.className = 'treestatus';
|
| - this.addStatus('blink');
|
| - this.addStatus('chromium');
|
| - },
|
| -});
|
| -
|
| -ui.revisionDetails = base.extends('span', {
|
| - // We only support 2 levels of visual escalation levels: warning and critical.
|
| - warnRollRevisionSpanThreshold: 45,
|
| - criticalRollRevisionSpanThreshold: 80,
|
| - classNameForUrgencyLevel: function(rollRevisionSpan) {
|
| - if (rollRevisionSpan < this.criticalRollRevisionSpanThreshold)
|
| - return "warning";
|
| - return "critical";
|
| - },
|
| - updateUI: function(totRevision) {
|
| - this.appendChild(document.createElement("br"));
|
| - this.appendChild(document.createTextNode('Last roll is to '));
|
| - this.appendChild(ui.createLinkNode(trac.changesetURL(this.lastRolledRevision), this.lastRolledRevision));
|
| - var rollRevisionSpan = totRevision - this.lastRolledRevision;
|
| - // Don't clutter the UI if we haven't run behind.
|
| - if (rollRevisionSpan > this.warnRollRevisionSpanThreshold) {
|
| - var wrapper = document.createElement("span");
|
| - wrapper.className = this.classNameForUrgencyLevel(rollRevisionSpan);
|
| - wrapper.appendChild(document.createTextNode("(" + rollRevisionSpan + " revisions behind)"));
|
| - this.appendChild(wrapper);
|
| - }
|
| - this.appendChild(document.createTextNode(', current autoroll '));
|
| - if (this.roll) {
|
| - var linkText = "" + this.roll.fromRevision + ":" + this.roll.toRevision;
|
| - this.appendChild(ui.createLinkNode(this.roll.url, linkText));
|
| - if (this.roll.isStopped)
|
| - this.appendChild(document.createTextNode(' (STOPPED) '));
|
| - } else {
|
| - this.appendChild(document.createTextNode(' None'));
|
| - }
|
| - },
|
| - init: function() {
|
| - var theSpan = this;
|
| - theSpan.appendChild(document.createTextNode('Latest revision processed by every bot: '));
|
| -
|
| - var latestRevision = model.latestRevisionWithNoBuildersInFlight();
|
| - var latestRevisions = model.latestRevisionByBuilder();
|
| -
|
| - // Get the list of builders sorted with the most recent one first.
|
| - var builders = Object.keys(latestRevisions);
|
| - builders.sort(function (a, b) { return parseInt(latestRevisions[b]) - parseInt(latestRevisions[a]);});
|
| -
|
| - var summaryNode = document.createElement('summary');
|
| - var summaryLinkNode = ui.createLinkNode(trac.changesetURL(latestRevision), latestRevision);
|
| - summaryNode.appendChild(summaryLinkNode);
|
| -
|
| - var revisionsTableNode = document.createElement('table');
|
| - builders.forEach(function(builderName) {
|
| - var trNode = document.createElement('tr');
|
| -
|
| - var tdNode = document.createElement('td');
|
| - tdNode.appendChild(ui.createLinkNode(ui.displayURLForBuilder(builderName), builderName.replace('WebKit ', '')));
|
| - trNode.appendChild(tdNode);
|
| -
|
| - var tdNode = document.createElement('td');
|
| - tdNode.appendChild(document.createTextNode(latestRevisions[builderName]));
|
| - trNode.appendChild(tdNode);
|
| -
|
| - revisionsTableNode.appendChild(trNode);
|
| - });
|
| -
|
| - var revisionsNode = document.createElement('details');
|
| - revisionsNode.appendChild(summaryNode);
|
| - revisionsNode.appendChild(revisionsTableNode);
|
| - theSpan.appendChild(revisionsNode);
|
| -
|
| - // This adds a pop-up when we hover over the summary if the details aren't being shown.
|
| - var revisionsPopUp = document.createElement('span')
|
| - revisionsPopUp.id = 'revisionPopUp';
|
| - summaryLinkNode.appendChild(revisionsPopUp);
|
| - revisionsPopUp.appendChild(revisionsTableNode.cloneNode(true));
|
| -
|
| - summaryLinkNode.addEventListener('mouseover', function(event) {
|
| - if (!revisionsNode.open) {
|
| - revisionsPopUp.style.position = 'absolute';
|
| - revisionsPopUp.style.left = summaryNode.offsetLeft + 'px';
|
| - revisionsPopUp.style.top = (summaryNode.offsetTop + summaryNode.offsetHeight) + 'px';
|
| - revisionsPopUp.classList.add('active');
|
| - }
|
| - });
|
| -
|
| - summaryLinkNode.addEventListener('mouseout', function(event) {
|
| - if (!revisionsNode.open) {
|
| - revisionsPopUp.classList.remove("active");
|
| - }
|
| - });
|
| -
|
| - var totRevision = model.latestRevision();
|
| - theSpan.appendChild(document.createTextNode(', trunk is at '));
|
| - theSpan.appendChild(ui.createLinkNode(trac.changesetURL(totRevision), totRevision));
|
| - }
|
| -});
|
| -
|
| })();
|
|
|