2020-01-23 15:14:46 +01:00
"use strict" ;
2011-08-18 19:34:01 +02:00
/ * *
2013-04-13 21:00:13 +02:00
* EGroupware eTemplate2 - JS Radiobox object
2011-08-18 19:34:01 +02: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 2011
* @ version $Id$
* /
2020-01-23 15:14:46 +01:00
var _ _extends = ( this && this . _ _extends ) || ( function ( ) {
var extendStatics = function ( d , b ) {
extendStatics = Object . setPrototypeOf ||
( { _ _proto _ _ : [ ] } instanceof Array && function ( d , b ) { d . _ _proto _ _ = b ; } ) ||
function ( d , b ) { for ( var p in b ) if ( b . hasOwnProperty ( p ) ) d [ p ] = b [ p ] ; } ;
return extendStatics ( d , b ) ;
} ;
return function ( d , b ) {
extendStatics ( d , b ) ;
function _ _ ( ) { this . constructor = d ; }
d . prototype = b === null ? Object . create ( b ) : ( _ _ . prototype = b . prototype , new _ _ ( ) ) ;
} ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
2011-08-18 19:34:01 +02:00
/ * e g w : u s e s
2020-01-23 15:14:46 +01:00
/ v e n d o r / b o w e r - a s s e t / j q u e r y / d i s t / j q u e r y . j s ;
et2 _core _inputWidget ;
2011-08-18 19:34:01 +02:00
* /
2020-01-23 15:14:46 +01:00
var et2 _core _inputWidget _1 = require ( "./et2_core_inputWidget" ) ;
var et2 _core _inheritance _1 = require ( "./et2_core_inheritance" ) ;
var et2 _core _widget _1 = require ( "./et2_core_widget" ) ;
var et2 _core _valueWidget _1 = require ( "./et2_core_valueWidget" ) ;
2011-08-18 19:34:01 +02:00
/ * *
* Class which implements the "radiobox" XET - Tag
2014-02-13 10:50:49 +01:00
*
2013-10-09 18:22:35 +02:00
* A radio button belongs to same group by giving all buttons of a group same id !
2014-02-13 10:50:49 +01:00
*
2013-10-09 18:22:35 +02:00
* set _value iterates over all of them and ( un ) checks them depending on given value .
2014-02-13 10:50:49 +01:00
*
2013-04-13 21:00:13 +02:00
* @ augments et2 _inputWidget
2014-02-13 10:50:49 +01:00
* /
2020-01-23 15:14:46 +01:00
var et2 _radiobox = /** @class */ ( function ( _super ) {
_ _extends ( et2 _radiobox , _super ) ;
/ * *
* Constructor
*
* @ memberOf et2 _radiobox
* /
function et2 _radiobox ( _parent , _attrs , _child ) {
var _this = _super . call ( this , _parent , _attrs , et2 _core _inheritance _1 . ClassWithAttributes . extendAttributes ( et2 _radiobox . _attributes , _child || { } ) ) || this ;
_this . input = null ;
_this . id = "" ;
_this . createInputWidget ( ) ;
return _this ;
}
et2 _radiobox . prototype . transformAttributes = function ( _attrs ) {
_super . prototype . transformAttributes . call ( this , _attrs ) ;
var readonly = this . getArrayMgr ( 'readonlys' ) . getEntry ( this . id ) ;
if ( readonly && readonly . hasOwnProperty ( _attrs . set _value ) ) {
_attrs . readonly = readonly [ _attrs . set _value ] ;
}
} ;
et2 _radiobox . prototype . createInputWidget = function ( ) {
this . input = jQuery ( document . createElement ( "input" ) )
. val ( this . options . set _value )
. attr ( "type" , "radio" )
. attr ( "disabled" , this . options . readonly ) ;
this . input . addClass ( "et2_radiobox" ) ;
this . setDOMNode ( this . input [ 0 ] ) ;
} ;
/ * *
* Overwritten to set different DOM level ids by appending set _value
*
* @ param _id
* /
et2 _radiobox . prototype . set _id = function ( _id ) {
_super . prototype . set _id . call ( this , _id ) ;
this . dom _id = this . dom _id . replace ( '[]' , '' ) + '-' + this . options . set _value ;
if ( this . input )
this . input . attr ( 'id' , this . dom _id ) ;
} ;
/ * *
* Default for radio buttons is label after button
*
* @ param _label String New label for radio button . Use % s to locate the radio button somewhere else in the label
* /
et2 _radiobox . prototype . set _label = function ( _label ) {
if ( _label . length > 0 && _label . indexOf ( '%s' ) == - 1 ) {
_label = '%s' + _label ;
}
_super . prototype . set _label . call ( this , _label ) ;
} ;
/ * *
* Override default to match against set / unset value AND iterate over all siblings with same id
*
* @ param { string } _value
* /
et2 _radiobox . prototype . set _value = function ( _value ) {
this . getRoot ( ) . iterateOver ( function ( radio ) {
if ( radio . id == this . id ) {
radio . input . prop ( 'checked' , _value == radio . options . set _value ) ;
}
} , this , et2 _radiobox ) ;
} ;
/ * *
* Override default to iterate over all siblings with same id
*
* @ return { string }
* /
et2 _radiobox . prototype . getValue = function ( ) {
var val = this . options . value ; // initial value, when form is loaded
var values = [ ] ;
this . getRoot ( ) . iterateOver ( function ( radio ) {
values . push ( radio . options . set _value ) ;
if ( radio . id == this . id && radio . input && radio . input . prop ( 'checked' ) ) {
val = radio . options . set _value ;
}
} , this , et2 _radiobox ) ;
return val && val . indexOf ( values ) ? val : null ;
} ;
/ * *
* Overridden from parent so if it ' s required , only 1 in a group needs a value
*
* @ param { array } messages
* @ returns { Boolean }
* /
et2 _radiobox . prototype . isValid = function ( messages ) {
var ok = true ;
// Check for required
if ( this . options && this . options . needed && ! this . options . readonly && ! this . disabled &&
( this . getValue ( ) == null || this . getValue ( ) . valueOf ( ) == '' ) ) {
if ( jQuery . isEmptyObject ( this . getInstanceManager ( ) . getValues ( this . getInstanceManager ( ) . widgetContainer ) [ this . id . replace ( '[]' , '' ) ] ) ) {
messages . push ( this . egw ( ) . lang ( 'Field must not be empty !!!' ) ) ;
ok = false ;
}
}
return ok ;
} ;
et2 _radiobox . _attributes = {
"set_value" : {
"name" : "Set value" ,
"type" : "string" ,
"default" : "true" ,
"description" : "Value when selected"
} ,
"ro_true" : {
"name" : "Read only selected" ,
"type" : "string" ,
"default" : "x" ,
"description" : "What should be displayed when readonly and selected"
} ,
"ro_false" : {
"name" : "Read only unselected" ,
"type" : "string" ,
"default" : "" ,
"description" : "What should be displayed when readonly and not selected"
}
} ;
2020-03-30 18:28:48 +02:00
et2 _radiobox . legacyOptions = [ "set_value" , "ro_true" , "ro_false" ] ;
2020-01-23 15:14:46 +01:00
return et2 _radiobox ;
} ( et2 _core _inputWidget _1 . et2 _inputWidget ) ) ;
et2 _core _widget _1 . et2 _register _widget ( et2 _radiobox , [ "radio" ] ) ;
2013-04-13 21:00:13 +02:00
/ * *
* @ augments et2 _valueWidget
* /
2020-01-23 15:14:46 +01:00
var et2 _radiobox _ro = /** @class */ ( function ( _super ) {
_ _extends ( et2 _radiobox _ro , _super ) ;
/ * *
* Constructor
*
* @ memberOf et2 _radiobox _ro
* /
function et2 _radiobox _ro ( _parent , _attrs , _child ) {
var _this =
// Call the inherited constructor
_super . call ( this , _parent , _attrs , et2 _core _inheritance _1 . ClassWithAttributes . extendAttributes ( et2 _radiobox _ro . _attributes , _child || { } ) ) || this ;
_this . value = "" ;
_this . span = null ;
_this . span = jQuery ( document . createElement ( "span" ) )
. addClass ( "et2_radiobox" ) ;
_this . setDOMNode ( _this . span [ 0 ] ) ;
return _this ;
}
/ * *
* Override default to match against set / unset value
*
* @ param { string } _value
* /
et2 _radiobox _ro . prototype . set _value = function ( _value ) {
this . value = _value ;
if ( _value == this . options . set _value ) {
this . span . text ( this . options . ro _true ) ;
}
else {
this . span . text ( this . options . ro _false ) ;
}
} ;
et2 _radiobox _ro . prototype . set _label = function ( _label ) {
// no label for ro radio, we show label of checked option as content
} ;
/ * *
* Code for implementing et2 _IDetachedDOM
*
* @ param { array } _attrs
* /
et2 _radiobox _ro . prototype . getDetachedAttributes = function ( _attrs ) {
// Show label in nextmatch instead of just x
this . options . ro _true = this . options . label ;
_attrs . push ( "value" ) ;
} ;
et2 _radiobox _ro . prototype . getDetachedNodes = function ( ) {
return [ this . span [ 0 ] ] ;
} ;
et2 _radiobox _ro . prototype . setDetachedAttributes = function ( _nodes , _values ) {
this . span = jQuery ( _nodes [ 0 ] ) ;
this . set _value ( _values [ "value" ] ) ;
} ;
et2 _radiobox _ro . _attributes = {
"set_value" : {
"name" : "Set value" ,
"type" : "string" ,
"default" : "true" ,
"description" : "Value when selected"
} ,
"ro_true" : {
"name" : "Read only selected" ,
"type" : "string" ,
"default" : "x" ,
"description" : "What should be displayed when readonly and selected"
} ,
"ro_false" : {
"name" : "Read only unselected" ,
"type" : "string" ,
"default" : "" ,
"description" : "What should be displayed when readonly and not selected"
} ,
"label" : {
"name" : "Label" ,
"default" : "" ,
"type" : "string"
}
} ;
2020-03-30 18:28:48 +02:00
et2 _radiobox _ro . legacyOptions = [ "set_value" , "ro_true" , "ro_false" ] ;
2020-01-23 15:14:46 +01:00
return et2 _radiobox _ro ;
} ( et2 _core _valueWidget _1 . et2 _valueWidget ) ) ;
et2 _core _widget _1 . et2 _register _widget ( et2 _radiobox _ro , [ "radio_ro" ] ) ;
2012-03-23 19:57:13 +01:00
/ * *
* A group of radio buttons
2014-02-13 10:50:49 +01:00
*
2013-06-18 22:55:13 +02:00
* @ augments et2 _valueWidget
2014-02-13 10:50:49 +01:00
* /
2020-01-23 15:14:46 +01:00
var et2 _radioGroup = /** @class */ ( function ( _super ) {
_ _extends ( et2 _radioGroup , _super ) ;
/ * *
* Constructor
*
* @ param parent
* @ param attrs
* @ memberOf et2 _radioGroup
* /
function et2 _radioGroup ( _parent , _attrs , _child ) {
var _this =
// Call the inherited constructor
_super . call ( this , _parent , _attrs , et2 _core _inheritance _1 . ClassWithAttributes . extendAttributes ( et2 _radioGroup . _attributes , _child || { } ) ) || this ;
_this . node = null ;
_this . value = null ;
_this . node = jQuery ( document . createElement ( "div" ) )
. addClass ( "et2_vbox" )
. addClass ( "et2_box_widget" ) ;
if ( _this . options . needed ) {
// This isn't strictly allowed, but it works
_this . node . attr ( "required" , "required" ) ;
}
_this . setDOMNode ( _this . node [ 0 ] ) ;
// The supported widget classes array defines a whitelist for all widget
// classes or interfaces child widgets have to support.
_this . supportedWidgetClasses = [ et2 _radiobox , et2 _radiobox _ro ] ;
return _this ;
}
et2 _radioGroup . prototype . set _value = function ( _value ) {
this . value = _value ;
for ( var i = 0 ; i < this . _children . length ; i ++ ) {
var radio = this . _children [ i ] ;
radio . set _value ( _value ) ;
}
} ;
et2 _radioGroup . prototype . getValue = function ( ) {
return jQuery ( "input:checked" , this . getDOMNode ( ) ) . val ( ) ;
} ;
/ * *
* Set a bunch of radio buttons
*
* @ param { object } _options object with value : label pairs
* /
et2 _radioGroup . prototype . set _options = function ( _options ) {
// Call the destructor of all children
for ( var i = this . _children . length - 1 ; i >= 0 ; i -- ) {
2020-01-31 21:07:27 +01:00
this . _children [ i ] . destroy ( ) ;
2020-01-23 15:14:46 +01:00
}
this . _children = [ ] ;
// create radio buttons for each option
for ( var key in _options ) {
var attrs = {
// Add index so radios work properly
"id" : ( this . options . readonly ? this . id : this . id + "[" + "]" ) ,
set _value : key ,
label : _options [ key ] ,
ro _true : this . options . ro _true ,
ro _false : this . options . ro _false ,
readonly : this . options . readonly
} ;
if ( typeof _options [ key ] === 'object' && _options [ key ] . label ) {
attrs . set _value = _options [ key ] . value ;
attrs . label = _options [ key ] . label ;
}
// Can't have a required readonly, it will warn & be removed later, so avoid the warning
if ( attrs . readonly === false ) {
attrs [ 'needed' ] = this . options . needed ;
}
et2 _createWidget ( "radio" , attrs , this ) ;
}
this . set _value ( this . value ) ;
} ;
/ * *
* Set a label on the group of radio buttons
*
* @ param { string } _value
* /
et2 _radioGroup . prototype . set _label = function ( _value ) {
// Abort if ther was no change in the label
if ( _value == this . label ) {
return ;
}
if ( _value ) {
// Create the label container if it didn't exist yet
if ( this . _labelContainer == null ) {
this . _labelContainer = jQuery ( document . createElement ( "label" ) ) ;
this . getSurroundings ( ) . insertDOMNode ( this . _labelContainer [ 0 ] ) ;
}
// Clear the label container.
this . _labelContainer . empty ( ) ;
// Create the placeholder element and set it
var ph = document . createElement ( "span" ) ;
this . getSurroundings ( ) . setWidgetPlaceholder ( ph ) ;
this . _labelContainer
. append ( document . createTextNode ( _value ) )
. append ( ph ) ;
}
else {
// Delete the labelContainer from the surroundings object
if ( this . _labelContainer ) {
this . getSurroundings ( ) . removeDOMNode ( this . _labelContainer [ 0 ] ) ;
}
this . _labelContainer = null ;
}
} ;
/ * *
* Code for implementing et2 _IDetachedDOM
* This doesn ' t need to be implemented .
* Individual widgets are detected and handled by the grid , but the interface is needed for this to happen
*
* @ param { object } _attrs
* /
et2 _radioGroup . prototype . getDetachedAttributes = function ( _attrs ) {
} ;
et2 _radioGroup . prototype . getDetachedNodes = function ( ) {
return [ this . getDOMNode ( ) ] ;
} ;
et2 _radioGroup . prototype . setDetachedAttributes = function ( _nodes , _values ) {
} ;
et2 _radioGroup . _attributes = {
"label" : {
"name" : "Label" ,
"default" : "" ,
"type" : "string" ,
"description" : "The label is displayed above the list of radio buttons. 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)." ,
"translate" : true
} ,
"value" : {
"name" : "Value" ,
"type" : "string" ,
"default" : "true" ,
"description" : "Value for each radio button"
} ,
"ro_true" : {
"name" : "Read only selected" ,
"type" : "string" ,
"default" : "x" ,
"description" : "What should be displayed when readonly and selected"
} ,
"ro_false" : {
"name" : "Read only unselected" ,
"type" : "string" ,
"default" : "" ,
"description" : "What should be displayed when readonly and not selected"
} ,
"options" : {
"name" : "Radio options" ,
"type" : "any" ,
"default" : { } ,
"description" : "Options for radio buttons. Should be {value: label, ...}"
} ,
"needed" : {
"name" : "Required" ,
"default" : false ,
"type" : "boolean" ,
"description" : "If required, the user must select one of the options before the form can be submitted"
}
} ;
return et2 _radioGroup ;
} ( et2 _core _valueWidget _1 . et2 _valueWidget ) ) ;
2012-03-23 19:57:13 +01:00
// No such tag as 'radiogroup', but it needs something
2020-01-23 15:14:46 +01:00
et2 _core _widget _1 . et2 _register _widget ( et2 _radioGroup , [ "radiogroup" ] ) ;
//# sourceMappingURL=et2_widget_radiobox.js.map