Index: chrome/browser/resources/print_preview/data/page_number_set.js |
diff --git a/chrome/browser/resources/print_preview/data/page_number_set.js b/chrome/browser/resources/print_preview/data/page_number_set.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cccb6bfbda0a1449ea9659683f22e5c10a547dee |
--- /dev/null |
+++ b/chrome/browser/resources/print_preview/data/page_number_set.js |
@@ -0,0 +1,105 @@ |
+// 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'; |
+ |
+ /** |
+ * An immutable ordered set of page numbers. |
+ * @param {!Array.<number>} pageNumberList A list of page numbers to include |
+ * in the set. |
+ * @constructor |
+ */ |
+ function PageNumberSet(pageNumberList) { |
+ /** |
+ * Internal data store for the page number set. |
+ * @type {!Array.<number>} |
+ * @private |
+ */ |
+ this.pageNumberSet_ = pageListToPageSet(pageNumberList); |
+ }; |
+ |
+ /** |
+ * @param {string} pageRangeStr String form of a page range. I.e. '2,3,4-5'. |
+ * If string is empty, all page numbers will be in the page number set. |
+ * @param {number} totalPageCount Total number of pages in the original |
+ * document. |
+ * @return {print_preview.PageNumberSet} Page number set parsed from the |
+ * given page range string and total page count. Null returned if |
+ * the given page range string is invalid. |
+ */ |
+ PageNumberSet.parse = function(pageRangeStr, totalPageCount) { |
+ if (pageRangeStr == '') { |
+ var pageNumberList = []; |
+ for (var i = 0; i < totalPageCount; i++) { |
+ pageNumberList.push(i + 1); |
+ } |
+ return new PageNumberSet(pageNumberList); |
+ } else { |
+ return isPageRangeTextValid(pageRangeStr, totalPageCount) ? |
+ new PageNumberSet( |
+ pageRangeTextToPageList(pageRangeStr, totalPageCount)) : null; |
+ } |
+ }; |
+ |
+ PageNumberSet.prototype = { |
+ /** @return {number} The number of page numbers in the set. */ |
+ get size() { |
+ return this.pageNumberSet_.length; |
+ }, |
+ |
+ /** |
+ * @param {number} index 0-based index of the page number to get. |
+ * @return {number} Page number at the given index. |
+ */ |
+ getPageNumberAt: function(index) { |
+ return this.pageNumberSet_[index]; |
+ }, |
+ |
+ /** |
+ * @param {number} 1-based page number to check for. |
+ * @return {boolean} Whether the given page number is in the page range. |
+ */ |
+ hasPageNumber: function(pageNumber) { |
+ return arrayContains(this.pageNumberSet_, pageNumber); |
+ }, |
+ |
+ /** |
+ * @param {number} 1-based number of the page to get index of. |
+ * @return {number} 0-based index of the given page number with respect to |
+ * all of the pages in the page range. |
+ */ |
+ getPageNumberIndex: function(pageNumber) { |
+ return this.pageNumberSet_.indexOf(pageNumber); |
+ }, |
+ |
+ /** |
+ * @return {!Array.<object.<{from: number, to: number}>>} A list of page |
+ * ranges suitable for use in the native layer. |
+ */ |
+ getPageRanges: function() { |
+ return pageSetToPageRanges(this.pageNumberSet_); |
+ }, |
+ |
+ /** @return {!Array.<number>} Array representation of the set. */ |
+ asArray: function() { |
+ return this.pageNumberSet_.slice(0); |
+ }, |
+ |
+ /** |
+ * @param {print_preview.PageNumberSet} other Page number set to compare |
+ * against. |
+ * @return {boolean} Whether another page number set is equal to this one. |
+ */ |
+ equals: function(other) { |
+ return other == null ? |
+ false : areArraysEqual(this.pageNumberSet_, other.pageNumberSet_); |
+ } |
+ }; |
+ |
+ // Export |
+ return { |
+ PageNumberSet: PageNumberSet |
+ }; |
+}); |