Replace extract_figures.py with Javacript
authorRaniere Silva <raniere@rgaiacs.com>
Sun, 5 Nov 2017 09:29:51 +0000 (09:29 +0000)
committerRaniere Silva <raniere@rgaiacs.com>
Sun, 5 Nov 2017 09:29:51 +0000 (09:29 +0000)
Demo at https://github.com/swcarpentry/lesson-example/pull/132/.

Makefile
bin/extract_figures.py [deleted file]
bin/lesson_initialize.py

index 8dc2541bd0f7b73aa2543c968915c5231d961006..df31f00cfc7ad62b0afc849061a287392998f06c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -95,10 +95,6 @@ lesson-check :
 lesson-check-all :
        @bin/lesson_check.py -s . -p ${PARSER} -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
diff --git a/bin/extract_figures.py b/bin/extract_figures.py
deleted file mode 100755 (executable)
index 63a7752..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/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()
index bf0ba17c5b1a85eff07be16a53d753d125bab2b2..6e91826e5c62f5e725af23a6d3a1491dc93f84f3 100755 (executable)
@@ -351,7 +351,41 @@ EXTRAS_FIGURES_MD = '''\
 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 %}
 '''
 
 EXTRAS_GUIDE_MD = '''\
@@ -362,10 +396,6 @@ title: "Instructor Notes"
 FIXME
 '''
 
-INCLUDES_ALL_FIGURES_HTML = '''\
-<!-- empty -->
-'''
-
 BOILERPLATE = (
     ('AUTHORS', ROOT_AUTHORS),
     ('CITATION', ROOT_CITATION),
@@ -380,7 +410,6 @@ BOILERPLATE = (
     ('_extras/discuss.md', EXTRAS_DISCUSS_MD),
     ('_extras/figures.md', EXTRAS_FIGURES_MD),
     ('_extras/guide.md', EXTRAS_GUIDE_MD),
-    ('_includes/all_figures.html', INCLUDES_ALL_FIGURES_HTML)
 )