summaryrefslogtreecommitdiff
path: root/sphinx/websupport
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/websupport')
-rw-r--r--sphinx/websupport/__init__.py5
-rw-r--r--sphinx/websupport/storage/differ.py18
-rw-r--r--sphinx/websupport/storage/sqlalchemystorage.py7
3 files changed, 20 insertions, 10 deletions
diff --git a/sphinx/websupport/__init__.py b/sphinx/websupport/__init__.py
index d5510dcac..dfcd868b2 100644
--- a/sphinx/websupport/__init__.py
+++ b/sphinx/websupport/__init__.py
@@ -321,10 +321,11 @@ class WebSupport(object):
username = 'Anonymous'
else:
raise errors.UserNotAuthorizedError()
- text = self._parse_comment_text(text)
- comment = self.storage.add_comment(text, displayed, username,
+ parsed = self._parse_comment_text(text)
+ comment = self.storage.add_comment(parsed, displayed, username,
time, proposal, node_id,
parent_id, moderator)
+ comment['original_text'] = text
if not displayed and self.moderation_callback:
self.moderation_callback(comment)
return comment
diff --git a/sphinx/websupport/storage/differ.py b/sphinx/websupport/storage/differ.py
index 8e430a137..10b76b345 100644
--- a/sphinx/websupport/storage/differ.py
+++ b/sphinx/websupport/storage/differ.py
@@ -20,19 +20,25 @@ class CombinedHtmlDiff(object):
"""
highlight_regex = re.compile(r'([\+\-\^]+)')
- def make_html(self, source, proposal):
+ def __init__(self, source, proposal):
+ proposal = escape(proposal)
+
+ differ = Differ()
+ self.diff = list(differ.compare(source.splitlines(1),
+ proposal.splitlines(1)))
+
+ def make_text(self):
+ return '\n'.join(self.diff)
+
+ def make_html(self):
"""Return the HTML representation of the differences between
`source` and `proposal`.
:param source: the original text
:param proposal: the proposed text
"""
- proposal = escape(proposal)
-
- differ = Differ()
- diff = list(differ.compare(source.splitlines(1),
- proposal.splitlines(1)))
html = []
+ diff = self.diff[:]
line = diff.pop(0)
next = diff.pop(0)
while True:
diff --git a/sphinx/websupport/storage/sqlalchemystorage.py b/sphinx/websupport/storage/sqlalchemystorage.py
index b58b1198e..fa1d0e3e4 100644
--- a/sphinx/websupport/storage/sqlalchemystorage.py
+++ b/sphinx/websupport/storage/sqlalchemystorage.py
@@ -60,11 +60,13 @@ class SQLAlchemyStorage(StorageBackend):
proposal, node_id, parent_id, moderator):
session = Session()
proposal_diff = None
+ proposal_diff_text = None
if node_id and proposal:
node = session.query(Node).filter(Node.id == node_id).one()
- differ = CombinedHtmlDiff()
- proposal_diff = differ.make_html(node.source, proposal)
+ differ = CombinedHtmlDiff(node.source, proposal)
+ proposal_diff = differ.make_html()
+ proposal_diff_text = differ.make_text()
elif parent_id:
parent = session.query(Comment.displayed).\
filter(Comment.id == parent_id).one()
@@ -82,6 +84,7 @@ class SQLAlchemyStorage(StorageBackend):
session.commit()
d = comment.serializable()
d['document'] = comment.node.document
+ d['proposal_diff_text'] = proposal_diff_text
session.close()
return d