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>'
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&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>'
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>'
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)
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()