Вход Регистрация
Файл: library/wysihtml5/src/editor.js
Строк: 213
<?php
/**
 * WYSIHTML5 Editor
 *
 * @param {Element} textareaElement Reference to the textarea which should be turned into a rich text interface
 * @param {Object} [config] See defaultConfig object below for explanation of each individual config option
 *
 * @events
 *    load
 *    beforeload (for internal use only)
 *    focus
 *    focus:composer
 *    focus:textarea
 *    blur
 *    blur:composer
 *    blur:textarea
 *    change
 *    change:composer
 *    change:textarea
 *    paste
 *    paste:composer
 *    paste:textarea
 *    newword:composer
 *    destroy:composer
 *    undo:composer
 *    redo:composer
 *    beforecommand:composer
 *    aftercommand:composer
 *    enable:composer
 *    disable:composer
 *    change_view
 */
(function(wysihtml5) {
  var 
undef;
  
  var 
defaultConfig = {
    
// Give the editor a name, the name will also be set as class name on the iframe and on the iframe's body 
    
name:                 undef,
    
// Whether the editor should look like the textarea (by adopting styles)
    
style:                true,
    
// Id of the toolbar element, pass falsey value if you don't want any toolbar logic
    
toolbar:              undef,
    
// Whether urls, entered by the user should automatically become clickable-links
    
autoLink:             true,
    
// Object which includes parser rules to apply when html gets inserted via copy & paste
    // See parser_rules/*.js for examples
    
parserRules:          { tags: { br: {}, span: {}, div: {}, p: {} }, classes: {} },
    
// Parser method to use when the user inserts content via copy & paste
    
parser:               wysihtml5.dom.parse,
    
// Class name which should be set on the contentEditable element in the created sandbox iframe, can be styled via the 'stylesheets' option
    
composerClassName:    "wysihtml5-editor",
    
// Class name to add to the body when the wysihtml5 editor is supported
    
bodyClassName:        "wysihtml5-supported",
    
// By default wysihtml5 will insert a <br> for line breaks, set this to false to use <p>
    
useLineBreaks:        true,
    
// Array (or single string) of stylesheet urls to be loaded in the editor's iframe
    
stylesheets:          [],
    
// Placeholder text to use, defaults to the placeholder attribute on the textarea element
    
placeholderText:      undef,
    
// Whether the rich text editor should be rendered on touch devices (wysihtml5 >= 0.3.0 comes with basic support for iOS 5)
    
supportTouchDevices:  true,
    
// Whether senseless <span> elements (empty or without attributes) should be removed/replaced with their content
    
cleanUp:              true
  
};
  
  
wysihtml5.Editor wysihtml5.lang.Dispatcher.extend(
    
/** @scope wysihtml5.Editor.prototype */ {
    
constructor: function(textareaElementconfig) {
      
this.textareaElement  typeof(textareaElement) === "string" document.getElementById(textareaElement) : textareaElement;
      
this.config           wysihtml5.lang.object({}).merge(defaultConfig).merge(config).get();
      
this.textarea         = new wysihtml5.views.Textarea(thisthis.textareaElementthis.config);
      
this.currentView      this.textarea;
      
this._isCompatible    wysihtml5.browser.supported();
      
      
// Sort out unsupported/unwanted browsers here
      
if (!this._isCompatible || (!this.config.supportTouchDevices && wysihtml5.browser.isTouchDevice())) {
        var 
that this;
        
setTimeout(function() { that.fire("beforeload").fire("load"); }, 0);
        return;
      }
      
      
// Add class name to body, to indicate that the editor is supported
      
wysihtml5.dom.addClass(document.bodythis.config.bodyClassName);
      
      
this.composer = new wysihtml5.views.Composer(thisthis.textareaElementthis.config);
      
this.currentView this.composer;
      
      if (
typeof(this.config.parser) === "function") {
        
this._initParser();
      }
      
      
this.on("beforeload", function() {
        
this.synchronizer = new wysihtml5.views.Synchronizer(thisthis.textareathis.composer);
        if (
this.config.toolbar) {
          
this.toolbar = new wysihtml5.toolbar.Toolbar(thisthis.config.toolbar);
        }
      });
      
      try {
        
console.log("Heya! This page is using wysihtml5 for rich text editing. Check out https://github.com/xing/wysihtml5");
      } catch(
e) {}
    },
    
    
isCompatible: function() {
      return 
this._isCompatible;
    },

    
clear: function() {
      
this.currentView.clear();
      return 
this;
    },

    
getValue: function(parse) {
      return 
this.currentView.getValue(parse);
    },

    
setValue: function(htmlparse) {
      
this.fire("unset_placeholder");
      
      if (!
html) {
        return 
this.clear();
      }
      
      
this.currentView.setValue(htmlparse);
      return 
this;
    },

    
focus: function(setToEnd) {
      
this.currentView.focus(setToEnd);
      return 
this;
    },

    
/**
     * Deactivate editor (make it readonly)
     */
    
disable: function() {
      
this.currentView.disable();
      return 
this;
    },
    
    
/**
     * Activate editor
     */
    
enable: function() {
      
this.currentView.enable();
      return 
this;
    },
    
    
isEmpty: function() {
      return 
this.currentView.isEmpty();
    },
    
    
hasPlaceholderSet: function() {
      return 
this.currentView.hasPlaceholderSet();
    },
    
    
parse: function(htmlOrElement) {
      var 
returnValue this.config.parser(htmlOrElementthis.config.parserRulesthis.composer.sandbox.getDocument(), this.config.cleanUp);
      if (
typeof(htmlOrElement) === "object") {
        
wysihtml5.quirks.redraw(htmlOrElement);
      }
      return 
returnValue;
    },
    
    
/**
     * Prepare html parser logic
     *  - Observes for paste and drop
     */
    
_initParser: function() {
      
this.on("paste:composer", function() {
        var 
keepScrollPosition  true,
            
that                this;
        
that.composer.selection.executeAndRestore(function() {
          
wysihtml5.quirks.cleanPastedHTML(that.composer.element);
          
that.parse(that.composer.element);
        }, 
keepScrollPosition);
      });
    }
  });
})(
wysihtml5);
?>
Онлайн: 1
Реклама