Вход Регистрация
Файл: library/wysihtml5/src/views/synchronizer.js
Строк: 94
<?php
/**
 * Class that takes care that the value of the composer and the textarea is always in sync
 */
(function(wysihtml5) {
  var 
INTERVAL 400;
  
  
wysihtml5.views.Synchronizer Base.extend(
    
/** @scope wysihtml5.views.Synchronizer.prototype */ {

    
constructor: function(editortextareacomposer) {
      
this.editor   editor;
      
this.textarea textarea;
      
this.composer composer;

      
this._observe();
    },

    
/**
     * Sync html from composer to textarea
     * Takes care of placeholders
     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the textarea
     */
    
fromComposerToTextarea: function(shouldParseHtml) {
      
this.textarea.setValue(wysihtml5.lang.string(this.composer.getValue()).trim(), shouldParseHtml);
    },

    
/**
     * Sync value of textarea to composer
     * Takes care of placeholders
     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer
     */
    
fromTextareaToComposer: function(shouldParseHtml) {
      var 
textareaValue this.textarea.getValue();
      if (
textareaValue) {
        
this.composer.setValue(textareaValueshouldParseHtml);
      } else {
        
this.composer.clear();
        
this.editor.fire("set_placeholder");
      }
    },

    
/**
     * Invoke syncing based on view state
     * @param {Boolean} shouldParseHtml Whether the html should be sanitized before inserting it into the composer/textarea
     */
    
sync: function(shouldParseHtml) {
      if (
this.editor.currentView.name === "textarea") {
        
this.fromTextareaToComposer(shouldParseHtml);
      } else {
        
this.fromComposerToTextarea(shouldParseHtml);
      }
    },

    
/**
     * Initializes interval-based syncing
     * also makes sure that on-submit the composer's content is synced with the textarea
     * immediately when the form gets submitted
     */
    
_observe: function() {
      var 
interval,
          
that          this,
          
form          this.textarea.element.form,
          
startInterval = function() {
            
interval setInterval(function() { that.fromComposerToTextarea(); }, INTERVAL);
          },
          
stopInterval  = function() {
            
clearInterval(interval);
            
interval null;
          };

      
startInterval();

      if (
form) {
        
// If the textarea is in a form make sure that after onreset and onsubmit the composer
        // has the correct state
        
wysihtml5.dom.observe(form"submit", function() {
          
that.sync(true);
        });
        
wysihtml5.dom.observe(form"reset", function() {
          
setTimeout(function() { that.fromTextareaToComposer(); }, 0);
        });
      }

      
this.editor.on("change_view", function(view) {
        if (
view === "composer" && !interval) {
          
that.fromTextareaToComposer(true);
          
startInterval();
        } else if (
view === "textarea") {
          
that.fromComposerToTextarea(true);
          
stopInterval();
        }
      });

      
this.editor.on("destroy:composer"stopInterval);
    }
  });
})(
wysihtml5);
?>
Онлайн: 1
Реклама