2015-11-23 21:58:51 +00:00
|
|
|
window.common = (function(global) {
|
|
|
|
const {
|
|
|
|
Rx: { Observable },
|
|
|
|
common = { init: [] }
|
|
|
|
} = global;
|
|
|
|
|
2015-11-18 05:25:16 +00: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'
|
|
|
|
/>
|
2015-11-23 21:58:51 +00:00
|
|
|
<script src='https://cdn.jsdelivr.net/jquery/1.9.0/jquery.js'></script>
|
2015-11-18 05:25:16 +00:00
|
|
|
<style>
|
|
|
|
body { padding: 0px 3px 0px 3px; }
|
|
|
|
</style>
|
|
|
|
`;
|
|
|
|
|
2015-11-23 03:42:53 +00:00
|
|
|
const iFrameScript$ =
|
|
|
|
common.getScriptContent$('/js/iFrameScripts.js').shareReplay();
|
2015-11-18 05:25:16 +00:00
|
|
|
|
2015-11-23 03:42:53 +00:00
|
|
|
// runPreviewTests$ should be set up in the preview window
|
|
|
|
common.runPreviewTests$ =
|
|
|
|
() => Observable.throw({ err: new Error('run preview not enabled') });
|
2015-11-18 05:25:16 +00:00
|
|
|
|
2015-11-23 03:42:53 +00:00
|
|
|
common.updatePreview$ = function updatePreview$(code = '') {
|
2015-11-18 05:25:16 +00:00
|
|
|
const previewFrame = document.getElementById('preview');
|
|
|
|
const preview = previewFrame.contentDocument ||
|
|
|
|
previewFrame.contentWindow.document;
|
|
|
|
if (!preview) {
|
2015-11-23 03:42:53 +00:00
|
|
|
return Observable.just(code);
|
2015-11-18 05:25:16 +00:00
|
|
|
}
|
|
|
|
|
2015-11-23 03:42:53 +00:00
|
|
|
return iFrameScript$
|
|
|
|
.map(script => `<script>${script}</script>`)
|
2015-11-23 21:58:51 +00:00
|
|
|
.flatMap(script => {
|
2015-11-23 03:42:53 +00:00
|
|
|
preview.open();
|
2015-11-24 07:47:14 +00:00
|
|
|
preview.write(libraryIncludes + code + '<!-- -->' + script);
|
2015-11-23 03:42:53 +00:00
|
|
|
preview.close();
|
2015-11-23 21:58:51 +00:00
|
|
|
return Observable.fromCallback($(preview).ready, $(preview))()
|
|
|
|
.first()
|
|
|
|
// delay is need here for first initial run
|
2015-11-27 18:36:11 +00:00
|
|
|
.delay(100);
|
2015-11-23 03:42:53 +00:00
|
|
|
})
|
|
|
|
.map(() => code);
|
2015-11-18 05:25:16 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
return common;
|
|
|
|
}(window));
|