@@ -73,20 +73,13 @@ function findPre(start) {
73
73
}
74
74
}
75
75
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 ;
80
81
}
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 ;
90
83
}
91
84
}
92
85
@@ -101,11 +94,8 @@ function getStylesFromIframe(iframe) {
101
94
102
95
module . exports = function ( ) {
103
96
var codepens = document . querySelectorAll ( ".codepen" ) ;
104
- var parents = [ ] ;
105
97
//remove the old codepen links
106
98
codepens . forEach ( function ( codepen , i ) {
107
- var el = findSelector ( codepen , 'pre, .demo_wrapper' ) ;
108
- parents . push ( el ) ;
109
99
codepen . parentNode . removeChild ( codepen ) ;
110
100
} ) ;
111
101
@@ -114,15 +104,9 @@ module.exports = function() {
114
104
var btn = document . createElement ( "button" ) ;
115
105
btn . innerHTML = "Run" ;
116
106
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 ) ;
124
108
125
- if ( el && matches . call ( el , 'pre' ) ) {
109
+ if ( ! demoWrapper && matches . call ( env . element . parentNode , 'pre' ) ) {
126
110
var language = env . language ;
127
111
var text = env . code ;
128
112
var data = types [ language ] ( text ) ;
@@ -143,12 +127,12 @@ module.exports = function() {
143
127
console . warn ( 'Unable to create a codepen for this demo' ) ;
144
128
}
145
129
}
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' ) ;
148
132
var htmlText = htmlCode ? htmlCode . textContent . trim ( ) : '' ;
149
- var jsCode = el . querySelector ( '[data-for=js] code' ) ;
133
+ var jsCode = demoWrapper . querySelector ( '[data-for=js] code' ) ;
150
134
var jsText = jsCode ? jsCode . textContent . trim ( ) : '' ;
151
- var cssText = getStylesFromIframe ( el . querySelector ( 'iframe' ) ) ;
135
+ var cssText = getStylesFromIframe ( demoWrapper . querySelector ( 'iframe' ) ) ;
152
136
var codePen = {
153
137
html : htmlText ,
154
138
js : jsText ,
0 commit comments