Example #1
0
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    # Import the plugin action to print out the graph html form
    graphshower = wikiutil.importPlugin(request.cfg, 'action', 'ShowGraph',
                                        'execute')

    if not args:
        return ""

    uri, args = uri_params(args.strip())

    if not args:
        return ""

    # Legacy fix
    args['action'] = ['ShowGraph']
    pagename = uri

    # Check out if the start page exists, if not, we'll just bail out
    if not request.user.may.read(pagename):
        return _("InlineGraph: User may not read page %s" %
                 form_escape(pagename))

    old_page = request.page
    old_values = request.values
    old_url = getattr(request, 'url', '')

    request.page = Page(request, pagename)
    request.formatter.page = request.page
    request.values = CombinedMultiDict([MultiDict(args)])

    req_url = url_construct(request, args, pagename)
    urladd = '?' + req_url.split('?')[1]
    request.url = req_url

    request.write(u'<div class="inlinegraph">')
    graphshower(request.page.page_name,
                request,
                urladd=urladd,
                app_page=request.page.page_name,
                inline=1)

    request.page = old_page
    request.formatter.page = old_page
    request.values = old_values
    del request.url
    if old_url:
        request.url = old_url

    return u'<a href="%s" class="graph-link">[%s]</a>\n' % \
           (req_url, _('examine')) + u'</div>'
Example #2
0
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    # Import the plugin action to print out the graph html form
    graphshower = wikiutil.importPlugin(request.cfg,
                                        'action', 'ShowGraph',
                                        'execute')

    if not args:
        return ""

    uri, args = uri_params(args.strip())

    if not args:
        return ""

    # Legacy fix
    args['action'] = ['ShowGraph']
    pagename = uri

    # Check out if the start page exists, if not, we'll just bail out
    if not request.user.may.read(pagename):
        return _("InlineGraph: User may not read page %s" %
                 form_escape(pagename))

    old_page = request.page
    old_values = request.values
    old_url = getattr(request, 'url', '')

    request.page = Page(request, pagename)
    request.formatter.page = request.page
    request.values = CombinedMultiDict([MultiDict(args)])

    req_url = url_construct(request, args, pagename)
    urladd = '?' + req_url.split('?')[1]
    request.url = req_url

    request.write(u'<div class="inlinegraph">')
    graphshower(request.page.page_name, request,
                urladd=urladd, app_page=request.page.page_name, inline=1)

    request.page = old_page
    request.formatter.page = old_page
    request.values = old_values
    del request.url
    if old_url:
        request.url = old_url

    return u'<a href="%s" class="graph-link">[%s]</a>\n' % \
           (req_url, _('examine')) + u'</div>'
Example #3
0
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    # Import the plugin action to print out the graph html form
    dotviewer = wikiutil.importPlugin(request.cfg,
                                      'action', 'ViewDot',
                                      'execute')

    arglist = [x.strip() for x in args.split(',') if x]
    kw = {}

    for arg in arglist:
        data = arg.split('=')
        key = data[0]
        val = '='.join(data[1:])

        if key in ['height', 'width']:
            kw[str(key)] = str(val)

    if not arglist:
        return ""

    uri, args = uri_params(arglist[0])

    if not args:
        return ""

    pagename = url_unquote(uri)

    old_page = request.page
    old_values = request.values
    old_url = getattr(request, 'url', '')

    request.page = Page(request, pagename)
    req_url = url_construct(request, args, pagename)
    request.values = CombinedMultiDict([MultiDict(args)])
    request.url = req_url

    request.write(u'<div class="viewdot">')
    dotviewer(pagename, request, **kw)

    request.page = old_page
    request.values = old_values
    del request.url
    if old_url:
        request.url = old_url

    return '<a href="%s&amp;view=View" class="graph-link">[%s]</a>\n</div>' % \
        (req_url, _('View'))
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    if not have_cairo():
        return formatter.text(_(\
            "ERROR: Cairo Python extensions not installed. " +\
            "Not performing layout.")) + formatter.linebreak()

    urlargs, macro_args = radarchart_args(args)

    pagename = request.page.page_name
    # The first page mentioned will be the page of the chart
    for arg in macro_args.split(','):
        page = Page(request, arg)
        if page.exists():
            pagename = arg
            break

    return u'<div class="metaradarchart">' + \
           u'<img src="%s">' % url_construct(request, urlargs, pagename) + \
           u'</div>'
Example #5
0
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    if not cairo_found:
        return formatter.text(_(\
            "ERROR: Cairo Python extensions not installed. " +\
            "Not performing layout.")) + formatter.linebreak()

    urlargs, macro_args = radarchart_args(args)

    pagename = request.page.page_name
    # The first page mentioned will be the page of the chart
    for arg in macro_args.split(','):
        page = Page(request, arg)
        if page.exists():
            pagename = arg
            break

    return u'<div class="metaradarchart">' + \
           u'<img src="%s">' % url_construct(request, urlargs, pagename) + \
           u'</div>'
Example #6
0
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    if not have_cairo():
        return _sysmsg % ('error', _(\
                "ERROR: Cairo Python extensions not installed. " +\
                    "Not performing layout."))

    url_args, args = radarchart_args(args)

    # For multiple radar charts per table row
    try:
        height = ''.join(url_args.get('height', list()))
        width = ''.join(url_args.get('width', list()))
        if not height:
            height = MAX_WIDTH
        if not width:
            width = MAX_WIDTH
        height, width = int(height), int(width)
    except ValueError:
        pass

    # MAX_WIDTH is the assumed max_width here
    amount = MAX_WIDTH / min(height, width)
    if amount < 1:
        amount = 1

    # Note, metatable_parseargs deals with permissions
    pagelist, metakeys, _ = metatable_parseargs(request,
                                                args,
                                                get_all_keys=True)

    values = set()
    for page in pagelist:
        metas = get_metas(request, page, metakeys)
        for key in metas:
            # Get the maximum value of each key on a page
            if metas[key]:
                numberedvals = dict()
                for i, val in enumerate(map(ordervalue, metas[key])):
                    numberedvals[val] = i
                maxval = max(numberedvals.keys())
                i = numberedvals[maxval]
                # This contraption is here because we need to deliver
                # unparsed (textual) values in urls
                values.add(metas[key][i])
    for val in values:
        if val.startswith('attachment'):
            # A bit ugly fix for a weird corner case
            val = "attachment:%s" % (val[11:])
        url_args.setdefault('value', list()).append(val)

    out = StringIO.StringIO()
    out.write(macro.formatter.linebreak() + u'<div class="metaradartable">' +
              macro.formatter.table(1))

    rowcount = (len(pagelist) / amount)
    if len(pagelist) % amount:
        rowcount += 1
    # Iterate over the number of rows
    for i in range(rowcount):

        out.write(macro.formatter.table_row(1))

        pages = pagelist[i * amount:(i + 1) * amount]

        # First enter page names to first row
        for page in pages:
            out.write(macro.formatter.table_cell(1, {'class': 'meta_page'}))
            out.write(macro.formatter.pagelink(1, page))
            out.write(macro.formatter.text(page))
            out.write(macro.formatter.pagelink(0))
            out.write(macro.formatter.linebreak())
        # Don't make extra squares for the first row
        if i:
            for j in range(amount - len(pages)):
                out.write(macro.formatter.table_cell(1))

        out.write(macro.formatter.table_row(1))

        # Chart images to the other row
        for page in pages:
            out.write(macro.formatter.table_cell(1, {'class': 'meta_radar'}))
            out.write(u'<img src="%s">' %
                      (url_construct(request, url_args, page)))
            out.write(macro.formatter.linebreak())
        if i:
            for j in range(amount - len(pages)):
                out.write(macro.formatter.table_cell(1))

    out.write(macro.formatter.table(0) + u'</div>')

    return out.getvalue()
def execute(macro, args):
    mode = 'keys'

    request = macro.request

    # get params
    if args:
        args = [x.strip() for x in args.split(',')]
    else:
        args = []

    kw = {}
    for arg in args:
        if '=' in arg:
            key, value = arg.split('=', 1)
            if key == "metaMaxTags":
                kw[str(key.strip())] = value
            if key == "metaShowMode":
                if value in ['keys', 'values']:
                    mode = value

    args = filter(
        lambda x: x.split('=')[0] not in ["metaMaxTags", "metaShowMode"],
        args
    )

    try:
        maxTags = int(kw["metaMaxTags"])
    except (KeyError, ValueError):
        maxTags = 50

    # [(hits, fontsize), (hits, fontsize), ...]
    levels = [
        (4, "0.65em"),
        (7, "0.75em"),
        (12, "0.9em"),
        (18, "1.0em"),
        (25, "1.05em"),
        (35, "1.1em"),
        (50, "1.15em"),
        (60, "1.2em"),
        (90, "1.25em"),
        (None, "1.3em")
    ]

    tags = []

    if not args:
        args = ''
    else:
        args = ','.join(args)

    pagelist, metakeys, _ = metatable_parseargs(
        macro.request,
        args,
        get_all_pages=True
    )

    if not hasattr(request.graphdata, 'keys_on_pages'):
        request.graphdata.reverse_meta()

    for name in pagelist:
        page = request.graphdata.getpage(name)
        if mode == 'keys':
            tags.extend(x for x in page.get('meta', {}).keys())
            tags.extend(x for x in page.get('out', {}).keys() if x != NO_TYPE)
        else:
            for key in page.get('meta', {}).keys():
                if key in ['label', 'URL']:
                    continue
                tags.extend(x.strip('"') for x in page['meta'][key])
            for key in page.get('out', {}).keys():
                if key == NO_TYPE:
                    continue
                tags.extend(page['out'][key])

    taglist = frozenset(tags)

    def sort(t):
        return t[1]

    show = []
    for tag in taglist:
        cnt = tags.count(tag)
        show.append((tag, cnt, tag))
    show.sort(key=sort, reverse=True)
    show = show[0:maxTags]
    show.sort()

    html = []

    for tag in show:
        if mode == 'keys':
            data = request.graphdata.keys_on_pages.get(tag[2])
        else:
            data = request.graphdata.vals_on_pages.get(tag[2])

        if not data:
            data = []
        title = '\n'.join(sorted(data, key=unicode.lower))

        pagename = tag[0]
        hits = tag[1]
        url = url_construct(request, {
            "action": ["MetaSearch"],
            "q": [pagename]
        }, request.page.page_name)

        fontsize = "0.1em"
        for _hits, _fontsize in levels:
            if _hits is None or hits < _hits:
                fontsize = _fontsize
                break

        html.append(
            u'<span style="font-size:%s;"><a title="%s" href="%s"> %s</a></span>' % (
                form_escape(fontsize),
                form_escape(title),
                form_escape(url),
                wikiutil.escape(pagename)
            )
        )

    return ''.join(html)
Example #8
0
def execute(macro, args):
    mode = 'keys'

    request = macro.request

    # get params
    if args:
        args = [x.strip() for x in args.split(',')]
    else:
        args = []

    kw = {}
    for arg in args:
        if '=' in arg:
            key, value = arg.split('=', 1)
            if key == "metaMaxTags":
                kw[str(key.strip())] = value
            if key == "metaShowMode":
                if value in ['keys', 'values']:
                    mode = value

    args = filter(
        lambda x: x.split('=')[0] not in ["metaMaxTags", "metaShowMode"], args)

    try:
        maxTags = int(kw["metaMaxTags"])
    except (KeyError, ValueError):
        maxTags = 50

    # [(hits, fontsize), (hits, fontsize), ...]
    levels = [(4, "0.65em"), (7, "0.75em"), (12, "0.9em"), (18, "1.0em"),
              (25, "1.05em"), (35, "1.1em"), (50, "1.15em"), (60, "1.2em"),
              (90, "1.25em"), (None, "1.3em")]

    tags = []

    if not args:
        args = ''
    else:
        args = ','.join(args)

    pagelist, metakeys, _ = metatable_parseargs(macro.request,
                                                args,
                                                get_all_pages=True)

    if not hasattr(request.graphdata, 'keys_on_pages'):
        request.graphdata.reverse_meta()

    for name in pagelist:
        page = request.graphdata.getpage(name)
        if mode == 'keys':
            tags.extend(x for x in page.get('meta', {}).keys())
            tags.extend(x for x in page.get('out', {}).keys() if x != NO_TYPE)
        else:
            for key in page.get('meta', {}).keys():
                if key in ['label', 'URL']:
                    continue
                tags.extend(x.strip('"') for x in page['meta'][key])
            for key in page.get('out', {}).keys():
                if key == NO_TYPE:
                    continue
                tags.extend(page['out'][key])

    taglist = frozenset(tags)

    def sort(t):
        return t[1]

    show = []
    for tag in taglist:
        cnt = tags.count(tag)
        show.append((tag, cnt, tag))
    show.sort(key=sort, reverse=True)
    show = show[0:maxTags]
    show.sort()

    html = []

    for tag in show:
        if mode == 'keys':
            data = request.graphdata.keys_on_pages.get(tag[2])
        else:
            data = request.graphdata.vals_on_pages.get(tag[2])

        if not data:
            data = []
        title = '\n'.join(sorted(data, key=unicode.lower))

        pagename = tag[0]
        hits = tag[1]
        url = url_construct(request, {
            "action": ["MetaSearch"],
            "q": [pagename]
        }, request.page.page_name)

        fontsize = "0.1em"
        for _hits, _fontsize in levels:
            if _hits is None or hits < _hits:
                fontsize = _fontsize
                break

        html.append(
            u'<span style="font-size:%s;"><a title="%s" href="%s"> %s</a></span>'
            % (form_escape(fontsize), form_escape(title), form_escape(url),
               wikiutil.escape(pagename)))

    return ''.join(html)
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    if not have_cairo():
        return _sysmsg % ('error', _(\
                "ERROR: Cairo Python extensions not installed. " +\
                    "Not performing layout."))

    url_args, args = radarchart_args(args)

    # For multiple radar charts per table row
    try:
        height = ''.join(url_args.get('height', list()))
        width = ''.join(url_args.get('width', list()))
        if not height: 
            height = MAX_WIDTH
        if not width:
            width = MAX_WIDTH
        height, width = int(height), int(width)
    except ValueError:
        pass

    # MAX_WIDTH is the assumed max_width here
    amount = MAX_WIDTH / min(height, width)
    if amount < 1:
        amount = 1

    # Note, metatable_parseargs deals with permissions
    pagelist, metakeys, _ = metatable_parseargs(request, args,
                                                get_all_keys=True)

    values = set()
    for page in pagelist:
        metas = get_metas(request, page, metakeys)
        for key in metas:
            # Get the maximum value of each key on a page
            if metas[key]:
                numberedvals = dict()
                for i, val in enumerate(map(ordervalue, metas[key])):
                    numberedvals[val] = i
                maxval = max(numberedvals.keys())
                i = numberedvals[maxval]
                # This contraption is here because we need to deliver
                # unparsed (textual) values in urls
                values.add(metas[key][i])
    for val in values:
        if val.startswith('attachment'):
            # A bit ugly fix for a weird corner case
            val = "attachment:%s" % (val[11:])
        url_args.setdefault('value', list()).append(val)

    out = StringIO.StringIO()
    out.write(macro.formatter.linebreak() +
              u'<div class="metaradartable">' +
              macro.formatter.table(1))

    rowcount = (len(pagelist) / amount)
    if len(pagelist) % amount:
        rowcount += 1
    # Iterate over the number of rows
    for i in range(rowcount):

        out.write(macro.formatter.table_row(1))

        pages = pagelist[i*amount:(i+1)*amount]

        # First enter page names to first row
        for page in pages:
            out.write(macro.formatter.table_cell(1, {'class': 'meta_page'}))
            out.write(macro.formatter.pagelink(1, page))
            out.write(macro.formatter.text(page))
            out.write(macro.formatter.pagelink(0))
            out.write(macro.formatter.linebreak())
        # Don't make extra squares for the first row
        if i:
            for j in range(amount - len(pages)):
                out.write(macro.formatter.table_cell(1))

        out.write(macro.formatter.table_row(1))

        # Chart images to the other row
        for page in pages:
            out.write(macro.formatter.table_cell(1, {'class': 'meta_radar'}))
            out.write(u'<img src="%s">' % 
                      (url_construct(request, url_args, page)))
            out.write(macro.formatter.linebreak())
        if i:
            for j in range(amount - len(pages)):
                out.write(macro.formatter.table_cell(1))

    out.write(macro.formatter.table(0) + u'</div>')

    return out.getvalue()