view.py
branchtls-sprint
changeset 1433 091ac3ba5d51
parent 1432 2c3711d4570b
child 1498 2c6eec0b46b9
equal deleted inserted replaced
1432:2c3711d4570b 1433:091ac3ba5d51
   200     def set_request_content_type(self):
   200     def set_request_content_type(self):
   201         """set the content type returned by this view"""
   201         """set the content type returned by this view"""
   202         self.req.set_content_type(self.content_type)
   202         self.req.set_content_type(self.content_type)
   203 
   203 
   204     # view utilities ##########################################################
   204     # view utilities ##########################################################
   205     
   205 
   206     def wview(self, __vid, rset, __fallback_vid=None, **kwargs):
   206     def wview(self, __vid, rset, __fallback_vid=None, **kwargs):
   207         """shortcut to self.view method automatically passing self.w as argument
   207         """shortcut to self.view method automatically passing self.w as argument
   208         """
   208         """
   209         self.view(__vid, rset, __fallback_vid, w=self.w, **kwargs)
   209         self.view(__vid, rset, __fallback_vid, w=self.w, **kwargs)
   210         
   210 
   211     # XXX Template bw compat
   211     # XXX Template bw compat
   212     template = obsolete('.template is deprecated, use .view')(wview)
   212     template = obsolete('.template is deprecated, use .view')(wview)
   213 
   213 
   214     def whead(self, data):
   214     def whead(self, data):
   215         self.req.html_headers.write(data)
   215         self.req.html_headers.write(data)
   301                 label = display_name(self.req, label)
   301                 label = display_name(self.req, label)
   302             w(u'<span class="label">%s</span>' % label)
   302             w(u'<span class="label">%s</span>' % label)
   303         w(u'<div class="field">%s</div>' % value)
   303         w(u'<div class="field">%s</div>' % value)
   304         if row:
   304         if row:
   305             w(u'</div>')
   305             w(u'</div>')
   306             
   306 
   307     def initialize_varmaker(self):
   307     def initialize_varmaker(self):
   308         varmaker = self.req.get_page_data('rql_varmaker')
   308         varmaker = self.req.get_page_data('rql_varmaker')
   309         if varmaker is None:
   309         if varmaker is None:
   310             varmaker = self.req.varmaker
   310             varmaker = self.req.varmaker
   311             self.req.set_page_data('rql_varmaker', varmaker)
   311             self.req.set_page_data('rql_varmaker', varmaker)
   312         self.varmaker = varmaker
   312         self.varmaker = varmaker
   313         
   313 
   314 
   314 
   315 
   315 
   316 # concrete views base classes #################################################
   316 # concrete views base classes #################################################
   317 
   317 
   318 class EntityView(View):
   318 class EntityView(View):
   327     """base class for views which doesn't need a particular result set to be
   327     """base class for views which doesn't need a particular result set to be
   328     displayed (so they can always be displayed !)
   328     displayed (so they can always be displayed !)
   329     """
   329     """
   330     __select__ = none_rset()
   330     __select__ = none_rset()
   331     registered = require_group_compat(View.registered)
   331     registered = require_group_compat(View.registered)
   332     
   332 
   333     category = 'startupview'
   333     category = 'startupview'
   334     
   334 
   335     def url(self):
   335     def url(self):
   336         """return the url associated with this view. We can omit rql here"""
   336         """return the url associated with this view. We can omit rql here"""
   337         return self.build_url('view', vid=self.id)
   337         return self.build_url('view', vid=self.id)
   338 
   338 
   339     def html_headers(self):
   339     def html_headers(self):
   403             else:
   403             else:
   404                 label = translate(self.req, attr)
   404                 label = translate(self.req, attr)
   405             labels.append(label)
   405             labels.append(label)
   406         return labels
   406         return labels
   407 
   407 
   408     
   408 
   409 # concrete template base classes ##############################################
   409 # concrete template base classes ##############################################
   410 
   410 
   411 class MainTemplate(View):
   411 class MainTemplate(View):
   412     """main template are primary access point to render a full HTML page.
   412     """main template are primary access point to render a full HTML page.
   413     There is usually at least a regular main template and a simple fallback
   413     There is usually at least a regular main template and a simple fallback
   441         if not xmldecl:
   441         if not xmldecl:
   442             self._stream.xmldecl = u''
   442             self._stream.xmldecl = u''
   443 
   443 
   444     def linkable(self):
   444     def linkable(self):
   445         return False
   445         return False
   446     
   446 
   447 # concrete component base classes #############################################
   447 # concrete component base classes #############################################
   448 
   448 
   449 class ReloadableMixIn(object):
   449 class ReloadableMixIn(object):
   450     """simple mixin for reloadable parts of UI"""
   450     """simple mixin for reloadable parts of UI"""
   451     
   451 
   452     def user_callback(self, cb, args, msg=None, nonify=False):
   452     def user_callback(self, cb, args, msg=None, nonify=False):
   453         """register the given user callback and return an url to call it ready to be
   453         """register the given user callback and return an url to call it ready to be
   454         inserted in html
   454         inserted in html
   455         """
   455         """
   456         self.req.add_js('cubicweb.ajax.js')
   456         self.req.add_js('cubicweb.ajax.js')
   458             _cb = cb
   458             _cb = cb
   459             def cb(*args):
   459             def cb(*args):
   460                 _cb(*args)
   460                 _cb(*args)
   461         cbname = self.req.register_onetime_callback(cb, *args)
   461         cbname = self.req.register_onetime_callback(cb, *args)
   462         return self.build_js(cbname, html_escape(msg or ''))
   462         return self.build_js(cbname, html_escape(msg or ''))
   463         
   463 
   464     def build_update_js_call(self, cbname, msg):
   464     def build_update_js_call(self, cbname, msg):
   465         rql = html_escape(self.rset.printable_rql())
   465         rql = html_escape(self.rset.printable_rql())
   466         return "javascript:userCallbackThenUpdateUI('%s', '%s', '%s', '%s', '%s', '%s')" % (
   466         return "javascript:userCallbackThenUpdateUI('%s', '%s', '%s', '%s', '%s', '%s')" % (
   467             cbname, self.id, rql, msg, self.__registry__, self.div_id())
   467             cbname, self.id, rql, msg, self.__registry__, self.div_id())
   468     
   468 
   469     def build_reload_js_call(self, cbname, msg):
   469     def build_reload_js_call(self, cbname, msg):
   470         return "javascript:userCallbackThenReloadPage('%s', '%s')" % (cbname, msg)
   470         return "javascript:userCallbackThenReloadPage('%s', '%s')" % (cbname, msg)
   471 
   471 
   472     build_js = build_update_js_call # expect updatable component by default
   472     build_js = build_update_js_call # expect updatable component by default
   473     
   473 
   474     def div_id(self):
   474     def div_id(self):
   475         return ''
   475         return ''
   476 
   476 
   477 
   477 
   478 class Component(ReloadableMixIn, View):
   478 class Component(ReloadableMixIn, View):
   480     __registry__ = 'components'
   480     __registry__ = 'components'
   481     __select__ = yes()
   481     __select__ = yes()
   482     property_defs = {
   482     property_defs = {
   483         _('visible'):  dict(type='Boolean', default=True,
   483         _('visible'):  dict(type='Boolean', default=True,
   484                             help=_('display the component or not')),
   484                             help=_('display the component or not')),
   485         }    
   485         }
   486 
   486 
   487     def div_class(self):
   487     def div_class(self):
   488         return '%s %s' % (self.propval('htmlclass'), self.id)
   488         return '%s %s' % (self.propval('htmlclass'), self.id)
   489 
   489 
   490     def div_id(self):
   490     def div_id(self):