Mercurial > piecrust2
comparison piecrust/admin/views/edit.py @ 778:5e91bc0e3b4d
internal: Move admin panel code into the piecrust package.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 16 Jul 2016 15:02:24 +0200 |
parents | foodtruck/views/edit.py@3885421c29a3 |
children | 22c6f6a3d0a0 |
comparison
equal
deleted
inserted
replaced
777:8d633ca59bc5 | 778:5e91bc0e3b4d |
---|---|
1 import os.path | |
2 import logging | |
3 from flask import ( | |
4 g, request, abort, render_template, url_for, flash) | |
5 from flask.ext.login import login_required | |
6 from piecrust.rendering import ( | |
7 PageRenderingContext, render_page) | |
8 from piecrust.serving.util import get_requested_page | |
9 from ..blueprint import foodtruck_bp | |
10 from ..views import with_menu_context | |
11 | |
12 | |
13 logger = logging.getLogger(__name__) | |
14 | |
15 | |
16 @foodtruck_bp.route('/edit/', defaults={'slug': ''}, methods=['GET', 'POST']) | |
17 @foodtruck_bp.route('/edit/<path:slug>', methods=['GET', 'POST']) | |
18 @login_required | |
19 def edit_page(slug): | |
20 site = g.site | |
21 site_app = site.piecrust_app | |
22 rp = get_requested_page(site_app, | |
23 '/site/%s/%s' % (g.sites.current_site, slug)) | |
24 page = rp.qualified_page | |
25 if page is None: | |
26 abort(404) | |
27 | |
28 if request.method == 'POST': | |
29 page_text = request.form['page_text'] | |
30 if request.form['is_dos_nl'] == '0': | |
31 page_text = page_text.replace('\r\n', '\n') | |
32 | |
33 if 'do_preview' in request.form or 'do_save' in request.form or \ | |
34 'do_save_and_commit' in request.form: | |
35 logger.debug("Writing page: %s" % page.path) | |
36 with open(page.path, 'w', encoding='utf8', newline='') as fp: | |
37 fp.write(page_text) | |
38 flash("%s was saved." % os.path.relpath( | |
39 page.path, site_app.root_dir)) | |
40 | |
41 if 'do_save_and_commit' in request.form: | |
42 message = request.form.get('commit_msg') | |
43 if not message: | |
44 message = "Edit %s" % os.path.relpath( | |
45 page.path, site_app.root_dir) | |
46 if site.scm: | |
47 site.scm.commit([page.path], message) | |
48 | |
49 if 'do_preview' in request.form: | |
50 return _preview_page(page) | |
51 | |
52 if 'do_save' in request.form or 'do_save_and_commit' in request.form: | |
53 return _edit_page_form(page) | |
54 | |
55 abort(400) | |
56 | |
57 return _edit_page_form(page) | |
58 | |
59 | |
60 def _preview_page(page): | |
61 render_ctx = PageRenderingContext(page, force_render=True) | |
62 rp = render_page(render_ctx) | |
63 return rp.content | |
64 | |
65 | |
66 def _edit_page_form(page): | |
67 data = {} | |
68 data['is_new_page'] = False | |
69 data['url_cancel'] = url_for('.list_source', source_name=page.source.name) | |
70 with open(page.path, 'r', encoding='utf8', newline='') as fp: | |
71 data['page_text'] = fp.read() | |
72 data['is_dos_nl'] = "1" if '\r\n' in data['page_text'] else "0" | |
73 | |
74 with_menu_context(data) | |
75 return render_template('edit_page.html', **data) | |
76 |