1. 2006-04-27.登出

才发现 balanced2 的样式中"username" 的输出中没有"logout" 的链接!

1.1. 现象

MoinMoin 1.5.3 的登出从用户设置调整到了页首位置…………

# morden theme 
<ul id="username">
<li><a href="/moin/ZoomQuiet" id="userhome" title="ZoomQuiet @ Self">ZoomQuiet</a></li>
<li><a href="/moin/UserPreferences?action=userprefs" id="userprefs">Preferences</a></li>
<li><a href="/moin/UserPreferences?action=logout&amp;logout=logout" id="logout">登出</a></li>
</ul>

# morden woodpecker 
<ul id="username">
<li><a href="/moin/ZoomQuiet">ZoomQuiet</a></li>
<li><a href="/moin/%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE">用户设置</a></li>
<li><a href="/moin/%E5%B8%AE%E5%8A%A9%E7%9B%AE%E5%BD%95">Help</a></li>
</ul>

1.2. 解决

原来是超越函式没有写好:

   1 # balanced2's username(self, d)
   2 def username(self, d):
   3     """ Assemble the username / userprefs link
   4 
   5     @param d: parameter dictionary
   6     @rtype: unicode
   7     @return: username html
   8     @note:  lost logout link usage normal username
   9     """
  10     request = self.request
  11     _ = request.getText
  12     preferencesPage = wikiutil.getSysPage(request, 'UserPreferences')
  13     helpPage = wikiutil.getSysPage(request, 'HelpContents')
  14 
  15     userlinks = []
  16     # Add username/homepage link for registered users. We don't care
  17     # if it exists, the user can create it.
  18     if request.user.valid:
  19         homepage = Page(request, request.user.name)
  20         title = homepage.split_title(request)
  21         homelink = homepage.link_to(request, text=title)
  22         userlinks.append(homelink)
  23         # Set pref page to localized Preferences page
  24         title = preferencesPage.split_title(request)
  25         userlinks.append(preferencesPage.link_to(request, text=title))
  26         userlinks.append(helpPage.link_to(request, text=_("Help")))
  27     else:
  28         # Add prefpage links with title: Login
  29         userlinks.append(preferencesPage.link_to(request, text=_("Login")))
  30 
  31     userlinks = [u'<li>%s</li>\n' % link for link in userlinks]
  32     html = u'<ul id="username">\n%s</ul>' % ''.join(userlinks)
  33     return html

重命名为 balanced2_username; woodpecker 样式使用默许的 from MoinMoin.theme import ThemeBase 中的 username()输出

解决!

1.2.1. 新办法

   1 
   2 def username(self, d):
   3     """ Assemble the username / userprefs link
   4 
   5     @param d: parameter dictionary
   6     @rtype: unicode
   7     @return: username html
   8     @note:  ZoomQuiet fixed logout link export
   9     """
  10     request = self.request
  11     _ = request.getText
  12     preferencesPage = wikiutil.getSysPage(request, 'UserPreferences')
  13     helpPage = wikiutil.getSysPage(request, 'HelpContents')
  14 
  15     userlinks = []
  16     # Add username/homepage link for registered users. We don't care
  17     # if it exists, the user can create it.
  18     if request.user.valid:
  19         homepage = Page(request, request.user.name)
  20         title = homepage.split_title(request)
  21         homelink = homepage.link_to(request, text=title)
  22         userlinks.append(homelink)
  23         # Set pref page to localized Preferences page
  24         title = preferencesPage.split_title(request)
  25         userlinks.append(preferencesPage.link_to(request, text=title))
  26         #userlinks.append(helpPage.link_to(request, text=_("Help")))
  27     else:
  28         # Add prefpage links with title: Login
  29         userlinks.append(preferencesPage.link_to(request, text=_("Login")))
  30 
  31     ## Zoomq::060427 cp from MoinMoin.theme.__init__.py
  32     if request.cfg.show_login:
  33         if request.user.valid:
  34             userlinks.append(d['page'].link_to(request, text=_('Logout', formatted=False),
  35                                                querystr={'action': 'logout', 'logout': 'logout'}, id="logout"))
  36         else:
  37             userlinks.append(d['page'].link_to(request, text=_("Login", formatted=False),
  38                                                querystr={'action': 'login'}, id="login"))
  39 
  40     userlinks = [u'<li>%s</li>\n' % link for link in userlinks]
  41     html = u'<ul id="username">\n%s</ul>' % ''.join(userlinks)
  42     return html

从默许的 ThemeBase 对应函式抄过来 logout 部分,

因为Balanced2 的修正了对应用户字码的“用户设置”连接输出,只是没有正确的处理logout 部分

1.3. 感慨

其实问题的定位和解决非常容易,但是花费了时间在调整代码文件的空格和TAB!

如果使用 vim 来编程的话,一般是使用TAB -- 制表格来进行缩进的,

但是在跨平台不同编辑器环境中,TAB 的表现各不相同,所以Python 编程建议统一使用空格代替TAB,

所以要在Leo 中整理 明白文件体后,要一一将TAB 替换为 4个空格,但是:有GCC的程序员又强烈抗议,要将TAB转换为8个空格!

……呜乎哀哉!功过事非由后人讲评了…………