Add events timeline and clock timer

This changes add a new 'events' extensions to manage
events timeline. Events are described in the events.yaml file.

The 'events' extensions will generate an rst document with:
* Timer clock for upcoming event
* Tabulated events list

Change-Id: Ib5c9d96663bd2197beea7aab226a3d46bc82067c
This commit is contained in:
Tristan Cacqueray 2016-02-09 16:43:25 -05:00 committed by Tony Breeds
parent e059539177
commit e7f05ce2c4
7 changed files with 105 additions and 2 deletions

1
.gitignore vendored
View File

@ -10,4 +10,5 @@ AUTHORS
ChangeLog
candidates/ptl.rst
candidates/tc.rst
candidates/events.rst
.projects.yaml

View File

@ -0,0 +1,21 @@
.. raw:: html
<span id="eventname"></span>
<span id="eventtimer"></span>
<script>
var events_timeline = [
{% for event in events %}
{ date: "{{ event['date'] }}", name: "{{ event['name'] }}" },
{% endfor %}
];
</script>
<br /><br />
+--------------------------------+---------------------------------+
| Events | Date |
+================================+=================================+
{% for event in events %}
| {{ "%29s" % event['name'] }} | {{ "%29s" % event['date_str'] }} |
+--------------------------------+---------------------------------+
{% endfor %}

View File

@ -0,0 +1,45 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Add election timer data
"""
import os
import yaml
from jinja2 import FileSystemLoader
from jinja2.environment import Environment
from docutils import nodes
PATH_PREFIX = 'candidates'
def build_timer(app):
app.add_javascript("event_timer.js")
data = yaml.load(open("events.yaml").read())
# add better text for tabulatted planning
for ev in data:
d, h = ev['date'].split('T')
ev['date_str'] = "%s, %s UTC" % (d, h)
output_file = os.path.join(PATH_PREFIX, "events.rst")
with open(output_file, "w") as out:
template_dir = os.path.join(".", "doc", "source", "_exts")
loader = FileSystemLoader(template_dir)
env = Environment(trim_blocks=True, loader=loader)
template = env.get_template("events.jinja")
out.write(template.render({'events':data}))
def setup(app):
if not os.path.isfile("events.yaml"):
app.info('No events.yaml found, not loading events_timer extension')
return
app.info('loading events_timer extension')
app.connect('builder-inited', build_timer)

View File

@ -0,0 +1,25 @@
/* Licensed under the Apache License, Version 2.0
*/
var event_date;
var now = parseInt((new Date).getTime() / 1000)
function startTime() {
var delta = parseInt(event_date - (new Date).getTime() / 1000)
var hours = parseInt(delta / 3600)
var minutes = parseInt( delta / 60 ) % 60
var seconds = delta % 60
document.getElementById('eventtimer').innerHTML = hours+'h'+minutes+'m'+seconds+'s'
var t = setTimeout(startTime, 500)
}
function setup_timeline() {
for (i = 0; i < events_timeline.length; i++) {
var current_event = events_timeline[i];
event_date = Date.parse(current_event.date) / 1000
if (event_date > now) {
document.getElementById('eventname').innerHTML = 'Next event is '+current_event.name+' in'
event_date = Date.parse(current_event.date) / 1000
startTime(current_event.date)
break
}
}
}
$(document).ready(setup_timeline)

View File

@ -30,6 +30,7 @@ extensions = [
'sphinx.ext.extlinks',
'oslosphinx',
'candidates',
'events',
]
todo_include_todos = True
@ -67,7 +68,8 @@ copyright = u'2015, OpenStack'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build', 'candidates/ptl.rst', 'candidates/tc.rst']
exclude_patterns = ['_build', 'candidates/ptl.rst', 'candidates/tc.rst',
'candidates/events.rst']
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None

View File

@ -2,7 +2,8 @@
OpenStack Election
====================
This page track OpenStack Elections candidates list.
.. include:: ./candidates/events.rst
Below is the official list of candidates for the current round.
.. include:: ./candidates/ptl.rst

8
events.yaml Normal file
View File

@ -0,0 +1,8 @@
- {'date': '2016-03-11T00:00', 'name': 'PTL nomination starts'}
- {'date': '2016-03-17T23:59', 'name': 'PTL nomination ends'}
- {'date': '2016-03-18T00:00', 'name': 'PTL elections begins'}
- {'date': '2016-03-24T23:59', 'name': 'PTL elections ends'}
- {'date': '2016-03-25T00:00', 'name': 'TC nomination starts'}
- {'date': '2016-03-31T23:59', 'name': 'TC nomination ends'}
- {'date': '2016-04-01T00:00', 'name': 'TC elections begins'}
- {'date': '2016-04-07T23:59', 'name': 'TC elections ends'}