Index: chrome/browser/resources/print_preview.js |
diff --git a/chrome/browser/resources/print_preview.js b/chrome/browser/resources/print_preview.js |
index 8dedff6a2210a1c37482c35308b916400dabb8ab..1146381d2952bb67d9697c219a50777b41469b81 100644 |
--- a/chrome/browser/resources/print_preview.js |
+++ b/chrome/browser/resources/print_preview.js |
@@ -260,21 +260,8 @@ function updateWithPrinterCapabilities(settingInfo) { |
* @return {boolean} true if the number of copies is valid else returns false. |
*/ |
function isNumberOfCopiesValid() { |
- var copiesFieldText = $('copies').value.replace(/\s/g, ''); |
- if (copiesFieldText == '') |
- return true; |
- |
- return (isInteger(copiesFieldText) && Number(copiesFieldText) > 0); |
-} |
- |
-/** |
- * Returns true if |toTest| contains only digits. Leading and trailing |
- * whitespace is allowed. |
- * @param {string} toTest The string to be tested. |
- */ |
-function isInteger(toTest) { |
- var numericExp = /^\s*[0-9]+\s*$/; |
- return numericExp.test(toTest); |
+ var copiesFieldText = $('copies').value; |
+ return copiesFieldText == '' ? true : isPositiveInteger(copiesFieldText); |
} |
/** |
@@ -348,15 +335,16 @@ function getSettingsJSON() { |
var deviceName = getSelectedPrinterName(); |
var printToPDF = (deviceName == PRINT_TO_PDF); |
- return JSON.stringify({'deviceName': deviceName, |
- 'pageRange': getSelectedPageRanges(), |
- 'printAll': printAll, |
- 'duplex': getDuplexMode(), |
- 'copies': getCopies(), |
- 'collate': isCollated(), |
- 'landscape': isLandscape(), |
- 'color': isColor(), |
- 'printToPDF': printToPDF}); |
+ return JSON.stringify( |
+ {'deviceName': deviceName, |
+ 'pageRange': pageSetToPageRanges(getSelectedPagesSet()), |
+ 'printAll': printAll, |
+ 'duplex': getDuplexMode(), |
+ 'copies': getCopies(), |
+ 'collate': isCollated(), |
+ 'landscape': isLandscape(), |
+ 'color': isColor(), |
+ 'printToPDF': printToPDF}); |
} |
/** |
@@ -635,9 +623,8 @@ function updatePrintPreview(pageCount, jobTitle, modifiable, previewUid) { |
*/ |
function createPDFPlugin(previewUid) { |
// Enable the print button. |
- if (!$('printer-list').disabled) { |
+ if (!$('printer-list').disabled) |
$('print-button').disabled = false; |
- } |
var pdfViewer = $('pdf-viewer'); |
if (pdfViewer) { |
@@ -650,15 +637,14 @@ function createPDFPlugin(previewUid) { |
return; |
} |
- var pdfPlugin = document.createElement('embed'); |
- pdfPlugin.setAttribute('id', 'pdf-viewer'); |
- pdfPlugin.setAttribute('type', 'application/pdf'); |
- pdfPlugin.setAttribute('src', 'chrome://print/' + previewUid + '/print.pdf'); |
- var mainView = $('mainview'); |
- mainView.appendChild(pdfPlugin); |
- pdfPlugin.onload('onPDFLoad()'); |
- pdfPlugin.removePrintButton(); |
- pdfPlugin.grayscale(true); |
+ pdfViewer = document.createElement('embed'); |
+ pdfViewer.setAttribute('id', 'pdf-viewer'); |
+ pdfViewer.setAttribute('type', 'application/pdf'); |
+ pdfViewer.setAttribute('src', 'chrome://print/' + previewUid + '/print.pdf'); |
+ $('mainview').appendChild(pdfViewer); |
+ pdfViewer.onload('onPDFLoad()'); |
+ pdfViewer.removePrintButton(); |
+ pdfViewer.grayscale(true); |
} |
/** |
@@ -771,8 +757,8 @@ function updatePrintSummary() { |
return; |
} |
- var pageList = getSelectedPagesSet(); |
- var numOfSheets = pageList.length; |
+ var pageSet = getSelectedPagesSet(); |
+ var numOfSheets = pageSet.length; |
var sheetsLabel = localStrings.getString('printPreviewSheetsLabelSingular'); |
var numOfPagesText = ''; |
var pagesLabel = ''; |
@@ -785,8 +771,8 @@ function updatePrintSummary() { |
sheetsLabel = localStrings.getString('printPreviewSheetsLabelPlural'); |
var html = ''; |
- if (pageList.length * copies != numOfSheets) { |
- numOfPagesText = pageList.length * copies; |
+ if (pageSet.length * copies != numOfSheets) { |
+ numOfPagesText = pageSet.length * copies; |
pagesLabel = localStrings.getString('printPreviewPageLabelPlural'); |
html = localStrings.getStringF('printPreviewSummaryFormatLong', |
'<b>' + numOfSheets + '</b>', |
@@ -843,44 +829,18 @@ function setDefaultValuesAndRegeneratePreview() { |
} |
/** |
- * Returns a list of all pages in the specified ranges. The pages are listed in |
- * the order they appear in the 'individual-pages' textbox and duplicates are |
- * not eliminated. If the page ranges can't be parsed an empty list is |
- * returned. |
+ * Returns the selected pages in ascending order without any duplicates. |
* |
* @return {Array} |
*/ |
-function getSelectedPages() { |
- var pageText = $('individual-pages').value; |
- |
- if ($('all-pages').checked || pageText.length == 0) |
- pageText = '1-' + totalPageCount; |
- |
- var pageList = []; |
- var parts = pageText.split(/,/); |
- |
- for (var i = 0; i < parts.length; ++i) { |
- var part = parts[i]; |
- var match = part.match(/^\s*([0-9]+)\s*-\s*([0-9]*)\s*$/); |
- |
- if (match && match[1]) { |
- var from = parseInt(match[1], 10); |
- var to = match[2] ? parseInt(match[2], 10) : totalPageCount; |
- |
- if (from && to) { |
- for (var j = from; j <= to; ++j) |
- if (j <= totalPageCount) |
- pageList.push(j); |
- } |
- } else { |
- var singlePageNumber = parseInt(part, 10); |
- if (singlePageNumber && singlePageNumber > 0 && |
- singlePageNumber <= totalPageCount) { |
- pageList.push(parseInt(part, 10)); |
- } |
- } |
- } |
- return pageList; |
+function getSelectedPagesSet() { |
+ var pageRangeText = $('individual-pages').value; |
+ |
+ if ($('all-pages').checked || pageRangeText.length == 0) |
+ pageRangeText = '1-' + totalPageCount; |
+ |
+ var pageList = pageRangeTextToPageList(pageRangeText, totalPageCount); |
+ return pageListToPageSet(pageList); |
} |
/** |
@@ -889,94 +849,12 @@ function getSelectedPages() { |
* @return {boolean} true if the text is valid. |
*/ |
function isSelectedPagesValid() { |
- var pageText = $('individual-pages').value; |
+ var pageRangeText = $('individual-pages').value; |
- if ($('all-pages').checked || pageText.length == 0) |
+ if ($('all-pages').checked || pageRangeText.length == 0) |
return true; |
- var successfullyParsed = 0; |
- var parts = pageText.split(/,/); |
- |
- for (var i = 0; i < parts.length; ++i) { |
- var part = parts[i].replace(/\s*/g, ''); |
- if (part.length == 0) |
- continue; |
- |
- var match = part.match(/^([0-9]+)-([0-9]*)$/); |
- if (match && isValidNonZeroPositiveInteger(match[1])) { |
- if (!match[2] && totalPageCount == -1) { |
- successfullyParsed += 1; |
- continue; |
- } |
- var from = parseInt(match[1], 10); |
- var to = match[2] ? parseInt(match[2], 10) : totalPageCount; |
- |
- if (!to || from > to) |
- return false; |
- } else if (!isValidNonZeroPositiveInteger(part) || (totalPageCount != -1 && |
- !(parseInt(part, 10) <= totalPageCount))) { |
- return false; |
- } |
- successfullyParsed += 1; |
- } |
- return successfullyParsed > 0 |
-} |
- |
-/** |
- * Returns true if |value| is a valid non zero positive integer. |
- * @param {string} value The string to be tested. |
- */ |
-function isValidNonZeroPositiveInteger(value) { |
- return isInteger(value) && parseInt(value, 10) > 0; |
-} |
- |
-/** |
- * Parses the selected page ranges, processes them and returns the results. |
- * It squashes whenever possible. Example '1-2,3,5-7' becomes 1-3,5-7 |
- * |
- * @return {Array} an array of page range objects. A page range object has |
- * fields 'from' and 'to'. |
- */ |
-function getSelectedPageRanges() { |
- var pageList = getSelectedPagesSet(); |
- var pageRanges = []; |
- for (var i = 0; i < pageList.length; ++i) { |
- tempFrom = pageList[i]; |
- while (i + 1 < pageList.length && pageList[i + 1] == pageList[i] + 1) |
- ++i; |
- tempTo = pageList[i]; |
- pageRanges.push({'from': tempFrom, 'to': tempTo}); |
- } |
- return pageRanges; |
-} |
- |
-/** |
- * Returns the selected pages in ascending order without any duplicates. |
- */ |
-function getSelectedPagesSet() { |
- var pageList = getSelectedPages(); |
- pageList.sort(function(a,b) { return a - b; }); |
- pageList = removeDuplicates(pageList); |
- return pageList; |
-} |
- |
-/** |
- * Removes duplicate elements from |inArray| and returns a new array. |
- * |inArray| is not affected. It assumes that the array is already sorted. |
- * |
- * @param {Array} inArray The array to be processed. |
- */ |
-function removeDuplicates(inArray) { |
- var out = []; |
- |
- if(inArray.length == 0) |
- return out; |
- |
- out.push(inArray[0]); |
- for (var i = 1; i < inArray.length; ++i) |
- if(inArray[i] != inArray[i - 1]) |
- out.push(inArray[i]); |
- return out; |
+ return isPageRangeTextValid(pageRangeText, totalPageCount); |
} |
/** |
@@ -1022,18 +900,6 @@ function onPageSelectionMayHaveChanged() { |
} |
/** |
- * Returns true if the contents of the two arrays are equal. |
- */ |
-function areArraysEqual(array1, array2) { |
- if (array1.length != array2.length) |
- return false; |
- for (var i = 0; i < array1.length; i++) |
- if(array1[i] != array2[i]) |
- return false; |
- return true; |
-} |
- |
-/** |
* Executed when the 'increment' or 'decrement' button is clicked. |
*/ |
function onCopiesButtonsClicked(sign) { |