git.fiddlerwoaroof.com
Ed L authored on 16/01/2012 23:56:56
Showing 4 changed files
1 1
new file mode 100644
2 2
Binary files /dev/null and b/.template.mako.swp differ
3 3
new file mode 100644
... ...
@@ -0,0 +1,17 @@
1
+from flask import Flask, url_for
2
+from slides import *
3
+app = Flask(__name__)
4
+
5
+slideshow = 'slideshow'
6
+
7
+@app.route('/')
8
+def main():
9
+	with file(slideshow) as f:
10
+		sshow = read_slides(f)
11
+
12
+	sshow = [make_slide(slide) for slide in sshow]
13
+	return make_document(sshow).encode('utf-8')
14
+
15
+
16
+if __name__ == '__main__':
17
+	app.run()
0 18
new file mode 100644
... ...
@@ -0,0 +1,76 @@
1
+import yaml
2
+import markdown
3
+
4
+class RuleSet(object):
5
+	def __init__(self, selector, **styles):
6
+		self.selector = selector
7
+		self.styles = styles
8
+
9
+	def __str__(self):
10
+		print self.styles
11
+		styles = ';\n  '.join(': '.join(item) for item in self.styles.items())
12
+		return '''\n%s {\n%s\n}''' % (self.selector, styles)
13
+
14
+def read_slides(fil):
15
+	slides = fil.read().split('\n------\n')
16
+	result = []
17
+	for slide in slides:
18
+		slide = slide.split('\n---\n')
19
+
20
+		result.append(dict(
21
+			config=yaml.load(slide[0]),
22
+			text=markdown.markdown(slide[1])
23
+		))
24
+	return result
25
+
26
+import mako.template
27
+template = mako.template.Template(file('template.mako').read())
28
+
29
+def make_slide(slide):
30
+	config = slide['config']
31
+	print config
32
+	text = slide['text']
33
+
34
+	attrs = config.get('attrs', {})
35
+	attrs_out = []
36
+	for attr, value in attrs.items():
37
+		attrs_out.append('data-%s="%s"' % (attr, value))
38
+	return template.get_def('slide').render(id='%s' % config['id'], attr=' '.join(attrs_out), text=text), RuleSet('#%s' % config['id'], **config.get('style', {}))
39
+
40
+def make_document(slides):
41
+	slides, styles = zip(*slides)
42
+	styles = '\n'.join(
43
+		str(ruleset) for ruleset in styles
44
+	)
45
+	return template.get_def('document').render(style='%s' % styles, slides=slides)
46
+
47
+if __name__ == '__main__':
48
+	import argparse
49
+	import twisted.web.resource
50
+
51
+	class SlideshowResource(twisted.web.resource.Resource):
52
+		parser = argparse.ArgumentParser()
53
+		parser.add_argument('slideshow', nargs=1)
54
+		parser.add_argument('static_files', nargs=1)
55
+		options = parser.parse_args()
56
+		slideshow = options.slideshow[0]
57
+		static_files = options.static_files[0]
58
+
59
+		def render_GET(self, request):
60
+			with file(self.slideshow) as f:
61
+				slideshow = read_slides(f)
62
+
63
+			slideshow = [make_slide(slide) for slide in slideshow]
64
+
65
+			return make_document(slideshow).encode('utf-8')
66
+
67
+	from twisted.internet import reactor
68
+	from twisted.web import static, server
69
+	root = static.File('static_files')
70
+	root.putChild('', SlideshowResource())
71
+	import os
72
+	port = int(os.getenv('PORT', 8080))
73
+	reactor.listenTCP(port, server.Site(root))
74
+	reactor.run()
75
+
76
+
0 77
new file mode 100644
... ...
@@ -0,0 +1,55 @@
1
+<!doctype html>
2
+
3
+
4
+<%! import markdown %>
5
+<%def name="slide(id, attr, text)">
6
+   <div id="${id}" class="step" ${attr}>
7
+      ${ text }
8
+   </div>
9
+</%def>
10
+
11
+<%def name="impress()">
12
+   <div id="impress">
13
+      <div class="no-support-message" style="font-size: x-large;font-weight: bolder">
14
+          Your browser doesn't support impress.js.  Try Chrome or Safari.
15
+      </div>
16
+
17
+      ${caller.body()}
18
+
19
+   </div>
20
+   <!--<script type="text/javascript" src="https://raw.github.com/bartaz/impress.js/master/js/impress.js"></script>-->
21
+   <script type="text/javascript" src="impress.js"></script>
22
+</%def>
23
+
24
+
25
+
26
+
27
+<%def name="document(style, slides)">
28
+<html>
29
+    <head>
30
+        <title>Impress Tutorial</title>
31
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
32
+
33
+      <style type='text/css'>
34
+         @import url('slideshow.css');
35
+
36
+         .no-support-message { display:none; }
37
+         .impress-not-supported .no-support-message { display:block; }
38
+
39
+         ${style}
40
+
41
+      </style>
42
+    </head>
43
+    <body>
44
+
45
+   <%self:impress>
46
+      %for slide in slides:
47
+         ${slide}
48
+      %endfor
49
+   </%self:impress>
50
+
51
+
52
+    </body>
53
+</html>
54
+</%def>
55
+