diff --git a/extensions/b2g/viewer.js b/extensions/b2g/viewer.js index 94bb77caa..e93d503b5 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 7eef28360..f64c438cf 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 3a6b4f2c6..2c5f96ea3 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 bf9cedf93..bd4a0f2a4 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 9ac37d441..a2757c637 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 9980b7ebf..22af0e5f7 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 9b681ba9f..5bb0592ad 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 8e4441f2e..764c0af09 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