Clear Up
SharpKit Reference

HtmlEditor Class

Provides a lightweight HTML Editor component. Some toolbar features are not supported by Safari and will be automatically hidden when needed. These are noted in the config options where appropriate.

The editor's toolbar buttons have tooltips defined in the buttonTips property, but they are not enabled by default unless the global Ext.tip.QuickTipManager singleton is initialized.

An Editor is a sensitive component that can't be used in all spots standard fields can be used. Putting an Editor within any element that has display set to 'none' can cause problems in Safari and Firefox due to their default iframe reloading bugs.

Example usage

Simple example rendered with default options:

  
    Ext.tip.QuickTipManager.init();  // enable tooltips
            Ext.create('Ext.form.HtmlEditor', {
            width: 580,
            height: 250,
            renderTo: Ext.getBody()
            });
            

Passed via xtype into a container and with custom options:

  
    Ext.tip.QuickTipManager.init();  // enable tooltips
            new Ext.panel.Panel({
            title: 'HTML Editor',
            renderTo: Ext.getBody(),
            width: 550,
            height: 250,
            frame: true,
            layout: 'fit',
            items: {
            xtype: 'htmleditor',
            enableColors: false,
            enableAlignments: false
            }
            });
            

Reflow issues

In some browsers, a layout reflow will cause the underlying editor iframe to be reset. This is most commonly seen when using the editor in collapsed panels with animation. In these cases it is best to avoid animation. More information can be found here: https://bugzilla.mozilla.org/show_bug.cgi?id=90268

Namespace: Ext.form.field

Fields

Name Description
activeError If specified, then the component will be displayed with this value as its active error when first rendered. Use setActiveError or unsetActiveError to change it after component creation.
activeErrorsTpl The template used to format the Array of error messages passed to setActiveErrors into a single HTML string. By default this renders each message as an item in an unordered list. Defaults to: ["<tpl if="errors && errors.length">", "<ul><tpl for="errors"><li>{.}</li></tpl></ul>", "</tpl>"]
afterBodyEl An optional string or XTemplate configuration to insert in the field markup at the end of the input containing element. If an XTemplate is used, the component's render data serves as the context.
afterIFrameTpl An optional string or XTemplate configuration to insert in the field markup after the iframe element. If an XTemplate is used, the component's subTpl data serves as the context.
afterLabelTextTpl An optional string or XTemplate configuration to insert in the field markup after the label text. If an XTemplate is used, the component's render data serves as the context.
afterLabelTpl An optional string or XTemplate configuration to insert in the field markup after the label element. If an XTemplate is used, the component's render data serves as the context.
afterSubTpl An optional string or XTemplate configuration to insert in the field markup after the subTpl markup. If an XTemplate is used, the component's render data serves as the context.
afterTextAreaTpl An optional string or XTemplate configuration to insert in the field markup after the textarea element. If an XTemplate is used, the component's subTpl data serves as the context.
allowDomMove
applyTo
autoCreate
autoFitErrors Whether to adjust the component's body area to make room for 'side' or 'under' error messages. Defaults to: true
baseBodyCls The CSS class to be applied to the body content element. Defaults to: "x-form-item-body"
beforeBodyEl An optional string or XTemplate configuration to insert in the field markup at the beginning of the input containing element. If an XTemplate is used, the component's render data serves as the context.
beforeIFrameTpl An optional string or XTemplate configuration to insert in the field markup before the iframe element. If an XTemplate is used, the component's subTpl data serves as the context.
beforeLabelTextTpl An optional string or XTemplate configuration to insert in the field markup before the label text. If an XTemplate is used, the component's render data serves as the context.
beforeLabelTpl An optional string or XTemplate configuration to insert in the field markup before the label element. If an XTemplate is used, the component's render data serves as the context.
beforeSubTpl An optional string or XTemplate configuration to insert in the field markup before the subTpl markup. If an XTemplate is used, the component's render data serves as the context.
beforeTextAreaTpl An optional string or XTemplate configuration to insert in the field markup before the textarea element. If an XTemplate is used, the component's subTpl data serves as the context.
clearCls The CSS class to be applied to the special clearing div rendered directly after the field contents wrapper to provide field clearing. Defaults to: "x-clear"
createLinkText The default text for the create link prompt Defaults to: "Please enter the URL for the link:"
defaultLinkValue The default value for the create link prompt Defaults to: "http://"
defaultValue A default value to be put into the editor to resolve focus issues. Defaults to (Non-breaking space) in Opera and IE6, (Zero-width space) in all other browsers.
enableAlignments Enable the left, center, right alignment buttons Defaults to: true
enableColors Enable the fore/highlight color buttons Defaults to: true
enableFont Enable font selection. Not available in Safari. Defaults to: true
enableFontSize Enable the increase/decrease font size buttons Defaults to: true
enableFormat Enable the bold, italic and underline buttons Defaults to: true
enableLinks Enable the create link button. Not available in Safari. Defaults to: true
enableLists Enable the bullet and numbered list buttons. Not available in Safari. Defaults to: true
enableSourceEdit Enable the switch to source edit button. Not available in Safari. Defaults to: true
errorMsgCls The CSS class to be applied to the error message element. Defaults to: "x-form-error-msg"
fieldBodyCls An extra CSS class to be applied to the body content element in addition to baseBodyCls. Defaults to: ""
fieldCls
fieldLabel The label for the field. It gets appended with the labelSeparator, and its position and sizing is determined by the labelAlign, labelWidth, and labelPad configs.
focusCls
fontFamilies An array of available font families Defaults to: ["Arial", "Courier New", "Tahoma", "Times New Roman", "Verdana"]
formItemCls A CSS class to be applied to the outermost element to denote that it is participating in the form field layout. Defaults to: "x-form-item"
hideEmptyLabel When set to true, the label element (fieldLabel and labelSeparator) will be automatically hidden if the fieldLabel is empty. Setting this to false will cause the empty label element to be rendered and space to be reserved for it; this is useful if you want a field without a label to line up with other labeled fields in the same form. If you wish to unconditionall hide the label even if a non-empty fieldLabel is configured, then set the hideLabel config to true. Defaults to: true
hideLabel Set to true to completely hide the label element (fieldLabel and labelSeparator). Also see hideEmptyLabel, which controls whether space will be reserved for an empty fieldLabel. Defaults to: false
iframeAttrTpl An optional string or XTemplate configuration to insert in the field markup inside the iframe element (as attributes). If an XTemplate is used, the component's subTpl data serves as the context.
inputType
invalidCls Overrides: Ext.form.Labelable.invalidCls
invalidText
labelableRenderTpl The rendering template for the field decorations. Component classes using this mixin should include logic to use this as their renderTpl, and implement the getSubTplMarkup method to generate the field body content. The structure of a field is a table as follows: If labelAlign: 'left',msgTarget: 'side'`
+----------------------+----------------------+-------------+
           | Label:               | InputField           | sideErrorEl |
           +----------------------+----------------------+-------------+
            
If labelAlign: 'left',msgTarget: 'under'`
+----------------------+------------------------------------+
           | Label:               | InputField      (colspan=2)        |
           |                      | underErrorEl                       |
           +----------------------+------------------------------------+
            
If labelAlign: 'top',msgTarget: 'side'`
+---------------------------------------------+-------------+
           | label                                       |             |
           | InputField                                  | sideErrorEl |
           +---------------------------------------------+-------------+
            
If labelAlign: 'top',msgTarget: 'under'`
+-----------------------------------------------------------+
           | label                                                     |
           | InputField                      (colspan=2)               |
           | underErrorEl                                              |
           +-----------------------------------------------------------+
            
The total columns always the same for fields with each setting of labelAlign because when rendered into a Ext.layout.container.Form layout, just the TR of the table will be placed into the form's main TABLE, and the columns of all the siblings must match so that they all line up. In a Ext.layout.container.Form layout, different settings of labelAlign are not supported because of the incompatible column structure. When the triggerCell or side error cell are hidden or shown, the input cell's colspan is recalculated to maintain the correct 3 visible column count. Defaults to: ["<tr id="{id}-inputRow" <tpl if="inFormLayout">id="{id}"</tpl>>", "<tpl if="labelOnLeft">", "<td id="{id}-labelCell" style="{labelCellStyle}" {labelCellAttrs}>", "{beforeLabelTpl}", "<label id="{id}-labelEl" {labelAttrTpl}<tpl if="inputId"> for="{inputId}"</tpl> class="{labelCls}"", "<tpl if="labelStyle"> style="{labelStyle}"</tpl>>", "{beforeLabelTextTpl}", "<tpl if="fieldLabel">{fieldLabel}{labelSeparator}</tpl>", "{afterLabelTextTpl}", "</label>", "{afterLabelTpl}", "</td>", "</tpl>", "<td class="{baseBodyCls} {fieldBodyCls}" id="{id}-bodyEl" colspan="{bodyColspan}" role="presentation">", "{beforeBodyEl}", "<tpl if="labelAlign==\'top\'">", "{beforeLabelTpl}", "<div id="{id}-labelCell" style="{labelCellStyle}">", "<label id="{id}-labelEl" {labelAttrTpl}<tpl if="inputId"> for="{inputId}"</tpl> class="{labelCls}"", "<tpl if="labelStyle"> style="{labelStyle}"</tpl>>", "{beforeLabelTextTpl}", "<tpl if="fieldLabel">{fieldLabel}{labelSeparator}</tpl>", "{afterLabelTextTpl}", "</label>", "</div>", "{afterLabelTpl}", "</tpl>", "{beforeSubTpl}", "{[values.$comp.getSubTplMarkup()]}", "{afterSubTpl}", "<tpl if="msgTarget===\'side\'">", "{afterBodyEl}", "</td>", "<td id="{id}-sideErrorCell" vAlign="{[values.labelAlign===\'top\' && !values.hideLabel ? \'bottom\' : \'middle\']}" style="{[values.autoFitErrors ? \'display:none\' : \'\']}" width="{errorIconWidth}">", "<div id="{id}-errorEl" class="{errorMsgCls}" style="display:none;width:{errorIconWidth}px"></div>", "</td>", "<tpl elseif="msgTarget==\'under\'">", "<div id="{id}-errorEl" class="{errorMsgClass}" colspan="2" style="display:none"></div>", "{afterBodyEl}", "</td>", "</tpl>", "</tr>", {disableFormats: true}]
labelAlign Controls the position and alignment of the fieldLabel. Valid values are:
  • "left" (the default) - The label is positioned to the left of the field, with its text aligned to the left. Its width is determined by the labelWidth config.
  • "top" - The label is positioned above the field.
  • "right" - The label is positioned to the left of the field, with its text aligned to the right. Its width is determined by the labelWidth config.
  • Defaults to: "left"
    labelAttrTpl An optional string or XTemplate configuration to insert in the field markup inside the label element (as attributes). If an XTemplate is used, the component's render data serves as the context.
    labelCls The CSS class to be applied to the label element. This (single) CSS class is used to formulate the renderSelector and drives the field layout where it is concatenated with a hyphen ('-') and labelAlign. To add additional classes, use labelClsExtra. Defaults to: "x-form-item-label"
    labelClsExtra An optional string of one or more additional CSS classes to add to the label element. Defaults to empty.
    labelPad The amount of space in pixels between the fieldLabel and the input field. Defaults to: 5
    labelSeparator Character(s) to be inserted at the end of the label text. Set to empty string to hide the separator completely. Defaults to: ":"
    labelStyle A CSS style specification string to apply directly to this field's label.
    labelWidth The width of the fieldLabel in pixels. Only applicable if the labelAlign is set to "left" or "right". Defaults to: 100
    msgFx
    msgTarget The location where the error message text should display. Must be one of the following values:
  • qtip Display a quick tip containing the message when the user hovers over the field. This is the default.

    Ext.tip.QuickTipManager.init must have been called for this setting to work.

  • title Display the message in a default browser title attribute popup.

  • under Add a block div beneath the field containing the error message.
  • side Add an error icon to the right of the field, displaying the message in a popup on hover.
  • none Don't display any error message. This might be useful if you are implementing custom error display.
  • [element id] Add the error message directly to the innerHTML of the specified element.
  • Defaults to: "qtip"
    name The name of the field. By default this is used as the parameter name when including the field value in a form submit(). To prevent the field from being included in the form submit, set submitValue to false.
    preventMark true to disable displaying any error message set on this object. Defaults to: false
    readOnly
    submitValue Setting this to false will prevent the field from being submitted even when it is not disabled. Defaults to: true
    tabIndex
    validateOnChange Specifies whether this field should be validated immediately whenever a change in its value is detected. If the validation results in a change in the field's validity, a validitychange event will be fired. This allows the field to show feedback about the validity of its contents immediately as the user is typing. When set to false, feedback will not be immediate. However the form will still be validated before submitting if the clientValidation option to Ext.form.Basic.doAction is enabled, or if the field or form are validated manually. See also Ext.form.field.Base.checkChangeEvents for controlling how changes to the field's value are detected. Defaults to: true
    value A value to initialize this field with.

    Methods

    Name Description
    batchChanges(Delegate) A utility for grouping a set of modifications which may trigger value changes into a single transaction, to prevent excessive firing of change events. This is useful for instance if the field has sub-fields which are being updated as a group; you don't want the container field to check its own changed state for each subfield change.
    beforeReset() Template method before a field is reset.
    checkChange() Checks whether the value of the field has changed since the last time it was checked. If the value has changed, it:
  • Fires the change event,
  • Performs validation if the validateOnChange config is enabled, firing the validitychange event if the validity has changed, and
  • Checks the dirty state of the field and fires the dirtychange event if it has changed.
  • checkDirty() Checks the isDirty state of the field and if it has changed since the last time it was checked, fires the dirtychange event.
    cleanHtml(JsString) If you need/want custom HTML cleanup, this is the method you should override.
    clearInvalid() Clear any invalid styles/messages for this field. Components using this mixin should implement this method to update the components rendering to clear any existing messages. Note: this method does not cause the Field's validate or isValid methods to return true if the value does not pass validation. So simply clearing a field's errors will not necessarily allow submission of forms submitted with the Ext.form.action.Submit.clientValidation option set.
    execCmd(JsString, object) Executes a Midas editor command directly on the editor document. For visual commands, you should use relayCmd instead. This should only be called after the editor is initialized.
    extractFileInput() Only relevant if the instance's isFileUpload method returns true. Returns a reference to the file input DOM element holding the user's selected file. The input will be appended into the submission form and will not be returned, so this method should also create a replacement.
    getActiveError() Gets the active error message for this component, if any. This does not trigger validation on its own, it merely returns any message that the component may already hold.
    getActiveErrors() Gets an Array of any active error messages currently applied to the field. This does not trigger validation on its own, it merely returns any messages that the component may already hold.
    getBodyColspan() Calculates the colspan value for the body cell - the cell which contains the input field. The field table structure contains 4 columns:
    getDocMarkup() Called when the editor initializes the iframe with HTML contents. Override this method if you want to change the initialization markup of the iframe (e.g. to add stylesheets). Note: IE8-Standards has unwanted scroller behavior, so the default meta tag forces IE7 compatibility. Also note that forcing IE7 mode works when the page is loaded normally, but if you are using IE's Web Developer Tools to manually set the document mode, that will take precedence and override what this code sets by default. This can be confusing when developing, but is not a user-facing issue.
    getErrors(object) Runs this field's validators and returns an array of error messages for any validation failures. This is called internally during validation and would not usually need to be used manually. Each subclass should override or augment the return value to provide their own errors.
    getFieldLabel() Returns the label for the field. Defaults to simply returning the fieldLabel config. Can be overridden to provide a custom generated label.

    This is a template method. a hook into the functionality of this class. Feel free to override it in child classes.

    getInputId() Get the input id, if any, for this component. This is used as the "for" attribute on the label element. Implementing subclasses may also use this as e.g. the id for their own input element.
    getLabelableRenderData() Generates the arguments for the field decorations rendering template.
    getLabelStyle() Gets any label styling for the labelEl
    getModelData() Returns the value(s) that should be saved to the Ext.data.Model instance for this field, when Ext.form.Basic.updateRecord is called. Typically this will be an object with a single name-value pair, the name being this field's name and the value being its current data value. More advanced field implementations may return more than one name-value pair. The returned values will be saved to the corresponding field names in the Model. Note that the values returned from this method are not guaranteed to have been successfully validated.
    getName() Returns the name attribute of the field. This is used as the parameter name when including the field value in a form submit().
    getSubmitData() Returns the parameter(s) that would be included in a standard form submit for this field. Typically this will be an object with a single name-value pair, the name being this field's name and the value being its current stringified value. More advanced field implementations may return more than one name-value pair. Note that the values returned from this method are not guaranteed to have been successfully validated.
    getSubTplMarkup() Gets the markup to be inserted into the outer template's bodyEl. Defaults to empty string, should be implemented by classes including this mixin as needed.
    getToolbar() Returns the editor's toolbar. This is only available after the editor has been rendered.
    getValue() Returns the current data value of the field. The type of value returned is particular to the type of the particular field (e.g. a Date object for Ext.form.field.Date).
    hasActiveError() Tells whether the field currently has an active error message. This does not trigger validation on its own, it merely looks for any message that the component may already hold.
    hasVisibleLabel() Checks if the field has a visible label
    initField() Initializes this Field mixin on the current instance. Components using this mixin should call this method during their own initialization process.
    initLabelable() Performs initialization of this mixin. Component classes using this mixin should call this method during their own initialization.
    initValue() Initializes the field's value based on the initial config.
    insertAtCursor(JsString) Inserts the passed text at the current cursor position. Note: the editor must be initialized and activated to insert text.
    isDirty() Returns true if the value of this Field has been changed from its originalValue. Will always return false if the field is disabled. Note that if the owning form was configured with trackResetOnLoad then the originalValue is updated when the values are loaded by Ext.form.Basic.setValues.
    isEqual(object, object) Returns whether two field values are logically equal. Field implementations may override this to provide custom comparison logic appropriate for the particular field's data type.
    isEqualAsString(object, object) Returns whether two values are logically equal. Similar to isEqual, however null or undefined values will be treated as empty strings.
    isFileUpload() Returns whether this Field is a file upload field; if it returns true, forms will use special techniques for submitting the form via AJAX. See Ext.form.Basic.hasUpload for details. If this returns true, the extractFileInput method must also be implemented to return the corresponding file input element.
    isValid() Returns whether or not the field value is currently valid by validating the field's current value. The validitychange event will not be fired; use validate instead if you want the event to fire. Note: disabled fields are always treated as valid. Implementations are encouraged to ensure that this method does not have side-effects such as triggering error message display.
    markInvalid(object) Associate one or more error messages with this field. Components using this mixin should implement this method to update the component's rendering to display the messages. Note: this method does not cause the Field's validate or isValid methods to return false if the value does pass validation. So simply marking a Field as invalid will not prevent submission of forms submitted with the Ext.form.action.Submit.clientValidation option set.
    onChange(object, object) Called when the field's value changes. Performs validation if the validateOnChange config is enabled, and invokes the dirty check.
    onDirtyChange(bool) Called when the field's dirty state changes.
    pushValue() Pushes the value of the textarea into the iframe editor.
    relayCmd(JsString, object) Executes a Midas editor command on the editor document and performs necessary focus and toolbar updates. This should only be called after the editor is initialized.
    renderActiveError() Updates the rendered DOM to match the current activeError. This only updates the content and attributes, you'll have to call doComponentLayout to actually update the display.
    reset() Resets the current field value to the originally loaded value and clears any validation messages. See Ext.form.Basic.trackResetOnLoad
    resetOriginalValue() Resets the field's originalValue property so it matches the current value. This is called by Ext.form.Basic.setValues if the form's trackResetOnLoad property is set to true.
    setActiveError(JsString) Sets the active error message to the given string. This replaces the entire error message contents with the given string. Also see setActiveErrors which accepts an Array of messages and formats them according to the activeErrorsTpl. Note that this only updates the error message element's text and attributes, you'll have to call doComponentLayout to actually update the field's layout to match. If the field extends Ext.form.field.Base you should call markInvalid instead.
    setActiveErrors(JsArray<T>) Set the active error message to an Array of error messages. The messages are formatted into a single message string using the activeErrorsTpl. Also see setActiveError which allows setting the entire error contents with a single string. Note that this only updates the error message element's text and attributes, you'll have to call doComponentLayout to actually update the field's layout to match. If the field extends Ext.form.field.Base you should call markInvalid instead.
    setFieldDefaults(object) Applies a set of default configuration values to this Labelable instance. For each of the properties in the given object, check if this component hasOwnProperty that config; if not then it's inheriting a default value from its prototype and we should apply the default value.
    setFieldLabel(JsString) Set the label of this field.
    setReadOnly(bool) Sets the read only state of this field.
    setValue(object) Sets a data value into the field and runs the change detection and validation.
    syncValue() Syncs the contents of the editor iframe with the textarea.
    toggleSourceEdit(object) Toggles the editor between standard and source edit mode.
    transformOriginalValue(object) Allows for any necessary modifications before the original value is set
    trimLabelSeparator() Returns the trimmed label by slicing off the label separator character. Can be overridden.
    unsetActiveError() Clears the active error message(s). Note that this only clears the error message element's text and attributes, you'll have to call doComponentLayout to actually update the field's layout to match. If the field extends Ext.form.field.Base you should call clearInvalid instead.
    updateToolbar() Triggers a toolbar update by reading the markup state of the current selection in the editor.
    validate() Overrides: Ext.form.field.Field.validate

    Properties

    Name Description
    bodyEl The div Element wrapping the component's contents. Only available after the component has been rendered.
    buttonTips Object collection of toolbar tooltips for the buttons in the editor. The key is the command id associated with that button and the value is a valid QuickTips object. For example:
    {
                bold : {
                title: 'Bold (Ctrl+B)',
                text: 'Make the selected text bold.',
                cls: 'x-html-editor-tip'
                },
                italic : {
                title: 'Italic (Ctrl+I)',
                text: 'Make the selected text italic.',
                cls: 'x-html-editor-tip'
                },
                ...
                
    errorEl The div Element that will contain the component's error message(s). Note that depending on the configured msgTarget, this element may be hidden in favor of some other form of presentation, but will always be present in the DOM for use by assistive technologies.
    isFieldLabelable Flag denoting that this object is labelable as a field. Always true. Defaults to: true
    isFormField Flag denoting that this component is a Field. Always true. Defaults to: true
    labelCell The <TD> Element which contains the label Element for this component. Only available after the component has been rendered.
    labelEl The label Element for this component. Only available after the component has been rendered.
    noWrap Tells the layout system that the height can be measured immediately because the width does not need setting. Defaults to: true
    originalValue The original value of the field as configured in the value configuration, or as loaded by the last form load operation if the form's trackResetOnLoad setting is true.
    suspendCheckChange Defaults to: 0
    © Copyright 2005-2011 SharpKit. All rights reserved.