• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
12function OpenPDFParamsParser(url) {
13  this.url_ = url;
14  this.urlParams = {};
15  this.parseOpenPDFParams_();
16}
17
18OpenPDFParamsParser.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