@qooxdoo/framework
Version:
The JS Framework for Coders
178 lines (141 loc) • 3.72 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Sebastian Werner (wpbasti)
* Andreas Ecker (ecker)
* Til Schneider (til132)
* Jonathan Weiß (jonathan_rass)
* Fabian Jakobs (fjakobs)
************************************************************************ */
/**
* Abstract base class for iframe widgets.
*/
qx.Class.define("qx.ui.embed.AbstractIframe",
{
extend : qx.ui.core.Widget,
/**
* @param source {String} URL which should initially set.
*/
construct : function(source)
{
this.base(arguments);
if (source) {
this.setSource(source);
}
this._getIframeElement().addListener("navigate", this.__onNavigate, this);
},
events:
{
/**
* The "load" event is fired after the iframe content has successfully been loaded.
*/
"load" : "qx.event.type.Event",
/**
* The "navigate" event is fired whenever the location of the iframe
* changes.
*
* Useful to track user navigation and internally used to keep the source
* property in sync. Only works when the destination source is of same
* origin than the page embedding the iframe.
*/
"navigate" : "qx.event.type.Data"
},
properties :
{
/**
* Source URL of the iframe.
*/
source :
{
check : "String",
apply : "_applySource",
init : "about:blank"
},
/**
* Name of the iframe.
*/
frameName :
{
check : "String",
init : "",
apply : "_applyFrameName"
}
},
members :
{
/**
* Get the Element wrapper for the iframe
*
* @abstract
* @return {qx.html.Iframe} the iframe element wrapper
*/
_getIframeElement : function() {
throw new Error("Abstract method call");
},
// property apply
_applySource : function(value, old) {
this._getIframeElement().setSource(value);
},
// property apply
_applyFrameName : function(value, old) {
this._getIframeElement().setAttribute("name", value);
},
/**
* Get the DOM window object of an iframe.
*
* @return {Window} The DOM window object of the iframe.
*/
getWindow : function() {
return this._getIframeElement().getWindow();
},
/**
* Get the DOM document object of an iframe.
*
* @return {Document} The DOM document object of the iframe.
*/
getDocument : function() {
return this._getIframeElement().getDocument();
},
/**
* Get the HTML body element of the iframe.
*
* @return {Element} The DOM node of the <code>body</code> element of the iframe.
*/
getBody : function() {
return this._getIframeElement().getBody();
},
/**
* Get the current name.
*
* @return {String} The iframe's name.
*/
getName : function() {
return this._getIframeElement().getName();
},
/**
* Reload the contents of the iframe.
*
*/
reload : function() {
this._getIframeElement().reload();
},
/**
* Handle user navigation. Sync actual URL of iframe with source property.
*
* @param e {qx.event.type.Data} navigate event
*/
__onNavigate: function(e) {
var actualUrl = e.getData();
if (actualUrl) {
this.setSource(actualUrl);
}
this.fireDataEvent("navigate", actualUrl);
}
}
});