Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8284)

Unified Diff: chrome/browser/resources/print_preview/page_settings.js

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Resolve conflicts Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/print_preview/page_settings.js
diff --git a/chrome/browser/resources/print_preview/page_settings.js b/chrome/browser/resources/print_preview/page_settings.js
deleted file mode 100644
index b03306c1ecddf97184f285eee62a2321258c4675..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/print_preview/page_settings.js
+++ /dev/null
@@ -1,378 +0,0 @@
-// 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';
-
- /**
- * Creates a PageSettings object. This object encapsulates all settings and
- * logic related to page selection.
- * @constructor
- */
- function PageSettings() {
- this.allPagesRadioButton_ = $('all-pages');
- this.selectedPagesRadioButton_ = $('print-pages');
- this.selectedPagesTextfield_ = $('individual-pages');
- this.selectedPagesHint_ = $('individual-pages-hint');
-
- // Timer id of |this.selectedPagesTextfield|. It is used to reset the timer
- // whenever needed.
- this.timerId_;
-
- // Contains the previously selected pages (pages requested by last
- // preview request). It is used in
- // |this.onSelectedPagesMayHaveChanged_()| to make sure that a new preview
- // is not requested more often than necessary.
- this.previouslySelectedPages_ = [];
-
- // The total page count of the previewed document regardless of which pages
- // the user has selected.
- this.totalPageCount_ = undefined;
- this.addEventListeners_();
- }
-
- cr.addSingletonGetter(PageSettings);
-
- PageSettings.prototype = {
- /**
- * The text that is currently in |this.selectedPagesTextfield|.
- * @type {string}
- */
- get selectedPagesText() {
- return this.selectedPagesTextfield_.value;
- },
-
- /**
- * The radio button corresponding to "all pages selected".
- * @type {HTMLInputElement}
- */
- get allPagesRadioButton() {
- return this.allPagesRadioButton_;
- },
-
- /**
- * The radio button corresponding to "specific pages selected".
- * @type {HTMLInputElement}
- */
- get selectedPagesRadioButton() {
- return this.selectedPagesRadioButton_;
- },
-
- /**
- * The textfield containing page ranges as specified by the user.
- * @type {HTMLInputElement}
- */
- get selectedPagesTextfield() {
- return this.selectedPagesTextfield_;
- },
-
- /**
- * The span element containing the hint shown to the user when page
- * selection is not valid.
- * @type {HTMLElement}
- */
- get selectedPagesHint() {
- return this.selectedPagesHint_;
- },
-
- /**
- * The total page count of the previewed document regardless of which pages
- * the user has selected. If the total count is not known this value must
- * be undefined.
- * @type {number}
- */
- get totalPageCount() {
- return this.totalPageCount_;
- },
-
- /**
- * @param {number} count The number to assing to |this.totalPageCount_|.
- */
- set totalPageCount(count) {
- this.totalPageCount_ = count;
- },
-
- /**
- * Returns the selected pages in ascending order without any duplicates.
- *
- * @return {Array.<number>} The selected pages.
- */
- get selectedPagesSet() {
- var selectedPagesText = this.selectedPagesText;
-
- if (this.allPagesRadioButton.checked || selectedPagesText.length == 0)
- selectedPagesText = '1-' + this.totalPageCount_;
-
- var pageList = pageRangeTextToPageList(selectedPagesText,
- this.totalPageCount_);
- return pageListToPageSet(pageList);
- },
-
- /**
- * Returns the previously selected pages in ascending order without any
- * duplicates.
- *
- * @return {Array.<number>} The previously selected pages.
- */
- get previouslySelectedPages() {
- return this.previouslySelectedPages_;
- },
-
- /**
- * Returns an array of objects describing the selected page ranges. See
- * documentation of pageSetToPageRanges() for more details.
- * @return {Array.<{from: number, to: number}>} An array of page range
- * objects.
- */
- get selectedPageRanges() {
- return pageSetToPageRanges(this.selectedPagesSet);
- },
-
- /**
- * Invalidates |this.totalPageCount_| to indicate that the total number of
- * pages is not known.
- * @private
- */
- invalidateTotalPageCount_: function() {
- this.totalPageCount_ = undefined;
- },
-
- /**
- * Invlidates |this.previouslySelectedPages_| to indicate that this value
- * does no longer apply.
- * @private
- */
- invalidatePreviouslySelectedPages_: function() {
- this.previouslySelectedPages_.length = 0;
- },
-
- /**
- * Resets all the state variables of this object and hides
- * |this.selectedPagesHint|.
- */
- resetState: function() {
- this.selectedPagesTextfield.classList.remove('invalid');
- fadeOutElement(this.selectedPagesHint_);
- this.invalidateTotalPageCount_();
- this.invalidatePreviouslySelectedPages_();
- },
-
- /**
- * Updates |this.totalPageCount_| and |this.previouslySelectedPages_|,
- * only if they have been previously invalidated.
- * @param {number} newTotalPageCount The new total page count.
- */
- updateState: function(newTotalPageCount) {
- if (!this.totalPageCount_)
- this.totalPageCount_ = newTotalPageCount;
-
- if (this.previouslySelectedPages_.length == 0) {
- for (var i = 0; i < this.totalPageCount_; i++)
- this.previouslySelectedPages_.push(i + 1);
- }
-
- if (!this.isPageSelectionValid())
- this.onSelectedPagesTextfieldChanged();
- },
-
- /**
- * Updates |this.previouslySelectedPages_| with the currently selected
- * pages.
- */
- updatePageSelection: function() {
- this.previouslySelectedPages_ = this.selectedPagesSet;
- },
-
- /**
- * @private
- * @return {boolean} true if currently selected pages differ from
- * |this.previouslySelectesPages_|.
- */
- hasPageSelectionChanged_: function() {
- return !areArraysEqual(this.previouslySelectedPages_,
- this.selectedPagesSet);
- },
-
- /**
- * Checks if the page selection has changed and is valid.
- * @return {boolean} true if the page selection is changed and is valid.
- */
- hasPageSelectionChangedAndIsValid: function() {
- return this.isPageSelectionValid() && this.hasPageSelectionChanged_();
- },
-
- /**
- * Validates the contents of |this.selectedPagesTextfield|.
- *
- * @return {boolean} true if the text is valid.
- */
- isPageSelectionValid: function() {
- if (this.allPagesRadioButton_.checked ||
- this.selectedPagesText.length == 0) {
- return true;
- }
- return isPageRangeTextValid(this.selectedPagesText, this.totalPageCount_);
- },
-
- /**
- * Checks all page selection related settings and requests a new print
- * previw if needed.
- * @return {boolean} true if a new preview was requested.
- */
- requestPrintPreviewIfNeeded: function() {
- if (this.hasPageSelectionChangedAndIsValid()) {
- this.updatePageSelection();
- requestPrintPreview();
- return true;
- }
- if (!this.isPageSelectionValid())
- this.onSelectedPagesTextfieldChanged();
- return false;
- },
-
- /**
- * Validates the selected pages and updates the hint accordingly.
- * @private
- */
- validateSelectedPages_: function() {
- if (this.isPageSelectionValid()) {
- this.selectedPagesTextfield.classList.remove('invalid');
- fadeOutElement(this.selectedPagesHint_);
- this.selectedPagesHint.setAttribute('aria-hidden', 'true');
- } else {
- this.selectedPagesTextfield.classList.add('invalid');
- this.selectedPagesHint.classList.remove('suggestion');
- this.selectedPagesHint.setAttribute('aria-hidden', 'false');
- this.selectedPagesHint.innerHTML =
- localStrings.getStringF('pageRangeInstruction',
- localStrings.getString(
- 'examplePageRangeText'));
- fadeInElement(this.selectedPagesHint);
- }
- },
-
- /**
- * Executes whenever a blur event occurs on |this.selectedPagesTextfield|
- * or when the timer expires. It takes care of
- * 1) showing/hiding warnings/suggestions
- * 2) updating print button/summary
- */
- onSelectedPagesTextfieldChanged: function() {
- this.validateSelectedPages_();
- cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
- cr.dispatchSimpleEvent(document, customEvents.UPDATE_PRINT_BUTTON);
- },
-
- /**
- * When the user stops typing in |this.selectedPagesTextfield| or clicks on
- * |allPagesRadioButton|, a new print preview is requested, only if
- * 1) The input is compeletely valid (it can be parsed in its entirety).
- * 2) The newly selected pages differ from |this.previouslySelectedPages_|.
- * @private
- */
- onSelectedPagesMayHaveChanged_: function() {
- if (this.selectedPagesRadioButton_.checked)
- this.onSelectedPagesTextfieldChanged();
-
- // Toggling between "all pages"/"some pages" radio buttons while having an
- // invalid entry in the page selection textfield still requires updating
- // the print summary and print button.
- if (!this.isPageSelectionValid() || !this.hasPageSelectionChanged_()) {
- cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
- cr.dispatchSimpleEvent(document, customEvents.UPDATE_PRINT_BUTTON);
- return;
- }
- requestPrintPreview();
- },
-
- /**
- * Whenever |this.selectedPagesTextfield| gains focus we add a timer to
- * detect when the user stops typing in order to update the print preview.
- * @private
- */
- addTimerToSelectedPagesTextfield_: function() {
- this.timerId_ = window.setTimeout(
- this.onSelectedPagesMayHaveChanged_.bind(this), 1000);
- },
-
- /**
- * As the user types in |this.selectedPagesTextfield|, we need to reset
- * this timer, since the page ranges are still being edited.
- * @private
- */
- resetSelectedPagesTextfieldTimer_: function() {
- clearTimeout(this.timerId_);
- this.addTimerToSelectedPagesTextfield_();
- },
-
- /**
- * Handles the blur event of |this.selectedPagesTextfield|. Un-checks
- * |this.selectedPagesRadioButton| if the input field is empty.
- * @private
- */
- onSelectedPagesTextfieldBlur_: function() {
- clearTimeout(this.timerId_);
- if (!this.selectedPagesText.length) {
- this.allPagesRadioButton_.checked = true;
- this.validateSelectedPages_();
- }
- this.onSelectedPagesMayHaveChanged_();
- },
-
- /**
- * Gives focus to |this.selectedPagesTextfield| when
- * |this.selectedPagesRadioButton| is clicked.
- * @private
- */
- onSelectedPagesRadioButtonChecked_: function() {
- this.selectedPagesTextfield_.focus();
- },
-
- /**
- * Listener executing when an input event occurs in
- * |this.selectedPagesTextfield|. Ensures that
- * |this.selectedPagesTextfield| is non-empty before checking
- * |this.selectedPagesRadioButton|.
- * @private
- */
- onSelectedPagesTextfieldInput_: function() {
- if (this.selectedPagesText.length)
- this.selectedPagesRadioButton.checked = true;
- this.resetSelectedPagesTextfieldTimer_();
- },
-
- /**
- * Listener executing whenever a keyup events occurs in the pages textfield.
- * @param {!KeyboardEvent} e The event that triggered this listener.
- * @private
- */
- onKeyUp_: function(e) {
- if (e.keyIdentifier == 'Enter')
- printHeader.onPrintRequested();
- },
-
- /**
- * Adding listeners to all pages related controls. The listeners take care
- * of altering their behavior depending on |hasPendingPreviewRequest|.
- * @private
- */
- addEventListeners_: function() {
- this.allPagesRadioButton.onclick =
- this.onSelectedPagesMayHaveChanged_.bind(this);
- this.selectedPagesRadioButton.onclick =
- this.onSelectedPagesMayHaveChanged_.bind(this);
- this.selectedPagesTextfield.oninput =
- this.onSelectedPagesTextfieldInput_.bind(this);
- this.selectedPagesTextfield.onfocus =
- this.addTimerToSelectedPagesTextfield_.bind(this);
- this.selectedPagesTextfield.onblur =
- this.onSelectedPagesTextfieldBlur_.bind(this);
- this.selectedPagesTextfield.onkeyup = this.onKeyUp_.bind(this);
- }
- };
-
- return {
- PageSettings: PageSettings
- };
-});
« no previous file with comments | « chrome/browser/resources/print_preview/page_settings.html ('k') | chrome/browser/resources/print_preview/preview_area.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698