editor-base-debug.js revision 1d01372aa06d46fcbeeae1718c35cf404f412a85
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Base class for Editor. Handles the business logic of Editor, no GUI involved only utility methods and events.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * var editor = new Y.EditorBase({
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * content: 'Foo'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * editor.render('#demo');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class EditorBase
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module editor
33a04233c7a32ec1ac1b5d5991097fe0b099e87bDav Glass * @main editor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule editor-base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var EditorBase = function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EditorBase.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Internal reference to the Y.Frame instance
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property frame
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frame.after('ready', Y.bind(this._afterFrameReady, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //this.plug(Y.Plugin.EditorPara);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Copy certain styles from one node instance to another (used for new paragraph creation mainly)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method copyStyles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Node} from The Node instance to copy the styles from
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Node} to The Node instance to copy the styles to
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Don't carry the A styles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var styles = ['color', 'fontSize', 'fontFamily', 'backgroundColor', 'fontStyle' ],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Holder for the selection bookmark in IE.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _lastBookmark
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Resolves the e.changedNode in the nodeChange event if it comes from the document. If
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * the event came from the document, it will get the last child of the last child of the document
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * and return that instead.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _resolveChangedNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Node} n The node to resolve
2bbe3ca8cfbb948b9b6356ae16759f1d6245433cDav Glass //Fallback to make sure a node is attached to the event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The default handler for the nodeChange event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defNodeChangeFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Y.log('Default nodeChange function: ' + e.changedType, 'info', 'editor');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (ie) {}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.changedNode = this._resolveChangedNode(e.changedNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * This whole method needs to be fixed and made more dynamic.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Maybe static functions for the e.changeType and an object bag
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * to walk through and filter to pass off the event to before firing..
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'keydown':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!EditorBase.NC_KEYS[e.changedEvent.keyCode] && !e.changedEvent.shiftKey && !e.changedEvent.ctrlKey && (e.changedEvent.keyCode !== 13)) {
1d01372aa06d46fcbeeae1718c35cf404f412a85Dav Glass //inst.later(100, inst, inst.EditorSelection.cleanCursor);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!e.changedNode.test('li, li *') && !e.changedEvent.shiftKey) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('Overriding TAB key to insert HTML: HALTING', 'info', 'editor');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.exec._command('inserthtml', EditorBase.TABKEY);
4a537b3e113d7fa233abca2203a60b7c7d6d71dbDav Glass this.execCommand('inserthtml', EditorBase.TABKEY);
7b9d2bac493c21a0a495ff308067228048ad4e6dDav Glass case 'backspace-up':
7b9d2bac493c21a0a495ff308067228048ad4e6dDav Glass // Fixes #2531090 - Joins text node strings so they become one for bidi
7b9d2bac493c21a0a495ff308067228048ad4e6dDav Glass e.changedNode.set('innerHTML', e.changedNode.get('innerHTML'));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.UA.webkit && e.commands && (e.commands.indent || e.commands.outdent)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * When executing execCommand 'indent or 'outdent' Webkit applies
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * a class to the BLOCKQUOTE that adds left/right margin to it
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * This strips that style so it is just a normal BLOCKQUOTE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var changed = this.getDomPath(e.changedNode, false),
4a537b3e113d7fa233abca2203a60b7c7d6d71dbDav Glass var normal = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Bold and Italic styles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if ((''+s.fontWeight) == 'bold') { //Cast this to a string
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var family2 = n.getStyle('fontFamily').split(',')[0].toLowerCase();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass family = family.replace(/'/g, '').replace(/"/g, '');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass fsize = EditorBase.NORMALIZE_FONTSIZE(n);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var cls = el.className.split(' ');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(cls, function(v) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass classes.push(v);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass fColor = EditorBase.FILTER_RGB(n.getStyle('color'));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var bColor2 = EditorBase.FILTER_RGB(s.backgroundColor);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bColor = bColor2;
4a537b3e113d7fa233abca2203a60b7c7d6d71dbDav Glass if (normal) {
4a537b3e113d7fa233abca2203a60b7c7d6d71dbDav Glass delete cmds.bold;
4a537b3e113d7fa233abca2203a60b7c7d6d71dbDav Glass delete cmds.italic;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.dompath = inst.all(changed);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.classNames = classes;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.commands = cmds;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('_defNodeChangeTimer 2: ' + (endTime - startTime) + 'ms', 'info', 'selection');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Walk the dom tree from this node up to body, returning a reversed array of parents.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getDomPath
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Node} node The Node to start from
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //return inst.all(domNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass while (domNode !== null) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if ((domNode === inst.config.doc.documentElement) || (domNode === inst.config.doc) || !domNode.tagName) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Check to see if we get el.nodeName and nodeType
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (domNode.nodeName && domNode.nodeType && (domNode.nodeType == 1)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*{{{ Using Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass while (node !== null) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (node.test('html') || node.test('doc') || !node.get('tagName')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!node.inDoc()) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Check to see if we get el.nodeName and nodeType
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (node.get('nodeName') && node.get('nodeType') && (node.get('nodeType') == 1)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass domPath.push(inst.Node.getDOMNode(node));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (node.test('body')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node = node.get('parentNode');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * After frame ready, bind mousedown & keyup listeners
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterFrameReady
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:mouseup', Y.bind(this._onFrameMouseUp, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:mousedown', Y.bind(this._onFrameMouseDown, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:keydown', Y.bind(this._onFrameKeyDown, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:activate', Y.bind(this._onFrameActivate, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:beforedeactivate', Y.bind(this._beforeFrameDeactivate, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:keyup', Y.bind(this._onFrameKeyUp, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:keypress', Y.bind(this._onFrameKeyPress, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.frame.on('dom:paste', Y.bind(this._onPaste, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Caches the current cursor position in IE.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _beforeFrameDeactivate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.frameTarget.test('html')) { //Means it came from a scrollbar
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (sel.compareEndPoints && !sel.compareEndPoints('StartToEnd', sel)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Moves the cached selection bookmark back so IE can place the cursor in the right place.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameActivate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.frameTarget.test('html')) { //Means it came from a scrollbar
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (moved === -1) { //Only move up if we actually moved back.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (e) {}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onPaste
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onPaste: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: e.frameTarget, changedType: 'paste', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameMouseUp
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onFrameMouseUp: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: e.frameTarget, changedType: 'mouseup', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameMouseDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: e.frameTarget, changedType: 'mousedown', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Caches a copy of the selection for key events. Only creating the selection on keydown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _currentSelection
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Holds the timer for selection clearing
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _currentSelectionTimer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Flag to determine if we can clear the selection or not.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _currentSelectionClear
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameKeyDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onFrameKeyDown: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._currentSelectionTimer = Y.later(850, this, function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: 'keydown', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: EditorBase.NC_KEYS[e.keyCode], changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: EditorBase.NC_KEYS[e.keyCode] + '-down', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameKeyPress
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: 'keypress', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: EditorBase.NC_KEYS[e.keyCode] + '-press', changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Fires nodeChange event for keyup on specific keys
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onFrameKeyUp
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onFrameKeyUp: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: 'keyup', selection: sel, changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('nodeChange', { changedNode: sel.anchorNode, changedType: EditorBase.NC_KEYS[e.keyCode] + '-up', selection: sel, changedEvent: e.frameEvent });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._currentSelectionClear = this._currentSelection = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Pass through to the frame.execCommand method
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method execCommand
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} cmd The command to pass: inserthtml, insertimage, bold
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} val The optional value of the command: Helvetica
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Node/NodeList} The Node or Nodelist affected by the command. Only returns on override commands, not browser defined commands.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e = { changedNode: sel.anchorNode, changedType: 'execcommand', nodes: ret };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'forecolor':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'backcolor':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'fontsize':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'fontname':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Get the YUI instance of the frame
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getInstance
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {YUI} The YUI instance bound to the frame.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getInstance: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Renders the Y.Frame to the passed node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method render
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Selector/HTMLElement/Node} node The node to append the Editor to
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {EditorBase}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Focus the contentWindow of the iframe
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method focus
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Function} fn Callback function to execute after focus happens
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {EditorBase}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Handles the showing of the Editor instance. Currently only handles the iframe
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method show
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {EditorBase}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass show: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Handles the hiding of the Editor instance. Currently only handles the iframe
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method hide
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {EditorBase}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass hide: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * (Un)Filters the content of the Editor, cleaning YUI related code. //TODO better filtering
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getContent
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {String} The filtered content of the Editor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getContent: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Removing the _yuid from the objects in IE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method NORMALIZE_FONTSIZE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pulls the fontSize from a node, then checks for string values (x-large, x-small)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * and converts them to pixel sizes. If the parsed size is different from the original, it calls
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * node.setStyle to update the node with a pixel size for normalization.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case '-webkit-xxx-large':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'xx-large':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'x-large':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'large':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'medium':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'small':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'x-small':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property TABKEY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The HTML markup to use for the tabkey
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TABKEY: '<span class="tab"> </span>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method FILTER_RGB
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param String css The CSS string containing rgb(#,#,#);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Converts an RGB color string to a hex color, example: rgb(0, 255, 0) converts to #00ff00
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var exp = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var rgb = css.replace(exp, "$1,$2,$3,$4,$5").split(',');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property TAG2CMD
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A hash table of tags to their execcomand's
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Hash table of keys to fire a nodeChange event for.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NC_KEYS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The default modules to use inside the Frame
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property USE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
1d01372aa06d46fcbeeae1718c35cf404f412a85Dav Glass USE: ['substitute', 'node', 'selector-css3', 'editor-selection', 'stylesheet'],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The Class Name: editorBase
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith * Editor Strings. By default contains only the `title` property for the
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith * Title of frame document (default "Rich Text Editor").
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property STRINGS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The content to load into the Editor Frame
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute content
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('Stripping first carriage return from content before injecting', 'warn', 'editor');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getter: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The value of the dir attribute on the HTML element of the frame. Default: ltr
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dir
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute linkedcss
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description An array of url's to external linked style sheets
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute extracss
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A string of CSS to add to the Head of the Editor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute defaultblock
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The default tag to use for block level items, defaults to: p
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event nodeChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fired from several mouse/key/paste event points.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event.Facade} event An Event Facade object with the following specific properties added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>changedEvent</dt><dd>The event that caused the nodeChange</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>changedNode</dt><dd>The node that was interacted with</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>changedType</dt><dd>The type of change: mousedown, mouseup, right, left, backspace, tab, enter, etc..</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>commands</dt><dd>The list of execCommands that belong to this change and the dompath that's associated with the changedNode</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>classNames</dt><dd>An array of classNames that are applied to the changedNode and all of it's parents</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>dompath</dt><dd>A sorted array of node instances that make up the DOM path from the changedNode to body.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>backgroundColor</dt><dd>The cascaded backgroundColor of the changedNode</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>fontColor</dt><dd>The cascaded fontColor of the changedNode</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>fontFamily</dt><dd>The cascaded fontFamily of the changedNode</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>fontSize</dt><dd>The cascaded fontSize of the changedNode</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Event.Custom}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event ready
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fired after the frame is ready.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event.Facade} event An Event Facade object.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Event.Custom}
1d01372aa06d46fcbeeae1718c35cf404f412a85Dav Glass}, '@VERSION@' ,{skinnable:false, requires:['base', 'frame', 'node', 'exec-command', 'editor-selection']});