li:last-child {
206 | border-radius: 0 0 5px 5px;
207 | -moz-border-radius: 0 0 5px 5px;
208 | -webkit-border-bottom-right-radius: 5px;
209 | -webkit-border-bottom-left-radius: 5px;
210 | }
211 |
212 | #qunit-tests .fail { color: #000000; background-color: #EE5757; }
213 | #qunit-tests .fail .test-name,
214 | #qunit-tests .fail .module-name { color: #000000; }
215 |
216 | #qunit-tests .fail .test-actual { color: #EE5757; }
217 | #qunit-tests .fail .test-expected { color: green; }
218 |
219 | #qunit-banner.qunit-fail { background-color: #EE5757; }
220 |
221 |
222 | /** Result */
223 |
224 | #qunit-testresult {
225 | padding: 0.5em 0.5em 0.5em 2.5em;
226 |
227 | color: #2b81af;
228 | background-color: #D2E0E6;
229 |
230 | border-bottom: 1px solid white;
231 | }
232 | #qunit-testresult .module-name {
233 | font-weight: bold;
234 | }
235 |
236 | /** Fixture */
237 |
238 | #qunit-fixture {
239 | position: absolute;
240 | top: -10000px;
241 | left: -10000px;
242 | width: 1000px;
243 | height: 1000px;
244 | }
--------------------------------------------------------------------------------
/reveal.js/test/test-markdown-element-attributes.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | Reveal.addEventListener( 'ready', function() {
4 |
5 | QUnit.module( 'Markdown' );
6 |
7 | test( 'Vertical separator', function() {
8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
9 | });
10 |
11 |
12 | test( 'Attributes on element header in vertical slides', function() {
13 | strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
14 | strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
15 | });
16 |
17 | test( 'Attributes on element paragraphs in vertical slides', function() {
18 | strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
19 | });
20 |
21 | test( 'Attributes on element list items in vertical slides', function() {
22 | strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
23 | });
24 |
25 | test( 'Attributes on element paragraphs in horizontal slides', function() {
26 | strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
27 | });
28 | test( 'Attributes on element list items in horizontal slides', function() {
29 | strictEqual( document.querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
30 | });
31 | test( 'Attributes on element list items in horizontal slides', function() {
32 | strictEqual( document.querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
33 | });
34 |
35 | test( 'Attributes on elements in vertical slides with default element attribute separator', function() {
36 | strictEqual( document.querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
37 | });
38 |
39 | test( 'Attributes on elements in single slides with default element attribute separator', function() {
40 | strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
41 | });
42 |
43 | } );
44 |
45 | Reveal.initialize();
46 |
47 |
--------------------------------------------------------------------------------
/reveal.js/test/test-markdown-slide-attributes.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | Reveal.addEventListener( 'ready', function() {
4 |
5 | QUnit.module( 'Markdown' );
6 |
7 | test( 'Vertical separator', function() {
8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
9 | });
10 |
11 | test( 'Id on slide', function() {
12 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
13 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
14 | });
15 |
16 | test( 'data-background attributes', function() {
17 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
18 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
19 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
20 | });
21 |
22 | test( 'data-transition attributes', function() {
23 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
24 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
25 | strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
26 | });
27 |
28 | test( 'data-background attributes with default separator', function() {
29 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
30 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
31 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
32 | });
33 |
34 | test( 'data-transition attributes with default separator', function() {
35 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
36 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
37 | strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
38 | });
39 |
40 | test( 'data-transition attributes with inline content', function() {
41 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
42 | });
43 |
44 | } );
45 |
46 | Reveal.initialize();
47 |
48 |
--------------------------------------------------------------------------------
/reveal.js/test/test-markdown.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | Reveal.addEventListener( 'ready', function() {
4 |
5 | QUnit.module( 'Markdown' );
6 |
7 | test( 'Vertical separator', function() {
8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
9 | });
10 |
11 |
12 | } );
13 |
14 | Reveal.initialize();
15 |
16 |
--------------------------------------------------------------------------------
/reveal.js/test/test-pdf.js:
--------------------------------------------------------------------------------
1 |
2 | Reveal.addEventListener( 'ready', function() {
3 |
4 | // Only one test for now, we're mainly ensuring that there
5 | // are no execution errors when running PDF mode
6 |
7 | test( 'Reveal.isReady', function() {
8 | strictEqual( Reveal.isReady(), true, 'returns true' );
9 | });
10 |
11 |
12 | } );
13 |
14 | Reveal.initialize({ pdf: true });
15 |
16 |
--------------------------------------------------------------------------------
/tools/filters/columnfilter.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from pandocfilters import toJSONFilter, RawBlock, Div, stringify
4 | import re
5 |
6 | def html(x):
7 | return RawBlock('html', x)
8 |
9 | def latex(s):
10 | return RawBlock('latex', s)
11 |
12 | def mk_columns(k, v, f, m):
13 | if k == "Para":
14 | value = stringify(v)
15 | if value.startswith('[') and value.endswith(']'):
16 | if value.count("[columns"):
17 | div_args = ""
18 | if value.count(","):
19 | div_args += value[value.find(",")+1:-1]
20 | return html(r'' % div_args)
21 | elif value == "[/columns]":
22 | return html(r'
')
23 | elif value == "[/column]":
24 | return html(r'')
25 | elif value.startswith("[column=") or value.startswith("[column,"):
26 | digit_re = re.compile("column=(\d+)")
27 | regex_result = digit_re.search(value)
28 |
29 | if regex_result and regex_result.groups():
30 | div_args = r'"
37 | return html(div_args)
38 |
39 | if __name__ == "__main__":
40 | toJSONFilter(mk_columns)
41 |
--------------------------------------------------------------------------------
/tools/filters/dump_links.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | from pandocfilters import toJSONFilter
3 | from pandocfilters import stringify
4 |
5 |
6 | link_list = {}
7 |
8 | def my_parse(k, v, fmt, meta):
9 | #global link_list
10 | if k == 'Link':
11 | link_list[stringify(v)] = v[-1][0]
12 |
13 |
14 | if __name__ == "__main__":
15 | toJSONFilter(my_parse,None)
16 |
17 | count = 0
18 | pages = 1
19 | sorted_keys = sorted(link_list.keys())
20 | widest_key = max([ len(item) for item in sorted_keys ])
21 | widest_url = max([ len(item) for item in link_list.values() ])
22 |
23 | print "## Links"
24 | on_one_page = 8
25 | n_pages = (len(sorted_keys)+on_one_page-1)/on_one_page
26 |
27 | print widest_key*"-",widest_url*"-"
28 | for key in sorted_keys:
29 | if count and count % on_one_page == 0:
30 | print widest_key*"-",widest_url*"-"
31 | print "\n\n## Links %i/%i\n" % (pages+1,n_pages)
32 | print widest_key*"-",widest_url*"-"
33 | pages += 1
34 | print ("%"+str(widest_key)+"s %"+str(widest_url)+"s") % (key,link_list[key])
35 | count += 1
36 | print widest_key*"-",widest_url*"-"
37 |
--------------------------------------------------------------------------------
/tools/filters/linkTable.hs:
--------------------------------------------------------------------------------
1 | import Text.Pandoc.JSON
2 | import Text.Pandoc.Walk
3 | import Data.Monoid
4 |
5 | -- http://stackoverflow.com/questions/26406816/pandoc-is-there-a-way-to-include-an-appendix-of-links-in-a-pdf-from-markdown/26415375#26415375
6 |
7 | main :: IO ()
8 | main = toJSONFilter appendLinkTable
9 |
10 | appendLinkTable :: Pandoc -> Pandoc
11 | appendLinkTable (Pandoc m bs) = Pandoc m (bs ++ linkTable bs)
12 |
13 | linkTable :: [Block] -> [Block]
14 | linkTable p = [Header 2 ("linkTable", [], []) [Str "Links"] , Para links]
15 | where
16 | links = concatMap makeRow $ query getLink p
17 | getLink (Link txt (url, _)) = [(url,txt)]
18 | getLink _ = []
19 | makeRow (url, txt) = txt ++ [Str ":", Space, Link [Str url] (url, ""), LineBreak]
20 |
--------------------------------------------------------------------------------
/video/Celegans_lateral_one_view_versus_deconvolved.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/psteinb/meetingcpp2015/63742482a51a9ab30cc0f590516e5ee3d0918d08/video/Celegans_lateral_one_view_versus_deconvolved.mp4
--------------------------------------------------------------------------------
/video/Celegans_lateral_one_view_versus_deconvolved.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/psteinb/meetingcpp2015/63742482a51a9ab30cc0f590516e5ee3d0918d08/video/Celegans_lateral_one_view_versus_deconvolved.png
--------------------------------------------------------------------------------
/video/Celegans_lateral_one_view_versus_deconvolved.webm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/psteinb/meetingcpp2015/63742482a51a9ab30cc0f590516e5ee3d0918d08/video/Celegans_lateral_one_view_versus_deconvolved.webm
--------------------------------------------------------------------------------