Files
freeCodeCamp/client/commonFramework/update-preview.js

49 lines
1.3 KiB
JavaScript
Raw Normal View History

2015-11-22 19:42:53 -08:00
window.common = (function({ Rx: { Observable }, common = { init: [] } }) {
2015-11-17 21:25:16 -08:00
var libraryIncludes = `
<link
rel='stylesheet'
href='//cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.min.css'
/>
<link
rel='stylesheet'
href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css'
/>
<link
rel='stylesheet'
href='//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css'
/>
<style>
body { padding: 0px 3px 0px 3px; }
</style>
`;
2015-11-22 19:42:53 -08:00
const iFrameScript$ =
common.getScriptContent$('/js/iFrameScripts.js').shareReplay();
2015-11-17 21:25:16 -08:00
2015-11-22 19:42:53 -08:00
// runPreviewTests$ should be set up in the preview window
common.runPreviewTests$ =
() => Observable.throw({ err: new Error('run preview not enabled') });
2015-11-17 21:25:16 -08:00
2015-11-22 19:42:53 -08:00
common.updatePreview$ = function updatePreview$(code = '') {
2015-11-17 21:25:16 -08:00
const previewFrame = document.getElementById('preview');
const preview = previewFrame.contentDocument ||
previewFrame.contentWindow.document;
if (!preview) {
2015-11-22 19:42:53 -08:00
return Observable.just(code);
2015-11-17 21:25:16 -08:00
}
2015-11-22 19:42:53 -08:00
return iFrameScript$
.map(script => `<script>${script}</script>`)
.doOnNext(script => {
preview.open();
preview.write(libraryIncludes + code + script);
preview.close();
})
.map(() => code);
2015-11-17 21:25:16 -08:00
};
return common;
}(window));