Add status box to see time and current active tiles.
This commit is contained in:
@@ -133,6 +133,7 @@ BabyStats.prototype.handleMessage_ = function(isEvent, message) {
|
|||||||
tile2 = this.findTile_(type);
|
tile2 = this.findTile_(type);
|
||||||
tile2.canceled = true;
|
tile2.canceled = true;
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
this.updateTileStatus_();
|
||||||
} else {
|
} else {
|
||||||
console.log('Unknown message type:', message);
|
console.log('Unknown message type:', message);
|
||||||
}
|
}
|
||||||
@@ -160,6 +161,26 @@ BabyStats.prototype.addCSSClass_ = function(node, className) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a CSS class to a node if it has it.
|
||||||
|
* @param {!Node} node Node object to remove class from
|
||||||
|
* @param {!string} className Name of class to remove
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
BabyStats.prototype.removeCSSClass_ = function(node, className) {
|
||||||
|
var classes = node.className.split(' ').filter(function(className) {
|
||||||
|
return className;
|
||||||
|
});
|
||||||
|
var i = classes.indexOf(className);
|
||||||
|
if (i == -1) {
|
||||||
|
// Already doesn't have class.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delete classes[i];
|
||||||
|
node.className = classes.join(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if we need to rebuild the grid layout because of optimal layout
|
* Check if we need to rebuild the grid layout because of optimal layout
|
||||||
* changes.
|
* changes.
|
||||||
@@ -245,6 +266,26 @@ BabyStats.prototype.buildStylesheet_ = function() {
|
|||||||
this.cellRule_.style.userSelect = 'none';
|
this.cellRule_.style.userSelect = 'none';
|
||||||
this.cellRule_.style.cursor = 'default';
|
this.cellRule_.style.cursor = 'default';
|
||||||
|
|
||||||
|
style.sheet.insertRule('babyStatsCellStatus {}', 0);
|
||||||
|
var statusBox = style.sheet.cssRules[0];
|
||||||
|
statusBox.style.display = 'flex';
|
||||||
|
statusBox.style.position = 'absolute';
|
||||||
|
statusBox.style.bottom = '5px';
|
||||||
|
statusBox.style.right = '5px';
|
||||||
|
statusBox.style.width = '15vmin';
|
||||||
|
statusBox.style.height = '5vmin';
|
||||||
|
statusBox.style.alignItems = 'center';
|
||||||
|
statusBox.style.justifyContent = 'center';
|
||||||
|
statusBox.style.borderTopLeftRadius = '15px';
|
||||||
|
statusBox.style.borderBottomRightRadius = '15px';
|
||||||
|
statusBox.style.backgroundColor = 'rgb(189,21,80)';
|
||||||
|
statusBox.style.color = 'rgb(248,202,0)';
|
||||||
|
statusBox.style.fontSize = '3vmin';
|
||||||
|
|
||||||
|
style.sheet.insertRule('.babyStatsCellStatusActive {}', 0);
|
||||||
|
var statusBoxActive = style.sheet.cssRules[0];
|
||||||
|
statusBoxActive.style.backgroundColor = 'rgb(138,155,15)';
|
||||||
|
|
||||||
style.sheet.insertRule('babyStatsCellContents {}', 0);
|
style.sheet.insertRule('babyStatsCellContents {}', 0);
|
||||||
var contents = style.sheet.cssRules[0];
|
var contents = style.sheet.cssRules[0];
|
||||||
contents.style.display = 'flex';
|
contents.style.display = 'flex';
|
||||||
@@ -301,11 +342,15 @@ BabyStats.prototype.buildCells_ = function() {
|
|||||||
contents.textContent = tile.description;
|
contents.textContent = tile.description;
|
||||||
cell.appendChild(contents);
|
cell.appendChild(contents);
|
||||||
|
|
||||||
|
tile.statusBox = document.createElement('babyStatsCellStatus');
|
||||||
|
cell.appendChild(tile.statusBox);
|
||||||
|
|
||||||
var overlay = document.createElement('babyStatsCellOverlay');
|
var overlay = document.createElement('babyStatsCellOverlay');
|
||||||
cell.appendChild(overlay);
|
cell.appendChild(overlay);
|
||||||
|
|
||||||
cell.addEventListener('click', this.onClick_.bind(this, tile, overlay));
|
cell.addEventListener('click', this.onClick_.bind(this, tile, overlay));
|
||||||
}, this);
|
}, this);
|
||||||
|
window.setInterval(this.updateTileStatus_.bind(this), 60 * 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -529,3 +574,42 @@ BabyStats.prototype.buildGrid_ = function() {
|
|||||||
this.gridContainer_.appendChild(row);
|
this.gridContainer_.appendChild(row);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {number} seconds
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
|
BabyStats.prototype.secondsToHuman_ = function(seconds) {
|
||||||
|
if (seconds > 60 * 60 * 24) {
|
||||||
|
return Math.round(seconds / (60 * 60 * 24)).toString() + 'd';
|
||||||
|
} else if (seconds > 60 * 60) {
|
||||||
|
return Math.round(seconds / (60 * 60)).toString() + 'h';
|
||||||
|
} else {
|
||||||
|
return Math.round(seconds / 60).toString() + 'm';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
BabyStats.prototype.updateTileStatus_ = function() {
|
||||||
|
var now = Date.now() / 1000;
|
||||||
|
this.tiles_.forEach(function(tile) {
|
||||||
|
if (tile.lastSeen) {
|
||||||
|
var timeSince = now - tile.lastSeen;
|
||||||
|
tile.statusBox.textContent = this.secondsToHuman_(timeSince) + ' ago';
|
||||||
|
var timedOut = tile.timeout && (now - tile.timeout > tile.lastSeen);
|
||||||
|
if (tile.canceled || timedOut) {
|
||||||
|
this.removeCSSClass_(tile.statusBox, 'babyStatsCellStatusActive');
|
||||||
|
} else {
|
||||||
|
this.addCSSClass_(tile.statusBox, 'babyStatsCellStatusActive');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.removeCSSClass_(tile.statusBox, 'babyStatsCellStatusActive');
|
||||||
|
}
|
||||||
|
}.bind(this));
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user