Skip to content

Commit 40f8052

Browse files
committed
codepens work with demos
1 parent 7d6afa1 commit 40f8052

File tree

4 files changed

+85
-9
lines changed

4 files changed

+85
-9
lines changed

foo.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<h1>Hi There!</h1>
2+
3+
<script>
4+
var code = "code";
5+
</script>
6+
7+
<style>
8+
h1 {color: red;}
9+
</style>

index.js

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,21 @@ function createCodePen(data) {
2626
}
2727

2828

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+
3044

3145
function findPre(start) {
3246
while(start) {
@@ -45,15 +59,40 @@ function findPre(start) {
4559
}
4660
}
4761

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+
4888
module.exports = function() {
4989

5090
document.body.addEventListener("click", function(ev){
51-
5291
if(matches.call(ev.target, ".codepen")){
5392

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;
5796
var codeElement = preElement.querySelector("code");
5897
var language = codeElement.className.match(languageHTML)[1];
5998
var text = codeElement.textContent;
@@ -82,8 +121,32 @@ module.exports = function() {
82121
} else {
83122
console.warn("Unable to create a codepen for this demo");
84123
}
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+
}
85147

86148
}
149+
87150
}
88151
});
89152
};

test-demo.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,6 @@ import {DefineMap} from "can";
2828
console.log( myCounter.count ) //-> 1
2929
```
3030
<div class='codepen'></div>
31+
32+
<div class='demo_wrapper' data-demo-src='foo.html'></div>
33+
<div class='codepen'></div>

test.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var Browser = require("zombie");
88
var connect = require("connect");
99

1010
var open = function(url, callback, done) {
11-
var server = connect().use(connect.static(path.join(__dirname, "temp"))).listen(8081);
11+
var server = connect().use(connect.static(path.join(__dirname))).listen(8081);
1212
var browser = new Browser();
1313
browser.visit("http://localhost:8081/" + url)
1414
.then(function() {
@@ -22,7 +22,7 @@ var open = function(url, callback, done) {
2222
};
2323

2424
describe("bit-docs-html-codepen-link", function() {
25-
it("basics works", function(done) {
25+
it.only("basics works", function(done) {
2626
this.timeout(60000);
2727

2828
var docMap = Promise.resolve({
@@ -39,15 +39,16 @@ describe("bit-docs-html-codepen-link", function() {
3939
generate(docMap, {
4040
html: {
4141
dependencies: {
42-
"bit-docs-html-codepen-link": __dirname
42+
"bit-docs-html-codepen-link": __dirname,
43+
"bit-docs-tag-demo": "^0.5.3"
4344
}
4445
},
4546
dest: path.join(__dirname, "temp"),
4647
parent: "index",
4748
forceBuild: true,
4849
minifyBuild: false
4950
}).then(function() {
50-
open("index.html",function(browser, close) {
51+
open("temp/index.html",function(browser, close) {
5152
var doc = browser.window.document;
5253
var createCallData = [];
5354
browser.window.CREATE_CODE_PEN = function(data){

0 commit comments

Comments
 (0)