@@ -73,20 +73,13 @@ function findPre(start) {
7373 }
7474}
7575
76- function findSelector ( start , selector ) {
77- while ( start ) {
78- if ( matches . call ( start , selector ) ) {
79- return start ;
76+ function findDemoWrapper ( el ) {
77+ while ( el && el . parentNode ) {
78+ if ( matches . call ( el . parentNode , '.demo_wrapper' ) ) {
79+ var demoWrapper = el . parentNode ;
80+ return demoWrapper ;
8081 }
81- if ( start . querySelector ) {
82- var pre = start . querySelector ( selector ) ;
83- if ( pre ) {
84- return pre ;
85- }
86- }
87-
88- // needs to be previousSibling for zombie
89- start = start . previousSibling ;
82+ el = el . parentNode ;
9083 }
9184}
9285
@@ -101,11 +94,8 @@ function getStylesFromIframe(iframe) {
10194
10295module . exports = function ( ) {
10396 var codepens = document . querySelectorAll ( ".codepen" ) ;
104- var parents = [ ] ;
10597 //remove the old codepen links
10698 codepens . forEach ( function ( codepen , i ) {
107- var el = findSelector ( codepen , 'pre, .demo_wrapper' ) ;
108- parents . push ( el ) ;
10999 codepen . parentNode . removeChild ( codepen ) ;
110100 } ) ;
111101
@@ -114,15 +104,9 @@ module.exports = function() {
114104 var btn = document . createElement ( "button" ) ;
115105 btn . innerHTML = "Run" ;
116106 btn . addEventListener ( 'click' , function ( ) {
117- var el ;
118- for ( var i = 0 ; i < parents . length ; i ++ ) {
119- if ( parents [ i ] . contains ( env . element ) ) {
120- el = parents [ i ] ;
121- break ;
122- }
123- } ;
107+ var demoWrapper = findDemoWrapper ( env . element ) ;
124108
125- if ( el && matches . call ( el , 'pre' ) ) {
109+ if ( ! demoWrapper && matches . call ( env . element . parentNode , 'pre' ) ) {
126110 var language = env . language ;
127111 var text = env . code ;
128112 var data = types [ language ] ( text ) ;
@@ -143,12 +127,12 @@ module.exports = function() {
143127 console . warn ( 'Unable to create a codepen for this demo' ) ;
144128 }
145129 }
146- if ( el && matches . call ( el , '.demo_wrapper' ) ) {
147- var htmlCode = el . querySelector ( '[data-for=html] code' ) ;
130+ if ( demoWrapper && matches . call ( demoWrapper , '.demo_wrapper' ) ) {
131+ var htmlCode = demoWrapper . querySelector ( '[data-for=html] code' ) ;
148132 var htmlText = htmlCode ? htmlCode . textContent . trim ( ) : '' ;
149- var jsCode = el . querySelector ( '[data-for=js] code' ) ;
133+ var jsCode = demoWrapper . querySelector ( '[data-for=js] code' ) ;
150134 var jsText = jsCode ? jsCode . textContent . trim ( ) : '' ;
151- var cssText = getStylesFromIframe ( el . querySelector ( 'iframe' ) ) ;
135+ var cssText = getStylesFromIframe ( demoWrapper . querySelector ( 'iframe' ) ) ;
152136 var codePen = {
153137 html : htmlText ,
154138 js : jsText ,
0 commit comments