]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/yui3/build/editor/editor-para.js
Release 6.5.0
[Github/sugarcrm.git] / include / javascript / yui3 / build / editor / editor-para.js
1 /*
2  Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3  Code licensed under the BSD License:
4  http://developer.yahoo.com/yui/license.html
5  version: 3.3.0
6  build: 3167
7  */
8 YUI.add('editor-para',function(Y){var EditorPara=function(){EditorPara.superclass.constructor.apply(this,arguments);},HOST='host',BODY='body',NODE_CHANGE='nodeChange',PARENT_NODE='parentNode',FIRST_P=BODY+' > p',P='p',BR='<br>',FC='firstChild',LI='li';Y.extend(EditorPara,Y.Base,{_fixFirstPara:function(){var host=this.get(HOST),inst=host.getInstance(),sel;inst.one('body').set('innerHTML','<'+P+'>'+inst.Selection.CURSOR+'</'+P+'>');var n=inst.one(FIRST_P);sel=new inst.Selection();sel.selectNode(n,true,false);},_onNodeChange:function(e){var host=this.get(HOST),inst=host.getInstance(),html,txt,par,d,sel,btag=inst.Selection.DEFAULT_BLOCK_TAG,inHTML,txt2,childs,aNode,index,node2,top,n,sib,ps,br,item,p,imgs,t,LAST_CHILD=':last-child';switch(e.changedType){case'enter-up':var para=((this._lastPara)?this._lastPara:e.changedNode),b=para.one('br.yui-cursor');if(this._lastPara){delete this._lastPara;}
9 if(b){if(b.previous()||b.next()){b.remove();}}
10 if(!para.test(btag)){var para2=para.ancestor(btag);if(para2){para=para2;para2=null;}}
11 if(para.test(btag)){var prev=para.previous(),lc,lc2,found=false;if(prev){lc=prev.one(LAST_CHILD);while(!found){if(lc){lc2=lc.one(LAST_CHILD);if(lc2){lc=lc2;}else{found=true;}}else{found=true;}}
12 if(lc){host.copyStyles(lc,para);}}}
13 break;case'enter':if(Y.UA.webkit){if(e.changedEvent.shiftKey){host.execCommand('insertbr');e.changedEvent.preventDefault();}}
14 if(Y.UA.gecko&&host.get('defaultblock')!=='p'){par=e.changedNode;if(!par.test(LI)&&!par.ancestor(LI)){if(!par.test(btag)){par=par.ancestor(btag);}
15 d=inst.Node.create('<'+btag+'></'+btag+'>');par.insert(d,'after');sel=new inst.Selection();if(sel.anchorOffset){inHTML=sel.anchorNode.get('textContent');txt=inst.one(inst.config.doc.createTextNode(inHTML.substr(0,sel.anchorOffset)));txt2=inst.one(inst.config.doc.createTextNode(inHTML.substr(sel.anchorOffset)));aNode=sel.anchorNode;aNode.setContent('');node2=aNode.cloneNode();node2.append(txt2);top=false;sib=aNode;while(!top){sib=sib.get(PARENT_NODE);if(sib&&!sib.test(btag)){n=sib.cloneNode();n.set('innerHTML','');n.append(node2);childs=sib.get('childNodes');var start=false;childs.each(function(c){if(start){n.append(c);}
16 if(c===aNode){start=true;}});aNode=sib;node2=n;}else{top=true;}}
17 txt2=node2;sel.anchorNode.append(txt);if(txt2){d.append(txt2);}}
18 if(d.get(FC)){d=d.get(FC);}
19 d.prepend(inst.Selection.CURSOR);sel.focusCursor(true,true);html=inst.Selection.getText(d);if(html!==''){inst.Selection.cleanCursor();}
20 e.changedEvent.preventDefault();}}
21 break;case'keydown':if(inst.config.doc.childNodes.length<2){var cont=inst.config.doc.body.innerHTML;if(cont&&cont.length<5&&cont.toLowerCase()==BR){this._fixFirstPara();}}
22 break;case'backspace-up':case'backspace-down':case'delete-up':if(!Y.UA.ie){ps=inst.all(FIRST_P);item=inst.one(BODY);if(ps.item(0)){item=ps.item(0);}
23 br=item.one('br');if(br){br.removeAttribute('id');br.removeAttribute('class');}
24 txt=inst.Selection.getText(item);txt=txt.replace(/ /g,'').replace(/\n/g,'');imgs=item.all('img');if(txt.length===0&&!imgs.size()){if(!item.test(P)){this._fixFirstPara();}
25 p=null;if(e.changedNode&&e.changedNode.test(P)){p=e.changedNode;}
26 if(!p&&host._lastPara&&host._lastPara.inDoc()){p=host._lastPara;}
27 if(p&&!p.test(P)){p=p.ancestor(P);}
28 if(p){if(!p.previous()&&p.get(PARENT_NODE)&&p.get(PARENT_NODE).test(BODY)){e.changedEvent.frameEvent.halt();}}}
29 if(Y.UA.webkit){if(e.changedNode){item=e.changedNode;if(item.test('li')&&(!item.previous()&&!item.next())){html=item.get('innerHTML').replace(BR,'');if(html===''){if(item.get(PARENT_NODE)){item.get(PARENT_NODE).replace(inst.Node.create(BR));e.changedEvent.frameEvent.halt();e.preventDefault();inst.Selection.filterBlocks();}}}}}}
30 if(Y.UA.gecko){d=e.changedNode;t=inst.config.doc.createTextNode(' ');d.appendChild(t);d.removeChild(t);}
31 break;}
32 if(Y.UA.gecko){if(e.changedNode&&!e.changedNode.test(btag)){var p=e.changedNode.ancestor(btag);if(p){this._lastPara=p;}}}},_afterEditorReady:function(){var host=this.get(HOST),inst=host.getInstance(),btag;if(inst){inst.Selection.filterBlocks();btag=inst.Selection.DEFAULT_BLOCK_TAG;FIRST_P=BODY+' > '+btag;P=btag;}},_afterContentChange:function(){var host=this.get(HOST),inst=host.getInstance();if(inst&&inst.Selection){inst.Selection.filterBlocks();}},_afterPaste:function(){var host=this.get(HOST),inst=host.getInstance(),sel=new inst.Selection();Y.later(50,host,function(){inst.Selection.filterBlocks();});},initializer:function(){var host=this.get(HOST);if(host.editorBR){Y.error('Can not plug EditorPara and EditorBR at the same time.');return;}
33 host.on(NODE_CHANGE,Y.bind(this._onNodeChange,this));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));}}},{NAME:'editorPara',NS:'editorPara',ATTRS:{host:{value:false}}});Y.namespace('Plugin');Y.Plugin.EditorPara=EditorPara;},'3.3.0',{requires:['node'],skinnable:false});