@@ -26,7 +26,21 @@ function createCodePen(data) {
26
26
}
27
27
28
28
29
- var matches = document . body . matches || document . body . msMatchesSelector ;
29
+ var browserMatches = document . body . matches || document . body . msMatchesSelector ;
30
+ function matches ( selector ) {
31
+ if ( this . nodeType === 1 ) {
32
+ if ( selector . indexOf ( "," ) >= 0 ) {
33
+ return selector . split ( "," ) . some ( function ( selector ) {
34
+ return browserMatches . call ( this , selector ) ;
35
+ } , this ) ;
36
+ } else {
37
+ return browserMatches . call ( this , selector ) ;
38
+ }
39
+ } else {
40
+ return false ;
41
+ }
42
+ }
43
+
30
44
31
45
function findPre ( start ) {
32
46
while ( start ) {
@@ -45,15 +59,40 @@ function findPre(start) {
45
59
}
46
60
}
47
61
62
+ function findSelector ( start , selector ) {
63
+ while ( start ) {
64
+ if ( matches . call ( start , selector ) ) {
65
+ return start ;
66
+ }
67
+ if ( start . querySelector ) {
68
+ var pre = start . querySelector ( selector ) ;
69
+ if ( pre ) {
70
+ return pre ;
71
+ }
72
+ }
73
+
74
+ // needs to be previousSibling for zombie
75
+ start = start . previousSibling ;
76
+ }
77
+ }
78
+
79
+ function getStylesFromIframe ( iframe ) {
80
+ var styles = iframe . contentDocument . documentElement . querySelectorAll ( "style" ) ;
81
+ var cssText = "" ;
82
+ styles . forEach ( function ( style ) {
83
+ cssText += style . innerHTML ;
84
+ } ) ;
85
+ return cssText ;
86
+ }
87
+
48
88
module . exports = function ( ) {
49
89
50
90
document . body . addEventListener ( "click" , function ( ev ) {
51
-
52
91
if ( matches . call ( ev . target , ".codepen" ) ) {
53
92
54
- var preElement = findPre ( ev . target ) ;
55
-
56
- if ( preElement ) {
93
+ var el = findSelector ( ev . target , "pre, .demo_wrapper" ) ;
94
+ if ( el && matches . call ( el , "pre" ) ) {
95
+ var preElement = el ;
57
96
var codeElement = preElement . querySelector ( "code" ) ;
58
97
var language = codeElement . className . match ( languageHTML ) [ 1 ] ;
59
98
var text = codeElement . textContent ;
@@ -82,8 +121,32 @@ module.exports = function() {
82
121
} else {
83
122
console . warn ( "Unable to create a codepen for this demo" ) ;
84
123
}
124
+ }
125
+ if ( el && matches . call ( el , ".demo_wrapper" ) ) {
126
+ var htmlCode = el . querySelector ( "[data-for=html] code" ) ;
127
+ var htmlText = htmlCode ? htmlCode . textContent . trim ( ) : "" ;
128
+
129
+ var jsCode = el . querySelector ( "[data-for=js] code" ) ;
130
+ var jsText = jsCode ? jsCode . textContent . trim ( ) : "" ;
131
+
132
+ var cssText = getStylesFromIframe ( el . querySelector ( "iframe" ) ) ;
133
+
134
+ var codePen = {
135
+ html : htmlText ,
136
+ js : jsText ,
137
+ js_module : true ,
138
+ editors : "1011" ,
139
+ css : cssText . trim ( )
140
+ } ;
141
+
142
+ if ( window . CREATE_CODE_PEN ) {
143
+ CREATE_CODE_PEN ( codePen ) ;
144
+ } else {
145
+ createCodePen ( codePen ) ;
146
+ }
85
147
86
148
}
149
+
87
150
}
88
151
} ) ;
89
152
} ;
0 commit comments