2013-02-20 21:53:15 +01:00
/ * *
2013-04-13 21:00:13 +02:00
* EGroupware eTemplate2 - JS widget class for an iframe
2013-02-20 21:53:15 +01:00
*
* @ license http : //opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @ package etemplate
* @ subpackage api
* @ link http : //www.egroupware.org
* @ author Nathan Gray
* @ copyright Nathan Gray 2013
* @ version $Id$
* /
/ * e g w : u s e s
et2 _core _valueWidget ;
* /
2013-04-13 21:00:13 +02:00
/ * *
* @ augments et2 _valueWidget
* /
2016-02-29 21:40:43 +01:00
var et2 _iframe = ( function ( ) { "use strict" ; return et2 _valueWidget . extend (
2013-04-13 21:00:13 +02:00
{
2013-02-20 21:53:15 +01:00
attributes : {
'label' : {
2013-04-13 21:00:13 +02:00
'default' : "" ,
2013-02-20 21:53:15 +01:00
description : "The label is displayed by default in front (for radiobuttons behind) each widget (if not empty). If you want to specify a different position, use a '%s' in the label, which gets replaced by the widget itself. Eg. '%s Name' to have the label Name behind a checkbox. The label can contain variables, as descript for name. If the label starts with a '@' it is replaced by the value of the content-array at this index (with the '@'-removed and after expanding the variables)." ,
ignore : false ,
name : "Label" ,
translate : true ,
2016-06-30 09:06:06 +02:00
type : "string"
2013-02-20 21:53:15 +01:00
} ,
"needed" : {
"ignore" : true
} ,
"seamless" : {
name : "Seamless" ,
2013-04-13 21:00:13 +02:00
'default' : true ,
2013-02-20 21:53:15 +01:00
description : "Specifies that the iframe should be rendered in a manner that makes it appear to be part of the containing document" ,
translate : false ,
type : "boolean"
} ,
2013-07-03 16:26:33 +02:00
"name" : {
name : "Name" ,
"default" : "" ,
description : "Specifies name of frame, to be used as target for links" ,
type : "string"
2015-09-25 17:18:35 +02:00
} ,
fullscreen : {
name : "Fullscreen" ,
"default" : false ,
description : "Make the iframe compatible to be a fullscreen video player mode" ,
type : "boolean"
2017-01-04 11:57:31 +01:00
} ,
src : {
name : "Source" ,
"default" : "" ,
description : "Specifies URL for the iframe" ,
type : "string"
2016-06-30 09:06:06 +02:00
}
2013-02-20 21:53:15 +01:00
} ,
2013-04-13 21:00:13 +02:00
/ * *
* Constructor
2016-02-29 21:40:43 +01:00
*
2013-04-13 21:00:13 +02:00
* @ memberOf et2 _iframe
* /
2013-02-20 21:53:15 +01:00
init : function ( ) {
this . _super . apply ( this , arguments ) ;
2013-07-03 16:26:33 +02:00
// Allow no child widgets
this . supportedWidgetClasses = [ ] ;
2016-06-02 16:51:15 +02:00
this . htmlNode = jQuery ( document . createElement ( "iframe" ) ) ;
2013-07-03 16:26:33 +02:00
if ( this . options . label )
{
this . htmlNode . append ( '<span class="et2_label">' + this . options . label + '</span>' ) ;
}
2015-09-25 17:18:35 +02:00
if ( this . options . fullscreen )
{
this . htmlNode . attr ( 'allowfullscreen' , true ) ;
}
2013-07-03 16:26:33 +02:00
this . setDOMNode ( this . htmlNode [ 0 ] ) ;
} ,
2013-02-20 21:53:15 +01:00
2013-07-03 16:26:33 +02:00
/ * *
* Set name of iframe ( to be used as target for links )
2016-02-29 21:40:43 +01:00
*
2013-07-03 16:26:33 +02:00
* @ param _name
* /
set _name : function ( _name ) {
this . htmlNode . attr ( 'name' , this . htmlNode . name = _name ) ;
} ,
2013-02-20 21:53:15 +01:00
/ * *
* Make it look like part of the containing document
*
* @ param _seamless boolean
* /
set _seamless : function ( _seamless ) {
2013-04-13 21:00:13 +02:00
this . options . seamless = _seamless ;
2013-02-20 21:53:15 +01:00
this . htmlNode . attr ( "seamless" , _seamless ) ;
} ,
set _value : function ( _value ) {
if ( typeof _value == "undefined" ) _value = "" ;
2013-10-17 15:14:22 +02:00
if ( _value . trim ( ) . indexOf ( "http" ) == 0 || _value . indexOf ( 'about:' ) == 0 || _value [ 0 ] == '/' )
2013-02-20 21:53:15 +01:00
{
// Value is a URL
this . set _src ( _value ) ;
}
else
{
// Value is content
this . set _srcdoc ( _value ) ;
}
2013-07-03 16:26:33 +02:00
} ,
2013-02-20 21:53:15 +01:00
/ * *
* Set the URL for the iframe
*
* Sets the src attribute to the given value
*
* @ param _value String URL
* /
set _src : function ( _value ) {
if ( _value . trim ( ) != "" )
{
2014-01-18 17:55:16 +01:00
if ( _value . trim ( ) == 'about:blank' )
{
this . htmlNode . attr ( "src" , _value ) ;
}
else
{
// Load the new page, but display a loader
2016-06-02 16:51:15 +02:00
var loader = jQuery ( '<div class="et2_iframe loading"/>' ) ;
2014-01-18 17:55:16 +01:00
this . htmlNode
. before ( loader ) ;
window . setTimeout ( jQuery . proxy ( function ( ) {
this . htmlNode . attr ( "src" , _value )
. one ( 'load' , function ( ) {
loader . remove ( ) ;
} ) ;
} , this ) , 0 ) ;
}
2013-02-20 21:53:15 +01:00
}
} ,
/ * *
* Sets the content of the iframe
*
* Sets the srcdoc attribute to the given value
*
* @ param _value String Content of a document
* /
set _srcdoc : function ( _value ) {
this . htmlNode . attr ( "srcdoc" , _value ) ;
}
2016-02-29 21:40:43 +01:00
} ) ; } ) . call ( this ) ;
2013-02-20 21:53:15 +01:00
et2 _register _widget ( et2 _iframe , [ "iframe" ] ) ;