1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 'use strict'; 6 7 /** 8 * Creates a new OpenPDFParamsParser. This parses the open pdf parameters 9 * passed in the url to set initial viewport settings for opening the pdf. 10 * @param {string} url to be parsed. 11 */ 12 function OpenPDFParamsParser(url) { 13 this.url_ = url; 14 this.urlParams = {}; 15 this.parseOpenPDFParams_(); 16 } 17 18 OpenPDFParamsParser.prototype = { 19 /** 20 * @private 21 * Parse zoom parameter of open PDF parameters. If this 22 * parameter is passed while opening PDF then PDF should be opened 23 * at the specified zoom level. 24 * @param {number} zoom value. 25 */ 26 parseZoomParam_: function(paramValue) { 27 var paramValueSplit = paramValue.split(','); 28 if ((paramValueSplit.length != 1) && (paramValueSplit.length != 3)) 29 return; 30 31 // User scale of 100 means zoom value of 100% i.e. zoom factor of 1.0. 32 var zoomFactor = parseFloat(paramValueSplit[0]) / 100; 33 if (isNaN(zoomFactor)) 34 return; 35 36 // Handle #zoom=scale. 37 if (paramValueSplit.length == 1) { 38 this.urlParams['zoom'] = zoomFactor; 39 return; 40 } 41 42 // Handle #zoom=scale,left,top. 43 var position = {x: parseFloat(paramValueSplit[1]), 44 y: parseFloat(paramValueSplit[2])}; 45 this.urlParams['position'] = position; 46 this.urlParams['zoom'] = zoomFactor; 47 }, 48 49 /** 50 * @private 51 * Parse open PDF parameters. These parameters are mentioned in the url 52 * and specify actions to be performed when opening pdf files. 53 * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/ 54 * pdfs/pdf_open_parameters.pdf for details. 55 */ 56 parseOpenPDFParams_: function() { 57 var originalUrl = this.url_; 58 var paramIndex = originalUrl.search('#'); 59 if (paramIndex == -1) 60 return; 61 62 var paramTokens = originalUrl.substring(paramIndex + 1).split('&'); 63 var paramsDictionary = {}; 64 for (var i = 0; i < paramTokens.length; ++i) { 65 var keyValueSplit = paramTokens[i].split('='); 66 if (keyValueSplit.length != 2) 67 continue; 68 paramsDictionary[keyValueSplit[0]] = keyValueSplit[1]; 69 } 70 71 if ('page' in paramsDictionary) { 72 // |pageNumber| is 1-based, but goToPage() take a zero-based page number. 73 var pageNumber = parseInt(paramsDictionary['page']); 74 if (!isNaN(pageNumber)) 75 this.urlParams['page'] = pageNumber - 1; 76 } 77 78 if ('zoom' in paramsDictionary) 79 this.parseZoomParam_(paramsDictionary['zoom']); 80 } 81 }; 82