def macro(self): request = self.request groups = [] for groupname in defaultconfig.options: groups.append((groupname, True, defaultconfig.options)) for groupname in defaultconfig.options_no_group_name: groups.append( (groupname, False, defaultconfig.options_no_group_name)) groups.sort() result = moin_page.div() for groupname, addgroup, optsdict in groups: heading, desc, opts = optsdict[groupname] result.append( moin_page.h(attrib={moin_page.outline_level: '1'}, children=[heading])) if desc: result.append(moin_page.p(children=[desc])) table = moin_page.table() result.append(table) header = moin_page.table_header() table.append(header) row = moin_page.table_row() header.append(row) for text in [ _('Variable name'), _('Default'), _('Description'), ]: strong_text = moin_page.strong(children=[text]) row.append(moin_page.table_cell(children=[strong_text])) body = moin_page.table_body() table.append(body) opts = list(opts) opts.sort() for name, default, description in opts: if addgroup: name = groupname + '_' + name if isinstance(default, defaultconfig.DefaultExpression): default_txt = default.text else: default_txt = '%r' % (default, ) if len(default_txt) > 30: default_txt = moin_page.span( attrib={moin_page.title: default_txt}, children=['...']) description = _(description or '') row = moin_page.table_row() body.append(row) row.append(moin_page.table_cell(children=[name])) default = moin_page.code(children=[default_txt]) row.append(moin_page.table_cell(children=[default])) row.append(moin_page.table_cell(children=[description])) return result
def error_message(msg): txt = moin_page.p(children=(text, )) msg = moin_page.p(children=(msg, )) msg.set(moin_page.class_, 'moin-error') div = moin_page.div(children=(txt, msg)) return div
def _Include_repl(self, args, text, context_block): """ Return a moin_page node representing an include macro that will be processed further in /converter/include.py. The transclusion {{jpeg.jpg}} and the macro <<Include(jpeg.jpg)>> will have identical output. If context_block is true, the macro expansion will be enclosed in a DIV-tag, else the macro output will be enclosed in a SPAN-tag. converter/include.py will resolve HTML 5 validation issues should the macro output block tags within an inline context. """ def error_message(msg): txt = moin_page.p(children=(text, )) msg = moin_page.p(children=(msg, )) msg.set(moin_page.class_, 'moin-error') div = moin_page.div(children=(txt, msg)) return div if args: args = parse_arguments(args, parse_re=include_re) else: return error_message( _("Include Macro above has invalid format, missing item name")) pagename = args[0] heading = None level = None try: heading = args[1] level = int(args[2]) except (IndexError, ValueError): pass sort = 'sort' in args and args['sort'] if sort and sort not in ('ascending', 'descending'): return error_message( _("Include Macro above has invalid format, expected sort=ascending or descending" )) # TODO: We need corresponding code in include.py to process items, skipitems, titlesonly, and editlink items = 'items' in args and int(args['items']) skipitems = 'skipitems' in args and int(args['skipitems']) titlesonly = 'titlesonly' in args editlink = 'editlink' in args attrib = {} xpointer = [] xpointer_moin = [] def add_moin_xpointer(function, args): args = unicode(args).replace('^', '^^').replace('(', '^(').replace( ')', '^)') xpointer_moin.append(function + u'(' + args + u')') moin_args = [] if pagename.startswith(u'^'): add_moin_xpointer(u'pages', pagename) if sort: add_moin_xpointer(u'sort', sort) if items: add_moin_xpointer(u'items', items) if skipitems: add_moin_xpointer(u'skipitems', skipitems) else: link = iri.Iri(scheme=u'wiki.local', path=pagename) attrib[xinclude.href] = link if heading is not None: add_moin_xpointer(u'heading', heading) if level: add_moin_xpointer(u'level', str(level)) if titlesonly: add_moin_xpointer(u'titlesonly', u'') if editlink: add_moin_xpointer(u'editlink', u'') if xpointer_moin: xpointer.append(u'page:include({0})'.format( u' '.join(xpointer_moin))) if xpointer: # TODO: Namespace? ns = 'xmlns(page={0}) '.format(moin_page) attrib[xinclude.xpointer] = ns + ' '.join(xpointer) span_wrap = xinclude.include(attrib=attrib) if not context_block: return span_wrap attrib = {moin_page.class_: 'moin-p'} return moin_page.div(attrib=attrib, children=[span_wrap])
def invalid_args(self, elem, all_nowiki_args): """Insert an error message into output.""" message = _('Defaulting to plain text due to invalid arguments: "{arguments}"').format(arguments=all_nowiki_args[0]) admonition = moin_page.div(attrib={moin_page.class_: 'error'}, children=[moin_page.p(children=[message])]) elem.append(admonition)
def __call__(self, content, arguments, page_url, alternative, context_block): ret = self.macro(content, arguments, page_url, alternative) if context_block: return moin_page.div(children=(ret, )) return ret
def macro(self): if not flaskg.user or not flaskg.user.isSuperUser(): return '' settings = {} for groupname in defaultconfig.options: heading, desc, opts = defaultconfig.options[groupname] for name, default, description in opts: name = groupname + '_' + name if isinstance(default, defaultconfig.DefaultExpression): default = default.value settings[name] = default for groupname in defaultconfig.options_no_group_name: heading, desc, opts = defaultconfig.options_no_group_name[ groupname] for name, default, description in opts: if isinstance(default, defaultconfig.DefaultExpression): default = default.value settings[name] = default result = moin_page.div() result.append( moin_page.h(attrib={moin_page.outline_level: '1'}, children=[_("Wiki configuration")])) desc = _( "This table shows all settings in this wiki that do not have default values. " "Settings that the configuration system doesn't know about are shown in italic, " "those may be due to third-party extensions needing configuration or settings that " "were removed from Moin.") result.append(moin_page.p(children=[desc])) table = moin_page.table() result.append(table) header = moin_page.table_header() table.append(header) row = moin_page.table_row() header.append(row) for text in [ _('Variable name'), _('Setting'), ]: strong_text = moin_page.strong(children=[text]) row.append(moin_page.table_cell(children=[strong_text])) body = moin_page.table_body() table.append(body) def iter_vnames(cfg): dedup = {} for name in cfg.__dict__: dedup[name] = True yield name, cfg.__dict__[name] for cls in cfg.__class__.mro(): if cls == defaultconfig.ConfigFunctionality: break for name in cls.__dict__: if not name in dedup: dedup[name] = True yield name, cls.__dict__[name] found = [] for vname, value in iter_vnames(app.cfg): if hasattr(defaultconfig.ConfigFunctionality, vname): continue if vname in settings and settings[vname] == value: continue found.append((vname, value)) found.sort() for vname, value in found: if not vname in settings: vname = moin_page.emphasis(children=[vname]) vtxt = '%r' % (value, ) row = moin_page.table_row() body.append(row) row.append(moin_page.table_cell(children=[vname])) vtxt_code = moin_page.code(children=[vtxt]) row.append(moin_page.table_cell(children=[vtxt_code])) return result
def visit_comment(self, node): """ Create moinwiki style hidden comment rather than html style: <!-- a comment --> """ attrib = {moin_page.class_: 'comment dashed'} self.open_moin_page_node(moin_page.div(attrib=attrib))