wiki: Restructure api endpoints.

This commit is contained in:
Andre D
2012-09-12 20:49:13 -05:00
committed by Neil Williams
parent 4963fd239f
commit 4a5f0cf3c7
6 changed files with 64 additions and 31 deletions

View File

@@ -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')

View File

@@ -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)

View File

@@ -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) {

View File

@@ -38,14 +38,15 @@
<span id="specials" class="error"></span>
</div>
<form method="post" id="editform" data-page="${c.page}" onsubmit="r.wiki.submitEdit(event)">
<form method="post" id="editform" onsubmit="r.wiki.submitEdit(event)">
<textarea name="content" rows="20" cols="20" style="width: 100%" id="content">${keep_space(thing.page_content)}</textarea>
%if thing.show_reason_field:
<br/><br/>
<label for="reason">${_("reason for revision")}</label><br/>
<input type="text" name="reason" id="wiki_revision_reason" />
%endif
<input type="hidden" id="previous" name="previous" value="${thing.previous}" /><br/><br/>
<input type="submit" value="${_('save page')}" />
<input type="hidden" id="page" name="page" value="${thing.page}" />
<input type="hidden" id="previous" name="previous" value="${thing.previous}" />
<br/><br/><input type="submit" value="${_('save page')}" />
<input type="button" value="${_('cancel edit')}" onclick="location.href='${thing.base_url}/${c.page}'" />
</form>

View File

@@ -52,7 +52,7 @@
%if thing.permlevel != 2:
<br/>
<%utils:line_field title="${_('allow users to edit page')}">
<form id="WikiAllowEditor" data-page="${c.page}" onsubmit="r.wiki.addUser(event)">
<form id="WikiAllowEditor" onsubmit="r.wiki.addUser(event)">
<input name="username" maxlength="32" type="text" style="width: 430px;" />
<button type="submit" style="font-size: 100%;">${_('add')}</button>
<h3 class="error" style="display:none" id="usereditallowerror">${_('username does not exist')}</h2>
@@ -63,7 +63,7 @@
<li>
${user}
&mdash;&nbsp;
${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")}
</li>
%endfor
</ul>

View File

@@ -64,11 +64,16 @@
%if c.page and c.is_wiki_mod:
<td>
<a href="#" class="revision_hide" data-revision="${thing._id}" data-page="${thing.page}">hide</a>
<a href="#" class="revision_hide" data-revision="${thing._id}">hide</a>
</td>
<td class="wiki_revert" style="white-space: nowrap;">
${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"
)
}
</td>
%endif
</tr>