dijit/_editor/RichText.js

  • Provides:

    • dijit._editor.RichText
  • dijit._editor.RichText

    • type
      Function
    • chains:
      • dijit._Widget: (prototype)
      • dijit._Widget: (call)
      • dijit._CssStateMixin: (call)
    • mixins:
      • dijit._CssStateMixin.prototype: (prototype)
    • parameters:
      • params: (typeof )
    • source: [view]
      define("dijit/_editor/RichText", ["dojo", "dijit", "dijit/_Widget", "dijit/_CssStateMixin", "dijit/_editor/selection", "dijit/_editor/range", "dijit/_editor/html"], function(dojo, dijit) {


      // used to restore content when user leaves this page then comes back
      // but do not try doing dojo.doc.write if we are using xd loading.
      // dojo.doc.write will only work if RichText.js is included in the dojo.js
      // file. If it is included in dojo.js and you want to allow rich text saving
      // for back/forward actions, then set dojo.config.allowXdRichTextSave = true.
      if(!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"]){
       if(dojo._postLoad){
        (function(){
         var savetextarea = dojo.doc.createElement('textarea');
         savetextarea.id = dijit._scopeName + "._editor.RichText.value";
         dojo.style(savetextarea, {
          display:'none',
          position:'absolute',
          top:"-100px",
          height:"3px",
          width:"3px"
         });
         dojo.body().appendChild(savetextarea);
        })();
       }else{
        //dojo.body() is not available before onLoad is fired
        try{
         dojo.doc.write('');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
    • summary
      dijit._editor.RichText is the core of dijit.Editor, which provides basic
      WYSIWYG editing features.
    • description
      dijit._editor.RichText is the core of dijit.Editor, which provides basic
      WYSIWYG editing features. It also encapsulates the differences
      of different js engines for various browsers.  Do not use this widget
      with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
      like &lt;.  This can have unexpected behavior and lead to security issues
      such as scripting attacks.
    • tags:
  • dijit._editor.RichText.baseClass

    • summary
  • dijit._editor.RichText.inheritWidth

    • type
      Boolean
    • summary
      whether to inherit the parent's width or simply use 100%
  • dijit._editor.RichText.focusOnLoad

    • tags: deprecated
    • type
      Boolean
    • summary
      Focus into this widget when the page is loaded
  • dijit._editor.RichText.name

    • type
      String
    • summary
      Specifies the name of a (hidden) &lt;textarea&gt; node on the page that's used to save
      the editor content on page leave.   Used to restore editor contents after navigating
      to a new page and then hitting the back button.
  • dijit._editor.RichText.styleSheets

    • tags: const
    • type
      String
    • summary
      semicolon (&quot;;&quot;) separated list of css files for the editing area
  • dijit._editor.RichText.height

    • type
      String
    • summary
      Set height to fix the editor at a specific height, with scrolling.
      By default, this is 300px.  If you want to have the editor always
      resizes to accommodate the content, use AlwaysShowToolbar plugin
      and set height=&quot;&quot;.  If this editor is used within a layout widget,
      set height=&quot;100%&quot;.
  • dijit._editor.RichText.minHeight

    • type
      String
    • summary
      The minimum height that the editor should have.
  • dijit._editor.RichText.isClosed

    • tags: private
    • type
      Boolean
    • summary
  • dijit._editor.RichText.isLoaded

    • tags: private
    • type
      Boolean
    • summary
  • dijit._editor.RichText._SEPARATOR

    • tags: private
    • type
      String
    • summary
      Used to concat contents from multiple editors into a single string,
      so they can be saved into a single &lt;textarea&gt; node.  See &quot;name&quot; attribute.
  • dijit._editor.RichText._NAME_CONTENT_SEP

    • tags: private
    • type
      String
    • summary
      USed to separate name from content.  Just a colon isn't safe.
  • dijit._editor.RichText.onLoadDeferred

    • tags: readonly
    • type
      dojo.Deferred
    • summary
      Deferred which is fired when the editor finishes loading.
      Call myEditor.onLoadDeferred.then(callback) it to be informed
      when the rich-text area initialization is finalized.
  • dijit._editor.RichText.isTabIndent

    • type
      Boolean
    • summary
      Make tab key and shift-tab indent and outdent rather than navigating.
      Caution: sing this makes web pages inaccessible to users unable to use a mouse.
  • dijit._editor.RichText.disableSpellCheck

    • tags: const
    • type
      Boolean
    • summary
      When true, disables the browser's native spell checking, if supported.
      Works only in Firefox.
  • dijit._editor.RichText.postCreate

    • type
      Function
    • source: [view]
        if("textarea" == this.domNode.tagName.toLowerCase()){
         console.warn("RichText should not be used with the TEXTAREA tag. See dijit._editor.RichText docs.");
        }


        // Push in the builtin filters now, making them the first executed, but not over-riding anything
        // users passed in. See: #6062
        this.contentPreFilters = [dojo.hitch(this, "_preFixUrlAttributes")].concat(this.contentPreFilters);
        if(dojo.isMoz){
         this.contentPreFilters = [this._normalizeFontStyle].concat(this.contentPreFilters);
         this.contentPostFilters = [this._removeMozBogus].concat(this.contentPostFilters);
        }
        if(dojo.isWebKit){
         // Try to clean up WebKit bogus artifacts. The inserted classes
         // made by WebKit sometimes messes things up.
         this.contentPreFilters = [this._removeWebkitBogus].concat(this.contentPreFilters);
         this.contentPostFilters = [this._removeWebkitBogus].concat(this.contentPostFilters);
        }
        if(dojo.isIE){
         // IE generates and but we want to normalize to and
         this.contentPostFilters = [this._normalizeFontStyle].concat(this.contentPostFilters);
        }
        this.inherited(arguments);


        dojo.publish(dijit._scopeName + "._editor.RichText::init", [this]);
        this.open();
        this.setupDefaultShortcuts();
    • summary
  • dijit._editor.RichText.setupDefaultShortcuts

    • type
      Function
    • source: [view]
        var exec = dojo.hitch(this, function(cmd, arg){
         return function(){
          return !this.execCommand(cmd,arg);
         };
        });


        var ctrlKeyHandlers = {
         b: exec("bold"),
         i: exec("italic"),
         u: exec("underline"),
         a: exec("selectall"),
         s: function(){ this.save(true); },
         m: function(){ this.isTabIndent = !this.isTabIndent; },


         "1": exec("formatblock", "h1"),
         "2": exec("formatblock", "h2"),
         "3": exec("formatblock", "h3"),
         "4": exec("formatblock", "h4"),


         "\\": exec("insertunorderedlist")
        };


        if(!dojo.isIE){
         ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
        }


        for(var key in ctrlKeyHandlers){
         this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
        }
    • summary
      Add some default key handlers
    • description
      Overwrite this to setup your own handlers. The default
      implementation does not use Editor commands, but directly
      executes the builtin commands within the underlying browser
      support.
    • tags:
  • dijit._editor.RichText.events

    • tags: private
    • type
      String[
    • summary
      events which should be connected to the underlying editing area
  • dijit._editor.RichText.captureEvents

    • tags: deprecated
    • type
      String[
    • summary
      Events which should be connected to the underlying editing
      area, events in this array will be addListener with
      capture=true.
      TODO: looking at the code I don't see any distinction between events and captureEvents,
      so get rid of this for 2.0 if not sooner
  • dijit._editor.RichText._editorCommandsLocalized

    • summary
  • dijit._editor.RichText._localizeEditorCommands

    • type
      Function
    • source: [view]
        if(dijit._editor._editorCommandsLocalized){
         // Use the already generate cache of mappings.
         this._local2NativeFormatNames = dijit._editor._local2NativeFormatNames;
         this._native2LocalFormatNames = dijit._editor._native2LocalFormatNames;
         return;
        }
        dijit._editor._editorCommandsLocalized = true;
        dijit._editor._local2NativeFormatNames = {};
        dijit._editor._native2LocalFormatNames = {};
        this._local2NativeFormatNames = dijit._editor._local2NativeFormatNames;
        this._native2LocalFormatNames = dijit._editor._native2LocalFormatNames;
        //in IE, names for blockformat is locale dependent, so we cache the values here


        //put p after div, so if IE returns Normal, we show it as paragraph
        //We can distinguish p and div if IE returns Normal, however, in order to detect that,
        //we have to call this.document.selection.createRange().parentElement() or such, which
        //could slow things down. Leave it as it is for now
        var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
        var localhtml = "", format, i=0;
        while((format=formats[i++])){
         //append a
      after each element to separate the elements more reliably
         if(format.charAt(1) !== 'l'){
          localhtml += "<"+format+">content
      ";
         }else{
          localhtml += "<"+format+">
    • content

    • ";
         }
        }
        // queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
        // Also, IE9 does weird stuff unless we do it inside the editor iframe.
        var style = { position: "absolute", top: "0px", zIndex: 10, opacity: 0.01 };
        var div = dojo.create('div', {style: style, innerHTML: localhtml});
        dojo.body().appendChild(div);


        // IE9 has a timing issue with doing this right after setting
        // the inner HTML, so put a delay in.
        var inject = dojo.hitch(this, function(){
         var node = div.firstChild;
         while(node){
          try{
           dijit._editor.selection.selectElement(node.firstChild);
           var nativename = node.tagName.toLowerCase();
           this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
           this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
           node = node.nextSibling.nextSibling;
           //console.log("Mapped: ", nativename, " to: ", this._local2NativeFormatNames[nativename]);
          }catch(e) { /*Sqelch the occasional IE9 error */ }
         }
         div.parentNode.removeChild(div);
         div.innerHTML = "";
        });
        setTimeout(inject, 0);
  • summary
    When IE is running in a non-English locale, the API actually changes,
    so that we have to say (for example) danraku instead of p (for paragraph).
    Handle that here.
  • tags:
  • dijit._editor.RichText.open

    • type
      Function
    • parameters:
      • element: (typeof DomNode)
    • source: [view]
        if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
         this.onLoadDeferred = new dojo.Deferred();
        }


        if(!this.isClosed){ this.close(); }
        dojo.publish(dijit._scopeName + "._editor.RichText::open", [ this ]);


        if(arguments.length == 1 && element.nodeName){ // else unchanged
         this.domNode = element;
        }


        var dn = this.domNode;


        // "html" will hold the innerHTML of the srcNodeRef and will be used to
        // initialize the editor.
        var html;


        if(dojo.isString(this.value)){
         // Allow setting the editor content programmatically instead of
         // relying on the initial content being contained within the target
         // domNode.
         html = this.value;
         delete this.value;
         dn.innerHTML = "";
        }else if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
         // if we were created from a textarea, then we need to create a
         // new editing harness node.
         var ta = (this.textarea = dn);
         this.name = ta.name;
         html = ta.value;
         dn = this.domNode = dojo.doc.createElement("div");
         dn.setAttribute('widgetId', this.id);
         ta.removeAttribute('widgetId');
         dn.cssText = ta.cssText;
         dn.className += " " + ta.className;
         dojo.place(dn, ta, "before");
         var tmpFunc = dojo.hitch(this, function(){
          //some browsers refuse to submit display=none textarea, so
          //move the textarea off screen instead
          dojo.style(ta, {
           display: "block",
           position: "absolute",
           top: "-1000px"
          });


          if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
           var s = ta.style;
           this.__overflow = s.overflow;
           s.overflow = "hidden";
          }
         });
         if(dojo.isIE){
          setTimeout(tmpFunc, 10);
         }else{
          tmpFunc();
         }


         if(ta.form){
          var resetValue = ta.value;
          this.reset = function(){
           var current = this.getValue();
           if(current != resetValue){
            this.replaceValue(resetValue);
           }
          };
          dojo.connect(ta.form, "onsubmit", this, function(){
           // Copy value to the ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden) ');
        }catch(e){ }
       }
      }


      dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
       constructor: function(params){
        // summary:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features.
        //
        // description:
        //  dijit._editor.RichText is the core of dijit.Editor, which provides basic
        //  WYSIWYG editing features. It also encapsulates the differences
        //  of different js engines for various browsers. Do not use this widget
        //  with an HTML <TEXTAREA> tag, since the browser unescapes XML escape characters,
        //  like <. This can have unexpected behavior and lead to security issues
        //  such as scripting attacks.
        //
        // tags:
        //  private


        // contentPreFilters: Function(String)[]
        //  Pre content filter function register array.
        //  these filters will be executed before the actual
        //  editing area gets the html content.
        this.contentPreFilters = [];


        // contentPostFilters: Function(String)[]
        //  post content filter function register array.
        //  These will be used on the resulting html
        //  from contentDomPostFilters. The resulting
        //  content is the final html (returned by getValue()).
        this.contentPostFilters = [];


        // contentDomPreFilters: Function(DomNode)[]
        //  Pre content dom filter function register array.
        //  These filters are applied after the result from
        //  contentPreFilters are set to the editing area.
        this.contentDomPreFilters = [];


        // contentDomPostFilters: Function(DomNode)[]
        //  Post content dom filter function register array.
        //  These filters are executed on the editing area dom.
        //  The result from these will be passed to contentPostFilters.
        this.contentDomPostFilters = [];


        // editingAreaStyleSheets: dojo._URL[]
        //  array to store all the stylesheets applied to the editing area
        this.editingAreaStyleSheets = [];


        // Make a copy of this.events before we start writing into it, otherwise we
        // will modify the prototype which leads to bad things on pages w/multiple editors
        this.events = [].concat(this.events);


        this._keyHandlers = {};


        if(params && dojo.isString(params.value)){
         this.value = params.value;
        }


        this.onLoadDeferred = new dojo.Deferred();
       },


       baseClass: "dijitEditor",


       // inheritWidth: Boolean
       //  whether to inherit the parent's width or simply use 100%
       inheritWidth: false,


       // focusOnLoad: [deprecated] Boolean
       //  Focus into this widget when the page is loaded
       focusOnLoad: false,


       // name: String?
       //  Specifies the name of a (hidden)