def trail(self, d): """ Assemble page trail @param d: parameter dictionary @rtype: unicode @return: trail html """ request = self.request user = request.user html = '' if not user.valid or user.show_page_trail: trail = user.getTrail() if trail: items = [] for pagename in trail: try: interwiki, page = wikiutil.split_interwiki(pagename) if interwiki != request.cfg.interwikiname and interwiki != 'Self': link = (self.request.formatter.interwikilink(True, interwiki, page) + self.shortenPagename(page) + self.request.formatter.interwikilink(False, interwiki, page)) items.append(link) continue else: pagename = page except ValueError: pass page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) items.append(link) html = u'<div id="pagetrail">%s</div>' % u'<span class="sep"> » </span>'.join(items) return html
def breadcrumbs(self, d, is_footer=False): request = self.request _ = request.getText user = request.user if not user.valid: return "" items = [] if user.show_page_trail: trail = user.getTrail() if trail: for pagename in trail[::-1]: try: interwiki, page = wikiutil.split_interwiki(pagename) if interwiki != request.cfg.interwikiname and interwiki != 'Self': link = ( self.request.formatter.interwikilink( True, interwiki, page) + self.shortenPagename(page) + self.request.formatter.interwikilink( False, interwiki, page)) items.append(link) continue else: pagename = page except ValueError: pass page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) items.append(link) val = """ <div class="navbar breadcrumb"> <ul class="breadcrumb navbar-left">""" for i, item in enumerate(items): if i == 0: val += '\n <li class="active">%s</li>' % item else: val += '\n <li>%s</li>' % item val += '\n </ul>\n <ul class="breadcrumb navbar-right">' actions = getattr(request.cfg, 'bootstrap_actions', self.BREADCRUMB_ACTIONS) for i, act in enumerate(actions): if act[0].isupper() and not act in self.available_actions: continue val += '\n <li><a href="?action=%s%s">%s</a></li>' % (act, self.rev, self._actiontitle(act)) val += u""" <li class="toggleCommentsButton" style="display:none;"> <a href="#" class="nbcomment" onClick="toggleComments(); return false;">%s</a> </li> %s </ul> </div>""" % (_('Comments'), self.actionsmenu(d, is_footer)) return val
def redirect_last_visited(request): pagetrail = request.user.getTrail() if pagetrail: # Redirect to last page visited last_visited = pagetrail[-1] wikiname, pagename = wikiutil.split_interwiki(last_visited) if wikiname != request.cfg.interwikiname and wikiname != 'Self': wikitag, wikiurl, wikitail, error = wikiutil.resolve_interwiki(request, wikiname, pagename) url = wikiurl + wikiutil.quoteWikinameURL(wikitail) else: url = Page(request, pagename).url(request) else: # Or to localized FrontPage url = wikiutil.getFrontPage(request).url(request) url = request.getQualifiedURL(url) return abort(redirect(url))
def redirect_last_visited(request): pagetrail = request.user.getTrail() if pagetrail: # Redirect to last page visited last_visited = pagetrail[-1] wikiname, pagename = wikiutil.split_interwiki(last_visited) if wikiname != 'Self': wikitag, wikiurl, wikitail, error = wikiutil.resolve_interwiki(request, wikiname, pagename) url = wikiurl + wikiutil.quoteWikinameURL(wikitail) else: url = Page(request, pagename).url(request) else: # Or to localized FrontPage url = wikiutil.getFrontPage(request).url(request) url = request.getQualifiedURL(url) return abort(redirect(url))
def trail(self, d): """ Assemble page trail @param d: parameter dictionary @rtype: unicode @return: trail html """ _ = self.request.getText request = self.request user = request.user html = u'' li = u' <li>%s</li>' if not user.valid or user.show_page_trail: trail = user.getTrail() if trail: items = [] for pagename in trail: try: interwiki, page = wikiutil.split_interwiki(pagename) if interwiki != request.cfg.interwikiname and interwiki != 'Self': link = (self.request.formatter.interwikilink(True, interwiki, page) + self.shortenPagename(page) + self.request.formatter.interwikilink(False, interwiki, page)) items.append(li % link) continue else: pagename = page except ValueError: pass page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) items.append(li % link) html = u''' <div id="pagetrail"> <h4>%s</h4> <ul> %s </ul> </div> ''' % (_('Trail'), u'\n'.join(items)) return html
def macro_IncludePage(macro, src=str, width=str, height=str, **kwargs): request = macro.request formatter = macro.formatter _ = request.getText named_params = dict(kwargs) # Prepare URL src = wikiutil.escape(src) if _is_url(src): pass elif _is_interwiki(src): wiki, page = wikiutil.split_interwiki(src) wikitag, wikiurl, wikitail, err = wikiutil.resolve_interwiki(request, wiki, page) src = wikiutil.join_wiki(wikiurl, wikitail) else: src = Page(request, src).url(request) # Escape other parameters and set defaults width = wikiutil.escape(width) height = wikiutil.escape(height) align = wikiutil.escape(named_params.get("align", "")) scrolling = wikiutil.escape(named_params.get("scrolling", "auto")) marginheight= wikiutil.escape(named_params.get("marginheight","0")) marginwidth = wikiutil.escape(named_params.get("marginwidth", "0")) frameborder = wikiutil.escape(named_params.get("frameborder","0")) longdesc = wikiutil.escape(named_params.get("longdesc","")) # Output stuff result = """ <iframe src="%(src)s" width="%(width)s" height="%(height)s" align="%(align)s" scrolling="%(scrolling)s" marginheight="%(marginheight)s" marginwidth="%(marginwidth)s" frameborder="%(frameborder)s" longdesc="%(longdesc)s"> <p>%(error_msg)s <a href="%(src)s">%(src)s</a> </p> </iframe> """ % { 'src': src, 'width': width, 'height': height, 'align': align, 'scrolling': scrolling, 'marginheight': marginheight, 'marginwidth': marginwidth, 'frameborder': frameborder, 'longdesc': longdesc, 'error_msg': _("Your browser cannot display inlined frames. You can call the inlined page through the following link:") } return formatter.rawHTML(result)
def visit_reference(self, node): """ Pass links to MoinMoin to get the correct wiki space url. Extract the url and pass it on to the html4css1 writer to handle. Inline images are also handled by visit_image. Not sure what the "drawing:" link scheme is used for, so for now it is handled here. Also included here is a hack to allow MoinMoin macros. This routine checks for a link which starts with "<<". This link is passed to the MoinMoin formatter and the resulting markup is inserted into the document in the place of the original link reference. """ if 'refuri' in node.attributes: refuri = node['refuri'] prefix = '' link = refuri if ':' in refuri: prefix, link = refuri.lstrip().split(':', 1) # First see if MoinMoin should handle completely. Exits through add_wiki_markup. if refuri.startswith('<<') and refuri.endswith('>>'): # moin macro self.process_wiki_text(refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() if prefix == 'drawing': self.process_wiki_text("[[%s]]" % refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() # From here down, all links are handled by docutils (except # missing attachments), just fixup node['refuri']. if prefix == 'attachment': if not AttachFile.exists(self.request, self.request.page.page_name, link): # Attachment doesn't exist, give to MoinMoin to insert upload text. self.process_wiki_text("[[%s]]" % refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() # Attachment exists, just get a link to it. node['refuri'] = AttachFile.getAttachUrl( self.request.page.page_name, link, self.request) if not [ i for i in node.children if i.__class__ == docutils.nodes.image ]: node['classes'].append(prefix) elif prefix == 'wiki': wiki_name, page_name = wikiutil.split_interwiki(link) wikitag, wikiurl, wikitail, err = wikiutil.resolve_interwiki( self.request, wiki_name, page_name) wikiurl = wikiutil.mapURL(self.request, wikiurl) node['refuri'] = wikiutil.join_wiki(wikiurl, wikitail) # Only add additional class information if the reference does # not have a child image (don't want to add additional markup # for images with targets). if not [ i for i in node.children if i.__class__ == docutils.nodes.image ]: node['classes'].append('interwiki') elif prefix == 'javascript': # is someone trying to do XSS with javascript? node['refuri'] = 'javascript:alert("it does not work")' elif prefix != '': # Some link scheme (http, file, https, mailto, etc.), add class # information if the reference doesn't have a child image (don't # want additional markup for images with targets). # Don't touch the refuri. if not [ i for i in node.children if i.__class__ == docutils.nodes.image ]: node['classes'].append(prefix) else: # Default case - make a link to a wiki page. pagename, anchor = wikiutil.split_anchor(refuri) page = Page( self.request, wikiutil.AbsPageName(self.formatter.page.page_name, pagename)) node['refuri'] = page.url(self.request, anchor=anchor) if not page.exists(): node['classes'].append('nonexistent') html4css1.HTMLTranslator.visit_reference(self, node)
def visit_reference(self, node): """ Pass links to MoinMoin to get the correct wiki space url. Extract the url and pass it on to the html4css1 writer to handle. Inline images are also handled by visit_image. Not sure what the "drawing:" link scheme is used for, so for now it is handled here. Also included here is a hack to allow MoinMoin macros. This routine checks for a link which starts with "<<". This link is passed to the MoinMoin formatter and the resulting markup is inserted into the document in the place of the original link reference. """ if 'refuri' in node.attributes: refuri = node['refuri'] prefix = '' link = refuri if ':' in refuri: prefix, link = refuri.lstrip().split(':', 1) # First see if MoinMoin should handle completely. Exits through add_wiki_markup. if refuri.startswith('<<') and refuri.endswith('>>'): # moin macro self.process_wiki_text(refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() if prefix == 'drawing': self.process_wiki_text("[[%s]]" % refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() # From here down, all links are handled by docutils (except # missing attachments), just fixup node['refuri']. if prefix == 'attachment': if not AttachFile.exists(self.request, self.request.page.page_name, link): # Attachment doesn't exist, give to MoinMoin to insert upload text. self.process_wiki_text("[[%s]]" % refuri) self.wiki_text = self.fixup_wiki_formatting(self.wiki_text) self.add_wiki_markup() # Attachment exists, just get a link to it. node['refuri'] = AttachFile.getAttachUrl(self.request.page.page_name, link, self.request) if not [i for i in node.children if i.__class__ == docutils.nodes.image]: node['classes'].append(prefix) elif prefix == 'wiki': wiki_name, page_name = wikiutil.split_interwiki(link) wikitag, wikiurl, wikitail, err = wikiutil.resolve_interwiki(self.request, wiki_name, page_name) wikiurl = wikiutil.mapURL(self.request, wikiurl) node['refuri'] = wikiutil.join_wiki(wikiurl, wikitail) # Only add additional class information if the reference does # not have a child image (don't want to add additional markup # for images with targets). if not [i for i in node.children if i.__class__ == docutils.nodes.image]: node['classes'].append('interwiki') elif prefix != '': # Some link scheme (http, file, https, mailto, etc.), add class # information if the reference doesn't have a child image (don't # want additional markup for images with targets). # Don't touch the refuri. if not [i for i in node.children if i.__class__ == docutils.nodes.image]: node['classes'].append(prefix) else: # Default case - make a link to a wiki page. pagename, anchor = wikiutil.split_anchor(refuri) page = Page(self.request, wikiutil.AbsPageName(self.formatter.page.page_name, pagename)) node['refuri'] = page.url(self.request, anchor=anchor) if not page.exists(): node['classes'].append('nonexistent') html4css1.HTMLTranslator.visit_reference(self, node)
def trail(self, d): """ Assemble page trail @param d: parameter dictionary @rtype: unicode @return: trail html """ request = self.request user = request.user html = '' found = {} # pages we found. prevent duplicates items = [] # navibar items item = u'<li class="%s">%s</li> ' current = d['page_name'] current_link = '' # Process config navi_bar # if request.cfg.navi_bar: # for text in request.cfg.navi_bar: # pagename, link = self.splitNavilink(text) # if pagename == current: # cls = 'wikilink active' # current_link = link # else: # cls = 'wikilink' # items.append(item % (cls, link)) # # items.append((cls, link)) # found[pagename] = 1 # item = u'<li class="%s"><span class="label label-primary"> </span> %s</li> ' # Add user links to wiki links, eliminating duplicates. userlinks = request.user.getQuickLinks() items.append('<span class="glyphicon glyphicon-star"></span>') for text in userlinks: # Split text without localization, user knows what he wants pagename, link = self.splitNavilink(text, localize=0) if not pagename in found: if pagename == current: cls = 'userlink active' current_link = link else: cls = 'userlink' items.append(item % (cls, link)) # items.append((cls, link)) found[pagename] = 1 items.append('<span class="glyphicon glyphicon-signal"></span>') if not user.valid or user.show_page_trail: trail = user.getTrail() if trail: # items = [] for pagename in trail: try: interwiki, page = wikiutil.split_interwiki(pagename) if interwiki != request.cfg.interwikiname and interwiki != 'Self': link = (self.request.formatter.interwikilink(True, interwiki, page) + self.shortenPagename(page) + self.request.formatter.interwikilink(False, interwiki, page)) items.append('<li>%s</li>' % link) continue else: pagename = page except ValueError: pass page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) items.append('<li>%s</li>' % link) # html = u'''%s''' % (' <span class="divider">/</span> '.join(items)) ### ###<li><a href="#">Library</a> <span class="divider">/</span></li> ###<li class="active">Data</li> #html = u'<div id="pagetrail">%s</div>' % u'<span class="sep"> » </span>'.join(items) html = u'''<div style='background-color:#f5f5f5; text-align:center;'><small> <ul class="breadcrumb">%s</ul></small></div>''' % ('\n'.join(items)) return html