webamp/js/multi-display.js
2015-12-13 17:24:20 -08:00

63 lines
1.8 KiB
JavaScript

// Single line text display that can animate and hold multiple registers
define(['font'], function(Font) {
var MultiDisplay = function(node) {
this.font = new Font();
this.node = node;
this.registers = {};
this._marqueeLoop();
};
MultiDisplay.prototype.addRegister = function(key) {
// Create element node
var register = document.createElement('div');
register.style.display = 'none';
this.node.appendChild(register);
this.registers[key] = {
node: register,
text: '',
marquee: false
};
};
// Set text of register
MultiDisplay.prototype.setRegisterText = function(register, text) {
this.font.setNodeToString(this.registers[register].node, text);
};
MultiDisplay.prototype.showRegister = function(showKey) {
for (var key in this.registers) {
var display = (key === showKey) ? 'block' : 'none';
this.registers[key].node.style.display = display;
}
};
MultiDisplay.prototype.startRegisterMarquee = function(key) {
this.registers[key].marquee = true;
};
MultiDisplay.prototype.pauseRegisterMarquee = function(key) {
this.registers[key].marquee = false;
};
MultiDisplay.prototype._marqueeLoop = function() {
var self = this;
setTimeout(function() {
for (var key in self.registers) {
// Check every register to see if it needs to be marqueed
if (self.registers[key].marquee) {
var text = self.registers[key].node.firstChild;
// Only scroll if the text is too long
if (text && text.childNodes.length > 30) {
var characterNode = text.firstChild;
text.removeChild(characterNode);
text.appendChild(characterNode);
}
}
}
self._marqueeLoop();
}, 220);
};
return MultiDisplay;
});