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 .= ""; /** @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 .= "
"; $e2->value .= "
"; } $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 = "

$text

"; $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 = "

Lorem ipsum dolor

"; $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); } }