diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-10-13 23:46:55 (GMT) |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-10-13 23:46:55 (GMT) |
commit | ecd1edf23b263e5a88107179489b433742fb17c9 (patch) | |
tree | 6dedda8b5a155ec95be8db72e53b72e0ba48a9e8 | |
parent | cc385d0de440e66615d3488850d11f0eee44a9b4 (diff) | |
download | site-ecd1edf23b263e5a88107179489b433742fb17c9.tar.gz |
Add an actual News page
Initial support for News pages had been committed already, this commit
completes that support and adds an actual News page. News pages (with
up to ten articles) are auto-created from any pages that have the "date"
attribute set.
-rw-r--r-- | etc/nginx/site.conf | 3 | ||||
-rw-r--r-- | web/input/development.md | 2 | ||||
-rw-r--r-- | web/input/doc/index.md | 2 | ||||
-rw-r--r-- | web/input/download.md | 2 | ||||
-rw-r--r-- | web/input/index.md | 2 | ||||
-rw-r--r-- | web/input/news/release-1-5.md (renamed from web/input/doc/release-notes/1-5.md) | 10 | ||||
-rw-r--r-- | web/input/resources/plugins.css | 6 | ||||
-rw-r--r-- | web/input/support.md | 2 | ||||
-rw-r--r-- | web/macros.py | 107 |
9 files changed, 107 insertions, 29 deletions
diff --git a/etc/nginx/site.conf b/etc/nginx/site.conf index 90ceaea..eb8c5e8 100644 --- a/etc/nginx/site.conf +++ b/etc/nginx/site.conf | |||
@@ -68,6 +68,9 @@ server { | |||
68 | location ^~ /taxonomy/term/2 { | 68 | location ^~ /taxonomy/term/2 { |
69 | return 301 /doc/presentation.html; | 69 | return 301 /doc/presentation.html; |
70 | } | 70 | } |
71 | location ~ ^/doc/release-notes/(.*)$ { | ||
72 | return 301 /news/release-$1; | ||
73 | } | ||
71 | location ~ ^/(?:man.*|guidelines|extra-opts)$ { | 74 | location ~ ^/(?:man.*|guidelines|extra-opts)$ { |
72 | return 301 /doc$request_uri.html; | 75 | return 301 /doc$request_uri.html; |
73 | } | 76 | } |
diff --git a/web/input/development.md b/web/input/development.md index ddff634..9a1a72f 100644 --- a/web/input/development.md +++ b/web/input/development.md | |||
@@ -1,6 +1,6 @@ | |||
1 | title: Development | 1 | title: Development |
2 | parent: Home | 2 | parent: Home |
3 | menu-position: 5 | 3 | menu: 6 |
4 | --- | 4 | --- |
5 | 5 | ||
6 | # Development | 6 | # Development |
diff --git a/web/input/doc/index.md b/web/input/doc/index.md index 7b2d098..8f22011 100644 --- a/web/input/doc/index.md +++ b/web/input/doc/index.md | |||
@@ -1,6 +1,6 @@ | |||
1 | title: Documentation | 1 | title: Documentation |
2 | parent: Home | 2 | parent: Home |
3 | menu-position: 3 | 3 | menu: 4 |
4 | --- | 4 | --- |
5 | 5 | ||
6 | # Documentation | 6 | # Documentation |
diff --git a/web/input/download.md b/web/input/download.md index 4d46cf5..9c3d65b 100644 --- a/web/input/download.md +++ b/web/input/download.md | |||
@@ -1,6 +1,6 @@ | |||
1 | title: Download | 1 | title: Download |
2 | parent: Home | 2 | parent: Home |
3 | menu-position: 2 | 3 | menu: 3 |
4 | --- | 4 | --- |
5 | 5 | ||
6 | # Download | 6 | # Download |
diff --git a/web/input/index.md b/web/input/index.md index 8ab186c..b860177 100644 --- a/web/input/index.md +++ b/web/input/index.md | |||
@@ -1,5 +1,5 @@ | |||
1 | title: Home | 1 | title: Home |
2 | menu-position: 1 | 2 | menu: 1 |
3 | --- | 3 | --- |
4 | 4 | ||
5 | # The Nagios Plugins Project | 5 | # The Nagios Plugins Project |
diff --git a/web/input/doc/release-notes/1-5.md b/web/input/news/release-1-5.md index f68222f..58d0822 100644 --- a/web/input/doc/release-notes/1-5.md +++ b/web/input/news/release-1-5.md | |||
@@ -1,18 +1,14 @@ | |||
1 | title: Version 1.5 | 1 | title: Version 1.5 Released |
2 | parent: Download | ||
3 | post: Version 1.5 Released | ||
4 | date: 2013-10-02 | 2 | date: 2013-10-02 |
5 | --- | 3 | --- |
6 | 4 | ||
7 | # Version 1.5 Released | ||
8 | |||
9 | *Wednesday, October 2, 2013* | ||
10 | |||
11 | The Nagios Plugins Development Team is proud to announce version 1.5 of the | 5 | The Nagios Plugins Development Team is proud to announce version 1.5 of the |
12 | Nagios Plugins! This release comes with the new `check_dbi` plugin written by | 6 | Nagios Plugins! This release comes with the new `check_dbi` plugin written by |
13 | Sebastian Harl, and includes lots of enhancements and fixes provided by more | 7 | Sebastian Harl, and includes lots of enhancements and fixes provided by more |
14 | than forty contributors. Many thanks to all of you! | 8 | than forty contributors. Many thanks to all of you! |
15 | 9 | ||
10 | <end-of-abstract> | ||
11 | |||
16 | Special kudos go to Sven Nierlein for fixing numerous bugs, reviewing many | 12 | Special kudos go to Sven Nierlein for fixing numerous bugs, reviewing many |
17 | pull requests, bringing our test suite back into shape, and setting up | 13 | pull requests, bringing our test suite back into shape, and setting up |
18 | automated tests on a variety of platforms. This helped us spotting lots of | 14 | automated tests on a variety of platforms. This helped us spotting lots of |
diff --git a/web/input/resources/plugins.css b/web/input/resources/plugins.css index 552284f..7b44e7a 100644 --- a/web/input/resources/plugins.css +++ b/web/input/resources/plugins.css | |||
@@ -132,3 +132,9 @@ div#breadcrumb a:hover, | |||
132 | div#footer a:hover { | 132 | div#footer a:hover { |
133 | border-bottom: 1px solid #696969; | 133 | border-bottom: 1px solid #696969; |
134 | } | 134 | } |
135 | |||
136 | p#news-footer { | ||
137 | color: #696969; | ||
138 | text-align: center; | ||
139 | font-size: small; | ||
140 | } | ||
diff --git a/web/input/support.md b/web/input/support.md index c6d8b3d..538f320 100644 --- a/web/input/support.md +++ b/web/input/support.md | |||
@@ -1,6 +1,6 @@ | |||
1 | title: Support | 1 | title: Support |
2 | parent: Home | 2 | parent: Home |
3 | menu-position: 4 | 3 | menu: 5 |
4 | --- | 4 | --- |
5 | 5 | ||
6 | # Support | 6 | # Support |
diff --git a/web/macros.py b/web/macros.py index f3b6ec6..5918195 100644 --- a/web/macros.py +++ b/web/macros.py | |||
@@ -8,9 +8,13 @@ page = { | |||
8 | "description": "Standard monitoring plugins for Nagios and compatible monitoring solutions.", | 8 | "description": "Standard monitoring plugins for Nagios and compatible monitoring solutions.", |
9 | "keywords": "Nagios, Icinga, Shinken, Monitoring, Official, Plugins, Open, Source, Free, Software" | 9 | "keywords": "Nagios, Icinga, Shinken, Monitoring, Official, Plugins, Open, Source, Free, Software" |
10 | } | 10 | } |
11 | release_notes = 'doc/release-notes/' + plugins_release.replace('.', '-') + '.html' | 11 | release_notes = 'news/release-%s.html' % plugins_release.replace('.', '-') |
12 | site_url = 'https://www.nagios-plugins.org/' | 12 | site_url = 'https://www.nagios-plugins.org/' |
13 | 13 | ||
14 | # | ||
15 | # RSS Feed | ||
16 | # | ||
17 | |||
14 | _RSS = """<?xml version="1.0" encoding="UTF-8"?> | 18 | _RSS = """<?xml version="1.0" encoding="UTF-8"?> |
15 | <rss version="2.0"> | 19 | <rss version="2.0"> |
16 | <channel> | 20 | <channel> |
@@ -40,15 +44,14 @@ _RSS_ITEM = """ | |||
40 | 44 | ||
41 | def hook_postconvert_rss(): | 45 | def hook_postconvert_rss(): |
42 | items = [] | 46 | items = [] |
43 | posts = [p for p in pages if 'post' in p] | 47 | posts = [p for p in pages if 'date' in p] |
44 | posts.sort(key=lambda p: p.date, reverse=True) | 48 | posts.sort(key=lambda p: p.date, reverse=True) |
45 | for p in posts: | 49 | for p in posts: |
46 | title = p.post | ||
47 | link = '%s/%s' % (site_url.rstrip('/'), p.url) | 50 | link = '%s/%s' % (site_url.rstrip('/'), p.url) |
48 | desc = hx(p.html) | 51 | desc = hx(p.html) |
49 | date = time.mktime(time.strptime('%s 12' % p.date, '%Y-%m-%d %H')) | 52 | date = time.mktime(time.strptime('%s 12' % p.date, '%Y-%m-%d %H')) |
50 | date = email.utils.formatdate(date) | 53 | date = email.utils.formatdate(date) |
51 | items.append(_RSS_ITEM % (title, link, desc, link, date)) | 54 | items.append(_RSS_ITEM % (p.title, link, desc, date, link)) |
52 | items = ''.join(items) | 55 | items = ''.join(items) |
53 | title = 'Nagios Plugins' | 56 | title = 'Nagios Plugins' |
54 | link = '%s/news/index.html' % site_url.rstrip('/') | 57 | link = '%s/news/index.html' % site_url.rstrip('/') |
@@ -59,23 +62,84 @@ def hook_postconvert_rss(): | |||
59 | fp.write(rss) | 62 | fp.write(rss) |
60 | fp.close() | 63 | fp.close() |
61 | 64 | ||
62 | def list_posts(max_posts=-1): | 65 | # |
63 | posts = [p for p in pages if 'post' in p] | 66 | # News |
67 | # | ||
68 | |||
69 | def hook_preconvert_news(): | ||
70 | posts_per_page = 10 | ||
71 | posts = [p for p in pages if 'date' in p] | ||
64 | posts.sort(key=lambda p: p.date, reverse=True) | 72 | posts.sort(key=lambda p: p.date, reverse=True) |
65 | if max_posts == -1: | 73 | n_news_pages = len(posts) / posts_per_page |
66 | max_posts = len(posts) | 74 | if len(posts) % posts_per_page > 0: |
67 | for p in posts[:max_posts]: | 75 | n_news_pages += 1 |
68 | date = time.strftime('%B %d, %Y', time.strptime(p['date'], '%Y-%m-%d')) | 76 | for i, chunk in enumerate(next_news_chunk(posts, posts_per_page)): |
69 | print '* **[%s](%s)** (%s)' % (p.post, p.url, date) | 77 | content = make_news_page(chunk, i) + make_news_footer(n_news_pages, i) |
78 | if i == 0: | ||
79 | p = Page('news/index.md', | ||
80 | virtual=content, | ||
81 | menu=2, | ||
82 | title='News', | ||
83 | parent='Home') | ||
84 | else: | ||
85 | p = Page('news/%d.md' % (i + 1), | ||
86 | virtual=content, | ||
87 | title='News Page %d' % (i + 1), | ||
88 | parent='News') | ||
89 | pages.append(p) | ||
70 | 90 | ||
71 | def list_kids(): | 91 | def make_news_page(posts, current_index): |
72 | kids = [(p.url, p.title) for p in pages if p.get('parent') == page.title] | 92 | marker = '<end-of-abstract>' |
73 | for kid in sorted(kids): | 93 | source = list() |
74 | print('* [%s](%s)' % (kid[1], kid[0])) | 94 | if current_index == 0: |
95 | title = 'News' | ||
96 | else: | ||
97 | title = 'News Page %d' % (current_index + 1) | ||
98 | abstract = ['# ' + title] | ||
99 | for p in posts: | ||
100 | timestamp = time.strptime(p.date, '%Y-%m-%d') | ||
101 | date = time.strftime('%A, %B %-e, %Y', timestamp) | ||
102 | abstract.append('## %s' % p.title) | ||
103 | abstract.append('*%s*' % date) | ||
104 | abstract.append('%s' % p.source.split(marker, 1)[0]) | ||
105 | abstract.append('[<a href="%s">Read more</a>]' % p.url) | ||
106 | source.append('# %s' % p.title) | ||
107 | source.append('*%s*' % date) | ||
108 | source.append(p.source.replace(marker, '', 1)) | ||
109 | p.source = '\n'.join(source) | ||
110 | p['parent'] = title | ||
111 | return '\n'.join(abstract) + '\n\n' | ||
112 | |||
113 | def make_news_footer(n_news_pages, current_index): | ||
114 | footer = list() | ||
115 | if current_index != 0: | ||
116 | previous = 'index' if current_index == 1 else str(current_index) | ||
117 | footer.append('[First](news/index.html)') | ||
118 | footer.append('[Previous](news/%s.html)' % previous) | ||
119 | if n_news_pages <= 20: | ||
120 | for i in range(n_news_pages): | ||
121 | if i == current_index: | ||
122 | footer.append('%d' % (i + 1)) | ||
123 | else: | ||
124 | footer.append('[%d](news/%d.html)' % (i + 1, i + 1)) | ||
125 | if current_index != n_news_pages - 1: | ||
126 | footer.append('[Next](news/%d.html)' % (current_index + 2)) | ||
127 | footer.append('[Last](news/%d.html)' % n_news_pages) | ||
128 | return ' '.join(footer) + '\n{: #news-footer }\n' | ||
129 | |||
130 | def next_news_chunk(posts, posts_per_page): | ||
131 | index = 0 | ||
132 | while len(posts[index:]) > 0: | ||
133 | yield posts[index:index + posts_per_page] | ||
134 | index += posts_per_page | ||
135 | |||
136 | # | ||
137 | # Menu and Breadcrumb Navigation | ||
138 | # | ||
75 | 139 | ||
76 | def menu(): | 140 | def menu(): |
77 | menu_pages = [p for p in pages if 'menu-position' in p] | 141 | menu_pages = [p for p in pages if 'menu' in p] |
78 | menu_pages.sort(key=lambda p: int(p['menu-position'])) | 142 | menu_pages.sort(key=lambda p: int(p['menu'])) |
79 | for p in menu_pages: | 143 | for p in menu_pages: |
80 | if p.title == page.title: | 144 | if p.title == page.title: |
81 | print('<span id="current">%s</span>' % hx(p.title)) | 145 | print('<span id="current">%s</span>' % hx(p.title)) |
@@ -96,6 +160,15 @@ def breadcrumb(): | |||
96 | crumbs = ' ' + stable | 160 | crumbs = ' ' + stable |
97 | return crumbs | 161 | return crumbs |
98 | 162 | ||
163 | # | ||
164 | # Miscellaneous | ||
165 | # | ||
166 | |||
167 | def list_kids(): | ||
168 | kids = [(p.url, p.title) for p in pages if p.get('parent') == page.title] | ||
169 | for kid in sorted(kids): | ||
170 | print('* [%s](%s)' % (kid[1], kid[0])) | ||
171 | |||
99 | def copyright_years(since=None): | 172 | def copyright_years(since=None): |
100 | this_year = time.gmtime().tm_year | 173 | this_year = time.gmtime().tm_year |
101 | if since is not None and int(since) != this_year: | 174 | if since is not None and int(since) != this_year: |