Skip to content

Commit 1849cd1

Browse files
authored
Add backfeed suppression and update settings interface (#56)
This PR mostly rejiggers the backfeed setting to actually set properly. Previously it only was meant to work for ZPL's 'suppress backfeed once' on a per-label basis. This also expands the settings page to be more flexible for additional settings in the near future.
1 parent 972d8bb commit 1849cd1

24 files changed

+3304
-1669
lines changed

demo/advanced.html

Lines changed: 567 additions & 523 deletions
Large diffs are not rendered by default.

demo/index.html

Lines changed: 308 additions & 308 deletions
Large diffs are not rendered by default.

demo/test_advanced.ts

Lines changed: 375 additions & 369 deletions
Large diffs are not rendered by default.

demo/test_index.ts

Lines changed: 309 additions & 309 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 438 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"@vitest/coverage-v8": "^2.1.6",
5151
"eslint": "^9.9.0",
5252
"globals": "^15.9.0",
53+
"happy-dom": "^15.11.7",
5354
"https-localhost": "^4.7.1",
5455
"typescript": "^5.7.2",
5556
"typescript-eslint": "^8.16.0",

src/Commands/Commands.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,12 @@ export type CommandType
9191
| "SetLabelToMarkMedia"
9292
| "SetPrintDirection"
9393
| "SetPrintSpeed"
94+
| "SetBackfeedAfterTaken"
9495
// Document handling
9596
| "NewLabel"
9697
| "StartLabel"
9798
| "EndLabel"
9899
| "CutNow"
99-
| "EnableFeedBackup"
100-
| "SuppressFeedBackup"
101100
| "Print"
102101
// Content
103102
| "ClearImageBuffer"
@@ -167,18 +166,6 @@ export class CutNowCommand extends BasicCommand {
167166
constructor() { super(['actuatesCutter']); }
168167
}
169168

170-
export class SuppressFeedBackupCommand extends BasicCommand {
171-
name = 'Disable feed backup after printing label (be sure to re-enable!)';
172-
type: CommandType = 'SuppressFeedBackup';
173-
constructor() { super([]); }
174-
}
175-
176-
export class EnableFeedBackupCommand extends BasicCommand {
177-
name = 'Enable feed backup after printing label.';
178-
type: CommandType = 'EnableFeedBackup';
179-
constructor() { super([]); }
180-
}
181-
182169
/** A command to clear the image buffer. */
183170
export class ClearImageBufferCommand extends BasicCommand {
184171
name = 'Clear image buffer';
@@ -222,6 +209,21 @@ export class SetDarknessCommand implements IPrinterCommand {
222209
effectFlags = new CommandEffectFlags(['altersConfig']);
223210
}
224211

212+
export class SetBackfeedAfterTakenMode implements IPrinterCommand {
213+
name = 'Set backfeed mode after label is taken';
214+
type: CommandType = 'SetBackfeedAfterTaken';
215+
toDisplay(): string {
216+
if (this.mode === 'disabled') {
217+
return 'Disable backfeed';
218+
} else {
219+
return `Set backfeed to ${this.mode}% after label cut/taken.`;
220+
}
221+
}
222+
effectFlags = new CommandEffectFlags(['altersConfig']);
223+
224+
constructor(public readonly mode: Conf.BackfeedAfterTaken) { }
225+
}
226+
225227
/** A command to set the direction a label prints, either upside down or not. */
226228
export class SetPrintDirectionCommand implements IPrinterCommand {
227229
name = 'Set print direction';

src/Commands/Messages.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,9 @@ export type AwaitedCommand = {
9292
export interface ISettingUpdateMessage {
9393
messageType: 'SettingUpdateMessage';
9494

95-
printerHardware: Conf.IPrinterHardwareUpdate;
96-
printerMedia: Conf.IPrinterMediaUpdate;
97-
98-
printerDistanceIn?: number;
99-
headDistanceIn?: number;
95+
printerHardware?: Conf.IPrinterHardwareUpdate;
96+
printerMedia ?: Conf.IPrinterMediaUpdate;
97+
printerSettings?: Conf.IPrinterSettingsUpdate;
10098
}
10199

102100
/** A status message sent by the printer. */

src/Commands/PrinterConfig.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,28 @@ export class PrinterConfig extends Conf.BasePrinterConfig {
99

1010
/** Update these options with newly transmitted settings. */
1111
public update(msg: ISettingUpdateMessage) {
12-
this._model = msg.printerHardware.model ?? this._model;
13-
this._manufacturer = msg.printerHardware.manufacturer ?? this._manufacturer;
14-
this._serial = msg.printerHardware.serialNumber ?? this._serial;
15-
this._dpi = msg.printerHardware.dpi ?? this._dpi;
16-
this._speedTable = msg.printerHardware.speedTable ?? this._speedTable;
17-
this._maxMediaDarkness = msg.printerHardware.maxMediaDarkness ?? this._maxMediaDarkness;
18-
this._firmware = msg.printerHardware.firmware ?? this._firmware;
19-
this._maxMediaLengthDots = msg.printerHardware.maxMediaLengthDots ?? this._maxMediaLengthDots;
20-
this._maxMediaWidthDots = msg.printerHardware.maxMediaWidthDots ?? this._maxMediaWidthDots;
12+
this._model = msg.printerHardware?.model ?? this._model;
13+
this._manufacturer = msg.printerHardware?.manufacturer ?? this._manufacturer;
14+
this._serial = msg.printerHardware?.serialNumber ?? this._serial;
15+
this._dpi = msg.printerHardware?.dpi ?? this._dpi;
16+
this._speedTable = msg.printerHardware?.speedTable ?? this._speedTable;
17+
this._maxMediaDarkness = msg.printerHardware?.maxMediaDarkness ?? this._maxMediaDarkness;
18+
this._firmware = msg.printerHardware?.firmware ?? this._firmware;
19+
this._maxMediaLengthDots = msg.printerHardware?.maxMediaLengthDots ?? this._maxMediaLengthDots;
20+
this._maxMediaWidthDots = msg.printerHardware?.maxMediaWidthDots ?? this._maxMediaWidthDots;
2121

22-
this._speed = msg.printerMedia.speed ?? this._speed;
23-
this._darkness = msg.printerMedia.darknessPercent ?? this._darkness;
24-
this._thermalPrintMode = msg.printerMedia.thermalPrintMode ?? this._thermalPrintMode;
25-
this._mediaPrintMode = msg.printerMedia.mediaPrintMode ?? this._mediaPrintMode;
26-
this._printOrientation = msg.printerMedia.printOrientation ?? this._printOrientation;
27-
this._mediaGapDetectMode = msg.printerMedia.mediaGapDetectMode ?? this._mediaGapDetectMode;
28-
this._mediaPrintOriginOffsetDots = msg.printerMedia.mediaPrintOriginOffsetDots ?? this._mediaPrintOriginOffsetDots;
29-
this._mediaGapDots = msg.printerMedia.mediaGapDots ?? this._mediaGapDots;
30-
this._mediaLineOffsetDots = msg.printerMedia.mediaLineOffsetDots ?? this._mediaLineOffsetDots;
31-
this._mediaWidthDots = msg.printerMedia.mediaWidthDots ?? this._mediaWidthDots;
32-
this._mediaLengthDots = msg.printerMedia.mediaLengthDots ?? this._mediaLengthDots;
22+
this._speed = msg.printerMedia?.speed ?? this._speed;
23+
this._darkness = msg.printerMedia?.darknessPercent ?? this._darkness;
24+
this._thermalPrintMode = msg.printerMedia?.thermalPrintMode ?? this._thermalPrintMode;
25+
this._mediaPrintMode = msg.printerMedia?.mediaPrintMode ?? this._mediaPrintMode;
26+
this._printOrientation = msg.printerMedia?.printOrientation ?? this._printOrientation;
27+
this._mediaGapDetectMode = msg.printerMedia?.mediaGapDetectMode ?? this._mediaGapDetectMode;
28+
this._mediaPrintOriginOffsetDots = msg.printerMedia?.mediaPrintOriginOffsetDots ?? this._mediaPrintOriginOffsetDots;
29+
this._mediaGapDots = msg.printerMedia?.mediaGapDots ?? this._mediaGapDots;
30+
this._mediaLineOffsetDots = msg.printerMedia?.mediaLineOffsetDots ?? this._mediaLineOffsetDots;
31+
this._mediaWidthDots = msg.printerMedia?.mediaWidthDots ?? this._mediaWidthDots;
32+
this._mediaLengthDots = msg.printerMedia?.mediaLengthDots ?? this._mediaLengthDots;
33+
34+
this._backfeedAfterTaken = msg.printerSettings?.backfeedAfterTaken ?? this._backfeedAfterTaken;
3335
}
3436
}

src/Configs/BasePrinterConfig.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { MediaMediaGapDetectionMode, MediaPrintMode, PrintOrientation, PrintSpeed, PrintSpeedSettings, SpeedTable, ThermalPrintMode, type Coordinate, type DarknessPercent, type IPrinterHardware } from "./ConfigurationTypes.js";
1+
import { MediaMediaGapDetectionMode, MediaPrintMode, PrintOrientation, PrintSpeed, PrintSpeedSettings, SpeedTable, ThermalPrintMode, type BackfeedAfterTaken, type Coordinate, type DarknessPercent, type IPrinterHardware, type IPrinterMedia, type IPrinterSettings } from "./ConfigurationTypes.js";
22

3-
/** Configured options for a label printer */
4-
export abstract class BasePrinterConfig implements IPrinterHardware {
3+
/** Configured options for a printer */
4+
export abstract class BasePrinterConfig implements IPrinterHardware, IPrinterSettings, IPrinterMedia {
55

66
// Read-only printer config info
77
protected _serial = 'no_serial_nm';
@@ -19,8 +19,6 @@ export abstract class BasePrinterConfig implements IPrinterHardware {
1919
protected _firmware = '';
2020
get firmware() { return this._firmware; }
2121

22-
public labelDimensionRoundingStep = 0.25;
23-
2422
protected _speed = new PrintSpeedSettings(PrintSpeed.unknown);
2523
get speed() { return this._speed; }
2624

@@ -30,6 +28,9 @@ export abstract class BasePrinterConfig implements IPrinterHardware {
3028
protected _darkness: DarknessPercent = 50;
3129
get darknessPercent() { return this._darkness; }
3230

31+
protected _backfeedAfterTaken: BackfeedAfterTaken = '90';
32+
get backfeedAfterTaken() { return this._backfeedAfterTaken; }
33+
3334
protected _maxMediaDarkness = 15;
3435
get maxMediaDarkness() { return this._maxMediaDarkness; }
3536

@@ -39,6 +40,8 @@ export abstract class BasePrinterConfig implements IPrinterHardware {
3940
protected _mediaPrintMode = MediaPrintMode.tearOff;
4041
get mediaPrintMode() { return this._mediaPrintMode; }
4142

43+
public mediaDimensionRoundingStep = 0.25;
44+
4245
protected _printOrientation = PrintOrientation.normal;
4346
get printOrientation() { return this._printOrientation; }
4447

0 commit comments

Comments
 (0)