--- a/src/cm/models.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/models.py Sat Feb 13 12:02:23 2010 +0100
@@ -6,6 +6,7 @@
from cm.models_utils import *
from cm.utils.dj import absolute_reverse
from cm.utils.date import datetime_to_user_str
+from cm.utils.html import on_content_receive
from cm.utils.comment_positioning import compute_new_comment_positions
from django import forms
from django.db.models import Q
@@ -27,6 +28,7 @@
class TextManager(Manager):
def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs):
+ content = on_content_receive(content, format)
text = self.create(name=name, email=email, user=user, state=state)
text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user)
return text
@@ -188,7 +190,6 @@
def get_content(self, format='html'):
return pandoc_convert(self.content, self.format, format)
-
# def _get_comments(self, user = None, filter_reply = 0):
# """
# get comments viewable by this user (user = None or user = AnonymousUser => everyone)
@@ -228,7 +229,8 @@
def __unicode__(self):
return '<%d> %s' % (self.id, self.title)
- def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True, cancel_modified_scopes=True):
+ def edit(self, new_title, new_format, new_content, new_tags=None, new_note=None, keep_comments=True, cancel_modified_scopes=True):
+ new_content = on_content_receive(new_content, new_format)
if not keep_comments :
self.comment_set.all().delete()
elif self.content != new_content or new_format != self.format:
@@ -243,8 +245,6 @@
else :
[comment.delete() for comment in toremove_comments]
- #TODO: RBE: recompute same text comments links
-
self.title = new_title
if new_tags:
self.tags = new_tags
@@ -269,10 +269,6 @@
def get_version_number(self):
return TextVersion.objects.filter(text__exact=self.text).order_by('created').filter(created__lte=self.created).count()
- def save(self, force_insert=False, force_update=False):
- self.content = re.sub('\r\n|\r|\n', '\n', self.content)
- super(AuthorModel, self).save()
-
class CommentManager(Manager):
def duplicate(self, comment, text_version, reply_to=None, keep_dates=False):
@@ -322,7 +318,7 @@
super(PermanentModel, self).save()
def __unicode__(self):
- return '<%d> %s' % (self.id, self.title)
+ return '<%d> %s [st_wrp:%d, st_ofs:%d, e_wrp:%d, e_ofs:%d]' % (self.id, self.title, self.start_wrapper, self.start_offset, self.end_wrapper, self.end_offset, )
def is_reply(self):
return self.reply_to != None
--- a/src/cm/utils/comment_positioning.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/utils/comment_positioning.py Sat Feb 13 12:02:23 2010 +0100
@@ -12,15 +12,10 @@
def compute_new_comment_positions(old_content, old_format, new_content, new_format, commentList):
- if old_format!='html':
- previousVersionContent = pandoc_convert(old_content, old_format, 'html')
- else:
- previousVersionContent = old_content
-
- if new_format != 'html':
- newVersionContent = pandoc_convert(new_content, new_format, 'html')
- else:
- newVersionContent = new_content
+ # cf. TextVersion.get_content
+ previousVersionContent = pandoc_convert(old_content, old_format, 'html')
+ newVersionContent = pandoc_convert(new_content, new_format, 'html')
+
_, previous_char_list, span_starts_previous = spannify(previousVersionContent)
_, new_char_list, span_starts_new = spannify(newVersionContent)
--- a/src/cm/utils/html.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/utils/html.py Sat Feb 13 12:02:23 2010 +0100
@@ -2,6 +2,7 @@
Package to manipulage html chunks
"""
+from string_utils import strip_cr
from BeautifulSoup import BeautifulSoup, Comment
def surrond_text_node(html_chunk, start_html, end_html):
@@ -16,6 +17,13 @@
return unicode(soup)
-# utilities
+#utilities
def get_text_nodes(soup):
return soup(text=lambda text:not isinstance(text, Comment))
+
+#WARNING behavior changed also for mardown. but really shouldn't hurt 20100212
+#it is text as received from textarea
+def on_content_receive(txt, format) :
+ #because textarea content arent packaged the same way on windows IE and linux FF, dhouldn't't hurt to clean it for any format
+ return strip_cr(txt)
+
--- a/src/cm/utils/string_utils.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/utils/string_utils.py Sat Feb 13 12:02:23 2010 +0100
@@ -1,4 +1,5 @@
import chardet
+import re
def to_unicode(input):
if type(input) == str:
@@ -12,4 +13,9 @@
if not res:
raise Exception('UnicodeDecodeError: could not decode')
return res
- return input
\ No newline at end of file
+ return input
+
+# strip carriage returns
+def strip_cr(input):
+ return re.sub('\r\n|\r|\n', '\n', input)
+
--- a/src/cm/views/create.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/views/create.py Sat Feb 13 12:02:23 2010 +0100
@@ -117,10 +117,9 @@
return _text_create_upload(request, CreateTextUploadForm)
def create_text(user, data):
- text_content = data['content']
text = Text.objects.create_text(title=data['title'],
format=data['format'],
- content=text_content,
+ content=data['content'],
note=data.get('note', None),
name=data.get('name', None),
email=data.get('email', None),
@@ -129,6 +128,7 @@
)
text.update_denorm_fields()
text_version = text.get_latest_version()
+ text_content = text_version.content
for attach_file in data.get('attachs', []):
attach_data = file(attach_file, 'rb').read()
--- a/src/cm/views/texts.py Sat Feb 13 11:54:11 2010 +0100
+++ b/src/cm/views/texts.py Sat Feb 13 12:02:23 2010 +0100
@@ -11,6 +11,7 @@
from cm.security import get_texts_with_perm, has_perm, get_viewable_comments, \
has_perm_on_text
from cm.utils import get_among, get_among, get_int
+from cm.utils.html import on_content_receive
from cm.utils.comment_positioning import compute_new_comment_positions, \
insert_comment_markers
from cm.utils.spannifier import spannify
@@ -669,8 +670,8 @@
text_version = text.get_latest_version()
comments = text_version.get_comments() ;
- new_content = request.POST['new_content']
new_format = request.POST['new_format']
+ new_content = on_content_receive(request.POST['new_content'], new_format)
# TODO: RBE : si commentaire mal forme : (position non existante : boom par key error)
_tomodify_comments, toremove_comments = compute_new_comment_positions(text_version.content, text_version.format, new_content, new_format, comments)