mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-03-13 19:15:15 +01:00
nmbug-status: Slug the title when using it as an id
Also allow manual id overrides from the JSON config. Sluggin avoids errors like: Bad value '#Possible bugs' for attribute href on element a: Whitespace in fragment component. Use %20 in place of spaces. from http://validator.w3.org. I tried just quoting the titles (e.g. 'Possible%20bugs'), but that didn't work (at least with Firefox 24.2.0). Slugging avoids any ambiguity over when the quotes are expanded in the client. The specs are unclear about quoting, saying only [1]: Value: Any string, with the following restrictions: must be at least one character long must not contain any space characters [1]: http://dev.w3.org/html5/markup/global-attributes.html#common.attrs.id
This commit is contained in:
parent
e485b5bd1d
commit
711d04c821
1 changed files with 10 additions and 2 deletions
|
@ -21,6 +21,7 @@ except ImportError: # Python 2
|
||||||
import json
|
import json
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
@ -168,16 +169,20 @@ class Page (object):
|
||||||
|
|
||||||
|
|
||||||
class HtmlPage (Page):
|
class HtmlPage (Page):
|
||||||
|
_slug_regexp = re.compile('\W+')
|
||||||
|
|
||||||
def _write_header(self, views, stream):
|
def _write_header(self, views, stream):
|
||||||
super(HtmlPage, self)._write_header(views=views, stream=stream)
|
super(HtmlPage, self)._write_header(views=views, stream=stream)
|
||||||
stream.write('<ul>\n')
|
stream.write('<ul>\n')
|
||||||
for view in views:
|
for view in views:
|
||||||
|
if 'id' not in view:
|
||||||
|
view['id'] = self._slug(view['title'])
|
||||||
stream.write(
|
stream.write(
|
||||||
'<li><a href="#{title}">{title}</a></li>\n'.format(**view))
|
'<li><a href="#{id}">{title}</a></li>\n'.format(**view))
|
||||||
stream.write('</ul>\n')
|
stream.write('</ul>\n')
|
||||||
|
|
||||||
def _write_view_header(self, view, stream):
|
def _write_view_header(self, view, stream):
|
||||||
stream.write('<h3 id="{title}">{title}</h3>\n'.format(**view))
|
stream.write('<h3 id="{id}">{title}</h3>\n'.format(**view))
|
||||||
if 'comment' in view:
|
if 'comment' in view:
|
||||||
stream.write(view['comment'])
|
stream.write(view['comment'])
|
||||||
stream.write('\n')
|
stream.write('\n')
|
||||||
|
@ -224,6 +229,9 @@ class HtmlPage (Page):
|
||||||
).format(**d)
|
).format(**d)
|
||||||
return (running_data, display_data)
|
return (running_data, display_data)
|
||||||
|
|
||||||
|
def _slug(self, string):
|
||||||
|
return self._slug_regexp.sub('-', string)
|
||||||
|
|
||||||
|
|
||||||
_PAGES['text'] = Page()
|
_PAGES['text'] = Page()
|
||||||
_PAGES['html'] = HtmlPage(
|
_PAGES['html'] = HtmlPage(
|
||||||
|
|
Loading…
Add table
Reference in a new issue