From 2c0e93d882cd0e95287713b978ab03553db0e0a6 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 17 Dec 2022 23:43:25 -0500 Subject: [PATCH] Added Mocks for go Templates. --- public/assets/js/trouble_shooting_routes.js | 24 +++++++ public/assets/mockup/ajax/Testing-Bob.css | 3 + public/assets/mockup/favicon/site.webmanifest | 2 +- public/assets/mockup/js/router_loader.js | 6 +- public/assets/mockup/js/routes.js | 5 +- src/mockup/go_text_templates/ctrl.txt | 33 +++++++++ src/mockup/go_text_templates/inputs.txt | 36 ++++++++++ src/mockup/go_text_templates/models.txt | 72 +++++++++++++++++++ src/mockup/go_text_templates/outputs.txt | 43 +++++++++++ src/mockup/go_text_templates/views.txt | 20 ++++++ src/mockup/views/default/app/footer.php | 3 + 11 files changed, 240 insertions(+), 7 deletions(-) create mode 100644 public/assets/js/trouble_shooting_routes.js create mode 100644 public/assets/mockup/ajax/Testing-Bob.css create mode 100644 src/mockup/go_text_templates/ctrl.txt create mode 100644 src/mockup/go_text_templates/inputs.txt create mode 100644 src/mockup/go_text_templates/models.txt create mode 100644 src/mockup/go_text_templates/outputs.txt create mode 100644 src/mockup/go_text_templates/views.txt diff --git a/public/assets/js/trouble_shooting_routes.js b/public/assets/js/trouble_shooting_routes.js new file mode 100644 index 0000000..cc00bcf --- /dev/null +++ b/public/assets/js/trouble_shooting_routes.js @@ -0,0 +1,24 @@ +var Fresh = function() { + function KeepAsset(key) { + found_one = false; + assets_files.forEach(value => { + if (ajax_folder+value.filename+value.ts == key) { + found_one = true; + // Note: Do NOT use a BREAK here it will not work + // NOR does Return work + } + }); + return found_one; + } + + let allKeys = Object.keys(localStorage); + allKeys.forEach(value => { + if (! KeepAsset(value)) { + localStorage.removeItem(value); + } + }); +}; + +tts.Router.get('Clear', function() { + sessionStorage.clear(); +}); diff --git a/public/assets/mockup/ajax/Testing-Bob.css b/public/assets/mockup/ajax/Testing-Bob.css new file mode 100644 index 0000000..4855178 --- /dev/null +++ b/public/assets/mockup/ajax/Testing-Bob.css @@ -0,0 +1,3 @@ +h2 { + background-color: green; +} \ No newline at end of file diff --git a/public/assets/mockup/favicon/site.webmanifest b/public/assets/mockup/favicon/site.webmanifest index 7423f63..27ea6f8 100644 --- a/public/assets/mockup/favicon/site.webmanifest +++ b/public/assets/mockup/favicon/site.webmanifest @@ -1 +1 @@ -{"name":"","short_name":"","icons":[{"src":"./assets/favicon/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"./assets/favicon/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file +{"name":"","short_name":"","icons":[{"src":"./android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"./android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/assets/mockup/js/router_loader.js b/public/assets/mockup/js/router_loader.js index 1c3982e..0497cbe 100644 --- a/public/assets/mockup/js/router_loader.js +++ b/public/assets/mockup/js/router_loader.js @@ -20,9 +20,7 @@ function doesAssetExists(filename) { } return dfd; } -/** - * @todo Finsh this FN - */ + /* Helper method to apply CSS dynamicly */ function apply_css(href, version) { var dfd_css = new tts.DeferredPromise(); @@ -82,7 +80,7 @@ function loadJS(scriptFile, version, obj, req, fn) { var method_fn = window[fn]; var dfd_loadjs = new tts.DeferredPromise(); - tts.getAsset({name: scriptFile + version, path: ajax_folder, ts: version}).then(val=>{ + tts.getAsset({name: scriptFile, path: ajax_folder, ts: version}).then(val=>{ tts.when([method_fn(obj, req)]).then(function() { dfd_loadjs.resolve("js_complete"); }).catch(function (exception) { diff --git a/public/assets/mockup/js/routes.js b/public/assets/mockup/js/routes.js index 9aa9c7b..4efaaf0 100644 --- a/public/assets/mockup/js/routes.js +++ b/public/assets/mockup/js/routes.js @@ -6,10 +6,11 @@ function PageNotFound(req) {} /* Redirect user if no hash tag was found */ if (location.hash == '') { - location.hash = '#Hello'; + location.hash = '#Home'; } -tts.DoCacheAssets = false; +tts.DoCacheAssets = true; + /* * @todo add Middle-ware showLoader, userAuth */ diff --git a/src/mockup/go_text_templates/ctrl.txt b/src/mockup/go_text_templates/ctrl.txt new file mode 100644 index 0000000..66d6aea --- /dev/null +++ b/src/mockup/go_text_templates/ctrl.txt @@ -0,0 +1,33 @@ +get_service('db_mocker') ); + } + + public function {{.Method}}() { + $input = \prj\{{.Root}}\inputs\{{.Subfolder}}\{{.File}}_in::{{.Method}}(); + $model = new \prj\{{.Root}}\models\{{.Subfolder}}\{{.File}}_model(\tts\main\registry::get('db')); + + $model->init_demo_table(); // Create Table if NOT exists! + $model->populate(10); // INSERT 10 random rows of data + + $success = $model->save_{{.Method}}($input); // Save data from Request Data + $input['model'] = ($success===true) ? + $model->get_{{.Method}}(15) : + $model->get_{{.Method}}(0); + + $output = \prj\{{.Root}}\outputs\{{.Subfolder}}\{{.File}}_out::{{.Method}}($input); + + $html = new \tts\html_document(); + $view = new \tts\view(); + $view->set('html', $html); + $view->set('output', $output); + $view->set_template('main'); + $view->include("{{.Subfolder}}/{{.File}}_{{.Method}}_view"); + $view->render($this); + } +} \ No newline at end of file diff --git a/src/mockup/go_text_templates/inputs.txt b/src/mockup/go_text_templates/inputs.txt new file mode 100644 index 0000000..db957b7 --- /dev/null +++ b/src/mockup/go_text_templates/inputs.txt @@ -0,0 +1,36 @@ + + [ + 'input' => INPUTS::post, + 'field' => FIELD_FILTER::raw_string, + 'html' => HTML_FLAG::escape, + 'rule' => 'required|max: 75', // Others: email, valid_email_domain, + // min, max, between, same, secure (password), alphanumeric + 'message' => ['required' => 'Must fill out first_name!'] + ], + 'last_name' => + [ + 'input' => INPUTS::post, + 'field' => FIELD_FILTER::raw_string, + 'html' => HTML_FLAG::escape, + 'rule' => 'required|max: 75', + 'message' => ['required' => 'Must fill out last_name!'] + ], + ]); + + return $safer_data; // Makes an Array of: fields, html, and errrors + } + +} diff --git a/src/mockup/go_text_templates/models.txt b/src/mockup/go_text_templates/models.txt new file mode 100644 index 0000000..d3164c4 --- /dev/null +++ b/src/mockup/go_text_templates/models.txt @@ -0,0 +1,72 @@ +dbh = $dbh; + $this->db_helper = new \tts\database\help_save($this->dbh, $this->demo_table); + } + + public function pre_save(): bool { + $missing = $this->db_helper->get_missing(); + if (count($missing)) { + echo "Required fields not set " . implode(",", $missing) . "!"; + return false; + } + + if ($this->db_helper->dump_diff()) { + return false; // Opps forgot a field! + } + return true; + } + + public function init_demo_table(): void { + $create_table_sql = "CREATE TABLE IF NOT EXISTS `{$this->demo_table}`( + `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + `first_name` TEXT, + `last_name` TEXT + )"; + $this->dbh->query($create_table_sql); + } + + public function populate($rows): void { + $dummy = new \tts\database\dummy_data($this->dbh); + $data = [ 'first_name' => \tts\arrays\mocking\rnd_names::get_first_names(), + 'last_name' => \tts\arrays\mocking\rnd_names::get_last_names(), + ]; + $dummy->add_dummy_data($this->demo_table, $rows, $data); + } + + public function save_{{.Method}}(array $input): bool { + $set = $this->db_helper->set_members_by_array($input); + if ($set === false) { + return false; // Found Validation issues in input + } + try { + $status = $this->db_helper->save($this); + } catch (\PDOException $e) { + echo \tts\exceptions\DB_Exception::customMessage($e, "Unable to save changes!"); + } + if ($status === $this->db_helper::successful_save) { + return true; // It saved + } + return false; // It did not save + } + + public function get_{{.Method}}(int $number_of_users_to_get = 12): \Generator { + if ($number_of_users_to_get === 0) { + return \tts\database\help_load::empty_generator(); + } + try { + $sql = "SELECT * FROM {$this->demo_table} LIMIT {$number_of_users_to_get}"; + $result = $this->dbh->query($sql); + return \tts\database\help_load::fetch_lazy($result); + } catch (\PDOException $e) { + echo \tts\exceptions\DB_Exception::customMessage($e); + } + } +} diff --git a/src/mockup/go_text_templates/outputs.txt b/src/mockup/go_text_templates/outputs.txt new file mode 100644 index 0000000..30e6797 --- /dev/null +++ b/src/mockup/go_text_templates/outputs.txt @@ -0,0 +1,43 @@ +{$i}) " . $error; + } + return $message; + } + return ""; // No Errors to return here + } + + public static function {{.Method}}_display(\Generator $input): void { + if (! $input->current()) { + return; // No Data, so Bail here + } + \tts\html::show_table_from_generator( + ['ID', 'First Name', 'Last Name'], + ['id', 'first_name', 'last_name'], + $input + ); + } + +} diff --git a/src/mockup/go_text_templates/views.txt b/src/mockup/go_text_templates/views.txt new file mode 100644 index 0000000..b16dd54 --- /dev/null +++ b/src/mockup/go_text_templates/views.txt @@ -0,0 +1,20 @@ +

Sample View file

+ + + +

+
+
+
+ +
+ +
+
+ + diff --git a/src/mockup/views/default/app/footer.php b/src/mockup/views/default/app/footer.php index fe39f3b..ee662a0 100644 --- a/src/mockup/views/default/app/footer.php +++ b/src/mockup/views/default/app/footer.php @@ -5,6 +5,8 @@ const JS_CDN_FILES = [ "https://cdn.metroui.org.ua/v4/js/metro.min.js" => [], ]; +const JS_TSR = [ "js/trouble_shooting_routes.js" =>[] ]; + const JS_FILES = [ "js/router_loader.js" => [], "js/routes.js" => [], @@ -17,4 +19,5 @@ $JS .= \tts\assets::get_ajax_files(PROJECT_ASSETS_DIR . "/ajax/"); $html->add_to_javascript($JS); $html->set_assets_from_array(JS_CDN_FILES, 'main_js', 'cdn'); +$html->set_assets_from_array(JS_TSR, 'js', 'assets'); $html->set_assets_from_array(JS_FILES, 'js', 'project'); \ No newline at end of file