artabro/wire/modules/AdminTheme/AdminThemeUikit/config.php

747 lines
27 KiB
PHP
Raw Normal View History

2024-08-27 11:35:37 +02:00
<?php namespace ProcessWire;
if(!defined("PROCESSWIRE")) die();
class AdminThemeUikitConfigHelper extends Wire {
/**
* @var AdminThemeUikit
*
*/
protected $adminTheme;
/**
* Construct
*
* @param AdminThemeUikit $adminTheme
*
*/
public function __construct(AdminThemeUikit $adminTheme) {
$this->adminTheme = $adminTheme;
$adminTheme->wire($this);
parent::__construct();
}
/**
* Implementation for Uikit admin theme getConfigInputfields method for module config
*
* @param InputfieldWrapper $inputfields
*
*/
public function configModule(InputfieldWrapper $inputfields) {
$adminTheme = $this->adminTheme;
$defaultFileNote = $this->_('When blank, the default file used.') . ' ';
$defaultFileDesc = $this->_('Enter path relative to homepage URL.');
$recommendedLabel = $this->_('(RECOMMENDED)');
$experimentalLabel = $this->_('(EXPERIMENTAL)');
$exampleLabel = $this->_('example');
/** @var modules $modules */
$modules = $this->wire('modules');
/** @var Session $session */
$session = $this->wire('session');
$layout = $adminTheme->layout;
$userTemplateURL = $this->wire('config')->urls->admin . 'setup/template/edit?id=3';
/** @var InputfieldFieldset $fieldset */
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = $this->_('Masthead + navigation');
$fieldset->icon = 'navicon';
$fieldset->set('themeOffset', true);
$fieldset->collapsed = Inputfield::collapsedYes;
$inputfields->add($fieldset);
/** @var InputfieldSelect $f */
$f = $modules->get('InputfieldSelect');
$f->attr('name', 'userAvatar');
$f->label = $this->_('User avatar');
$f->icon = 'user-circle';
$f->addOption('gravatar', $this->_('Gravatar (external service that determines avatar from email)'));
$f->description = $this->_('Select an image field, Gravatar, or icon to show for the user avatar in the masthead.');
$numImgFields = 0;
foreach($modules->wire('templates')->get('user')->fieldgroup as $field) {
if(!$field->type instanceof FieldtypeImage) continue;
$f->addOption("$field->id:$field->name", sprintf($this->_('Image field: %s'), $field->name));
$numImgFields++;
}
if(!$numImgFields) {
$f->notes = $this->_('There are no image fields present on the “user” template at present, so only icons and Gravatar are shown.') . ' ';
}
$f->notes .= sprintf($this->_('You may add image fields to your user template [here](%s).'), $userTemplateURL);
$icons = array(
'user-circle',
'user-circle-o',
'user',
'user-o',
'user-secret',
'vcard',
'vcard-o',
'child',
'female',
'male',
'paw',
);
foreach($icons as $icon) {
$f->addOption("icon.$icon", sprintf($this->_('Icon: %s'), $icon));
}
$f->attr('value', $adminTheme->get('userAvatar'));
$fieldset->add($f);
/** @var InputfieldText $f */
$f = $modules->get('InputfieldText');
$f->attr('name', 'userLabel');
$f->label = $this->_('User navigation label format');
$f->icon = 'user-circle';
$f->description =
$this->_('This label appears next to the user avatar image/icon.') . ' ' .
$this->_('Specify field(s) and format to use for the user label, or blank for no user label.') . ' ' .
sprintf($this->_('Use any fields/properties from your [user](%s) template surrounded in {brackets}.'), $userTemplateURL) . ' ' .
$this->_('Use {Name} for capitalized name, which is the default setting, or use {name} for lowercase name.');
$f->notes = $this->_('Examples: “{name}”, “{Name}”, “{title}”, “{first_name} {last_name}”, “{company.title}”, etc.');
$f->attr('value', $adminTheme->userLabel);
$fieldset->add($f);
/** @var InputfieldText $f */
$f = $modules->get('InputfieldText');
$f->attr('name', 'logoURL');
$f->attr('value', $adminTheme->get('logoURL'));
$f->label = $this->_('Logo image file');
$f->description = $defaultFileDesc;
$f->notes = $defaultFileNote .
$this->_('File should be PNG, GIF, JPG or SVG, on transparent background, and at least 100px in both dimensions.') . ' ' .
sprintf($this->_('If using SVG, you may optionally append “?uk-svg” to URL to make it add the [uk-svg](%s) attribute.'), 'https://getuikit.com/docs/svg');
$f->collapsed = Inputfield::collapsedBlank;
$f->icon = 'file-image-o';
$fieldset->add($f);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'logoAction');
$f->label = $this->_('Logo click action');
$f->icon = 'mouse-pointer';
$f->addOption(0, $this->_('Admin root page list'));
$f->addOption(1, $this->_('Open offcanvas navigation'));
$f->attr('value', (int) $adminTheme->logoAction);
$f->collapsed = Inputfield::collapsedBlank;
$f->optionColumns = 1;
$fieldset->add($f);
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = $this->_('Layout + interface');
$fieldset->icon = 'newspaper-o';
$fieldset->collapsed = Inputfield::collapsedYes;
$fieldset->set('themeOffset', true);
$inputfields->add($fieldset);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('id+name', 'layout');
$f->label = $this->_('Layout type');
$f->addOption('', $this->_('Traditional with masthead navigation') .
' [span.detail] ' . $recommendedLabel . ' [/span]');
$opt = $this->_('Page tree navigation in sidebar');
$f->addOption('sidenav-tree', $opt . ' ' . $this->_('(left)') .
'* [span.detail] ' . $experimentalLabel . ' [/span]');
$f->addOption('sidenav-tree-alt', $opt . ' ' . $this->_('(right)') .
'* [span.detail] ' . $experimentalLabel . ' [/span]');
// $f->addOption('sidenav', $this->_('Sidebar navigation (left) + page tree navigation (right)'));
$f->attr('value', $layout);
$f->notes = $this->_('*Sidebar layouts not compatible with SystemNotifications module and may have issues with other modules.');
$f->columnWidth = 50;
$fieldset->add($f);
$lastLayout = $session->getFor($adminTheme, 'lastLayout');
if($lastLayout != $layout) {
$o = '[script]';
if(strpos($layout, 'sidenav') === 0) {
$o .=
"if(typeof parent.isPresent != 'undefined') {" .
" parent.location.href = './?layout=sidenav-init';" .
"} else {" .
" window.location.href = './?layout=sidenav-init';" .
"}";
} else {
$o .=
"if(typeof parent.isPresent != 'undefined') {" .
" parent.location.href = './edit?name=$adminTheme->className';" .
"}";
}
$o .= '[/script]';
$f->appendMarkup = str_replace(array('[', ']'), array('<', '>'), $o);
}
if(empty($_POST)) $session->setFor($adminTheme, 'lastLayout', $layout);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('id+name', 'ukGrid');
$f->label = $this->_('Inputfield column widths');
$f->notes = $this->_('Choose option B if you are having any trouble achieving intended Inputfield column widths.');
$f->addOption(1, 'A: ' . $this->_('Uikit uk-width classes (up-to 6 columns)'));
$f->addOption(0, 'B: ' . $this->_('Percentage-based widths (additional flexibility)'));
$f->attr('value', (int) $adminTheme->get('ukGrid'));
$f->columnWidth = 50;
$fieldset->add($f);
/** @var InputfieldInteger $f */
$f = $modules->get('InputfieldInteger');
$f->attr('name', 'maxWidth');
$f->label = $this->_('Maximum layout width');
$f->description = $this->_('Specify the maximum width of the layout (in pixels) or 0 for no maximum.');
$f->notes = $this->_('Applies to traditional layout only.');
$f->attr('value', $adminTheme->maxWidth);
$f->columnWidth = 50;
$fieldset->add($f);
$testURL = $modules->wire('config')->urls->admin . 'profile/?test_notices';
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'groupNotices');
$f->label = $this->_('Notifications style');
$f->notes = $this->_('Does not apply if the SystemNotifications module is installed.');
$f->addOption(1, $this->_('Group by type with expand/collapse control') . " ([$exampleLabel]($testURL=group-on))");
$f->addOption(0, $this->_('Always show all') . " ([$exampleLabel]($testURL=group-off))");
$f->attr('value', (int) $adminTheme->groupNotices);
$f->columnWidth = 50;
$fieldset->appendMarkup .= "<script>$('#wrap_Inputfield_groupNotices .InputfieldContent').find('a').addClass('pw-modal');</script>";
/** @var JqueryUI $jQueryUI */
$jQueryUI = $modules->get('JqueryUI');
$jQueryUI->use('modal');
$fieldset->add($f);
$f = $inputfields->getChildByName('useAsLogin');
if($f) $f->collapsed = Inputfield::collapsedNo;
/** @var InputfieldFieldset $fieldset2 */
$fieldset2 = $modules->get('InputfieldFieldset');
$fieldset2->label = $this->_('Advanced');
$fieldset2->collapsed = Inputfield::collapsedBlank;
$fieldset2->description =
$this->_('Most advanced settings are available from the `$config->AdminThemeUikit` settings array.') . ' ' .
$this->_('You can find it in /wire/config.php. Copy to your /site/config.php file to modify it.');
$fieldset->add($fieldset2);
/** @var InputfieldText $f */
$f = $modules->get('InputfieldText');
$f->attr('name', 'cssURL');
$f->attr('value', $adminTheme->get('cssURL'));
$f->label = $this->_('Primary CSS file');
$f->description = $defaultFileDesc . ' ' .
$this->_('We do not recommend changing this unless you are an admin theme developer.') . ' ' .
$this->_('Warning: this will override custom `$config->AdminThemeUikit` settings, base style and custom styles.');
$f->notes = $defaultFileNote . " " .
"[uikit.pw.css](" . $modules->wire('config')->urls('AdminThemeUikit') . "uikit/dist/css/uikit.pw.css)";
$f->icon = 'file-code-o';
$f->collapsed = Inputfield::collapsedBlank;
$fieldset2->add($f);
/** @var InputfieldFieldset $fieldset */
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = $this->_('Forms + input');
$fieldset->description =
$this->_('These settings affect all form fields in the admin.') . ' ' .
$this->_('Any of these settings (and others) may also be specified individually for a given field.') . ' ' .
$this->_('If you specify a setting here, it will override individual field settings.') . ' ' .
$this->_('See: Setup > Fields > [any field] > Input (tab) > Admin Theme Settings.');
$fieldset->icon = 'edit';
$fieldset->collapsed = Inputfield::collapsedYes;
$fieldset->set('themeOffset', true);
$inputfields->add($fieldset);
/** @var InputfieldMarkup $e1 */
$e1 = $modules->get('InputfieldMarkup');
$e1->label = $this->_('Input size examples');
$e1->columnWidth = 25;
/** @var InputfieldMarkup $e2 */
$e2 = $modules->get('InputfieldMarkup');
$e2->label = $this->_('Select size examples');
$e2->columnWidth = 25;
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'inputSize');
$f->label = $this->_('Default input size');
$f->description = $this->_('This affects the appearance of many text, textarea and select fields.');
$f->notes = $this->_('Not all Inputfields support the “small” or “large” options.');
$f->icon = 'expand';
$f->columnWidth = 50;
$sizes = array(
's' => array($this->_('Small'), 'uk-form-small'),
'm' => array($this->_('Medium (default/recommended)'), ''),
'l' => array($this->_('Large'), 'uk-form-large'),
);
foreach($sizes as $value => $info) {
$f->addOption($value, $info[0]);
$label = explode(' ', $info[0]);
$label = reset($label);
$e1->value .= "<div class='uk-margin-small'><input disabled class='uk-input $info[1]' value='$label' /></div>";
$e2->value .= "<div class='uk-margin-small'><select disabled class='uk-select $info[1]'><option>$label</option></select></div>";
}
$f->attr('value', $adminTheme->get('inputSize'));
$fieldset->add($f);
$fieldset->add($e1);
$fieldset->add($e2);
$types = $modules->findByPrefix('Inputfield');
ksort($types);
$skipTypes = array('Button', 'Submit', 'Form', 'Hidden');
foreach($types as $key => $name) {
$name = str_replace('Inputfield', '', $name);
if(in_array($name, $skipTypes)) {
unset($types[$key]);
} else {
$types[$key] = $name;
}
}
/** @var InputfieldAsmSelect $f */
$f = $modules->get('InputfieldAsmSelect');
$f->attr('name', 'noBorderTypes');
$f->label = $this->_('Input types that should have no border');
$f->description = $this->_('This setting applies to any selected types when used at 100% width.');
$f->icon = 'low-vision';
$f->set('themeOffset', true);
$f->collapsed = Inputfield::collapsedBlank;
foreach($types as $className => $name) {
$f->addOption($className, $name);
}
$f->attr('value', $adminTheme->noBorderTypes);
$fieldset->add($f);
/** @var InputfieldAsmSelect $f */
$f = $modules->get('InputfieldAsmSelect');
$f->attr('name', 'offsetTypes');
$f->label = $this->_('Input types that should be offset with additional top/bottom margin.');
$f->description = $this->_('As an example, the fields in this fieldset are using this option.');
$f->set('themeOffset', true);
$f->icon = 'arrows-v';
$f->collapsed = Inputfield::collapsedBlank;
foreach($types as $className => $name) {
$f->addOption($className, $name);
}
$f->attr('value', $adminTheme->offsetTypes);
$fieldset->add($f);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'toggleBehavior');
$f->label = $this->_('Inputfield label toggle behavior');
$f->icon = 'eye-slash';
$f->description =
$this->_('Inputfield elements in ProcessWire can have an open or closed state.') . ' ' .
$this->_('This setting determines what happens when a user clicks any Inputfield label, which appears as a header above the input.') . ' ' .
$this->_('The “Standard” option makes a click of a label on an open Inputfield focus the input element, a standard HTML form behavior.') . ' ' .
$this->_('While a click of a closed Inputfield label will open and then focus the Inputfield (and close it when clicked again).') . ' ' .
$this->_('The “Consistent” option makes the Inputfield label always behave consistently as an open/close toggle, regardless of what state the Inputfield is in.');
$f->notes = $this->_('Regardless of what setting you choose, the toggle icon in the upper right of each Inputfield always toggles the open/closed state.');
$f->addOption(0, $this->_('Standard'));
$f->addOption(1, $this->_('Consistent'));
$f->optionColumns = 1;
$f->val($adminTheme->toggleBehavior);
$fieldset->add($f);
/** @var InputfieldCheckboxes $f */
/*
$f = $modules->get('InputfieldCheckbox');
$f->attr('name', 'useOffset');
$f->label = $this->_('Vertically offset ALL input types?');
$f->description =
$this->_('When checked, a vertical margin is added to every field.') . ' ' .
$this->_('This may provide additional clarity in some cases, but consumes more vertical space.');
$f->collapsed = Inputfield::collapsedBlank;
$f->icon = 'arrows-v';
if($adminTheme->useOffset) $f->attr('checked', 'checked');
$fieldset->add($f);
*/
/** @var InputfieldAsmSelect $f */
/*
$f = $modules->get('InputfieldAsmSelect');
$f->attr('name', 'cardTypes');
$f->label = $this->_('Input types that should use the “Card” style');
$f->description = $this->_('This field is an example of the card style.');
$f->notes = $this->_('Does not apply to types selected to have no border.');
$f->icon = 'list-alt';
$f->set('themeBorder', 'card');
$f->set('themeOffset', true);
foreach($types as $className => $name) {
$f->addOption($className, $name);
}
$f->attr('value', $adminTheme->cardTypes);
$fieldset->add($f);
*/
if($this->wire('input')->get('tests')) {
$this->configTests($inputfields);
}
}
/**
* Uikit configuration for Inputfield
*
* @param Inputfield $inputfield
* @param InputfieldWrapper $inputfields
*
*/
public function configInputfield(Inputfield $inputfield, InputfieldWrapper $inputfields) {
/** @var Inputfield $inputfield */
if($inputfield instanceof InputfieldWrapper) return;
if(!$inputfield->hasFieldtype || !$inputfield->hasField) return;
$field = $inputfield->hasField;
/** @var Modules $modules */
$modules = $this->wire('modules');
$autoLabel = $this->_('Auto');
$noneLabel = $this->_('None');
/** @var InputfieldFieldset $fieldsetVisibility */
$fieldsetVisibility = $inputfields->getChildByName('visibility');
if(!$fieldsetVisibility) return;
// if our fieldset is already present, remove it and add again (so that last added stays)
$test = $inputfields->getChildByName('_adminTheme');
if($test) $test->getParent()->remove($test);
/** @var InputfieldFieldset $fieldset */
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->attr('id+name', '_adminTheme');
$fieldset->label = $this->_('Admin theme settings') . ' ' .
'(' . str_replace('AdminTheme', '', $this->adminTheme->className()) . ')';
$fieldset->collapsed = Inputfield::collapsedYes;
$fieldset->icon = 'flask';
$fieldset->description =
$this->_('These settings affect how this field appears when used with the Uikit admin theme.') . ' ' .
$this->_('When choosing the “Auto” option, the settings will be determined at runtime.') . ' ' .
$this->_('The “Margin” setting applies only to 100% width fields.') . ' ' .
$this->_('The “Auto” option is the recommended default for all settings.');
$fieldsetParent = $fieldsetVisibility->getParent();
$fieldsetParent->insertAfter($fieldset, $fieldsetVisibility);
$xSmallLabel = $this->_('Extra small');
$smallLabel = $this->_('Small');
$mediumLabel = $this->_('Medium');
$largeLabel = $this->_('Large');
$isSelect1 = $inputfield instanceof InputfieldSelect && !$inputfield instanceof InputfieldHasArrayValue;
$isText1 = $inputfield instanceof InputfieldText && !$inputfield instanceof InputfieldTextarea;
$isTextarea = $inputfield instanceof InputfieldTextarea && !$inputfield instanceof InputfieldCKEditor;
$useInputSize = $isText1 || $isTextarea || $isSelect1;
$useInputWidth = $isText1 || $isSelect1;
if($useInputSize && $useInputWidth) {
$columnWidth = 20;
} else if($useInputSize || $useInputWidth) {
$columnWidth = 25;
} else {
$columnWidth = 33;
}
if($useInputSize) {
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'themeInputSize');
$f->label = $this->_('Input size');
$f->icon = 'expand';
$f->addOption('', $autoLabel);
$f->addOption('s', $smallLabel);
$f->addOption('m', $mediumLabel);
$f->addOption('l', $largeLabel);
$value = $field ? $field->get('themeInputSize') : '';
$f->attr('value', $value);
$f->columnWidth = $columnWidth;
$fieldset->add($f);
}
if($useInputWidth) {
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'themeInputWidth');
$f->label = $this->_('Input width');
$f->icon = 'arrows-h';
$f->addOption('', $autoLabel);
$f->addOption('xs', $xSmallLabel);
$f->addOption('s', $smallLabel);
$f->addOption('m', $mediumLabel);
$f->addOption('l', $largeLabel);
$f->addOption('f', $this->_('Fill'));
$value = $field ? $field->get('themeInputWidth') : '';
$f->attr('value', $value);
$f->columnWidth = $columnWidth;
$fieldset->add($f);
}
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'themeOffset');
$f->label = $this->_('Margin');
$f->icon = 'arrows-v';
$f->addOption('', $autoLabel);
$f->addOption('s', $smallLabel);
$f->addOption('m', $mediumLabel);
$f->addOption('l', $largeLabel);
$f->addOption('none', $noneLabel);
$value = $field ? $field->get('themeOffset') : '';
if($value == 1) $value = 'm';
$f->attr('value', $value);
$f->columnWidth = $columnWidth;
$fieldset->add($f);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'themeBorder');
$f->label = $this->_('Border');
$f->addOption('', $autoLabel);
$f->addOption('line', $this->_x('Outline', 'border'));
$f->addOption('card', $this->_x('Card', 'border'));
$f->addOption('hide', $this->_x('Transparent', 'border'));
$f->addOption('none', $noneLabel);
$f->columnWidth = $columnWidth;
$f->icon = 'low-vision';
$value = $field ? $field->get('themeBorder') : '';
$f->attr('value', $value);
$fieldset->add($f);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'themeColor');
$f->label = $this->_('Color');
$f->icon = 'eyedropper';
$f->addOption('', $autoLabel);
$f->addOption('primary', $this->_x('Primary', 'color'));
$f->addOption('secondary', $this->_x('Secondary', 'color'));
$f->addOption('highlight', $this->_x('Highlight', 'color'));
$f->addOption('warning', $this->_x('Warning', 'color'));
//$f->addOption('danger', $this->_x('Danger', 'color'));
$f->addOption('none', $noneLabel);
$value = $field ? $field->get('themeColor') : '';
$f->attr('value', $value);
$f->columnWidth = $columnWidth;
$f->showIf = 'themeBorder!=none';
$fieldset->add($f);
if($inputfield instanceof InputfieldText && !$inputfield instanceof InputfieldCKEditor) {
/** @var InputfieldCheckbox $f */
$f = $modules->get('InputfieldCheckbox');
$f->attr('name', 'themeBlank');
$f->label = $this->_('Minimize the styling of form controls');
if($field->get('themeBlank')) $f->attr('checked', 'checked');
$fieldset->add($f);
}
if($inputfield instanceof InputfieldSelect) {
$exampleType = 'InputfieldSelect';
} else if($inputfield instanceof InputfieldTextarea) {
$exampleType = 'InputfieldTextarea';
} else if($inputfield instanceof InputfieldText) {
$exampleType = 'InputfieldText';
} else {
$exampleType = 'InputfieldMarkup';
}
$f = $modules->get($exampleType);
$f->attr('id+name', '_adminThemeExample');
$f->label = $this->_('Example');
$text = $this->_('This field simply demonstrates the settings you selected above.');
if($f instanceof InputfieldSelect) {
$f->addOption('', $text);
$f->addOption('Lorem');
$f->addOption('Ipsum');
$f->addOption('Dolor');
$f->addOption('Sit');
$f->addOption('Amet');
} else if($f instanceof InputfieldText) {
$f->value = $text;
} else {
$f->value = "<p>$text</p>";
$f->collapsed = Inputfield::collapsedYes;
}
$f->icon = 'snowflake-o';
$fieldset->add($f);
$f = $modules->get('InputfieldMarkup');
$f->attr('id+name', '_adminThemeExample2');
$f->label = $this->_('Another field');
$f->value = "<p>Lorem ipsum dolor</p>";
$fieldset->add($f);
$f = $inputfields->getChildByName('columnWidth');
if($f) $f->notes = sprintf(
$this->_('Open the “%s” field above for a live example of column width.'), $fieldset->label
). ' ' . $f->notes;
/** @var Config $config */
$config = $this->wire('config');
$config->scripts->add($config->urls($this->adminTheme) . 'config-field.js');
}
/**
* Create tests for Inputfields widths and showIf
*
* @param InputfieldWrapper $inputfields
*
*/
public function configTests(InputfieldWrapper $inputfields) {
$form = $inputfields->getForm();
if($form) {
$form->action .= '&tests=1';
$this->wire('session')->addHookBefore('redirect', function(HookEvent $event) {
$url = $event->arguments(0);
$url .= '&tests=1';
$event->arguments(0, $url);
});
}
/** @var Modules $modules */
$modules = $this->wire('modules');
// TEST 1 ----------------------------------
/** @var InputfieldFieldset $fieldset */
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = 'Unusual widths tests';
$inputfields->add($fieldset);
$widths = array(
73, 27,
11, 89,
37, 63,
22, 22, 37, 19 // does not work with uk-width classes
);
foreach($widths as $n => $width) {
/** @var InputfieldText $f */
$f = $modules->get('InputfieldText');
$f->attr('name', "_w$n");
$f->label = "Width $width%";
$f->columnWidth = $width;
$fieldset->add($f);
}
// TEST 2 ----------------------------------
/** @var InputfieldFieldset $fieldset */
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = 'Show-if and widths tests';
$inputfields->add($fieldset);
/** @var InputfieldRadios $f */
$f = $modules->get('InputfieldRadios');
$f->attr('name', 'test_radios');
$f->label = 'Row 1 Col 1/4 (test_radios)';
$f->description = 'Select option to reveal column(s)';
$f->addOption(1, 'Option 1');
$f->addOption(2, 'Option 2');
$f->addOption(3, 'Option 3');
$f->columnWidth = 25;
$fieldset->add($f);
/** @var InputfieldCheckbox $f */
$f = $modules->get('InputfieldCheckbox');
$f->attr('name', 'test_checkbox');
$f->label = 'Row 1 Col 2/4 (test_checkbox)';
$f->description = 'Revealed by option 1. Check box to reveal column 3';
$f->columnWidth = 25;
$f->showIf = 'test_radios=1';
$fieldset->add($f);
$columns = array(
// row 1
array(
'label' => 'Row 1 Col 3/4',
'width' => 25,
'showIf' => 'test_radios=1, test_checkbox=1'
),
array(
'label' => 'Row 1 Col 4/4',
'width' => 25,
'showIf' => 'test_radios=1|2'
),
// row 2
array(
'label' => 'Row 2 Col 1/4',
'width' => 25,
),
array(
'label' => 'Row 2 Col 2/4',
'width' => 25,
),
array(
'label' => 'Row 2 Col 3/4',
'width' => 25,
),
array(
'label' => 'Row 2 Col 4/4',
'width' => 25,
'showIf' => 'test_radios=3',
),
// row 3
array(
'label' => 'Row 3 Col 1/2',
'width' => 75,
'showIf' => 'test_radios=3'
),
array(
'label' => 'Row 3 Col 2/2',
'width' => 25
)
);
foreach($columns as $n => $col) {
$f = $modules->get('InputfieldText');
$f->attr('name', "_test_text$n");
$f->label = $col['label'];
$f->columnWidth = $col['width'];
if(isset($col['showIf'])) {
$f->showIf = $col['showIf'];
$f->notes = $col['showIf'];
}
$f->notes .= " ($col[width]%)";
$fieldset->add($f);
}
// TEST 3 -----------------------------------------------
$fieldset = $modules->get('InputfieldFieldset');
$fieldset->label = '33% widths tests w/show-if';
$inputfields->add($fieldset);
$f = $modules->get('InputfieldText');
$f->attr('name', '_t1');
$f->label = 'Col 1/3';
$f->description = 'Always visible';
$f->columnWidth = 33;
$f->notes = "($f->columnWidth%)";
$fieldset->add($f);
/** @var InputfieldSelect $f */
$f = $modules->get('InputfieldSelect');
$f->attr('name', 'test_select');
$f->description = 'Choose option 2';
$f->label = 'Col 2/3 (test_select)';
$f->addOption(1, 'Option 1');
$f->addOption(2, 'Option 2');
$f->addOption(3, 'Option 3');
$f->columnWidth = 33;
$f->notes = "($f->columnWidth%)";
$f->value = 2;
$fieldset->add($f);
/** @var InputfieldText $f */
$f = $modules->get('InputfieldText');
$f->attr('name', '_t2');
$f->label = 'Col 3/3';
$f->description = 'Revealed by option 2';
$f->columnWidth = 33;
$f->showIf = 'test_select=2';
$f->notes = $f->showIf . " ($f->columnWidth%)";
$fieldset->add($f);
}
}