Merge with null
authorrbernard
Sat, 13 Feb 2010 12:03:14 +0100
changeset 176 07019190bfe3
parent 175 4f072edc51a1 (diff)
parent 170 31288d47e729 (current diff)
child 180 0887863001b1
Merge with null
--- a/src/cm/media/js/site/text_edit.js	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/media/js/site/text_edit.js	Sat Feb 13 12:03:14 2010 +0100
@@ -1,11 +1,9 @@
 function check_save(){
-    needToConfirm = false;
-
     var newVersion = $('#id_new_version').attr('checked') ;
     var commentsKept = $('#id_keep_comments').attr('checked') ;
 
-    var new_content = $('#id_content').val()
-    var new_format = $('#id_format').val()
+    var new_content = $('#id_content').val() ;
+    var new_format = $('#id_format').val() ;
     var mess = gettext( 'Should these comments be detached (i.e. kept with no scope) or removed from new version?') ;
 
     if (commentsKept) {
@@ -62,11 +60,12 @@
     }
     else {
         if (!newVersion) {
+        	
             var message = gettext("You chose not to create a new version all comments will be deleted") ;
-        		message += '<br />' ;
-        		message += gettext( 'Do you want to continue?') ;
-                $('#confirm_all_removed').html(message) ;
-                $('#confirm_all_removed').dialog('open') ;
+    		message += '<br />' ;
+    		message += gettext( 'Do you want to continue?') ;
+            $('#confirm_all_removed_dlg').html(message) ;
+            $('#confirm_all_removed_dlg').dialog('open') ;
         }
         else {
             $('#edit_form').submit();
@@ -76,10 +75,15 @@
 
 $(function() {
 	var buttons = {};
-	buttons[gettext('No')] = function() {$(this).dialog('close');} ;
-	buttons[gettext('Yes')] = function() {$(this).dialog('close');$('#edit_form').submit();} ;
+	buttons[gettext('No')] = function() {
+		$(this).dialog('close');
+	} ;
+	buttons[gettext('Yes')] = function() {
+		needToConfirm = false;
+		$(this).dialog('close');$('#edit_form').submit();
+	} ;	
 
-    $('#confirm_all_removed').dialog({
+    $('#confirm_all_removed_dlg').dialog({
         bgiframe: true, 
         autoOpen: false,        
         title :gettext('Warning'),
@@ -88,8 +92,14 @@
     }) ;
     
 	var buttons0 = {};
-	buttons0[gettext('Detach')] = function() {$(this).dialog('close');$('#cancel_modified_scopes').val("1");$('#edit_form').submit();} ;
-	buttons0[gettext('Remove')] = function() {$(this).dialog('close');$('#cancel_modified_scopes').val("0");$('#edit_form').submit();} ;
+	buttons0[gettext('Detach')] = function() {
+		needToConfirm = false;
+		$(this).dialog('close');$('#cancel_modified_scopes').val("1");$('#edit_form').submit();
+	} ;
+	buttons0[gettext('Remove')] = function() {
+		needToConfirm = false;
+		$(this).dialog('close');$('#cancel_modified_scopes').val("0");$('#edit_form').submit();
+	} ;
 	buttons0[gettext('Cancel')] = function() {$(this).dialog('close');} ;
 
     $('#remove_scope_choice_dlg').dialog({
--- a/src/cm/models.py	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/models.py	Sat Feb 13 12:03:14 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	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/utils/comment_positioning.py	Sat Feb 13 12:03:14 2010 +0100
@@ -12,16 +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)
     
@@ -68,21 +62,21 @@
                     
         #    id, initial_start, initial_end, computed_start, computed_end, valid = self.computationResults[i]
 
-    for c in commentList:        
-        if c.valid:
+    for cc in commentList:        
+        if cc.valid:
             for id in xrange(len(span_starts_new.keys())):
                 start = span_starts_new.get(id)
                 end = span_starts_new.get(id+1, sys.maxint)
 
                 # adjust start                
-                if c.computed_start_offset >= start and c.computed_start_offset < end:
-                    c.start_wrapper = id
-                    c.start_offset = c.computed_start_offset - start
+                if cc.computed_start_offset >= start and cc.computed_start_offset < end:
+                    cc.start_wrapper = id
+                    cc.start_offset = cc.computed_start_offset - start
                 
                 # adjust end                        
-                if c.computed_end_offset >= start and c.computed_end_offset < end:
-                    c.end_wrapper = id
-                    c.end_offset = c.computed_end_offset - start
+                if cc.computed_end_offset >= start and cc.computed_end_offset < end:
+                    cc.end_wrapper = id
+                    cc.end_offset = cc.computed_end_offset - start
             
     # returns to_modify, to_remove
     return [c for c in commentList if c.valid], \
--- a/src/cm/utils/html.py	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/utils/html.py	Sat Feb 13 12:03:14 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	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/utils/string_utils.py	Sat Feb 13 12:03:14 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	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/views/create.py	Sat Feb 13 12:03:14 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	Fri Feb 12 15:54:48 2010 +0100
+++ b/src/cm/views/texts.py	Sat Feb 13 12:03:14 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)