Redesign: clear active nav state, Shipping labels + Receipts get free-text/raw print, shared label repository
deploy / deploy (push) Successful in 10s
deploy / deploy (push) Successful in 10s
- Home page is now just the print server overview, no more unrelated network links (3D printers, Cockpit) left over from when this was a general landing page. - Navbar shows which section is active; Brother's per-printer buttons now live under a dedicated Brother nav item instead of always-visible. - Shipping labels: paste raw ZPL directly (no need to save to a file first), with a Labelary preview link alongside it. - Receipts: paste already-formatted ESC/POS text directly, printed as-is. - Both can save what they just printed into a shared label repository (lib/label_repository.rb, one JSON file per label under data/labels/) for reprinting later -- saving happens independently of whether the print itself succeeds, so a failed/offline printer doesn't lose the content.
This commit is contained in:
1 parent
afae57aff4
commit
66e2e7a5c0
8 files changed
+226
-53
No files matched your search
@@ -0,0 +1,46 @@
|
||||
require 'json'
|
||||
require 'securerandom'
|
||||
require 'fileutils'
|
||||
|
||||
# Simple file-backed store for reusable ZPL/ESC-POS label templates -- one
|
||||
# JSON file per label under DIR, similar in spirit to brother_ql_web's own
|
||||
# label repository. No per-printer targeting yet (type just says which print
|
||||
# path to use); that can be added once labels can target any of the five
|
||||
# printers via the Brother API.
|
||||
class LabelRepository
|
||||
def initialize(dir)
|
||||
@dir = dir
|
||||
FileUtils.mkdir_p(@dir)
|
||||
end
|
||||
|
||||
# type: "zpl" or "escpos"
|
||||
def all(type: nil)
|
||||
Dir.glob(File.join(@dir, '*.json')).map { |f| JSON.parse(File.read(f)) }
|
||||
.select { |l| type.nil? || l['type'] == type }
|
||||
.sort_by { |l| l['name'].downcase }
|
||||
end
|
||||
|
||||
def find(id)
|
||||
path = path_for(id)
|
||||
return nil unless File.exist?(path)
|
||||
|
||||
JSON.parse(File.read(path))
|
||||
end
|
||||
|
||||
def save(name:, type:, content:)
|
||||
id = SecureRandom.uuid
|
||||
label = { 'id' => id, 'name' => name, 'type' => type, '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
|
||||
|
||||
private
|
||||
|
||||
def path_for(id)
|
||||
File.join(@dir, "#{id}.json")
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user