diff -r ef903fff826d -r 7b9553a9db65 web/views/basecontrollers.py --- a/web/views/basecontrollers.py Thu Jun 03 10:17:44 2010 +0200 +++ b/web/views/basecontrollers.py Thu Jun 03 14:51:42 2010 +0200 @@ -262,6 +262,12 @@ self._cw.encoding) return self.response(domid, status, args, entity) +def optional_kwargs(extraargs): + if extraargs is None: + return {} + else: # we receive unicode keys which is not supported by the **syntax + return dict((str(key), value) + for key, value in extraargs.items()) class JSonController(Controller): __regid__ = 'json' @@ -421,6 +427,18 @@ # raise RemoteCallFailed('unselectable') return self._call_view(comp, **extraargs) + @xhtmlize + def js_render(self, registry, oid, eid=None, selectargs=None, renderargs=None): + if eid is not None: + rset = self._cw.eid_rset(eid) + elif 'rql' in self._cw.form: + rset = self._cw.execute(self._cw.form['rql']) + else: + rset = None + selectargs = optional_kwargs(selectargs) + view = self._cw.vreg[registry].select(oid, self._cw, rset=rset, **selectargs) + return self._call_view(view, **optional_kwargs(renderargs)) + @check_pageid @xhtmlize def js_inline_creation_form(self, peid, petype, ttype, rtype, role, i18nctx): @@ -440,13 +458,13 @@ @xhtmlize def js_reledit_form(self): req = self._cw - args = dict((x, self._cw.form[x]) + args = dict((x, req.form[x]) for x in frozenset(('rtype', 'role', 'reload', 'landing_zone'))) - entity = self._cw.entity_from_eid(int(self._cw.form['eid'])) + entity = req.entity_from_eid(typed_eid(req.form['eid'])) # note: default is reserved in js land - args['default'] = self._cw.form['default_value'] + args['default'] = req.form['default_value'] args['reload'] = json.loads(args['reload']) - rset = req.eid_rset(int(self._cw.form['eid'])) + rset = req.eid_rset(typed_eid(req.form['eid'])) view = req.vreg['views'].select('doreledit', req, rset=rset, rtype=args['rtype']) return self._call_view(view, **args)