diff --git a/static/js/pandora/uploadPDFDialog.js b/static/js/pandora/uploadPDFDialog.js
new file mode 100644
index 000000000..efd51e309
--- /dev/null
+++ b/static/js/pandora/uploadPDFDialog.js
@@ -0,0 +1,109 @@
+// vim: et:ts=4:sw=4:sts=4:ft=javascript
+'use strict';
+
+pandora.ui.uploadPDFDialog = function(options) {
+
+ var cancelled = false,
+ file,
+ selectFile,
+ $cancelButton,
+ $closeButton,
+ $content = Ox.Element().css({margin: '16px'}),
+ $progress,
+ $status = $('
').css({padding: '4px', paddingTop: '8px'}),
+ that = Ox.Dialog({
+ buttons: [
+ $closeButton = Ox.Button({
+ id: 'close',
+ title: 'Close'
+ }).bindEvent({
+ click: function() {
+ that.triggerEvent('close');
+ }
+ }),
+ $cancelButton = Ox.Button({
+ id: 'cancel',
+ title: 'Cancel',
+ disabled: true
+ }).bindEvent({
+ click: function(data) {
+ cancelled = true;
+ pandora.$ui.upload && pandora.$ui.upload.abort();
+ $fileButton.show();
+ $cancelButton.hide()
+ $closeButton.show();
+ }
+ }),
+ ],
+ content: $content,
+ height: 128,
+ removeOnClose: true,
+ width: 368,
+ title: 'Upload PDF',
+ })
+ .bindEvent({
+ close: function(data) {
+ if (pandora.firefogg) {
+ pandora.firefogg.cancel();
+ delete pandora.firefogg;
+ }
+ that.close();
+ }
+ });
+
+ $content.append($status);
+ upload(options.file);
+
+ function resetProgress() {
+ $progress = Ox.Progressbar({
+ progress: 0,
+ showPercent: true,
+ showTime: true,
+ width: 304
+ });
+ $status.html('').append($progress);
+ }
+
+ function upload(file) {
+ resetProgress();
+ pandora.$ui.upload = pandora.chunkupload({
+ file: file,
+ url: '/api/upload/text/',
+ data: {
+ name: file.name,
+ id: options.id
+ },
+ progress: function(data) {
+ var progress = data.progress || 0;
+ $progress.options({progress: progress});
+ },
+ callback: function(result) {
+ if(result.progress == 1) {
+ Ox.Request.clearCache();
+ //fixme reload text view here
+ that.close();
+ } else {
+ $content.html("failed: " + result.responseText);
+ }
+ }
+ }).bindEvent({
+ progress: function(data) {
+ var progress = data.progress || 0;
+ $progress.options({progress: progress});
+ },
+ done: function(data) {
+ if(data.progress == 1) {
+ Ox.Request.clearCache();
+ pandora.$ui.mainPanel.replaceElement(1, pandora.$ui.rightPanel = pandora.ui.rightPanel());
+ that.close();
+ } else {
+ $content.html("failed: " + data.responseText);
+ }
+ }
+ });
+ }
+
+ return that;
+
+};
+