Changeset 701f1656031c4ba1e7f939462c9bdaf35dd1116a


Ignore:
Timestamp:
14.05.2013 22:47:59 (8 years ago)
Author:
Stanislaw Klekot <dozzie@…>
Branches:
b66903eafbcb1d49112014abc82c8bf683413db0
Children:
e0be4e0ba9e74bbae56efe2db89d24b014e91faf
Parents:
c30ccdb2652da65b328253916e36c499ffdef963
git-author:
Stanislaw Klekot <dozzie@…> (14.05.2013 22:47:59)
git-committer:
Stanislaw Klekot <dozzie@…> (14.05.2013 22:47:59)
Message:

Added passing AST to templates and printing nice parse errors.

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • dashwiki/wiki/models.py

    rb700a5 r701f16  
    2828    from django.conf import settings 
    2929    self.content_tree = json.dumps(syntax_tree) 
     30 
     31  def get_ast(self): 
     32    import json 
     33    if self.content_tree: 
     34      return json.loads(self.content_tree) 
     35    else: 
     36      return None 
    3037 
    3138  def __unicode__(self): 
  • dashwiki/wiki/views.py

    rbfdbd1 r701f16  
    66from django.http import HttpResponse 
    77from django.template import Context, loader 
    8 from wiki.models import WikiPage, Macro, MacroResultType, MacroProtocol 
     8from models import WikiPage, Macro, MacroResultType, MacroProtocol 
    99 
    1010# TODO: enable CSRF protection 
     
    5757  context = Context({ 
    5858    'name': page_name, 
    59     'body': page.content if page else None, 
     59    'body_raw':  None, 
     60    'body_tree': None, 
    6061    'editable': True, 
    6162  }) 
     63  if page != None: 
     64    context['body_raw']  = page.content 
     65    context['body_tree'] = page.get_ast() 
    6266 
    6367  return HttpResponse(template.render(context)) 
     
    7478  context = Context({ 
    7579    'name': page_name, 
    76     'body': page.content if page else None, 
     80    'body_raw':  None, 
     81    'body_tree': None, 
    7782    'form_target': request.path, 
    7883  }) 
     84  if page != None: 
     85    context['body_raw']  = page.content 
     86    context['body_tree'] = page.get_ast() 
    7987 
    8088  return HttpResponse(template.render(context)) 
     
    9199    page = WikiPage(name=page_name) 
    92100  page.content = request.POST['body'] 
    93   page.save() 
    94   context = Context({ 
    95     'name': page_name, 
    96     'body': page.content if page else None, 
    97     'editable': True, 
    98     'message': 'Wiki page saved' 
    99   }) 
     101 
     102  from dashwiki.markup import ParseError 
     103  try: 
     104    page.save() 
     105    context = Context({ 
     106      'name': page_name, 
     107      'body_raw': page.content, 
     108      'body_tree': page.get_ast(), 
     109      'editable': True, 
     110      'message': 'Wiki page saved', 
     111    }) 
     112  except ParseError, e: 
     113    def _parse_error_format(err): 
     114      return ("Syntax error at '%s' (%s), line %d, char %d.\n" + \ 
     115              "Expected one of these tokens: %s") % \ 
     116             (err['text'], err['token'], err['line'], err['char'], 
     117              ", ".join(err['expected'])) 
     118 
     119    errors = [_parse_error_format(err) for err in e.errors] 
     120    context = Context({ 
     121      'name': page_name, 
     122      'body_raw': page.content, 
     123      'body_tree': None, # parse error, no AST here 
     124      'editable': True, 
     125      'error': '\n\n'.join(errors), 
     126    }) 
    100127 
    101128  return HttpResponse(template.render(context)) 
  • templates/display_wiki.html

    rc30ccd r701f16  
    1717  {% endif %} 
    1818 
    19   {% if body %} 
    20     {{ body|markdown }} 
     19  {% if body_raw %} 
     20    {{ body_raw|markdown }} 
    2121  {% else %} 
    2222    <h1>Page {{ name }} is empty</h1> 
  • templates/edit_wiki.html

    rbb6764 r701f16  
    99<form method="post" action="{{ form_target }}"> 
    1010        <p> 
    11                 <textarea cols="80" rows="30" name="body">{% if body %}{{ body }}{% endif %}</textarea> 
     11                <textarea cols="80" rows="30" name="body">{% if body_raw %}{{ body_raw }}{% endif %}</textarea> 
    1212        </p> 
    1313        <p> 
Note: See TracChangeset for help on using the changeset viewer.