X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=unfold%2Fplugin.py;h=de84878c1f58d3f26cdffbe55c1726b1903d5f4b;hb=a953233a34580bc72aa8b6b03c017ff94f9eee7d;hp=b7ad65b8353bf307648e1d616e0b652b0d42b2b2;hpb=ae7d0ec0f0affa0d30fcbbd0d2edd7ad81cf6c01;p=myslice.git diff --git a/unfold/plugin.py b/unfold/plugin.py index b7ad65b8..de84878c 100644 --- a/unfold/plugin.py +++ b/unfold/plugin.py @@ -22,6 +22,8 @@ DEBUG= False # decorator to deflect calls on Plugin to its Prelude through self.page.prelude def to_prelude (method): def actual (self, *args, **kwds): + if not self.page: # jordan + return None prelude_method=Prelude.__dict__[method.__name__] return prelude_method(self.page.prelude,*args, **kwds) return actual @@ -32,10 +34,14 @@ class Plugin: # we just need this to be unique in a page domid=0 - @staticmethod - def newdomid(): + # when a domid is not set by the caller, we name plugins after their respective class as well, + # so as to limit name clashes between different views + # this has to see with the UI storing the last-seen status of plugins based on their id + # put it more bluntly it is recommended that a domid should be set + # and maybe xxx we should just enforce that... + def newdomid(self): Plugin.domid += 1 - return "plugin-%d"%Plugin.domid + return "plugin-%s-%d"%(self.__class__.__name__.lower(),Plugin.domid) ########## # Constructor @@ -65,19 +71,22 @@ class Plugin: # p=Plugin(foo='bar') # which will result in 'foo' being accessible to the template engine # - def __init__ (self, page, title, domid=None, - visible=True, togglable=True, toggled=None, **settings): + def __init__ (self, page, title=None, domid=None, + visible=True, togglable=None, toggled=None, **settings): self.page = page - self.title=title # callers can provide their domid for css'ing - if not domid: domid=Plugin.newdomid() + if not domid: domid=self.newdomid() self.domid=domid + # title is shown when togglable + #if not title: title="Plugin title for %s"%domid + self.title=title self.classname=self._py_classname() self.plugin_classname=self._js_classname() self.visible=visible - self.togglable=togglable - if toggled is not None: self.toggled=toggled - else: self.toggled=self.default_toggled() + if togglable is None: self.togglable=self.default_togglable() + else: self.togglable=togglable + if toggled is None: self.toggled=self.default_toggled() + else: self.toggled=toggled # what comes from subclasses for (k,v) in settings.iteritems(): setattr(self,k,v) @@ -88,7 +97,8 @@ class Plugin: for (k,v) in self.__dict__.items(): print "dbg %s:%s"%(k,v) print "%s init dbg .... END"%self.classname # do this only once the structure is fine - self.page.record_plugin(self) + if self.page: # I assume we can have a None page (Jordan) + self.page.record_plugin(self) def __repr__ (self): return "[%s]:%s"%(self.classname,self.domid) @@ -156,7 +166,7 @@ class Plugin: self.need_spin=self.start_with_spin() env.update(self.__dict__) # translate high-level 'toggled' into 4 different booleans - print "domid",self.domid,"toggled",self.toggled + self.need_toggle = False if self.toggled=='persistent': # start with everything turned off and let the js callback do its job env.update({'persistent_toggle':True,'display_hide_button':False,'display_show_button':False,'display_body':False}) @@ -166,7 +176,6 @@ class Plugin: env.update({'persistent_toggle':False,'display_hide_button':True,'display_show_button':False,'display_body':True}) if self.need_debug(): print "rendering plugin.html with env keys %s"%env.keys() - print "rendering plugin.html with env" for (k,v) in env.items(): if "display" in k or "persistent" in k: print k,'->',v result = render_to_string ('plugin.html',env) @@ -251,6 +260,7 @@ class Plugin: def template_file (self): return "undefined_template" def template_env (self, request): return {} + def default_togglable (self): return False def default_toggled (self): return 'persistent' # # tell the framework about requirements (for the document
)