]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/yui3/build/editor/frame.js
Release 6.5.0
[Github/sugarcrm.git] / include / javascript / yui3 / build / editor / frame.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('frame',function(Y){var Frame=function(){Frame.superclass.constructor.apply(this,arguments);};Y.extend(Frame,Y.Base,{_ready:null,_rendered:null,_iframe:null,_instance:null,_create:function(cb){var win,doc,res,node;this._iframe=Y.Node.create(Frame.HTML);this._iframe.setStyle('visibility','hidden');this._iframe.set('src',this.get('src'));this.get('container').append(this._iframe);this._iframe.set('height','99%');var html='',extra_css=((this.get('extracss'))?'<style id="extra_css">'+this.get('extracss')+'</style>':'');html=Y.substitute(Frame.PAGE_HTML,{DIR:this.get('dir'),LANG:this.get('lang'),TITLE:this.get('title'),META:Frame.META,LINKED_CSS:this.get('linkedcss'),CONTENT:this.get('content'),BASE_HREF:this.get('basehref'),DEFAULT_CSS:Frame.DEFAULT_CSS,EXTRA_CSS:extra_css});if(Y.config.doc.compatMode!='BackCompat'){html=Frame.getDocType()+"\n"+html;}else{}
9 res=this._resolveWinDoc();res.doc.open();res.doc.write(html);res.doc.close();if(this.get('designMode')){res.doc.designMode='on';}
10 if(!res.doc.documentElement){var timer=Y.later(1,this,function(){if(res.doc&&res.doc.documentElement){cb(res);timer.cancel();}},null,true);}else{cb(res);}},_resolveWinDoc:function(c){var config=(c)?c:{};config.win=Y.Node.getDOMNode(this._iframe.get('contentWindow'));config.doc=Y.Node.getDOMNode(this._iframe.get('contentWindow.document'));if(!config.doc){config.doc=Y.config.doc;}
11 if(!config.win){config.win=Y.config.win;}
12 return config;},_onDomEvent:function(e){var xy,node;e.frameX=e.frameY=0;if(e.pageX>0||e.pageY>0){if(e.type.substring(0,3)!=='key'){node=this._instance.one('win');xy=this._iframe.getXY();e.frameX=xy[0]+e.pageX-node.get('scrollLeft');e.frameY=xy[1]+e.pageY-node.get('scrollTop');}}
13 e.frameTarget=e.target;e.frameCurrentTarget=e.currentTarget;e.frameEvent=e;this.fire('dom:'+e.type,e);},initializer:function(){this.publish('ready',{emitFacade:true,defaultFn:this._defReadyFn});},destructor:function(){var inst=this.getInstance();inst.one('doc').detachAll();inst=null;this._iframe.remove();},_DOMPaste:function(e){var inst=this.getInstance(),data='',win=inst.config.win;if(e._event.originalTarget){data=e._event.originalTarget;}
14 if(e._event.clipboardData){data=e._event.clipboardData.getData('Text');}
15 if(win.clipboardData){data=win.clipboardData.getData('Text');if(data===''){if(!win.clipboardData.setData('Text',data)){data=null;}}}
16 e.frameTarget=e.target;e.frameCurrentTarget=e.currentTarget;e.frameEvent=e;if(data){e.clipboardData={data:data,getData:function(){return data;}};}else{e.clipboardData=null;}
17 this.fire('dom:paste',e);},_defReadyFn:function(){var inst=this.getInstance(),fn=Y.bind(this._onDomEvent,this),kfn=((Y.UA.ie)?Y.throttle(fn,200):fn);inst.Node.DOM_EVENTS.activate=1;inst.Node.DOM_EVENTS.beforedeactivate=1;inst.Node.DOM_EVENTS.focusin=1;inst.Node.DOM_EVENTS.deactivate=1;inst.Node.DOM_EVENTS.focusout=1;Y.each(Frame.DOM_EVENTS,function(v,k){if(v===1){if(k!=='focus'&&k!=='blur'&&k!=='paste'){if(k.substring(0,3)==='key'){if(k==='keydown'){inst.on(k,fn,inst.config.doc);}else{inst.on(k,kfn,inst.config.doc);}}else{inst.on(k,fn,inst.config.doc);}}}},this);inst.Node.DOM_EVENTS.paste=1;inst.on('paste',Y.bind(this._DOMPaste,this),inst.one('body'));inst.on('focus',fn,inst.config.win);inst.on('blur',fn,inst.config.win);inst._use=inst.use;inst.use=Y.bind(this.use,this);this._iframe.setStyles({visibility:'inherit'});inst.one('body').setStyle('display','block');if(Y.UA.ie){this._fixIECursors();}},_fixIECursors:function(){var inst=this.getInstance(),tables=inst.all('table'),brs=inst.all('br'),si;if(tables.size()&&brs.size()){si=tables.item(0).get('sourceIndex');brs.each(function(n){var p=n.get('parentNode'),c=p.get('children'),b=p.all('>br');if(p.test('div')){if(c.size()>2){n.replace(inst.Node.create('<wbr>'));}else{if(n.get('sourceIndex')>si){if(b.size()){n.replace(inst.Node.create('<wbr>'));}}else{if(b.size()>1){n.replace(inst.Node.create('<wbr>'));}}}}});}},_onContentReady:function(e){if(!this._ready){this._ready=true;var inst=this.getInstance(),args=Y.clone(this.get('use'));this.fire('contentready');if(e){inst.config.doc=Y.Node.getDOMNode(e.target);}
18 args.push(Y.bind(function(){if(inst.Selection){inst.Selection.DEFAULT_BLOCK_TAG=this.get('defaultblock');}
19 this.fire('ready');},this));inst.use.apply(inst,args);inst.one('doc').get('documentElement').addClass('yui-js-enabled');}},_resolveBaseHref:function(href){if(!href||href===''){href=Y.config.doc.location.href;if(href.indexOf('?')!==-1){href=href.substring(0,href.indexOf('?'));}
20 href=href.substring(0,href.lastIndexOf('/'))+'/';}
21 return href;},_getHTML:function(html){if(this._ready){var inst=this.getInstance();html=inst.one('body').get('innerHTML');}
22 return html;},_setHTML:function(html){if(this._ready){var inst=this.getInstance();inst.one('body').set('innerHTML',html);}else{this.on('contentready',Y.bind(function(html,e){var inst=this.getInstance();inst.one('body').set('innerHTML',html);},this,html));}
23 return html;},_getLinkedCSS:function(urls){if(!Y.Lang.isArray(urls)){urls=[urls];}
24 var str='';if(!this._ready){Y.each(urls,function(v){if(v!==''){str+='<link rel="stylesheet" href="'+v+'" type="text/css">';}});}else{str=urls;}
25 return str;},_setLinkedCSS:function(css){if(this._ready){var inst=this.getInstance();inst.Get.css(css);}
26 return css;},_setExtraCSS:function(css){if(this._ready){var inst=this.getInstance(),node=inst.get('#extra_css');node.remove();inst.one('head').append('<style id="extra_css">'+css+'</style>');}
27 return css;},_instanceLoaded:function(inst){this._instance=inst;this._onContentReady();var doc=this._instance.config.doc;if(this.get('designMode')){if(!Y.UA.ie){try{doc.execCommand('styleWithCSS',false,false);doc.execCommand('insertbronreturn',false,false);}catch(err){}}}},use:function(){var inst=this.getInstance(),args=Y.Array(arguments),cb=false;if(Y.Lang.isFunction(args[args.length-1])){cb=args.pop();}
28 if(cb){args.push(function(){cb.apply(inst,arguments);});}
29 inst._use.apply(inst,args);},delegate:function(type,fn,cont,sel){var inst=this.getInstance();if(!inst){return false;}
30 if(!sel){sel=cont;cont='body';}
31 return inst.delegate(type,fn,cont,sel);},getInstance:function(){return this._instance;},render:function(node){if(this._rendered){return this;}
32 this._rendered=true;if(node){this.set('container',node);}
33 this._create(Y.bind(function(res){var inst,timer,cb=Y.bind(function(i){this._instanceLoaded(i);},this),args=Y.clone(this.get('use')),config={debug:false,win:res.win,doc:res.doc},fn=Y.bind(function(){config=this._resolveWinDoc(config);inst=YUI(config);try{inst.use('node-base',cb);if(timer){clearInterval(timer);}}catch(e){timer=setInterval(function(){fn();},350);}},this);args.push(fn);Y.use.apply(Y,args);},this));return this;},_handleFocus:function(){var inst=this.getInstance(),sel=new inst.Selection();if(sel.anchorNode){var n=sel.anchorNode,c=n.get('childNodes');if(c.size()==1){if(c.item(0).test('br')){sel.selectNode(n,true,false);}
34 if(c.item(0).test('p')){n=c.item(0).one('br.yui-cursor').get('parentNode');sel.selectNode(n,true,false);}}}},focus:function(fn){if(Y.UA.ie){try{Y.one('win').focus();this.getInstance().one('win').focus();}catch(ierr){}
35 if(fn===true){this._handleFocus();}
36 if(Y.Lang.isFunction(fn)){fn();}}else{try{Y.one('win').focus();Y.later(100,this,function(){this.getInstance().one('win').focus();if(fn===true){this._handleFocus();}
37 if(Y.Lang.isFunction(fn)){fn();}});}catch(ferr){}}
38 return this;},show:function(){this._iframe.setStyles({position:'static',left:''});if(Y.UA.gecko){try{this._instance.config.doc.designMode='on';}catch(e){}
39 this.focus();}
40 return this;},hide:function(){this._iframe.setStyles({position:'absolute',left:'-999999px'});return this;}},{DOM_EVENTS:{dblclick:1,click:1,paste:1,mouseup:1,mousedown:1,keyup:1,keydown:1,keypress:1,activate:1,deactivate:1,beforedeactivate:1,focusin:1,focusout:1},DEFAULT_CSS:'body { background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } img { cursor: pointer !important; border: none; }',HTML:'<iframe border="0" frameBorder="0" marginWidth="0" marginHeight="0" leftMargin="0" topMargin="0" allowTransparency="true" width="100%" height="99%"></iframe>',PAGE_HTML:'<html dir="{DIR}" lang="{LANG}"><head><title>{TITLE}</title>{META}<base href="{BASE_HREF}"/>{LINKED_CSS}<style id="editor_css">{DEFAULT_CSS}</style>{EXTRA_CSS}</head><body>{CONTENT}</body></html>',getDocType:function(){var dt=Y.config.doc.doctype,str=Frame.DOC_TYPE;if(dt){str='<!DOCTYPE '+dt.name+((dt.publicId)?' '+dt.publicId:'')+((dt.systemId)?' '+dt.systemId:'')+'>';}else{if(Y.config.doc.all){dt=Y.config.doc.all[0];if(dt.nodeType){if(dt.nodeType===8){if(dt.nodeValue){if(dt.nodeValue.toLowerCase().indexOf('doctype')!==-1){str='<!'+dt.nodeValue+'>';}}}}}}
41 return str;},DOC_TYPE:'<!DOCTYPE HTML PUBLIC "-/'+'/W3C/'+'/DTD HTML 4.01/'+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',META:'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>',NAME:'frame',ATTRS:{title:{value:'Blank Page'},dir:{value:'ltr'},lang:{value:'en-US'},src:{value:'javascript'+((Y.UA.ie)?':false':':')+';'},designMode:{writeOnce:true,value:false},content:{value:'<br>',setter:'_setHTML',getter:'_getHTML'},basehref:{value:false,getter:'_resolveBaseHref'},use:{writeOnce:true,value:['substitute','node','node-style','selector-css3']},container:{value:'body',setter:function(n){return Y.one(n);}},node:{readOnly:true,value:null,getter:function(){return this._iframe;}},id:{writeOnce:true,getter:function(id){if(!id){id='iframe-'+Y.guid();}
42 return id;}},linkedcss:{value:'',getter:'_getLinkedCSS',setter:'_setLinkedCSS'},extracss:{value:'',setter:'_setExtraCSS'},host:{value:false},defaultblock:{value:'p'}}});Y.Frame=Frame;},'3.3.0',{requires:['base','node','selector-css3','substitute'],skinnable:false});