# so it should be specialized in real plugin classes
# like e.g. plugins.simplelist.SimpleList
+import json
+
from django.template.loader import render_to_string
class Plugin:
title = self.get_class()
plugin_content = self.render_content (request)
+ # expose _settings in json format to js
+ settings_json = json.dumps(self._settings, separators=(',',':'))
+
# xxx missing from the php version
# compute an 'optionstr' from the set of available settings/options as a json string
# that gets passed to jquery somehow
'hidable':self.is_hidable(),
'hidden':self.is_hidden_by_default(),
'plugin_content' : plugin_content,
- 'optionstr' : 'xxx-todo',
+ 'settings' : settings_json,
})
return result
### abstract interface
+ # you may redefine this completely, but if you don't we'll just use method
+ # template() to find out which template to use, and env() to find out which
+ # dictionary to pass the templating system
def render_content (self, request):
"""Should return an HTML fragment"""
- return "Your plugin needs to redefine 'render_content(self, request)'"
+ template = self.template()
+ env=self.env()
+ return render_to_string (template, env)
</div>
{% endif %}
+{% insert prelude_js %}
{% if visible and hidable %}
{# xxx sounds like this could be optimized by a single call performed on document.ready #}
{# that would do that on all DOM elements that require it #}
-{% insert prelude_js %}
/* Show / hide plugin */
-
jQuery('#show_{{ uuid }}').click(function() {
jQuery('#{{ uuid }}').show();
if (typeof jQuery('#{{ uuid }}').{{ title }} != 'undefined') {
{% if hidden %}
jQuery('#{{ uuid }}').hide()
{% endif %}
-/* {{ optionstr }} optionstr needs more work */
-{% endinsert %}
{% endif %}
+/* Plugin initialization (if the plugin has the right structure) - from plugin.php */
+if (typeof jQuery('#{{ uuid }}').$title != 'undefined') {
+ jQuery('#{{ uuid }}').$title({ {{ settings }} plugin_uuid: '{{ uuid }}' });
+ //jQuery('#{{ uuid }}').$title('show');
+ };
+{% endinsert %}