#1014 stage can filter by username now

This commit is contained in:
Alexander Tsybulsky 2017-10-21 18:34:26 +02:00
parent a17b32a7b0
commit 6383326d92

View File

@ -139,7 +139,8 @@ function StageHelper(params) {
}; };
// Table columns (autodetection) // Table columns (autodetection)
this.col = this.detectColumns(); this.colIndex = this.detectColumns();
this.filterTargets = ["name", "user"];
// Constants // Constants
this.HIGHLIGHT_STYLE = "highlight"; this.HIGHLIGHT_STYLE = "highlight";
@ -173,13 +174,13 @@ StageHelper.prototype.setHooks = function() {
// Detect column index // Detect column index
StageHelper.prototype.detectColumns = function() { StageHelper.prototype.detectColumns = function() {
var dataRow = this.dom.stageTab.tBodies[0].rows[0]; var dataRow = this.dom.stageTab.tBodies[0].rows[0];
var cols = {}; var colIndex = {};
for (var i = dataRow.cells.length - 1; i >= 0; i--) { for (var i = dataRow.cells.length - 1; i >= 0; i--) {
if (dataRow.cells[i].className) cols[dataRow.cells[i].className] = i; if (dataRow.cells[i].className) colIndex[dataRow.cells[i].className] = i;
} }
return cols; return colIndex;
} }
// Store table state on leaving the page // Store table state on leaving the page
@ -195,7 +196,7 @@ StageHelper.prototype.onPageLoad = function() {
var data = window.sessionStorage && JSON.parse(window.sessionStorage.getItem(this.pageSeed)); var data = window.sessionStorage && JSON.parse(window.sessionStorage.getItem(this.pageSeed));
this.iterateStageTab(true, function (row) { this.iterateStageTab(true, function (row) {
var status = data && data[row.cells[this.col.name].innerText]; var status = data && data[row.cells[this.colIndex["name"]].innerText];
this.updateRow(row, status || this.STATUS.reset); this.updateRow(row, status || this.STATUS.reset);
}); });
@ -250,22 +251,33 @@ StageHelper.prototype.onSearch = function (e) {
// Apply filter to a single stage line - hide or show // Apply filter to a single stage line - hide or show
StageHelper.prototype.applyFilterToRow = function (row, filter) { StageHelper.prototype.applyFilterToRow = function (row, filter) {
var td = row.cells[this.col.name]; // Collect data cells
var origTxt = td.innerText; // without tags var targets = this.filterTargets.map(function(attr) {
var newTxt = ""; var elem = row.cells[this.colIndex[attr]];
if (elem.firstChild && elem.firstChild.tagName === "A") elem = elem.firstChild;
return {
elem: elem,
plainText: elem.innerText, // without tags
curHtml: elem.innerHTML
};
}, this);
if (filter) { var isVisible = false;
newTxt = origTxt.replace(filter, "<mark>"+filter+"</mark>");
row.style.display = (newTxt !== origTxt) ? "" : "none"; // Apply filter to cells, mark filtered text
} else { // No filter -> just reset the value for (var i = targets.length - 1; i >= 0; i--) {
newTxt = origTxt; var target = targets[i];
row.style.display = ""; // default, visible target.newHtml = (filter)
? target.plainText.replace(filter, "<mark>"+filter+"</mark>")
: target.plainText;
target.isChanged = target.newHtml !== target.curHtml;
isVisible = isVisible || !filter || target.newHtml !== target.plainText;
} }
if (td.firstChild.tagName === "A") { // Update DOM
td.firstChild.innerHTML = newTxt; row.style.display = isVisible ? "" : "none";
} else { for (var i = targets.length - 1; i >= 0; i--) {
td.innerHTML = newTxt; if (targets[i].isChanged) targets[i].elem.innerHTML = targets[i].newHtml;
} }
} }
@ -282,12 +294,12 @@ StageHelper.prototype.getStatusImpact = function (status) {
// Update table line // Update table line
StageHelper.prototype.updateRow = function (row, newStatus) { StageHelper.prototype.updateRow = function (row, newStatus) {
var oldStatus = row.cells[this.col.status].innerText; var oldStatus = row.cells[this.colIndex["status"]].innerText;
if (oldStatus !== newStatus) { if (oldStatus !== newStatus) {
this.updateRowStatus(row, newStatus); this.updateRowStatus(row, newStatus);
this.updateRowCommand(row, newStatus); this.updateRowCommand(row, newStatus);
} else if (!row.cells[this.col.cmd].children.length) { } else if (!row.cells[this.colIndex["cmd"]].children.length) {
this.updateRowCommand(row, newStatus); // For initial run this.updateRowCommand(row, newStatus); // For initial run
} }
@ -296,17 +308,17 @@ StageHelper.prototype.updateRow = function (row, newStatus) {
// Update Status cell (render set of commands) // Update Status cell (render set of commands)
StageHelper.prototype.updateRowStatus = function (row, status) { StageHelper.prototype.updateRowStatus = function (row, status) {
row.cells[this.col.status].innerText = status; row.cells[this.colIndex["status"]].innerText = status;
if (status === this.STATUS.reset) { if (status === this.STATUS.reset) {
row.cells[this.col.status].classList.remove(this.HIGHLIGHT_STYLE); row.cells[this.colIndex["status"]].classList.remove(this.HIGHLIGHT_STYLE);
} else { } else {
row.cells[this.col.status].classList.add(this.HIGHLIGHT_STYLE); row.cells[this.colIndex["status"]].classList.add(this.HIGHLIGHT_STYLE);
} }
} }
// Update Command cell (render set of commands) // Update Command cell (render set of commands)
StageHelper.prototype.updateRowCommand = function (row, status) { StageHelper.prototype.updateRowCommand = function (row, status) {
var cell = row.cells[this.col.cmd]; var cell = row.cells[this.colIndex["cmd"]];
if (status === this.STATUS.reset) { if (status === this.STATUS.reset) {
cell.innerHTML = (row.className == "local") cell.innerHTML = (row.className == "local")
? this.TEMPLATES.cmdLocal ? this.TEMPLATES.cmdLocal
@ -318,7 +330,7 @@ StageHelper.prototype.updateRowCommand = function (row, status) {
// Update menu items visibility // Update menu items visibility
StageHelper.prototype.updateMenu = function () { StageHelper.prototype.updateMenu = function () {
this.dom.commitBtn.style.display = (this.choiseCount > 0) ? "" : "none"; this.dom.commitBtn.style.display = (this.choiseCount > 0) ? "" : "none";
this.dom.commitAllBtn.style.display = (this.choiseCount > 0) ? "none" : ""; this.dom.commitAllBtn.style.display = (this.choiseCount > 0) ? "none" : "";
this.dom.fileCounter.innerHTML = this.choiseCount.toString(); this.dom.fileCounter.innerHTML = this.choiseCount.toString();
} }
@ -332,22 +344,19 @@ StageHelper.prototype.submit = function () {
StageHelper.prototype.collectData = function () { StageHelper.prototype.collectData = function () {
var data = {}; var data = {};
this.iterateStageTab(false, function (row) { this.iterateStageTab(false, function (row) {
data[row.cells[this.col.name].innerText] = row.cells[this.col.status].innerText; data[row.cells[this.colIndex["name"]].innerText] = row.cells[this.colIndex["status"]].innerText;
}); });
return data; return data;
} }
// Table iteration helper // Table iteration helper
StageHelper.prototype.iterateStageTab = function (changeMode, cb /*, ...*/) { StageHelper.prototype.iterateStageTab = function (changeMode, cb /*, ...*/) {
var restArgs = Array.prototype.slice.call(arguments, 2); var restArgs = Array.prototype.slice.call(arguments, 2);
var table = this.dom.stageTab; var table = this.dom.stageTab;
if (changeMode) { if (changeMode) {
var scrollOffset = window.pageYOffset; var scrollOffset = window.pageYOffset;
this.dom.stageTab.style.display = "none"; this.dom.stageTab.style.display = "none";
// var stageTabParent = this.dom.stageTab.parentNode;
// table = stageTabParent.removeChild(this.dom.stageTab);
} }
for (var b = 0, bN = table.tBodies.length; b < bN; b++) { for (var b = 0, bN = table.tBodies.length; b < bN; b++) {
@ -360,7 +369,6 @@ StageHelper.prototype.iterateStageTab = function (changeMode, cb /*, ...*/) {
if (changeMode) { if (changeMode) {
this.dom.stageTab.style.display = ""; this.dom.stageTab.style.display = "";
// stageTabParent.appendChild(table);
window.scrollTo(0, scrollOffset); window.scrollTo(0, scrollOffset);
} }
} }