led-matrix-ts
Version:
Highly customizable led matrix for the browser
133 lines • 4.2 kB
JavaScript
import { Board } from "./board";
import { Panel } from "./panel";
import { Event } from "../utils/event";
import { CharacterDictionary } from "./character-dictionary";
import { SideScroller } from "./scrollers/side-scroller";
export class LedMatrix {
constructor(params) {
this.onReady = new Event();
this._params = this._validateParameters(params);
this._panel = new Panel({
board: new Board({
letterSpacing: this._params.letterSpacing,
padding: this._params.padding,
size: this._params.size
}),
increment: this._params.increment,
reverse: this._params.reverse,
width: this._params.panelWidth,
scroller: this._params.scroller
});
this.event = {
newSequence: this._panel.NewSequence
};
this._dictionary = new CharacterDictionary();
}
get Ready() { return this.onReady.expose(); }
get size() {
return this._size;
}
set size(value) {
this._size = value;
this._panel.board.load(this.input, this._dictionary, this.size);
this._panel.GetCurrentSequence();
}
get loopEndIndex() {
return this._panel.scroller.loopEndIndex(this._panel);
}
addCharacters(characters) {
this._dictionary.add(characters);
}
addCharacter(character) {
this._dictionary.add([character]);
}
editCharacter(character) {
this._dictionary.edit(character);
}
deleteCharacter(character) {
this._dictionary.delete(character);
}
get loadedCharacters() {
return this._dictionary.characters;
}
get usedCharacters() {
return this._panel.board.characters;
}
set letterSpacing(value) {
this._panel.board.letterSpacing = value;
}
get letterSpacing() {
return this._panel.board.letterSpacing;
}
set padding(value) {
this._panel.board.padding = value;
}
get padding() {
return this._panel.board.padding;
}
get width() {
return this._panel.board.width;
}
get height() {
return this._panel.board.height;
}
set input(value) {
this._panel.board.load(value, this._dictionary);
}
get input() {
return this._panel.board.input;
}
get sequence() {
return this._panel.GetCurrentSequence();
}
set scroller(value) {
this._panel.scroller = value;
}
get scroller() {
return this._panel.scroller;
}
get reverse() {
return this._panel.reverse;
}
set increment(value) {
this._panel.increment = value;
}
get increment() {
return this._panel.increment;
}
set reverse(value) {
this._panel.reverse = value;
}
set viewportWidth(value) {
this._panel.width = value;
}
get viewportWidth() {
return this._panel.width;
}
_validateParameters(params) {
let defaultParams = {
increment: 1,
scroller: new SideScroller(),
reverse: false,
panelWidth: 78,
letterSpacing: 2,
padding: [0, 20, 0, 0],
size: 1
};
if (params) {
params.letterSpacing = this._valueOrDefaultIfNull(params.letterSpacing, defaultParams.letterSpacing);
params.padding = this._valueOrDefaultIfNull(params.padding, defaultParams.padding);
params.size = this._valueOrDefaultIfNull(params.size, defaultParams.size);
params.increment = this._valueOrDefaultIfNull(params.increment, defaultParams.increment);
params.scroller = this._valueOrDefaultIfNull(params.scroller, defaultParams.scroller);
params.reverse = this._valueOrDefaultIfNull(params.reverse, defaultParams.reverse);
params.panelWidth = this._valueOrDefaultIfNull(params.panelWidth, defaultParams.panelWidth);
return params;
}
return defaultParams;
}
_valueOrDefaultIfNull(value, defaultValue) {
return value == null ? defaultValue : value;
}
}
//# sourceMappingURL=led-matrix.js.map