[refactor][m]: rename extension from exampletheme to example as per new repository name.
[ckanext-datagovau.git] / ckanext / example / plugin.py
blob:a/ckanext/example/plugin.py -> blob:b/ckanext/example/plugin.py
--- a/ckanext/example/plugin.py
+++ b/ckanext/example/plugin.py
@@ -1,6 +1,8 @@
 import os
 from logging import getLogger
 
+from pylons import request
+from genshi.input import HTML
 from genshi.filters.transform import Transformer
 
 from ckan.plugins import implements, SingletonPlugin
@@ -21,9 +23,11 @@
         found in the ``ini``-file.  Here we use it to specify the site
         title, and to tell CKAN to look in this package for templates
         and resources that customise the core look and feel.
+        
       - ``IGenshiStreamFilter`` allows us to filter and transform the
         HTML stream just before it is rendered.  In this case we use
         it to rename "frob" to "foobar"
+        
       - ``IRoutes`` allows us to add new URLs, or override existing
         URLs.  In this example we use it to override the default
         ``/register`` behaviour with a custom controller
@@ -47,15 +51,17 @@
         our_public_dir = os.path.join(rootdir, 'ckanext',
                                       'example', 'theme', 'public')
         template_dir = os.path.join(rootdir, 'ckanext',
-                                    'example', 'theme',
-        'templates')
+                                    'example', 'theme', 'templates')
         # set our local template and resource overrides
         config['extra_public_paths'] = ','.join([our_public_dir,
                 config.get('extra_public_paths', '')])
         config['extra_template_paths'] = ','.join([template_dir,
                 config.get('extra_template_paths', '')])
+        # add in the extra.css
+        config['ckan.template_head_end'] = config.get('ckan.template_head_end', '') +\
+                                           '<link rel="stylesheet" href="/css/extra.css" type="text/css"> '
         # set the title
-        config['ckan.site_title'] = "An example CKAN theme"
+        config['ckan.site_title'] = "Example CKAN theme"
         # set the customised package form (see ``setup.py`` for entry point)
         config['package_form'] = "example_form"
 
@@ -65,9 +71,26 @@
         This example filter renames 'frob' to 'foobar' (this string is
         found in the custom ``home/index.html`` template provided as
         part of the package).
+
+        It also adds the chosen JQuery plugin to the page if viewing the
+        dataset edit page (provides a better UX for working with tags with vocabularies)
         """
         stream = stream | Transformer('//p[@id="examplething"]/text()')\
                  .substitute(r'frob', r'foobar')
+
+        routes = request.environ.get('pylons.routes_dict')
+        if routes.get('controller') == 'package' \
+            and routes.get('action') == 'edit':
+                stream = stream | Transformer('head').append(HTML(
+                    '<link rel="stylesheet" href="/css/chosen.css" />'
+                ))
+                stream = stream | Transformer('body').append(HTML(
+                    '''
+                    <script src="/scripts/chosen.jquery.min.js" type="text/javascript"></script>'
+                    <script type="text/javascript">$(".chzn-select").chosen();</script>
+                    '''
+                ))
+
         return stream
 
     def before_map(self, map):
@@ -79,14 +102,18 @@
         Note that we have also provided a custom register form
         template at ``theme/templates/user/register.html``.
         """
-        # Note that when we set up the route, we must use the form
-        # that gives it a name (i.e. in this case, 'register'), so it
-        # works correctly with the url_for helper::
-        #    h.url_for('register')
-        map.connect('register',
-                    '/user/register',
+        # Hook in our custom user controller at the points of creation
+        # and edition.
+        map.connect('/user/register',
                     controller='ckanext.example.controller:CustomUserController',
-                    action='custom_register')
+                    action='register')
+        map.connect('/user/edit',
+                    controller='ckanext.example.controller:CustomUserController',
+                    action='edit')
+        map.connect('/user/edit/{id:.*}',
+                    controller='ckanext.example.controller:CustomUserController',
+                    action='edit')
+
         map.connect('/package/new', controller='package_formalchemy', action='new')
         map.connect('/package/edit/{id}', controller='package_formalchemy', action='edit')
         return map