Fix bug on data attributes for first vertical slide.
authorVonC <vonc@laposte.net>
Thu, 10 Oct 2013 08:57:18 +0000 (10:57 +0200)
committerVonC <vonc@laposte.net>
Mon, 4 Nov 2013 15:31:18 +0000 (16:31 +0100)
The first slide of a vertical stack see some data attributes ignored.

Mainly the data-transition one.

Repeat all data-attributes on the wrapping section element.

Ignore any other attributes (like 'id="xxx"'), in order to not
mess with internal links (by repeating twice an id).

plugin/markdown/markdown.js

index b5476aa73eefe085defdc8b273ebd7a4555a5233..537a0c54d1051ca3818c0f766a726a84b931f5d6 100755 (executable)
                for( var i = 0, len = sectionStack.length; i < len; i++ ) {
                        // vertical
                        if( sectionStack[i] instanceof Array ) {
-                               markdownSections += '<section '+ options.attributes +'>';
+                               // The 'data-xxx' attributes of the first child must be set on the wrapping parent section to be effective
+                               // Mainly for data-transition (otherwise, it is ignored for the first vertical slide)
+                               firstChild = sectionStack[i][0];
+                               matchAttributes = slideAttributesSeparatorRegex.exec(firstChild);
+                               slideAttributes = matchAttributes ? matchAttributes[1] : "";
+                               if( slideAttributes != "") {
+                                       // console.log('all attr=' + slideAttributes );
+                                       // http://stackoverflow.com/questions/18025762/javascript-regex-replace-all-word-characters-except-word-characters-between-ch
+                                       // Keep only data-attributes for the parent slide section.
+                                       dataAttributes = slideAttributes.replace(/(data-\S+=\"[^\"]+?\")|\w|[\"=]/g, function(a, b) { return b || ''; });
+                                       // console.log('new attr=' + dataAttributes );
+                                       markdownSections += '<section '+ options.attributes + ' ' + dataAttributes + '>';
+                               }
 
                                sectionStack[i].forEach( function( child ) {
                                        matchAttributes = slideAttributesSeparatorRegex.exec(child);
                                        slideAttributes = matchAttributes ? matchAttributes[1] : "";
                                        child = matchAttributes ? child.replace(slideAttributesSeparatorRegex,"") : child
+                                       // console.log('slide attributes ' + options.slideAttributesSeparator + ' => ' + slideAttributes)
                                        markdownSections += '<section ' + slideAttributes + ' data-markdown>' +  createMarkdownSlide( child, options ) + '</section>';
                                } );