diff --git a/web/document_attachments_view.js b/web/document_attachments_view.js
deleted file mode 100644
index fd015040cfadad..00000000000000
--- a/web/document_attachments_view.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
-/* Copyright 2012 Mozilla Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* globals DownloadManager, getFileName */
-
-'use strict';
-
-var DocumentAttachmentsView = function documentAttachmentsView(options) {
- var attachments = options.attachments;
- var attachmentsView = options.attachmentsView;
- while (attachmentsView.firstChild) {
- attachmentsView.removeChild(attachmentsView.firstChild);
- }
-
- if (!attachments) {
- return;
- }
-
- function bindItemLink(domObj, item) {
- domObj.onclick = function documentAttachmentsViewOnclick(e) {
- var downloadManager = new DownloadManager();
- downloadManager.downloadData(item.content, getFileName(item.filename),
- '');
- return false;
- };
- }
-
- var names = Object.keys(attachments).sort(function(a,b) {
- return a.toLowerCase().localeCompare(b.toLowerCase());
- });
- for (var i = 0, ii = names.length; i < ii; i++) {
- var item = attachments[names[i]];
- var div = document.createElement('div');
- div.className = 'attachmentsItem';
- var button = document.createElement('button');
- bindItemLink(button, item);
- button.textContent = getFileName(item.filename);
- div.appendChild(button);
- attachmentsView.appendChild(div);
- }
-};
diff --git a/web/pdf_attachment_view.js b/web/pdf_attachment_view.js
new file mode 100644
index 00000000000000..ad1b7dfe4e6d23
--- /dev/null
+++ b/web/pdf_attachment_view.js
@@ -0,0 +1,87 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* globals getFileName */
+
+'use strict';
+
+/**
+ * @typedef {Object} PDFAttachmentViewOptions
+ * @property {HTMLDivElement} container - The viewer element.
+ * @property {Array} attachments - An array of attachment objects.
+ * @property {DownloadManager} downloadManager - The download manager.
+ */
+
+/**
+ * @class
+ */
+var PDFAttachmentView = (function PDFAttachmentViewClosure() {
+ /**
+ * @constructs PDFAttachmentView
+ * @param {PDFAttachmentViewOptions} options
+ */
+ function PDFAttachmentView(options) {
+ this.container = options.container;
+ this.attachments = options.attachments;
+ this.downloadManager = options.downloadManager;
+ }
+
+ PDFAttachmentView.prototype = {
+ reset: function PDFAttachmentView_reset() {
+ var container = this.container;
+ while (container.firstChild) {
+ container.removeChild(container.firstChild);
+ }
+ },
+
+ /**
+ * @private
+ */
+ _bindLink: function PDFAttachmentView_bindLink(button, content, filename) {
+ button.onclick = function downloadFile(e) {
+ this.downloadManager.downloadData(content, filename, '');
+ return false;
+ }.bind(this);
+ },
+
+ render: function PDFAttachmentView_render() {
+ var attachments = this.attachments;
+
+ this.reset();
+
+ if (!attachments) {
+ return;
+ }
+
+ var names = Object.keys(attachments).sort(function(a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+ for (var i = 0, len = names.length; i < len; i++) {
+ var item = attachments[names[i]];
+ var filename = getFileName(item.filename);
+ var div = document.createElement('div');
+ div.className = 'attachmentsItem';
+ var button = document.createElement('button');
+ this._bindLink(button, item.content, filename);
+ button.textContent = filename;
+ div.appendChild(button);
+ this.container.appendChild(div);
+ }
+ }
+ };
+
+ return PDFAttachmentView;
+})();
diff --git a/web/viewer.html b/web/viewer.html
index 1a6a406cb9f697..f3c7ea0d9638e7 100644
--- a/web/viewer.html
+++ b/web/viewer.html
@@ -76,7 +76,7 @@
-
+
diff --git a/web/viewer.js b/web/viewer.js
index ac3a49079f7b89..4c84921623d80a 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -19,7 +19,7 @@
PDFHistory, Preferences, SidebarView, ViewHistory, Stats,
PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar,
PasswordPrompt, PresentationMode, HandTool, Promise,
- DocumentProperties, PDFOutlineView, DocumentAttachmentsView,
+ DocumentProperties, PDFOutlineView, PDFAttachmentView,
OverlayManager, PDFFindController, PDFFindBar, getVisibleElements,
watchScroll, PDFViewer, PDFRenderingQueue, PresentationModeState,
RenderingStates, DEFAULT_SCALE, UNKNOWN_SCALE,
@@ -87,6 +87,7 @@ var mozL10n = document.mozL10n || document.webL10n;
//#include pdf_viewer.js
//#include pdf_thumbnail_viewer.js
//#include pdf_outline_view.js
+//#include pdf_attachment_view.js
var PDFViewerApplication = {
initialBookmark: document.location.hash.substring(1),
@@ -984,14 +985,16 @@ var PDFViewerApplication = {
}
});
pdfDocument.getAttachments().then(function(attachments) {
- var attachmentsView = document.getElementById('attachmentsView');
- self.attachments = new DocumentAttachmentsView({
+ var container = document.getElementById('attachmentsView');
+ self.attachments = new PDFAttachmentView({
+ container: container,
attachments: attachments,
- attachmentsView: attachmentsView
+ downloadManager: new DownloadManager()
});
+ self.attachments.render();
document.getElementById('viewAttachments').disabled = !attachments;
- if (!attachments && !attachmentsView.classList.contains('hidden')) {
+ if (!attachments && !container.classList.contains('hidden')) {
self.switchSidebarView('thumbs');
}
if (attachments &&
@@ -1392,8 +1395,6 @@ var PDFViewerApplication = {
window.PDFView = PDFViewerApplication; // obsolete name, using it as an alias
//#endif
-//#include document_attachments_view.js
-
//#if CHROME
//(function rewriteUrlClosure() {
// // Run this code outside DOMContentLoaded to make sure that the URL