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

Side by Side Diff: chrome/browser/resources/pdf/pdf.js

Issue 898673003: Refactor Material Design PDF Viewer toolbar into a single element (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove irrelevant comment Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @return {number} Width of a scrollbar in pixels 8 * @return {number} Width of a scrollbar in pixels
9 */ 9 */
10 function getScrollbarWidth() { 10 function getScrollbarWidth() {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // to be displayed in the window. It is sized according to the document size 79 // to be displayed in the window. It is sized according to the document size
80 // of the pdf and zoom level. 80 // of the pdf and zoom level.
81 this.sizer_ = $('sizer'); 81 this.sizer_ = $('sizer');
82 this.toolbar_ = $('toolbar'); 82 this.toolbar_ = $('toolbar');
83 this.pageIndicator_ = $('page-indicator'); 83 this.pageIndicator_ = $('page-indicator');
84 this.progressBar_ = $('progress-bar'); 84 this.progressBar_ = $('progress-bar');
85 this.passwordScreen_ = $('password-screen'); 85 this.passwordScreen_ = $('password-screen');
86 this.passwordScreen_.addEventListener('password-submitted', 86 this.passwordScreen_.addEventListener('password-submitted',
87 this.onPasswordSubmitted_.bind(this)); 87 this.onPasswordSubmitted_.bind(this));
88 this.errorScreen_ = $('error-screen'); 88 this.errorScreen_ = $('error-screen');
89 this.toolbarHeight_ = this.isMaterial_ ? $('pdf-toolbar').clientHeight : 0; 89 this.materialToolbar_ = $('material-toolbar');
90 this.bookmarksPane = $('bookmarks-pane'); 90 this.toolbarHeight_ = this.isMaterial_ ?
91 this.materialToolbar_.clientHeight : 0;
92 this.bookmarksPane_ = $('bookmarks-pane');
91 93
92 // Create the viewport. 94 // Create the viewport.
93 this.viewport_ = new Viewport(window, 95 this.viewport_ = new Viewport(window,
94 this.sizer_, 96 this.sizer_,
95 this.viewportChanged_.bind(this), 97 this.viewportChanged_.bind(this),
96 this.beforeZoom_.bind(this), 98 this.beforeZoom_.bind(this),
97 this.afterZoom_.bind(this), 99 this.afterZoom_.bind(this),
98 getScrollbarWidth(), 100 getScrollbarWidth(),
99 this.toolbarHeight_); 101 this.toolbarHeight_);
100 // Create the plugin object dynamically so we can set its src. The plugin 102 // Create the plugin object dynamically so we can set its src. The plugin
(...skipping 15 matching lines...) Expand all
116 this.plugin_.setAttribute('is-material', ''); 118 this.plugin_.setAttribute('is-material', '');
117 119
118 // Handle scripting messages from outside the extension that wish to interact 120 // Handle scripting messages from outside the extension that wish to interact
119 // with it. We also send a message indicating that extension has loaded and 121 // with it. We also send a message indicating that extension has loaded and
120 // is ready to receive messages. 122 // is ready to receive messages.
121 window.addEventListener('message', this.handleScriptingMessage.bind(this), 123 window.addEventListener('message', this.handleScriptingMessage.bind(this),
122 false); 124 false);
123 125
124 document.title = getFilenameFromURL(this.streamDetails_.originalUrl); 126 document.title = getFilenameFromURL(this.streamDetails_.originalUrl);
125 if (this.isMaterial_) 127 if (this.isMaterial_)
126 $('title').textContent = document.title; 128 this.materialToolbar_.filename = document.title;
127 this.plugin_.setAttribute('src', this.streamDetails_.originalUrl); 129 this.plugin_.setAttribute('src', this.streamDetails_.originalUrl);
128 this.plugin_.setAttribute('stream-url', this.streamDetails_.streamUrl); 130 this.plugin_.setAttribute('stream-url', this.streamDetails_.streamUrl);
129 var headers = ''; 131 var headers = '';
130 for (var header in this.streamDetails_.responseHeaders) { 132 for (var header in this.streamDetails_.responseHeaders) {
131 headers += header + ': ' + 133 headers += header + ': ' +
132 this.streamDetails_.responseHeaders[header] + '\n'; 134 this.streamDetails_.responseHeaders[header] + '\n';
133 } 135 }
134 this.plugin_.setAttribute('headers', headers); 136 this.plugin_.setAttribute('headers', headers);
135 137
136 if (!this.streamDetails_.embedded) 138 if (!this.streamDetails_.embedded)
137 this.plugin_.setAttribute('full-frame', ''); 139 this.plugin_.setAttribute('full-frame', '');
138 document.body.appendChild(this.plugin_); 140 document.body.appendChild(this.plugin_);
139 141
140 this.pageIndicator_.addEventListener('changePage', function(e) { 142 document.body.addEventListener('changePage', function(e) {
141 this.viewport_.goToPage(e.detail.page); 143 this.viewport_.goToPage(e.detail.page);
142 }.bind(this)); 144 }.bind(this));
143 145
144 if (this.isMaterial_) {
145 this.bookmarksPane.addEventListener('changePage', function(e) {
146 this.viewport_.goToPage(e.detail.page);
147 }.bind(this));
148 }
149
150 // Setup the button event listeners. 146 // Setup the button event listeners.
151 $('fit-to-width-button').addEventListener('click', 147 $('fit-to-width-button').addEventListener('click',
152 this.viewport_.fitToWidth.bind(this.viewport_)); 148 this.viewport_.fitToWidth.bind(this.viewport_));
153 $('fit-to-page-button').addEventListener('click', 149 $('fit-to-page-button').addEventListener('click',
154 this.viewport_.fitToPage.bind(this.viewport_)); 150 this.viewport_.fitToPage.bind(this.viewport_));
155 $('zoom-in-button').addEventListener('click', 151 $('zoom-in-button').addEventListener('click',
156 this.viewport_.zoomIn.bind(this.viewport_)); 152 this.viewport_.zoomIn.bind(this.viewport_));
157 $('zoom-out-button').addEventListener('click', 153 $('zoom-out-button').addEventListener('click',
158 this.viewport_.zoomOut.bind(this.viewport_)); 154 this.viewport_.zoomOut.bind(this.viewport_));
159 $('save-button').addEventListener('click', this.save_.bind(this)); 155
160 $('print-button').addEventListener('click', this.print_.bind(this));
161 if (this.isMaterial_) { 156 if (this.isMaterial_) {
162 $('bookmarks-button').addEventListener('click', function() { 157 this.materialToolbar_.addEventListener('save', this.save_.bind(this));
163 this.bookmarksPane.toggle(); 158 this.materialToolbar_.addEventListener('print', this.print_.bind(this));
159 this.materialToolbar_.addEventListener('toggle-bookmarks', function() {
160 this.bookmarksPane_.toggle();
Sam McNally 2015/02/03 07:22:45 2 space indent.
Alexandre Carlton 2015/02/03 22:50:42 Done.
164 }.bind(this)); 161 }.bind(this));
162 } else {
163 $('save-button').addEventListener('click', this.save_.bind(this));
164 $('print-button').addEventListener('click', this.print_.bind(this));
165 } 165 }
166 166
167 // Setup the keyboard event listener. 167 // Setup the keyboard event listener.
168 document.onkeydown = this.handleKeyEvent_.bind(this); 168 document.onkeydown = this.handleKeyEvent_.bind(this);
169 169
170 // Set up the zoom API. 170 // Set up the zoom API.
171 if (this.shouldManageZoom_()) { 171 if (this.shouldManageZoom_()) {
172 chrome.tabs.setZoomSettings(this.streamDetails_.tabId, 172 chrome.tabs.setZoomSettings(this.streamDetails_.tabId,
173 {mode: 'manual', scope: 'per-tab'}, 173 {mode: 'manual', scope: 'per-tab'},
174 this.afterZoom_.bind(this)); 174 this.afterZoom_.bind(this));
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 }, 357 },
358 358
359 /** 359 /**
360 * @private 360 * @private
361 * Update the loading progress of the document in response to a progress 361 * Update the loading progress of the document in response to a progress
362 * message being received from the plugin. 362 * message being received from the plugin.
363 * @param {number} progress the progress as a percentage. 363 * @param {number} progress the progress as a percentage.
364 */ 364 */
365 updateProgress_: function(progress) { 365 updateProgress_: function(progress) {
366 if (this.isMaterial_) 366 if (this.isMaterial_)
367 this.progressBar_.value = progress; 367 this.materialToolbar_.progress = progress;
368 else 368 else
369 this.progressBar_.progress = progress; 369 this.progressBar_.progress = progress;
370 370
371 if (progress == -1) { 371 if (progress == -1) {
372 // Document load failed. 372 // Document load failed.
373 this.errorScreen_.style.visibility = 'visible'; 373 this.errorScreen_.style.visibility = 'visible';
374 this.sizer_.style.display = 'none'; 374 this.sizer_.style.display = 'none';
375 this.toolbar_.style.visibility = 'hidden'; 375 this.toolbar_.style.visibility = 'hidden';
376 if (this.passwordScreen_.active) { 376 if (this.passwordScreen_.active) {
377 this.passwordScreen_.deny(); 377 this.passwordScreen_.deny();
378 this.passwordScreen_.active = false; 378 this.passwordScreen_.active = false;
379 } 379 }
380 } else if (progress == 100) { 380 } else if (progress == 100) {
381 // Document load complete. 381 // Document load complete.
382 if (this.lastViewportPosition_) 382 if (this.lastViewportPosition_)
383 this.viewport_.position = this.lastViewportPosition_; 383 this.viewport_.position = this.lastViewportPosition_;
384 if (this.isMaterial_) 384 if (!this.isMaterial_)
385 this.pageIndicator_.style.visibility = 'visible'; 385 this.pageIndicator_.style.visibility = 'visible';
386 this.handleURLParams_(); 386 this.handleURLParams_();
387 this.loaded_ = true; 387 this.loaded_ = true;
388 this.sendScriptingMessage_({ 388 this.sendScriptingMessage_({
389 type: 'documentLoaded' 389 type: 'documentLoaded'
390 }); 390 });
391 while (this.delayedScriptingMessages_.length > 0) 391 while (this.delayedScriptingMessages_.length > 0)
392 this.handleScriptingMessage(this.delayedScriptingMessages_.shift()); 392 this.handleScriptingMessage(this.delayedScriptingMessages_.shift());
393 } 393 }
394 }, 394 },
(...skipping 20 matching lines...) Expand all
415 switch (message.data.type.toString()) { 415 switch (message.data.type.toString()) {
416 case 'documentDimensions': 416 case 'documentDimensions':
417 this.documentDimensions_ = message.data; 417 this.documentDimensions_ = message.data;
418 this.viewport_.setDocumentDimensions(this.documentDimensions_); 418 this.viewport_.setDocumentDimensions(this.documentDimensions_);
419 // If we received the document dimensions, the password was good so we 419 // If we received the document dimensions, the password was good so we
420 // can dismiss the password screen. 420 // can dismiss the password screen.
421 if (this.passwordScreen_.active) 421 if (this.passwordScreen_.active)
422 this.passwordScreen_.accept(); 422 this.passwordScreen_.accept();
423 423
424 if (this.isMaterial_) { 424 if (this.isMaterial_) {
425 this.pageIndicator_.docLength = 425 this.materialToolbar_.docLength =
426 this.documentDimensions_.pageDimensions.length; 426 this.documentDimensions_.pageDimensions.length;
427 } else { 427 } else {
428 this.pageIndicator_.initialFadeIn(); 428 this.pageIndicator_.initialFadeIn();
429 } 429 }
430 430
431 this.toolbar_.initialFadeIn(); 431 this.toolbar_.initialFadeIn();
432 break; 432 break;
433 case 'email': 433 case 'email':
434 var href = 'mailto:' + message.data.to + '?cc=' + message.data.cc + 434 var href = 'mailto:' + message.data.to + '?cc=' + message.data.cc +
435 '&bcc=' + message.data.bcc + '&subject=' + message.data.subject + 435 '&bcc=' + message.data.bcc + '&subject=' + message.data.subject +
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 case 'setScrollPosition': 469 case 'setScrollPosition':
470 var position = this.viewport_.position; 470 var position = this.viewport_.position;
471 if (message.data.x !== undefined) 471 if (message.data.x !== undefined)
472 position.x = message.data.x; 472 position.x = message.data.x;
473 if (message.data.y !== undefined) 473 if (message.data.y !== undefined)
474 position.y = message.data.y; 474 position.y = message.data.y;
475 this.viewport_.position = position; 475 this.viewport_.position = position;
476 break; 476 break;
477 case 'setTranslatedStrings': 477 case 'setTranslatedStrings':
478 this.passwordScreen_.text = message.data.getPasswordString; 478 this.passwordScreen_.text = message.data.getPasswordString;
479 this.progressBar_.text = message.data.loadingString; 479 if (!this.isMaterial_)
480 if (!this.isPrintPreview_) 480 this.progressBar_.text = message.data.loadingString;
481 if (!this.isPrintPreview_ && !this.isMaterial_)
Sam McNally 2015/02/03 07:22:45 Move this inside the if above.
Alexandre Carlton 2015/02/03 22:50:43 Done.
481 this.progressBar_.style.visibility = 'visible'; 482 this.progressBar_.style.visibility = 'visible';
482 this.errorScreen_.text = message.data.loadFailedString; 483 this.errorScreen_.text = message.data.loadFailedString;
483 break; 484 break;
484 case 'cancelStreamUrl': 485 case 'cancelStreamUrl':
485 chrome.mimeHandlerPrivate.abortStream(); 486 chrome.mimeHandlerPrivate.abortStream();
486 break; 487 break;
487 case 'bookmarks': 488 case 'bookmarks':
488 this.bookmarks_ = message.data.bookmarks; 489 this.bookmarks_ = message.data.bookmarks;
489 if (this.isMaterial_) 490 if (this.isMaterial_)
490 this.bookmarksPane.bookmarks = message.data.bookmarks; 491 this.bookmarksPane_.bookmarks = message.data.bookmarks;
491 break; 492 break;
492 } 493 }
493 }, 494 },
494 495
495 /** 496 /**
496 * @private 497 * @private
497 * A callback that's called before the zoom changes. Notify the plugin to stop 498 * A callback that's called before the zoom changes. Notify the plugin to stop
498 * reacting to scroll events while zoom is taking place to avoid flickering. 499 * reacting to scroll events while zoom is taking place to avoid flickering.
499 */ 500 */
500 beforeZoom_: function() { 501 beforeZoom_: function() {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 this.toolbar_.style.right = toolbarRight + 'px'; 579 this.toolbar_.style.right = toolbarRight + 'px';
579 this.toolbar_.style.bottom = toolbarBottom + 'px'; 580 this.toolbar_.style.bottom = toolbarBottom + 'px';
580 // Hide the toolbar if it doesn't fit in the viewport. 581 // Hide the toolbar if it doesn't fit in the viewport.
581 if (this.toolbar_.offsetLeft < 0 || this.toolbar_.offsetTop < 0) 582 if (this.toolbar_.offsetLeft < 0 || this.toolbar_.offsetTop < 0)
582 this.toolbar_.style.visibility = 'hidden'; 583 this.toolbar_.style.visibility = 'hidden';
583 else 584 else
584 this.toolbar_.style.visibility = 'visible'; 585 this.toolbar_.style.visibility = 'visible';
585 586
586 // Update the page indicator. 587 // Update the page indicator.
587 var visiblePage = this.viewport_.getMostVisiblePage(); 588 var visiblePage = this.viewport_.getMostVisiblePage();
588 this.pageIndicator_.index = visiblePage; 589 if (this.isMaterial_)
590 this.materialToolbar_.index = visiblePage;
591 else
592 this.pageIndicator_.index = visiblePage;
593
589 if (!this.isMaterial_) { 594 if (!this.isMaterial_) {
590 if (this.documentDimensions_.pageDimensions.length > 1 && 595 if (this.documentDimensions_.pageDimensions.length > 1 &&
591 hasScrollbars.vertical) { 596 hasScrollbars.vertical) {
592 this.pageIndicator_.style.visibility = 'visible'; 597 this.pageIndicator_.style.visibility = 'visible';
593 } else { 598 } else {
594 this.pageIndicator_.style.visibility = 'hidden'; 599 this.pageIndicator_.style.visibility = 'hidden';
595 } 600 }
596 } 601 }
597 602
598 var visiblePageDimensions = this.viewport_.getPageScreenRect(visiblePage); 603 var visiblePageDimensions = this.viewport_.getPageScreenRect(visiblePage);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 this.lastViewportPosition_ = this.viewport_.position; 675 this.lastViewportPosition_ = this.viewport_.position;
671 676
672 // TODO(raymes): Disable these properly in the plugin. 677 // TODO(raymes): Disable these properly in the plugin.
673 var printButton = $('print-button'); 678 var printButton = $('print-button');
674 if (printButton) 679 if (printButton)
675 printButton.parentNode.removeChild(printButton); 680 printButton.parentNode.removeChild(printButton);
676 var saveButton = $('save-button'); 681 var saveButton = $('save-button');
677 if (saveButton) 682 if (saveButton)
678 saveButton.parentNode.removeChild(saveButton); 683 saveButton.parentNode.removeChild(saveButton);
679 684
680 this.pageIndicator_.pageLabels = message.data.pageNumbers; 685 // TODO(alexandrec): Weren't we going to get rid of pageLabels?
686 if (!this.isMaterial_)
687 this.pageIndicator_.pageLabels = message.data.pageNumbers;
Alexandre Carlton 2015/02/03 02:22:24 Just drawing attention to this; what should we do
Sam McNally 2015/02/03 07:22:45 We're keeping pageLabels, but we don't need to dea
Alexandre Carlton 2015/02/03 22:50:42 Acknowledged.
681 688
682 this.plugin_.postMessage({ 689 this.plugin_.postMessage({
683 type: 'resetPrintPreviewMode', 690 type: 'resetPrintPreviewMode',
684 url: message.data.url, 691 url: message.data.url,
685 grayscale: message.data.grayscale, 692 grayscale: message.data.grayscale,
686 // If the PDF isn't modifiable we send 0 as the page count so that no 693 // If the PDF isn't modifiable we send 0 as the page count so that no
687 // blank placeholder pages get appended to the PDF. 694 // blank placeholder pages get appended to the PDF.
688 pageCount: (message.data.modifiable ? 695 pageCount: (message.data.modifiable ?
689 message.data.pageNumbers.length : 0) 696 message.data.pageNumbers.length : 0)
690 }); 697 });
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 * Each bookmark is an Object containing a: 740 * Each bookmark is an Object containing a:
734 * - title 741 * - title
735 * - page (optional) 742 * - page (optional)
736 * - array of children (themselves bookmarks) 743 * - array of children (themselves bookmarks)
737 * @type {Array} the top-level bookmarks of the PDF. 744 * @type {Array} the top-level bookmarks of the PDF.
738 */ 745 */
739 get bookmarks() { 746 get bookmarks() {
740 return this.bookmarks_; 747 return this.bookmarks_;
741 } 748 }
742 }; 749 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698