Skip to content
This repository has been archived by the owner on Feb 16, 2023. It is now read-only.

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas Winkler committed Sep 13, 2018
2 parents 0209b71 + 909586b commit 8371c23
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 105 deletions.
11 changes: 5 additions & 6 deletions src/documents/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,12 @@ def select_action(modeladmin, request, queryset, title, action, modelclass, succ
media=modeladmin.media,
action=action,
objects=modelclass.objects.all(),
itemname=model_ngettext(modelclass,1)
itemname=model_ngettext(modelclass, 1)
)

request.current_app = modeladmin.admin_site.name

return TemplateResponse(request,
"admin/%s/%s/select_object.html" % (app_label, opts.model_name)
, context)
return TemplateResponse(request, "admin/%s/%s/select_object.html" % (app_label, opts.model_name), context)


def simple_action(modeladmin, request, queryset, success_message="", document_action=None, queryset_action=None):
Expand All @@ -70,6 +68,7 @@ def simple_action(modeladmin, request, queryset, success_message="", document_ac
"count": n, "items": model_ngettext(modeladmin.opts, n)
}, messages.SUCCESS)

# Return None to display the change list page again.
return None


Expand Down Expand Up @@ -99,7 +98,7 @@ def set_correspondent_on_selected(modeladmin, request, queryset):
action="set_correspondent_on_selected",
modelclass=Correspondent,
success_message="Successfully set correspondent %(selected_object)s on %(count)d %(items)s.",
queryset_action=lambda queryset, correspondent: queryset.update(correspondent=correspondent))
queryset_action=lambda qs, correspondent: qs.update(correspondent=correspondent))
set_correspondent_on_selected.short_description = "Set correspondent on selected documents"


Expand All @@ -116,7 +115,7 @@ def set_document_type_on_selected(modeladmin, request, queryset):
action="set_document_type_on_selected",
modelclass=DocumentType,
success_message="Successfully set document type %(selected_object)s on %(count)d %(items)s.",
queryset_action=lambda queryset, document_type: queryset.update(document_type=document_type))
queryset_action=lambda qs, document_type: qs.update(document_type=document_type))
set_document_type_on_selected.short_description = "Set document type on selected documents"


Expand Down
12 changes: 7 additions & 5 deletions src/documents/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,10 @@ def __init__(self, *args, **kwargs):

def field_choices(self, field, request, model_admin):
lookups = []
date_limit = datetime.now() - timedelta(days=365*settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS)
for c in Correspondent.objects.filter(documents__created__gte = date_limit).distinct():
lookups.append( (c.id, c.name) )
if settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS and settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS > 0:
date_limit = datetime.now() - timedelta(days=365*settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS)
for c in Correspondent.objects.filter(documents__created__gte=date_limit).distinct():
lookups.append((c.id, c.name))
return lookups


Expand Down Expand Up @@ -153,6 +154,7 @@ def document_count(self, obj):
return obj.document_count
document_count.admin_order_field = "document_count"


class DocumentAdmin(CommonAdmin):

class Media:
Expand Down Expand Up @@ -199,10 +201,10 @@ def change_view(self, request, object_id=None, form_url='', extra_context=None):
extra_context['download_url'] = doc.download_url
extra_context['file_type'] = doc.file_type
if self.document_queue and object_id and int(object_id) in self.document_queue:
#There is a queue of documents
# There is a queue of documents
current_index = self.document_queue.index(int(object_id))
if current_index < len(self.document_queue) - 1:
#... and there are still documents in the queue
# ... and there are still documents in the queue
extra_context['next_object'] = self.document_queue[current_index + 1]
return super(DocumentAdmin, self).change_view(
request, object_id, form_url, extra_context=extra_context,
Expand Down
2 changes: 1 addition & 1 deletion src/documents/classifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def train(self):
def classify_document(self, document, classify_correspondent=False, classify_document_type=False, classify_tags=False, replace_tags=False):
X = self.data_vectorizer.transform([preprocess_content(document.content)])

update_fields=()
update_fields = ()

if classify_correspondent and self.correspondent_classifier is not None:
y_correspondent = self.correspondent_classifier.predict(X)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import pickle

from django.core.management.base import BaseCommand
from documents.classifier import DocumentClassifier
from documents.classifier import DocumentClassifier
from paperless import settings
from ...mixins import Renderable

Expand Down
25 changes: 13 additions & 12 deletions src/documents/templates/admin/documents/document/change_form.html
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

{{ block.super }}

{% if file_type in "pdf jpg png" %}
{% if file_type in "asd" %}

<div id="change_form_twocolumn_parent">
<div id="change_form_form_parent"></div>
Expand All @@ -23,16 +23,17 @@
django.jQuery("#content-main").append(django.jQuery("#change_form_twocolumn_parent"));
</script>

{% if next_object %}
<script type="text/javascript">//<![CDATA[
(function($){
$('<input type="submit" value="Save and edit next" name="_saveandeditnext" />')
.prependTo('div.submit-row');
$('<input type="hidden" value="{{next_object}}" name="_next_object" />')
.prependTo('div.submit-row');
})(django.jQuery);
//]]></script>
{% endif %}
{% endif %}

{% if next_object %}
<script type="text/javascript">//<![CDATA[
(function($){
$('<input type="submit" value="Save and edit next" name="_saveandeditnext" />')
.prependTo('div.submit-row');
$('<input type="hidden" value="{{next_object}}" name="_next_object" />')
.prependTo('div.submit-row');
})(django.jQuery);
//]]></script>
{% endif %}

{% endblock content %}
Expand All @@ -46,4 +47,4 @@
django.jQuery(".field-created input").first().attr("type", "date")
</script>

{% endblock footer %}
{% endblock footer %}
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@
<input type="hidden" name="action" value="{{action}}"/>
<input type="hidden" name="post" value="yes"/>
<p>
<input type="submit" value="{% trans " Confirm" %}" />
<input type="submit" value="{% trans "Confirm" %}" />
<a href="#" class="button cancel-link">{% trans "Go back" %}</a>
</p>
</div>
</form>
{% endblock %}
{% endblock %}
1 change: 0 additions & 1 deletion src/documents/templates/admin/documents/document/viewers/viewer_image.html
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
<img src="{{download_url}}" style="max-width: 100%">

163 changes: 87 additions & 76 deletions src/documents/templates/admin/documents/document/viewers/viewer_pdf.html
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -3,117 +3,128 @@
<div>
<input id="prev" value="Previous" class="default" type="button">
<input id="next" value="Next" class="default" type="button">
&nbsp; &nbsp;
<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
&nbsp; &nbsp;
&nbsp; &nbsp;
<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
&nbsp; &nbsp;
<input id="zoomin" value="+" class="default" type="button">
<input id="zoomout" value="-" class="default" type="button">
</div>

<div style="width: 100%; overflow: auto;">
<canvas id="the-canvas"></canvas>
</div>
<canvas id="the-canvas"></canvas>
</div>
<script type="text/javascript" src="{% static 'documents/js/pdf.js' %}"></script>
<script type="text/javascript" src="{% static 'documents/js/pdf.worker.js' %}"></script>
{# Load and display PDF document#}
<script>

{# Load and display PDF document#}
<script>
var pdfjsLib = window['pdfjs-dist/build/pdf'];

var pdfDoc = null,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 1.0,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 1.0,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');

/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function () {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function () {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
document.getElementById('page_num').textContent = num;
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
}

/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
pageNumPending = num;
} else {
renderPage(num);
renderPage(num);
}
}
/**
* Displays previous page.
*/
function onPrevPage() {
}

/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum <= 1) {
return;
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays next page.
*/
function onNextPage() {
}

document.getElementById('prev').addEventListener('click', onPrevPage);

/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
/**
* Displays next page.
*/
function onZoomIn() {
}

document.getElementById('next').addEventListener('click', onNextPage);

/**
* Displays next page.
*/
function onZoomIn() {
scale *= 1.2;
queueRenderPage(pageNum);
}
document.getElementById('zoomin').addEventListener('click', onZoomIn);
/**
* Displays next page.
*/
function onZoomOut() {
}

document.getElementById('zoomin').addEventListener('click', onZoomIn);

/**
* Displays next page.
*/
function onZoomOut() {
scale /= 1.2;
queueRenderPage(pageNum);
}
document.getElementById('zoomout').addEventListener('click', onZoomOut);
/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument("{{download_url}}").then(function (pdfDoc_) {
}

document.getElementById('zoomout').addEventListener('click', onZoomOut);

/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument("{{download_url}}").then(function (pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
// Initial/first page rendering
renderPage(pageNum);
});
</script>
});
</script>

6 changes: 5 additions & 1 deletion src/paperless/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,4 +298,8 @@ def __get_boolean(key, default="NO"):
# Specify the default date order (for autodetected dates)
DATE_ORDER = os.getenv("PAPERLESS_DATE_ORDER", "DMY")

PAPERLESS_RECENT_CORRESPONDENT_YEARS = int(os.getenv("PAPERLESS_RECENT_CORRESPONDENT_YEARS", 1))
# Specify for how many years a correspondent is considered recent. Recent
# correspondents will be shown in a separate "Recent correspondents" filter as
# well. Set to 0 to disable this filter.
PAPERLESS_RECENT_CORRESPONDENT_YEARS = int(os.getenv(
"PAPERLESS_RECENT_CORRESPONDENT_YEARS", 0))

0 comments on commit 8371c23

Please sign in to comment.