led-matrix-ts
Version:
Highly customizable led matrix for the browser
66 lines • 2.4 kB
JavaScript
export class CharacterDictionary {
constructor() {
this._characters = [];
}
get characters() {
return this._characters;
}
get height() {
return Math.max.apply(Math, this._characters.map(x => x.height));
}
get length() {
return this._characters.length;
}
find(input) {
const character = this._characters.filter(x => x.hasPattern(input));
if (character && character.length > 0) {
return character[0];
}
throw `Could not find character ${input} in the alphabet`;
}
add(pendingCharacters) {
const pendingPatterns = pendingCharacters.map(x => x.pattern);
const duplicatedPendingPatterns = pendingPatterns.filter((value, index, array) => {
return array.indexOf(value) != index;
});
if (duplicatedPendingPatterns.length > 0) {
throw `Pattern already used by another pending character`;
}
if (this._characters.length > 0) {
const alreadyAddedPatterns = this._characters.map(x => x.pattern);
const duplicatedPatterns = alreadyAddedPatterns.filter((value) => {
return pendingPatterns.indexOf(value) != -1;
});
if (duplicatedPatterns.length > 0) {
throw `Pattern already used by another character`;
}
}
this._characters.push(...pendingCharacters);
}
edit(pendingCharacter) {
let edited = false;
this._characters.forEach((character, index, arr) => {
if (character.pattern == pendingCharacter.pattern && !edited) {
arr[index] = pendingCharacter;
edited = true;
}
});
if (!edited) {
throw `Could not find character ${pendingCharacter.pattern} in the alphabet. Aborted edit operation`;
}
}
delete(pendingCharacter) {
let deleted = false;
this._characters.forEach((character, index, arr) => {
if (character.pattern == pendingCharacter.pattern && !deleted) {
arr.splice(index, 1);
deleted = true;
}
});
if (!deleted) {
throw `Could not find character ${pendingCharacter.pattern} in the alphabet. Aborted delete operation`;
}
}
}
;
//# sourceMappingURL=character-dictionary.js.map