blob: c7f3a37fb58fbc24f7c247fa2db982dd3a15bcf1 [file] [log] [blame]
// Copyright (c) 2016 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.ticket_items', function() {
'use strict';
/**
* Scaling ticket item whose value is a {@code string} that indicates what the
* scaling (in percent) of the document should be. The ticket item is backed
* by a string since the user can textually input the scaling value.
* @param {!print_preview.AppState} appState App state to persist item value.
* @param {!print_preview.DocumentInfo} documentInfo Information about the
* document to print.
* @param {!print_preview.DestinationStore} destinationStore Used to determine
* whether fit to page should be available.
* @constructor
* @extends {print_preview.ticket_items.TicketItem}
*/
function Scaling(appState, destinationStore, documentInfo) {
print_preview.ticket_items.TicketItem.call(
this,
appState,
print_preview.AppState.Field.SCALING,
destinationStore,
documentInfo);
};
/**
* Maximum scaling percentage
* @private {number}
* @const
*/
Scaling.MAX_VAL = 200;
/**
* Minimum scaling percentage
* @private {number}
* @const
*/
Scaling.MIN_VAL = 10;
Scaling.prototype = {
__proto__: print_preview.ticket_items.TicketItem.prototype,
/** @override */
wouldValueBeValid: function(value) {
if (/[^\d]+/.test(value)) {
return false;
}
var scaling = parseInt(value, 10);
return scaling >= Scaling.MIN_VAL && scaling <= Scaling.MAX_VAL;
},
/** @override */
isValueEqual: function(value) {
return this.getValueAsNumber() == value;
},
/**
* @param {number} The desired scaling percentage.
* @return {number} Nearest valid scaling percentage
*/
getNearestValidValue: function(value) {
return Math.min(Math.max(value, Scaling.MIN_VAL), Scaling.MAX_VAL);
},
/** @override */
isCapabilityAvailable: function() {
// This is not a function of the printer, but should be disabled if we are
// saving a PDF to a PDF.
var knownSizeToSaveAsPdf =
(!this.getDocumentInfoInternal().isModifiable ||
this.getDocumentInfoInternal().hasCssMediaStyles) &&
this.getSelectedDestInternal() &&
this.getSelectedDestInternal().id ==
print_preview.Destination.GooglePromotedId.SAVE_AS_PDF;
return !knownSizeToSaveAsPdf;
},
/** @return {number} The scaling percentage indicated by the ticket item. */
getValueAsNumber: function() {
return parseInt(this.getValue(), 10);
},
/** @override */
getDefaultValueInternal: function() {
return '100';
},
/** @override */
getCapabilityNotAvailableValueInternal: function() {
return '100';
},
};
// Export
return {
Scaling: Scaling
};
});