Exemplo n.º 1
0
    def filter_stream(self, req, method, filename, stream, data):
        if filename == 'browser.html' \
                and req.perm.has_permission('REPOSITORY_MODIFY'):
            self.log.debug('Extending TracBrowser')

            if self.include_jqueryui:
                add_stylesheet(
                    req, 'trac_browser_svn_ops/css/smoothness/jquery-ui.css')
                add_script(req, 'trac_browser_svn_ops/js/jquery-ui.js')

            add_stylesheet(req,
                           'trac_browser_svn_ops/css/trac_browser_ops.css')
            add_script(req, 'trac_browser_svn_ops/js/trac_browser_ops.js')

            # Insert browser operations elements when directory/file shown
            if data['dir']:
                data['max_upload_size'] = self.max_upload_size
                data['rename_only'] = self.rename_only

                # Insert upload dialog and move/delete dialog into div#main
                bsops_stream = Chrome(self.env).render_template(
                    req, 'trac_browser_ops.html', data, fragment=True)
                bsops_transf = Transformer('//div[@id="main"]')
                stream |= bsops_transf.append(
                    bsops_stream.select('//div[@class="bsop_dialog"]'))

                # Insert button bar after file/directory table
                bsops_stream = Chrome(self.env).render_template(
                    req, 'trac_browser_ops.html', data, fragment=True)
                bsops_transf = Transformer('//table[@id="dirlist"]')
                stream |= bsops_transf.after(
                    bsops_stream.select('//div[@id="bsop_buttons"]'))

        return stream
Exemplo n.º 2
0
    def filter_stream(self, req, method, filename, stream, data):
        # Allow setting version for milestone
        if filename == 'milestone_edit.html':
            xformer = Transformer('//fieldset[1]')
            return stream | xformer.before(self._version_edit(data))

        # Display version for milestone
        elif filename == 'milestone_view.html':
            milestone = data.get('milestone').name
            xformer = Transformer('//div[@id="content" and '
                                  '      @class="milestone"]'
                                  '/div/p[@class="date"]')
            return stream | xformer.append(
                self._version_display(req, milestone))
        elif filename == 'roadmap.html':
            return self._milestone_versions(stream, req)
        elif filename == 'admin_milestones.html':
            if req.args['path_info']:
                xformer = Transformer('//fieldset/div[1]')
                return stream | xformer.after(self._version_edit(data))
            else:
                xformer = Transformer('//form[@id="addmilestone"]'
                                      '/fieldset/div[1]')
                return stream | xformer.after(self._version_edit(data))
        return stream
Exemplo n.º 3
0
def disable_field(stream, field):
    def select_helper(stream):
        s = Stream(stream)
        name = s.select('@name').textOf()
        opt = s.select('//option[@selected]')
        if not opt: s.select('//option[position()=1]')
        text = opt.select("text()").textOf()
        value = s.select('@value').textOf()
        if not value: value = text

        for kind, data, pos in tag.span(text,
                                        id=("field-%s" % field)).generate():
            yield kind, data, pos
        for kind, data, pos in tag.input(value=value, name=name,
                                         type="hidden").generate():
            yield kind, data, pos

    def helper(field_stream):
        s = Stream(field_stream)
        value = s.select('@value').textOf()
        name = s.select('@name').textOf()
        for kind, data, pos in tag.span(value,
                                        id=("field-%s" % field)).generate():
            yield kind, data, pos
        for kind, data, pos in tag.input(value=value, name=name,
                                         type="hidden").generate():
            yield kind, data, pos

    stream = stream | Transformer(
        '//select[@id="field-%s"]' % field).filter(select_helper)
    stream = stream | Transformer(
        '//input[@id="field-%s"]' % field).filter(helper)
    return stream
Exemplo n.º 4
0
 def filter_stream(self, req, method, filename, stream, data):
     if filename == 'ticket.html':
         filter = Transformer('//label[@for="field-evaluation"]')
         stream |= filter.remove()
         filter = Transformer('//select[@id="field-evaluation"]')
         stream |= filter.remove()
     return stream
Exemplo n.º 5
0
    def filter_stream(self, req, method, filename, stream, data):

        if req.path_info.startswith('/admin/ticket/components/'):
            trans = Transformer('//form[@id="edit"]/fieldset/div[1]')
            stream = stream | trans.after(
                self._parent_component_select(req, data))

        elif req.path_info.startswith('/admin/ticket/components'):
            # add a "parent component" column to the components table
            stream = stream | Transformer(
                '//table[@id="complist"]/thead/tr/th[3]').\
                after(html.th('Parent'))

            all_comp = {}
            for comp in [
                    comp.name for comp in model.Component.select(self.env)
            ]:
                parent_component = self._ChModel.get_parent_component(comp)
                if parent_component is None:
                    parent_component = ""
                all_comp[comp] = parent_component
            stream = stream | Transformer('//table[@id="complist"]//tr').apply(
                InsertParentTd("", all_comp))

        return stream
Exemplo n.º 6
0
    def browser(self, req, stream, data):

        if not data.has_key('path'):
            # this probably means that there is an upstream error
            return stream

        # mark up the title (disabled)
        # stream |= Transformer('//title/text()').substitute('/', data['svn_base_url'] + '/')

        # provide a link to the svn repository
        stream |= Transformer("//div[@id='content']/h1").after(
            tag.a(self.link_text,
                  href=self.url(data['path']),
                  title=self.link_title))

        # if a directory, provide links to the children files
        if data['dir']:
            offset = 2  # table header, index of 0 (python) versus 1 (xpath)
            if data['path'] != '/':
                offset += 1  # parent directory row

            xpath_prefix = "//table[@id='dirlist']"
            # add the table header
            xpath = xpath_prefix + "//th[contains(@class, '%s')]" % self.element_class
            stream |= Transformer(xpath).after(
                tag.th('URL', **{'class': "url"}))

            if 'up' in data['chrome']['links']:
                stream |= Transformer(xpath_prefix +
                                      "//td[@colspan='5']").attr(
                                          'colspan', None)

            # add table cells
            stream = self.dir_entries(req, stream, data, xpath_prefix)
        return stream
Exemplo n.º 7
0
    def filter(self, stream):
        """Conform to IGenshiStreamFilter interface.

        This example filter renames 'frob' to 'foobar' (this string is
        found in the custom ``home/index.html`` template provided as
        part of the package).

        It also adds the chosen JQuery plugin to the page if viewing the
        dataset edit page (provides a better UX for working with tags with vocabularies)
        """
        stream = stream | Transformer('//p[@id="examplething"]/text()')\
                 .substitute(r'frob', r'foobar')

        routes = request.environ.get('pylons.routes_dict')
        if routes.get('controller') == 'package' \
            and routes.get('action') == 'edit':
                stream = stream | Transformer('head').append(HTML(
                    '<link rel="stylesheet" href="/css/chosen.css" />'
                ))
                stream = stream | Transformer('body').append(HTML(
                    '''
                    <script src="/scripts/chosen.jquery.min.js" type="text/javascript"></script>'
                    <script type="text/javascript">$(".chzn-select").chosen();</script>
                    '''
                ))

        return stream
Exemplo n.º 8
0
 def filter_stream(self, req, method, filename, stream, data):
     if req.path_info.startswith('/ticket'):
         button = tag.div(
             tag.input(type="submit",
                       title=_("Translate to %s") %
                       req.locale.get_display_name(),
                       value=_("Translate"),
                       forward=_("Translate"),
                       backward=_("Untranslate"),
                       working=_("Working"),
                       name="translate",
                       class_="translate"))
         button(class_="inlinebuttons")
         script = tag.script('')
         script(src='https://www.google.com/jsapi?key=' + self.googleApiKey)
         script(type='text/javascript')
         stream |= Transformer('//head').prepend(script)
         stream |= Transformer(
             '//div[@id="content"]/div[@id="ticket"]/div[@class="description"]/h3'
         ).after(button)
         stream |= Transformer(
             '//div[@id="content"]/div/div[@id="changelog"]/div[@class="change"]/h3'
         ).after(button)
         add_stylesheet(req, 'translate/translate.css')
         add_script_data(req, {'googleApiKey': self.googleApiKey})
         add_script_data(req, {'sessionLanguage': req.locale.language})
         add_script(req, 'translate/translate.js')
     return stream
Exemplo n.º 9
0
    def filter_stream(self, req, method, filename, stream, data):
        if not add_script_data and method == 'xhtml' and filename and \
           data and hasattr(req, '_tracdragdrop_data'):

            def script():
                from genshi.builder import tag
                data = getattr(req, '_tracdragdrop_data')
                text = '\n'.join([
                    'var %s = %s;' % (name, to_json(val))
                    for name, val in data.iteritems()
                ])
                return tag.script(text, type='text/javascript')

            stream |= Transformer('//head').append(script)

        if method == 'xhtml' and \
           filename in ('wiki_edit.html', 'milestone_edit.html') and \
           data.get('attachments', {}).get('can_create'):

            def render():
                d = {'alist': data['attachments'].copy()}
                d['compact'] = True
                d['foldable'] = True
                d['fragment'] = True
                return Chrome(self.env).render_template(req,
                                                        'tracdragdrop.html',
                                                        d,
                                                        fragment=True)

            stream |= Transformer('//form[@id="edit"]').after(render)

        return stream
Exemplo n.º 10
0
def remove_header(stream, field):
    """ Removes the display from the ticket properties """
    stream = stream | \
        Transformer('//th[@id="h_%s"]' % field).replace(tag.th(id="h_%s" % field))
    stream = stream | \
        Transformer('//td[@headers="h_%s"]' % field).replace(tag.th(id="h_%s" % field))
    return stream
Exemplo n.º 11
0
 def filter_stream(self, req, method, filename, stream, data):
     transform = None
     if filename == 'ticket.html' and 'preview' not in req.args:
         stream |= Transformer(
             '//input[@value="Create ticket" or @value="Submit changes"]'
         ).attr('disabled', True)
     elif filename == 'wiki_edit.html' and 'preview' not in req.args and 'diff' not in req.args and 'merge' not in req.args:
         stream |= Transformer('//input[@id="save"]').attr('disabled', True)
     return stream
Exemplo n.º 12
0
    def filter_stream(self, req, method, filename, stream, formdata):
        if (filename == 'ticket.html'):
            add_stylesheet(req, 'multiselectlist/css/jquery-ui.css')
            add_stylesheet(req, 'multiselectlist/css/jquery.multiselect.css')
            add_script(req,
                       'multiselectlist/js/jquery-ui-1.8.16.custom.min.js')
            add_script(req, 'multiselectlist/js/jquery.multiselect.min.js')

            for item in self.multilist:
                values = self.env.config.get('multiselectlist',
                                             '%s.values' % item)
                if values:
                    key = 'field_%s' % unicode(item)
                    # 既存のチケットの場合はDBに格納されている値を取得する
                    inputvalues = []
                    if key in req.args:
                        # チケット登録時のバリデーションで引っかかった場合
                        # なお、DBに保管されている値より優先しなければならない
                        inputvalues = req.args.get(key)
                    elif req.path_info.startswith('/ticket'):
                        ticketno = req.path_info[8:]
                        db = self.env.get_db_cnx()
                        cursor = db.cursor()
                        sql = "select value from ticket_custom where ticket=%s and name='%s'" % (
                            ticketno, item)
                        cursor.execute(sql)
                        row = cursor.fetchone()
                        if row and row[0]:
                            inputvalues = row[0].split(',')

                    self.env.log.info(inputvalues)
                    value = values.split(',')
                    xpath = '//input[@id="field-%s"]' % item
                    # input要素をselect/option要素に置き換える。
                    # タグの繰り返しを行う場合は、配列で指定すればいいようだ。

                    script = """
jQuery(function(){
  jQuery("#field-%s").multiselect({
    selectedList: 3
  });
});
""" % item

                    stream |= Transformer(xpath).replace(
                        tag.select([
                            tag.option(v, selected=(v in inputvalues or None))
                            for v in value
                        ],
                                   id='field-%s' % item,
                                   name='field_%s' % item,
                                   size='%d' % len(value),
                                   multiple='true'))
                    stream |= Transformer('//head').append(
                        tag.script(script, type="text/javascript"))
        return stream
Exemplo n.º 13
0
    def filter(self, stream):
        """Conform to IGenshiStreamFilter interface.

        This filter renames 'frob' to 'foobar' (this string is
        found in the custom ``home/index.html`` template provided as
        part of the package).

        It also adds the chosen JQuery plugin to the page if viewing the
        dataset edit page (provides a better UX for working with tags with vocabularies)
        """
        # Add package list to menu
        self._load_elastic_config()
        client = DataStoreClient(self.url)
        headers = dict()
        headers['Authorization'] = self.user.get('apikey')
        client._headers = headers

        # Organize the results per index
        response_indice = client.mapping()

        # FIXME: Get this from somewhere else
        response_map = response_indice.get('lbdf')

        # Create code to add to menu
        out = unicode()
        for package in response_map.keys():
            # Retrieve package info
            pkg_query = model.Session.query(model.PackageRevision)\
                .filter(model.PackageRevision.name == package)\
                .filter(and_(
                             model.PackageRevision.state == u'active',
                             model.PackageRevision.current == True
                ))
            pkg = pkg_query.first()

            ## if the index has got a package that is not in ckan then
            ## ignore it.
            if pkg:
                out = out + '\n<li><a href="/dataset/' + package + '" title="' + _(
                    'Pesquisar %s' %
                    pkg.title) + '">' + pkg.title + '</a></li>'
            else:
                log.warning('package %s in index but not in database' %
                            package)
                continue

        stream = stream | Transformer('//li[@id="package-list"]')\
                 .append(HTML(out))

        routes = request.environ.get('pylons.routes_dict')
        if routes.get('controller') == 'package' \
            and routes.get('action') == 'edit':
            stream = stream | Transformer('head').append(
                HTML('<link rel="stylesheet" href="/css/chosen.css" />'))

        return stream
Exemplo n.º 14
0
 def filter_stream(self, req, method, filename, stream, data):
     """ Hack up the query inteface to do what we want. """
     print("filtering stream: %s" % filename)
     if filename in ['ticket.html']:
         stream |= Transformer('.//td[@headers="h_due_date"]/text()').map(
             self._convert_date, TEXT)
     elif filename in ['tasklist.html', 'query.html']:
         stream |= Transformer('.//td[@class="due_date"]/text()').map(
             self._convert_date, TEXT)
     return stream
Exemplo n.º 15
0
    def filter_stream(self, req, method, filename, stream, data):
        action = req.args.get('action', 'view')

        if filename == "version_edit.html":
            if action == 'new':
                filter = Transformer('//form[@id="edit"]/div[1]')
                return stream | filter.before(self.__new_project())
            elif action == 'edit':
                filter = Transformer('//form[@id="edit"]/div[1]')
                return stream | filter.before(self.__edit_project(data))

        return stream
Exemplo n.º 16
0
 def filter_stream(self, req, method, filename, stream, data):
     if self.is_wiki_realm(req):
         navbar_tpl = self.get_loader().load('wiki_navbar.html')
         navbar = navbar_tpl.generate(
             node=req.args.get('node'),
             is_not_edit=(not self.is_wiki_edit(req, filename)))
         #stream = stream | Transformer('//p[@class="path"]').remove()
         stream = stream | Transformer(
             '//p[@class="path noprint"]').remove()
         stream = stream | Transformer('//div[@id="content"]').prepend(
             navbar)
     return stream
Exemplo n.º 17
0
    def filter_stream(self, req, method, filename, stream, data):
        if filename == 'ticket.html':
            ticket = data.get('ticket')
            if self.keywords and ticket and ticket.exists and \
               'TICKET_CHGPROP' in req.perm(ticket.resource):
                filter = Transformer('//fieldset[@id="properties"]')
                stream |= filter.after(self._render_template(req))
        elif filename == 'wiki_edit.html' and self.tagsplugin_enabled:
            filter = Transformer('//fieldset[@id="changeinfo"]')
            stream |= filter.after(self._render_template(req))

        return stream
Exemplo n.º 18
0
    def filter_stream(self, req, method, filename, stream, data):
        if not filename == "query.html":
            self.log.debug('Not a query returning')
            return stream

        def make_col_helper(field):
            def column_helper(column_stream):
                s = Stream(column_stream)
                val = s.select('//input/@value').render()
                if val.lower() != field.lower(
                ):  #if we are the field just skip it
                    #identity stream filter
                    for kind, data, pos in s:
                        yield kind, data, pos

            return column_helper

        fields = self.config.getlist(csection, 'fields', [])
        for field in fields:
            self.log.debug('found : %s' % field)
            perms = self.config.getlist(csection, '%s.permission' % field, [])
            self.log.debug('read permission config: %s has %s' %
                           (field, perms))
            for (perm, denial) in [s.split(":") for s in perms]:
                perm = perm.upper()
                self.log.debug(
                    'testing permission: %s:%s should act= %s' %
                    (field, perm,
                     (not req.perm.has_permission(perm) or perm == "ALWAYS")))
                if (not req.perm.has_permission(perm) or perm
                        == "ALWAYS") and denial.lower() in ["remove", "hide"]:
                    # remove from the list of addable
                    stream = stream | Transformer(
                        '//select[@id="add_filter"]/option[@value="%s"]' %
                        field).replace(" ")

                    # remove from the list of columns
                    stream = stream | Transformer(
                        '//fieldset[@id="columns"]/div/label').filter(
                            make_col_helper(field))

                    #remove from the results table
                    stream = stream | Transformer(
                        '//th[@class="%s"]' % field).replace(" ")
                    stream = stream | Transformer(
                        '//td[@class="%s"]' % field).replace(" ")

                    # remove from the filters
                    stream = stream | Transformer(
                        '//tr[@class="%s"]' % field).replace(" ")

        return stream
Exemplo n.º 19
0
    def filter_stream(self, req, method, filename, stream, data):
        """Return a filtered Genshi event stream, or the original unfiltered
        stream if no match.

        `req` is the current request object, `method` is the Genshi render
        method (xml, xhtml or text), `filename` is the filename of the template
        to be rendered, `stream` is the event stream and `data` is the data for
        the current template.

        See the Genshi documentation for more information.
        """

        # only show CAPTCHAs for anonymous users
        if req.authname != 'anonymous':
            return stream

        # only put CAPTCHAs in the realms specified
        realm = self.realm(req)
        if realm not in self.realms:
            return stream

        # add the CAPTCHA to the stream
        if filename in self.xpath:

            # store CAPTCHA in DB and session
            word = random_word(self.dict_file)
            insert_update(self.env, 'captcha', 'id', req.session.sid,
                          dict(word=word))
            req.session['captcha'] = word
            req.session.save()

            # render the template
            chrome = Chrome(self.env)
            template = chrome.load_template('captcha.html')
            _data = {}

            # CAPTCHA type
            if self.captcha_type == 'png':
                captcha = tag.img(None, src=req.href('captcha.png'))
            else:
                captcha = Markup(skimpyAPI.Pre(word).data())

            _data['captcha'] = captcha
            _data['email'] = req.session.get('email', '')
            _data['name'] = req.session.get('name', '')
            _data['captchaid'] = req.session.sid
            xpath = self.xpath[filename]
            stream |= Transformer(xpath).before(template.generate(**_data))
            if filename in self.delete:
                stream |= Transformer(self.delete[filename]).remove()

        return stream
Exemplo n.º 20
0
    def filter_stream(self, req, method, filename, stream, formdata):
        """Adds Batch modify as foldable and defaults filters and columns as collapsed"""

        if filename == 'query.html':
            return stream | Transformer('//div[@id="altlinks"]'). \
                                before(self._generate_form(req, formdata) )

        if filename == 'batchmod.html':
            return stream | Transformer('//form[@id="batchmod-form"]//fieldset'). \
                                attr('id', 'batchmod') \
                          | Transformer('//form[@id="batchmod-form"]/fieldset/legend'). \
                                attr('class', 'foldable')

        return stream
Exemplo n.º 21
0
    def filter_stream(self, req, method, filename, stream, data):
        if filename == "ticket.html":
            # replace "project" text input (lineedit) for ticket editing with a selection field
            filter = Transformer('//input[@id="field-project"]')
            ticket_data = data['ticket']

            script_filter = Transformer('//div[@id="banner"]')

            stream = stream | filter.replace(
                self._projects_field_ticket_input(req, ticket_data))
            stream = stream | script_filter.before(
                self._update_milestones_script(req))

        return stream
Exemplo n.º 22
0
    def filter_stream(self, req, method, filename, stream, data):

        found = False
        for pattern in self.insert_into:
            if filename == pattern:
                add_stylesheet(req, 'calendarpopup/css/CalendarPopUp.css')
                add_script(req, 'calendarpopup/js/CalendarPopUp.js')
                found = True

        calendarPopUpArrayOfIDs = ""
        calendarPopUpArrayOfIDsFormat = ""
        for element in self.watch_ids:
            if element.find('=') != -1:
                (one, two) = element.split('=', 2)
                if one and two:
                    if calendarPopUpArrayOfIDs == "":
                        calendarPopUpArrayOfIDs = "\"%s\"" % one
                        calendarPopUpArrayOfIDsFormat = "\"%s\"" % two
                    else:
                        calendarPopUpArrayOfIDs = "%s, \"%s\"" % (
                            calendarPopUpArrayOfIDs, one)
                        calendarPopUpArrayOfIDsFormat = "%s, \"%s\"" % (
                            calendarPopUpArrayOfIDsFormat, two)
            else:
                if element:
                    if calendarPopUpArrayOfIDs == "":
                        calendarPopUpArrayOfIDs = "\"%s\"" % element
                        calendarPopUpArrayOfIDsFormat = "\"yyyy/MM/dd\""
                    else:
                        calendarPopUpArrayOfIDs = "%s, \"%s\"" % (
                            calendarPopUpArrayOfIDs, element)
                        calendarPopUpArrayOfIDsFormat = "%s, \"yyyy/MM/dd\"" % calendarPopUpArrayOfIDsFormat

        insertDIV = Element(
            'div',
            id="CalendarPopUpDiv",
            style=
            "position:absolute;visibility:hidden;background-color:white;layer-background-color:white;"
        )
        insertScript = Element(
            'script', type="text/javascript"
        )('var calendarPopUpArrayOfIDs = new Array(%s); var calendarPopUpArrayOfIDsFormat = new Array(%s)'
          % (calendarPopUpArrayOfIDs, calendarPopUpArrayOfIDsFormat))

        if found:
            return stream | Transformer('//div[@id="footer"]').after(
                insertDIV) | Transformer('body').before(insertScript)

        return stream
Exemplo n.º 23
0
 def filter_stream(self, req, method, filename, stream, data):
     if filename == "customfieldadmin.html":
         add_script(req, 'datefield/js/customfield-admin.js')
         add_stylesheet(req, 'datefield/css/customfield-admin.css')
         stream = stream | Transformer('.//select[@id="type"]').append(
             tag.option('Date', value='date', id="date_type_option"))
         stream = stream | Transformer(
             './/form[@id="addcf"]/fieldset/div[@class="buttons"]').before(
                 tag.div(tag.input(
                     id="date_empty", type="checkbox", name="date_empty"),
                         tag.label('Allow empty date'),
                         for_="date_empty",
                         class_="field",
                         id="date_empty_option"))
     return stream
Exemplo n.º 24
0
 def filter_stream(self, req, method, filename, stream, data):
     def attr_callback(name, event):
         attrs = event[1][1]
         return ' '.join(filter(None, (attrs.get('class'), 'datepick')))
     if filename == 'ticket.html':
         for field in list(self._date_fields()):
             stream = stream | Transformer(
                 '//input[@name="field_' + field + '"]'
             ).attr('class', attr_callback)
     elif self.use_milestone and filename in ('milestone_edit.html', 
             'admin_milestones.html'):
         for field in ('duedate', 'completeddate'):
             stream = stream | Transformer(
                 '//input[@name="' + field + '"]'
             ).attr('class', attr_callback)
     return stream
Exemplo n.º 25
0
    def filter_stream(self, req, method, filename, stream, data):
        if filename.startswith("roadmap"):
            stream_roadmap = HTML(to_unicode(stream))
            stream_milestones = HTML(
                to_unicode(
                    stream_roadmap.select(
                        '//div[@class="roadmap"]/div[@class="milestones"]')))

            milestones = data.get('milestones')
            milestones = [milestone.name for milestone in milestones]

            versions = data.get('versions')
            if versions:
                for version in versions:
                    milestones.append(version.name)

            div_milestones_array = self.__extract_div_milestones_array(
                '<div class="milestone">', stream_milestones)

            div_projects_milestones = self.__process_div_projects_milestones(
                milestones, div_milestones_array, req)

            return stream_roadmap | Transformer(
                '//div[@class="roadmap"]/div[@class="milestones"]').replace(
                    div_projects_milestones)

        return stream
Exemplo n.º 26
0
    def filter_stream(self, req, method, filename, stream, data):
        """Return a filtered Genshi event stream, or the original unfiltered
        stream if no match.

        `req` is the current request object, `method` is the Genshi render
        method (xml, xhtml or text), `filename` is the filename of the template
        to be rendered, `stream` is the event stream and `data` is the data for
        the current template.

        See the Genshi documentation for more information.
        """
        # move these someplace sensible?
        form_id = "acctmgr_registerform" # id of the registration form
        msg = "Please enter the text below to prove you're not a machine."

        if filename == "register.html":
            word = random_word(self.dict_file)
            req.session['captcha'] = word
            req.session.save()
            if self.captcha_type == 'png':
                captcha = '<img src="%s"/>' % req.href('captcha.png')
            else:
                captcha = skimpyAPI.Pre(word).data()
            content = "<p>%s</p><p>%s</p>" % (msg, captcha)
            content += '<label>Confirm: <input type="text" name="captcha" class="textwidget" size="20"/></label>'
            stream |= Transformer('//form[@id="%s"]/fieldset[1]' % form_id).append(tag.div(Markup(content)))

        return stream
Exemplo n.º 27
0
 def filter_stream(self, req, method, filename, stream, data):
     # 実際の置き換えを行います.
     if 'tracdependency' in data:
         for field, value in data['tracdependency'][
                 'field_values'].iteritems():
             stream |= Transformer(self.FIELD_XPATH % field).replace(value)
     return stream
Exemplo n.º 28
0
    def filter_stream(self, req, method, filename, stream, data):
        if filename != 'ticket.html':
            return stream

        # if specify disable, not execute.
        enable = True
        if 'ticketext' in req.args:
            enable = req.args['ticketext']
            enable = enable.lower() in _TRUE_VALUES
            enable = bool(enable)
        if not enable:
            return stream

        readyDescription = False
        if req.path_info == '/newticket' and 'preview' not in req.args:
            readyDescription = True

        script = '\n<script type="text/javascript">\n'\
               + 'var tikectTemplate = new ticketext.TicketTemplate(\'' + req.base_path + '\');\n'\
               + 'tikectTemplate.setElementId(\'field-type\', \'field-description\');\n'\
               + 'tikectTemplate.setReadyDescription(' + str(readyDescription).lower() + ');\n'\
               + 'tikectTemplate.initialize();\n'\
               + '</script>\n'

        return stream | Transformer('//div[@id="footer"]').before(
            MarkupTemplate(script).generate())
Exemplo n.º 29
0
    def filter_stream(self, req, method, filename, stream, data):
        # Allow setting version for milestone
        if filename == 'milestone_edit.html':
            filter = Transformer('//fieldset[1]')
            return stream | filter.before(self._version_edit(data))

        # Display version for milestone
        elif filename == 'milestone_view.html':
            milestone = data.get('milestone').name
            filter = Transformer('//div[@class="info"]/p[@class="date"]')
            return stream | filter.append(self._version_display(
                req, milestone))
        elif filename == 'roadmap.html':
            return self._milestone_versions(stream, req)

        return stream
Exemplo n.º 30
0
    def filter_stream(self, req, method, filename, stream, data):
        crumbs = self._get_crumbs(req.session)
        if not crumbs:
            return stream

        add_stylesheet(req, 'breadcrumbs/css/breadcrumbs.css')
        li = []

        href = req.href(req.base_path)

        for crumb in crumbs:
            realm, resource = crumb.split('/', 1)
            name = resource.replace('_', ' ')

            if realm == "ticket":
                name = "#" + resource
            elif realm != "wiki":
                name = "%s:%s" % (realm, name)

            link = req.href(realm, resource)

            li.append(tag.li(tag.a(
                title=name,
                href=link,
            )(name)))

        insert = tag.ul(class_="nav", id="breadcrumbs")(tag.lh("Breadcrumbs:"),
                                                        li)

        return stream | Transformer('//div[@id="metanav"]/ul').after(insert)