Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/**
* Una clase para interactuar con el plugin
*
* @author parzibyte
* @see https://parzibyte.me/blog
*/
const C = {
AccionWrite: "write",
AccionAlign: "align",
AccionFontSize: "fontsize",
AccionFont: "font",
AccionEmphasize: "emphasize",
AccionFeed: "feed",
AlineacionCentro: "center",
AlineacionDerecha: "right",
AlineacionIzquierda: "left",
FuenteA: "A",
FuenteB: "B"
};
class OperacionTicket {
constructor(accion, datos) {
this.accion = accion + "";
this.datos = datos + "";
}
}
class Impresora {
constructor(ruta) {
if (!ruta) ruta = "http://localhost:8000";
this.ruta = ruta;
this.operaciones = [];
}
setFontSize(a, b) {
this.operaciones.push(new OperacionTicket(C.AccionFontSize, `${a},${b}`));
}
setFont(font) {
if (font !== C.FuenteA && font !== C.FuenteB) throw Error("Fuente inválida");
this.operaciones.push(new OperacionTicket(C.AccionFont, font));
}
setEmphasize(val) {
if (isNaN(parseInt(val)) || parseInt(val) < 0) throw Error("Valor inválido");
this.operaciones.push(new OperacionTicket(C.AccionEmphasize, val));
}
setAlign(align) {
if (align !== C.AlineacionCentro && align !== C.AlineacionDerecha && align !== C.AlineacionIzquierda) {
throw Error(`Alineación ${align} inválida`);
}
this.operaciones.push(new OperacionTicket(C.AccionAlign, align));
}
write(text) {
this.operaciones.push(new OperacionTicket(C.AccionWrite, text));
}
feed(n) {
if (!parseInt(n) || parseInt(n) < 0) {
throw Error("Valor para feed inválido");
}
this.operaciones.push(new OperacionTicket(C.AccionFeed, n));
}
end() {
return fetch(this.ruta + "/imprimir", {
method: "POST",
body: JSON.stringify(this.operaciones),
})
.then(r => r.json());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment