--- /dev/null
+{% load staticfiles %}
+{% load i18n %}
+
+<!DOCTYPE html>
+<html>
+ <head>
+
+ <script src="{% url 'django.views.i18n.javascript_catalog' %}"></script>
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/ace.js" type="text/javascript" charset="utf-8"></script>
+
+ {% if DEBUG %}
+ <link rel="stylesheet/less" type="text/css" href="{% static 'wiki/rng/src/editor/styles/main.less' %}"/>
+ <script type="text/javascript">less = {relativeUrls: true};</script>
+ <script src="{% static 'wiki/rng/libs/less-1.3.3.min.js' %}"></script>
+ <script src="{% static 'wiki/rng/libs/require.js' %}" data-main="{% static 'wiki/rng/src/editor/entrypoint.js' %}" ></script>
+ {% else %}
+ <link href="{% static 'wiki/build/rng.css' %}" rel="stylesheet">
+ <script src="{% static 'wiki/build/rng.js' %}"></script>
+ {% endif %}
+ </head>
+ <body>
+ <script type="text/javascript">
+
+ var config = {
+ rootSelector: '#editor_root',
+ jsonifySentPayload: false,
+
+ documentSaveUrl: function(id) { return '/editor/text/' + id + '/'; },
+ documentHistoryUrl: function(id) { return '/editor/history/' + id + '/'},
+
+ documentSaveForm: {
+ fields: [
+ {label: '{{forms.text_save.comment.label}}', name: '{{forms.text_save.comment.html_name}}', type: 'textarea'},
+ {label: '{{forms.text_save.stage_completed.label}}', name: '{{forms.text_save.stage_completed.html_name}}', type: 'select', options: [
+ {% for value,text in tags %}
+ {value:'{{value|default:''}}', text:'{{text}}'} {% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ ], description: '{{forms.text_save.stage_completed.help_text}}'},
+ ],
+ content_field_name: '{{forms.text_save.text.html_name}}',
+ version_field_name: '{{forms.text_save.parent_revision.html_name}}'
+ }
+ };
+
+ {% if can_pubmark %}
+ config.documentSaveForm.fields.push(
+ {label: '{{forms.text_save.publishable.label}}', name: '{{forms.text_save.publishable.html_name}}', type: 'checkbox', description: '{{forms.text_save.publishable.help_text}}'}
+ );
+ {% endif %}
+
+ {% if not request.user.is_authenticated %}
+ config.documentSaveForm.fields.push(
+ {label: '{{forms.text_save.author_name.label}}', name: '{{forms.text_save.author_name.html_name}}', type: 'input', description: '{{forms.text_save.author_name.help_text}}'},
+ {label: '{{forms.text_save.author_email.label}}', name: '{{forms.text_save.author_email.html_name}}', type: 'input', description: '{{forms.text_save.author_email.help_text}}'}
+ );
+ {% endif %}
+
+ var data = {% autoescape off%}{{serialized_document_data}}{%endautoescape%};
+
+ var editor_init = function(Editor) {
+ Editor.setBootstrappedData('data', data);
+ Editor.start(config);
+ };
+ </script>
+ <div id="editor_root"></div>
+ </body>
+</html>
from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST, require_GET
from django.shortcuts import get_object_or_404, render
+from django.utils import simplejson
from catalogue.models import Book, Chunk
import nice_diff
MAX_LAST_DOCS = 10
+def get_history(chunk):
+ changes = []
+ for change in chunk.history():
+ changes.append({
+ "version": change.revision,
+ "description": change.description,
+ "author": change.author_str(),
+ "date": localize(change.created_at),
+ "publishable": _("Publishable") + "\n" if change.publishable else "",
+ "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
+ "published": _("Published") + ": " + \
+ localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \
+ if change.publish_log.exists() else "",
+ })
+ return changes
+
+
@never_cache
-def editor(request, slug, chunk=None, template_name='wiki/document_details.html'):
+def editor(request, slug, chunk=None, template_name='wiki/bootstrap.html'):
try:
chunk = Chunk.get(slug, chunk)
except Chunk.MultipleObjectsReturned:
del last_books[oldest_key]
request.session['wiki_last_books'] = last_books
+ save_form = forms.DocumentTextSaveForm(user=request.user, prefix="textsave")
return render(request, template_name, {
- 'chunk': chunk,
+ 'serialized_document_data': simplejson.dumps({
+ 'document': chunk.materialize(),
+ 'document_id': chunk.id,
+ 'title': chunk.book.title,
+ 'history': get_history(chunk),
+ 'version': chunk.revision()
+ }),
'forms': {
- "text_save": forms.DocumentTextSaveForm(user=request.user, prefix="textsave"),
- "text_revert": forms.DocumentTextRevertForm(prefix="textrevert"),
- "pubmark": forms.DocumentPubmarkForm(prefix="pubmark"),
+ "text_save": save_form,
+ "text_revert": forms.DocumentTextRevertForm(prefix="textrevert")
},
+ 'tags': list(save_form.fields['stage_completed'].choices),
'can_pubmark': request.user.has_perm('catalogue.can_pubmark'),
- 'REDMINE_URL': settings.REDMINE_URL,
})
return JSONResponse({
'text': doc.materialize() if parent_revision != revision else None,
'meta': {},
- 'revision': revision,
+ 'version': revision,
})
else:
return JSONFormInvalid(form)
if not doc.book.accessible(request):
return HttpResponseForbidden("Not authorized.")
- changes = []
- for change in doc.history().reverse():
- changes.append({
- "version": change.revision,
- "description": change.description,
- "author": change.author_str(),
- "date": localize(change.created_at),
- "publishable": _("Publishable") + "\n" if change.publishable else "",
- "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
- "published": _("Published") + ": " + \
- localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \
- if change.publish_log.exists() else "",
- })
- return JSONResponse(changes)
+ return JSONResponse(get_history(doc))
@require_POST