===================================
20131115 (Friday, 15 November 2013)
===================================
Plugins
-------
Yesterday Joe and I had our first Skype meeting which lasted
about 70 minutes.
We had a brainstorming about a feature Joe would like to use:
allow for chunks of custom js and css files and templates.
Something which should use Django's `Form Assets (the Media class)
`_.
How to name it? settings.SITE.add_feature()?
It seems that Django does not parse these `Media` files nor provide a
method to generate a single file from all those chunks. The whole Media
class in fact is not meant for *generating* a file. We must differentiate
between (1) self-maintained JS and CSS snippets and (2)
external JS libraries.
So yes, we'll need to extend Django's system.
After some sleep I realized that we have been looking for the name
"plugin", and that this had been already almost implemented (in
djangosite.Site). But I had never started to actually use it because
there was no urgent need. Now I converted `use_eidreader` and
`use_eid_jslib` to "Plugins", and it works, and everything is much
cooler! I'm fascinated!
So the Site setting :setting:`use_eidreader` has been replaced
by the :class:`lino.mixins.beid.BeIdReaderPlugin`.
Instead of setting :setting:`use_eidreader` to True you must
override :setting:`get_installed_plugins` as follows::
def get_installed_plugins(self):
for p in super(Site,self).get_installed_plugins():
yield p
yield 'lino.mixins.beid.BeIdReaderPlugin'
The base class is (currently) defined in
:class:`djangosite.djangosite_site.Plugin`
and should be used from ``dd.Plugin``.
The :srcref:`lino/config/plugins/eidreader.js` snippet contains code
which was previously in :xfile:`linolib.js`
(which definitively was not the right place)
TODO:
- move `lino.mixins.beid` to `lino.plugins.beid`.
- The next plugins will be `lino.plugins.davlink.DavLinkPlugin`
(replacing :setting:`use_davlink`)
and/or `lino.extjs.ExtJS3Plugin` (replacing :setting:`use_extjs`).
Note that the current implementation does **not** use
Django's `Form Assets
`_
because that would cause more work when converting the
existing `use_xxx` settings to plugins
and because I don't (yet) see any advantage...