├── tests ├── __init__.py ├── migrations │ ├── __init__.py │ └── 0001_initial.py ├── models.py ├── templates │ └── tests │ │ └── simple_page.html ├── urls.py ├── fixtures │ └── test.json ├── test_models.py ├── settings.py ├── test_frontend.py └── test_admin.py ├── wagtail_review ├── __init__.py ├── views │ ├── __init__.py │ ├── frontend.py │ ├── annotations_api.py │ └── admin.py ├── migrations │ ├── __init__.py │ ├── 0003_response.py │ ├── 0002_annotation_annotationrange.py │ └── 0001_initial.py ├── templatetags │ ├── __init__.py │ ├── wagtailreview_admin_tags.py │ └── wagtailreview_tags.py ├── templates │ └── wagtail_review │ │ ├── email │ │ ├── request_review_subject.txt │ │ ├── response_received_subject.txt │ │ ├── response_received.txt │ │ └── request_review.txt │ │ ├── submit_for_review_menu_item.html │ │ ├── response_form_fields.html │ │ ├── admin │ │ ├── dashboard.html │ │ └── audit_trail.html │ │ ├── create_review.html │ │ └── annotate.html ├── apps.py ├── static │ └── wagtail_review │ │ ├── css │ │ ├── audit_trail.css │ │ ├── create_review.css │ │ ├── respond.css │ │ └── annotator.css │ │ └── js │ │ ├── annotator-extensions.js │ │ └── submit.js ├── text.py ├── urls.py ├── admin_urls.py ├── forms.py ├── wagtail_hooks.py └── models.py ├── .gitignore ├── MANIFEST.in ├── runtests.py ├── .github ├── report_nightly_build_failure.py └── workflows │ ├── nightly-tests.yml │ └── test.yml ├── LICENSE ├── setup.py ├── CHANGELOG.txt └── README.md /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wagtail_review/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wagtail_review/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wagtail_review/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wagtail_review/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /wagtail_review.egg-info 2 | __pycache__ 3 | /dist 4 | /build 5 | -------------------------------------------------------------------------------- /tests/models.py: -------------------------------------------------------------------------------- 1 | from wagtail.models import Page 2 | 3 | 4 | class SimplePage(Page): 5 | pass 6 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE *.rst *.txt *.md 2 | recursive-include wagtail_review * 3 | global-exclude __pycache__ 4 | global-exclude *.py[co] 5 | global-exclude .DS_Store 6 | -------------------------------------------------------------------------------- /wagtail_review/templates/wagtail_review/email/request_review_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% blocktrans with page_title=page.title|safe %}Review request: {{ page_title }}{% endblocktrans %} 4 | -------------------------------------------------------------------------------- /wagtail_review/templates/wagtail_review/email/response_received_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% blocktrans with reviewer=reviewer.get_name|safe page_title=page.title|safe %}Response received from {{ reviewer }} on: {{ page_title }}{% endblocktrans %} 4 | -------------------------------------------------------------------------------- /wagtail_review/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WagtailReviewAppConfig(AppConfig): 5 | label = "wagtail_review" 6 | name = "wagtail_review" 7 | verbose_name = "wagtail-review" 8 | default_auto_field = "django.db.models.AutoField" 9 | -------------------------------------------------------------------------------- /runtests.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | import os 5 | 6 | from django.core.management import execute_from_command_line 7 | 8 | os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings' 9 | execute_from_command_line([sys.argv[0], 'test'] + sys.argv[1:]) 10 | -------------------------------------------------------------------------------- /tests/templates/tests/simple_page.html: -------------------------------------------------------------------------------- 1 | {% load wagtailreview_tags %} 2 | 3 |
4 |' + annotator.util.escapeHtml(annotation.user.name) + '
' 5 | return author + annotator.util.escapeHtml(annotation.text); 6 | } else { 7 | return "" + _t('No comment') + ""; 8 | } 9 | } 10 | 11 | window.annotatorExt = { 12 | 'viewerWithUsernames': function(viewer) { 13 | viewer.setRenderer(renderWithUsername); 14 | }, 15 | 'viewerModeUi': function() { 16 | /* Read-only view of annotations. Taken from https://github.com/openannotation/annotator/issues/580#issuecomment-254772752 */ 17 | var element = document.body; // Or whatever is your selector/element when you initialize the annotator 18 | var ui = {}; 19 | 20 | return { 21 | start: function () { 22 | ui.highlighter = new annotator.ui.highlighter.Highlighter(element); 23 | ui.viewer = new annotator.ui.viewer.Viewer({ 24 | permitEdit: function (ann) { return false; }, 25 | permitDelete: function (ann) { return false; }, 26 | autoViewHighlights: element 27 | }); 28 | ui.viewer.setRenderer(renderWithUsername); 29 | ui.viewer.attach(); 30 | }, 31 | destroy: function () { 32 | ui.highlighter.destroy(); 33 | ui.viewer.destroy(); 34 | }, 35 | annotationsLoaded: function (anns) { 36 | ui.highlighter.drawAll(anns); 37 | } 38 | }; 39 | } 40 | }; 41 | })(); 42 | -------------------------------------------------------------------------------- /wagtail_review/templates/wagtail_review/admin/dashboard.html: -------------------------------------------------------------------------------- 1 | {% extends "wagtailadmin/generic/index.html" %} 2 | {% load i18n wagtailreview_admin_tags %} 3 | 4 | {% block listing %} 5 || 11 | {% trans "Page" %} 12 | {% if ordering == "page" %} 13 | 14 | {% else %} 15 | 16 | {% endif %} 17 | | 18 |{% trans "Last review requested at" %} | 19 |{% trans "Status" %} | 20 |
|---|---|---|
26 | 27 | {{ page.get_admin_display_title }} 28 |29 | |
30 | 31 | {{ page.last_review_requested_at }} 32 | | 33 |34 | {% page_has_open_review page as is_open %} 35 | {% if is_open %}{% trans "Open" %}{% else %}{% trans "Closed" %}{% endif %} 36 | | 37 |
| {% trans "Reviewer" %} | 25 |{% trans "Response" %} | 26 |{% trans "Date" %} | 27 |{% trans "Comments" %} | 28 |
|---|---|---|---|
| {{ response.reviewer.get_name }} | 34 |{{ response.get_result_display }} | 35 |{{ response.created_at|date:"H:i j M Y" }} | 36 |{{ response.comment }} | 37 |
| {{ reviewer.get_name }} | 42 |{% trans "Awaiting response" %} | 43 |44 | | 45 | |