Add select-bitwise selectbox type

This commit is contained in:
nathangray 2019-03-19 14:31:33 -06:00
parent 53b8d9fbbe
commit 6af45ef40a
2 changed files with 57 additions and 2 deletions

View File

@ -576,6 +576,19 @@ var et2_selectbox = (function(){ "use strict"; return et2_inputWidget.extend(
selected.addClass('et2_country-select flag-'+ _value.toLowerCase());
}
}
if(this._type == "select-bitwise" && _value && !isNaN(_value) && this.options.select_options)
{
var new_value = [];
for(var index in this.options.select_options)
{
var right = this.options.select_options[index].value;
if(!!(_value & right))
{
new_value.push(right);
}
}
_value = new_value;
}
this._oldValue = this.value;
if(this.input !== null && (this.options.tags || this.options.search))
{
@ -1040,7 +1053,7 @@ et2_register_widget(et2_selectbox, ["menupopup", "listbox", "select", "select-ca
"select-percent", 'select-priority',
'select-country', 'select-state', 'select-year', 'select-month',
'select-day', 'select-dow', 'select-hour', 'select-number', 'select-app',
'select-lang', 'select-bool', 'select-timezone' ]);
'select-lang', 'select-bool', 'select-timezone', 'select-bitwise' ]);
// Static class stuff
jQuery.extend(et2_selectbox, //(function(){ "use strict"; return
@ -1563,6 +1576,20 @@ var et2_selectbox_ro = (function(){ "use strict"; return et2_selectbox.extend([e
set_value: function(_value) {
this.value = _value;
if(this._type == "select-bitwise" && _value && !isNaN(_value) && this.options.select_options)
{
var new_value = [];
for(var index in this.options.select_options)
{
var option = this.options.select_options[index];
var right = option && option.value ? option.value : index;
if(!!(_value & right))
{
new_value.push(right);
}
}
_value = new_value;
}
if(typeof _value == "string")
{
_value = _value.match(this._is_multiple_regexp) !== null ? _value.split(',') : [_value];
@ -1661,7 +1688,7 @@ et2_register_widget(et2_selectbox_ro, ["menupopup_ro", "listbox_ro", "select_ro"
"select-percent_ro", 'select-priority_ro', 'select-access_ro',
'select-country_ro', 'select-state_ro', 'select-year_ro', 'select-month_ro',
'select-day_ro', 'select-dow_ro', 'select-hour_ro', 'select-number_ro', 'select-app_ro',
'select-lang_ro', 'select-bool_ro', 'select-timezone_ro' ]);
'select-lang_ro', 'select-bool_ro', 'select-timezone_ro', 'select-bitwise_ro' ]);
/**
* Widget class which represents a single option inside a selectbox

View File

@ -255,6 +255,15 @@ class Select extends Etemplate\Widget
$value = self::$request->preserv[$unavailable_name];
}
}
case 'select-bitwise':
// Sum up into a single value
$sum = 0;
foreach((array) $value as $val)
{
$sum += $val;
}
$value = $sum;
}
if (isset($value))
{
@ -783,6 +792,25 @@ class Select extends Etemplate\Widget
$options = $type ? Api\DateTime::getTimezones() : Api\DateTime::getUserTimezones($value);
}
break;
case 'select-bitwise':
// type = app name
$options = $form_name ? self::selOptions($form_name) : array();
$new_value = array();
$i = 0;
$appname = $type ? $type : ($widget && $widget->attrs['appname'] ?
self::expand_name($widget->attrs['appname'], 0, 0,'','',self::$cont) : '');
if($appname)
{
$options += (array)Api\Hooks::single(array('location' => 'acl_rights'), $appname);
}
foreach((array)$options as $right => $name)
{
if(!!($value & $right))
{
$new_value[] = $right;
}
}
$value = $new_value;
}
if ($rows > 1 || $readonly)
{