2020-01-21 12:15:46 +01:00
/ * *
* EGroupware eTemplate2 - JS widget class with value attribute and auto loading
*
* @license http : //opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package etemplate
* @subpackage api
2021-06-07 17:33:53 +02:00
* @link https : //www.egroupware.org
2020-01-21 12:15:46 +01:00
* @author Andreas Stöckel
2021-06-07 17:33:53 +02:00
* @copyright EGroupware GmbH 2011 - 2021
2020-01-21 12:15:46 +01:00
* /
/ * e g w : u s e s
/ 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_baseWidget ;
* /
2020-01-21 12:48:48 +01:00
import { et2_baseWidget } from './et2_core_baseWidget'
2020-01-22 18:38:33 +01:00
import { WidgetConfig } from "./et2_core_widget" ;
import { ClassWithAttributes } from "./et2_core_inheritance" ;
2021-06-07 17:33:53 +02:00
import { et2_csvSplit , et2_no_init } from "./et2_core_common" ;
2020-01-21 12:15:46 +01:00
/ * *
* et2_valueWidget is the base class for et2_inputWidget - valueWidget introduces
* the "value" attribute and automatically loads it from the "content" array
* after loading from XML .
* /
2020-01-21 12:48:48 +01:00
export class et2_valueWidget extends et2_baseWidget
2020-01-21 12:15:46 +01:00
{
static readonly _attributes : any = {
"label" : {
"name" : "Label" ,
"default" : "" ,
"type" : "string" ,
"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)." ,
"translate" : true
} ,
"value" : {
"name" : "Value" ,
"description" : "The value of the widget" ,
"type" : "rawstring" , // no html-entity decoding
"default" : et2_no_init
}
} ;
2020-01-21 15:06:34 +01:00
label : string = '' ;
2021-05-19 21:54:56 +02:00
protected value : string | number | Object ;
2020-01-21 15:19:39 +01:00
protected _labelContainer : JQuery = null ;
2020-01-21 15:06:34 +01:00
2020-01-22 18:38:33 +01:00
/ * *
* Constructor
* /
constructor ( _parent , _attrs? : WidgetConfig , _child? : object )
{
// Call the inherited constructor
super ( _parent , _attrs , ClassWithAttributes . extendAttributes ( et2_valueWidget . _attributes , _child || { } ) ) ;
}
2020-01-21 12:15:46 +01:00
/ * *
*
* @param _attrs
* /
transformAttributes ( _attrs : object )
{
super . transformAttributes ( _attrs ) ;
if ( this . id )
{
// Set the value for this element
var contentMgr = this . getArrayMgr ( "content" ) ;
if ( contentMgr != null ) {
2020-01-21 15:01:43 +01:00
let val = contentMgr . getEntry ( this . id , false , true ) ;
2020-01-21 12:15:46 +01:00
if ( val !== null )
{
_attrs [ "value" ] = val ;
}
}
// Check for already inside namespace
2020-02-11 23:19:33 +01:00
if ( this . _createNamespace ( ) && this . getArrayMgr ( "content" ) . perspectiveData . owner == this )
2020-01-21 12:15:46 +01:00
{
_attrs [ "value" ] = this . getArrayMgr ( "content" ) . data ;
}
}
}
2020-01-21 15:06:34 +01:00
set_label ( _value : string )
2020-01-21 12:15:46 +01:00
{
// Abort if there 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" ) )
. addClass ( "et2_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 ) ;
// Split the label at the "%s"
var parts = et2_csvSplit ( _value , 2 , "%s" ) ;
// Update the content of the label container
for ( var i = 0 ; i < parts . length ; i ++ )
{
if ( parts [ i ] )
{
this . _labelContainer . append ( document . createTextNode ( parts [ i ] ) ) ;
}
if ( i == 0 )
{
this . _labelContainer . append ( ph ) ;
}
}
// add class if label is empty
this . _labelContainer . toggleClass ( 'et2_label_empty' , ! _value || ! parts [ 0 ] ) ;
}
else
{
// Delete the labelContainer from the surroundings object
if ( this . _labelContainer )
{
this . getSurroundings ( ) . removeDOMNode ( this . _labelContainer [ 0 ] ) ;
}
this . _labelContainer = null ;
}
// Update the surroundings in order to reflect the change in the label
this . getSurroundings ( ) . update ( ) ;
// Copy the given value
this . label = _value ;
}
2021-05-19 19:14:52 +02:00
get_value ( )
{
return this . value ;
}
/ * *
* Set value of widget
*
* @param { string } _value value to set
* /
set_value ( _value : any | null )
{
this . value = _value ;
}
2020-01-21 12:15:46 +01:00
}