Skip to content

Commit

Permalink
Alter plugin API: BasePlugin.urlpatterns is now a dictionary
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaoming committed Jun 9, 2013
1 parent ca59f20 commit c259b31
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 36 deletions.
5 changes: 4 additions & 1 deletion wiki/core/plugins/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ class BasePlugin(object):

# Optional
settings_form = None# A form class to add to the settings tab
urlpatterns = []
urlpatterns = {
'root': [], # General urlpatterns that will reside in /wiki/plugins/plugin-slug/...
'article': [], # urlpatterns that receive article_id or urlpath, i.e. /wiki/ArticleName/plugin/plugin-slug/...
}
article_tab = None #(_(u'Attachments'), "icon-file")
article_view = None # A view for article_id/plugin/slug/
notifications = [] # A list of notification handlers to be subscribed if the notification system is active
Expand Down
26 changes: 13 additions & 13 deletions wiki/plugins/attachments/wiki_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,20 @@

class AttachmentPlugin(BasePlugin):

#settings_form = 'wiki.plugins.notifications.forms.SubscriptionForm'

slug = settings.SLUG
urlpatterns = patterns('',
url(r'^$', views.AttachmentView.as_view(), name='attachments_index'),
url(r'^search/$', views.AttachmentSearchView.as_view(), name='attachments_search'),
url(r'^add/(?P<attachment_id>\d+)/$', views.AttachmentAddView.as_view(), name='attachments_add'),
url(r'^replace/(?P<attachment_id>\d+)/$', views.AttachmentReplaceView.as_view(), name='attachments_replace'),
url(r'^history/(?P<attachment_id>\d+)/$', views.AttachmentHistoryView.as_view(), name='attachments_history'),
url(r'^download/(?P<attachment_id>\d+)/$', views.AttachmentDownloadView.as_view(), name='attachments_download'),
url(r'^delete/(?P<attachment_id>\d+)/$', views.AttachmentDeleteView.as_view(), name='attachments_delete'),
url(r'^download/(?P<attachment_id>\d+)/revision/(?P<revision_id>\d+)/$', views.AttachmentDownloadView.as_view(), name='attachments_download'),
url(r'^change/(?P<attachment_id>\d+)/revision/(?P<revision_id>\d+)/$', views.AttachmentChangeRevisionView.as_view(), name='attachments_revision_change'),
)
urlpatterns = {
'article': patterns('',
url(r'^$', views.AttachmentView.as_view(), name='attachments_index'),
url(r'^search/$', views.AttachmentSearchView.as_view(), name='attachments_search'),
url(r'^add/(?P<attachment_id>\d+)/$', views.AttachmentAddView.as_view(), name='attachments_add'),
url(r'^replace/(?P<attachment_id>\d+)/$', views.AttachmentReplaceView.as_view(), name='attachments_replace'),
url(r'^history/(?P<attachment_id>\d+)/$', views.AttachmentHistoryView.as_view(), name='attachments_history'),
url(r'^download/(?P<attachment_id>\d+)/$', views.AttachmentDownloadView.as_view(), name='attachments_download'),
url(r'^delete/(?P<attachment_id>\d+)/$', views.AttachmentDeleteView.as_view(), name='attachments_delete'),
url(r'^download/(?P<attachment_id>\d+)/revision/(?P<revision_id>\d+)/$', views.AttachmentDownloadView.as_view(), name='attachments_download'),
url(r'^change/(?P<attachment_id>\d+)/revision/(?P<revision_id>\d+)/$', views.AttachmentChangeRevisionView.as_view(), name='attachments_revision_change'),
)
}

article_tab = (_(u'Attachments'), "icon-file")
article_view = views.AttachmentView().dispatch
Expand Down
2 changes: 0 additions & 2 deletions wiki/plugins/help/wiki_plugin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns
from django.utils.translation import ugettext as _

from wiki.core.plugins import registry
Expand All @@ -8,7 +7,6 @@
class HelpPlugin(BasePlugin):

slug = 'help'
urlpatterns = patterns('',)

sidebar = {'headline': _('Help'),
'icon_class': 'icon-question-sign',
Expand Down
10 changes: 6 additions & 4 deletions wiki/plugins/highlighter/wiki_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
class LinkPlugin(BasePlugin):

slug = 'links'
urlpatterns = patterns('',
url(r'^json/query-urlpath/$', views.QueryUrlPath.as_view(), name='links_query_urlpath'),
)
urlpatterns = {
'article': patterns('',
url(r'^json/query-urlpath/$', views.QueryUrlPath.as_view(), name='links_query_urlpath')
),
}

sidebar = {'headline': _('Links'),
'icon_class': 'icon-bookmark',
Expand All @@ -26,7 +28,7 @@ class LinkPlugin(BasePlugin):
wikipath_config = [
('base_url', reverse_lazy('wiki:get', kwargs={'path': ''}) ),
('default_level', settings.LOOKUP_LEVEL ),
]
]

markdown_extensions = [urlize_makeExtension(), WikiPathExtension(wikipath_config)]

Expand Down
18 changes: 10 additions & 8 deletions wiki/plugins/images/wiki_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,16 @@ class RenderMedia:
'screen': 'wiki/colorbox/example1/colorbox.css'
}

urlpatterns = patterns('',
url('^$', views.ImageView.as_view(), name='images_index'),
url('^delete/(?P<image_id>\d+)/$', views.DeleteView.as_view(), name='images_delete'),
url('^restore/(?P<image_id>\d+)/$', views.DeleteView.as_view(), name='images_restore', kwargs={'restore': True}),
url('^purge/(?P<image_id>\d+)/$', views.PurgeView.as_view(), name='images_purge'),
url('^(?P<image_id>\d+)/revision/change/(?P<rev_id>\d+)/$', views.RevisionChangeView.as_view(), name='images_restore'),
url('^(?P<image_id>\d+)/revision/add/$', views.RevisionAddView.as_view(), name='images_add_revision'),
)
urlpatterns = {
'article': patterns('',
url('^$', views.ImageView.as_view(), name='images_index'),
url('^delete/(?P<image_id>\d+)/$', views.DeleteView.as_view(), name='images_delete'),
url('^restore/(?P<image_id>\d+)/$', views.DeleteView.as_view(), name='images_restore', kwargs={'restore': True}),
url('^purge/(?P<image_id>\d+)/$', views.PurgeView.as_view(), name='images_purge'),
url('^(?P<image_id>\d+)/revision/change/(?P<rev_id>\d+)/$', views.RevisionChangeView.as_view(), name='images_restore'),
url('^(?P<image_id>\d+)/revision/add/$', views.RevisionAddView.as_view(), name='images_add_revision'),
)
}

markdown_extensions = [ImageExtension()]

Expand Down
10 changes: 6 additions & 4 deletions wiki/plugins/links/wiki_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
class LinkPlugin(BasePlugin):

slug = 'links'
urlpatterns = patterns('',
url(r'^json/query-urlpath/$', views.QueryUrlPath.as_view(), name='links_query_urlpath'),
)
urlpatterns = {
'article': patterns('',
url(r'^json/query-urlpath/$', views.QueryUrlPath.as_view(), name='links_query_urlpath'),
)
}

sidebar = {'headline': _('Links'),
'icon_class': 'icon-bookmark',
Expand All @@ -26,7 +28,7 @@ class LinkPlugin(BasePlugin):
wikipath_config = [
('base_url', reverse_lazy('wiki:get', kwargs={'path': ''}) ),
('default_level', settings.LOOKUP_LEVEL ),
]
]

markdown_extensions = [urlize_makeExtension(), WikiPathExtension(wikipath_config)]

Expand Down
2 changes: 2 additions & 0 deletions wiki/plugins/notifications/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@

# Key for django_notify - changing it will break any existing notifications.
ARTICLE_EDIT = "article_edit"

SLUG = 'notifications'
21 changes: 21 additions & 0 deletions wiki/plugins/notifications/views.py
Original file line number Diff line number Diff line change
@@ -1 +1,22 @@
# Create your views here.
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic.list import ListView

from django_notify import models

class NotificationSettings(ListView):

template_name = 'wiki/plugins/notifications/settings.html'
allow_empty = True
context_object_name = 'settings'
paginate_by = 10

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(NotificationSettings, self).dispatch(request, *args, **kwargs)

def get_queryset(self):
settings = models.Settings.objects.filter(user=self.request.user)
return settings

13 changes: 13 additions & 0 deletions wiki/plugins/notifications/wiki_plugin.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
from wiki.core.plugins import registry
from wiki.core.plugins.base import BasePlugin

from django.conf.urls import patterns, url

import settings, views

class NotifyPlugin(BasePlugin):

slug = settings.SLUG
urlpatterns = {
'root': patterns('',
url(r'^$', views.NotificationSettings.as_view(), name='notification_settings'),
)
}

article_view = views.NotificationSettings().dispatch

settings_form = 'wiki.plugins.notifications.forms.SubscriptionForm'

def __init__(self):
Expand Down
12 changes: 8 additions & 4 deletions wiki/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,15 @@ def get_plugin_urls(self):
urlpatterns = patterns('',)
for plugin in registry.get_plugins().values():
slug = getattr(plugin, 'slug', None)
plugin_urlpatterns = getattr(plugin, 'urlpatterns', None)
if slug and plugin_urlpatterns:
if slug:
article_urlpatterns = plugin.urlpatterns.get('article', [])
urlpatterns += patterns('',
url('^(?P<article_id>\d+)/plugin/' + slug + '/', include(plugin_urlpatterns)),
url('^(?P<path>.+/|)_plugin/' + slug + '/', include(plugin_urlpatterns)),
url('^(?P<article_id>\d+)/plugin/' + slug + '/', include(article_urlpatterns)),
url('^(?P<path>.+/|)_plugin/' + slug + '/', include(article_urlpatterns)),
)
root_urlpatterns = plugin.urlpatterns.get('root', [])
urlpatterns += patterns('',
url('^_plugin/' + slug + '/', include(root_urlpatterns)),
)
return urlpatterns

Expand Down

0 comments on commit c259b31

Please sign in to comment.