diff --git a/admin.py b/admin.py index cf3c291..84345b8 100644 --- a/admin.py +++ b/admin.py @@ -16,13 +16,13 @@ class PageAdmin(admin.ModelAdmin): order_by = ['document', 'page_num'] class Media: - js = ("lib/underscore.js", "lib/backbone.js",) + js = ("lib/underscore.js", "lib/backbone.js", 'js/pdfformfiller/pdfformfiller.js') def get_urls(self): urls = super(PageAdmin, self).get_urls() my_urls = patterns('', url(r'^(?P.*)/preview/$', self.admin_site.admin_view(self.preview), name='preview'), - url(r'^(?P.*)/json/$', self.admin_site.admin_view(self.json, name='json'), + url(r'^(?P.*)/json/$', self.admin_site.admin_view(self.json), name='json'), ) return my_urls + urls diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7ff0d75 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pypoppler diff --git a/static/js/pdfformfiller/pdfformfiller.js b/static/js/pdfformfiller/pdfformfiller.js new file mode 100644 index 0000000..fc3901c --- /dev/null +++ b/static/js/pdfformfiller/pdfformfiller.js @@ -0,0 +1 @@ +console.log('pdfformfiller loaded!'); diff --git a/urls.py b/urls.py index 9fe1e2d..553d433 100644 --- a/urls.py +++ b/urls.py @@ -1,12 +1,23 @@ -from django.conf.urls import patterns, url +from django.conf.urls import patterns, url, include +import backbone + from pdfformfiller.views import editor +backbone.autodiscover() + urlpatterns = patterns('pdfformfiller.views', url(r'^(?P.*)/edit/$', editor.PDFFormFillerEditor.as_view(), name='pdfformfiller-edit'), ) -urlpatterns += patterns('pdfformfiller.views.json', - url(r'^json/(?P\d+)/$', 'get_pages', name='pdfformfiller-json-get-pages'), - url(r'^json/(?P\d+)/(?P\d+)/$', 'get_page', name='pdfformfiller-json-get-page'), +urlpatterns = patterns('pdfformfiller.views.api', + url(r'^api/document/$', 'document', name='pdfformfiller_api_document'), + url(r'^api/document/(?P\d+)/$', 'document_detail', name='pdfformfiller_api_document_detail'), + url(r'^api/document/(?P\d+)/pages/$', 'document_pages', name='pdfformfiller_api_document_pages'), + url(r'^api/page/$', 'page', name='pdfformfiller_api_page'), + url(r'^api/page/(?P\d+)/$', 'page_detail', name='pdfformfiller_api_page_detail'), + url(r'^api/page/(?P\d+)/fields/$', 'page_fields', name='pdfformfiller_api_page_fields'), ) + +urlpatterns += patterns('', + (r'^backbone/', include(backbone.site.urls)),) diff --git a/views/api.py b/views/api.py new file mode 100644 index 0000000..7bb55a4 --- /dev/null +++ b/views/api.py @@ -0,0 +1,104 @@ +import json + +from django.http import HttpResponse +from django.utils.encoding import is_protected_type +from django.db.models.fields.files import File + +from pdfformfiller import models + +def json_response(data): + response = HttpResponse(json.dumps(data)) + response['Content-Type'] = 'application/json' + return response + + +def extract_fields(model): + result = {} + for field in model._meta.fields: + value = result[field.name] = field._get_val_from_obj(model) + if isinstance(value, File): + value = value.url + + result[field.name] = value + return result + + +""" +def pages(request, page_id=None): + context = {} + pages = [] + + if doc_id: + pages = models.Page.objects.get(pk = page_id) + elif request.GET('document', None): + doc_id = request.GET('document') + pages = models.Page.objects.filter(document__pk = doc_id) + else: + pages = [] + + for page in pages: + pages.append(extract_fields(page)) #, ['id', 'document', )) + + context['pages'] = pages + + return json_response(context) + + +def fields(request, page_id=None): + + page = models.Page.objects.get(document__pk = pdf, + page_num = page_num) + + fields = page.formfield_set.all() + + context = {} + #context['page'] = extract_fields(page) + context['page']['fields'] = map(extract_fields, fields) + + return json_response(context) + +""" + +def document(request): + documents = models.Document.objects.all().values('id','name') + return json_response(list(documents)) + + +def document_detail(request, id): + document = models.Document.objects.get(pk=id) + context = extract_fields(document) + return json_response(context) + + +def page(request): + pages = models.Page.objects.all() + context = [extract_fields(p) for p in pages] + return json_response(context) + + +def page_detail(request, id): + page = models.Page.objects.get(pk=id) + context = extract_fields(page) + return json_response(context) + + +def document_pages(request, id): + pages = models.Page.objects.filter(document__pk=id) + context = [extract_fields(page) for page in pages] + return json_response(context) + +def field(request): + fields = models.FormField.objects.all() + context = [extract_fields(f) for f in fields] + return json_response(context) + +def field_detail(request, id): + field = models.FormField.objects.get(pk=id) + context = extract_fields(field) + return json_response(context) + +def page_fields(request, id): + fields = models.FormField.objects.filter(page__pk=id) + context = [extract_fields(f) for f in fields] + return json_response(context) + diff --git a/views/json.py b/views/json.py deleted file mode 100644 index 625ae04..0000000 --- a/views/json.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.http import HttpResponse - -def json_response(context): - response = HttpResponse(context) - response['Content-Type'] = 'application/pdf' - return response - -