d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass /**
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * Plugin for Editor to paragraph auto wrapping and correction.
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @class Plugin.EditorPara
11472e48d0b0591b8f3753193304070c6a13cb05Dav Glass * @extends Plugin.EditorParaBase
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @constructor
09c638a157dd9d2ed9027215d9e254badfa019b8Dav Glass * @module editor
09c638a157dd9d2ed9027215d9e254badfa019b8Dav Glass * @submodule editor-para
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass */
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass var EditorPara = function() {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass EditorPara.superclass.constructor.apply(this, arguments);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }, HOST = 'host', BODY = 'body', NODE_CHANGE = 'nodeChange', PARENT_NODE = 'parentNode',
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass FIRST_P = BODY + ' > p', P = 'p', BR = '<br>', FC = 'firstChild', LI = 'li';
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
11472e48d0b0591b8f3753193304070c6a13cb05Dav Glass Y.extend(EditorPara, Y.Plugin.EditorParaBase, {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass /**
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * nodeChange handler to handle fixing an empty document.
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @private
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @method _onNodeChange
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass */
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass _onNodeChange: function(e) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass var host = this.get(HOST), inst = host.getInstance(),
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass html, txt, par , d, sel, btag = inst.EditorSelection.DEFAULT_BLOCK_TAG,
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass inHTML, txt2, childs, aNode, index, node2, top, n, sib,
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass ps, br, item, p, imgs, t, LAST_CHILD = ':last-child';
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass switch (e.changedType) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass case 'enter-up':
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass var para = ((this._lastPara) ? this._lastPara : e.changedNode),
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass b = para.one('br.yui-cursor');
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (this._lastPara) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass delete this._lastPara;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (b) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (b.previous() || b.next()) {
db9067a7aace004de2603396af611d5a294bc554Dav Glass if (b.ancestor(P)) {
db9067a7aace004de2603396af611d5a294bc554Dav Glass b.remove();
db9067a7aace004de2603396af611d5a294bc554Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (!para.test(btag)) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass var para2 = para.ancestor(btag);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (para2) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass para = para2;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass para2 = null;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (para.test(btag)) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass var prev = para.previous(), lc, lc2, found = false;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (prev) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass lc = prev.one(LAST_CHILD);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass while (!found) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (lc) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass lc2 = lc.one(LAST_CHILD);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (lc2) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass lc = lc2;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass } else {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass found = true;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass } else {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass found = true;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (lc) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass host.copyStyles(lc, para);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass break;
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass case 'enter':
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (Y.UA.webkit) {
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass //Webkit doesn't support shift+enter as a BR, this fixes that.
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (e.changedEvent.shiftKey) {
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass host.execCommand('insertbr');
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass e.changedEvent.preventDefault();
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass }
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass }
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass if (e.changedNode.test('li') && !Y.UA.ie) {
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass html = inst.EditorSelection.getText(e.changedNode);
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass if (html === '') {
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass par = e.changedNode.ancestor('ol,ul');
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass var dir = par.getAttribute('dir');
2aca43556130240edd69497e279b2423e7c1801bDav Glass if (dir !== '') {
2aca43556130240edd69497e279b2423e7c1801bDav Glass dir = ' dir = "' + dir + '"';
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass }
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass par = e.changedNode.ancestor(inst.EditorSelection.BLOCKS);
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass d = inst.Node.create('<p' + dir + '>' + inst.EditorSelection.CURSOR + '</p>');
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass par.insert(d, 'after');
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass e.changedNode.remove();
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass e.changedEvent.halt();
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass sel = new inst.EditorSelection();
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass sel.selectNode(d, true, false);
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass }
71c7ae1e1da58359704293bbb8df26fed4e40576Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass //TODO Move this to a GECKO MODULE - Can't for the moment, requires no change to metadata (YMAIL)
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (Y.UA.gecko && host.get('defaultblock') !== 'p') {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass par = e.changedNode;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (!par.test(LI) && !par.ancestor(LI)) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (!par.test(btag)) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass par = par.ancestor(btag);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass d = inst.Node.create('<' + btag + '></' + btag + '>');
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass par.insert(d, 'after');
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass sel = new inst.EditorSelection();
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (sel.anchorOffset) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass inHTML = sel.anchorNode.get('textContent');
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass txt = inst.one(inst.config.doc.createTextNode(inHTML.substr(0, sel.anchorOffset)));
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass txt2 = inst.one(inst.config.doc.createTextNode(inHTML.substr(sel.anchorOffset)));
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass aNode = sel.anchorNode;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass aNode.setContent(''); //I
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass node2 = aNode.cloneNode(); //I
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass node2.append(txt2); //text
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass top = false;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass sib = aNode; //I
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass while (!top) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass sib = sib.get(PARENT_NODE); //B
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (sib && !sib.test(btag)) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass n = sib.cloneNode();
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass n.set('innerHTML', '');
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass n.append(node2);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass //Get children..
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass childs = sib.get('childNodes');
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass var start = false;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass childs.each(function(c) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (start) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass n.append(c);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (c === aNode) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass start = true;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass });
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass aNode = sib; //Top sibling
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass node2 = n;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass } else {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass top = true;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass txt2 = node2;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass sel.anchorNode.append(txt);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (txt2) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass d.append(txt2);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (d.get(FC)) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass d = d.get(FC);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass d.prepend(inst.EditorSelection.CURSOR);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass sel.focusCursor(true, true);
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass html = inst.EditorSelection.getText(d);
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (html !== '') {
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass inst.EditorSelection.cleanCursor();
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass }
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass e.changedEvent.preventDefault();
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass }
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass }
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass break;
677d6ad6503f3daaaaf9800c58eec9e00fee4cddDav Glass case 'keyup':
677d6ad6503f3daaaaf9800c58eec9e00fee4cddDav Glass if (Y.UA.gecko) {
ab50004ba7a3beba13652a757f1dc7de82bc7516Dav Glass if (inst.config.doc && inst.config.doc.body && inst.config.doc.body.innerHTML.length < 20) {
ab50004ba7a3beba13652a757f1dc7de82bc7516Dav Glass if (!inst.one(FIRST_P)) {
ab50004ba7a3beba13652a757f1dc7de82bc7516Dav Glass this._fixFirstPara();
ab50004ba7a3beba13652a757f1dc7de82bc7516Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass break;
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass case 'backspace-up':
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass case 'backspace-down':
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass case 'delete-up':
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass if (!Y.UA.ie) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass ps = inst.all(FIRST_P);
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass item = inst.one(BODY);
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass if (ps.item(0)) {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass item = ps.item(0);
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass br = item.one('br');
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass if (br) {
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass br.removeAttribute('id');
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass br.removeAttribute('class');
0523d0a8daaa474f0214203f8cbb0bc4a88e2964Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass txt = inst.EditorSelection.getText(item);
216633e2ad28e9568a902f3763c3bef052c5f908Dav Glass txt = txt.replace(/ /g, '').replace(/\n/g, '');
aa2ac226ad6e45232f8416eecc99d2165ce74d03Dav Glass imgs = item.all('img');
5432371fbb6d790a76159481f0dd16e806812153Dav Glass
aa2ac226ad6e45232f8416eecc99d2165ce74d03Dav Glass if (txt.length === 0 && !imgs.size()) {
5432371fbb6d790a76159481f0dd16e806812153Dav Glass //God this is horrible..
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (!item.test(P)) {
5432371fbb6d790a76159481f0dd16e806812153Dav Glass this._fixFirstPara();
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass p = null;
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (e.changedNode && e.changedNode.test(P)) {
5432371fbb6d790a76159481f0dd16e806812153Dav Glass p = e.changedNode;
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass if (!p && host._lastPara && host._lastPara.inDoc()) {
5432371fbb6d790a76159481f0dd16e806812153Dav Glass p = host._lastPara;
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass if (p && !p.test(P)) {
162527ab925c04aa8d6bbf78d0484a133a8076f1Dav Glass p = p.ancestor(P);
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass if (p) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (!p.previous() && p.get(PARENT_NODE) && p.get(PARENT_NODE).test(BODY)) {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass Y.log('Stopping the backspace event', 'warn', 'editor-para');
5432371fbb6d790a76159481f0dd16e806812153Dav Glass e.changedEvent.frameEvent.halt();
5228a37b2eb62b9c769d7478a495fec98a1ae8cdDav Glass e.preventDefault();
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
5432371fbb6d790a76159481f0dd16e806812153Dav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (Y.UA.webkit) {
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (e.changedNode) {
5228a37b2eb62b9c769d7478a495fec98a1ae8cdDav Glass //All backspace calls in Webkit need a preventDefault to
5228a37b2eb62b9c769d7478a495fec98a1ae8cdDav Glass //stop history navigation #2531299
5228a37b2eb62b9c769d7478a495fec98a1ae8cdDav Glass e.preventDefault();
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass item = e.changedNode;
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (item.test('li') && (!item.previous() && !item.next())) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass html = item.get('innerHTML').replace(BR, '');
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass if (html === '') {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass if (item.get(PARENT_NODE)) {
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass item.get(PARENT_NODE).replace(inst.Node.create(BR));
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass e.changedEvent.frameEvent.halt();
029cb6cc7c47ef456b545670a3ec835dc57e8859Dav Glass inst.EditorSelection.filterBlocks();
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
f7aa62ea2e8cf43fbb9d83db5060db540ff1893fDav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
96c1e6aab172b57cf3566abee931c26676990044Dav Glass if (Y.UA.gecko) {
e4f71ec590faf50c1621b6b2c32bae83eb73ee74Dav Glass /*
96c1e6aab172b57cf3566abee931c26676990044Dav Glass * This forced FF to redraw the content on backspace.
96c1e6aab172b57cf3566abee931c26676990044Dav Glass * On some occasions FF will leave a cursor residue after content has been deleted.
96c1e6aab172b57cf3566abee931c26676990044Dav Glass * Dropping in the empty textnode and then removing it causes FF to redraw and
96c1e6aab172b57cf3566abee931c26676990044Dav Glass * remove the "ghost cursors"
96c1e6aab172b57cf3566abee931c26676990044Dav Glass */
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass d = e.changedNode;
6dbc2e0b2c23ae7763959af9762fc50c84dbd937Dav Glass t = inst.config.doc.createTextNode(' ');
96c1e6aab172b57cf3566abee931c26676990044Dav Glass d.appendChild(t);
96c1e6aab172b57cf3566abee931c26676990044Dav Glass d.removeChild(t);
96c1e6aab172b57cf3566abee931c26676990044Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass break;
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (Y.UA.gecko) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (e.changedNode && !e.changedNode.test(btag)) {
7a67e82a93bc7dc5bf9a62a3ad321c2424da37f7Dav Glass p = e.changedNode.ancestor(btag);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (p) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass this._lastPara = p;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass },
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass initializer: function() {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass var host = this.get(HOST);
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass if (host.editorBR) {
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass Y.error('Can not plug EditorPara and EditorBR at the same time.');
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass return;
0db84e0da684308b0fd9ea9b5906c11bafa7a246Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass host.on(NODE_CHANGE, Y.bind(this._onNodeChange, this));
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }, {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass /**
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass * editorPara
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @static
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @property NAME
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass */
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass NAME: 'editorPara',
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass /**
d0bccce76452becc96b65acaaa684aa6fabaf386Dav Glass * editorPara
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @static
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass * @property NS
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass */
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass NS: 'editorPara',
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass ATTRS: {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass host: {
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass value: false
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass }
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass });
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass Y.namespace('Plugin');
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass Y.Plugin.EditorPara = EditorPara;
d2a5a45ff58ab15a8ee0339edcd03f0243373d59Dav Glass