[Pkg-javascript-commits] [pdf.js] 228/414: Move the `getFileName` helper function to the core

David Prévot taffit at moszumanska.debian.org
Tue Jun 28 17:12:25 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository pdf.js.

commit 0351c7eff49ba2357575a5bf1084059c98bb91a8
Author: Tim van der Meij <timvandermeij at gmail.com>
Date:   Mon Feb 15 14:46:41 2016 +0100

    Move the `getFileName` helper function to the core
    
    This is required to be able to use it in the annotation display code,
    where we now apply it to sanitize the filename of the FileAttachment
    annotation. The PDF file from https://bugzilla.mozilla.org/show_bug.cgi?id=1230933 has shown that some PDF generators include the path of the file rather than the filename, which causes filenames with weird initial characters. PDF viewers handle this differently (for example Foxit Reader just replaces forward slashes with spaces), but we think it's better to only show the filename as intended.
    
    Additionally we add unit tests for the `getFilenameFromUrl` helper
    function.
---
 extensions/b2g/viewer.js        |  2 +-
 src/display/annotation_layer.js |  3 ++-
 src/shared/util.js              | 12 ++++++++++++
 test/unit/util_spec.js          | 17 ++++++++++++++++-
 web/pdf_attachment_view.js      |  4 ++--
 web/pdf_viewer.component.js     |  4 +---
 web/ui_utils.js                 |  9 ---------
 web/viewer.js                   | 20 ++++++++++----------
 8 files changed, 44 insertions(+), 27 deletions(-)

diff --git a/extensions/b2g/viewer.js b/extensions/b2g/viewer.js
index 94bb77c..e93d503 100644
--- a/extensions/b2g/viewer.js
+++ b/extensions/b2g/viewer.js
@@ -88,7 +88,7 @@ var PDFViewerApplication = {
 
   setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) {
     this.url = url;
-    var title = PDFJS.getFileName(url) || url;
+    var title = PDFJS.getFilenameFromUrl(url) || url;
     try {
       title = decodeURIComponent(title);
     } catch (e) {
diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js
index 7eef283..f64c438 100644
--- a/src/display/annotation_layer.js
+++ b/src/display/annotation_layer.js
@@ -32,6 +32,7 @@ var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType;
 var AnnotationType = sharedUtil.AnnotationType;
 var Util = sharedUtil.Util;
 var addLinkAttributes = sharedUtil.addLinkAttributes;
+var getFilenameFromUrl = sharedUtil.getFilenameFromUrl;
 var warn = sharedUtil.warn;
 var CustomStyle = displayDOMUtils.CustomStyle;
 
@@ -731,7 +732,7 @@ var FileAttachmentAnnotationElement = (
   function FileAttachmentAnnotationElement(parameters) {
     AnnotationElement.call(this, parameters, true);
 
-    this.filename = parameters.data.file.filename;
+    this.filename = getFilenameFromUrl(parameters.data.file.filename);
     this.content = parameters.data.file.content;
   }
 
diff --git a/src/shared/util.js b/src/shared/util.js
index 3a6b4f2..2c5f96e 100644
--- a/src/shared/util.js
+++ b/src/shared/util.js
@@ -284,6 +284,17 @@ var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {
   font: 'font'
 };
 
+// Gets the file name from a given URL.
+function getFilenameFromUrl(url) {
+  var anchor = url.indexOf('#');
+  var query = url.indexOf('?');
+  var end = Math.min(
+    anchor > 0 ? anchor : url.length,
+    query > 0 ? query : url.length);
+  return url.substring(url.lastIndexOf('/', end) + 1, end);
+}
+PDFJS.getFilenameFromUrl = getFilenameFromUrl;
+
 // Combines two URLs. The baseUrl shall be absolute URL. If the url is an
 // absolute URL, it will be returned as is.
 function combineUrl(baseUrl, url) {
@@ -2367,6 +2378,7 @@ exports.combineUrl = combineUrl;
 exports.createPromiseCapability = createPromiseCapability;
 exports.deprecated = deprecated;
 exports.error = error;
+exports.getFilenameFromUrl = getFilenameFromUrl;
 exports.getLookupTableFactory = getLookupTableFactory;
 exports.info = info;
 exports.isArray = isArray;
diff --git a/test/unit/util_spec.js b/test/unit/util_spec.js
index bf9cedf..bd4a0f2 100644
--- a/test/unit/util_spec.js
+++ b/test/unit/util_spec.js
@@ -1,10 +1,25 @@
 /* globals expect, it, describe, combineUrl, Dict, isDict, Name, PDFJS,
            stringToPDFString, isExternalLinkTargetSet, LinkTarget,
-           removeNullCharacters */
+           removeNullCharacters, getFilenameFromUrl */
 
 'use strict';
 
 describe('util', function() {
+  describe('getFilenameFromUrl', function() {
+    it('should get the filename from an absolute URL', function() {
+      var url = 'http://server.org/filename.pdf';
+      var result = getFilenameFromUrl(url);
+      var expected = 'filename.pdf';
+      expect(result).toEqual(expected);
+    });
+
+    it('should get the filename from a relative URL', function() {
+      var url = '../../filename.pdf';
+      var result = getFilenameFromUrl(url);
+      var expected = 'filename.pdf';
+      expect(result).toEqual(expected);
+    });
+  });
 
   describe('combineUrl', function() {
     it('absolute url with protocol stays as is', function() {
diff --git a/web/pdf_attachment_view.js b/web/pdf_attachment_view.js
index 9ac37d4..a2757c6 100644
--- a/web/pdf_attachment_view.js
+++ b/web/pdf_attachment_view.js
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/* globals getFileName, PDFJS */
+/* globals PDFJS */
 
 'use strict';
 
@@ -84,7 +84,7 @@ var PDFAttachmentView = (function PDFAttachmentViewClosure() {
 
       for (var i = 0; i < attachmentsCount; i++) {
         var item = attachments[names[i]];
-        var filename = getFileName(item.filename);
+        var filename = PDFJS.getFilenameFromUrl(item.filename);
         var div = document.createElement('div');
         div.className = 'attachmentsItem';
         var button = document.createElement('button');
diff --git a/web/pdf_viewer.component.js b/web/pdf_viewer.component.js
index 9980b7e..22af0e5 100644
--- a/web/pdf_viewer.component.js
+++ b/web/pdf_viewer.component.js
@@ -15,8 +15,7 @@
 /*jshint globalstrict: false */
 /* globals PDFJS, PDFViewer, PDFPageView, TextLayerBuilder, PDFLinkService,
            DefaultTextLayerFactory, AnnotationLayerBuilder, PDFHistory,
-           DefaultAnnotationLayerFactory, getFileName, DownloadManager,
-           ProgressBar */
+           DefaultAnnotationLayerFactory, DownloadManager, ProgressBar */
 
 // Initializing PDFJS global object (if still undefined)
 if (typeof PDFJS === 'undefined') {
@@ -41,7 +40,6 @@ if (typeof PDFJS === 'undefined') {
   PDFJS.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
   PDFJS.PDFHistory = PDFHistory;
 
-  PDFJS.getFileName = getFileName;
   PDFJS.DownloadManager = DownloadManager;
   PDFJS.ProgressBar = ProgressBar;
 }).call((typeof window === 'undefined') ? this : window);
diff --git a/web/ui_utils.js b/web/ui_utils.js
index 9b681ba..5bb0592 100644
--- a/web/ui_utils.js
+++ b/web/ui_utils.js
@@ -23,15 +23,6 @@ var MAX_AUTO_SCALE = 1.25;
 var SCROLLBAR_PADDING = 40;
 var VERTICAL_PADDING = 5;
 
-function getFileName(url) {
-  var anchor = url.indexOf('#');
-  var query = url.indexOf('?');
-  var end = Math.min(
-    anchor > 0 ? anchor : url.length,
-    query > 0 ? query : url.length);
-  return url.substring(url.lastIndexOf('/', end) + 1, end);
-}
-
 /**
  * Returns scale factor for the canvas. It makes sense for the HiDPI displays.
  * @return {Object} The object with horizontal (sx) and vertical (sy)
diff --git a/web/viewer.js b/web/viewer.js
index 8e4441f..764c0af 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -12,15 +12,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar,
-           DownloadManager, getFileName, getPDFFileNameFromURL,
-           PDFHistory, Preferences, SidebarView, ViewHistory, Stats,
-           PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar,
-           PasswordPrompt, PDFPresentationMode, PDFDocumentProperties, HandTool,
-           Promise, PDFLinkService, PDFOutlineView, PDFAttachmentView,
-           OverlayManager, PDFFindController, PDFFindBar, PDFViewer,
-           PDFRenderingQueue, PresentationModeState, parseQueryString,
-           RenderingStates, UNKNOWN_SCALE, DEFAULT_SCALE_VALUE,
+/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar, DownloadManager,
+           getPDFFileNameFromURL, PDFHistory, Preferences, SidebarView,
+           ViewHistory, Stats, PDFThumbnailViewer, URL, noContextMenuHandler,
+           SecondaryToolbar, PasswordPrompt, PDFPresentationMode,
+           PDFDocumentProperties, HandTool, Promise, PDFLinkService,
+           PDFOutlineView, PDFAttachmentView, OverlayManager,
+           PDFFindController, PDFFindBar, PDFViewer, PDFRenderingQueue,
+           PresentationModeState, parseQueryString, RenderingStates,
+           UNKNOWN_SCALE, DEFAULT_SCALE_VALUE,
            IGNORE_CURRENT_POSITION_ON_ZOOM: true */
 
 'use strict';
@@ -486,7 +486,7 @@ var PDFViewerApplication = {
   setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) {
     this.url = url;
     try {
-      this.setTitle(decodeURIComponent(getFileName(url)) || url);
+      this.setTitle(decodeURIComponent(PDFJS.getFilenameFromUrl(url)) || url);
     } catch (e) {
       // decodeURIComponent may throw URIError,
       // fall back to using the unprocessed url in that case

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git



More information about the Pkg-javascript-commits mailing list