Loading Makefile +0 −4 Original line number Diff line number Diff line Loading @@ -95,10 +95,6 @@ lesson-check : lesson-check-all : @bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md -l -w ## lesson-figures : re-generate inclusion displaying all figures. lesson-figures : @bin/extract_figures.py -p ${PARSER} ${MARKDOWN_SRC} > _includes/all_figures.html ## unittest : run unit tests on checking tools. unittest : python bin/test_lesson_check.py Loading _extras/figures.md +35 −1 Original line number Diff line number Diff line Loading @@ -2,4 +2,38 @@ layout: page title: Figures --- {% include all_figures.html %} <script> window.onload = function() { var lesson_episodes = [ {% for episode in site.episodes %} "{{ episode.url}}"{% unless forloop.last %},{% endunless %} {% endfor %} ]; var xmlHttp = []; /* Required since we are going to query every episode. */ for (i=0; i < lesson_episodes.length; i++) { xmlHttp[i] = new XMLHttpRequest(); xmlHttp[i].episode = lesson_episodes[i]; /* To enable use this later. */ xmlHttp[i].onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var article_here = document.getElementById(this.episode); var parser = new DOMParser(); var htmlDoc = parser.parseFromString(this.responseText,"text/html"); var htmlDocArticle = htmlDoc.getElementsByTagName("article")[0]; article_here.appendChild(htmlDocArticle.getElementsByTagName("h1")[0]); for (let image of htmlDocArticle.getElementsByTagName("img")) { article_here.appendChild(image); } } } episode_url = "{{ page.root }}" + lesson_episodes[i]; xmlHttp[i].open("GET", episode_url); xmlHttp[i].send(null); } } </script> {% comment %} Create anchor for each one of the episodes. {% endcomment %} {% for episode in site.episodes %} <article id="{{ episode.url }}"></article> {% endfor %} _includes/all_figures.htmldeleted 100644 → 0 +0 −13 Original line number Diff line number Diff line <p><img alt="" src="{{ page.root }}/fig/using-github-import.png" /></p> <hr/> <p><img alt="Forking Repositories" src="{{ page.root }}/fig/forking.svg" /></p> <hr/> <p><img alt="Repository Links" src="{{ page.root }}/fig/repository-links.svg" /></p> <hr/> <p><img alt="Source and Destination Files" src="{{ page.root }}/fig/file-mapping.svg" /></p> <hr/> <p><img alt="Formatting Rules" src="{{ page.root }}/fig/episode-format-small.png" /></p> <hr/> <p><img alt="" src="{{ page.root }}/fig/episode-format.png" /></p> <hr/> <p><img alt="plot of chunk plot-example" src="{{ page.root }}/fig/rmd-plot-example-1.png" /></p> assets/css/lesson.scss +22 −0 Original line number Diff line number Diff line Loading @@ -153,3 +153,25 @@ span.fold-unfold { margin-left: 1em; opacity: 0.5; } //---------------------------------------- // keyboard key style, from StackExchange. //---------------------------------------- kbd { display: inline-block; margin: 0 .1em; padding: .1em .6em; font-family: Arial,"Helvetica Neue",Helvetica,sans-serif; font-size: 11px; line-height: 1.4; color: #242729; text-shadow: 0 1px 0 #FFF; background-color: #e1e3e5; border: 1px solid #adb3b9; border-radius: 3px; box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset; white-space: nowrap; font-style: normal; } bin/extract_figures.pydeleted 100755 → 0 +0 −98 Original line number Diff line number Diff line #!/usr/bin/env python from __future__ import print_function import sys import os import glob from optparse import OptionParser from util import Reporter, read_markdown, IMAGE_FILE_SUFFIX def main(): """Main driver.""" args = parse_args() images = [] for filename in args.filenames: images += get_images(args.parser, filename) save(sys.stdout, images) def parse_args(): """Parse command-line arguments.""" parser = OptionParser() parser.add_option('-p', '--parser', default=None, dest='parser', help='path to Markdown parser') args, extras = parser.parse_args() require(args.parser is not None, 'Path to Markdown parser not provided') require(extras, 'No filenames specified') args.filenames = extras return args def get_filenames(source_dir): """Get all filenames to be searched for images.""" return glob.glob(os.path.join(source_dir, '*.md')) def get_images(parser, filename): """Extract all images from file.""" content = read_markdown(parser, filename) result = [] find_image_nodes(content['doc'], result) find_image_links(content['doc'], result) return result def find_image_nodes(doc, result): """Find all nested nodes representing images.""" if (doc['type'] == 'img') or \ ((doc['type'] == 'html_element') and (doc['value'] == 'img')): alt = doc['attr'].get('alt', '') result.append({'alt': alt, 'src': doc['attr']['src']}) else: for child in doc.get('children', []): find_image_nodes(child, result) def find_image_links(doc, result): """Find all links to files in the 'fig' directory.""" if ((doc['type'] == 'a') and ('attr' in doc) and ('href' in doc['attr'])) \ or \ ((doc['type'] == 'html_element') and (doc['value'] == 'a') and ('href' in doc['attr'])): path = doc['attr']['href'] if os.path.splitext(path)[1].lower() in IMAGE_FILE_SUFFIX: result.append({'alt':'', 'src': doc['attr']['href']}) else: for child in doc.get('children', []): find_image_links(child, result) def save(stream, images): """Save results as Markdown.""" text = '\n<hr/>\n'.join(['<p><img alt="{0}" src="{1}" /></p>'.format(img['alt'], img['src']) for img in images]) print(text, file=stream) def require(condition, message): """Fail if condition not met.""" if not condition: print(message, file=sys.stderr) sys.exit(1) if __name__ == '__main__': main() Loading
Makefile +0 −4 Original line number Diff line number Diff line Loading @@ -95,10 +95,6 @@ lesson-check : lesson-check-all : @bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md -l -w ## lesson-figures : re-generate inclusion displaying all figures. lesson-figures : @bin/extract_figures.py -p ${PARSER} ${MARKDOWN_SRC} > _includes/all_figures.html ## unittest : run unit tests on checking tools. unittest : python bin/test_lesson_check.py Loading
_extras/figures.md +35 −1 Original line number Diff line number Diff line Loading @@ -2,4 +2,38 @@ layout: page title: Figures --- {% include all_figures.html %} <script> window.onload = function() { var lesson_episodes = [ {% for episode in site.episodes %} "{{ episode.url}}"{% unless forloop.last %},{% endunless %} {% endfor %} ]; var xmlHttp = []; /* Required since we are going to query every episode. */ for (i=0; i < lesson_episodes.length; i++) { xmlHttp[i] = new XMLHttpRequest(); xmlHttp[i].episode = lesson_episodes[i]; /* To enable use this later. */ xmlHttp[i].onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var article_here = document.getElementById(this.episode); var parser = new DOMParser(); var htmlDoc = parser.parseFromString(this.responseText,"text/html"); var htmlDocArticle = htmlDoc.getElementsByTagName("article")[0]; article_here.appendChild(htmlDocArticle.getElementsByTagName("h1")[0]); for (let image of htmlDocArticle.getElementsByTagName("img")) { article_here.appendChild(image); } } } episode_url = "{{ page.root }}" + lesson_episodes[i]; xmlHttp[i].open("GET", episode_url); xmlHttp[i].send(null); } } </script> {% comment %} Create anchor for each one of the episodes. {% endcomment %} {% for episode in site.episodes %} <article id="{{ episode.url }}"></article> {% endfor %}
_includes/all_figures.htmldeleted 100644 → 0 +0 −13 Original line number Diff line number Diff line <p><img alt="" src="{{ page.root }}/fig/using-github-import.png" /></p> <hr/> <p><img alt="Forking Repositories" src="{{ page.root }}/fig/forking.svg" /></p> <hr/> <p><img alt="Repository Links" src="{{ page.root }}/fig/repository-links.svg" /></p> <hr/> <p><img alt="Source and Destination Files" src="{{ page.root }}/fig/file-mapping.svg" /></p> <hr/> <p><img alt="Formatting Rules" src="{{ page.root }}/fig/episode-format-small.png" /></p> <hr/> <p><img alt="" src="{{ page.root }}/fig/episode-format.png" /></p> <hr/> <p><img alt="plot of chunk plot-example" src="{{ page.root }}/fig/rmd-plot-example-1.png" /></p>
assets/css/lesson.scss +22 −0 Original line number Diff line number Diff line Loading @@ -153,3 +153,25 @@ span.fold-unfold { margin-left: 1em; opacity: 0.5; } //---------------------------------------- // keyboard key style, from StackExchange. //---------------------------------------- kbd { display: inline-block; margin: 0 .1em; padding: .1em .6em; font-family: Arial,"Helvetica Neue",Helvetica,sans-serif; font-size: 11px; line-height: 1.4; color: #242729; text-shadow: 0 1px 0 #FFF; background-color: #e1e3e5; border: 1px solid #adb3b9; border-radius: 3px; box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset; white-space: nowrap; font-style: normal; }
bin/extract_figures.pydeleted 100755 → 0 +0 −98 Original line number Diff line number Diff line #!/usr/bin/env python from __future__ import print_function import sys import os import glob from optparse import OptionParser from util import Reporter, read_markdown, IMAGE_FILE_SUFFIX def main(): """Main driver.""" args = parse_args() images = [] for filename in args.filenames: images += get_images(args.parser, filename) save(sys.stdout, images) def parse_args(): """Parse command-line arguments.""" parser = OptionParser() parser.add_option('-p', '--parser', default=None, dest='parser', help='path to Markdown parser') args, extras = parser.parse_args() require(args.parser is not None, 'Path to Markdown parser not provided') require(extras, 'No filenames specified') args.filenames = extras return args def get_filenames(source_dir): """Get all filenames to be searched for images.""" return glob.glob(os.path.join(source_dir, '*.md')) def get_images(parser, filename): """Extract all images from file.""" content = read_markdown(parser, filename) result = [] find_image_nodes(content['doc'], result) find_image_links(content['doc'], result) return result def find_image_nodes(doc, result): """Find all nested nodes representing images.""" if (doc['type'] == 'img') or \ ((doc['type'] == 'html_element') and (doc['value'] == 'img')): alt = doc['attr'].get('alt', '') result.append({'alt': alt, 'src': doc['attr']['src']}) else: for child in doc.get('children', []): find_image_nodes(child, result) def find_image_links(doc, result): """Find all links to files in the 'fig' directory.""" if ((doc['type'] == 'a') and ('attr' in doc) and ('href' in doc['attr'])) \ or \ ((doc['type'] == 'html_element') and (doc['value'] == 'a') and ('href' in doc['attr'])): path = doc['attr']['href'] if os.path.splitext(path)[1].lower() in IMAGE_FILE_SUFFIX: result.append({'alt':'', 'src': doc['attr']['href']}) else: for child in doc.get('children', []): find_image_links(child, result) def save(stream, images): """Save results as Markdown.""" text = '\n<hr/>\n'.join(['<p><img alt="{0}" src="{1}" /></p>'.format(img['alt'], img['src']) for img in images]) print(text, file=stream) def require(condition, message): """Fail if condition not met.""" if not condition: print(message, file=sys.stderr) sys.exit(1) if __name__ == '__main__': main()