Skip to content

Commit c11b14f

Browse files
authored
Merge pull request #16 from bit-docs/is-registred-flag
Add isRegistred flag to prevent registering the button multiple times
2 parents 6d9f982 + 6c43fc5 commit c11b14f

File tree

1 file changed

+64
-60
lines changed

1 file changed

+64
-60
lines changed

index.js

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ function getStylesFromIframe(iframe) {
121121
return cssText;
122122
}
123123

124+
var isRegistred = false;
125+
124126
module.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

Comments
 (0)