Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var localStrings = new LocalStrings(); | 5 var localStrings = new LocalStrings(); |
| 6 | 6 |
| 7 // The total page count of the previewed document regardless of which pages the | 7 // The total page count of the previewed document regardless of which pages the |
| 8 // user has selected. | 8 // user has selected. |
| 9 var totalPageCount = -1; | 9 var totalPageCount = -1; |
| 10 | 10 |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 503 if (previouslySelectedPages.length == 0) | 503 if (previouslySelectedPages.length == 0) |
| 504 for (var i = 0; i < totalPageCount; i++) | 504 for (var i = 0; i < totalPageCount; i++) |
| 505 previouslySelectedPages.push(i+1); | 505 previouslySelectedPages.push(i+1); |
| 506 | 506 |
| 507 if (printSettings.deviceName != tempPrintSettings.deviceName) { | 507 if (printSettings.deviceName != tempPrintSettings.deviceName) { |
| 508 updateControlsWithSelectedPrinterCapabilities(); | 508 updateControlsWithSelectedPrinterCapabilities(); |
| 509 return; | 509 return; |
| 510 } else if (printSettings.isLandscape != tempPrintSettings.isLandscape) { | 510 } else if (printSettings.isLandscape != tempPrintSettings.isLandscape) { |
| 511 setDefaultValuesAndRegeneratePreview(); | 511 setDefaultValuesAndRegeneratePreview(); |
| 512 return; | 512 return; |
| 513 } else if (getSelectedPagesValidityLevel() == 1) { | 513 } else if (isSelectedPagesValid()) { |
| 514 var currentlySelectedPages = getSelectedPagesSet(); | 514 var currentlySelectedPages = getSelectedPagesSet(); |
| 515 if (!areArraysEqual(previouslySelectedPages, currentlySelectedPages)) { | 515 if (!areArraysEqual(previouslySelectedPages, currentlySelectedPages)) { |
| 516 previouslySelectedPages = currentlySelectedPages; | 516 previouslySelectedPages = currentlySelectedPages; |
| 517 requestPrintPreview(); | 517 requestPrintPreview(); |
| 518 return; | 518 return; |
| 519 } | 519 } |
| 520 } | 520 } |
| 521 | 521 |
| 522 if (getSelectedPagesValidityLevel() != 1) | 522 if (!isSelectedPagesValid()) |
| 523 pageRangesFieldChanged(); | 523 pageRangesFieldChanged(); |
| 524 | 524 |
| 525 // Update the current tab title. | 525 // Update the current tab title. |
| 526 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle); | 526 document.title = localStrings.getStringF('printPreviewTitleFormat', jobTitle); |
| 527 | 527 |
| 528 createPDFPlugin(previewUid); | 528 createPDFPlugin(previewUid); |
| 529 updatePrintSummary(); | 529 updatePrintSummary(); |
| 530 updatePrintButtonState(); | 530 updatePrintButtonState(); |
| 531 addEventListeners(); | 531 addEventListeners(); |
| 532 } | 532 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 581 } | 581 } |
| 582 | 582 |
| 583 /** | 583 /** |
| 584 * Updates the state of print button depending on the user selection. | 584 * Updates the state of print button depending on the user selection. |
| 585 * The button is enabled only when the following conditions are true. | 585 * The button is enabled only when the following conditions are true. |
| 586 * 1) The selected page ranges are valid. | 586 * 1) The selected page ranges are valid. |
| 587 * 2) The number of copies is valid (if applicable). | 587 * 2) The number of copies is valid (if applicable). |
| 588 */ | 588 */ |
| 589 function updatePrintButtonState() { | 589 function updatePrintButtonState() { |
| 590 if (getSelectedPrinterName() == PRINT_TO_PDF) { | 590 if (getSelectedPrinterName() == PRINT_TO_PDF) { |
| 591 $('print-button').disabled = (getSelectedPagesValidityLevel() != 1); | 591 $('print-button').disabled = !isSelectedPagesValid(); |
| 592 } else { | 592 } else { |
| 593 $('print-button').disabled = (!isNumberOfCopiesValid() || | 593 $('print-button').disabled = (!isNumberOfCopiesValid() || |
| 594 getSelectedPagesValidityLevel() != 1); | 594 !isSelectedPagesValid()); |
| 595 } | 595 } |
| 596 } | 596 } |
| 597 | 597 |
| 598 window.addEventListener('DOMContentLoaded', onLoad); | 598 window.addEventListener('DOMContentLoaded', onLoad); |
| 599 | 599 |
| 600 /** | 600 /** |
| 601 * Listener function that executes whenever a change occurs in the 'copies' | 601 * Listener function that executes whenever a change occurs in the 'copies' |
| 602 * field. | 602 * field. |
| 603 */ | 603 */ |
| 604 function copiesFieldChanged() { | 604 function copiesFieldChanged() { |
| 605 updateCopiesButtonsState(); | 605 updateCopiesButtonsState(); |
| 606 $('collate-option').hidden = getCopies() <= 1; | 606 $('collate-option').hidden = getCopies() <= 1; |
| 607 } | 607 } |
| 608 | 608 |
| 609 /** | 609 /** |
| 610 * Executes whenever a blur event occurs on the 'individual-pages' | 610 * Executes whenever a blur event occurs on the 'individual-pages' |
| 611 * field or when the timer expires. It takes care of | 611 * field or when the timer expires. It takes care of |
| 612 * 1) showing/hiding warnings/suggestions | 612 * 1) showing/hiding warnings/suggestions |
| 613 * 2) updating print button/summary | 613 * 2) updating print button/summary |
| 614 */ | 614 */ |
| 615 function pageRangesFieldChanged() { | 615 function pageRangesFieldChanged() { |
| 616 var currentlySelectedPages = getSelectedPagesSet(); | 616 var currentlySelectedPages = getSelectedPagesSet(); |
| 617 var individualPagesField = $('individual-pages'); | 617 var individualPagesField = $('individual-pages'); |
| 618 var individualPagesHint = $('individual-pages-hint'); | 618 var individualPagesHint = $('individual-pages-hint'); |
| 619 var validityLevel = getSelectedPagesValidityLevel(); | |
| 620 | 619 |
| 621 if (validityLevel == 1) { | 620 if (isSelectedPagesValid()) { |
| 622 individualPagesField.classList.remove('invalid'); | 621 individualPagesField.classList.remove('invalid'); |
| 623 fadeOutElement(individualPagesHint); | 622 fadeOutElement(individualPagesHint); |
| 624 } else { | 623 } else { |
| 625 individualPagesField.classList.add('invalid'); | 624 individualPagesField.classList.add('invalid'); |
| 626 individualPagesHint.classList.remove('suggestion'); | 625 individualPagesHint.classList.remove('suggestion'); |
| 627 individualPagesHint.innerHTML = | 626 individualPagesHint.innerHTML = |
| 628 localStrings.getStringF('pageRangeInstruction', | 627 localStrings.getStringF('pageRangeInstruction', |
| 629 localStrings.getString( | 628 localStrings.getString( |
| 630 'examplePageRangeText')); | 629 'examplePageRangeText')); |
| 631 fadeInElement(individualPagesHint); | 630 fadeInElement(individualPagesHint); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 function updatePrintSummary() { | 662 function updatePrintSummary() { |
| 664 var printToPDF = getSelectedPrinterName() == PRINT_TO_PDF; | 663 var printToPDF = getSelectedPrinterName() == PRINT_TO_PDF; |
| 665 var copies = printToPDF ? 1 : getCopies(); | 664 var copies = printToPDF ? 1 : getCopies(); |
| 666 var printSummary = $('print-summary'); | 665 var printSummary = $('print-summary'); |
| 667 | 666 |
| 668 if (!printToPDF && !isNumberOfCopiesValid()) { | 667 if (!printToPDF && !isNumberOfCopiesValid()) { |
| 669 printSummary.innerHTML = localStrings.getString('invalidNumberOfCopies'); | 668 printSummary.innerHTML = localStrings.getString('invalidNumberOfCopies'); |
| 670 return; | 669 return; |
| 671 } | 670 } |
| 672 | 671 |
| 673 if (getSelectedPagesValidityLevel() != 1) { | 672 if (!isSelectedPagesValid()) { |
| 674 printSummary.innerHTML = ''; | 673 printSummary.innerHTML = ''; |
| 675 return; | 674 return; |
| 676 } | 675 } |
| 677 | 676 |
| 678 var pageList = getSelectedPagesSet(); | 677 var pageList = getSelectedPagesSet(); |
| 679 var numOfSheets = pageList.length; | 678 var numOfSheets = pageList.length; |
| 680 var sheetsLabel = localStrings.getString('printPreviewSheetsLabelSingular'); | 679 var sheetsLabel = localStrings.getString('printPreviewSheetsLabelSingular'); |
| 681 var numOfPagesText = ''; | 680 var numOfPagesText = ''; |
| 682 var pagesLabel = ''; | 681 var pagesLabel = ''; |
| 683 | 682 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 781 if (singlePageNumber && singlePageNumber > 0 && | 780 if (singlePageNumber && singlePageNumber > 0 && |
| 782 singlePageNumber <= totalPageCount) { | 781 singlePageNumber <= totalPageCount) { |
| 783 pageList.push(parseInt(part, 10)); | 782 pageList.push(parseInt(part, 10)); |
| 784 } | 783 } |
| 785 } | 784 } |
| 786 } | 785 } |
| 787 return pageList; | 786 return pageList; |
| 788 } | 787 } |
| 789 | 788 |
| 790 /** | 789 /** |
| 791 * Checks the 'individual-pages' field and returns -1 if nothing is valid, 0 if | 790 * Validates the 'individual-pages' text field value. |
| 792 * it is partially valid, 1 if it is completely valid. | 791 * |
| 793 * Note: This function is stricter than getSelectedPages(), in other words this | 792 * @return {boolean} true if the text is valid. |
| 794 * could return -1 and getSelectedPages() might still extract some pages. | |
| 795 */ | 793 */ |
| 796 function getSelectedPagesValidityLevel() { | 794 function isSelectedPagesValid() { |
| 797 var pageText = $('individual-pages').value; | 795 var pageText = $('individual-pages').value; |
| 798 | 796 |
| 799 if ($('all-pages').checked || pageText.length == 0) | 797 if ($('all-pages').checked || pageText.length == 0) |
| 800 return 1; | 798 return true; |
| 801 | 799 |
| 802 var successfullyParsed = 0; | 800 var successfullyParsed = 0; |
|
dpapad
2011/06/08 18:58:13
We don't need this variable either anymore. Remove
dpapad
2011/06/08 20:10:06
Summarizing our online discussion, lets leave this
| |
| 803 var failedToParse = 0; | |
| 804 | |
| 805 var parts = pageText.split(/,/); | 801 var parts = pageText.split(/,/); |
| 806 | 802 |
| 807 for (var i = 0; i < parts.length; ++i) { | 803 for (var i = 0; i < parts.length; ++i) { |
| 808 var part = parts[i].replace(/\s*/g, ''); | 804 var part = parts[i].replace(/\s*/g, ''); |
| 809 if (part.length == 0) | 805 if (part.length == 0) |
| 810 continue; | 806 continue; |
| 811 | 807 |
| 812 var match = part.match(/^([0-9]+)-([0-9]*)$/); | 808 var match = part.match(/^([0-9]+)-([0-9]*)$/); |
| 813 if (match && match[1]) { | 809 if (match && isValidNonZeroPositiveInteger(match[1])) { |
| 814 var from = parseInt(match[1], 10); | 810 var from = parseInt(match[1], 10); |
| 815 var to = match[2] ? parseInt(match[2], 10) : totalPageCount; | 811 var to = match[2] ? parseInt(match[2], 10) : totalPageCount; |
| 816 | 812 |
| 817 if (from && to && from <= to) | 813 if (!to || from > to) |
| 818 successfullyParsed += 1; | 814 return false; |
| 819 else | 815 } else if (!isValidNonZeroPositiveInteger(part) || |
| 820 failedToParse += 1; | 816 !(parseInt(part, 10) <= totalPageCount)) { |
| 821 | 817 return false; |
| 822 } else if (isInteger(part) && parseInt(part, 10) <= totalPageCount && | 818 } |
| 823 parseInt(part, 10) > 0) | 819 successfullyParsed += 1; |
| 824 successfullyParsed += 1; | |
| 825 else | |
| 826 failedToParse += 1; | |
| 827 } | 820 } |
| 828 if (successfullyParsed > 0 && failedToParse == 0) | 821 return successfullyParsed > 0 |
| 829 return 1; | |
| 830 else if (successfullyParsed > 0 && failedToParse > 0) | |
| 831 return 0; | |
| 832 else | |
| 833 return -1; | |
| 834 } | |
| 835 | |
| 836 function isSelectedPagesFieldValid() { | |
| 837 return (getSelectedPages().length != 0) | |
| 838 } | 822 } |
| 839 | 823 |
| 840 /** | 824 /** |
| 825 * Returns true if |value| is a valid non zero positive integer. | |
| 826 * @param {string} value The string to be tested. | |
| 827 */ | |
| 828 function isValidNonZeroPositiveInteger(value) { | |
| 829 return isInteger(value) && parseInt(value, 10) > 0; | |
| 830 } | |
| 831 | |
| 832 /** | |
| 841 * Parses the selected page ranges, processes them and returns the results. | 833 * Parses the selected page ranges, processes them and returns the results. |
| 842 * It squashes whenever possible. Example '1-2,3,5-7' becomes 1-3,5-7 | 834 * It squashes whenever possible. Example '1-2,3,5-7' becomes 1-3,5-7 |
| 843 * | 835 * |
| 844 * @return {Array} an array of page range objects. A page range object has | 836 * @return {Array} an array of page range objects. A page range object has |
| 845 * fields 'from' and 'to'. | 837 * fields 'from' and 'to'. |
| 846 */ | 838 */ |
| 847 function getSelectedPageRanges() { | 839 function getSelectedPageRanges() { |
| 848 var pageList = getSelectedPagesSet(); | 840 var pageList = getSelectedPagesSet(); |
| 849 var pageRanges = []; | 841 var pageRanges = []; |
| 850 for (var i = 0; i < pageList.length; ++i) { | 842 for (var i = 0; i < pageList.length; ++i) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 905 | 897 |
| 906 /** | 898 /** |
| 907 * When the user stops typing in the page range textfield or clicks on the | 899 * When the user stops typing in the page range textfield or clicks on the |
| 908 * 'all-pages' checkbox, a new print preview is requested, only if | 900 * 'all-pages' checkbox, a new print preview is requested, only if |
| 909 * 1) The input is compeletely valid (it can be parsed in its entirety). | 901 * 1) The input is compeletely valid (it can be parsed in its entirety). |
| 910 * 2) The newly selected pages differ from the previously selected. | 902 * 2) The newly selected pages differ from the previously selected. |
| 911 */ | 903 */ |
| 912 function onPageSelectionMayHaveChanged() { | 904 function onPageSelectionMayHaveChanged() { |
| 913 if ($('print-pages').checked) | 905 if ($('print-pages').checked) |
| 914 pageRangesFieldChanged(); | 906 pageRangesFieldChanged(); |
| 915 var validityLevel = getSelectedPagesValidityLevel(); | |
| 916 var currentlySelectedPages = getSelectedPagesSet(); | 907 var currentlySelectedPages = getSelectedPagesSet(); |
| 917 | 908 |
| 918 // Toggling between "all pages"/"some pages" radio buttons while having an | 909 // Toggling between "all pages"/"some pages" radio buttons while having an |
| 919 // invalid entry in the page selection textfield still requires updating the | 910 // invalid entry in the page selection textfield still requires updating the |
| 920 // print summary and print button. | 911 // print summary and print button. |
| 921 if (validityLevel < 1 || | 912 if (!isSelectedPagesValid() || |
| 922 areArraysEqual(previouslySelectedPages, currentlySelectedPages)) { | 913 areArraysEqual(previouslySelectedPages, currentlySelectedPages)) { |
| 923 updatePrintButtonState(); | 914 updatePrintButtonState(); |
| 924 updatePrintSummary(); | 915 updatePrintSummary(); |
| 925 return; | 916 return; |
| 926 } | 917 } |
| 927 | 918 |
| 928 previouslySelectedPages = currentlySelectedPages; | 919 previouslySelectedPages = currentlySelectedPages; |
| 929 requestPrintPreview(); | 920 requestPrintPreview(); |
| 930 } | 921 } |
| 931 | 922 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 965 this.isLandscape = ''; | 956 this.isLandscape = ''; |
| 966 } | 957 } |
| 967 | 958 |
| 968 /** | 959 /** |
| 969 * Takes a snapshot of the print settings. | 960 * Takes a snapshot of the print settings. |
| 970 */ | 961 */ |
| 971 PrintSettings.prototype.save = function() { | 962 PrintSettings.prototype.save = function() { |
| 972 this.deviceName = getSelectedPrinterName(); | 963 this.deviceName = getSelectedPrinterName(); |
| 973 this.isLandscape = isLandscape(); | 964 this.isLandscape = isLandscape(); |
| 974 } | 965 } |
| OLD | NEW |