diff --git a/r2/r2/config/routing.py b/r2/r2/config/routing.py index 7f29c2cb4..0111e9665 100644 --- a/r2/r2/config/routing.py +++ b/r2/r2/config/routing.py @@ -204,11 +204,11 @@ def make_map(): mc('/wiki/revisions', controller='wiki', action='wiki_recent') mc('/wiki/pages', controller='wiki', action='wiki_listing') - mc('/wiki/api/create', controller='wikiapi', action='wiki_create') - mc('/wiki/api/edit/*page', controller='wikiapi', action='wiki_edit') - mc('/wiki/api/hide/:revision/*page', controller='wikiapi', action='wiki_revision_hide') - mc('/wiki/api/revert/:revision/*page', controller='wikiapi', action='wiki_revision_revert') - mc('/wiki/api/alloweditor/:act/:username/*page', controller='wikiapi', action='wiki_allow_editor') + mc('/api/wiki/create', controller='wikiapi', action='wiki_create') + mc('/api/wiki/edit', controller='wikiapi', action='wiki_edit') + mc('/api/wiki/hide', controller='wikiapi', action='wiki_revision_hide') + mc('/api/wiki/revert', controller='wikiapi', action='wiki_revision_revert') + mc('/api/wiki/alloweditor/:act', controller='wikiapi', action='wiki_allow_editor') mc('/wiki/*page', controller='wiki', action='wiki_page') mc('/wiki/', controller='wiki', action='wiki_page') diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py index 981cd3e2c..f11e8ec78 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -53,7 +53,7 @@ from r2.lib.pages.things import default_thing_wrapper from r2.lib.pages import BoringPage from reddit_base import base_listing from r2.models import IDBuilder, LinkListing, DefaultSR -from validator.validator import VInt, VExistingUname, VRatelimit +from validator.validator import VInt, VExistingUname, VRatelimit, VOneOf from r2.lib.merge import ConflictException, make_htmldiff from pylons.i18n import _ from r2.lib.pages import PaneStack @@ -214,7 +214,7 @@ class WikiController(RedditController): frontpage = isinstance(c.site, DefaultSR) base = '' if frontpage else '/r/%s' % c.site.name c.wiki_base_url = '%s/wiki' % base - c.wiki_api_url = '%s/wiki/api' % base + c.wiki_api_url = '%s/api/wiki' % base c.wiki_id = g.default_sr if frontpage else c.site.name c.page = None c.show_wiki_actions = True @@ -277,26 +277,34 @@ class WikiApiController(WikiController): @wiki_validate(VWikiModerator(), page=VWikiPage('page'), - user=VExistingUname('username')) - def POST_wiki_allow_editor(self, act, page, user): + act=VOneOf('act', ('del', 'add')), + user=VExistingUname('username'), + username=nop('username')) + def POST_wiki_allow_editor(self, act, page, user, username): if act == 'del': - page.remove_editor(c.username) - else: - if not user: - self.handle_error(404, 'UNKNOWN_USER') + page.remove_editor(username) + elif not user: + self.handle_error(404, 'UNKNOWN_USER') + elif act == 'add': page.add_editor(user.name) + else: + self.handle_error(400, 'INVALID_ACTION') return json.dumps({}) @wiki_validate(VWikiModerator(), pv=VWikiPageAndVersion(('page', 'revision'))) - def POST_wiki_revision_hide(self, pv, page, revision): + def POST_wiki_revision_hide(self, pv): page, revision = pv + if not revision: + self.handle_error(400, 'INVALID_REVISION') return json.dumps({'status': revision.toggle_hide()}) @wiki_validate(VWikiModerator(), pv=VWikiPageAndVersion(('page', 'revision'))) - def POST_wiki_revision_revert(self, pv, page, revision): + def POST_wiki_revision_revert(self, pv): page, revision = pv + if not revision: + self.handle_error(400, 'INVALID_REVISION') content = revision.content author = revision._get('author') reason = 'reverted back %s' % timesince(revision.date) diff --git a/r2/r2/public/static/js/wiki.js b/r2/r2/public/static/js/wiki.js index 01be19c16..23b097eaf 100644 --- a/r2/r2/public/static/js/wiki.js +++ b/r2/r2/public/static/js/wiki.js @@ -1,6 +1,14 @@ r.wiki = { - baseUrl: function() { - base_url = '/wiki' + baseApiUrl: function() { + return r.wiki.baseUrl(true) + }, + + baseUrl: function(api) { + var base_url = '' + if (api) { + base_url += '/api' + } + base_url += '/wiki' if (!r.config.is_fake) { base_url = '/r/' + r.config.post_site + base_url } @@ -14,13 +22,17 @@ r.wiki = { toggleHide: function(event) { event.preventDefault() var $this = $(this), - url = r.wiki.baseUrl() + '/api/hide/' + $this.data('revision') + '/' + $this.data('page'), + url = r.wiki.baseApiUrl() + '/hide', $this_parent = $this.parents('.revision') $this_parent.toggleClass('hidden') $.ajax({ url: url, type: 'POST', dataType: 'json', + data: { + revision: $this.data('revision'), + page: r.config.wiki_page + }, error: function() { $this_parent.toggleClass('hidden') }, @@ -38,10 +50,14 @@ r.wiki = { event.preventDefault() $('#usereditallowerror').hide() var $this = $(event.target), - url = r.wiki.baseUrl() + '/api/alloweditor/add/' + $this.find('[name="username"]').val() + '/' + $this.data('page') + url = r.wiki.baseApiUrl() + '/alloweditor/add' $.ajax({ url: url, type: 'POST', + data: { + username: $this.find('[name="username"]').val(), + page: r.config.wiki_page + }, dataType: 'json', error: function() { $('#usereditallowerror').show() @@ -55,18 +71,21 @@ r.wiki = { submitEdit: function(event) { event.preventDefault() var $this = $(event.target), - url = r.wiki.baseUrl() + '/api/edit/' + $this.data('page'), + url = r.wiki.baseApiUrl() + '/edit', conflict = $('#wiki_edit_conflict'), special = $('#wiki_special_error') conflict.hide() special.hide() - $.ajax({ + $.each($this.serializeArray(), function(index,value) { + params[value.name] = value.value + }) + r.wiki.request({ url: url, type: 'POST', dataType: 'json', - data: $this.serialize(), + data: params, success: function() { - window.location = r.wiki.baseUrl() + '/' + $this.data('page') + window.location = r.wiki.baseUrl() + '/' + r.config.wiki_page }, statusCode: { 409: function(xhr) { diff --git a/r2/r2/templates/wikieditpage.html b/r2/r2/templates/wikieditpage.html index 33060478b..4c54e263e 100644 --- a/r2/r2/templates/wikieditpage.html +++ b/r2/r2/templates/wikieditpage.html @@ -38,14 +38,15 @@ -
+ %if thing.show_reason_field:


%endif -

- + + +

diff --git a/r2/r2/templates/wikipagesettings.html b/r2/r2/templates/wikipagesettings.html index 58c1e7c0a..9c61205fc 100644 --- a/r2/r2/templates/wikipagesettings.html +++ b/r2/r2/templates/wikipagesettings.html @@ -52,7 +52,7 @@ %if thing.permlevel != 2:
<%utils:line_field title="${_('allow users to edit page')}"> -
+ @@ -63,7 +63,7 @@
  • ${user} —  - ${ynbutton(_("(remove)"), _("done"), quote("../r/%s/wiki/api/alloweditor/del/%s/%s" % (c.site.name, user, c.page)), post_callback="$.refresh")} + ${ynbutton(_("delete"), _("done"), quote("..%s/alloweditor/del" % (c.wiki_api_url)), hidden_data=dict(username=user, page=c.page), post_callback="$.refresh")}
  • %endfor diff --git a/r2/r2/templates/wikirevision.html b/r2/r2/templates/wikirevision.html index f62cd0001..b6e9e4ced 100644 --- a/r2/r2/templates/wikirevision.html +++ b/r2/r2/templates/wikirevision.html @@ -64,11 +64,16 @@ %if c.page and c.is_wiki_mod: - hide + hide - ${ynbutton(_("revert here"), _("done"), quote("..%s/api/revert/%s/%s" % (c.wiki_base_url, thing._id, thing.page)), post_callback="$.refresh")} + ${ynbutton(_("revert here"), + _("done"), + quote("..%s/revert" % c.wiki_api_url), + hidden_data=dict(revision=thing._id, page=thing.page), + post_callback="$.refresh" + ) + } %endif -