Added comment preview functionality to user pages. It works by passing the comment's value as a JSON string to a new handler that lives at /ajax/comment/preview. The query string is decoded, unquoted, and has its leading and trailing quotes removed to match the input that cleaned_markdown_conversion expects.
It does this in real time with a 500ms lag by using a timer. Initially I tried the onChange handler but you need to lose focus for that to process. The javascript timer is only invoked if the add comment button is pressed. A request is only sent if the comment box is not empty and the current value is not the same as the last value.
This commit is contained in:
committed by
Rodney Ewing
parent
9da4e8049f
commit
5ab6029961
@@ -23,7 +23,7 @@ class MediaCommentForm(wtforms.Form):
|
||||
_('Comment'),
|
||||
[wtforms.validators.Required()],
|
||||
description=_(u'You can use '
|
||||
u'<a href="http://daringfireball.net/projects/markdown/basics">'
|
||||
u'<a href="http://daringfireball.net/projects/markdown/basics" target=new>'
|
||||
u'Markdown</a> for formatting.'))
|
||||
|
||||
class ConfirmDeleteForm(wtforms.Form):
|
||||
|
||||
@@ -32,6 +32,10 @@ add_route('mediagoblin.user_pages.media_post_comment',
|
||||
'/u/<string:user>/m/<int:media_id>/comment/add/',
|
||||
'mediagoblin.user_pages.views:media_post_comment')
|
||||
|
||||
add_route('mediagoblin.user_pages.media_preview_comment',
|
||||
'/ajax/comment/preview/',
|
||||
'mediagoblin.user_pages.views:media_preview_comment')
|
||||
|
||||
add_route('mediagoblin.user_pages.user_gallery',
|
||||
'/u/<string:user>/gallery/',
|
||||
'mediagoblin.user_pages.views:user_gallery')
|
||||
|
||||
@@ -16,19 +16,21 @@
|
||||
|
||||
import logging
|
||||
import datetime
|
||||
import json
|
||||
import urllib
|
||||
|
||||
from mediagoblin import messages, mg_globals
|
||||
from mediagoblin.db.models import (MediaEntry, MediaTag, Collection,
|
||||
CollectionItem, User)
|
||||
from mediagoblin.tools.response import render_to_response, render_404, \
|
||||
redirect, redirect_obj
|
||||
from mediagoblin.tools.text import cleaned_markdown_conversion
|
||||
from mediagoblin.tools.translate import pass_to_ugettext as _
|
||||
from mediagoblin.tools.pagination import Pagination
|
||||
from mediagoblin.user_pages import forms as user_forms
|
||||
from mediagoblin.user_pages.lib import add_media_to_collection
|
||||
from mediagoblin.notifications import trigger_notification, \
|
||||
add_comment_subscription, mark_comment_notification_seen
|
||||
|
||||
from mediagoblin.decorators import (uses_pagination, get_user_media_entry,
|
||||
get_media_entry_by_id,
|
||||
require_active_login, user_may_delete_media, user_may_alter_collection,
|
||||
@@ -36,6 +38,7 @@ from mediagoblin.decorators import (uses_pagination, get_user_media_entry,
|
||||
|
||||
from werkzeug.contrib.atom import AtomFeed
|
||||
from werkzeug.exceptions import MethodNotAllowed
|
||||
from werkzeug.wrappers import Response
|
||||
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
@@ -166,6 +169,7 @@ def media_post_comment(request, media):
|
||||
comment = request.db.MediaComment()
|
||||
comment.media_entry = media.id
|
||||
comment.author = request.user.id
|
||||
print request.form['comment_content']
|
||||
comment.content = unicode(request.form['comment_content'])
|
||||
|
||||
# Show error message if commenting is disabled.
|
||||
@@ -193,6 +197,18 @@ def media_post_comment(request, media):
|
||||
return redirect_obj(request, media)
|
||||
|
||||
|
||||
|
||||
def media_preview_comment(request):
|
||||
|
||||
comment = unicode(urllib.unquote(request.query_string).decode('string_escape'))
|
||||
if comment.startswith('"') and comment.endswith('"'):
|
||||
comment = comment[1:-1]
|
||||
print comment
|
||||
#decoderRing = json.JSONDecoder()
|
||||
#comment = decoderRing.decode(request.query_string)
|
||||
|
||||
return Response(json.dumps(cleaned_markdown_conversion(comment)))
|
||||
|
||||
@get_media_entry_by_id
|
||||
@require_active_login
|
||||
def media_collect(request, media):
|
||||
|
||||
Reference in New Issue
Block a user