src/app/component-registry/label.js
export class Label {
constructor() {
this._usedUpperLabels = [];
this._usedLowerLabels = [];
}
draw(lower = false) {
if (lower) {
return this.pushLower();
} else {
return this.pushUpper();
}
}
pushLower(label) {
if (label == undefined) {
label = this._generateLabel(this._usedLowerLabels.length + 1);
while (this._usedLowerLabels.includes(this.label)) {
label = this._generateLabel(this._usedLowerLabels.length + 1);
}
}
this._usedLowerLabels.push(label);
return label.toLowerCase();
}
pushUpper(label) {
if (label == undefined) {
label = this._generateLabel(this._usedUpperLabels.length + 1);
while (this._usedUpperLabels.includes(this.label)) {
label = this._generateLabel(this._usedUpperLabels.length + 1);
}
}
this._usedUpperLabels.push(label);
return label.toUpperCase();
}
_generateLabel(n) {
let label = "";
let labelNumber = n;
while (labelNumber > 0) {
const letterNumber = (labelNumber - 1) % 26;
const currentLetter = String.fromCharCode(letterNumber + 65);
label = currentLetter + label;
labelNumber = (labelNumber - (letterNumber + 1)) / 26;
}
return label;
}
}
export const label = new Label();