Update preview on keystroke
Also removes need to check for unfinished html comments
This commit is contained in:
		@@ -7,12 +7,15 @@ $(document).ready(function() {
 | 
			
		||||
    init($);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  common.editorKeyUp$
 | 
			
		||||
  const code$ = common.editorKeyUp$
 | 
			
		||||
    .debounce(750)
 | 
			
		||||
    .map(() => common.editor.getValue())
 | 
			
		||||
    .distinctUntilChanged()
 | 
			
		||||
    .doOnNext(() => console.log('updating value'))
 | 
			
		||||
    .subscribe(
 | 
			
		||||
    .shareReplay();
 | 
			
		||||
 | 
			
		||||
  // update storage
 | 
			
		||||
  code$.subscribe(
 | 
			
		||||
      code => {
 | 
			
		||||
        common.codeStorage.updateStorage(common.challengeName, code);
 | 
			
		||||
        common.codeUri.querify(code);
 | 
			
		||||
@@ -20,6 +23,28 @@ $(document).ready(function() {
 | 
			
		||||
      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$
 | 
			
		||||
    .doOnNext(() => {
 | 
			
		||||
      common.editor.setValue(common.replaceSafeTags(common.seed));
 | 
			
		||||
 
 | 
			
		||||
@@ -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)) {
 | 
			
		||||
          return Observable.throw({
 | 
			
		||||
            err: 'Invalid if (null) console.log(1); detected',
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ window.common = (function(global) {
 | 
			
		||||
      .map(script => `<script>${script}</script>`)
 | 
			
		||||
      .flatMap(script => {
 | 
			
		||||
        preview.open();
 | 
			
		||||
        preview.write(libraryIncludes + code + script);
 | 
			
		||||
        preview.write(libraryIncludes + code + '<!-- -->' + script);
 | 
			
		||||
        preview.close();
 | 
			
		||||
        return Observable.fromCallback($(preview).ready, $(preview))()
 | 
			
		||||
          .first()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user