Unified /labels page (badges, edit, preview), mnemonic ESC/POS parser for the raw receipt field
deploy / deploy (push) Successful in 10s

- Saved labels/receipts now show on one page instead of split across
  Shipping labels and Receipts, each with a badge for its type/printer,
  Edit (name+content, in place), Print, and Delete.
- ZPL labels get a real visual preview via Labelary's public render API;
  ESC/POS ones show their raw content (no good general preview for that).
- The Receipts free-text field only ever encoded whatever was typed as
  literal printable characters -- pasting mnemonic ESC/POS notation
  (ESC/GS/LF as command names, 0xNN as raw bytes) just printed as text
  instead of being interpreted. Added a small line-based parser for that
  notation (ReceiptBuilder#raw appends already-resolved bytes verbatim),
  verified byte-for-byte against an example with align/bold/barcode/cut.
This commit is contained in:
randy committed 2026-09-13 11:21:46 +02:00
1 parent 66e2e7a5c0
commit 148f7dc248
8 files changed
+180 -51

No files matched your search

+10
View File
@@ -34,6 +34,16 @@ class LabelRepository
label
end
def update(id, name:, content:)
label = find(id)
return nil unless label
label['name'] = name
label['content'] = content
File.write(path_for(id), JSON.generate(label))
label
end
def delete(id)
File.delete(path_for(id)) if File.exist?(path_for(id))
end
+7
View File
@@ -39,6 +39,13 @@ class ReceiptBuilder
self
end
# Appends already-encoded/raw bytes as-is (e.g. pre-parsed ESC/POS command
# sequences), bypassing the CP852 text encoding `text` applies.
def raw(bytes)
@buffer << bytes
self
end
def align(mode)
@buffer << case mode
when :center then ALIGN_CENT