Merge "Task UI: Add links to see full view of all tasks" into stable-2.16
diff --git a/gr-task-plugin/gr-task-plugin.html b/gr-task-plugin/gr-task-plugin.html
index d03473b..7125ee1 100644
--- a/gr-task-plugin/gr-task-plugin.html
+++ b/gr-task-plugin/gr-task-plugin.html
@@ -19,13 +19,47 @@
<style>
ul { padding-left: 0.5em; }
h3 { padding-left: 0.1em; }
+ .cursor { cursor: pointer; }
+ #tasks_header {
+ align-items: center;
+ background-color: #fafafa;
+ border-top: 1px solid #ddd;
+ display: flex;
+ padding: 6px 1rem;
+ }
</style>
<div id="tasks" hidden$="[[!_tasks.length]]">
- <h3>Tasks: (Needs + Blocked)</h3>
- <ul style="list-style-type:none;">
- <gr-task-plugin-tasks tasks="[[_tasks]]"></gr-task-plugin-tasks>
- </ul>
+ <div id="tasks_header" style="display: flex;">
+ <iron-icon
+ icon="gr-icons:expand-less"
+ hidden$="[[!_expand_all]]"
+ on-tap="_switch_expand"
+ class="cursor"> </iron-icon>
+ <iron-icon
+ icon="gr-icons:expand-more"
+ hidden$="[[_expand_all]]"
+ on-tap="_switch_expand"
+ class="cursor"> </iron-icon>
+ <div style="display: flex; align-items: center; column-gap: 1em;">
+ <h3 on-tap="_switch_expand" class="cursor"> Tasks </h3>
+ <template is="dom-if" if="[[_expand_all]]">
+ <gr-button
+ on-tap="_show_all_tap"
+ disabled="[[_is_show_all(_show_all)]]"> Show All </gr-button>
+ <gr-button
+ on-tap="_needs_and_blocked_tap"
+ disabled="[[!_is_show_all(_show_all)]]"> Needs + Blocked</gr-button>
+ </template>
+ </div>
+ </div>
+ <div hidden$="[[!_expand_all]]">
+ <ul style="list-style-type:none;">
+ <gr-task-plugin-tasks
+ tasks="[[_tasks]]"
+ show_all$="[[_show_all]]"> </gr-task-plugin-tasks>
+ </ul>
+ </div>
</div>
</template>
<script src="gr-task-plugin.js"></script>
@@ -34,14 +68,15 @@
<dom-module id="gr-task-plugin-tasks">
<template>
<template is="dom-repeat" as="task" items="[[tasks]]">
- <template is="dom-if" if="[[task.message]]">
+ <template is="dom-if" if="[[_can_show(show_all, task)]]">
<li>
<style>
+ /* Matching colors with core code. */
.green {
- color: greenyellow
+ color: #9fcc6b;
}
.red {
- color: chocolate
+ color: #FFA62F;
}
</style>
<template is="dom-if" if="[[task.icon.id]]">
@@ -66,7 +101,9 @@
[[task.message]]
</li>
</template>
- <gr-task-plugin-tasks tasks="[[task.sub_tasks]]"></gr-task-plugin-tasks>
+ <gr-task-plugin-tasks
+ tasks="[[task.sub_tasks]]"
+ show_all$="[[show_all]]"> </gr-task-plugin-tasks>
</template>
</template>
<script>
@@ -78,6 +115,15 @@
notify: true,
value() { return []; },
},
+
+ show_all: {
+ type: String,
+ notify: true,
+ },
+ },
+
+ _can_show(show, task) {
+ return show === 'true' || task.showOnFilter;
},
});
</script>
diff --git a/gr-task-plugin/gr-task-plugin.js b/gr-task-plugin/gr-task-plugin.js
index 47e15c8..a58623c 100644
--- a/gr-task-plugin/gr-task-plugin.js
+++ b/gr-task-plugin/gr-task-plugin.js
@@ -39,6 +39,22 @@
notify: true,
value() { return []; },
},
+
+ _show_all: {
+ type: String,
+ notify: true,
+ value: 'false',
+ },
+
+ _expand_all: {
+ type: Boolean,
+ notify: true,
+ value: true,
+ },
+ },
+
+ _is_show_all(show_all) {
+ return show_all === 'true';
},
attached() {
@@ -64,45 +80,69 @@
});
},
- _getTaskDescription(task) {
- let inProgress = task.in_progress ? " (IN PROGRESS)" : "";
- return (task.hint || task.name) + inProgress;
- },
-
- _computeMessage(task) {
- switch (task.status) {
- case 'FAIL':
- case 'READY':
- case 'INVALID':
- return this._getTaskDescription(task);
- }
- },
-
_computeIcon(task) {
const icon = {};
switch (task.status) {
case 'FAIL':
icon.id = 'gr-icons:close';
icon.color = 'red';
- icon.tooltip = 'Blocked';
+ icon.tooltip = 'Failed';
break;
case 'READY':
+ icon.id = 'gr-icons:rebase';
+ icon.color = 'green';
+ icon.tooltip = 'Ready';
+ break;
+ case 'INVALID':
+ icon.id = 'gr-icons:abandon';
+ icon.color = 'red';
+ icon.tooltip = 'Invalid';
+ break;
+ case 'WAITING':
+ icon.id = 'gr-icons:side-by-side';
+ icon.color = 'red';
+ icon.tooltip = 'Waiting';
+ break;
+ case 'PASS':
icon.id = 'gr-icons:check';
icon.color = 'green';
- icon.tooltip = 'Needs';
+ icon.tooltip = 'Passed';
break;
}
return icon;
},
+ _computeShowOnNeedsAndBlockedFilter(task) {
+ switch (task.status) {
+ case 'FAIL':
+ case 'READY':
+ case 'INVALID':
+ return true;
+ }
+ return false;
+ },
+
_addTasks(tasks) { // rename to process, remove DOM bits
if (!tasks) return [];
tasks.forEach(task => {
- task.message = this._computeMessage(task);
+ task.message = task.hint || task.name;
task.icon = this._computeIcon(task);
+ task.showOnFilter = this._computeShowOnNeedsAndBlockedFilter(task);
this._addTasks(task.sub_tasks);
});
return tasks;
},
+
+ _show_all_tap() {
+ this._show_all = 'true';
+ },
+
+ _needs_and_blocked_tap() {
+ this._show_all = 'false';
+ },
+
+ _switch_expand() {
+ this._expand_all = !this._expand_all;
+ },
});
})();