def macro_IsRecent(macro, pageName=''): fmt = macro.formatter if (pageName == ''): return fmt.text('No page supplied') request = macro.request page = Page(request,pageName) log = page.lastEditInfo(request) now = datetime.now() delta = now - datetime.strptime(log['time'], "%Y-%m-%d %H:%M:%S") if (delta.days > 7): return fmt.rawHTML("<a href='http://mywiki" + pageName + "'>" + pageName + "</a>") else: return fmt.rawHTML("<a style='color:black;font-size:20px;' href='http://mywiki" + pageName + "'>" + pageName + "</a>")
def send_title(self, text, **keywords): """ Output the page header (and title). @param text: the title text @keyword page: the page instance that called us - using this is more efficient than using pagename.. @keyword pagename: 'PageName' @keyword print_mode: 1 (or 0) @keyword editor_mode: 1 (or 0) @keyword media: css media type, defaults to 'screen' @keyword allow_doubleclick: 1 (or 0) @keyword html_head: additional <head> code @keyword body_attr: additional <body> attributes @keyword body_onload: additional "onload" JavaScript code """ request = self.request _ = request.getText rev = request.rev if keywords.has_key('page'): page = keywords['page'] pagename = page.page_name else: pagename = keywords.get('pagename', '') page = Page(request, pagename) if keywords.get('msg', ''): raise DeprecationWarning("Using send_page(msg=) is deprecated! Use theme.add_msg() instead!") scriptname = request.script_root # get name of system pages page_front_page = wikiutil.getFrontPage(request).page_name page_help_contents = wikiutil.getLocalizedPage(request, 'HelpContents').page_name page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name page_site_navigation = wikiutil.getLocalizedPage(request, 'SiteNavigation').page_name page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name page_help_formatting = wikiutil.getLocalizedPage(request, 'HelpOnFormatting').page_name page_find_page = wikiutil.getLocalizedPage(request, 'FindPage').page_name home_page = wikiutil.getInterwikiHomePage(request) # sorry theme API change!!! Either None or tuple (wikiname,pagename) now. page_parent_page = getattr(page.getParentPage(), 'page_name', None) # Prepare the HTML <head> element user_head = [request.cfg.html_head] # include charset information - needed for moin_dump or any other case # when reading the html without a web server user_head.append('''<meta http-equiv="Content-Type" content="%s;charset=%s">\n''' % (page.output_mimetype, page.output_charset)) meta_keywords = request.getPragma('keywords') meta_desc = request.getPragma('description') if meta_keywords: user_head.append('<meta name="keywords" content="%s">\n' % wikiutil.escape(meta_keywords, 1)) if meta_desc: user_head.append('<meta name="description" content="%s">\n' % wikiutil.escape(meta_desc, 1)) # search engine precautions / optimization: # if it is an action or edit/search, send query headers (noindex,nofollow): if request.query_string: user_head.append(request.cfg.html_head_queries) elif request.method == 'POST': user_head.append(request.cfg.html_head_posts) # we don't want to have BadContent stuff indexed: elif pagename in ['BadContent', 'LocalBadContent', ]: user_head.append(request.cfg.html_head_posts) # if it is a special page, index it and follow the links - we do it # for the original, English pages as well as for (the possibly # modified) frontpage: elif pagename in [page_front_page, request.cfg.page_front_page, page_title_index, 'TitleIndex', page_find_page, 'FindPage', page_site_navigation, 'SiteNavigation', 'RecentChanges', ]: user_head.append(request.cfg.html_head_index) # if it is a normal page, index it, but do not follow the links, because # there are a lot of illegal links (like actions) or duplicates: else: user_head.append(request.cfg.html_head_normal) if 'pi_refresh' in keywords and keywords['pi_refresh']: user_head.append('<meta http-equiv="refresh" content="%d;URL=%s">' % keywords['pi_refresh']) # output buffering increases latency but increases throughput as well output = [] # later: <html xmlns=\"http://www.w3.org/1999/xhtml\"> output.append("""\ <!doctype html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>%(title)s</title> <meta name="description" content=""> <meta name="author" content=""> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="%(static_url)scss/style.css"> <script src="%(static_url)sjs/libs/moin.common.js"></script> <script type="text/javascript"> <!-- var search_hint = "Search"; //--> </script> <script src="%(static_url)sjs/libs/modernizr-2.0.6.min.js"></script> """ %{'title':text, 'static_url':django_settings.STATIC_URL}) # Links output.append('<link rel="Start" href="%s">\n' % request.href(page_front_page)) if pagename: output.append('<link rel="Alternate" title="%s" href="%s">\n' % ( _('Wiki Markup'), request.href(pagename, action='raw'))) output.append('<link rel="Alternate" media="print" title="%s" href="%s">\n' % ( _('Print View'), request.href(pagename, action='print'))) # !!! currently disabled due to Mozilla link prefetching, see # http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html #~ all_pages = request.getPageList() #~ if all_pages: #~ try: #~ pos = all_pages.index(pagename) #~ except ValueError: #~ # this shopuld never happend in theory, but let's be sure #~ pass #~ else: #~ request.write('<link rel="First" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[0])) #~ if pos > 0: #~ request.write('<link rel="Previous" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[pos-1]))) #~ if pos+1 < len(all_pages): #~ request.write('<link rel="Next" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[pos+1]))) #~ request.write('<link rel="Last" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[-1]))) if page_parent_page: output.append('<link rel="Up" href="%s">\n' % request.href(page_parent_page)) # write buffer because we call AttachFile request.write(''.join(output)) output = [] # XXX maybe this should be removed completely. moin emits all attachments as <link rel="Appendix" ...> # and it is at least questionable if this fits into the original intent of rel="Appendix". if pagename and request.user.may.read(pagename): from MoinMoin.action import AttachFile AttachFile.send_link_rel(request, pagename) output.extend([ '<link rel="Search" href="%s">\n' % request.href(page_find_page), '<link rel="Index" href="%s">\n' % request.href(page_title_index), '<link rel="Glossary" href="%s">\n' % request.href(page_word_index), '<link rel="Help" href="%s">\n' % request.href(page_help_formatting), ]) output.append("</head>\n") request.write(''.join(output)) output = [] # start the <body> bodyattr = [] if keywords.has_key('body_attr'): bodyattr.append(' ') bodyattr.append(keywords['body_attr']) # Add doubleclick edit action if (pagename and keywords.get('allow_doubleclick', 0) and not keywords.get('print_mode', 0) and request.user.edit_on_doubleclick): if request.user.may.write(pagename): # separating this gains speed url = page.url(request, {'action': 'edit'}) bodyattr.append(''' ondblclick="location.href='%s'" ''' % wikiutil.escape(url, True)) # Set body to the user interface language and direction bodyattr.append(' %s' % self.ui_lang_attr()) body_onload = keywords.get('body_onload', '') if body_onload: bodyattr.append(''' onload="%s"''' % body_onload) output.append('\n<body%s>\n' % ''.join(bodyattr)) # Output ----------------------------------------------------------- # If in print mode, start page div and emit the title if keywords.get('print_mode', 0): d = { 'title_text': text, 'page': page, 'page_name': pagename or '', 'rev': rev, } request.themedict = d output.append(self.startPage()) output.append(self.interwiki(d)) output.append(self.title(d)) # In standard mode, emit theme.header else: exists = pagename and page.exists(includeDeleted=True) # prepare dict for theme code: d = { 'theme': self.name, 'script_name': scriptname, 'title_text': text, 'logo_string': request.cfg.logo_string, 'site_name': request.cfg.sitename, 'page': page, 'rev': rev, 'pagesize': pagename and page.size() or 0, # exists checked to avoid creation of empty edit-log for non-existing pages 'last_edit_info': exists and page.lastEditInfo() or '', 'page_name': pagename or '', 'page_find_page': page_find_page, 'page_front_page': page_front_page, 'home_page': home_page, 'page_help_contents': page_help_contents, 'page_help_formatting': page_help_formatting, 'page_parent_page': page_parent_page, 'page_title_index': page_title_index, 'page_word_index': page_word_index, 'user_name': request.user.name, 'user_valid': request.user.valid, 'msg': self._status, 'trail': keywords.get('trail', None), # Discontinued keys, keep for a while for 3rd party theme developers 'titlesearch': 'use self.searchform(d)', 'textsearch': 'use self.searchform(d)', 'navibar': ['use self.navibar(d)'], 'available_actions': ['use self.request.availableActions(page)'], } # add quoted versions of pagenames newdict = {} for key in d: if key.startswith('page_'): if not d[key] is None: newdict['q_'+key] = wikiutil.quoteWikinameURL(d[key]) else: newdict['q_'+key] = None d.update(newdict) request.themedict = d # now call the theming code to do the rendering if keywords.get('editor_mode', 0): output.append(self.editorheader(d)) else: output.append(self.header(d)) # emit it request.write(''.join(output)) output = [] self._send_title_called = True
def send_title(self, text, **keywords): """ Output the page header (and title). @param text: the title text @keyword page: the page instance that called us - using this is more efficient than using pagename.. @keyword pagename: 'PageName' @keyword print_mode: 1 (or 0) @keyword editor_mode: 1 (or 0) @keyword media: css media type, defaults to 'screen' @keyword allow_doubleclick: 1 (or 0) @keyword html_head: additional <head> code @keyword body_attr: additional <body> attributes @keyword body_onload: additional "onload" JavaScript code """ request = self.request _ = request.getText rev = request.rev if keywords.has_key('page'): page = keywords['page'] pagename = page.page_name else: pagename = keywords.get('pagename', '') page = Page(request, pagename) if keywords.get('msg', ''): raise DeprecationWarning( "Using send_page(msg=) is deprecated! Use theme.add_msg() instead!" ) scriptname = request.script_root # get name of system pages page_front_page = wikiutil.getFrontPage(request).page_name page_help_contents = wikiutil.getLocalizedPage( request, 'HelpContents').page_name page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name page_site_navigation = wikiutil.getLocalizedPage( request, 'SiteNavigation').page_name page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name page_help_formatting = wikiutil.getLocalizedPage( request, 'HelpOnFormatting').page_name page_find_page = wikiutil.getLocalizedPage(request, 'FindPage').page_name home_page = wikiutil.getInterwikiHomePage( request ) # sorry theme API change!!! Either None or tuple (wikiname,pagename) now. page_parent_page = getattr(page.getParentPage(), 'page_name', None) # Prepare the HTML <head> element user_head = [request.cfg.html_head] # include charset information - needed for moin_dump or any other case # when reading the html without a web server user_head.append( '''<meta http-equiv="Content-Type" content="%s;charset=%s">\n''' % (page.output_mimetype, page.output_charset)) meta_keywords = request.getPragma('keywords') meta_desc = request.getPragma('description') if meta_keywords: user_head.append('<meta name="keywords" content="%s">\n' % wikiutil.escape(meta_keywords, 1)) if meta_desc: user_head.append('<meta name="description" content="%s">\n' % wikiutil.escape(meta_desc, 1)) # search engine precautions / optimization: # if it is an action or edit/search, send query headers (noindex,nofollow): if request.query_string: user_head.append(request.cfg.html_head_queries) elif request.method == 'POST': user_head.append(request.cfg.html_head_posts) # we don't want to have BadContent stuff indexed: elif pagename in [ 'BadContent', 'LocalBadContent', ]: user_head.append(request.cfg.html_head_posts) # if it is a special page, index it and follow the links - we do it # for the original, English pages as well as for (the possibly # modified) frontpage: elif pagename in [ page_front_page, request.cfg.page_front_page, page_title_index, 'TitleIndex', page_find_page, 'FindPage', page_site_navigation, 'SiteNavigation', 'RecentChanges', ]: user_head.append(request.cfg.html_head_index) # if it is a normal page, index it, but do not follow the links, because # there are a lot of illegal links (like actions) or duplicates: else: user_head.append(request.cfg.html_head_normal) if 'pi_refresh' in keywords and keywords['pi_refresh']: user_head.append( '<meta http-equiv="refresh" content="%d;URL=%s">' % keywords['pi_refresh']) # output buffering increases latency but increases throughput as well output = [] # later: <html xmlns=\"http://www.w3.org/1999/xhtml\"> output.append("""\ <!doctype html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>%(title)s</title> <meta name="description" content=""> <meta name="author" content=""> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="%(static_url)scss/style.css"> <script src="%(static_url)sjs/libs/moin.common.js"></script> <script type="text/javascript"> <!-- var search_hint = "Search"; //--> </script> <script src="%(static_url)sjs/libs/modernizr-2.0.6.min.js"></script> """ % { 'title': text, 'static_url': django_settings.STATIC_URL }) # Links output.append('<link rel="Start" href="%s">\n' % request.href(page_front_page)) if pagename: output.append( '<link rel="Alternate" title="%s" href="%s">\n' % (_('Wiki Markup'), request.href(pagename, action='raw'))) output.append( '<link rel="Alternate" media="print" title="%s" href="%s">\n' % (_('Print View'), request.href(pagename, action='print'))) # !!! currently disabled due to Mozilla link prefetching, see # http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html #~ all_pages = request.getPageList() #~ if all_pages: #~ try: #~ pos = all_pages.index(pagename) #~ except ValueError: #~ # this shopuld never happend in theory, but let's be sure #~ pass #~ else: #~ request.write('<link rel="First" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[0])) #~ if pos > 0: #~ request.write('<link rel="Previous" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[pos-1]))) #~ if pos+1 < len(all_pages): #~ request.write('<link rel="Next" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[pos+1]))) #~ request.write('<link rel="Last" href="%s/%s">\n' % (request.script_root, quoteWikinameURL(all_pages[-1]))) if page_parent_page: output.append('<link rel="Up" href="%s">\n' % request.href(page_parent_page)) # write buffer because we call AttachFile request.write(''.join(output)) output = [] # XXX maybe this should be removed completely. moin emits all attachments as <link rel="Appendix" ...> # and it is at least questionable if this fits into the original intent of rel="Appendix". if pagename and request.user.may.read(pagename): from MoinMoin.action import AttachFile AttachFile.send_link_rel(request, pagename) output.extend([ '<link rel="Search" href="%s">\n' % request.href(page_find_page), '<link rel="Index" href="%s">\n' % request.href(page_title_index), '<link rel="Glossary" href="%s">\n' % request.href(page_word_index), '<link rel="Help" href="%s">\n' % request.href(page_help_formatting), ]) output.append("</head>\n") request.write(''.join(output)) output = [] # start the <body> bodyattr = [] if keywords.has_key('body_attr'): bodyattr.append(' ') bodyattr.append(keywords['body_attr']) # Add doubleclick edit action if (pagename and keywords.get('allow_doubleclick', 0) and not keywords.get('print_mode', 0) and request.user.edit_on_doubleclick): if request.user.may.write(pagename): # separating this gains speed url = page.url(request, {'action': 'edit'}) bodyattr.append(''' ondblclick="location.href='%s'" ''' % wikiutil.escape(url, True)) # Set body to the user interface language and direction bodyattr.append(' %s' % self.ui_lang_attr()) body_onload = keywords.get('body_onload', '') if body_onload: bodyattr.append(''' onload="%s"''' % body_onload) output.append('\n<body%s>\n' % ''.join(bodyattr)) # Output ----------------------------------------------------------- # If in print mode, start page div and emit the title if keywords.get('print_mode', 0): d = { 'title_text': text, 'page': page, 'page_name': pagename or '', 'rev': rev, } request.themedict = d output.append(self.startPage()) output.append(self.interwiki(d)) output.append(self.title(d)) # In standard mode, emit theme.header else: exists = pagename and page.exists(includeDeleted=True) # prepare dict for theme code: d = { 'theme': self.name, 'script_name': scriptname, 'title_text': text, 'logo_string': request.cfg.logo_string, 'site_name': request.cfg.sitename, 'page': page, 'rev': rev, 'pagesize': pagename and page.size() or 0, # exists checked to avoid creation of empty edit-log for non-existing pages 'last_edit_info': exists and page.lastEditInfo() or '', 'page_name': pagename or '', 'page_find_page': page_find_page, 'page_front_page': page_front_page, 'home_page': home_page, 'page_help_contents': page_help_contents, 'page_help_formatting': page_help_formatting, 'page_parent_page': page_parent_page, 'page_title_index': page_title_index, 'page_word_index': page_word_index, 'user_name': request.user.name, 'user_valid': request.user.valid, 'msg': self._status, 'trail': keywords.get('trail', None), # Discontinued keys, keep for a while for 3rd party theme developers 'titlesearch': 'use self.searchform(d)', 'textsearch': 'use self.searchform(d)', 'navibar': ['use self.navibar(d)'], 'available_actions': ['use self.request.availableActions(page)'], } # add quoted versions of pagenames newdict = {} for key in d: if key.startswith('page_'): if not d[key] is None: newdict['q_' + key] = wikiutil.quoteWikinameURL(d[key]) else: newdict['q_' + key] = None d.update(newdict) request.themedict = d # now call the theming code to do the rendering if keywords.get('editor_mode', 0): output.append(self.editorheader(d)) else: output.append(self.header(d)) # emit it request.write(''.join(output)) output = [] self._send_title_called = True
def send_title(request, text, **keywords): """ Output the page header (and title). TODO: check all code that call us and add page keyword for the current page being rendered. @param request: the request object @param text: the title text @keyword link: URL for the title @keyword msg: additional message (after saving) @keyword pagename: 'PageName' @keyword page: the page instance that called us. @keyword print_mode: 1 (or 0) @keyword media: css media type, defaults to 'screen' @keyword allow_doubleclick: 1 (or 0) @keyword html_head: additional <head> code @keyword body_attr: additional <body> attributes @keyword body_onload: additional "onload" JavaScript code """ from MoinMoin.Page import Page _ = request.getText if keywords.has_key('page'): page = keywords['page'] pagename = page.page_name else: pagename = keywords.get('pagename', '') page = Page(request, pagename) scriptname = request.getScriptname() pagename_quoted = quoteWikinameURL(pagename) # get name of system pages page_front_page = getFrontPage(request).page_name page_help_contents = getSysPage(request, 'HelpContents').page_name page_title_index = getSysPage(request, 'TitleIndex').page_name page_word_index = getSysPage(request, 'WordIndex').page_name page_user_prefs = getSysPage(request, 'UserPreferences').page_name page_help_formatting = getSysPage(request, 'HelpOnFormatting').page_name page_find_page = getSysPage(request, 'FindPage').page_name page_home_page = getattr(getHomePage(request), 'page_name', None) page_parent_page = getattr(page.getParentPage(), 'page_name', None) # Prepare the HTML <head> element user_head = [request.cfg.html_head] # include charset information - needed for moin_dump or any other case # when reading the html without a web server user_head.append('''<meta http-equiv="Content-Type" content="text/html;charset=%s">\n''' % config.charset) meta_keywords = request.getPragma('keywords') meta_desc = request.getPragma('description') if meta_keywords: user_head.append('<meta name="keywords" content="%s">\n' % escape(meta_keywords, 1)) if meta_desc: user_head.append('<meta name="description" content="%s">\n' % escape(meta_desc, 1)) # search engine precautions / optimization: # if it is an action or edit/search, send query headers (noindex,nofollow): if request.query_string: user_head.append(request.cfg.html_head_queries) elif request.request_method == 'POST': user_head.append(request.cfg.html_head_posts) # if it is a special page, index it and follow the links - we do it # for the original, English pages as well as for (the possibly # modified) frontpage: elif pagename in [page_front_page, request.cfg.page_front_page, page_title_index, ]: user_head.append(request.cfg.html_head_index) # if it is a normal page, index it, but do not follow the links, because # there are a lot of illegal links (like actions) or duplicates: else: user_head.append(request.cfg.html_head_normal) if keywords.has_key('pi_refresh') and keywords['pi_refresh']: user_head.append('<meta http-equiv="refresh" content="%(delay)d;URL=%(url)s">' % keywords['pi_refresh']) # output buffering increases latency but increases throughput as well output = [] # later: <html xmlns=\"http://www.w3.org/1999/xhtml\"> output.append("""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> %s %s %s """ % ( ''.join(user_head), keywords.get('html_head', ''), request.theme.html_head({ 'title': escape(text), 'sitename': escape(request.cfg.html_pagetitle or request.cfg.sitename), 'print_mode': keywords.get('print_mode', False), 'media': keywords.get('media', 'screen'), }) )) # Links output.append('<link rel="Start" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_front_page))) if pagename: output.append('<link rel="Alternate" title="%s" href="%s/%s?action=raw">\n' % ( _('Wiki Markup'), scriptname, pagename_quoted,)) output.append('<link rel="Alternate" media="print" title="%s" href="%s/%s?action=print">\n' % ( _('Print View'), scriptname, pagename_quoted,)) # !!! currently disabled due to Mozilla link prefetching, see # http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html #~ all_pages = request.getPageList() #~ if all_pages: #~ try: #~ pos = all_pages.index(pagename) #~ except ValueError: #~ # this shopuld never happend in theory, but let's be sure #~ pass #~ else: #~ request.write('<link rel="First" href="%s/%s">\n' % (request.getScriptname(), quoteWikinameURL(all_pages[0])) #~ if pos > 0: #~ request.write('<link rel="Previous" href="%s/%s">\n' % (request.getScriptname(), quoteWikinameURL(all_pages[pos-1]))) #~ if pos+1 < len(all_pages): #~ request.write('<link rel="Next" href="%s/%s">\n' % (request.getScriptname(), quoteWikinameURL(all_pages[pos+1]))) #~ request.write('<link rel="Last" href="%s/%s">\n' % (request.getScriptname(), quoteWikinameURL(all_pages[-1]))) if page_parent_page: output.append('<link rel="Up" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_parent_page))) # write buffer because we call AttachFile request.write(''.join(output)) output = [] if pagename: from MoinMoin.action import AttachFile AttachFile.send_link_rel(request, pagename) output.extend([ '<link rel="Search" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_find_page)), '<link rel="Index" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_title_index)), '<link rel="Glossary" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_word_index)), '<link rel="Help" href="%s/%s">\n' % (scriptname, quoteWikinameURL(page_help_formatting)), ]) output.append("</head>\n") request.write(''.join(output)) output = [] request.flush() # start the <body> bodyattr = [] if keywords.has_key('body_attr'): bodyattr.append(' ') bodyattr.append(keywords['body_attr']) # Add doubleclick edit action if (pagename and keywords.get('allow_doubleclick', 0) and not keywords.get('print_mode', 0) and request.user.edit_on_doubleclick): if request.user.may.write(pagename): # separating this gains speed querystr = escape(util.web.makeQueryString({'action': 'edit'})) # TODO: remove escape=0 in 1.4 url = page.url(request, querystr, escape=0) bodyattr.append(''' ondblclick="location.href='%s'"''' % url) # Set body to the user interface language and direction bodyattr.append(' %s' % request.theme.ui_lang_attr()) body_onload = keywords.get('body_onload', '') if body_onload: bodyattr.append(''' onload="%s"''' % body_onload) output.append('\n<body%s>\n' % ''.join(bodyattr)) # Output ----------------------------------------------------------- theme = request.theme # If in print mode, start page div and emit the title if keywords.get('print_mode', 0): d = {'title_text': text, 'title_link': None, 'page': page,} request.themedict = d output.append(theme.startPage()) output.append(theme.title(d)) # In standard mode, emit theme.header else: # prepare dict for theme code: d = { 'theme': theme.name, 'script_name': scriptname, 'title_text': text, 'title_link': keywords.get('link', ''), 'logo_string': request.cfg.logo_string, 'site_name': request.cfg.sitename, 'page': page, 'pagesize': pagename and page.size() or 0, 'last_edit_info': pagename and page.lastEditInfo() or '', 'page_name': pagename or '', 'page_find_page': page_find_page, 'page_front_page': page_front_page, 'page_home_page': page_home_page, 'page_help_contents': page_help_contents, 'page_help_formatting': page_help_formatting, 'page_parent_page': page_parent_page, 'page_title_index': page_title_index, 'page_word_index': page_word_index, 'page_user_prefs': page_user_prefs, 'user_name': request.user.name, 'user_valid': request.user.valid, 'user_prefs': (page_user_prefs, request.user.name)[request.user.valid], 'msg': keywords.get('msg', ''), 'trail': keywords.get('trail', None), # Discontinued keys, keep for a while for 3rd party theme developers 'titlesearch': 'use self.searchform(d)', 'textsearch': 'use self.searchform(d)', 'navibar': ['use self.navibar(d)'], 'available_actions': ['use self.request.availableActions(page)'], } # add quoted versions of pagenames newdict = {} for key in d: if key.startswith('page_'): if not d[key] is None: newdict['q_'+key] = quoteWikinameURL(d[key]) else: newdict['q_'+key] = None d.update(newdict) request.themedict = d # now call the theming code to do the rendering output.append(theme.header(d)) # emit it request.write(''.join(output)) output = [] request.flush()
def send_title(self, text, **keywords): """ Override Output the page header (and title). @param text: the title text @keyword page: the page instance that called us - using this is more efficient than using pagename.. @keyword pagename: 'PageName' @keyword print_mode: 1 (or 0) @keyword editor_mode: 1 (or 0) @keyword media: css media type, defaults to 'screen' @keyword allow_doubleclick: 1 (or 0) @keyword html_head: additional <head> code @keyword body_attr: additional <body> attributes @keyword body_onload: additional "onload" JavaScript code """ request = self.request _ = request.getText rev = request.rev if keywords.has_key('page'): page = keywords['page'] pagename = page.page_name else: pagename = keywords.get('pagename', '') page = Page(request, pagename) if keywords.get('msg', ''): raise DeprecationWarning("Using send_page(msg=) is deprecated! Use theme.add_msg() instead!") scriptname = request.script_root # get name of system pages page_front_page = wikiutil.getFrontPage(request).page_name page_help_contents = wikiutil.getLocalizedPage(request, 'HelpContents').page_name page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name page_site_navigation = wikiutil.getLocalizedPage(request, 'SiteNavigation').page_name page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name page_help_formatting = wikiutil.getLocalizedPage(request, 'HelpOnFormatting').page_name page_find_page = wikiutil.getLocalizedPage(request, 'FindPage').page_name home_page = wikiutil.getInterwikiHomePage(request) # sorry theme API change!!! Either None or tuple (wikiname,pagename) now. page_parent_page = getattr(page.getParentPage(), 'page_name', None) # set content_type, including charset, so web server doesn't touch it: request.content_type = "text/html; charset=%s" % (config.charset, ) # Prepare the HTML <head> element user_head = [request.cfg.html_head] # include charset information - needed for moin_dump or any other case # when reading the html without a web server user_head.append('''<meta charset="%s">\n''' % (page.output_charset)) meta_keywords = request.getPragma('keywords') meta_desc = request.getPragma('description') if meta_keywords: user_head.append('<meta name="keywords" content="%s">\n' % wikiutil.escape(meta_keywords, 1)) if meta_desc: user_head.append('<meta name="description" content="%s">\n' % wikiutil.escape(meta_desc, 1)) # add meta statement if user has doubleclick on edit turned on or it is default if (pagename and keywords.get('allow_doubleclick', 0) and not keywords.get('print_mode', 0) and request.user.edit_on_doubleclick): if request.user.may.write(pagename): # separating this gains speed user_head.append('<meta name="edit_on_doubleclick" content="%s">\n' % (request.script_root or '/')) # search engine precautions / optimization: # if it is an action or edit/search, send query headers (noindex,nofollow): if request.query_string: user_head.append(request.cfg.html_head_queries) elif request.method == 'POST': user_head.append(request.cfg.html_head_posts) # we don't want to have BadContent stuff indexed: elif pagename in ['BadContent', 'LocalBadContent', ]: user_head.append(request.cfg.html_head_posts) # if it is a special page, index it and follow the links - we do it # for the original, English pages as well as for (the possibly # modified) frontpage: elif pagename in [page_front_page, request.cfg.page_front_page, page_title_index, 'TitleIndex', page_find_page, 'FindPage', page_site_navigation, 'SiteNavigation', 'RecentChanges', ]: user_head.append(request.cfg.html_head_index) # if it is a normal page, index it, but do not follow the links, because # there are a lot of illegal links (like actions) or duplicates: else: user_head.append(request.cfg.html_head_normal) if 'pi_refresh' in keywords and keywords['pi_refresh']: user_head.append('<meta http-equiv="refresh" content="%d;URL=%s">' % keywords['pi_refresh']) # output buffering increases latency but increases throughput as well output = [] output.append("""\ <!DOCTYPE html> <html lang="%s"> <head> %s <meta name="viewport" content="width=device-width, initial-scale=1.0"> %s %s """ % ( self.cfg.language_default, ''.join(user_head), self.html_head({ 'page': page, 'title': text, 'sitename': request.cfg.html_pagetitle or request.cfg.sitename, 'print_mode': keywords.get('print_mode', False), 'media': keywords.get('media', 'screen'), }), keywords.get('html_head', ''), )) output.append("</head>\n") request.write(''.join(output)) output = [] # start the <body> bodyattr = [] if keywords.has_key('body_attr'): bodyattr.append(' ') bodyattr.append(keywords['body_attr']) # Set body to the user interface language and direction bodyattr.append(' %s' % self.ui_lang_attr()) body_onload = keywords.get('body_onload', '') if body_onload: bodyattr.append(''' onload="%s"''' % body_onload) output.append('\n<body%s>\n' % ''.join(bodyattr)) # Output ----------------------------------------------------------- # If in print mode, start page div and emit the title if keywords.get('print_mode', 0): d = { 'title_text': text, 'page': page, 'page_name': pagename or '', 'rev': rev, } request.themedict = d output.append(self.startPage()) output.append(self.interwiki(d)) output.append(self.title(d)) # In standard mode, emit theme.header else: exists = pagename and page.exists(includeDeleted=True) # prepare dict for theme code: d = { 'theme': self.name, 'script_name': scriptname, 'title_text': text, 'logo_string': request.cfg.logo_string, 'site_name': request.cfg.sitename, 'page': page, 'rev': rev, 'pagesize': pagename and page.size() or 0, # exists checked to avoid creation of empty edit-log for non-existing pages 'last_edit_info': exists and page.lastEditInfo() or '', 'page_name': pagename or '', 'page_find_page': page_find_page, 'page_front_page': page_front_page, 'home_page': home_page, 'page_help_contents': page_help_contents, 'page_help_formatting': page_help_formatting, 'page_parent_page': page_parent_page, 'page_title_index': page_title_index, 'page_word_index': page_word_index, 'user_name': request.user.name, 'user_valid': request.user.valid, 'msg': self._status, 'trail': keywords.get('trail', None), # Discontinued keys, keep for a while for 3rd party theme developers 'titlesearch': 'use self.searchform(d)', 'textsearch': 'use self.searchform(d)', 'navibar': ['use self.navibar(d)'], 'available_actions': ['use self.request.availableActions(page)'], } # add quoted versions of pagenames newdict = {} for key in d: if key.startswith('page_'): if not d[key] is None: newdict['q_'+key] = wikiutil.quoteWikinameURL(d[key]) else: newdict['q_'+key] = None d.update(newdict) request.themedict = d # now call the theming code to do the rendering if keywords.get('editor_mode', 0): output.append(self.editorheader(d)) else: output.append(self.header(d)) # emit it request.write(''.join(output)) output = [] self._send_title_called = True
def send_title(self, text, **keywords): """ An almost verbatim copy of MoinMoin.theme.__init__.ThemeBase.send_title, that replaces hard coded HTML string template with Jinja2. """ req = self.request _ = req.getText rev = req.rev if keywords.has_key('page'): page = keywords['page'] pagename = page.page_name else: pagename = keywords.get('pagename', '') page = Page(req, pagename) if keywords.get('msg', ''): raise DeprecationWarning("Using send_page(msg=) is deprecated! " "Use theme.add_msg() instead!") scriptname = req.script_root # get name of system pages page_front_page = wikiutil.getFrontPage(req).page_name page_help_contents = getLocalizedPage(req, 'HelpContents').page_name page_title_index = getLocalizedPage(req, 'TitleIndex').page_name page_site_navigation = getLocalizedPage(req, 'SiteNavigation').page_name page_word_index = getLocalizedPage(req, 'WordIndex').page_name page_help_formatting = getLocalizedPage(req, 'HelpOnFormatting').page_name page_find_page = getLocalizedPage(req, 'FindPage').page_name home_page = wikiutil.getInterwikiHomePage(req) page_parent_page = getattr(page.getParentPage(), 'page_name', None) # set content_type, including charset, so web server doesn't touch it: req.content_type = "text/html; charset=%s" % config.charset meta_keywords = req.getPragma('keywords') or "" meta_description = req.getPragma('description') or "" rss_link = self.rsslink({'page': page}) universal_edit_button = self.universal_edit_button({'page': page}) stylesheets = self.html_stylesheets({ 'print_media': keywords.get('print_mode', False), 'media': keywords.get('media', 'screen') }) gui_edit_link = self.guiEditorScript({'page': page}) context = { 'title': Markup(wikiutil.escape(text)), 'sitename': wikiutil.escape(req.cfg.html_pagetitle or req.cfg.sitename), 'charset': page.output_charset, 'meta_keywords': wikiutil.escape(meta_keywords, 1), 'meta_description': wikiutil.escape(meta_description, 1), 'robots': None, # might be "index", "noindex", or None 'refresh_seconds': None, 'refresh_url': None, 'static_base': "%s/%s/" % (self.cfg.url_prefix_static, self.name), 'stylesheets': stylesheets, 'rss_link_title': rss_link[0], 'rss_link_href': rss_link[1], 'universal_edit_button_title': universal_edit_button[0], 'universal_edit_button_href': universal_edit_button[1], 'common_js': '%s/common/js/%s.js' % (req.cfg.url_prefix_static, 'common'), 'search_hint': req.getText('Search'), 'gui_editor_link_href': gui_edit_link[0], 'gui_editor_link_text': gui_edit_link[1], 'extra_html_head': Markup(keywords.get('html_head', '')), 'page_start_href': req.href(page_front_page), 'page_alternate_title': None, 'page_alternate_href': '', 'print_alternate_title': None, 'print_alternate_href': '', 'page_up_href': None, } # search engine precautions / optimization: # if it is an action or edit/search, send query headers (noindex,nofollow): if req.query_string or req.method == 'POST': context['robots'] = "noindex" # we don't want to have BadContent stuff indexed: elif pagename in [ 'BadContent', 'LocalBadContent', ]: context['robots'] = "noindex" # if it is a special page, index it and follow the links - we do it # for the original, English pages as well as for (the possibly # modified) frontpage: elif pagename in [ page_front_page, req.cfg.page_front_page, page_title_index, 'TitleIndex', page_find_page, 'FindPage', page_site_navigation, 'SiteNavigation', 'RecentChanges', ]: context['robots'] = "index" if 'pi_refresh' in keywords and keywords['pi_refresh']: context.update({ 'refresh_seconds': keywords['pi_refresh'][0], 'refresh_url': keywords['pi_refresh'][1] }) # Links if pagename: context.update({ 'page_alternate_title': _('Wiki Markup'), 'page_alternate_href': page.url(req, querystr=dict(action='raw')) }) context.update({ 'print_alternate_title': _('Print View'), 'print_alternate_href': page.url(req, querystr=dict(action='print')) }) if page_parent_page: context['page_up'] = req.href(page_parent_page) output = StringIO() write_f_onhold = req.write req.write = lambda s: output.write(s.encode('utf-8')) if pagename and req.user.may.read(pagename): from MoinMoin.action import AttachFile AttachFile.send_link_rel(req, pagename) context['attached_links'] = Markup(output.getvalue()) req.write = write_f_onhold context['extra_links'] = [ { 'rel': "Search", 'href': "%s" % req.href(page_find_page) }, { 'rel': "Index", 'href': "%s" % req.href(page_title_index) }, { 'rel': "Glossary", 'href': "%s" % req.href(page_word_index) }, { 'rel': "Help", 'href': "%s" % req.href(page_help_formatting) }, ] template = self.j2env.get_template('bits/head.html') output = template.render(context) req.write(output) output = [] # start the <body> bodyattr = [] if keywords.has_key('body_attr'): bodyattr.append(' ') bodyattr.append(keywords['body_attr']) # Set body to the user interface language and direction bodyattr.append(' %s' % self.ui_lang_attr()) body_onload = keywords.get('body_onload', '') if body_onload: bodyattr.append(''' onload="%s"''' % body_onload) output.append('\n<body%s>\n' % ''.join(bodyattr)) # Output ----------------------------------------------------------- # If in print mode, start page div and emit the title if keywords.get('print_mode', 0): d = { 'title_text': text, 'page': page, 'page_name': pagename or '', 'rev': rev, } req.themedict = d output.append(self.startPage()) output.append(self.interwiki(d)) output.append(self.title(d)) # In standard mode, emit theme.header else: exists = pagename and page.exists(includeDeleted=False) # prepare dict for theme code: d = { 'theme': self.name, 'script_name': scriptname, 'title_text': text, 'logo_string': req.cfg.logo_string, 'site_name': req.cfg.sitename, 'page': page, 'rev': rev, 'pagesize': pagename and page.size() or 0, # exists checked to avoid creation of empty edit-log for non-existing pages 'last_edit_info': exists and page.lastEditInfo() or '', 'page_name': pagename or '', 'page_find_page': page_find_page, 'page_front_page': page_front_page, 'home_page': home_page, 'page_help_contents': page_help_contents, 'page_help_formatting': page_help_formatting, 'page_parent_page': page_parent_page, 'page_title_index': page_title_index, 'page_word_index': page_word_index, 'user_name': req.user.name, 'user_valid': req.user.valid, 'msg': self._status, 'trail': keywords.get('trail', None), # Discontinued keys, keep for a while for 3rd party theme developers 'titlesearch': 'use self.searchform(d)', 'textsearch': 'use self.searchform(d)', 'navibar': ['use self.navibar(d)'], 'available_actions': ['use self.request.availableActions(page)'], } # add quoted versions of pagenames newdict = {} for key in d: if key.startswith('page_'): if not d[key] is None: newdict['q_' + key] = wikiutil.quoteWikinameURL(d[key]) else: newdict['q_' + key] = None d.update(newdict) req.themedict = d # now call the theming code to do the rendering if keywords.get('editor_mode', 0): output.append(self.editorheader(d)) else: output.append(self.header(d)) # emit it req.write(''.join(output)) output = [] self._send_title_called = True