public static function render_file_template($file, $arr_vars = array())
 {
     //--
     if (!SmartAppInfo::TestIfModuleExists('mod-tpl-twig')) {
         return '{# ERROR: SmartTwigTemplating :: The module mod-tpl-twig cannot be found ... #}';
     }
     //end if
     //--
     if (self::$twig === null) {
         self::$twig = new \SmartModExtLib\TplTwig\Templating();
     }
     //end if
     //--
     return (string) self::$twig->render((string) $file, (array) $arr_vars);
     //--
 }
 public static function main_screen($tab, $frm, $testformdata)
 {
     //--
     global $configs;
     //--
     //--
     if (!defined('SMART_FRAMEWORK_TESTUNIT_BASE_URL')) {
         http_response_code(500);
         die(SmartComponents::http_message_500_internalerror('ERROR: TEST UNIT BASE URL has not been defined ...'));
     }
     //end if
     //--
     //--
     if (Smart::array_size($testformdata) > 0) {
         // because is modal we have to close it in order to refresh the parent
         return '<table><tr><td><h1>Form Sent (Test) !</h1><hr><pre>' . Smart::escape_html(print_r($testformdata, 1)) . '</pre></td></tr></table><script>SmartJS_BrowserUtils.RefreshParent();</script><br><br><input id="myCloseButton" type="button" value="[Close Me]" onClick="SmartJS_BrowserUtils.CloseModalPopUp(); return false;"><br><br><b>This page will auto-close in 9 seconds [Counting: <span id="mycounter">9</span>]</b><script>jQuery("#myCloseButton").button(); SmartJS_BrowserUtils.CountDown(9, \'mycounter\', \'SmartJS_BrowserUtils.CloseDelayedModalPopUp(500);\');</script><br><br><b><i>After closing this window, parent will refresh ...</i></b>';
     }
     //end if
     //--
     //-- normal form with modal/popup
     $basic_form_start = '<form id="form_for_test" action="' . SMART_FRAMEWORK_TESTUNIT_BASE_URL . 'testunit.main&tab=1' . '&' . SMART_FRAMEWORK_URL_PARAM_MODALPOPUP . '=' . SMART_FRAMEWORK_URL_VALUE_ENABLED . '" method="post" target="_blank"><input type="hidden" name="testformdata[test]" value="Testing ..."><input type="hidden" name="testformdata[another-test]" value="Testing more ...">';
     $basic_form_end = '</form>';
     //--
     $basic_form_send_modal = '<input class="ux-button ux-button-primary" style="min-width:325px;" type="submit" value="Submit Form (with Confirmation / Modal)" OnClick="' . SmartComponents::js_draw_html_confirm_form_submit('<div align="left"><h3><b>Are you sure you want to submit this form [MODAL] ?</b></h3></div>', 'my_form') . '">';
     $basic_form_send_popup = '<input class="ux-button ux-button-secondary" style="min-width:325px;" type="submit" value="Submit Form (with Confirmation / PopUp)" OnClick="' . SmartComponents::js_draw_html_confirm_form_submit('<div align="left"><h3><b>Are you sure you want to submit this form [POPUP] ?</b></h3></div>', 'my_form', '780', '420', '1') . '">';
     //--
     //-- AJAX POST FORM
     $btnop = '<button class="ux-button ux-button-large ux-button-highlight" onClick="' . SmartComponents::post_form_by_ajax('test_form_ajax', SMART_FRAMEWORK_TESTUNIT_BASE_URL . 'testunit.post-form-by-ajax&tab=2', '<h2>Are you sure you want to submit this form by Ajax !?</h2>') . ' return false;">Submit this Test Form by AJAX &nbsp; <span class="fa fa-send"></span></button>';
     //-- END
     //-- lists with one element
     $one_single_select = SmartComponents::html_single_select_list('test-unit-s-list-one', '', 'form', array('one' => 'One'), 'frm[one_single]', '150', '', 'no', 'no', '#JS-UI#');
     // returns HTML Code
     $one_single_with_blank_select = SmartComponents::html_multi_select_list('test-unit-lst-m-1', '', 'form', array('one' => 'One'), 'frm[one_multi][]', 'list', 'no', '200', '', '#JS-UI-FILTER#');
     // returns HTML Code
     //--
     $test_normal_list_s = SmartComponents::html_single_select_list('test_normal_s', '', 'form', [1 => 'Val 1', 2 => 'Val 2', 3 => 'Val 3']);
     $test_normal_list_m = SmartComponents::html_multi_select_list('test_normal_m', '', 'form', [1 => 'Val 1', 2 => 'Val 2', 3 => 'Val 3'], '', 'list', 'no', '200/75', '', 'height:65px;');
     //--
     //-- misc purpose data array
     $array_of_values = array();
     $array_of_values[] = 'a&"/><i>Italic</i></body>';
     $array_of_values[] = 'a&"/><i>Italic</i></body>';
     $array_of_values[] = '#OPTGROUP#';
     $array_of_values[] = 'Labels';
     for ($i = 1; $i <= 500; $i++) {
         $array_of_values[] = 'id' . $i;
         $array_of_values[] = 'Label ' . $i;
     }
     //end for
     //-- single-select
     $selected_value = 'id2';
     $elem_single_select = SmartComponents::html_single_select_list('test-unit-s-list-two', $selected_value, 'form', $array_of_values, 'frm[list_single]', '150', 'onChange="alert(\'' . Smart::escape_js('Getting value from the "SingleList": ') . '\' + $(\'#test-unit-s-list-two\').val());"', 'no', 'yes', '#JS-UI-FILTER#');
     // returns HTML Code
     //--
     // draw a multi-select (classic)
     $selected_values = '<id1>,<id3>';
     $elem_multi_select = SmartComponents::html_multi_select_list('test-unit-m-list-2', $selected_values, 'form', $array_of_values, 'frm[list_multi_one][]', 'list', 'no', '250', 'onBlur="alert(\'' . Smart::escape_js('Getting value from the:' . "\n" . ' "MultiList": ') . '\' + $(\'#test-unit-m-list-2\').val());"', '#JS-UI-FILTER#');
     // returns HTML Code
     //--
     // multi-select (checkboxes)
     $array_of_values = array('id1' => 'Label 1', 'id2' => 'Label 2', 'id3' => 'Label 3');
     $selected_values = array('id2', 'id3');
     $elem_multi_boxes = SmartComponents::html_multi_select_list('test-unit-m-list-3', $selected_values, 'form', $array_of_values, 'frm[list_multi_two][]', 'checkboxes');
     // returns HTML Code
     //--
     //--
     if (SMART_FRAMEWORK_ADMIN_AREA === true) {
         $info_adm = '[ Admin Area ]';
     } else {
         $info_adm = '[ Index ]';
     }
     //end if else
     //--
     //--
     $demo_mod_js_components = '<h1>JS Components are not Installed ...</h1>';
     if (SmartAppInfo::TestIfModuleExists('mod-js-components')) {
         $demo_mod_js_components = SmartFileSystem::staticread('modules/mod-js-components/views/testunit/tab-js-components.inc.htm');
     }
     //end if
     //--
     //--
     return SmartMarkersTemplating::render_file_template('lib/core/templates/testunit/test-unit.htm', array('@SUB-TEMPLATES@' => ['test-unit-tab-tests.htm' => 'lib/core/templates/testunit/', 'test-unit-tab-interractions.htm' => 'lib/core/templates/testunit', 'test-unit-tab-ui.htm' => '@', '%test-unit-tab-misc%' => '@/test-unit-tab-misc.htm'], 'TESTUNIT_BASE_URL' => SMART_FRAMEWORK_TESTUNIT_BASE_URL, 'NO-CACHE-TIME' => time(), 'CURRENT-DATE-TIME' => date('Y-m-d H:i:s O'), 'TEST-JS_SCRIPTS.Init-Tabs' => SmartComponents::js_ajx_tabs_init('tabs_draw', Smart::format_number_int($tab, '+')), 'Test-Buttons.AJAX-POST' => $btnop, 'TEST-VAR' => '<div style="background-color: #ECECEC; padding: 10px;"><b>Smart.Framework</b> :: PHP/Javascript web framework :: ' . $info_adm . ' // Test Suite</div>', 'TEST-ELEMENTS.DIALOG' => '<a class="ux-button" style="min-width:325px;" href="#" onClick="' . SmartComponents::js_draw_html_confirm_dialog('<h1>Do you like this framework ?</h1>', 'alert(\'Well ... then \\\' " <tag> !\');') . ' return false;">Test JS-UI Dialog</a>', 'TEST-ELEMENTS.ALERT' => '<a class="ux-button" style="min-width:325px;" href="#" onClick="' . SmartComponents::js_draw_html_alert('<h2>You can press now OK !</h2>', 'alert(\'Good ... \\\' " <tag> !\');') . ' return false;">Test JS-UI Alert</a>', 'TEST-ELEMENTS.SEND-CONFIRM-MODAL' => $basic_form_start . $basic_form_send_modal . $basic_form_end, 'TEST-ELEMENTS.SEND-CONFIRM-POPUP' => $basic_form_start . $basic_form_send_popup . $basic_form_end, 'TEST-ELEMENTS-WND-INTERRACTIONS-MODAL' => self::bttn_open_modal(true, 'test_interractions_modal_start'), 'TEST-ELEMENTS-WND-INTERRACTIONS-POPUP' => self::bttn_open_popup(true, 'test_interractions_popup_start'), 'TEST-ELEMENTS.SINGLE-SELECT' => 'SingleSelect DropDown List without Blank: ' . $one_single_select, 'TEST-ELEMENTS.SINGLE-BLANK-SELECT' => 'SingleSelect DropDown List (from Multi): ' . $one_single_with_blank_select, 'TEST-ELEMENTS.SINGLE-SEARCH-SELECT' => 'SingleSelect DropDown List with Search: ' . $elem_single_select, 'TEST-ELEMENTS.MULTI-SELECT' => 'MultiSelect DropDown List: ' . $elem_multi_select, 'TEST-ELEMENTS.MULTIBOX-SELECT' => 'MultiSelect CheckBoxes:<br>' . $elem_multi_boxes, 'TEST-ELEMENTS.NORMAL-LIST-S' => $test_normal_list_s, 'TEST-ELEMENTS.NORMAL-LIST-M' => $test_normal_list_m, 'TEST-ELEMENTS.CALENDAR' => 'Calendar Selector: ' . SmartComponents::js_draw_date_field('frm_calendar_id', 'frm[date]', Smart::escape_html($frm['date']), 'Select Date', "'0d'", "'1y'", '', 'alert(\'You selected the date: \' + date);'), 'TEST-ELEMENTS.TIMEPICKER' => 'TimePicker Selector: ' . SmartComponents::js_draw_time_field('frm_timepicker_id', 'frm[time]', Smart::escape_html($frm['time']), 'Select Time', '9', '19', '0', '55', '5', '3', '', 'alert(\'You selected the time: \' + time);'), 'TEST-ELEMENTS.AUTOCOMPLETE-SINGLE' => 'AutoComplete: ' . '<input id="auto-complete-fld" type="text" name="frm[autocomplete]" style="width:75px;">' . SmartComponents::js_draw_ui_autocomplete_single('auto-complete-fld', SMART_FRAMEWORK_TESTUNIT_BASE_URL . 'testunit.autocomplete', 'src', 1, 'alert(\'You selected: \' + value);') . ' &nbsp; ' . '<input id="auto-complete-mfld" type="text" name="frm[mautocomplete]" style="width:125px;">' . SmartComponents::js_draw_ui_autocomplete_multi('auto-complete-mfld', SMART_FRAMEWORK_TESTUNIT_BASE_URL . 'testunit.autocomplete', 'src', 1, 'alert(\'You selected: \' + value);'), 'TEST-elements.Captcha' => SmartCaptchaFormCheck::captcha_form(SMART_FRAMEWORK_TESTUNIT_BASE_URL . 'testunit.captcha', self::captcha_form_name()), 'test-elements.limited-area' => 'Limited TextArea: ' . SmartComponents::js_draw_limited_text_area('', 'frm[text_area_1]', '', 300, '400px', '100px'), 'POWERED-INFO' => SmartComponents::draw_powered_info('no'), 'STR-NUM' => '1abc', 'NUM-NUM' => '0.123456789', 'MARKER' => '1234567890.abcdefghijklmniopqrstuvwxyz"', 'IFTEST' => Smart::random_number(1, 2), 'IF2TEST' => Smart::random_number(0, 9), 'LOOPTEST-VAR1' => [['d1' => 'Column 1.x (HTML Escape)', 'd2' => 'Column 2.x (JS Escape)', 'd3' => 'Column 3.x (URL Escape)']], 'LOOPTEST-VAR2' => [['c1' => '<Column 1.1>', 'c2' => 'Column 1.2' . "\n", 'c3' => 'Column 1.3' . "\t"], ['c1' => '<Column 2.1>', 'c2' => 'Column 2.2' . "\n", 'c3' => 'Column 2.3' . "\t"], ['c1' => '<Column 3.1>', 'c2' => 'Column 3.2' . "\n", 'c3' => 'Column 3.3' . "\t"], ['c1' => Smart::random_number(0, 1), 'c2' => 'a', 'c3' => 'A']], 'MOD-JS-COMPONENTS' => $demo_mod_js_components), 'yes');
     //--
 }