Update preview on keystroke

Also removes need to check for unfinished html comments
This commit is contained in:
Berkeley Martinez
2015-11-23 23:47:14 -08:00
parent e8d9e31a47
commit 159b202940
3 changed files with 28 additions and 17 deletions

View File

@ -7,12 +7,15 @@ $(document).ready(function() {
init($); init($);
}); });
common.editorKeyUp$ const code$ = common.editorKeyUp$
.debounce(750) .debounce(750)
.map(() => common.editor.getValue()) .map(() => common.editor.getValue())
.distinctUntilChanged() .distinctUntilChanged()
.doOnNext(() => console.log('updating value')) .doOnNext(() => console.log('updating value'))
.subscribe( .shareReplay();
// update storage
code$.subscribe(
code => { code => {
common.codeStorage.updateStorage(common.challengeName, code); common.codeStorage.updateStorage(common.challengeName, code);
common.codeUri.querify(code); common.codeUri.querify(code);
@ -20,6 +23,28 @@ $(document).ready(function() {
err => console.error(err) err => console.error(err)
); );
code$
.flatMap(code => {
if (common.hasJs(code)) {
return common.detectLoops$(code)
.flatMap(
({ err }) => err ? Observable.throw(err) : Observable.just(code)
);
}
return Observable.just(code);
})
.flatMap(code => common.updatePreview$(code))
.catch(err => Observable.just({ err }))
.subscribe(
({ err }) => {
if (err) {
return console.error(err);
}
console.log('updating preview');
},
err => console.error(err)
);
common.resetBtn$ common.resetBtn$
.doOnNext(() => { .doOnNext(() => {
common.editor.setValue(common.replaceSafeTags(common.seed)); common.editor.setValue(common.replaceSafeTags(common.seed));

View File

@ -60,20 +60,6 @@ window.common = (function(global) {
}); });
} }
if (common.challengeType === '0') {
let openingComments = code.match(/\<\!\-\-/gi);
let closingComments = code.match(/\-\-\>/gi) || [];
if (
openingComments &&
openingComments.length > closingComments.length
) {
return Observable.throw({
err: 'SyntaxError: Unfinished HTML comment',
code
});
}
}
if (code.match(detectUnsafeConsoleCall)) { if (code.match(detectUnsafeConsoleCall)) {
return Observable.throw({ return Observable.throw({
err: 'Invalid if (null) console.log(1); detected', err: 'Invalid if (null) console.log(1); detected',

View File

@ -43,7 +43,7 @@ window.common = (function(global) {
.map(script => `<script>${script}</script>`) .map(script => `<script>${script}</script>`)
.flatMap(script => { .flatMap(script => {
preview.open(); preview.open();
preview.write(libraryIncludes + code + script); preview.write(libraryIncludes + code + '<!-- -->' + script);
preview.close(); preview.close();
return Observable.fromCallback($(preview).ready, $(preview))() return Observable.fromCallback($(preview).ready, $(preview))()
.first() .first()