From 2a064259acbea1e5528c6e97a7264bf27f8e14d0 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Thu, 21 Feb 2013 14:09:23 +0000 Subject: [PATCH] add pdf.js --- pandora/text/models.py | 6 +- pandora/text/templates/pdf/viewer.html | 206 + pandora/text/views.py | 15 + pandora/urls.py | 3 +- static/js/pandora/textPanel.js | 30 +- static/pdf.js/compatibility.js | 430 + static/pdf.js/css/videopdf.css | 28 + static/pdf.js/debugger.js | 491 + static/pdf.js/images/annotation-check.svg | 10 + static/pdf.js/images/annotation-comment.svg | 15 + static/pdf.js/images/annotation-help.svg | 25 + static/pdf.js/images/annotation-insert.svg | 9 + static/pdf.js/images/annotation-key.svg | 10 + .../pdf.js/images/annotation-newparagraph.svg | 10 + static/pdf.js/images/annotation-note.svg | 41 + static/pdf.js/images/annotation-paragraph.svg | 15 + .../pdf.js/images/findbarButton-next-rtl.png | Bin 0 -> 371 bytes static/pdf.js/images/findbarButton-next.png | Bin 0 -> 381 bytes .../images/findbarButton-previous-rtl.png | Bin 0 -> 381 bytes .../pdf.js/images/findbarButton-previous.png | Bin 0 -> 371 bytes static/pdf.js/images/loading-icon.gif | Bin 0 -> 2545 bytes static/pdf.js/images/loading-small.png | Bin 0 -> 9025 bytes static/pdf.js/images/texture.png | Bin 0 -> 2459 bytes .../pdf.js/images/toolbarButton-bookmark.png | Bin 0 -> 244 bytes .../pdf.js/images/toolbarButton-download.png | Bin 0 -> 512 bytes .../images/toolbarButton-fullscreen.png | Bin 0 -> 491 bytes .../images/toolbarButton-menuArrows.png | Bin 0 -> 237 bytes .../pdf.js/images/toolbarButton-openFile.png | Bin 0 -> 417 bytes .../images/toolbarButton-pageDown-rtl.png | Bin 0 -> 558 bytes .../pdf.js/images/toolbarButton-pageDown.png | Bin 0 -> 353 bytes .../images/toolbarButton-pageUp-rtl.png | Bin 0 -> 426 bytes static/pdf.js/images/toolbarButton-pageUp.png | Bin 0 -> 344 bytes static/pdf.js/images/toolbarButton-print.png | Bin 0 -> 474 bytes static/pdf.js/images/toolbarButton-search.png | Bin 0 -> 503 bytes .../images/toolbarButton-sidebarToggle.png | Bin 0 -> 349 bytes .../images/toolbarButton-viewOutline.png | Bin 0 -> 300 bytes .../images/toolbarButton-viewThumbnail.png | Bin 0 -> 211 bytes static/pdf.js/images/toolbarButton-zoomIn.png | Bin 0 -> 228 bytes .../pdf.js/images/toolbarButton-zoomOut.png | Bin 0 -> 143 bytes static/pdf.js/l10n.js | 922 + static/pdf.js/links.js | 137 + static/pdf.js/locale/ar/viewer.properties | 111 + static/pdf.js/locale/ca/viewer.properties | 127 + static/pdf.js/locale/cs/viewer.properties | 59 + static/pdf.js/locale/da/viewer.properties | 107 + static/pdf.js/locale/de/viewer.properties | 123 + static/pdf.js/locale/en-US/viewer.properties | 124 + static/pdf.js/locale/es-MX/viewer.properties | 124 + static/pdf.js/locale/es/viewer.properties | 107 + static/pdf.js/locale/fi/viewer.properties | 108 + static/pdf.js/locale/fr/viewer.properties | 71 + static/pdf.js/locale/he/viewer.properties | 60 + static/pdf.js/locale/it/viewer.properties | 45 + static/pdf.js/locale/ja/viewer.properties | 124 + static/pdf.js/locale/locale.properties | 66 + static/pdf.js/locale/nl/viewer.properties | 124 + static/pdf.js/locale/pl/viewer.properties | 57 + static/pdf.js/locale/pt-BR/viewer.properties | 45 + static/pdf.js/locale/ro/viewer.properties | 56 + static/pdf.js/locale/ru/viewer.properties | 63 + static/pdf.js/locale/sr/viewer.properties | 56 + static/pdf.js/locale/sv/viewer.properties | 124 + static/pdf.js/locale/zh-CN/viewer.properties | 124 + static/pdf.js/locale/zh-TW/viewer.properties | 114 + static/pdf.js/minify.py | 3 + static/pdf.js/pdf.js | 38087 ++++++++++++++++ static/pdf.js/viewer.css | 1440 + static/pdf.js/viewer.js | 3294 ++ 68 files changed, 47339 insertions(+), 7 deletions(-) create mode 100644 pandora/text/templates/pdf/viewer.html create mode 100644 static/pdf.js/compatibility.js create mode 100644 static/pdf.js/css/videopdf.css create mode 100644 static/pdf.js/debugger.js create mode 100644 static/pdf.js/images/annotation-check.svg create mode 100644 static/pdf.js/images/annotation-comment.svg create mode 100644 static/pdf.js/images/annotation-help.svg create mode 100644 static/pdf.js/images/annotation-insert.svg create mode 100644 static/pdf.js/images/annotation-key.svg create mode 100644 static/pdf.js/images/annotation-newparagraph.svg create mode 100644 static/pdf.js/images/annotation-note.svg create mode 100644 static/pdf.js/images/annotation-paragraph.svg create mode 100644 static/pdf.js/images/findbarButton-next-rtl.png create mode 100644 static/pdf.js/images/findbarButton-next.png create mode 100644 static/pdf.js/images/findbarButton-previous-rtl.png create mode 100644 static/pdf.js/images/findbarButton-previous.png create mode 100644 static/pdf.js/images/loading-icon.gif create mode 100644 static/pdf.js/images/loading-small.png create mode 100644 static/pdf.js/images/texture.png create mode 100644 static/pdf.js/images/toolbarButton-bookmark.png create mode 100644 static/pdf.js/images/toolbarButton-download.png create mode 100644 static/pdf.js/images/toolbarButton-fullscreen.png create mode 100644 static/pdf.js/images/toolbarButton-menuArrows.png create mode 100644 static/pdf.js/images/toolbarButton-openFile.png create mode 100644 static/pdf.js/images/toolbarButton-pageDown-rtl.png create mode 100644 static/pdf.js/images/toolbarButton-pageDown.png create mode 100644 static/pdf.js/images/toolbarButton-pageUp-rtl.png create mode 100644 static/pdf.js/images/toolbarButton-pageUp.png create mode 100644 static/pdf.js/images/toolbarButton-print.png create mode 100644 static/pdf.js/images/toolbarButton-search.png create mode 100644 static/pdf.js/images/toolbarButton-sidebarToggle.png create mode 100644 static/pdf.js/images/toolbarButton-viewOutline.png create mode 100644 static/pdf.js/images/toolbarButton-viewThumbnail.png create mode 100644 static/pdf.js/images/toolbarButton-zoomIn.png create mode 100644 static/pdf.js/images/toolbarButton-zoomOut.png create mode 100644 static/pdf.js/l10n.js create mode 100644 static/pdf.js/links.js create mode 100644 static/pdf.js/locale/ar/viewer.properties create mode 100644 static/pdf.js/locale/ca/viewer.properties create mode 100644 static/pdf.js/locale/cs/viewer.properties create mode 100644 static/pdf.js/locale/da/viewer.properties create mode 100644 static/pdf.js/locale/de/viewer.properties create mode 100644 static/pdf.js/locale/en-US/viewer.properties create mode 100644 static/pdf.js/locale/es-MX/viewer.properties create mode 100644 static/pdf.js/locale/es/viewer.properties create mode 100644 static/pdf.js/locale/fi/viewer.properties create mode 100644 static/pdf.js/locale/fr/viewer.properties create mode 100644 static/pdf.js/locale/he/viewer.properties create mode 100644 static/pdf.js/locale/it/viewer.properties create mode 100644 static/pdf.js/locale/ja/viewer.properties create mode 100644 static/pdf.js/locale/locale.properties create mode 100644 static/pdf.js/locale/nl/viewer.properties create mode 100644 static/pdf.js/locale/pl/viewer.properties create mode 100644 static/pdf.js/locale/pt-BR/viewer.properties create mode 100644 static/pdf.js/locale/ro/viewer.properties create mode 100644 static/pdf.js/locale/ru/viewer.properties create mode 100644 static/pdf.js/locale/sr/viewer.properties create mode 100644 static/pdf.js/locale/sv/viewer.properties create mode 100644 static/pdf.js/locale/zh-CN/viewer.properties create mode 100644 static/pdf.js/locale/zh-TW/viewer.properties create mode 100644 static/pdf.js/minify.py create mode 100644 static/pdf.js/pdf.js create mode 100644 static/pdf.js/viewer.css create mode 100644 static/pdf.js/viewer.js diff --git a/pandora/text/models.py b/pandora/text/models.py index dedc9dae..af5c5c14 100644 --- a/pandora/text/models.py +++ b/pandora/text/models.py @@ -5,6 +5,7 @@ import os import re import subprocess from glob import glob +from urllib import quote from django.db import models from django.db.models import Max @@ -53,7 +54,10 @@ class Text(models.Model): return self.get_id() def get_absolute_url(self): - return '/texts/%s' % self.get_id() + return '/texts/%s' % quote(self.get_id()) + + def get_absolute_pdf_url(self): + return '/texts/%s/text.pdf' % quote(self.get_id()) def get_id(self): return u'%s:%s' % (self.user.username, self.name) diff --git a/pandora/text/templates/pdf/viewer.html b/pandora/text/templates/pdf/viewer.html new file mode 100644 index 00000000..dfea6593 --- /dev/null +++ b/pandora/text/templates/pdf/viewer.html @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+ +
+ +
+ +
+ +
+ + + + +
+
+ + + + + + + + + + + + Current View +
+
+
+
+ +
+ +
+ + + +
+
+
+
+
+ + + + + + + + +
+
+
+ +
+
+
+
+ + +
+ +
+
+ + diff --git a/pandora/text/views.py b/pandora/text/views.py index f1d1cdf3..8e4444c6 100644 --- a/pandora/text/views.py +++ b/pandora/text/views.py @@ -12,6 +12,8 @@ from ox.django.shortcuts import render_to_json_response, get_object_or_404_json, from django import forms from django.db.models import Sum, Max from django.conf import settings +from django.shortcuts import render_to_response +from django.template import RequestContext from item import utils import models @@ -391,6 +393,19 @@ class ChunkForm(forms.Form): chunkId = forms.IntegerField(required=False) done = forms.IntegerField(required=False) +def pdf_viewer(request, id): + text = get_text_or_404_json(id) + if text.type == 'pdf' and text.file and not text.uploading: + context = RequestContext(request, { + 'editable': json.dumps(text.editable(request.user)), + 'links': json.dumps(text.links), + 'settings': settings, + 'url': text.get_absolute_pdf_url() + }) + return render_to_response('pdf/viewer.html', context) + response = json_response(status=404, text='file not found') + return render_to_json_response(response) + def pdf(request, id): text = get_text_or_404_json(id) if text.type == 'pdf' and text.file and not text.uploading: diff --git a/pandora/urls.py b/pandora/urls.py index 7763c8db..e2ca5e3b 100644 --- a/pandora/urls.py +++ b/pandora/urls.py @@ -30,7 +30,8 @@ urlpatterns = patterns('', (r'^resetUI$', 'user.views.reset_ui'), (r'^list/(?P.*?)/icon(?P\d*).jpg$', 'itemlist.views.icon'), (r'^text/(?P.*?)/icon(?P\d*).jpg$', 'text.views.icon'), - (r'^text/(?P.*?)/text.pdf$', 'text.views.pdf'), + (r'^texts/(?P.*?)/text.pdf$', 'text.views.pdf'), + (r'^texts/(?P.*?)/text.pdf.html$', 'text.views.pdf_viewer'), (r'^robots.txt$', serve_static_file, {'location': os.path.join(settings.STATIC_ROOT, 'robots.txt'), 'content_type': 'text/plain'}), (r'^favicon.ico$', serve_static_file, {'location': os.path.join(settings.STATIC_ROOT, 'png/icon.16.png'), 'content_type': 'image/x-icon'}), (r'^opensearch.xml$', 'app.views.opensearch_xml'), diff --git a/static/js/pandora/textPanel.js b/static/js/pandora/textPanel.js index 1646c5c7..29b2c253 100644 --- a/static/js/pandora/textPanel.js +++ b/static/js/pandora/textPanel.js @@ -123,8 +123,8 @@ pandora.ui.textPanel = function() { }) .appendTo($toolbar); } else { - $uploadButton = Ox.Button({ - title: 'upload', + $uploadButton = Ox.FileButton({ + image: 'upload', tooltip: 'Upload PDF', type: 'image' }) @@ -132,6 +132,16 @@ pandora.ui.textPanel = function() { float: 'left', margin: '4px 2px 4px 4px' }) + .bindEvent({ + click: function(data) { + if(data.files.length) { + pandora.$ui.uploadPDFDialog = pandora.ui.uploadPDFDialog({ + file: data.files[0], + id: pandora.user.ui.text + }).open(); + } + } + }) .appendTo($toolbar); } } @@ -270,9 +280,19 @@ pandora.ui.textHTML = function(text, tags) { pandora.ui.textPDF = function(text) { var that = Ox.Element(); + if (text.uploaded) { + $('