def __call__(self, c=None, f='index', args=[], vars={}, extension=None, target=None,ajax=False,ajax_trap=False, url=None): import globals target = target or 'c'+str(random.random())[2:] request = self.environment['request'] if '.' in f: f, extension = f.split('.',1) if c and not url and not ajax: other_environment = copy.copy(self.environment) other_request = globals.Request() other_request.application = request.application other_request.controller = c other_request.function = f other_request.extension = extension or request.extension other_request.args = List(args) other_request.folder = request.folder other_request.env = request.env if not ajax_trap: other_request.vars = request.vars other_request.get_vars = request.get_vars other_request.post_vars = request.post_vars else: other_request.vars = vars other_environment['request'] = other_request other_response = globals.Response() other_environment['response'] = other_response other_response._view_environment = other_environment other_request.env.http_web2py_component_location = \ request.env.path_info other_request.env.http_web2py_component_element = target other_response.view = '%s/%s.%s' % (c,f, other_request.extension) page = run_controller_in(c, f, other_environment) if isinstance(page, dict): other_response._vars = page for key in page: other_response._view_environment[key] = page[key] run_view_in(other_response._view_environment) page = other_response.body.getvalue() script = '' if ajax_trap: script += "web2py_trap_form('%s','%s');" % \ (html.URL(request.application,c,f, args=args,vars=vars, extension=extension),target) #for (name,value) in other_response.headers: # if name == 'web2py-component-command': # script += value return html.TAG[''](html.DIV(html.XML(page),_id=target), html.SCRIPT(script,_type="text/javascript")) else: url = url or html.URL(request.application,c, f, args=args,vars=vars, extension=extension) return html.TAG[''](html.SCRIPT('web2py_component("%s","%s")' % \ (url,target), _type="text/javascript"), html.DIV('loading...',_id=target))
def __call__(self, c=None, f='index', args=None, vars=None, extension=None, target=None,ajax=False,ajax_trap=False, url=None,user_signature=False, content='loading...',**attr): if args is None: args = [] vars = Storage(vars or {}) import globals target = target or 'c'+str(random.random())[2:] attr['_id']=target request = self.environment['request'] if '.' in f: f, extension = f.rsplit('.',1) if url or ajax: url = url or html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) script = html.SCRIPT('web2py_component("%s","%s")' % (url, target), _type="text/javascript") return html.TAG[''](script, html.DIV(content,**attr)) else: if not isinstance(args,(list,tuple)): args = [args] c = c or request.controller other_request = Storage(request) other_request['env'] = Storage(request.env) other_request.controller = c other_request.function = f other_request.extension = extension or request.extension other_request.args = List(args) other_request.vars = vars other_request.get_vars = vars other_request.post_vars = Storage() other_response = globals.Response() other_request.env.path_info = '/' + \ '/'.join([request.application,c,f] + \ map(str, other_request.args)) other_request.env.query_string = \ vars and html.URL(vars=vars).split('?')[1] or '' other_request.env.http_web2py_component_location = \ request.env.path_info other_request.cid = target other_request.env.http_web2py_component_element = target other_response.view = '%s/%s.%s' % (c,f, other_request.extension) other_environment = copy.copy(self.environment) other_response._view_environment = other_environment other_response.generic_patterns = \ copy.copy(current.response.generic_patterns) other_environment['request'] = other_request other_environment['response'] = other_response ## some magic here because current are thread-locals original_request, current.request = current.request, other_request original_response, current.response = current.response, other_response page = run_controller_in(c, f, other_environment) if isinstance(page, dict): other_response._vars = page other_response._view_environment.update(page) run_view_in(other_response._view_environment) page = other_response.body.getvalue() current.request, current.response = original_request, original_response js = None if ajax_trap: link = html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) js = "web2py_trap_form('%s','%s');" % (link, target) script = js and html.SCRIPT(js,_type="text/javascript") or '' return html.TAG[''](html.DIV(html.XML(page),**attr),script)
def __call__(self, c=None, f='index', args=[], vars={}, extension=None, target=None,ajax=False,ajax_trap=False, url=None,user_signature=False, content='loading...',**attr): import globals target = target or 'c'+str(random.random())[2:] attr['_id']=target request = self.environment['request'] if '.' in f: f, extension = f.split('.',1) if url or ajax: url = url or html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) script = html.SCRIPT('web2py_component("%s","%s")' % (url, target), _type="text/javascript") return html.TAG[''](script, html.DIV(content,**attr)) else: if not isinstance(args,(list,tuple)): args = [args] c = c or request.controller other_request = globals.Request() other_request.application = request.application other_request.controller = c other_request.function = f other_request.extension = extension or request.extension other_request.args = List(args) other_request.folder = request.folder other_request.env = request.env other_request.vars = request.vars other_request.get_vars = request.get_vars other_request.post_vars = request.post_vars other_response = globals.Response() other_request.env.http_web2py_component_location = \ request.env.path_info other_request.env.http_web2py_component_element = target other_response.view = '%s/%s.%s' % (c,f, other_request.extension) other_environment = copy.copy(self.environment) other_response._view_environment = other_environment other_environment['request'] = other_request other_environment['response'] = other_response page = run_controller_in(c, f, other_environment) if isinstance(page, dict): other_response._vars = page for key in page: other_response._view_environment[key] = page[key] run_view_in(other_response._view_environment) page = other_response.body.getvalue() js = None if ajax_trap: link = html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) js = "web2py_trap_form('%s','%s');" % (link, target) # not sure about this # for (name,value) in other_response.headers: # if name == 'web2py-component-command': # js += value script = js and html.SCRIPT(js,_type="text/javascript") or '' return html.TAG[''](html.DIV(html.XML(page),**attr),script)