mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-28 08:17:58 -05:00
wiki: Restructure api endpoints.
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
—
|
||||
${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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user