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.
40 lines
1.6 KiB
ERB
40 lines
1.6 KiB
ERB
<h4>Saved labels & receipts</h4>
|
|
|
|
<% if @labels.empty? %>
|
|
<p>Nothing saved yet -- use "Save as" on <a href="/upload">Shipping labels</a> or <a href="/epson">Receipts</a>.</p>
|
|
<% else %>
|
|
<div class="list-group">
|
|
<% @labels.each do |label| %>
|
|
<div class="list-group-item">
|
|
<div class="d-flex justify-content-between align-items-start">
|
|
<div>
|
|
<% if label['type'] == 'zpl' %>
|
|
<span class="badge bg-primary">ZPL · Datamax</span>
|
|
<% else %>
|
|
<span class="badge bg-info text-dark">ESC/POS · Epson</span>
|
|
<% end %>
|
|
<strong class="ms-2"><%= label['name'] %></strong>
|
|
</div>
|
|
<div class="d-flex gap-2">
|
|
<form action="/labels/<%= label['id'] %>/print" method="POST">
|
|
<button class="btn btn-sm btn-secondary" type="submit">Print</button>
|
|
</form>
|
|
<a href="/labels/<%= label['id'] %>/edit" class="btn btn-sm btn-outline-secondary">Edit</a>
|
|
<form action="/labels/<%= label['id'] %>/delete" method="POST">
|
|
<button class="btn btn-sm btn-outline-danger" type="submit">Delete</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-2">
|
|
<% if label['type'] == 'zpl' %>
|
|
<img src="/labels/<%= label['id'] %>/preview.png" alt="preview" style="max-height: 150px;" onerror="this.remove()" />
|
|
<% else %>
|
|
<pre class="bg-light p-2 mb-0" style="max-height: 150px; overflow: auto;"><%= label['content'] %></pre>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
<% end %>
|