Repository 'ireport'
hg clone https://toolshed.g2.bx.psu.edu/repos/saskia-hiltemann/ireport

Changeset 4:a4813532bbc6 (2014-10-07)
Previous changeset 3:4a6ebda2a3ae (2014-09-30) Next changeset 5:4e21ce709269 (2014-10-07)
Commit message:
Added MarkDown support
modified:
README.md
createHTML.sh
iReport.sh
iReport.xml
added:
Markdown/markdown2.py
Markdown/markdown2.pyc
Markdown/test
ireport_css.css
ireport_javascript.js
ireport_jquery.js
md.css
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 Markdown/markdown2.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Markdown/markdown2.py Tue Oct 07 08:41:30 2014 -0400
[
b'@@ -0,0 +1,2440 @@\n+#!/usr/bin/env python\n+# Copyright (c) 2012 Trent Mick.\n+# Copyright (c) 2007-2008 ActiveState Corp.\n+# License: MIT (http://www.opensource.org/licenses/mit-license.php)\n+\n+from __future__ import generators\n+\n+r"""A fast and complete Python implementation of Markdown.\n+\n+[from http://daringfireball.net/projects/markdown/]\n+> Markdown is a text-to-HTML filter; it translates an easy-to-read /\n+> easy-to-write structured text format into HTML.  Markdown\'s text\n+> format is most similar to that of plain text email, and supports\n+> features such as headers, *emphasis*, code blocks, blockquotes, and\n+> links.\n+>\n+> Markdown\'s syntax is designed not as a generic markup language, but\n+> specifically to serve as a front-end to (X)HTML. You can use span-level\n+> HTML tags anywhere in a Markdown document, and you can use block level\n+> HTML tags (like <div> and <table> as well).\n+\n+Module usage:\n+\n+    >>> import markdown2\n+    >>> markdown2.markdown("*boo!*")  # or use `html = markdown_path(PATH)`\n+    u\'<p><em>boo!</em></p>\\n\'\n+\n+    >>> markdowner = Markdown()\n+    >>> markdowner.convert("*boo!*")\n+    u\'<p><em>boo!</em></p>\\n\'\n+    >>> markdowner.convert("**boom!**")\n+    u\'<p><strong>boom!</strong></p>\\n\'\n+\n+This implementation of Markdown implements the full "core" syntax plus a\n+number of extras (e.g., code syntax coloring, footnotes) as described on\n+<https://github.com/trentm/python-markdown2/wiki/Extras>.\n+"""\n+\n+cmdln_desc = """A fast and complete Python implementation of Markdown, a\n+text-to-HTML conversion tool for web writers.\n+\n+Supported extra syntax options (see -x|--extras option below and\n+see <https://github.com/trentm/python-markdown2/wiki/Extras> for details):\n+\n+* code-friendly: Disable _ and __ for em and strong.\n+* cuddled-lists: Allow lists to be cuddled to the preceding paragraph.\n+* fenced-code-blocks: Allows a code block to not have to be indented\n+  by fencing it with \'```\' on a line before and after. Based on\n+  <http://github.github.com/github-flavored-markdown/> with support for\n+  syntax highlighting.\n+* footnotes: Support footnotes as in use on daringfireball.net and\n+  implemented in other Markdown processors (tho not in Markdown.pl v1.0.1).\n+* header-ids: Adds "id" attributes to headers. The id value is a slug of\n+  the header text.\n+* html-classes: Takes a dict mapping html tag names (lowercase) to a\n+  string to use for a "class" tag attribute. Currently only supports\n+  "pre" and "code" tags. Add an issue if you require this for other tags.\n+* markdown-in-html: Allow the use of `markdown="1"` in a block HTML tag to\n+  have markdown processing be done on its contents. Similar to\n+  <http://michelf.com/projects/php-markdown/extra/#markdown-attr> but with\n+  some limitations.\n+* metadata: Extract metadata from a leading \'---\'-fenced block.\n+  See <https://github.com/trentm/python-markdown2/issues/77> for details.\n+* nofollow: Add `rel="nofollow"` to add `<a>` tags with an href. See\n+  <http://en.wikipedia.org/wiki/Nofollow>.\n+* pyshell: Treats unindented Python interactive shell sessions as <code>\n+  blocks.\n+* link-patterns: Auto-link given regex patterns in text (e.g. bug number\n+  references, revision number references).\n+* smarty-pants: Replaces \' and " with curly quotation marks or curly\n+  apostrophes.  Replaces --, ---, ..., and . . . with en dashes, em dashes,\n+  and ellipses.\n+* toc: The returned HTML string gets a new "toc_html" attribute which is\n+  a Table of Contents for the document. (experimental)\n+* xml: Passes one-liner processing instructions and namespaced XML tags.\n+* tables: Tables using the same format as GFM\n+  <https://help.github.com/articles/github-flavored-markdown#tables> and\n+  PHP-Markdown Extra <https://michelf.ca/projects/php-markdown/extra/#table>.\n+* wiki-tables: Google Code Wiki-style tables. See\n+  <http://code.google.com/p/support/wiki/WikiSyntax#Tables>.\n+"""\n+\n+# Dev Notes:\n+# - Python\'s regex syntax doesn\'t have \'\\z\', so I\'m using \'\\Z\'. I\'m\n'..b'ion("--self-test", action="store_true",\n+                      help="run internal self-tests (some doctests)")\n+    parser.add_option("--compare", action="store_true",\n+                      help="run against Markdown.pl as well (for testing)")\n+    parser.set_defaults(log_level=logging.INFO, compare=False,\n+                        encoding="utf-8", safe_mode=None, use_file_vars=False)\n+    opts, paths = parser.parse_args()\n+    log.setLevel(opts.log_level)\n+\n+    if opts.self_test:\n+        return _test()\n+\n+    if opts.extras:\n+        extras = {}\n+        for s in opts.extras:\n+            splitter = re.compile("[,;: ]+")\n+            for e in splitter.split(s):\n+                if \'=\' in e:\n+                    ename, earg = e.split(\'=\', 1)\n+                    try:\n+                        earg = int(earg)\n+                    except ValueError:\n+                        pass\n+                else:\n+                    ename, earg = e, None\n+                extras[ename] = earg\n+    else:\n+        extras = None\n+\n+    if opts.link_patterns_file:\n+        link_patterns = []\n+        f = open(opts.link_patterns_file)\n+        try:\n+            for i, line in enumerate(f.readlines()):\n+                if not line.strip(): continue\n+                if line.lstrip().startswith("#"): continue\n+                try:\n+                    pat, href = line.rstrip().rsplit(None, 1)\n+                except ValueError:\n+                    raise MarkdownError("%s:%d: invalid link pattern line: %r"\n+                                        % (opts.link_patterns_file, i+1, line))\n+                link_patterns.append(\n+                    (_regex_from_encoded_pattern(pat), href))\n+        finally:\n+            f.close()\n+    else:\n+        link_patterns = None\n+\n+    from os.path import join, dirname, abspath, exists\n+    markdown_pl = join(dirname(dirname(abspath(__file__))), "test",\n+                       "Markdown.pl")\n+    if not paths:\n+        paths = [\'-\']\n+    for path in paths:\n+        if path == \'-\':\n+            text = sys.stdin.read()\n+        else:\n+            fp = codecs.open(path, \'r\', opts.encoding)\n+            text = fp.read()\n+            fp.close()\n+        if opts.compare:\n+            from subprocess import Popen, PIPE\n+            print("==== Markdown.pl ====")\n+            p = Popen(\'perl %s\' % markdown_pl, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True)\n+            p.stdin.write(text.encode(\'utf-8\'))\n+            p.stdin.close()\n+            perl_html = p.stdout.read().decode(\'utf-8\')\n+            if py3:\n+                sys.stdout.write(perl_html)\n+            else:\n+                sys.stdout.write(perl_html.encode(\n+                    sys.stdout.encoding or "utf-8", \'xmlcharrefreplace\'))\n+            print("==== markdown2.py ====")\n+        html = markdown(text,\n+            html4tags=opts.html4tags,\n+            safe_mode=opts.safe_mode,\n+            extras=extras, link_patterns=link_patterns,\n+            use_file_vars=opts.use_file_vars)\n+        if py3:\n+            sys.stdout.write(html)\n+        else:\n+            sys.stdout.write(html.encode(\n+                sys.stdout.encoding or "utf-8", \'xmlcharrefreplace\'))\n+        if extras and "toc" in extras:\n+            log.debug("toc_html: " +\n+                html.toc_html.encode(sys.stdout.encoding or "utf-8", \'xmlcharrefreplace\'))\n+        if opts.compare:\n+            test_dir = join(dirname(dirname(abspath(__file__))), "test")\n+            if exists(join(test_dir, "test_markdown2.py")):\n+                sys.path.insert(0, test_dir)\n+                from test_markdown2 import norm_html_from_html\n+                norm_html = norm_html_from_html(html)\n+                norm_perl_html = norm_html_from_html(perl_html)\n+            else:\n+                norm_html = html\n+                norm_perl_html = perl_html\n+            print("==== match? %r ====" % (norm_perl_html == norm_html))\n+\n+\n+if __name__ == "__main__":\n+    sys.exit( main(sys.argv) )\n'
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 Markdown/markdown2.pyc
b
Binary file Markdown/markdown2.pyc has changed
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 Markdown/test
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Markdown/test Tue Oct 07 08:41:30 2014 -0400
b
@@ -0,0 +1,1 @@
+hi
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 README.md
--- a/README.md Tue Sep 30 09:56:12 2014 -0400
+++ b/README.md Tue Oct 07 08:41:30 2014 -0400
b
@@ -10,15 +10,21 @@
 email: s.hiltemann@erasmusmc.nl
 
 
+Installation Instructions
+--------------------------
+This package uses (but does not install) Bash, Perl and Python. 
+
+If Pandoc ((johnmacfarlane.net/pandoc/index.html)) is installed on your system PATH (command 'pandoc'), any MarkDown text items will be rendered using Pandoc (allows many markdown syntax extensions). 
+If Pandoc is not present, a simple markdown conversion script is used (only handles vanilla syntax).
 
 
-Planned changes
+TODOs
 ---------------
 - ~~option to download iReport webpage~~
-- more pluggable code to add content item types etc.
-- markdown instead of plain text/html in text fields.
-- multiple columns in table converted to weblinks.
-- table colums link to archive files in history
+- ~~markdown instead of plain text/html in text fields.~~
+- Support for large tables
+- Multiple columns in table converted to weblinks.
+- Table colums link to archive files in history
 - ..
-- ..suggestions anyone?
+- ..suggestions?
 
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 createHTML.sh
--- a/createHTML.sh Tue Sep 30 09:56:12 2014 -0400
+++ b/createHTML.sh Tue Oct 07 08:41:30 2014 -0400
[
b'@@ -1,3 +1,6 @@\n+##\n+## Create Cover Page\n+##\n function makeIntroPage  ( ){\n \techo "Creating Intro Page"\n \ttitle="$1"\n@@ -11,7 +14,6 @@\n \t<head>\n \t</head>\n \t<body>\n-\t\t<!-- dummy intro page, since first page will not have any javascript/css features enabled unless specified in universe_wsgi.ini file, but subsequent pages will -->\n \t\t<br/>\n \t\t<br/>\n \t\t<center>\n@@ -27,76 +29,138 @@\n \n }\n \n-\n+##\n+## Create HTML content for the tabs specified by user\n+##\n function makeTabContent ( ){\n-\ttab=$1\t\t\t#name of current tab\n-\titemslist=$2\t#list of all items\n-\tcontentline="<br/>"\n-\timgcount=0\n-\t#echo -e "\\n Creating items. itemslist: $itemslist"\n+\ttab=$1\t\t\t# name of current tab\n+\titemslist=$2\t# list of all items\n+\tcontentline=""  # HTML code for tab\n+\timgcount=0\t\t# keep track of the number of images on the current tab\n \t\n \tfor item in $itemslist\n \tdo\n-\t\t#echo -e "\\n -> item : $item"\n+\t\t## Parse items lists\n \t\titem=${item/::/:emptycol:}\n \t\tdeclare -a myarr=(`echo $item |sed \'s/:/ /g\'`)\n-\t\t#echo "break: ${myarr[3]}"\n+\t\t\n+\t\t## Create the tab contents HTML code\n \t\tif [ ${myarr[0]} == $tab ]\n \t\tthen\n \t\t\t\n-\t\t\t## add contents of text field to page####\n+\t\t\t##\n+\t\t\t##  Text Field\n+\t\t\t##\t\t\t\n \t\t\tif [ ${myarr[1]} == "text" ]\n \t\t\tthen\n \t\t\t\ttext=${myarr[2]}\n-\t\t\t\t## allow some html formatting tags\n-\t\t\t\ttext=${text//==lt==strong==gt==/<strong>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt====slash==strong==gt==/<\\/strong>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt==em==gt==/<em>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt====slash==em==gt==/<\\/em>}  # search for strong tags\n+\t\t\t\tmd=${myarr[4]}\n \t\t\t\t\n-\t\t\t\ttext=${text//==lt==b==gt==/<strong>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt====slash==b==gt==/<\\/strong>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt==i==gt==/<em>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt====slash==i==gt==/<\\/em>}  # search for strong tags\n+\t\t\t\t# if markdown, convert to html\n+\t\t\t\tif [ $md == "Y" ]\n+\t\t\t\tthen\n+\t\t\t\t\t## resubstitute sanitized charachters\n+\t\t\t\t\ttext=${text//==space==/ }\n+\t\t\t\t\ttext=${text//==colon==/:}\n+\t\t\t\t\ttext=${text//==comma==/,}\n+\t\t\t\t\ttext=${text//==slash==/\\/}\n+\t\t\t\t\ttext=${text//==lt==/<}\n+\t\t\t\t\ttext=${text//==gt==/>}\n+\t\t\t\t\ttext=${text//==apos==/\\\'}\n+\t\t\t\t\ttext=${text//==quote==/\\"}\n+\t\t\t\t\ttext=${text//==backtick==/\\`}\n+\t\t\t\t\ttext=${text//==dollar==/$}\n+\t\t\t\t\ttext=${text//==bar==/|}\n+\t\t\t\t\ttext=${text//&&/&}\n+\t\t\t\t\ttext=${text//\\\\n/\\\\n}\n+\t\t\t\t\ttext=${text//\\\\t/\\\\t}\n+\t\t\t\t\ttext=${text//\\&r\\&n/\\\\n}\n+\t\t\t\t\ttext=${text//\\&r/\\\\n}\n+\t\t\t\t\ttext=${text//\\&n/\\\\n}\n+\t\t\t\t\ttext=${text//\\&c/:}\n+\t\t\t\t\t\n+\t\t\t\t\t\n+\t\t\t\t\t## convert markdown in textfield to html\n+\t\t\t\t\techo -e "$text" > mytext.md\n+\t\t\t\t\t\n+\t\t\t\t\tif [ -z `type -p pandoc` ]\n+\t\t\t\t\tthen\n+\t\t\t\t\t\t# pandoc missing\n+\t\t\t\t\t\t${repositorypath}/Markdown/markdown2.py mytext.md > mytext.html\n+\t\t\t\t\t\t\n+\t\t\t\t\telse\n+\t\t\t\t\t\t# pandoc exists \n+\t\t\t\t\t\techo "pandoc exists"\n+\t\t\t\t\t\tpandoc -o mytext.html mytext.md\n+\t\t\t\t\t\tpandoc -o standalone.html -s mytext.md\n+\t\t\t\t\t\t\n+\t\t\t\t\t\t#get css generated by pandoc and add as scoped attribute (HTML5)\n+\t\t\t\t\t\tpandocstyle=`sed -n \'/<style/,/style>/p\' standalone.html`\n+\t\t\t\t\tfi\n+\t\t\t\t\t\n+\t\t\t\t\tmarkdowntext=$(cat mytext.html)\n+\t\t\t\t\tcontentline="${contentline}\\n<div class=\\"markdown-body\\">${pandocstyle} ${markdowntext}</div>\\n"\n+\t\t\t\t\t\n+\t\t\t\telse\t# If not markdown, print verbatim (with exception of few html tags)\n \t\t\t\t\n-\t\t\t\ttext=${text//==lt==br==gt==/<br\\/>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt====br==slash==gt==/<br\\/>}  # search for strong tags\n-\t\t\t\ttext=${text//==lt==h1==gt==/<h1>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt==h2==gt==/<h2>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt==h3==gt==/<h3>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt==h4==gt==/<h4>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt==h5==gt==/<h5>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt==h6==gt==/<h6>}  # search for h1-h6 tags\n-\t\t\t\ttext=${text//==lt====slash==h1==gt==/<\\/h1>}  # search for h1-h6 closing tags\n-\t\t\t\ttext=${text//==lt====slash==h2==gt==/'..b'tline="${contentline}<br/>"\n+\t\t\t\tcontentline="${contentline}<br/>\\n"\n \t\t\tfi\t\t\n \t\tfi\n \tdone\n@@ -429,13 +542,15 @@\n \techo "${contentline}"\n }\n \n-\n+##\n+## Create HTML content for iReport\n+##\n createMainPage (){\n \tpage=$1\n-\ttabtitles=$2  #comma-separated list of tab titles\n-\ttabitems=$3\n-\tiframecount=1\n-\tminwidth=$4\n+\ttabtitles=$2\t# comma-separated list of tab titles\n+\ttabitems=$3\t\t# colon-sparated list of tabs specifications\n+\tiframecount=1\t# keep track of number of iFrames so that they can be referenced by ID\n+\tminwidth=$4\t\t# width of page\n \t\n \techo "createMainPage: tabitems: $tabitems. tabtitles: $tabtitles"\n \t# create correct number of tabs\n@@ -445,15 +560,15 @@\n \ttabtitles=${tabtitles//==colon==/:}\n \ttabslist="<ul>\\n"\n \tmytabs=""\n+\t\n \tfor title in $tabtitles\n \tdo\n-\t\t#create list of tabs\n-\t\t\n+\t\t# Create list of tabs\t\t\n \t\tcount=$[count+1]\n \t\ttitle2=${title//_s_/ }\n \t\ttabslist="${tabslist} <li><a href=\\"#tabs-${count}\\">${title2}</a></li>\\n"\n \t\t\n-\t\t#create tabs with content\n+\t\t# Create tabs with content\n \t\ttabcontent=$(makeTabContent $title "$tabitems")\n \t\tmytabs="${mytabs}\\n<div id=\\"tabs-${count}\\">\\n"\n \t\tmytabs="${mytabs}${tabcontent}"\n@@ -461,99 +576,27 @@\n \tdone\n \ttabslist="${tabslist}</ul>"\n \t\n-\t#output the webpage\n+\t## Output the webpage\n \techo -e "<!doctype html>\n-<head>\n+ <head>\n   <meta charset=\\"utf-8\\">\n-  <title>jQuery UI Tabs - Default functionality</title>\n-  \n-  \n-  <link rel=\\"stylesheet\\" href=\\"jquery-ui.css\\">  \n-  <script src=\\"jquery-1.10.2.js\\"></script>\n-  <script src=\\"jquery-ui.js\\"></script>\n+  <title>iReport</title>\n+  <link rel=\\"stylesheet\\" href=\\"jquery-ui.css\\">\n+  <link rel=\\"stylesheet\\" href=\\"ireport_css.css\\">\n+  <link rel=\\"stylesheet\\" href=\\"md.css\\">\n+  <script type=\\"text/javascript\\" src=\\"jquery-1.10.2.js\\"></script>\n+  <script type=\\"text/javascript\\" src=\\"jquery-ui.js\\"></script>\t\n   <script type=\\"text/javascript\\" src=\\"iframe-resizer/src/iframeResizer.js\\"></script> \n   <script type=\\"text/javascript\\" src=\\"jquery.zoom.js\\"></script>\n-  \n-  <script>\n-  \\$(function() {\n-    \\$( \\"#tabs\\" ).tabs();\n-  });\n-\n-  \\$(function() {\n-    \\$( \\".resizable\\" ).resizable();\n-  });\n-\n-  \\$(document).ready(function(){\n-       \\$(\'.zoomme\').zoom();\n-       \\$(\'#ex2\').zoom({ on:\'grab\' });\n-       \\$(\'#ex3\').zoom({ on:\'click\' });\n-       \\$(\'#ex4\').zoom({ on:\'toggle\' });\n-       \\$(\'.fancyiframe\').iFrameResize({\n-\t\t\t\t\t\t\theightCalculationMethod: \'max\',\n-\t\t\t\t\t\t\tminHeight: 250,\n-\t\t\t\t\t\t\tscrolling: true,\n-\t\t\t\t\t\t\tcheckOrigin: false,\n-\t\t\t\t\t\t\tbodyMargin: 15\n-\t\t});\n-\t\t\\$(\'.unfancyiframe\').iFrameResize({\n-\t\t\t\t\t\t\theightCalculationMethod: \'max\',\n-\t\t\t\t\t\t\tscrolling: false,\n-\t\t\t\t\t\t\tcheckOrigin: false\n-\t\t});\n-  });\n- \n-  </script>\n-\n+  <script type=\\"text/javascript\\" src=\\"ireport_jquery.js\\"></script>\n+  <script type=\\"text/javascript\\" src=\\"ireport_javascript.js\\"></script>\n+ </head>\n+ <body>\n+  <div id=\\"tabs\\" style=\\"display:inline-block; min-height:100%; min-width:${minwidth}px\\">\n+  $tabslist\n \n-  <script language=\\"javascript\\" type=\\"text/javascript\\">\n-    function resizeIframe(obj) {\n-\t  oldheight=obj.style.height\n-\t  oldwidth=obj.style.width\n-      obj.style.height = obj.contentWindow.document.body.scrollHeight + 4 + \'px\';\n-      obj.style.width = obj.contentWindow.document.body.scrollWidth + 4 + \'px\';\n-      \n-      if(obj.style.height < 50){\n-       obj.style.height=oldheight\n-      }\n-    }\n-  </script>\n-<style type=\\"text/css\\">\n-\tbody { \n-\t\tmin-width: ${minwidth}px; \n-\t\twidth: ${minwidth}px; \n-\t\tmin-height: 100%;\n-\t}\n-\t.invisibleframe{\n-\t\tborder: 0px;\n-\t\toverflow: hidden\n-\t}\n-\t.mylinks{\n-\t\tcolor: blue !important;\n-\t}\n-\t.mylinks:visited {\t\n-\t\tcolor: #551A8B !important;\n-\t}\n-</style>\n- <style >\n-  .zoomme {\n-    display: inline-block;\n-  }\n-</style>\n-\n-\n-</head>\n-<body>\n- \n-<div id=\\"tabs\\" style=\\"display:inline-block; min-height:100%; min-width:${minwidth}px\\">\n-$tabslist\n-\n-$mytabs\n-</div>\n- \n- \n-</body>\n+  $mytabs\n+  </div>\n+ </body>\n </html>" > $page\n-\n-\n-\n }\n\\ No newline at end of file\n'
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 iReport.sh
--- a/iReport.sh Tue Sep 30 09:56:12 2014 -0400
+++ b/iReport.sh Tue Oct 07 08:41:30 2014 -0400
b
@@ -65,7 +65,7 @@
 fi
 echo -e "coverimage3: $coverimage"
 
-## Copy supporting files to output directory
+## Copy supporting files from repository to output directory
 cp ${repositorypath}/jquery.dataTables.css ${galaxypath}/jquery.dataTables.css
 cp ${repositorypath}/jquery.dataTables.js ${galaxypath}/jquery.dataTables.js
 cp -R ${repositorypath}/iframe-resizer/ ${galaxypath}/iframe-resizer/
@@ -74,6 +74,9 @@
 cp ${repositorypath}/jquery-ui.css ${galaxypath}/jquery-ui.css
 cp ${repositorypath}/jquery-1.10.2.js ${galaxypath}/jquery-1.10.2.js
 cp ${repositorypath}/jquery-ui.js ${galaxypath}/jquery-ui.js
+cp ${repositorypath}/md.css ${galaxypath}/md.css
+cp ${repositorypath}/ireport_css.css ${galaxypath}/ireport_css.css
+cp ${repositorypath}/ireport_jquery.js ${galaxypath}/ireport_jquery.js
 
 echo "done copying resource files"
 ls ${galaxypath}
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 iReport.xml
--- a/iReport.xml Tue Sep 30 09:56:12 2014 -0400
+++ b/iReport.xml Tue Oct 07 08:41:30 2014 -0400
b
@@ -1,12 +1,11 @@
-<tool id="iReport" name="iReport" version="1">
-  <description> create an HTML report </description>
+<tool id="iReport-dev" name="iReport-dev" version="1">
+  <description> create an HTML report-dev </description>
 
  <requirements>
  <requirement type="set_environment">REPOSITORY_PATH</requirement>
  </requirements>
-   <command interpreter="bash"> 
-
-   iReport.sh 
+ <command interpreter="bash"> 
+ iReport.sh 
  --toolpath \$REPOSITORY_PATH
  --galaxypath ${report.files_path}
  --htmlout ${report}
@@ -27,16 +26,24 @@
  --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}:${__app__.security.encode_id($u.filetype.item.id)}:${u.filetype.ireport}:${u.filetype.item2}"
  #else if $u.filetype.itemtype == "weblink"
  --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}:${u.filetype.item2}"
+ #else if $u.filetype.itemtype == "text"
+ --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}:${u.filetype.md}"
+ #else if $u.filetype.itemtype == "textfile"
+ --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}:${u.filetype.md}"
+ #else if $u.filetype.itemtype == "htmlfile"
+ --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}:${u.filetype.height}"
  #else 
  --item "${t.tabtitle}:${u.filetype.itemtype}:${u.filetype.item}:${u.filetype.break}"
  #end if
  #end for
  #end for
  --label "${label}"
-   </command>
+ </command>
 
-   <inputs>
- <param name="label" type="text" size="100" label="Name of Report" />
+ <inputs>
+ <param name="label" type="text" size="100" label="Name of Report" >
+ <validator type="empty_field" />
+ </param>
  <param name="coverimage" type="text" size="100" label="Link to cover image" help="Optional. A default image will be used if not specified"/>
  <param name="minwidth" type="integer" min="0" max="5000" value="1200" label="Width of page (in pixels)" />
  <repeat name="tabs" title="Tab" default="1" >
@@ -51,6 +58,7 @@
  <remove value="&amp;"/>
  <remove value=":"/>
  <remove value=" "/>
+ <remove value="`"/>
  </valid> 
  <mapping initial="none">
  <add source="\" target="\\"/>
@@ -60,8 +68,10 @@
  <add source="&#xD;" target="&amp;r"/>
  <add source=":" target="==colon=="/>
  <add source=" " target="_s_"/>
+ <add source="`" target="==backtick=="/>
  </mapping> 
  </sanitizer>
+ <validator type="empty_field" />
  </param>  
  <repeat name="content" title="Content-Item" default="1">
  <conditional name="filetype">
@@ -69,15 +79,17 @@
  <option value="" > Please choose item type </option>
  <option value="text" > Text Field </option>
  <option value="textfile" > Text File from history </option>
+ <option value="htmlfile"> HTML File from history </option>
  <option value="image"> Image </option>
  <option value="pdf"  > PDF File </option>
  <option value="table"> Table </option>
- <option value="link" > Link to file </option>
- <option value="links"> Links to files in archive</option>
+ <option value="link" > Link to Dataset </option>
+ <option value="links"> Links to Files in Archive Dataset </option>
  <option value="weblink" > Web link </option>
  <validator type="empty_field" />
  </param>
  <when value="text">
+ <param name="md" type="boolean" truevalue="Y" falsevalue="n" checked="false" label="Text in MarkDown format?" help="If checked, text file or field will be interpreted as markdown"/>
  <param name="item" type="text" area="true" size="10x100" label="Text to display." help="can explicitly add whitespace adding \n in your text for a newline or \t for a tab. HTML tags em, strong, b, i, h1-h6 tags" >
  <sanitizer>
  <valid initial="default">
@@ -95,6 +107,9 @@
  <remove value="&amp;"/>
  <remove value="&#x3a;"/>
  <remove value=" "/>
+ <remove value="`"/>
+ <remove value="$"/>
+ <remove value="|"/>
  </valid> 
  <mapping initial="none"> 
  <add source="\" target="\\"/> 
@@ -110,18 +125,28 @@
  <add source="&apos;" target="==apos=="/> 
  <add source="&quot;" target="==quote=="/>
  <add source=":" target="==colon=="/>
+ <add source="`" target="==backtick=="/>
+ <add source="$" target="==dollar=="/>
+ <add source="|" target="==bar=="/>
  </mapping> 
  </sanitizer>
+ <validator type="empty_field" />
  </param>  
  <param name="break" type="boolean" checked="False" truevalue="Y" falsevalue="N" label="Insert break after item?"/>
  </when>
  <when value="textfile">
+ <param name="md" type="boolean" truevalue="Y" falsevalue="n" checked="false" label="Text in MarkDown format?" help="If checked, text file or field will be interpreted as markdown. Will use pandoc if this is installed on the system, else uses a custom script"/>
  <param name="item" type="data" label="Text File"  help="Text file to display verbatim"/>
  <param name="break" type="boolean" checked="False" truevalue="Y" falsevalue="N" label="Insert break after item?" help="Insert a line break to force next item to appear below this one. If unchecked, the browser will decide layout"/>
  </when>
+ <when value="htmlfile">
+ <param name="item" type="data" label="HTML File" help="Contents of html file will be displayed in an iframe"/>
+ <param name="height" type="integer" min="0" max="500000" value="350" label="Height (in pixels)" help="Height of the iFrame displaying the html page"/>
+ <param name="break" type="boolean" checked="False" truevalue="Y" falsevalue="N" label="Insert break after item?" help="Insert a line break to force next item to appear below this one. If unchecked, the browser will decide layout"/>
+ </when>
  <when value="image">
  <param name="item" type="data" label="Image File" format="png,svg,jpg,jpeg" help="Supported formats: png, jpg, svg. If image is scaled by choice of width, zoom-on-mousover effect is added."/>
- <param name="zoomlevel" type="integer" min="0" max="5000" value="250" label="Width (in pixels)" help="enter 0 to keep original size" />
+ <param name="zoomlevel" type="integer" min="0" max="5000" value="250" label="Width (in pixels)" help="enter 0 to keep original size" />
  <param name="zoomenable" type="boolean" checked="True" truevalue="Y" falsevalue="N" label="Enable zoom-on-mouseover effect?" help="If checked and nonzero width, zoom-on-mousover effect added"/>
  <param name="align" type="select" label="Alignment of image (float)" help="Use left or right align to have images and text next to each other. Always specify image first (with alignment), then text, if you want to show them side by side." >
  <option value="none"  > default (recommended) </option>
@@ -224,6 +249,42 @@
    </outputs>
   
    <help>  
- Description of tool for the users
+============
+iReport
+============
+
+iReport is a tool for the easy creation of HTML reports from Galaxy datasets. Ideal to use as final step in a pipeline to display all results in a single, interactive report.
+
+
+**What's new**
+
+- MarkDown support
+- HTML content item type
+- Link to download entire iReport on cover page
+
+
+
+**How to use**
+
+- Specify report title and cover image (url)
+- Add any number of named tabs
+- Add content items to each tab
+
+1. Text Field
+2. Text File
+3. PDF File
+4. HTML File 
+5. Table 
+6. Image File
+7. Links (URL/dataset)
+8. Links to all files in an archive dataset
+
+**Example History**
+
+http://galaxy-demo.trait-ctmm.cloudlet.sara.nl/u/saskia-hiltemann/h/gcc2014-ireport-about-ireport
+
+
+
+
  </help>
 </tool>
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 ireport_css.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ireport_css.css Tue Oct 07 08:41:30 2014 -0400
b
@@ -0,0 +1,25 @@
+   body { 
+    min-width: ${minwidth}px; 
+    width: ${minwidth}px; 
+    min-height: 100%;
+   }
+   .invisibleframe{
+    border: 0px;
+    overflow: hidden;
+    min-height: 350px !important;
+   }
+   .mylinks{
+   color: blue !important;
+   }
+   .mylinks:visited {  
+   color: #551A8B !important;
+   }
+   .zoomme {
+    display: inline-block;
+   }
+   .markdown-body {
+    min-width: ${minwidth}px;
+    max-width: ${minwidth}px;
+    margin: 0 auto;
+    padding: 30px;
+   }
\ No newline at end of file
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 ireport_javascript.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ireport_javascript.js Tue Oct 07 08:41:30 2014 -0400
b
@@ -0,0 +1,9 @@
+   function resizeIframe(obj) {
+    oldheight=obj.style.height
+    oldwidth=obj.style.width
+    obj.style.height = obj.contentWindow.document.body.scrollHeight + 4 + 'px';
+    obj.style.width = obj.contentWindow.document.body.scrollWidth + 4 + 'px';
+    if(obj.style.height < 50){
+     obj.style.height=oldheight
+    }
+   }
\ No newline at end of file
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 ireport_jquery.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ireport_jquery.js Tue Oct 07 08:41:30 2014 -0400
b
@@ -0,0 +1,24 @@
+$(function() {
+   $("#tabs" ).tabs();
+   });
+   $(function() {
+    $(".resizable" ).resizable();
+   });
+   $(document).ready(function(){
+    $('.zoomme').zoom();
+    $('#ex2').zoom({ on:'grab' });
+    $('#ex3').zoom({ on:'click' });
+    $('#ex4').zoom({ on:'toggle' });
+    $('.fancyiframe').iFrameResize({
+     heightCalculationMethod: 'max',
+     minHeight: 250,
+     scrolling: true,
+     checkOrigin: false,
+     bodyMargin: 15
+    });
+    $('.unfancyiframe').iFrameResize({
+     heightCalculationMethod: 'max',
+     scrolling: false,
+     checkOrigin: false
+    });
+   });
\ No newline at end of file
b
diff -r 4a6ebda2a3ae -r a4813532bbc6 md.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/md.css Tue Oct 07 08:41:30 2014 -0400
[
b'@@ -0,0 +1,696 @@\n+@font-face {\n+  font-family: octicons-anchor;\n+  src: url(data:font/woff;charset=utf-8;base64,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) format(\'woff\');\n+}\n+\n+.markdown-body {\n+  -ms-text-size-adjust: 100%;\n+  -webkit-text-size-adjust: 100%;\n+  color: #333;\n+  overflow: hidden;\n+  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;\n+  font-size: 16px;\n+  line-height: 1.6;\n+  word-wrap: break-word;\n+}\n+\n+.markdown-body a {\n+  background: transparent;\n+}\n+\n+.markdown-body a:active,\n+.markdown-body a:hover {\n+  outline: 0;\n+}\n+\n+.markdown-body strong {\n+  font-weight: bold;\n+}\n+\n+.markdown-body h1 {\n+  font-size: 2em;\n+  margin: 0.67em 0;\n+}\n+\n+.markdown-body img {\n+  border: 0;\n+}\n+\n+.markdown-body hr {\n+  -moz-box-sizing: content-box;\n+  box-sizing: content-box;\n+  height: 0;\n+}\n+\n+.markdown-body pre {\n+  overflow: auto;\n+}\n+\n+.markdown-body code,\n+.markdown-body kbd,\n+.markdown-body pre {\n+  font-family: monospace, monospace;\n+  font-size: 1em;\n+}\n+\n+.markdown-body input {\n+  color: inherit;\n+  font: inherit;\n+  margin: 0;\n+}\n+\n+.markdown-body html input[disabled] {\n+  cursor: default;\n+}\n+\n+.markdown-body input {\n+  line-height: normal;\n+}\n+\n+.markdown-body input[type="checkbox"] {\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+  padding: 0;\n+}\n+\n+.markdown-body table {\n+  border-collapse: collapse;\n+  border-spacing: 0;\n+}\n+\n+.markdown-body td,\n+.markdown-body th {\n+  padding: 0;\n+}\n+\n+.markdown-body * {\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+\n+.markdown-body input {\n+  font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";\n+}\n+\n+.markdown-body a {\n+  color: #4183c4;\n+  text-decoration: none;\n+}\n+\n+.markdown-body a:hover,\n+.markdown-body a:focus,\n+.markdown-body a:active {\n+  text-decoration: underline;\n+}\n+\n+.markdown-body hr {\n+  height: 0;\n+  margin: 15px 0;\n+  overflow: hidden;\n+  bac'..b"re code:after {\n+  content: normal;\n+}\n+\n+.markdown-body .highlight {\n+  background: #fff;\n+}\n+\n+.markdown-body .highlight .mf,\n+.markdown-body .highlight .mh,\n+.markdown-body .highlight .mi,\n+.markdown-body .highlight .mo,\n+.markdown-body .highlight .il,\n+.markdown-body .highlight .m {\n+  color: #945277;\n+}\n+\n+.markdown-body .highlight .s,\n+.markdown-body .highlight .sb,\n+.markdown-body .highlight .sc,\n+.markdown-body .highlight .sd,\n+.markdown-body .highlight .s2,\n+.markdown-body .highlight .se,\n+.markdown-body .highlight .sh,\n+.markdown-body .highlight .si,\n+.markdown-body .highlight .sx,\n+.markdown-body .highlight .s1 {\n+  color: #df5000;\n+}\n+\n+.markdown-body .highlight .kc,\n+.markdown-body .highlight .kd,\n+.markdown-body .highlight .kn,\n+.markdown-body .highlight .kp,\n+.markdown-body .highlight .kr,\n+.markdown-body .highlight .kt,\n+.markdown-body .highlight .k,\n+.markdown-body .highlight .o {\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .kt {\n+  color: #458;\n+}\n+\n+.markdown-body .highlight .c,\n+.markdown-body .highlight .cm,\n+.markdown-body .highlight .c1 {\n+  color: #998;\n+  font-style: italic;\n+}\n+\n+.markdown-body .highlight .cp,\n+.markdown-body .highlight .cs {\n+  color: #999;\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .cs {\n+  font-style: italic;\n+}\n+\n+.markdown-body .highlight .n {\n+  color: #333;\n+}\n+\n+.markdown-body .highlight .na,\n+.markdown-body .highlight .nv,\n+.markdown-body .highlight .vc,\n+.markdown-body .highlight .vg,\n+.markdown-body .highlight .vi {\n+  color: #008080;\n+}\n+\n+.markdown-body .highlight .nb {\n+  color: #0086B3;\n+}\n+\n+.markdown-body .highlight .nc {\n+  color: #458;\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .no {\n+  color: #094e99;\n+}\n+\n+.markdown-body .highlight .ni {\n+  color: #800080;\n+}\n+\n+.markdown-body .highlight .ne {\n+  color: #990000;\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .nf {\n+  color: #945277;\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .nn {\n+  color: #555;\n+}\n+\n+.markdown-body .highlight .nt {\n+  color: #000080;\n+}\n+\n+.markdown-body .highlight .err {\n+  color: #a61717;\n+  background-color: #e3d2d2;\n+}\n+\n+.markdown-body .highlight .gd {\n+  color: #000;\n+  background-color: #fdd;\n+}\n+\n+.markdown-body .highlight .gd .x {\n+  color: #000;\n+  background-color: #faa;\n+}\n+\n+.markdown-body .highlight .ge {\n+  font-style: italic;\n+}\n+\n+.markdown-body .highlight .gr {\n+  color: #aa0000;\n+}\n+\n+.markdown-body .highlight .gh {\n+  color: #999;\n+}\n+\n+.markdown-body .highlight .gi {\n+  color: #000;\n+  background-color: #dfd;\n+}\n+\n+.markdown-body .highlight .gi .x {\n+  color: #000;\n+  background-color: #afa;\n+}\n+\n+.markdown-body .highlight .go {\n+  color: #888;\n+}\n+\n+.markdown-body .highlight .gp {\n+  color: #555;\n+}\n+\n+.markdown-body .highlight .gs {\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .gu {\n+  color: #800080;\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .gt {\n+  color: #aa0000;\n+}\n+\n+.markdown-body .highlight .ow {\n+  font-weight: bold;\n+}\n+\n+.markdown-body .highlight .w {\n+  color: #bbb;\n+}\n+\n+.markdown-body .highlight .sr {\n+  color: #017936;\n+}\n+\n+.markdown-body .highlight .ss {\n+  color: #8b467f;\n+}\n+\n+.markdown-body .highlight .bp {\n+  color: #999;\n+}\n+\n+.markdown-body .highlight .gc {\n+  color: #999;\n+  background-color: #EAF2F5;\n+}\n+\n+.markdown-body .octicon {\n+  font: normal normal 16px octicons-anchor;\n+  line-height: 1;\n+  display: inline-block;\n+  text-decoration: none;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  -webkit-user-select: none;\n+  -moz-user-select: none;\n+  -ms-user-select: none;\n+  user-select: none;\n+}\n+\n+.markdown-body .octicon-link:before {\n+  content: '\\f05c';\n+}\n+\n+.markdown-body .task-list-item {\n+  list-style-type: none;\n+}\n+\n+.markdown-body .task-list-item+.task-list-item {\n+  margin-top: 3px;\n+}\n+\n+.markdown-body .task-list-item input {\n+  float: left;\n+  margin: 0.3em 0 0.25em -1.6em;\n+  vertical-align: middle;\n+}\n\\ No newline at end of file\n"