You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.7 KiB
139 lines
3.7 KiB
2 years ago
|
/*
|
||
|
YUI 3.17.2 (build 9c3c78e)
|
||
|
Copyright 2014 Yahoo! Inc. All rights reserved.
|
||
|
Licensed under the BSD License.
|
||
|
http://yuilibrary.com/license/
|
||
|
*/
|
||
|
|
||
|
YUI.add('editor-para-base', function (Y, NAME) {
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Base Plugin for Editor to paragraph auto wrapping and correction.
|
||
|
* @class Plugin.EditorParaBase
|
||
|
* @extends Base
|
||
|
* @constructor
|
||
|
* @module editor
|
||
|
* @submodule editor-para-base
|
||
|
*/
|
||
|
|
||
|
|
||
|
var EditorParaBase = function() {
|
||
|
EditorParaBase.superclass.constructor.apply(this, arguments);
|
||
|
}, HOST = 'host',
|
||
|
FIRST_P = '> p', P = 'p', BR = '<br>';
|
||
|
|
||
|
|
||
|
Y.extend(EditorParaBase, Y.Base, {
|
||
|
/**
|
||
|
* Resolves the ROOT editor element.
|
||
|
* @method _getRoot
|
||
|
* @private
|
||
|
*/
|
||
|
_getRoot: function() {
|
||
|
return this.get(HOST).getInstance().EditorSelection.ROOT;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Utility method to create an empty paragraph when the document is empty.
|
||
|
* @private
|
||
|
* @method _fixFirstPara
|
||
|
*/
|
||
|
_fixFirstPara: function() {
|
||
|
var host = this.get(HOST), inst = host.getInstance(), sel, n,
|
||
|
root = this._getRoot(),
|
||
|
html = root.getHTML(),
|
||
|
col = ((html.length) ? true : false);
|
||
|
|
||
|
if (html === BR) {
|
||
|
html = '';
|
||
|
col = false;
|
||
|
}
|
||
|
|
||
|
root.setHTML('<' + P + '>' + html + inst.EditorSelection.CURSOR + '</' + P + '>');
|
||
|
|
||
|
n = root.one(FIRST_P);
|
||
|
sel = new inst.EditorSelection();
|
||
|
|
||
|
sel.selectNode(n, true, col);
|
||
|
},
|
||
|
/**
|
||
|
* Performs a block element filter when the Editor is first ready
|
||
|
* @private
|
||
|
* @method _afterEditorReady
|
||
|
*/
|
||
|
_afterEditorReady: function() {
|
||
|
var host = this.get(HOST), inst = host.getInstance(), btag;
|
||
|
if (inst) {
|
||
|
inst.EditorSelection.filterBlocks();
|
||
|
btag = inst.EditorSelection.DEFAULT_BLOCK_TAG;
|
||
|
FIRST_P = '> ' + btag;
|
||
|
P = btag;
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* Performs a block element filter when the Editor after an content change
|
||
|
* @private
|
||
|
* @method _afterContentChange
|
||
|
*/
|
||
|
_afterContentChange: function() {
|
||
|
var host = this.get(HOST), inst = host.getInstance();
|
||
|
if (inst && inst.EditorSelection) {
|
||
|
inst.EditorSelection.filterBlocks();
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* Performs block/paste filtering after paste.
|
||
|
* @private
|
||
|
* @method _afterPaste
|
||
|
*/
|
||
|
_afterPaste: function() {
|
||
|
var host = this.get(HOST), inst = host.getInstance();
|
||
|
|
||
|
Y.later(50, host, function() {
|
||
|
inst.EditorSelection.filterBlocks();
|
||
|
});
|
||
|
|
||
|
},
|
||
|
initializer: function() {
|
||
|
var host = this.get(HOST);
|
||
|
if (host.editorBR) {
|
||
|
Y.error('Can not plug EditorPara and EditorBR at the same time.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
host.after('ready', Y.bind(this._afterEditorReady, this));
|
||
|
host.after('contentChange', Y.bind(this._afterContentChange, this));
|
||
|
if (Y.Env.webkit) {
|
||
|
host.after('dom:paste', Y.bind(this._afterPaste, this));
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
/**
|
||
|
* editorPara
|
||
|
* @static
|
||
|
* @property NAME
|
||
|
*/
|
||
|
NAME: 'editorParaBase',
|
||
|
/**
|
||
|
* editorPara
|
||
|
* @static
|
||
|
* @property NS
|
||
|
*/
|
||
|
NS: 'editorParaBase',
|
||
|
ATTRS: {
|
||
|
host: {
|
||
|
value: false
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
Y.namespace('Plugin');
|
||
|
|
||
|
Y.Plugin.EditorParaBase = EditorParaBase;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
}, '3.17.2', {"requires": ["editor-base"]});
|