зеркало из https://github.com/mozilla/treeherder.git
Bug 1450026 - Convert Userguide to ReactJS (#3902)
This commit is contained in:
Родитель
a36fb2cde1
Коммит
3a42016453
|
@ -14,7 +14,6 @@ const DIST = path.join(CWD, 'dist');
|
|||
const INDEX_TEMPLATE = path.join(UI, 'index.html');
|
||||
const PERF_TEMPLATE = path.join(UI, 'perf.html');
|
||||
const LOGVIEWER_TEMPLATE = path.join(UI, 'logviewer.html');
|
||||
const USERGUIDE_TEMPLATE = path.join(UI, 'userguide.html');
|
||||
|
||||
const HTML_MINIFY_OPTIONS = {
|
||||
useShortDoctype: true,
|
||||
|
@ -83,7 +82,7 @@ module.exports = neutrino => {
|
|||
.end();
|
||||
neutrino.config
|
||||
.entry('userguide')
|
||||
.add(path.join(UI, 'entry-userguide.js'))
|
||||
.add(path.join(UI, 'userguide', 'index.jsx'))
|
||||
.end();
|
||||
neutrino.config
|
||||
.entry('testview')
|
||||
|
@ -172,14 +171,18 @@ module.exports = neutrino => {
|
|||
neutrino.config
|
||||
.plugin('html-userguide')
|
||||
.use(HtmlPlugin, {
|
||||
inject: 'body',
|
||||
inject: false,
|
||||
template: htmlTemplate,
|
||||
filename: 'userguide.html',
|
||||
template: USERGUIDE_TEMPLATE,
|
||||
favicon: 'ui/img/tree_open.png',
|
||||
chunks: ['userguide', 'vendor', 'manifest'],
|
||||
minify: HTML_MINIFY_OPTIONS
|
||||
appMountId: 'root',
|
||||
xhtml: true,
|
||||
mobile: true,
|
||||
minify: HTML_MINIFY_OPTIONS,
|
||||
title: 'Treeherder User Guide'
|
||||
});
|
||||
|
||||
|
||||
neutrino.config
|
||||
.plugin('html-login')
|
||||
.use(HtmlPlugin, {
|
||||
|
|
|
@ -404,24 +404,25 @@ h4 {
|
|||
*/
|
||||
|
||||
#onscreen-overlay {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 10000; /* 1 more than .overlay wait spinners */
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9000;
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
#onscreen-shortcuts {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 16.5%;
|
||||
transform: translateY(-50%);
|
||||
width:100%;
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 16.5%;
|
||||
transform: translateY(-50%);
|
||||
z-index: 10000;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#onscreen-shortcuts div div.card {
|
||||
max-height: 90vh;
|
||||
overflow: auto;
|
||||
max-height: 90vh;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
#userguide {
|
||||
padding: 10px 10px 0;
|
||||
body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#userguide {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#userguide.dt, #userguide.dd {
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -53,6 +56,10 @@
|
|||
color: #428bca;
|
||||
}
|
||||
|
||||
#ug-raw-log-icon, #ug-logviewer-icon {
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
#ug-raw-log-icon {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
|
@ -69,4 +76,7 @@
|
|||
|
||||
.ug-footer {
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-radius: 0 calc(.25rem - 1px);
|
||||
}
|
||||
|
|
|
@ -26,6 +26,9 @@ import './js/treeherder_app';
|
|||
// Treeherder React UI
|
||||
import './job-view/JobView';
|
||||
|
||||
// ShortcutTable React UI
|
||||
import './shared/ShortcutTable';
|
||||
|
||||
// Treeherder JS
|
||||
import './js/directives/treeherder/main';
|
||||
import './js/services/main';
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
// Webpack entry point for userguide.html
|
||||
|
||||
// Vendor Styles
|
||||
import 'bootstrap/dist/css/bootstrap.min.css';
|
||||
import 'font-awesome/css/font-awesome.css';
|
||||
|
||||
// Userguide Styles
|
||||
import './css/treeherder-global.css';
|
||||
import './css/treeherder-userguide.css';
|
||||
import './css/treeherder-job-buttons.css';
|
||||
|
||||
// Bootstrap the Angular modules against which everything will be registered
|
||||
import './js/userguide';
|
||||
|
||||
// Userguide JS
|
||||
import './js/controllers/userguide';
|
|
@ -8,15 +8,18 @@
|
|||
</head>
|
||||
<body ng-controller="MainCtrl">
|
||||
<div id="global-container" class="d-flex flex-column h-100">
|
||||
<div id="onscreen-overlay" ng-if="onscreenOverlayShowing"
|
||||
ng-click="setOnscreenShortcutsShowing(false)">
|
||||
<div id="onscreen-shortcuts" ng-if="onscreenShortcutsShowing"
|
||||
stop-propagation-on-left-click>
|
||||
<div
|
||||
id="onscreen-overlay"
|
||||
ng-if="onscreenOverlayShowing"
|
||||
ng-click="setOnscreenShortcutsShowing(false)">
|
||||
|
||||
<div id="onscreen-shortcuts">
|
||||
<div class="col-8">
|
||||
<ng-include src="'partials/main/thShortcutTable.html'"></ng-include>
|
||||
<shortcut-table onscreen-shortcuts-showing="onscreenShortcutsShowing" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<job-view />
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
import userguideApp from '../userguide';
|
||||
|
||||
userguideApp.controller('UserguideCtrl', ['$scope',
|
||||
function UserguideCtrl($scope) {
|
||||
|
||||
// Used for dynamic startdate, enddate param examples
|
||||
const d = new Date();
|
||||
const y = d.getFullYear();
|
||||
const m = d.getMonth() + 1;
|
||||
const sd = d.getDate() - 2;
|
||||
const ed = d.getDate();
|
||||
|
||||
$scope.startDate = y + '-' + m + '-' + sd;
|
||||
$scope.endDate = y + '-' + m + '-' + ed;
|
||||
},
|
||||
]);
|
|
@ -1,21 +1,6 @@
|
|||
import treeherder from '../../treeherder';
|
||||
import thNotificationsBoxTemplate from '../../../partials/main/thNotificationsBox.html';
|
||||
|
||||
treeherder.directive('stopPropagationOnLeftClick', [
|
||||
function () {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function (scope, element) {
|
||||
element.on('click', function (event) {
|
||||
if (event.which === 1) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
},
|
||||
]);
|
||||
|
||||
treeherder.directive('thNotificationBox', [
|
||||
'thNotify',
|
||||
function (thNotify) {
|
||||
|
|
|
@ -3,7 +3,6 @@ import ngRoute from 'angular-route';
|
|||
import uiBootstrap from 'angular1-ui-bootstrap4';
|
||||
|
||||
import treeherderModule from './treeherder';
|
||||
import thShortcutTableTemplate from '../partials/main/thShortcutTable.html';
|
||||
|
||||
const treeherderApp = angular.module('treeherder.app', [
|
||||
treeherderModule.name,
|
||||
|
@ -37,10 +36,6 @@ treeherderApp.config(['$compileProvider', '$locationProvider', '$routeProvider',
|
|||
reloadOnSearch: false,
|
||||
})
|
||||
.otherwise({ redirectTo: '/jobs' });
|
||||
}]).run(['$templateCache', ($templateCache) => {
|
||||
// Templates used by ng-include have to be manually put in the template cache.
|
||||
// Those used by directives should instead be imported at point of use.
|
||||
$templateCache.put('partials/main/thShortcutTable.html', thShortcutTableTemplate);
|
||||
}]);
|
||||
|
||||
export default treeherderApp;
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
import angular from 'angular';
|
||||
|
||||
import thShortcutTableTemplate from '../partials/main/thShortcutTable.html';
|
||||
|
||||
const userguideApp = angular.module('userguide', []);
|
||||
|
||||
userguideApp.config(['$compileProvider', function ($compileProvider) {
|
||||
// Disable debug data & legacy comment/class directive syntax, as recommended by:
|
||||
// https://docs.angularjs.org/guide/production
|
||||
$compileProvider.debugInfoEnabled(false);
|
||||
$compileProvider.commentDirectivesEnabled(false);
|
||||
$compileProvider.cssClassDirectivesEnabled(false);
|
||||
}]).run(['$templateCache', ($templateCache) => {
|
||||
// Templates used by ng-include have to be manually put in the template cache.
|
||||
// Those used by directives should instead be imported at point of use.
|
||||
$templateCache.put('partials/main/thShortcutTable.html', thShortcutTableTemplate);
|
||||
}]);
|
||||
|
||||
export default userguideApp;
|
|
@ -1,93 +0,0 @@
|
|||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Keyboard shortcuts
|
||||
<a ng-show="onscreenShortcutsShowing"
|
||||
ng-click="setOnscreenShortcutsShowing(false)"
|
||||
class="pull-right" href="" title="Close this help">
|
||||
<span class="fa fa-times lightgray"></span>
|
||||
</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body panel-spacing">
|
||||
<table id="shortcuts">
|
||||
<tr>
|
||||
<th colspan=2>Jobs View</th>
|
||||
</tr>
|
||||
<tbody>
|
||||
<tr><td><kbd>f</kbd></td>
|
||||
<td>Enter a quick filter</td></tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>shift</kbd><kbd>f</kbd></td>
|
||||
<td>Clear the quick filter</td>
|
||||
</tr>
|
||||
<tr><td><kbd>i</kbd></td>
|
||||
<td>Toggle pending and running jobs</td></tr>
|
||||
<tr><td><kbd>j</kbd> or <kbd>n</kbd></td>
|
||||
<td>Select next unclassified failure</td></tr>
|
||||
<tr><td><kbd>k</kbd> or <kbd>p</kbd></td>
|
||||
<td>Select previous unclassified failure</td></tr>
|
||||
<tr><td><kbd>l</kbd></td>
|
||||
<td>Open the logviewer for the selected job</td></tr>
|
||||
<tr><td><kbd>r</kbd></td>
|
||||
<td>Retrigger selected job</td></tr>
|
||||
<tr><td><kbd>t</kbd></td>
|
||||
<td>Select next info tab</td></tr>
|
||||
<tr><td><kbd>u</kbd></td>
|
||||
<td>Toggle showing only unclassified jobs</td></tr>
|
||||
<tr><td><kbd>→</kbd></td>
|
||||
<td>Select next job</td></tr>
|
||||
<tr><td><kbd>←</kbd></td>
|
||||
<td>Select previous job</td></tr>
|
||||
<tr><td><kbd>esc</kbd></td>
|
||||
<td>Close all open panels</td></tr>
|
||||
<tr><td><kbd>ctrl</kbd> or <kbd>cmd</kbd></td>
|
||||
<td>Toggle pinning a job during click selection</td></tr>
|
||||
</tbody>
|
||||
<tr>
|
||||
<th colspan=2>Pinboard</th>
|
||||
</tr>
|
||||
<tbody>
|
||||
<tr><td><kbd>b</kbd></td>
|
||||
<td>Add a selected job to the pinboard + enter related bug</td></tr>
|
||||
<tr><td><kbd>c</kbd></td>
|
||||
<td>Add a selected job to the pinboard + enter classification</td></tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>shift</kbd><kbd>u</kbd></td>
|
||||
<td>Clear the pinboard</td>
|
||||
</tr>
|
||||
<tr><td><kbd>spacebar</kbd></td>
|
||||
<td>Add a selected job to the pinboard</td></tr>
|
||||
<tr><td><kbd>ctrl</kbd><kbd>enter</kbd></td>
|
||||
<td>Save pinboard classification and related bugs</td></tr>
|
||||
<tr><td><kbd>ctrl</kbd><kbd>backspace</kbd></td>
|
||||
<td>Delete job classification and related bugs</td></tr>
|
||||
<tr>
|
||||
<th colspan=2>Autoclassify Panel</th>
|
||||
</tr>
|
||||
<tr><td><kbd>a</kbd></td>
|
||||
<td>Add all subsequent lines to the selection</td></tr>
|
||||
<tr><td><kbd>e</kbd></td>
|
||||
<td>Toggle editing selected lines</td></tr>
|
||||
<tr><td><kbd>shift</kbd><kbd>i</kbd></td>
|
||||
<td>Ignore the failure</td></tr>
|
||||
<tr><td><kbd>s</kbd></td>
|
||||
<td>Save all classifications</td></tr>
|
||||
<tr><td><kbd>x</kbd></td>
|
||||
<td>Toggle showing additional classification suggestions</td></tr>
|
||||
<tr><td><kbd>0</kbd>-<kbd>9</kbd></td>
|
||||
<td>Select the Nth classification option</td></tr>
|
||||
<tr><td><kbd>↓</kbd></td>
|
||||
<td>Select next failure</td></tr>
|
||||
<tr><td><kbd>↑</kbd></td>
|
||||
<td>Select previous failure</td></tr>
|
||||
</tbody>
|
||||
<tr>
|
||||
<th colspan=2>Help</th>
|
||||
</tr>
|
||||
<tbody>
|
||||
<tr><td><kbd>?</kbd></td>
|
||||
<td>Display onscreen keyboard shortcuts</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,164 @@
|
|||
import React from 'react';
|
||||
import { react2angular } from 'react2angular/index.es2015';
|
||||
|
||||
import treeherder from '../js/treeherder';
|
||||
|
||||
const ShortcutTable = function ShortcutTable() {
|
||||
return (
|
||||
<div className="card">
|
||||
<div className="card-header">
|
||||
<h3>Keyboard shortcuts</h3>
|
||||
</div>
|
||||
|
||||
<div className="card-body panel-spacing">
|
||||
<table id="shortcuts">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th colSpan="2">Jobs View</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><kbd>f</kbd></td>
|
||||
<td>Enter a quick filter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>shift</kbd><kbd>f</kbd></td>
|
||||
<td>Clear the quick filter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>i</kbd></td>
|
||||
<td>Toggle pending and running jobs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>j</kbd> or <kbd>n</kbd></td>
|
||||
<td>Select next unclassified failure</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>k</kbd> or <kbd>p</kbd></td>
|
||||
<td>Select previous unclassified failure</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>l</kbd></td>
|
||||
<td>Open the logviewer for the selected job</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>r</kbd></td>
|
||||
<td>Retrigger selected job</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>t</kbd></td>
|
||||
<td>Select next info tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>u</kbd></td>
|
||||
<td>Toggle showing only unclassified jobs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>→</kbd></td>
|
||||
<td>Select next job</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>←</kbd></td>
|
||||
<td>Select previous job</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>esc</kbd></td>
|
||||
<td>Close all open panels</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd> or <kbd>cmd</kbd></td>
|
||||
<td>Toggle pinning a job during click selection</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<th colSpan="2">Pinboard</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><kbd>b</kbd></td>
|
||||
<td>Add a selected job to the pinboard + enter related bug</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>c</kbd></td>
|
||||
<td>Add a selected job to the pinboard + enter classification</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>shift</kbd><kbd>u</kbd></td>
|
||||
<td>Clear the pinboard</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>spacebar</kbd></td>
|
||||
<td>Add a selected job to the pinboard</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>enter</kbd></td>
|
||||
<td>Save pinboard classification and related bugs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl</kbd><kbd>backspace</kbd></td>
|
||||
<td>Delete job classification and related bugs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colSpan="2">Autoclassify Panel</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>a</kbd></td>
|
||||
<td>Add all subsequent lines to the selection</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>e</kbd></td>
|
||||
<td>Toggle editing selected lines</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>shift</kbd><kbd>i</kbd></td>
|
||||
<td>Ignore the failure</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>s</kbd></td>
|
||||
<td>Save all classifications</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>x</kbd></td>
|
||||
<td>Toggle showing additional classification suggestions</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>0</kbd>-<kbd>9</kbd></td>
|
||||
<td>Select the Nth classification option</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>↓</kbd></td>
|
||||
<td>Select next failure</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>↑</kbd></td>
|
||||
<td>Select previous failure</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<th colSpan="2">Help</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><kbd>?</kbd></td>
|
||||
<td>Display onscreen keyboard shortcuts</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
treeherder.component('shortcutTable', react2angular(ShortcutTable));
|
||||
|
||||
export default ShortcutTable;
|
|
@ -1,242 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html ng-app="userguide" ng-strict-di>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Treeherder User Guide</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<link id="favicon" type="image/png" rel="shortcut icon" href="img/tree_open.png">
|
||||
</head>
|
||||
|
||||
<body ng-controller="UserguideCtrl" id="userguide">
|
||||
<!-- Content panel -->
|
||||
<div class="card">
|
||||
<!-- Header -->
|
||||
<div class="card-header">
|
||||
<h1>Treeherder User Guide</h1>
|
||||
<h5>Want to contribute?
|
||||
<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Tree+Management&component=Treeherder">
|
||||
File a bug</a> /
|
||||
<a href="https://github.com/mozilla/treeherder">
|
||||
Source</a> /
|
||||
<a href="https://wiki.mozilla.org/EngineeringProductivity/Projects/Treeherder#Contributing">
|
||||
Contributing</a>
|
||||
</h5>
|
||||
For anything else visit our
|
||||
<a href="https://wiki.mozilla.org/EngineeringProductivity/Projects/Treeherder">
|
||||
Project Wiki</a>
|
||||
or ask us on IRC in
|
||||
<a href="irc://irc.mozilla.org/treeherder">#treeherder</a>
|
||||
</div>
|
||||
|
||||
<!-- Start of interior panels -->
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<!-- Job Notation table -->
|
||||
<div class="col-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Job notation</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table id="legend-other">
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-green ug-btn ug-btn-comment">+n</button>
|
||||
</th>
|
||||
<td>Collapsed job count</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-dkgray ug-btn ug-btn-comment">Th( )</button>
|
||||
</th>
|
||||
<td>Wrapped job group</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-orange-classified autoclassified ug-btn ug-btn-comment">Th</button>
|
||||
</th>
|
||||
<td>Hollow asterisk, auto-classified</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-orange-classified ug-btn ug-btn-comment">Th</button>
|
||||
</th>
|
||||
<td>Asterisk, classified</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-ltgray ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Light gray, pending</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-dkgray ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Gray, running</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-green ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Green, success</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-orange ug-btn ug-btn-orange">Th</button>
|
||||
</th>
|
||||
<td>Orange, tests failed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-purple ug-btn ug-btn-purple">Th</button>
|
||||
</th>
|
||||
<td>Purple, infrastructure exception</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-red ug-btn ug-btn-red">Th</button>
|
||||
</th>
|
||||
<td>Red, build error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-dkblue ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Dark blue, build restarted</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-pink ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Pink, build cancelled</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<button class="btn btn-yellow ug-btn ug-btn-yellow">Th</button>
|
||||
</th>
|
||||
<td>Yellow, unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="superseded">
|
||||
<button class="btn btn-ltblue ug-btn ug-btn-bg">Th</button>
|
||||
</th>
|
||||
<td>Light blue, superseded</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Shortcuts table -->
|
||||
<div class="col-6">
|
||||
<ng-include id="th-shortcut-table"
|
||||
src="'partials/main/thShortcutTable.html'"></ng-include>
|
||||
</div>
|
||||
|
||||
<!-- Copy values on hover table -->
|
||||
<div class="col-6">
|
||||
<div class="card">
|
||||
<div class="card-header"><h3>Copy values on hover</h3></div>
|
||||
<div class="card-body panel-spacing">
|
||||
<table id="shortcuts">
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details
|
||||
<img src="./img/logviewerIconHelp.svg" id="ug-logviewer-icon">
|
||||
logviewer url on hover
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details
|
||||
<span id="ug-raw-log-icon" class="fa fa-file-text-o"></span>
|
||||
raw log url on hover
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details <span class="small"><label>Job:</label>
|
||||
<span id="ug-job-name">name</span></span> as raw text on hover
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- End of row -->
|
||||
</div>
|
||||
|
||||
<!-- Query string params -->
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>URL Query String Parameters</h3>
|
||||
</div>
|
||||
<div class="card-body panel-spacing">
|
||||
<table id="queryparams">
|
||||
<tr>
|
||||
<td><span class="queryparam">nojobs</span></td>
|
||||
<td>Load pushes without loading any job results.</td>
|
||||
<td><span class="queryparam">&nojobs</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="queryparam">fromchange</span></td>
|
||||
<td>Specify the earliest revision in the push range.</td>
|
||||
<td><span class="queryparam">&fromchange=a12ca6c8b89b</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="queryparam">tochange</span></td>
|
||||
<td>Specify the latest revision in the push range.</td>
|
||||
<td><span class="queryparam">&tochange=3215c7fc090b</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="queryparam">startdate</span></td>
|
||||
<td>
|
||||
<span>Specify the earliest</span>
|
||||
<span class="queryparam">YYYY-MM-DD</span>
|
||||
<span>date in the push range.</span>
|
||||
</td>
|
||||
<td><span class="queryparam">&startdate={{ startDate }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="queryparam">enddate</span></td>
|
||||
<td>
|
||||
<span>Specify the latest</span>
|
||||
<span class="queryparam">YYYY-MM-DD</span>
|
||||
<span>date in the push range.</span>
|
||||
</td>
|
||||
<td><span class="queryparam">&enddate={{ endDate }}</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- End of interior panels -->
|
||||
</div>
|
||||
|
||||
<!-- Credits and Whats Deployed -->
|
||||
<div class="card-footer ug-footer row">
|
||||
<div class="col-6">
|
||||
<div>Some icons by
|
||||
<a href="http://www.freepik.com" title="Freepik">Freepik</a> from
|
||||
<a href="http://www.flaticon.com" title="Flaticon">www.flaticon.com</a> licensed under
|
||||
<a href="http://creativecommons.org/licenses/by/3.0/"
|
||||
title="Creative Commons BY 3.0">CC BY 3.0</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 float-right">
|
||||
<a class="midgray float-right"
|
||||
href="http://whatsdeployed.io/?owner=mozilla&repo=treeherder&name[]=Stage&url[]=https://treeherder.allizom.org/revision.txt&name[]=Prod&url[]=https://treeherder.mozilla.org/revision.txt">What's Deployed?</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- End of content panel -->
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
import React from 'react';
|
||||
|
||||
import UserGuideHeader from './UserGuideHeader';
|
||||
import UserGuideBody from './UserGuideBody';
|
||||
import UserGuideFooter from './UserGuideFooter';
|
||||
|
||||
const App = () => (
|
||||
<div id="userguide">
|
||||
<div className="card">
|
||||
<UserGuideHeader />
|
||||
<UserGuideBody />
|
||||
<UserGuideFooter />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
export default App;
|
|
@ -0,0 +1,190 @@
|
|||
import React from 'react';
|
||||
|
||||
import ShortcutTable from '../shared/ShortcutTable';
|
||||
import logviewerIconHelp from '../img/logviewerIconHelp.svg';
|
||||
|
||||
const notations = [
|
||||
{
|
||||
text: '+n',
|
||||
classes: 'btn-green ug-btn-comment',
|
||||
explanation: 'Collapsed job count',
|
||||
},
|
||||
{
|
||||
text: 'Th()',
|
||||
classes: 'btn-dkgray ug-btn-comment',
|
||||
explanation: 'Wrapped job group',
|
||||
},
|
||||
{
|
||||
classes: 'btn-orange-classified autoclassified ug-btn-comment',
|
||||
explanation: 'Hollow asterisk, auto-classified',
|
||||
},
|
||||
{
|
||||
classes: 'btn-orange-classified ug-btn-comment',
|
||||
explanation: 'Asterisk, classified',
|
||||
},
|
||||
{
|
||||
classes: 'btn-ltgray ug-btn-bg',
|
||||
explanation: 'Light gray, pending',
|
||||
},
|
||||
{
|
||||
classes: 'btn-dkgray ug-btn-bg',
|
||||
explanation: 'Gray, running',
|
||||
},
|
||||
{
|
||||
classes: 'btn-green ug-btn-bg',
|
||||
explanation: 'Green, success',
|
||||
},
|
||||
{
|
||||
classes: 'btn-orange ug-btn-orange',
|
||||
explanation: 'Orange, tests failed',
|
||||
},
|
||||
{
|
||||
classes: 'btn-purple ug-btn-purple',
|
||||
explanation: 'Purple, infrastructure exception',
|
||||
},
|
||||
{
|
||||
classes: 'btn-red ug-btn-red',
|
||||
explanation: 'Red, build error',
|
||||
},
|
||||
{
|
||||
classes: 'btn-dkblue ug-btn-bg',
|
||||
explanation: 'Dark blue, build restarted',
|
||||
},
|
||||
{
|
||||
classes: 'btn-pink ug-btn-bg',
|
||||
explanation: 'Pink, build cancelled',
|
||||
},
|
||||
{
|
||||
classes: 'btn-yellow ug-btn-yellow',
|
||||
explanation: 'Yellow, unknown',
|
||||
},
|
||||
{
|
||||
classes: 'btn-ltblue ug-btn ug-btn-bg',
|
||||
explanation: 'Light blue, superseded',
|
||||
},
|
||||
];
|
||||
|
||||
const UserGuideBody = function UserGuideBody() {
|
||||
return (
|
||||
<div className="card-body">
|
||||
<div className="row">
|
||||
<div className="col-6">
|
||||
<div className="card">
|
||||
<div className="card-header">
|
||||
<h3>Job notation</h3>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
<table id="legend-other">
|
||||
<tbody>
|
||||
{notations.map(({ classes, explanation, text }) => (
|
||||
<tr key={classes}>
|
||||
<th className="superseded">
|
||||
<button className={`btn ug-btn ${classes}`}>
|
||||
{text || 'Th'}
|
||||
</button>
|
||||
</th>
|
||||
<td>{explanation}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="col-6">
|
||||
<ShortcutTable id="th-shortcut-table" />
|
||||
</div>
|
||||
|
||||
<div className="col-6">
|
||||
<div className="card">
|
||||
<div className="card-header"><h3>Copy values on hover</h3></div>
|
||||
<div className="card-body panel-spacing">
|
||||
<table id="shortcuts">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details
|
||||
<img src={logviewerIconHelp} id="ug-logviewer-icon" alt="" />
|
||||
logviewer url on hover
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details
|
||||
<span id="ug-raw-log-icon" className="fa fa-file-text-o" />
|
||||
raw log url on hover
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>ctrl/cmd</kbd><kbd>c</kbd></td>
|
||||
<td>Copy job details <span className="small"><label>Job:</label>
|
||||
<span id="ug-job-name">name</span></span> as raw text on hover
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<div className="card">
|
||||
<div className="card-header">
|
||||
<h3>URL Query String Parameters</h3>
|
||||
</div>
|
||||
<div className="card-body panel-spacing">
|
||||
<table id="queryparams">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><span className="queryparam">nojobs</span></td>
|
||||
<td>Load pushes without loading any job results.</td>
|
||||
<td><span className="queryparam">&nojobs</span></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><span className="queryparam">fromchange</span></td>
|
||||
<td>Specify the earliest revision in the push range.</td>
|
||||
<td><span className="queryparam">&fromchange=a12ca6c8b89b</span></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><span className="queryparam">tochange</span></td>
|
||||
<td>Specify the latest revision in the push range.</td>
|
||||
<td><span className="queryparam">&tochange=3215c7fc090b</span></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><span className="queryparam">startdate</span></td>
|
||||
<td>
|
||||
<span>Specify the earliest </span>
|
||||
<span className="queryparam">YYYY-MM-DD</span>
|
||||
<span> date in the push range.</span>
|
||||
</td>
|
||||
<td><span className="queryparam">&startdate=YYYY-MM-DD</span></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><span className="queryparam">enddate</span></td>
|
||||
<td>
|
||||
<span>Specify the latest </span>
|
||||
<span className="queryparam">YYYY-MM-DD</span>
|
||||
<span> date in the push range.</span>
|
||||
</td>
|
||||
<td><span className="queryparam">&enddate=YYYY-MM-DD</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default UserGuideBody;
|
|
@ -0,0 +1,21 @@
|
|||
import React from 'react';
|
||||
|
||||
const UserGuideFooter = function UserGuideFooter() {
|
||||
return (
|
||||
<div className="card-footer ug-footer">
|
||||
<div>
|
||||
<div>Some icons by
|
||||
<a href="http://www.freepik.com" title="Freepik"> Freepik</a> from
|
||||
<a href="http://www.flaticon.com" title="Flaticon"> www.flaticon.com</a> licensed under
|
||||
<a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0"> CC BY 3.0</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a className="midgray" href="http://whatsdeployed.io/?owner=mozilla&repo=treeherder&name[]=Stage&url[]=https://treeherder.allizom.org/revision.txt&name[]=Prod&url[]=https://treeherder.mozilla.org/revision.txt">Whats Deployed?</a>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default UserGuideFooter;
|
|
@ -0,0 +1,21 @@
|
|||
import React from 'react';
|
||||
|
||||
const UserGuideHeader = function UserGuideHeader() {
|
||||
return (
|
||||
<div className="card-header">
|
||||
<h1>Treeherder User Guide</h1>
|
||||
|
||||
<h5>Want to contribute?
|
||||
<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Tree+Management&component=Treeherder"> File a bug</a> /
|
||||
<a href="https://github.com/mozilla/treeherder"> Source </a> /
|
||||
<a href="https://wiki.mozilla.org/EngineeringProductivity/Projects/Treeherder#Contributing"> Contributing</a>
|
||||
</h5>
|
||||
For anything else visit our
|
||||
<a href="https://wiki.mozilla.org/EngineeringProductivity/Projects/Treeherder"> Project Wiki </a>
|
||||
or ask us on IRC in
|
||||
<a href="irc://irc.mozilla.org/treeherder"> #treeherder</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default UserGuideHeader;
|
|
@ -0,0 +1,24 @@
|
|||
import React from 'react';
|
||||
import { render } from 'react-dom';
|
||||
import { AppContainer } from 'react-hot-loader';
|
||||
|
||||
import 'bootstrap/dist/css/bootstrap.min.css';
|
||||
import 'font-awesome/css/font-awesome.css';
|
||||
|
||||
import '../css/treeherder-global.css';
|
||||
import '../css/treeherder-userguide.css';
|
||||
import '../css/treeherder-job-buttons.css';
|
||||
|
||||
import App from './App';
|
||||
|
||||
const load = () => render((
|
||||
<AppContainer>
|
||||
<App />
|
||||
</AppContainer>
|
||||
), document.getElementById('root'));
|
||||
|
||||
if (module.hot) {
|
||||
module.hot.accept('./App', load);
|
||||
}
|
||||
|
||||
load();
|
Загрузка…
Ссылка в новой задаче