Skip to content

Commit d579268

Browse files
committed
DOM queries enhancements
1 parent 2939c7d commit d579268

File tree

2 files changed

+13
-29
lines changed

2 files changed

+13
-29
lines changed

index.js

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

10295
module.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,

test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe("bit-docs-html-codepen-link", function() {
5656
createCallData.push(data);
5757
};
5858
var toolbars = doc.querySelectorAll('.toolbar');
59-
Array.from(toolbars).forEach(function(toolbar) {
59+
toolbars.forEach(function(toolbar) {
6060
var btn = toolbar.children[toolbar.children.length - 1].querySelector('button');
6161
btn.click();
6262
});

0 commit comments

Comments
 (0)