Index: chrome/browser/resources/print_preview/data/print_ticket_store.js |
diff --git a/chrome/browser/resources/print_preview/data/print_ticket_store.js b/chrome/browser/resources/print_preview/data/print_ticket_store.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e2007984514961e5b5f1d6827e253ce8b936f37b |
--- /dev/null |
+++ b/chrome/browser/resources/print_preview/data/print_ticket_store.js |
@@ -0,0 +1,629 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+cr.define('print_preview', function() { |
+ 'use strict'; |
+ |
+ // TODO(rltoscano): Maybe clear print ticket when destination changes. Or |
+ // better yet, carry over any print ticket state that is possible. I.e. if |
+ // destination changes, the new destination might not support duplex anymore, |
+ // so we should clear the ticket's isDuplexEnabled state. |
+ |
+ /** |
+ * Storage of the print ticket and document statistics. Dispatches events when |
+ * the contents of the print ticket or document statistics change. Also |
+ * handles validation of the print ticket against destination capabilities and |
+ * against the document. |
+ * @param {!print_preview.DestinationStore} destinationStore Used to |
+ * understand which printer is selected. |
+ * @constructor |
+ * @extends {cr.EventTarget} |
+ */ |
+ function PrintTicketStore(destinationStore) { |
+ cr.EventTarget.call(this); |
+ |
+ /** |
+ * Destination store used to understand which printer is selected. |
+ * @type {!print_preview.DestinationStore} |
+ * @private |
+ */ |
+ this.destinationStore_ = destinationStore; |
+ |
+ // Create the document info with some initial settings. Actual |
+ // page-related information won't be set until preview generation occurs, |
+ // so we'll use some defaults until then. This way, the print ticket store |
+ // will be valid even if no preview can be generated. |
+ var initialPageSize = new print_preview.Size(612, 792); // 8.5"x11" |
+ |
+ /** |
+ * Information about the document to print. |
+ * @type {!print_preview.DocumentInfo} |
+ * @private |
+ */ |
+ this.documentInfo_ = new print_preview.DocumentInfo(); |
+ this.documentInfo_.isModifiable = true; |
+ this.documentInfo_.pageCount = 1; |
+ this.documentInfo_.pageSize = initialPageSize; |
+ this.documentInfo_.printableArea = new print_preview.PrintableArea( |
+ new print_preview.Coordinate2d(0, 0), initialPageSize); |
+ |
+ /** |
+ * Printing capabilities of Chromium and the currently selected destination. |
+ * @type {!print_preview.CapabilitiesHolder} |
+ * @private |
+ */ |
+ this.capabilitiesHolder_ = new print_preview.CapabilitiesHolder(); |
+ |
+ /** |
+ * Current measurement system. Used to work with margin measurements. |
+ * @type {!print_preview.MeasurementSystem} |
+ * @private |
+ */ |
+ this.measurementSystem_ = new print_preview.MeasurementSystem( |
+ ',', '.', print_preview.MeasurementSystem.UnitType.IMPERIAL); |
+ |
+ /** |
+ * Collate ticket item. |
+ * @type {!print_preview.ticket_items.Collate} |
+ * @private |
+ */ |
+ this.collate_ = |
+ new print_preview.ticket_items.Collate(this.capabilitiesHolder_); |
+ |
+ /** |
+ * Color ticket item. |
+ * @type {!print_preview.ticket_items.Color} |
+ * @private |
+ */ |
+ this.color_ = new print_preview.ticket_items.Color( |
+ this.capabilitiesHolder_, this.destinationStore_); |
+ |
+ /** |
+ * Copies ticket item. |
+ * @type {!print_preview.ticket_items.Copies} |
+ * @private |
+ */ |
+ this.copies_ = |
+ new print_preview.ticket_items.Copies(this.capabilitiesHolder_); |
+ |
+ /** |
+ * Duplex ticket item. |
+ * @type {!print_preview.ticket_items.Duplex} |
+ * @private |
+ */ |
+ this.duplex_ = |
+ new print_preview.ticket_items.Duplex(this.capabilitiesHolder_); |
+ |
+ /** |
+ * Landscape ticket item. |
+ * @type {!print_preview.ticket_items.Landscape} |
+ * @private |
+ */ |
+ this.landscape_ = new print_preview.ticket_items.Landscape( |
+ this.capabilitiesHolder_, this.documentInfo_); |
+ |
+ /** |
+ * Page range ticket item. |
+ * @type {!print_preview.ticket_items.PageRange} |
+ * @private |
+ */ |
+ this.pageRange_ = |
+ new print_preview.ticket_items.PageRange(this.documentInfo_); |
+ |
+ /** |
+ * Margins type ticket item. |
+ * @type {!print_preview.ticket_items.MarginsType} |
+ * @private |
+ */ |
+ this.marginsType_ = |
+ new print_preview.ticket_items.MarginsType(this.documentInfo_); |
+ |
+ /** |
+ * Custom margins ticket item. |
+ * @type {!print_preview.ticket_items.CustomMargins} |
+ * @private |
+ */ |
+ this.customMargins_ = new print_preview.ticket_items.CustomMargins( |
+ this.documentInfo_, this.measurementSystem_); |
+ |
+ /** |
+ * Header-footer ticket item. |
+ * @type {!print_preview.ticket_items.HeaderFooter} |
+ * @private |
+ */ |
+ this.headerFooter_ = new print_preview.ticket_items.HeaderFooter( |
+ this.documentInfo_, this.marginsType_, this.customMargins_); |
+ |
+ /** |
+ * Fit-to-page ticket item. |
+ * @type {!print_preview.ticket_items.FitToPage} |
+ * @private |
+ */ |
+ this.fitToPage_ = new print_preview.ticket_items.FitToPage( |
+ this.documentInfo_, this.destinationStore_); |
+ }; |
+ |
+ /** |
+ * Event types dispatched by the print ticket store. |
+ * @enum {string} |
+ */ |
+ PrintTicketStore.EventType = { |
+ CAPABILITIES_CHANGE: 'print_preview.PrintTicketStore.CAPABILITIES_CHANGE', |
+ DOCUMENT_CHANGE: 'print_preview.PrintTicketStore.DOCUMENT_CHANGE', |
+ INITIALIZE: 'print_preview.PrintTicketStore.INITIALIZE', |
+ TICKET_CHANGE: 'print_preview.PrintTicketStore.TICKET_CHANGE' |
+ }; |
+ |
+ PrintTicketStore.prototype = { |
+ __proto__: cr.EventTarget.prototype, |
+ |
+ /** @return {boolean} Whether the document is modifiable. */ |
+ get isDocumentModifiable() { |
+ return this.documentInfo_.isModifiable; |
+ }, |
+ |
+ /** @return {number} Number of pages in the document. */ |
+ get pageCount() { |
+ return this.documentInfo_.pageCount; |
+ }, |
+ |
+ /** |
+ * @param {number} pageCount New number of pages in the document. |
+ * Dispatches a DOCUMENT_CHANGE event if the value changes. |
+ */ |
+ updatePageCount: function(pageCount) { |
+ if (this.documentInfo_.pageCount != pageCount) { |
+ this.documentInfo_.pageCount = pageCount; |
+ cr.dispatchSimpleEvent( |
+ this, PrintTicketStore.EventType.DOCUMENT_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * @return {!print_preview.PrintableArea} Printable area of the document in |
+ * points. |
+ */ |
+ get printableArea() { |
+ return this.documentInfo_.printableArea; |
+ }, |
+ |
+ /** @return {!print_preview.Size} Size of the document in points. */ |
+ get pageSize() { |
+ return this.documentInfo_.pageSize; |
+ }, |
+ |
+ /** |
+ * Updates a subset of fields of the print document relating to the format |
+ * of the page. |
+ * @param {!print_preview.PrintableArea} printableArea New printable area of |
+ * the document in points. Dispatches a DOCUMENT_CHANGE event if the |
+ * value changes. |
+ * @param {!print_preview.Size} pageSize New size of the document in points. |
+ * Dispatches a DOCUMENT_CHANGE event if the value changes. |
+ * @param {boolean} documentHasCssMediaStyles Whether the document is styled |
+ * with CSS media styles. |
+ * @param {!print_preview.Margins} margins Document margins in points. |
+ */ |
+ updateDocumentPageInfo: function( |
+ printableArea, pageSize, documentHasCssMediaStyles, margins) { |
+ if (!this.documentInfo_.printableArea.equals(printableArea) || |
+ !this.documentInfo_.pageSize.equals(pageSize) || |
+ this.documentInfo_.hasCssMediaStyles != documentHasCssMediaStyles || |
+ this.documentInfo_.margins == null || |
+ !this.documentInfo_.margins.equals(margins)) { |
+ this.documentInfo_.printableArea = printableArea; |
+ this.documentInfo_.pageSize = pageSize; |
+ this.documentInfo_.hasCssMediaStyles = documentHasCssMediaStyles; |
+ this.documentInfo_.margins = margins; |
+ cr.dispatchSimpleEvent( |
+ this, PrintTicketStore.EventType.DOCUMENT_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * @return {!print_preview.MeasurementSystem} Measurement system of the |
+ * local system. |
+ */ |
+ get measurementSystem() { |
+ return this.measurementSystem_; |
+ }, |
+ |
+ /** |
+ * @return {print_preview.Margins} Document margins of the currently |
+ * generated preview. |
+ */ |
+ getDocumentMargins: function() { |
+ return this.documentInfo_.margins; |
+ }, |
+ |
+ /** |
+ * Initializes the print ticket store. Dispatches an INITIALIZE event. |
+ * @param {boolean} isDocumentModifiable Whether the document to print is |
+ * modifiable (i.e. can be re-flowed by Chromium). |
+ * @param {?boolean} isDuplexEnabled Previous duplex setting. |
+ * @param {?boolean} isHeaderFooterEnabled Previous header-footer setting. |
+ * @param {?print_preview.ticket_items.MarginsType.Value} marginsType |
+ * Previous margins type. |
+ * @param {print_preview.Margins} customMargins Previous custom margins. |
+ * @param {string} thousandsDelimeter Delimeter of the thousands place. |
+ * @param {string} decimalDelimeter Delimeter of the decimal point. |
+ * @param {print_preview.MeasurementSystem.UnitType} unitType Type of unit |
+ * of the local measurement system. |
+ */ |
+ initialize: function( |
+ isDocumentModifiable, |
+ isDuplexEnabled, |
+ isHeaderFooterEnabled, |
+ marginsType, |
+ customMargins, |
+ thousandsDelimeter, |
+ decimalDelimeter, |
+ unitType) { |
+ |
+ this.documentInfo_.isModifiable = isDocumentModifiable; |
+ this.measurementSystem_.setSystem( |
+ thousandsDelimeter, decimalDelimeter, unitType); |
+ |
+ // Initialize ticket with user's previous values. |
+ this.duplex_.updateValue(isDuplexEnabled); |
+ this.headerFooter_.updateValue(isHeaderFooterEnabled); |
+ if (marginsType != null) { |
+ this.marginsType_.updateValue(marginsType); |
+ } |
+ if (customMargins != null) { |
+ this.customMargins_.updateValue(customMargins); |
+ } |
+ }, |
+ |
+ /** |
+ * Updates the capabilities of the destination the print ticket is for. |
+ * Dispatches a CAPABILITIES_CHANGE event. |
+ * @param {!print_preview.ChromiumCapabilities} caps New capabilities. |
+ */ |
+ updateDestinationCapabilities: function(caps) { |
+ var isFirstUpdate = this.capabilitiesHolder_.get() == null; |
+ this.capabilitiesHolder_.set(caps); |
+ if (isFirstUpdate) { |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.INITIALIZE); |
+ } else { |
+ this.customMargins_.updateValue(null); |
+ if (this.marginsType_.getValue() == |
+ print_preview.ticket_items.MarginsType.Value.CUSTOM) { |
+ this.marginsType_.updateValue( |
+ print_preview.ticket_items.MarginsType.Value.DEFAULT); |
+ } |
+ cr.dispatchSimpleEvent( |
+ this, PrintTicketStore.EventType.CAPABILITIES_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the ticket store has the copies capability. */ |
+ hasCopiesCapability: function() { |
+ return this.copies_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** |
+ * @return {boolean} Whether the string representation of the copies value |
+ * currently in the ticket store is valid. |
+ */ |
+ isCopiesValid: function() { |
+ return this.copies_.isValid(); |
+ }, |
+ |
+ isCopiesValidForValue: function(value) { |
+ return this.copies_.wouldValueBeValid(value); |
+ }, |
+ |
+ /** @return {number} Number of copies to print. */ |
+ getCopies: function() { |
+ return this.copies_.getValueAsNumber(); |
+ }, |
+ |
+ /** |
+ * @return {string} String representation of the number of copies to print. |
+ */ |
+ getCopiesStr: function() { |
+ return this.copies_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates the string representation of the number of copies to print. |
+ * Dispatches a TICKET_CHANGE event if the string value has changed. |
+ * @param {string} New string representation of the number of copies to |
+ * print. |
+ */ |
+ updateCopies: function(copies) { |
+ if (this.copies_.getValue() != copies) { |
+ this.copies_.updateValue(copies); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the ticket store has a collate capability. */ |
+ hasCollateCapability: function() { |
+ return this.collate_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** @return {boolean} Whether collate is enabled. */ |
+ isCollateEnabled: function() { |
+ return this.collate_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates whether collate is enabled. Dispatches a TICKET_CHANGE event if |
+ * collate has changed. |
+ * @param {boolean} isCollateEnabled Whether collate is enabled. |
+ */ |
+ updateCollate: function(isCollateEnabled) { |
+ if (this.collate_.getValue() != isCollateEnabled) { |
+ this.collate_.updateValue(isCollateEnabled); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * @return {boolean} Whether the ticket store has color printing capability. |
+ */ |
+ hasColorCapability: function() { |
+ return this.color_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** @return {boolean} Whether color printing is enabled. */ |
+ isColorEnabled: function() { |
+ return this.color_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates whether color printing is enabled. Dispatches a TICKET_CHANGE if |
+ * color has changed. |
+ * @param {boolean} isColorEnabled Whether the color printing is enabled. |
+ */ |
+ updateColor: function(isColorEnabled) { |
+ if (this.color_.getValue() != isColorEnabled) { |
+ this.color_.updateValue(isColorEnabled); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the header-footer capability is available. */ |
+ hasHeaderFooterCapability: function() { |
+ return this.headerFooter_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** @return {boolean} Whether the header-footer setting is enabled. */ |
+ isHeaderFooterEnabled: function() { |
+ return this.headerFooter_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates the whether the header-footer setting is enabled. Dispatches a |
+ * TICKET_CHANGE event if the setting changed. |
+ * @param {boolean} isHeaderFooterEnabled Whether the header-footer setting |
+ * is enabled. |
+ */ |
+ updateHeaderFooter: function(isHeaderFooterEnabled) { |
+ if (this.headerFooter_.getValue() != isHeaderFooterEnabled) { |
+ this.headerFooter_.updateValue(isHeaderFooterEnabled); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * @return {boolean} Whether the page orientation capability is available. |
+ */ |
+ hasOrientationCapability: function() { |
+ return this.landscape_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** |
+ * @return {boolean} Whether the document should be printed in landscape. |
+ */ |
+ isLandscapeEnabled: function() { |
+ return this.landscape_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates whether the document should be printed in landscape. Dispatches |
+ * a TICKET_CHANGE event if the setting changes. |
+ * @param {boolean} isLandscapeEnabled Whether the document should be |
+ * printed in landscape. |
+ */ |
+ updateOrientation: function(isLandscapeEnabled) { |
+ if (this.landscape_.getValue() != isLandscapeEnabled) { |
+ this.landscape_.updateValue(isLandscapeEnabled); |
+ // Reset the user set margins. |
+ this.marginsType_.updateValue( |
+ print_preview.ticket_items.MarginsType.Value.DEFAULT); |
+ this.customMargins_.updateValue(null); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the duplexing capability is available. */ |
+ hasDuplexCapability: function() { |
+ return this.duplex_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** @return {boolean} Whether the document should be printed in duplex. */ |
+ isDuplexEnabled: function() { |
+ return this.duplex_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates the duplexing setting. Dispatches a TICKET_CHANGE event if the |
+ * value changes. |
+ * @param {boolean} isDuplexEnabled Whether the document should be printed |
+ * in duplex. |
+ */ |
+ updateDuplex: function(isDuplexEnabled) { |
+ if (this.duplex_.getValue() != isDuplexEnabled) { |
+ this.duplex_.updateValue(isDuplexEnabled); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the margins capability is available. */ |
+ hasMarginsCapability: function() { |
+ return this.marginsType_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** |
+ * @return {print_preview.ticket_items.MarginsType.Value} Type of predefined |
+ * margins. |
+ */ |
+ getMarginsType: function() { |
+ return this.marginsType_.getValue(); |
+ }, |
+ |
+ /** |
+ * Updates the type of predefined margins. Dispatches a TICKET_CHANGE event |
+ * if the margins type changes. |
+ * @param {print_preview.ticket_items.MarginsType.Value} marginsType Type of |
+ * predefined margins. |
+ */ |
+ updateMarginsType: function(marginsType) { |
+ if (this.marginsType_.getValue() != marginsType) { |
+ this.marginsType_.updateValue(marginsType); |
+ if (marginsType == |
+ print_preview.ticket_items.MarginsType.Value.CUSTOM) { |
+ // If CUSTOM, set the value of the custom margins so that it won't be |
+ // overridden by the default value. |
+ this.customMargins_.updateValue(this.customMargins_.getValue()); |
+ } |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether all of the custom margins are valid. */ |
+ isCustomMarginsValid: function() { |
+ return this.customMargins_.isValid(); |
+ }, |
+ |
+ /** |
+ * @return {!print_preview.Margins} Custom margins of the document in |
+ * points. |
+ */ |
+ getCustomMargins: function() { |
+ return this.customMargins_.getValue(); |
+ }, |
+ |
+ /** |
+ * @param {print_preview.ticket_items.CustomMargins.Orientation} orientation |
+ * Specifies the margin to get the maximum value for. |
+ * @return {number} Maximum value in points of the specified margin. |
+ */ |
+ getCustomMarginMax: function(orientation) { |
+ return this.customMargins_.getMarginMax(orientation); |
+ }, |
+ |
+ /** |
+ * Updates the custom margins of the document. Dispatches a TICKET_CHANGE |
+ * event if the margins have changed. |
+ * @param {!print_preview.Margins} margins New document page margins in |
+ * points. |
+ */ |
+ updateCustomMargins: function(margins) { |
+ if (!this.isCustomMarginsValid() || |
+ !margins.equals(this.getCustomMargins())) { |
+ this.customMargins_.updateValue(margins); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * Updates a single custom margin's value in points. |
+ * @param {print_preview.ticket_items.CustomMargins.Orientation} orientation |
+ * Specifies the margin to update. |
+ * @param {number} value Updated margin in points. |
+ */ |
+ updateCustomMargin: function(orientation, value) { |
+ if (this.customMargins_.getValue().get(orientation) != value) { |
+ this.customMargins_.updateMargin(orientation, value); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the page range capability is available. */ |
+ hasPageRangeCapability: function() { |
+ return this.pageRange_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** |
+ * @return {boolean} Whether the current page range string is defines a |
+ * valid page number set. |
+ */ |
+ isPageRangeValid: function() { |
+ return this.pageRange_.isValid(); |
+ }, |
+ |
+ /** @return {string} String representation of the page range. */ |
+ getPageRangeStr: function() { |
+ return this.pageRange_.getValue(); |
+ }, |
+ |
+ /** |
+ * @return {!print_preview.PageNumberSet} Page number set specified by the |
+ * string representation of the page range string. |
+ */ |
+ getPageNumberSet: function() { |
+ return this.pageRange_.getPageNumberSet(); |
+ }, |
+ |
+ /** |
+ * Updates the page range string. Dispatches a TICKET_CHANGE if the string |
+ * changed. |
+ * @param {string} pageRangeStr New page range string. |
+ */ |
+ updatePageRange: function(pageRangeStr) { |
+ if (this.pageRange_.getValue() != pageRangeStr) { |
+ this.pageRange_.updateValue(pageRangeStr); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** @return {boolean} Whether the fit-to-page capability is available. */ |
+ hasFitToPageCapability: function() { |
+ return this.fitToPage_.isCapabilityAvailable(); |
+ }, |
+ |
+ /** @return {boolean} Whether the fit-to-page capability is enabled. */ |
+ isFitToPageEnabled: function() { |
+ return this.fitToPage_.getValue(); |
+ }, |
+ |
+ /** |
+ * @param {boolean} isFitToPageEnabled Whether to enable the fit-to-page |
+ * capability. |
+ */ |
+ updateFitToPage: function(isFitToPageEnabled) { |
+ if (this.fitToPage_.getValue() != isFitToPageEnabled) { |
+ this.fitToPage_.updateValue(isFitToPageEnabled); |
+ cr.dispatchSimpleEvent(this, PrintTicketStore.EventType.TICKET_CHANGE); |
+ } |
+ }, |
+ |
+ /** |
+ * @return {boolean} {@code true} if the stored print ticket is valid, |
+ * {@code false} otherwise. |
+ */ |
+ isTicketValid: function() { |
+ return this.isTicketValidForPreview() && |
+ (!this.hasPageRangeCapability() || this.isPageRangeValid()); |
+ }, |
+ |
+ /** @return {boolean} Whether the ticket is valid for preview generation. */ |
+ isTicketValidForPreview: function() { |
+ return (!this.hasCopiesCapability() || this.isCopiesValid()) && |
+ (!this.hasMarginsCapability() || |
+ this.getMarginsType() != |
+ print_preview.ticket_items.MarginsType.Value.CUSTOM || |
+ this.isCustomMarginsValid()); |
+ } |
+ }; |
+ |
+ // Export |
+ return { |
+ PrintTicketStore: PrintTicketStore |
+ }; |
+}); |