merge support for notes when using external markdown
authorHakim El Hattab <hakim.elhattab@gmail.com>
Wed, 21 Aug 2013 02:32:19 +0000 (22:32 -0400)
committerHakim El Hattab <hakim.elhattab@gmail.com>
Wed, 21 Aug 2013 02:32:19 +0000 (22:32 -0400)
1  2 
README.md
plugin/markdown/example.html
plugin/markdown/example.md
plugin/markdown/markdown.js

diff --cc README.md
index a8fcaeb7666765641ab273eb0b27bb50eceefb44,e2e50c6f5fb88844fe8fffcacc7850f1c443b77e..56df5a43eae92a1b0f1cf7bd6a26d1eba2b5dc90
+++ b/README.md
@@@ -52,10 -52,10 +52,10 @@@ This is based on [data-markdown](https:
  
  #### External Markdown
  
 -You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file.
 +You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file. The ```data-charset``` attribute is optional and specifies which charset to use when loading the external file.
  
  ```html
- <section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n" data-charset="iso-8859-15"></section>
 -<section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n" data-notes="^[[["></section>
++<section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n" data-notes="^Note:" data-charset="iso-8859-15"></section>
  ```
  
  ### Configuration
index ceed53fb4fd29006ee7de39fdb6f47204c6bb883,1253cbac7258e32de0fbeb15ff3ac0d2980e7439..0b07aa59adc007fc1abfd8a67fa563867580db33
@@@ -87,7 -87,7 +87,8 @@@
                                dependencies: [
                                        { src: '../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
                                        { src: 'marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
--                                      { src: 'markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }
++                    { src: 'markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
++                                      { src: '../notes/notes.js' }
                                ]
                        });
  
index e988dd9c261a17663cdccbd4dd07e7d8ff4f06d2,e988dd9c261a17663cdccbd4dd07e7d8ff4f06d2..6f6f577a15a1296ffb920988952cb311c61e0f7d
@@@ -6,6 -6,6 +6,8 @@@
  
  Content 1.1
  
++Note: This will only appear in the speaker notes window.
++
  
  ## External 1.2
  
index a5abc30d21ac6fa7b32e4cd3f0d0b7048095042a,8366c501844fb9692edf04314f96723f948cddef..bc771e7f019b0074aa3c58e69a5c1ada1e382151
@@@ -36,7 -28,9 +36,9 @@@
      };
  
      var twrap = function(el) {
-       return marked(el);
 -      var cnt = el.content || el;
 -      cnt += el.asideContent ? ('<aside class="notes" data-markdown>' + el.asideContent + '</aside>') : '';
 -      return '<script type="text/template">' + cnt + '</script>';
++        var content = el.content || el;
++        content += el.asideContent ? ('<aside class="notes" data-markdown>' + el.asideContent + '</aside>') : '';
++        return '<script type="text/template">' + content + '</script>';
      };
  
      var getForwardedAttributes = function(section) {
          }
  
          return result.join( ' ' );
 -    }
 +    };
  
-     var slidifyMarkdown = function(markdown, separator, vertical, attributes) {
+     var slidifyMarkdown = function(markdown, separator, vertical, notes, attributes) {
  
          separator = separator || '^\n---\n$';
++        notes = notes || 'note:';
  
--        var reSeparator = new RegExp(separator + (vertical ? '|' + vertical : ''), 'mg'),
--            reHorSeparator = new RegExp(separator),
 -            notesSeparator = new RegExp(notes, 'mg'),
++        var separatorRegex = new RegExp( separator + ( vertical ? '|' + vertical : '' ), 'mg' ),
++            horizontalSeparatorRegex = new RegExp( separator ),
++            notesSeparatorRegex = new RegExp( notes, 'mgi' ),
              matches,
+             noteMatch,
              lastIndex = 0,
              isHorizontal,
              wasHorizontal = true,
              markdownSections = '';
  
          // iterate until all blocks between separators are stacked up
--        while( matches = reSeparator.exec(markdown) ) {
++        while( matches = separatorRegex.exec( markdown ) ) {
+             asideContent = null;
  
              // determine direction (horizontal by default)
--            isHorizontal = reHorSeparator.test(matches[0]);
++            isHorizontal = horizontalSeparatorRegex.test( matches[0] );
  
              if( !isHorizontal && wasHorizontal ) {
                  // create vertical stack
--                sectionStack.push([]);
++                sectionStack.push( [] );
              }
  
              // pluck slide content from markdown input
--            content = markdown.substring(lastIndex, matches.index);
 -            noteMatch = content.split(notesSeparator);
++            content = markdown.substring( lastIndex, matches.index );
++            noteMatch = content.split( notesSeparatorRegex );
 -            if(noteMatch.length === 2) {
++            if( noteMatch.length === 2 ) {
+                 content = noteMatch[0];
+                 asideContent = noteMatch[1].trim();
+             }
+             slide = {
+                 content: content,
+                 asideContent: asideContent || ""
+             };
  
              if( isHorizontal && wasHorizontal ) {
                  // add to horizontal stack
-                 sectionStack.push(content);
+                 sectionStack.push(slide);
              } else {
                  // add to vertical stack
-                 sectionStack[sectionStack.length-1].push(content);
+                 sectionStack[sectionStack.length-1].push(slide);
              }
  
--            lastIndex = reSeparator.lastIndex;
++            lastIndex = separatorRegex.lastIndex;
              wasHorizontal = isHorizontal;
          }
  
          // add the remaining slide
  
          // flatten the hierarchical stack, and insert <section data-markdown> tags
          for( var k = 0, klen = sectionStack.length; k < klen; k++ ) {
-             // horizontal
-             if( typeof sectionStack[k] === 'string' ) {
-                 markdownSections += '<section '+ attributes +'>' +  twrap( sectionStack[k] )  + '</section>';
-             }
              // vertical
-             else {
 -           if(sectionStack[k].propertyIsEnumerable(length) && typeof sectionStack[k].splice === "function") {
++            if( sectionStack[k].propertyIsEnumerable(length) && typeof sectionStack[k].splice === 'function' ) {
                  markdownSections += '<section '+ attributes +'>' +
-                                         '<section>' +  sectionStack[k].map(twrap).join('</section><section>') + '</section>' +
+                                         '<section data-markdown>' +  sectionStack[k].map(twrap).join('</section><section data-markdown>') + '</section>' +
                                      '</section>';
+             } else {
+                 markdownSections += '<section '+ attributes +' data-markdown>' + twrap( sectionStack[k] ) + '</section>';
              }
          }