@@ -121,6 +121,8 @@ function getStylesFromIframe(iframe) {
121121 return cssText ;
122122}
123123
124+ var isRegistred = false ;
125+
124126module . exports = function ( ) {
125127 var codepens = document . querySelectorAll ( 'div.codepen' ) ;
126128 //remove the old codepen links
@@ -133,69 +135,71 @@ module.exports = function() {
133135 }
134136 } ) ;
135137
136- //Register PrismJS "Run" custom button
137- Prism . plugins . toolbar . registerButton ( "run-code" , function ( env ) {
138- var demoWrapper = findDemoWrapper ( env . element ) ;
139- var pre = env . element . parentElement ;
140- var hasRunBtn = demoWrapper ? demoWrapper . getAttribute ( "data-has-run" ) : pre . getAttribute ( "data-has-run" ) ;
141- //prevent other demos without codepen link to register Run button
142- if ( hasRunBtn ) {
143- var btn = document . createElement ( "button" ) ;
144- btn . innerHTML = "Run" ;
145- btn . setAttribute ( "data-run" , "" ) ;
146- return btn ;
147- }
148- } ) ;
149- document . body . addEventListener ( 'click' , function ( ev ) {
150- if ( ev . target . getAttribute ( 'data-run' ) != null ) {
151- var btn = ev . target ;
152- var demoWrapper = findDemoWrapper ( btn ) ;
153- if ( ! demoWrapper ) {
154- var preElement = findPreForToolbarBtn ( btn ) ;
155- var codeElement = preElement . querySelector ( "code" ) ;
156- var language = codeElement . className . match ( languageHTML ) [ 1 ] ;
157- var text = codeElement . textContent ;
158-
159- var data = types [ language ] ( text ) ;
160-
161- if ( data . js ) {
162- data . js = data . js . trim ( ) ;
163- }
164- if ( data . html ) {
165- data . html = data . html . trim ( ) ;
166- }
167- if ( data ) {
168- cleanCodePenData ( data ) ;
169- if ( window . CREATE_CODE_PEN ) {
170- CREATE_CODE_PEN ( data ) ;
171- } else {
172- createCodePen ( data ) ;
138+ if ( ! isRegistred ) {
139+ //Register PrismJS "Run" custom button
140+ Prism . plugins . toolbar . registerButton ( "run-code" , function ( env ) {
141+ var demoWrapper = findDemoWrapper ( env . element ) ;
142+ var pre = env . element . parentElement ;
143+ var hasRunBtn = demoWrapper ? demoWrapper . getAttribute ( "data-has-run" ) : pre . getAttribute ( "data-has-run" ) ;
144+ //prevent other demos without codepen link to register Run button
145+ if ( hasRunBtn ) {
146+ var btn = document . createElement ( "button" ) ;
147+ btn . innerHTML = "Run" ;
148+ btn . setAttribute ( "data-run" , "" ) ;
149+ return btn ;
150+ }
151+ } ) ;
152+ document . body . addEventListener ( 'click' , function ( ev ) {
153+ if ( ev . target . getAttribute ( 'data-run' ) != null ) {
154+ var btn = ev . target ;
155+ var demoWrapper = findDemoWrapper ( btn ) ;
156+ if ( ! demoWrapper ) {
157+ var preElement = findPreForToolbarBtn ( btn ) ;
158+ var codeElement = preElement . querySelector ( "code" ) ;
159+ var language = codeElement . className . match ( languageHTML ) [ 1 ] ;
160+ var text = codeElement . textContent ;
161+
162+ var data = types [ language ] ( text ) ;
163+
164+ if ( data . js ) {
165+ data . js = data . js . trim ( ) ;
166+ }
167+ if ( data . html ) {
168+ data . html = data . html . trim ( ) ;
173169 }
170+ if ( data ) {
171+ cleanCodePenData ( data ) ;
172+ if ( window . CREATE_CODE_PEN ) {
173+ CREATE_CODE_PEN ( data ) ;
174+ } else {
175+ createCodePen ( data ) ;
176+ }
174177
175- } else {
176- console . warn ( "Unable to create a codepen for this demo" ) ;
178+ } else {
179+ console . warn ( "Unable to create a codepen for this demo" ) ;
180+ }
177181 }
178- }
179- if ( demoWrapper && matches . call ( demoWrapper , '.demo_wrapper' ) ) {
180- var htmlCode = demoWrapper . querySelector ( '[data-for=html] code' ) ;
181- var htmlText = htmlCode ? htmlCode . textContent . trim ( ) : '' ;
182- var jsCode = demoWrapper . querySelector ( '[data-for=js] code' ) ;
183- var jsText = jsCode ? jsCode . textContent . trim ( ) : '' ;
184- var cssText = getStylesFromIframe ( demoWrapper . querySelector ( 'iframe' ) ) ;
185- var codePen = {
186- html : htmlText ,
187- js : jsText ,
188- js_module : true ,
189- editors : '1011' ,
190- css : cssText . trim ( )
191- } ;
192- cleanCodePenData ( codePen ) ;
193- if ( window . CREATE_CODE_PEN ) {
194- CREATE_CODE_PEN ( codePen ) ;
195- } else {
196- createCodePen ( codePen ) ;
182+ if ( demoWrapper && matches . call ( demoWrapper , '.demo_wrapper' ) ) {
183+ var htmlCode = demoWrapper . querySelector ( '[data-for=html] code' ) ;
184+ var htmlText = htmlCode ? htmlCode . textContent . trim ( ) : '' ;
185+ var jsCode = demoWrapper . querySelector ( '[data-for=js] code' ) ;
186+ var jsText = jsCode ? jsCode . textContent . trim ( ) : '' ;
187+ var cssText = getStylesFromIframe ( demoWrapper . querySelector ( 'iframe' ) ) ;
188+ var codePen = {
189+ html : htmlText ,
190+ js : jsText ,
191+ js_module : true ,
192+ editors : '1011' ,
193+ css : cssText . trim ( )
194+ } ;
195+ cleanCodePenData ( codePen ) ;
196+ if ( window . CREATE_CODE_PEN ) {
197+ CREATE_CODE_PEN ( codePen ) ;
198+ } else {
199+ createCodePen ( codePen ) ;
200+ }
197201 }
198202 }
199- }
200- } ) ;
203+ } ) ;
204+ }
201205} ;
0 commit comments