def decorator(fn):\r
return fn\r
\r
+ return decorator\r
+\r
\r
def _decorate_params(origin):\r
return decorate(origin, mode=DecoratableObject.MODE_PARAMS)\r
return decorate(origin, mode=DecoratableObject.MODE_RESULT)\r
\r
decorate.result = _decorate_result\r
+\r
+def _decorate_with(fn):\r
+ def decorator(origin):\r
+ if not isinstance(origin, DecoratableObject):\r
+ mod = inspect.getmodule(origin)\r
+\r
+ name = origin.__name__\r
+ origin = DecoratableObject(origin)\r
+\r
+ origin._decorate(fn, True, False)\r
+ return origin\r
+ return decorator\r
+\r
+\r
+decorate.withfn = _decorate_with
\ No newline at end of file
});\r
}\r
\r
-function load_prompt(evt, url) {\r
+function load_prompt(evt, el, url) {\r
$.get(url, function(data) {\r
- var $dialog = show_dialog({\r
- html: data,\r
+ var doptions = {\r
+ html: data,\r
extra_class: 'prompt',\r
- event: evt,\r
yes_callback: function() {\r
var postvars = {};\r
$dialog.find('input, textarea, select').each(function() {\r
}, 'json');\r
},\r
show_no: true\r
- });\r
+ }\r
+\r
+ if (!el.is('.centered')) {\r
+ doptions.event = evt;\r
+ }\r
+\r
+ var $dialog = show_dialog(doptions);\r
});\r
}\r
\r
var el = $(this);\r
\r
if (el.is('.withprompt')) {\r
- load_prompt(evt, el.attr('href'));\r
+ load_prompt(evt, el, el.attr('href'));\r
} else if(el.is('.confirm')) {\r
- $dialog = show_dialog({\r
+ var doptions = {\r
html: messages.confirm,\r
extra_class: 'confirm',\r
- event: evt,\r
yes_callback: function() {\r
start_command();\r
$.getJSON(el.attr('href'), function(data) {\r
yes_text: messages.yes,\r
show_no: true,\r
no_text: messages.no\r
- });\r
+ }\r
+\r
+ if (!el.is('.centered')) {\r
+ doptions.event = evt;\r
+ }\r
+ var $dialog = show_dialog(doptions);\r
} else {\r
start_command();\r
$.getJSON(el.attr('href'), function(data) {\r
<div class="user">
<ul>
<li class="thumb"><a href="{{ user.get_profile_url }} ">{% gravatar user 32 %}</a></li>
- <li><a {% if user.is_suspended %}class="suspended-user" {% endif %}href="{{ user.get_profile_url }}">{{ user.username }}</a></li>
+ <li><a {% if user.is_suspended %}class="suspended-user" {% endif %}href="{{ user.get_profile_url }}">{{ user.decorated_name }}</a></li>
<li>{% get_score_badge user %}</li>
</ul>
</div>
from django.contrib.auth.decorators import login_required
from forum.utils.decorators import ajax_method, ajax_login_required
from decorators import command, CommandException, RefreshPageCommand
+from forum.modules import decorate
from forum import settings
import logging
)
-@command
+@decorate.withfn(command)
def vote_post(request, id, vote_type):
post = get_object_or_404(Node, id=id).leaf
user = request.user
return response
-@command
+@decorate.withfn(command)
def flag_post(request, id):
if not request.POST:
return render_to_response('node/report.html', {'types': settings.FLAG_TYPES})
return {'message': _("Thank you for your report. A moderator will review your submission shortly.")}
-@command
+@decorate.withfn(command)
def like_comment(request, id):
comment = get_object_or_404(Comment, id=id)
user = request.user
}
}
-@command
+@decorate.withfn(command)
def delete_comment(request, id):
comment = get_object_or_404(Comment, id=id)
user = request.user
}
}
-@command
+@decorate.withfn(command)
def mark_favorite(request, id):
question = get_object_or_404(Question, id=id)
}
}
-@command
+@decorate.withfn(command)
def comment(request, id):
post = get_object_or_404(Node, id=id)
user = request.user
return {
'commands': {
'insert_comment': [
- id, comment.id, comment.comment, user.username, user.get_profile_url(),
+ id, comment.id, comment.comment, user.decorated_name, user.get_profile_url(),
reverse('delete_comment', kwargs={'id': comment.id}),
reverse('node_markdown', kwargs={'id': comment.id})
]
}
}
-@command
+@decorate.withfn(command)
def node_markdown(request, id):
user = request.user
return HttpResponse(node.body, mimetype="text/plain")
-@command
+@decorate.withfn(command)
def accept_answer(request, id):
user = request.user
return {'commands': commands}
-@command
+@decorate.withfn(command)
def delete_post(request, id):
post = get_object_or_404(Node, id=id)
user = request.user
return ret
-@command
+@decorate.withfn(command)
def close(request, id, close):
if close and not request.POST:
return render_to_response('node/report.html', {'types': settings.CLOSE_TYPES})
return RefreshPageCommand()
-@command
+@decorate.withfn(command)
def wikify(request, id):
node = get_object_or_404(Node, id=id)
user = request.user
return RefreshPageCommand()
-@command
+@decorate.withfn(command)
def convert_to_comment(request, id):
user = request.user
answer = get_object_or_404(Answer, id=id)
return RefreshPageCommand()
-@command
+@decorate.withfn(command)
def subscribe(request, id):
question = get_object_or_404(Question, id=id)
from django.core.urlresolvers import reverse\r
from django.template import RequestContext\r
from django.utils.translation import ungettext, ugettext as _\r
-from forum.modules import ui\r
+from forum.modules import ui, decorate\r
import logging\r
\r
def render(template=None, tab=None, tab_title='', weight=500, tabbed=True):\r
content=simplejson.dumps({'commands': {'refresh_page': []}, 'success': True}),\r
mimetype="application/json")\r
\r
-def command(func):\r
- def decorated(request, *args, **kwargs):\r
- try:\r
- response = func(request, *args, **kwargs)\r
-\r
- if isinstance(response, HttpResponse):\r
- return response\r
-\r
- response['success'] = True\r
- except Exception, e:\r
- import traceback\r
- #traceback.print_exc()\r
-\r
- if isinstance(e, CommandException):\r
- response = {\r
- 'success': False,\r
- 'error_message': e.message\r
- }\r
- else:\r
- logging.error("%s: %s" % (func.__name__, str(e)))\r
- logging.error(traceback.format_exc())\r
- response = {\r
- 'success': False,\r
- 'error_message': _("We're sorry, but an unknown error ocurred.<br />Please try again in a while.")\r
- }\r
-\r
- if request.is_ajax():\r
- return HttpResponse(simplejson.dumps(response), mimetype="application/json")\r
+def command(func, request, *args, **kwargs):\r
+ try:\r
+ response = func(request, *args, **kwargs)\r
+\r
+ if isinstance(response, HttpResponse):\r
+ return response\r
+\r
+ response['success'] = True\r
+ except Exception, e:\r
+ import traceback\r
+ #traceback.print_exc()\r
+\r
+ if isinstance(e, CommandException):\r
+ response = {\r
+ 'success': False,\r
+ 'error_message': e.message\r
+ }\r
else:\r
- return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))\r
+ logging.error("%s: %s" % (func.__name__, str(e)))\r
+ logging.error(traceback.format_exc())\r
+ response = {\r
+ 'success': False,\r
+ 'error_message': _("We're sorry, but an unknown error ocurred.<br />Please try again in a while.")\r
+ }\r
+\r
+ if request.is_ajax():\r
+ return HttpResponse(simplejson.dumps(response), mimetype="application/json")\r
+ else:\r
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))\r
\r
- return decorated
\ No newline at end of file
from django.core.urlresolvers import reverse, NoReverseMatch\r
from forum.forms import *\r
from forum.utils.html import sanitize_html\r
+from forum.modules import decorate\r
from datetime import datetime, date\r
import decorators\r
from forum.actions import EditProfileAction, FavoriteAction, BonusRepAction, SuspendAction\r
return HttpResponseRedirect(user.get_profile_url())\r
\r
\r
-@decorators.command\r
+@decorate.withfn(decorators.command)\r
def award_points(request, id):\r
if (not request.POST) and request.POST.get('points', None):\r
raise decorators.CommandException(_("Invalid request type"))\r
return dict(reputation=user.reputation)\r
\r
\r
-@decorators.command\r
+@decorate.withfn(decorators.command)\r
def suspend(request, id):\r
user = get_object_or_404(User, id=id)\r
\r