Beispiel #1
0
 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))
Beispiel #2
0
 def solo(self, post):
     posts = list(post.blog.blogdir.sortedPosts())
     posts.remove(post)
     posts = [i for i in posts if "draft" not in i.options]
     parts = []
     related_posts = []
     if self.related:
         related_posts = post.related(posts, self.related)
         parts.append(
             self._makeList(related_posts, self.related,
                            self.RELATED_TITLE))
     if self.recent:
         for i in related_posts:
             if i in posts:
                 posts.remove(i)
         parts.append(
             self._makeList([i for i in posts if "top" in i.options],
                            self.recent, self.RECENT_TITLE))
     return html.DIV(*parts)
Beispiel #3
0
 def _makeList(self, posts, num, title):
     monthyear = None
     output = html.DIV(_class=self.CSS_PREFIX)
     output.addChild(html.H2(title))
     postlst = []
     for i in posts:
         if not num:
             break
         if not i.url:
             postlst.append(
                 html.Group(
                     html.SPAN(model.LinkTo(i),
                               _class="%s-post" % self.CSS_PREFIX), " ",
                     html.SPAN(i.time.strftime("%d %b %Y"),
                               _class="%s-date" % self.CSS_PREFIX)))
             num -= 1
     if postlst:
         output.addChild(html.UL(postlst))
         return output
     else:
         return ""
Beispiel #4
0
 def _getArchive(self):
     monthyear = None
     output = html.DIV(_class="archive")
     postlst = []
     for i in self.blog.blogdir.sortedPosts():
         if "draft" in i.options:
             continue
         my = i.time.strftime("%B %Y")
         if my != monthyear:
             if postlst:
                 output.addChild(html.UL(postlst))
                 postlst = []
             monthyear = my
             output.addChild(html.H1(monthyear))
         postlst.append(
             html.Group(
                 html.SPAN(model.LinkTo(i), _class="archive-post"), " ",
                 html.SPAN(i.time.strftime("%d %b %Y"),
                           _class="archive-date")))
     if postlst:
         output.addChild(html.UL(postlst))
     return output
Beispiel #5
0
 def __str__(self):
     exclude = [state.application.getPage(i) for i in self.exclude]
     nodes = self._getNodes()
     d = html.DIV(self._mkUL(nodes, exclude, self.depth),
                  _class=self.divclass)
     return unicode(d)
Beispiel #6
0
    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)
Beispiel #7
0
    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)