OLD | NEW |
---|---|
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 <include src="../../../../ui/webui/resources/js/util.js"> | 7 <include src="../../../../ui/webui/resources/js/util.js"> |
8 <include src="pdf_scripting_api.js"> | 8 <include src="pdf_scripting_api.js"> |
9 <include src="viewport.js"> | 9 <include src="viewport.js"> |
10 | 10 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 if (chrome.tabs) { | 139 if (chrome.tabs) { |
140 chrome.tabs.setZoomSettings({mode: 'manual', scope: 'per-tab'}, | 140 chrome.tabs.setZoomSettings({mode: 'manual', scope: 'per-tab'}, |
141 this.afterZoom_.bind(this)); | 141 this.afterZoom_.bind(this)); |
142 chrome.tabs.onZoomChange.addListener(function(zoomChangeInfo) { | 142 chrome.tabs.onZoomChange.addListener(function(zoomChangeInfo) { |
143 // If the zoom level is close enough to the current zoom level, don't | 143 // If the zoom level is close enough to the current zoom level, don't |
144 // change it. This avoids us getting into an infinite loop of zoom changes | 144 // change it. This avoids us getting into an infinite loop of zoom changes |
145 // due to floating point error. | 145 // due to floating point error. |
146 var MIN_ZOOM_DELTA = 0.01; | 146 var MIN_ZOOM_DELTA = 0.01; |
147 var zoomDelta = Math.abs(this.viewport_.zoom - | 147 var zoomDelta = Math.abs(this.viewport_.zoom - |
148 zoomChangeInfo.newZoomFactor); | 148 zoomChangeInfo.newZoomFactor); |
149 if (zoomDelta > MIN_ZOOM_DELTA) | 149 if ((zoomDelta > MIN_ZOOM_DELTA) && !this.setZoomInProgress_) |
Nikhil
2014/08/21 11:36:50
This was again calling setZoom() with older zoom f
raymes
2014/08/22 03:52:21
Hmm I'm not sure if this is completely correct. Ba
| |
150 this.viewport_.setZoom(zoomChangeInfo.newZoomFactor); | 150 this.viewport_.setZoom(zoomChangeInfo.newZoomFactor); |
151 }.bind(this)); | 151 }.bind(this)); |
152 } | 152 } |
153 } | 153 } |
154 | 154 |
155 PDFViewer.prototype = { | 155 PDFViewer.prototype = { |
156 /** | 156 /** |
157 * @private | 157 * @private |
158 * Handle key events. These may come from the user directly or via the | 158 * Handle key events. These may come from the user directly or via the |
159 * scripting API. | 159 * scripting API. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 * @private | 257 * @private |
258 * Notify the plugin to print. | 258 * Notify the plugin to print. |
259 */ | 259 */ |
260 print_: function() { | 260 print_: function() { |
261 this.plugin_.postMessage({ | 261 this.plugin_.postMessage({ |
262 type: 'print', | 262 type: 'print', |
263 }); | 263 }); |
264 }, | 264 }, |
265 | 265 |
266 /** | 266 /** |
267 * Handle zoom parameter of open PDF parameters. If this | |
268 * parameter is passed while opening PDF then PDF should be opened | |
269 * at the specified zoom level. | |
270 * @param {number} zoom value. | |
271 */ | |
272 handleZoomParam_: function(paramValue) { | |
273 var paramValueSplit = paramValue.split(','); | |
274 if ((paramValueSplit.length != 1) && (paramValueSplit.length != 3)) | |
275 return; | |
276 | |
277 // User scale of 100 means zoom value of 100% i.e. zoom factor of 1.0. | |
278 var zoomFactor = parseFloat(paramValueSplit[0]) / 100; | |
279 | |
280 // Handle #zoom=scale. | |
281 if (paramValueSplit.length == 1) { | |
282 this.viewport_.setZoom(zoomFactor); | |
283 return; | |
284 } | |
285 | |
286 // Handle #zoom=scale,left,top. | |
287 var position = {x: parseFloat(paramValueSplit[1]), | |
288 y: parseFloat(paramValueSplit[2])}; | |
289 this.viewport_.position = position; | |
290 this.viewport_.setZoom(zoomFactor); | |
291 }, | |
292 | |
293 /** | |
267 * @private | 294 * @private |
268 * Handle open PDF parameters. These parameters are mentioned in the URL | 295 * Handle open PDF parameters. These parameters are mentioned in the URL |
269 * and specify actions to be performed when opening PDF files. | 296 * and specify actions to be performed when opening PDF files. |
270 * See http://crbug.com/64309 for details. | 297 * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_ parameters.pdf |
raymes
2014/08/22 03:52:21
you'll have to split up the URL so it doesn't exte
| |
298 * for details. | |
271 */ | 299 */ |
272 handleOpenPDFParams_: function() { | 300 handleOpenPDFParams_: function() { |
273 var originalUrl = this.streamDetails.originalUrl; | 301 var originalUrl = this.streamDetails.originalUrl; |
274 var paramIndex = originalUrl.search('#'); | 302 var paramIndex = originalUrl.search('#'); |
275 if (paramIndex == -1) | 303 if (paramIndex == -1) |
276 return; | 304 return; |
277 | 305 |
278 var paramTokens = originalUrl.substring(paramIndex + 1).split('&'); | 306 var paramTokens = originalUrl.substring(paramIndex + 1).split('&'); |
279 var paramsDictionary = {}; | 307 var paramsDictionary = {}; |
280 for (var i = 0; i < paramTokens.length; ++i) { | 308 for (var i = 0; i < paramTokens.length; ++i) { |
281 var keyValueSplit = paramTokens[i].split('='); | 309 var keyValueSplit = paramTokens[i].split('='); |
282 if (keyValueSplit.length != 2) | 310 if (keyValueSplit.length != 2) |
283 continue; | 311 continue; |
284 paramsDictionary[keyValueSplit[0]] = keyValueSplit[1]; | 312 paramsDictionary[keyValueSplit[0]] = keyValueSplit[1]; |
285 } | 313 } |
286 | 314 |
287 // Order is important as later actions can override the effects | 315 // Order is important as later actions can override the effects |
288 // of previous actions. | 316 // of previous actions. |
289 if ('page' in paramsDictionary) { | 317 if ('page' in paramsDictionary) { |
290 // |pageNumber| is 1-based, but goToPage() take a zero-based page number. | 318 // |pageNumber| is 1-based, but goToPage() take a zero-based page number. |
291 var pageNumber = parseInt(paramsDictionary['page']); | 319 var pageNumber = parseInt(paramsDictionary['page']); |
292 if (!isNaN(pageNumber)) | 320 if (!isNaN(pageNumber)) |
293 this.viewport_.goToPage(pageNumber - 1); | 321 this.viewport_.goToPage(pageNumber - 1); |
294 } | 322 } |
323 if ('zoom' in paramsDictionary) | |
324 this.handleZoomParam_(paramsDictionary['zoom']); | |
295 }, | 325 }, |
raymes
2014/08/22 03:52:21
This class is already quite large and I'd like to
| |
296 | 326 |
297 /** | 327 /** |
298 * @private | 328 * @private |
299 * Update the loading progress of the document in response to a progress | 329 * Update the loading progress of the document in response to a progress |
300 * message being received from the plugin. | 330 * message being received from the plugin. |
301 * @param {number} progress the progress as a percentage. | 331 * @param {number} progress the progress as a percentage. |
302 */ | 332 */ |
303 updateProgress_: function(progress) { | 333 updateProgress_: function(progress) { |
304 this.progressBar_.progress = progress; | 334 this.progressBar_.progress = progress; |
305 if (progress == -1) { | 335 if (progress == -1) { |
306 // Document load failed. | 336 // Document load failed. |
307 this.errorScreen_.style.visibility = 'visible'; | 337 this.errorScreen_.style.visibility = 'visible'; |
308 this.sizer_.style.display = 'none'; | 338 this.sizer_.style.display = 'none'; |
309 this.toolbar_.style.visibility = 'hidden'; | 339 this.toolbar_.style.visibility = 'hidden'; |
310 if (this.passwordScreen_.active) { | 340 if (this.passwordScreen_.active) { |
311 this.passwordScreen_.deny(); | 341 this.passwordScreen_.deny(); |
312 this.passwordScreen_.active = false; | 342 this.passwordScreen_.active = false; |
313 } | 343 } |
314 } else if (progress == 100) { | 344 } else if (progress == 100) { |
315 // Document load complete. | 345 // Document load complete. |
346 if (this.lastViewportPosition_) | |
347 this.viewport_.position = this.lastViewportPosition_; | |
316 this.handleOpenPDFParams_(); | 348 this.handleOpenPDFParams_(); |
317 this.loaded = true; | 349 this.loaded = true; |
318 var loadEvent = new Event('pdfload'); | 350 var loadEvent = new Event('pdfload'); |
319 window.dispatchEvent(loadEvent); | 351 window.dispatchEvent(loadEvent); |
320 this.sendScriptingMessage_({ | 352 this.sendScriptingMessage_({ |
321 type: 'documentLoaded' | 353 type: 'documentLoaded' |
322 }); | 354 }); |
323 if (this.lastViewportPosition_) | |
324 this.viewport_.position = this.lastViewportPosition_; | |
325 } | 355 } |
326 }, | 356 }, |
327 | 357 |
328 /** | 358 /** |
329 * @private | 359 * @private |
330 * An event handler for handling password-submitted events. These are fired | 360 * An event handler for handling password-submitted events. These are fired |
331 * when an event is entered into the password screen. | 361 * when an event is entered into the password screen. |
332 * @param {Object} event a password-submitted event. | 362 * @param {Object} event a password-submitted event. |
333 */ | 363 */ |
334 onPasswordSubmitted_: function(event) { | 364 onPasswordSubmitted_: function(event) { |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
571 | 601 |
572 /** | 602 /** |
573 * @type {Viewport} the viewport of the PDF viewer. | 603 * @type {Viewport} the viewport of the PDF viewer. |
574 */ | 604 */ |
575 get viewport() { | 605 get viewport() { |
576 return this.viewport_; | 606 return this.viewport_; |
577 } | 607 } |
578 }; | 608 }; |
579 | 609 |
580 var viewer = new PDFViewer(); | 610 var viewer = new PDFViewer(); |
OLD | NEW |