| <?xml version="1.0" encoding="UTF-8" ?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| <!-- |
| |
| Requirements : |
| the html must contain the following in the HEAD : |
| |
| function createIFrame(n,id,src,x,y,w,h){ |
| var newChild = document.createElement('iframe'); |
| newChild.style.visibility='hidden'; |
| newChild.style.position='absolute'; |
| newChild.style.top='0px'; |
| newChild.id=id; |
| newChild.name=n; |
| newChild.src=src; |
| newChild.style.border='0px'; |
| newChild.style.left=x+"px"; |
| newChild.style.top=y+"px"; |
| newChild.width=w+"px"; |
| newChild.height=h+"px"; |
| document.body.appendChild(newChild); |
| } |
| function centerIframe(iid,x,y,w,h) { |
| var frameRef=document.getElementById(iid); |
| frameRef.style.left=x+"px"; |
| frameRef.style.top=y+"px"; |
| frameRef.width=w+"px"; |
| frameRef.height=h+"px"; |
| } |
| function hideIFrame(){ |
| document.getElementById("ifrm1_id").style.visibility="hidden"; |
| } |
| function showIFrame(){ |
| document.getElementById("ifrm1_id").style.visibility="visible"; |
| } |
| |
| Attributes : |
| - isrc : url for the iframeView |
| - iname : name for the iframeView |
| - iid : id for the iframeView |
| - callbackTimerDelay : optional |
| - createIFrame_callbackCounter : optional |
| - createIFrame_callbackMax : optional |
| |
| Exemple : |
| |
| <canvas debug="true" > |
| |
| <include href="library/iFrame.lzx" /> |
| |
| |
| <window id="w" x="100" y="50" width="350" height="250" resizable="true" > |
| |
| <handler name="oninit"> |
| new LzDelegate(ifrm,"centerIframe",this,"onx"); |
| new LzDelegate(ifrm,"centerIframe",this,"ony"); |
| </handler> |
| |
| <iframeView name="ifrm" |
| width = "${immediateparent.width }" |
| height= "${immediateparent.height }" |
| isrc = "http://www.google.fr/" |
| iid = "myIframeId" |
| iname = "myIfrName" |
| /> |
| |
| </window> |
| |
| |
| </canvas> |
| |
| --> |
| |
| <library> |
| |
| <class name="iframeView" extends="view" > |
| |
| <attribute name="isrc" type="string" setter="setIsrc(isrc)"/> |
| <attribute name="iname" type="string" /> |
| <attribute name="iid" type="string" /> |
| |
| <method name="display"> |
| var s = "javascript:document.getElementById('" |
| + iid |
| + "').style.visibility='visible'"; |
| lz.Browser.loadJS(s); |
| </method> |
| |
| <method name="hide"> |
| var s = "javascript:document.getElementById('" |
| + iid |
| + "').style.visibility='hidden'"; |
| //Debug.write("on hide l'iframe",iid," :",s); |
| lz.Browser.loadJS(s); |
| </method> |
| |
| <method name="setIsrc" args="s"> |
| if (!this.isinited || this.isrc== null) { //catch the case where this.time is being |
| this.isrc = s; //initialized during object instantiation |
| return; |
| } |
| var s = "javascript:document.getElementById('" |
| + iid |
| + "').src='" |
| + s |
| + "'"; |
| lz.Browser.loadJS(s); |
| </method> |
| |
| <handler name="oninit" > |
| // First initialize the iFrame loading detection mechanism : |
| //initCreateIFrameDone(); |
| // Now creating the iframeView : |
| //createIFrame(); |
| </handler> |
| |
| <method name="createIFrame" > |
| //Debug.write("create IFRAME !!!!!!!!!!!!!!"); |
| var s = "javascript:createIFrame('" |
| + iname + "','" |
| + iid + "','" |
| + isrc + "','" |
| + this.getAttributeRelative("x",canvas) + "','" |
| + this.getAttributeRelative("y",canvas) + "','" |
| + (width +1) + "','" |
| + (height+1) |
| + "')"; |
| // the browser must also tell our laszlo when the iframeView has been loaded : |
| s = s + ";document.getElementById('" |
| + iid |
| + "').style.visibility='visible'"; |
| s = s + ";lzSetCanvasAttribute('" + createIFrameDone_attr + "', true)"; |
| ////Debug.write("Calling createIFrame ; loadJS : " + s);// |
| lz.Browser.loadJS(s); |
| // initializing the scheduled check of this iFrame's load state |
| if(typeof this.createIFrame_callbackDelegate == 'undefined') { |
| this.createIFrame_callbackDelegate = new LzDelegate( this, "createIFrame_callback" ); |
| } |
| lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay ); |
| </method> |
| |
| <!-- Iframe load state detection state and initialization --> |
| <attribute name="createIFrameDone_attr" type="string"/><!-- is initialized in oninit() --> |
| <method name="initCreateIFrameDone"> |
| // Initializes the iFrame loading detection mechanism. |
| // computing and setting the name of this iframeView's own |
| // load state attribute on the canvas : |
| this.createIFrameDone_attr = 'iFrame.createIFrameDone_' + this.iid; |
| // initializing this iframeView's own load state on the canvas : |
| canvas.setAttribute(createIFrameDone_attr, false); |
| ////Debug.write('createIFrameDone_attr='+this.createIFrameDone_attr);// |
| ////Debug.write('createIFrameDone='+this.createIFrameDone+canvas.getAttribute(createIFrameDone_attr));// |
| </method> |
| |
| <!-- IFrame load state scheduled check --> |
| <attribute name="callbackTimerDelay" type="number" value="100" /> |
| <attribute name="createIFrame_callbackCounter" type="number" value="0" /> |
| <attribute name="createIFrame_callbackMax" type="number" value="1000" /> |
| <method name="createIFrame_callback"> |
| ////Debug.write("createIFrame_callback : createIFrame_done=" + canvas.getAttribute(createIFrameDone_attr));// |
| if(!canvas.getAttribute(createIFrameDone_attr)) { |
| if (this.createIFrame_callbackCounter * callbackTimerDelay < createIFrame_callbackMax) { |
| this.createIFrame_callbackCounter = this.createIFrame_callbackCounter + 1; |
| lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay ); |
| } |
| } else { |
| // creating iframeView moves listeners : |
| //Debug.write('createListeners');// |
| createListeners(); |
| // now let's make sure the iframeView has been toggled by moving it |
| if (this.iFrameJsStack == 'javascript:') { |
| ////Debug.write('createListeners.move');// |
| // there's no javascript stack yet, so let's simply move the iframeView : |
| centerIframe(); |
| } else { |
| ////Debug.write('createListeners.stacked '+this.iFrameJsStack);// |
| // some javascript has been scheduled to be loaded, so let's do it : |
| lz.Browser.loadJS(this.iFrameJsStack); |
| } |
| } |
| </method> |
| |
| <!-- Stackable javascript execution mechanisme --> |
| <attribute name="iFrameJsStack" type="string" value="javascript:" /> |
| <method name="executeJs" args="s"> |
| ////Debug.write("executeJs", s);// |
| if (canvas.getAttribute(createIFrameDone_attr)) { |
| ////Debug.write("executeJs.direct", s);// |
| lz.Browser.loadJS(s); // iframeView is loaded, so direct execution |
| } else { |
| ////Debug.write("executeJs.stacked", s);// |
| // else the iframeView has not yet been loaded, so let's stack it : |
| this.iFrameJsStack = this.iFrameJsStack + ';' + s ; |
| } |
| </method> |
| |
| <method name="createListeners" > |
| this.myDelx = new LzDelegate(this, "centerIframe", this, "onx"); |
| this.myDely = new LzDelegate(this, "centerIframe", this, "ony"); |
| this.myDelw = new LzDelegate(this, "centerIframe", this, "onwidth"); |
| this.myDelh = new LzDelegate(this, "centerIframe", this, "onheight"); |
| </method> |
| |
| <method name="centerIframe"> |
| // we use a timer in order to avoid too many js call (slow) |
| //Debug.write("centerIframe request"); |
| if(typeof this.centerIframe_Delegate == 'undefined') { |
| this.centerIframe_Delegate = new LzDelegate( this, "centerIframe_jsCall" ); |
| } |
| lz.Timer.resetTimer( this.centerIframe_Delegate, 20 ); |
| </method> |
| |
| <method name="centerIframe_jsCall"> |
| var s = "javascript:centerIframe('" |
| + this.iid + "','" |
| + this.getAttributeRelative("x",canvas) + "','" |
| + this.getAttributeRelative("y",canvas) + "','" |
| + (width +1) + "','" |
| + (height+1) + "')"; |
| this.executeJs(s); // using the stackable js exec mechanism |
| </method> |
| |
| </class> |
| |
| </library> |
| |