From b9a1812f08fd9cdc55bd6be7abb55186b86c3acb Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Mon, 9 Sep 2024 10:04:15 +0200 Subject: [PATCH 01/12] initial commit --- dashboard/index.html | 1 + public/js/coachDashboard/app.js | 19 +++- public/js/coachDashboard/templates/help.html | 86 +++++++++++++++++++ .../coachDashboard/templates/navigation.html | 4 + 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 public/js/coachDashboard/templates/help.html diff --git a/dashboard/index.html b/dashboard/index.html index 960ecd20..f9498019 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -33,6 +33,7 @@ + diff --git a/public/js/coachDashboard/app.js b/public/js/coachDashboard/app.js index 1bfb672b..ea7e2d6a 100644 --- a/public/js/coachDashboard/app.js +++ b/public/js/coachDashboard/app.js @@ -294,6 +294,11 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm this.refresh = function() { $window.location.reload(); } + /*function to open help page*/ + this.openHelp = function() { + this.tab = 6; + } + }, controllerAs: 'menu' }; @@ -364,4 +369,16 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm element.addClass('learnerscount'); } }; - }); \ No newline at end of file + }); + /*element directive for the help page on the dahsboard*/ + .directive('help', function() { + return { + restrict: 'E', + templateUrl: '/js/coachDashboard/templates/help.html', + link: function(scope, element, attributes) { + /*class for all elements in directive. used for scoped styling*/ + element.addClass('help'); + } + }; + }); + \ No newline at end of file diff --git a/public/js/coachDashboard/templates/help.html b/public/js/coachDashboard/templates/help.html new file mode 100644 index 00000000..a8161a45 --- /dev/null +++ b/public/js/coachDashboard/templates/help.html @@ -0,0 +1,86 @@ +
+

Help & FAQ - Command Reference

+ + +
+ + +
+ + +
+ +
+
+
What does 'git init' do?
+
+
+
+

'git init' initializes a new Git repository in your project folder, setting up the necessary files for tracking changes.

+
+
+
+ + +
+
+
What does 'git clone' do?
+
+
+
+

'git clone' copies a remote repository to your local machine, allowing you to work with all of its files and history.

+
+
+
+ + +
+
+
What does 'ls' do?
+
+
+
+

'ls' lists the contents of a directory in your Linux terminal.

+
+
+
+ + +
+
+
What does 'echo' do?
+
+
+
+

'echo' prints text or variable values to the terminal or console.

+
+
+
+
+
+ + diff --git a/public/js/coachDashboard/templates/navigation.html b/public/js/coachDashboard/templates/navigation.html index b793acd9..2e99eff2 100644 --- a/public/js/coachDashboard/templates/navigation.html +++ b/public/js/coachDashboard/templates/navigation.html @@ -12,6 +12,10 @@

Refresh

+
+
From 7bded9685397ceb4af767125eb92ffe8ec1857f1 Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Mon, 9 Sep 2024 15:34:52 +0200 Subject: [PATCH 02/12] using directive and not ngroute for routing to the page --- dashboard/index.html | 1 + public/images/help.png | Bin 0 -> 6052 bytes public/js/coachDashboard/app.js | 20 ++++--- public/js/coachDashboard/templates/help.html | 55 +++++++++--------- .../coachDashboard/templates/navigation.html | 7 +-- 5 files changed, 46 insertions(+), 37 deletions(-) create mode 100644 public/images/help.png diff --git a/dashboard/index.html b/dashboard/index.html index f9498019..f221ef84 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -25,6 +25,7 @@ +
diff --git a/public/images/help.png b/public/images/help.png new file mode 100644 index 0000000000000000000000000000000000000000..ce60bdb6a4a9b5231381198483662955c7feaee3 GIT binary patch literal 6052 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 literal 0 HcmV?d00001 diff --git a/public/js/coachDashboard/app.js b/public/js/coachDashboard/app.js index ea7e2d6a..f9ec9296 100644 --- a/public/js/coachDashboard/app.js +++ b/public/js/coachDashboard/app.js @@ -2,6 +2,14 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm .controller('MainCtrl', function($scope, $uibModal, $log, $document, $http) { var $ctrl = this; + // Control the visibility of the help page + $scope.showHelpPage = false; + + // Function to toggle the help page + $scope.toggleHelpPage = function() { + $scope.showHelpPage = !$scope.showHelpPage; + }; + /*enable angular animations*/ $ctrl.animationsEnabled = true; $scope.init = function() { @@ -369,16 +377,14 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm element.addClass('learnerscount'); } }; - }); - /*element directive for the help page on the dahsboard*/ - .directive('help', function() { + }) + /*element directive for help page*/ + .directive('helpPage', function() { return { restrict: 'E', templateUrl: '/js/coachDashboard/templates/help.html', link: function(scope, element, attributes) { - /*class for all elements in directive. used for scoped styling*/ - element.addClass('help'); + element.addClass('help-page'); } }; - }); - \ No newline at end of file + }); \ No newline at end of file diff --git a/public/js/coachDashboard/templates/help.html b/public/js/coachDashboard/templates/help.html index a8161a45..4522da70 100644 --- a/public/js/coachDashboard/templates/help.html +++ b/public/js/coachDashboard/templates/help.html @@ -6,8 +6,8 @@

Help & FAQ - Command Reference

@@ -17,11 +17,12 @@

Help & FAQ - Command Reference

-
What does 'git init' do?
+
What does 'monthend 09-24' do?
-

'git init' initializes a new Git repository in your project folder, setting up the necessary files for tracking changes.

+

This submits monthend report for your centre, this command is used for both mid month and monthend, where (09) is the month and (24) is the year.
substute the month and the year + to the right dates

@@ -29,11 +30,11 @@
What does 'git init' do?
-
What does 'git clone' do?
+
What does 'make_quiz' do?
-

'git clone' copies a remote repository to your local machine, allowing you to work with all of its files and history.

+

This command recreates quiz in Kolibri, everytime this runs a quizes are regenerated

@@ -41,11 +42,11 @@
What does 'git clone' do?
-
What does 'ls' do?
+
What does 'shutdown' do?
-

'ls' lists the contents of a directory in your Linux terminal.

+

This command shuts down the session laptop, by first making a backup then after that, the computer shutsdown.

@@ -53,11 +54,11 @@
What does 'ls' do?
-
What does 'echo' do?
+
What does 'restartko' do?
-

'echo' prints text or variable values to the terminal or console.

+

This command, restarts kolibri, its takes less than 3 minutes for kolibri start running again once this command in run

@@ -65,22 +66,24 @@
What does 'echo' do?
+ diff --git a/public/js/coachDashboard/templates/navigation.html b/public/js/coachDashboard/templates/navigation.html index 2e99eff2..f9c93359 100644 --- a/public/js/coachDashboard/templates/navigation.html +++ b/public/js/coachDashboard/templates/navigation.html @@ -11,11 +11,10 @@ + -
-
From 4a93bc46289b1f3021223b1e380d115101ec53c6 Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Tue, 10 Sep 2024 09:39:30 +0200 Subject: [PATCH 03/12] added route to the help page --- dashboard/index.html | 3 +- public/js/coachDashboard/app.js | 50 +++---- public/js/coachDashboard/templates/help.html | 123 ++++++++---------- .../coachDashboard/templates/navigation.html | 7 +- 4 files changed, 82 insertions(+), 101 deletions(-) diff --git a/dashboard/index.html b/dashboard/index.html index f221ef84..73e2aa73 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -33,8 +33,7 @@ - - +
diff --git a/public/js/coachDashboard/app.js b/public/js/coachDashboard/app.js index f9ec9296..5a392e71 100644 --- a/public/js/coachDashboard/app.js +++ b/public/js/coachDashboard/app.js @@ -2,12 +2,9 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm .controller('MainCtrl', function($scope, $uibModal, $log, $document, $http) { var $ctrl = this; - // Control the visibility of the help page - $scope.showHelpPage = false; - - // Function to toggle the help page - $scope.toggleHelpPage = function() { - $scope.showHelpPage = !$scope.showHelpPage; + /* Function to navigate to the help page */ + $scope.goToHelpPage = function() { + $location.path('/help'); }; /*enable angular animations*/ @@ -242,12 +239,14 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm } + }) - - - - + .controller('HelpModalInstanceCtrl', function($scope, $uibModalInstance) { + $scope.close = function() { + $uibModalInstance.dismiss('cancel'); + }; }) + /*Controller for a modalinstance that was opened by the $ctrl.openModal function*/ .controller('ModalInstanceCtrl', function($scope, $uibModalInstance) { /*The password a coach is expected to enter*/ @@ -287,30 +286,30 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm return { restrict: 'E', templateUrl: '/js/coachDashboard/templates/navigation.html', - controller: function($window) { - this.tab = 0; /* initially set tab to 1*/ - this.selectTab = function(setTab) { /* Set tab to whatever tab user clicks*/ + controller: function($window, $scope, $location) { + this.tab = 0; + + this.selectTab = function(setTab) { this.tab = setTab; - /*console.log(this.tab);*/ + $scope.showHelpPage = (this.tab === 6); }; - this.isSelected = function(checkTab) { /* Check which tab is selected to trigger show of selected tab */ + + this.isSelected = function(checkTab) { return this.tab === checkTab; - }; - - /*function to refresh page when button clicked*/ + this.refresh = function() { $window.location.reload(); - } - /*function to open help page*/ + }; + this.openHelp = function() { - this.tab = 6; - } - + $location.path('/help'); + }; }, controllerAs: 'menu' }; }) + /*element directive for learners tab*/ .directive('learners', function() { return { @@ -378,13 +377,14 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm } }; }) + /*element directive for help page*/ - .directive('helpPage', function() { + .directive('helppage', function() { return { restrict: 'E', templateUrl: '/js/coachDashboard/templates/help.html', link: function(scope, element, attributes) { - element.addClass('help-page'); + element.addClass('helppage'); } }; }); \ No newline at end of file diff --git a/public/js/coachDashboard/templates/help.html b/public/js/coachDashboard/templates/help.html index 4522da70..5e0f7152 100644 --- a/public/js/coachDashboard/templates/help.html +++ b/public/js/coachDashboard/templates/help.html @@ -1,64 +1,32 @@ -
-

Help & FAQ - Command Reference

+
+

Help & FAQ - Command Reference

+ +
- - +
- -
-
-
What does 'monthend 09-24' do?
-
-
-
-

This submits monthend report for your centre, this command is used for both mid month and monthend, where (09) is the month and (24) is the year.
substute the month and the year - to the right dates

-
-
-
- - -
-
-
What does 'make_quiz' do?
+ +
+
+
{{ faq.question }}
-
+
-

This command recreates quiz in Kolibri, everytime this runs a quizes are regenerated

-
-
-
- - -
-
-
What does 'shutdown' do?
-
-
-
-

This command shuts down the session laptop, by first making a backup then after that, the computer shutsdown.

-
-
-
- - -
-
-
What does 'restartko' do?
-
-
-
-

This command, restarts kolibri, its takes less than 3 minutes for kolibri start running again once this command in run

+

{{ faq.answer }}

@@ -66,24 +34,37 @@
What does 'restartko' do?
+ angular.module('helpApp', []) + .controller('HelpController', function($scope) { + // FAQ data + $scope.faqs = [ + { category: 'kolibri', question: "What does 'monthend 09-24' do?", answer: "This submits monthend report for your centre. This command is used for both mid-month and monthend, where (09) is the month and (24) is the year. Substitute the month and the year with the right dates." }, + { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "This command recreates quiz in Kolibri. Every time this runs, quizzes are regenerated." }, + { category: 'linux', question: "What does 'shutdown' do?", answer: "This command shuts down the session laptop, by first making a backup, then after that, the computer shuts down." }, + { category: 'kolibri', question: "What does 'restartko' do?", answer: "This command restarts Kolibri. It takes less than 3 minutes for Kolibri to start running again once this command is run." } + ]; + + $scope.searchText = ''; + $scope.selectedCategory = ''; + $scope.filteredFaqs = $scope.faqs; + + // Filter FAQs based on search input and category + $scope.filterCommands = function() { + var filter = $scope.searchText.toUpperCase(); + var category = $scope.selectedCategory; + + $scope.filteredFaqs = $scope.faqs.filter(function(faq) { + var matchesCategory = category === '' || faq.category === category; + var matchesSearch = faq.question.toUpperCase().indexOf(filter) > -1; + return matchesCategory && matchesSearch; + }); + }; + + // Check if a FAQ matches the current filters + $scope.faqMatches = function(faq) { + var matchesCategory = $scope.selectedCategory === '' || faq.category === $scope.selectedCategory; + var matchesSearch = faq.question.toUpperCase().indexOf($scope.searchText.toUpperCase()) > -1; + return matchesCategory && matchesSearch; + }; + }); + diff --git a/public/js/coachDashboard/templates/navigation.html b/public/js/coachDashboard/templates/navigation.html index f9c93359..c819694d 100644 --- a/public/js/coachDashboard/templates/navigation.html +++ b/public/js/coachDashboard/templates/navigation.html @@ -11,10 +11,11 @@ -
+
+
From 7adf26f64949356834da6f54f178fd7255677950 Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Tue, 10 Sep 2024 15:32:47 +0200 Subject: [PATCH 04/12] Modified the route for the help page, restored files like app.js where routing was being implimented earlier --- dashboard/help.html | 73 ++++++++++ dashboard/index.html | 13 +- public/css/help.css | 125 ++++++++++++++++++ public/js/bootstrap.bundle.min.js | 7 + public/js/coachDashboard/app.js | 50 ++----- public/js/coachDashboard/templates/help.html | 70 ---------- .../coachDashboard/templates/navigation.html | 14 +- public/js/help.js | 37 ++++++ routes/portal.js | 5 + 9 files changed, 278 insertions(+), 116 deletions(-) create mode 100644 dashboard/help.html create mode 100644 public/css/help.css create mode 100644 public/js/bootstrap.bundle.min.js delete mode 100644 public/js/coachDashboard/templates/help.html create mode 100644 public/js/help.js diff --git a/dashboard/help.html b/dashboard/help.html new file mode 100644 index 00000000..55735d3c --- /dev/null +++ b/dashboard/help.html @@ -0,0 +1,73 @@ + + + + + + Help & FAQ - Command Reference + + + + + + + + + + + + + + + + + + +
+ +
+

Help Page - Command Reference

+
+
+ +
+ + +
+
+ +
+
+ +
+
+ + +
+ +
+
+

+ +

+
+
+

{{ faq.answer }}

+
+
+
+
+
+
+ + diff --git a/dashboard/index.html b/dashboard/index.html index 73e2aa73..37f21784 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -8,8 +8,8 @@ - - + + @@ -21,12 +21,13 @@ - + - + - +
+ @@ -37,4 +38,4 @@
- \ No newline at end of file + diff --git a/public/css/help.css b/public/css/help.css new file mode 100644 index 00000000..e8a2bcae --- /dev/null +++ b/public/css/help.css @@ -0,0 +1,125 @@ +/* General Styling */ +body { + font-family: 'Roboto', Arial, sans-serif; + background-color: #f8f9fa; + margin: 0; + padding: 0; +} + +header { + background-color: rgb(7, 29, 73); + padding: 20px 0; +} + +header .navbar-header .navbar-brand img { + height: 40px; +} + +header { + color: #ffffff; +} + +.container { + max-width: 1080px; + margin: 40px auto; + padding: 25px; + background-color: #ffffff; + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); +} + + +/* Search and Filter Section */ +#searchInput, #categoryFilter { + font-size: 16px; + padding: 12px; + border: 1px solid #dee2e6; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + width: 100%; + transition: border-color 0.2s ease-in-out; +} + +#searchInput:focus, #categoryFilter:focus { + border-color: #80bdff; + outline: none; +} + +.row.g-2 { + display: flex; + gap: 10px; + margin-bottom: 20px; +} + +.col-md-8, .col-md-4 { + flex: 1; +} + +/* FAQ Section */ +.accordion-item { + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 4px; + margin-bottom: 20px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); +} + +.accordion-header { + font-size: 18px; +} + +.accordion-button { + font-size: 16px; + font-weight: bold; + padding: 15px; + background-color: #f8f9fa; + border: none; + color: #495057; + display: flex; + align-items: center; + transition: background-color 0.3s ease; +} + +.accordion-button:hover { + background-color: #e2e6ea; +} + +.accordion-button:focus { + box-shadow: none; +} + +.accordion-button.collapsed { + background-color: #f8f9fa; +} + +.accordion-button i { + margin-right: 10px; + color: #0a0a0a; +} + +.accordion-body { + padding: 20px; + background-color: #fff; + font-size: 15px; + line-height: 1.6; +} + +.accordion-body p { + font-size: 15px; + margin: 0; +} + +/* Responsive */ +@media (max-width: 768px) { + .col-md-8, .col-md-4 { + flex: 100%; + } + + .row.g-2 { + flex-direction: column; + } + + #searchInput, #categoryFilter { + margin-bottom: 15px; + } +} \ No newline at end of file diff --git a/public/js/bootstrap.bundle.min.js b/public/js/bootstrap.bundle.min.js new file mode 100644 index 00000000..04e9185b --- /dev/null +++ b/public/js/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function j(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function M(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${M(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=j(t.dataset[n])}return e},getDataAttribute:(t,e)=>j(t.getAttribute(`data-bs-${M(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>n(t))).join(","):null},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",jt="collapsing",Mt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(jt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(jt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(Mt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function je(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const Me={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:je(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:je(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},j=p?3:1;j>0&&"break"!==P(j);j--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],j=f?-T[$]/2:0,M=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-j-q-z-O.mainAxis:M-q-z-O.mainAxis,K=v?-E[$]/2+j+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,jn=`hide${xn}`,Mn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,Mn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,Mn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",js="Home",Ms="End",Fs="active",Hs="fade",Ws="show",Bs=".dropdown-toggle",zs=`:not(${Bs})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ks extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,js,Ms].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([js,Ms].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return z.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Bs,Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:z.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Ks.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(Vs))Ks.getOrCreateInstance(t)})),m(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Ys=`mouseout${Qs}`,Us=`focusin${Qs}`,Gs=`focusout${Qs}`,Js=`hide${Qs}`,Zs=`hidden${Qs}`,to=`show${Qs}`,eo=`shown${Qs}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){N.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),d(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),N.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),N.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Xs,(t=>this._onInteraction(t,!0))),N.on(this._element,Ys,(t=>this._onInteraction(t,!1))),N.on(this._element,Us,(t=>this._onInteraction(t,!0))),N.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ao),m(ao),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Ks,Toast:ao,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/public/js/coachDashboard/app.js b/public/js/coachDashboard/app.js index 5a392e71..5a45d4b3 100644 --- a/public/js/coachDashboard/app.js +++ b/public/js/coachDashboard/app.js @@ -1,12 +1,6 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'smart-table', 'angular.filter']) .controller('MainCtrl', function($scope, $uibModal, $log, $document, $http) { var $ctrl = this; - - /* Function to navigate to the help page */ - $scope.goToHelpPage = function() { - $location.path('/help'); - }; - /*enable angular animations*/ $ctrl.animationsEnabled = true; $scope.init = function() { @@ -239,14 +233,12 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm } - }) - .controller('HelpModalInstanceCtrl', function($scope, $uibModalInstance) { - $scope.close = function() { - $uibModalInstance.dismiss('cancel'); - }; - }) + + + + }) /*Controller for a modalinstance that was opened by the $ctrl.openModal function*/ .controller('ModalInstanceCtrl', function($scope, $uibModalInstance) { /*The password a coach is expected to enter*/ @@ -286,30 +278,27 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm return { restrict: 'E', templateUrl: '/js/coachDashboard/templates/navigation.html', - controller: function($window, $scope, $location) { - this.tab = 0; - + controller: function($window) { + this.tab = 0; this.selectTab = function(setTab) { this.tab = setTab; - $scope.showHelpPage = (this.tab === 6); + /*console.log(this.tab);*/ }; - this.isSelected = function(checkTab) { return this.tab === checkTab; + }; - + + /*function to refresh page when button clicked*/ this.refresh = function() { $window.location.reload(); - }; - - this.openHelp = function() { - $location.path('/help'); - }; + } + }, controllerAs: 'menu' }; }) - + /*element directive for learners tab*/ .directive('learners', function() { return { @@ -376,15 +365,4 @@ angular.module('coachDashBoard', ['ngAnimate', 'ngSanitize', 'ui.bootstrap', 'sm element.addClass('learnerscount'); } }; - }) - - /*element directive for help page*/ - .directive('helppage', function() { - return { - restrict: 'E', - templateUrl: '/js/coachDashboard/templates/help.html', - link: function(scope, element, attributes) { - element.addClass('helppage'); - } - }; - }); \ No newline at end of file + }); diff --git a/public/js/coachDashboard/templates/help.html b/public/js/coachDashboard/templates/help.html deleted file mode 100644 index 5e0f7152..00000000 --- a/public/js/coachDashboard/templates/help.html +++ /dev/null @@ -1,70 +0,0 @@ -
-

Help & FAQ - Command Reference

- - - - -
- - -
- - -
- -
-
-
{{ faq.question }}
-
-
-
-

{{ faq.answer }}

-
-
-
-
-
- - diff --git a/public/js/coachDashboard/templates/navigation.html b/public/js/coachDashboard/templates/navigation.html index c819694d..5195c33c 100644 --- a/public/js/coachDashboard/templates/navigation.html +++ b/public/js/coachDashboard/templates/navigation.html @@ -8,16 +8,22 @@

Coach Dashboard

+
-
- + +
+ +
-
\ No newline at end of file +
diff --git a/public/js/help.js b/public/js/help.js new file mode 100644 index 00000000..639dc44e --- /dev/null +++ b/public/js/help.js @@ -0,0 +1,37 @@ +angular.module('helpApp', []) +.controller('HelpController', function($scope) { + // FAQ data + $scope.faqs = [ + { category: 'kolibri', question: "What does 'monthend 09-24' do?", answer: "This submits monthend report for your centre. This command is used for both mid-month and monthend, where (09) is the month and (24) is the year. Substitute the month and the year with the right dates." }, + { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "This command recreates quiz in Kolibri. Every time this runs, quizzes are regenerated." }, + { category: 'kolibri', question: "How do can i make a backup?", answer: "You make a backup of your data by opening the terminal and entering the command 'backup', this process does not require any internet connection"}, + { category: 'kolibri', question: "How can i upload a backup to telegram?", answer: "Copy the backup you want to upload from the centre laptop on to your mobile device, and then open the Edulution Telegram channel and upload the backup there, this requires internet connection. The anmount of data usage during the upload process will depend on the size of the backup you are uploading"}, + { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "This command assigns learners to their correct groups"}, + { category: 'linux', question: "What does 'shutdown' do?", answer: "This command shuts down the session laptop, by first making a backup, then after that, the computer shuts down." }, + { category: 'kolibri', question: "What does 'restartko' do?", answer: "This command restarts Kolibri. It takes less than 3 minutes for Kolibri to start running again once this command is run." }, + { category: 'monthend', question: "When do we submit 'monthend' ?", answer: "We submit monthend on the last day of the month, and on the 15th of every month"} + ]; + + $scope.searchText = ''; + $scope.selectedCategory = ''; + $scope.filteredFaqs = $scope.faqs; + + // Filter FAQs based on search input and category + $scope.filterCommands = function() { + var filter = $scope.searchText.toUpperCase(); + var category = $scope.selectedCategory; + + $scope.filteredFaqs = $scope.faqs.filter(function(faq) { + var matchesCategory = category === '' || faq.category === category; + var matchesSearch = faq.question.toUpperCase().indexOf(filter) > -1; + return matchesCategory && matchesSearch; + }); + }; + + // Check if a FAQ matches the current filters + $scope.faqMatches = function(faq) { + var matchesCategory = $scope.selectedCategory === '' || faq.category === $scope.selectedCategory; + var matchesSearch = faq.question.toUpperCase().indexOf($scope.searchText.toUpperCase()) > -1; + return matchesCategory && matchesSearch; + }; +}); \ No newline at end of file diff --git a/routes/portal.js b/routes/portal.js index 89852593..01cac312 100644 --- a/routes/portal.js +++ b/routes/portal.js @@ -41,4 +41,9 @@ router.get('/external_evaluations', (req, res) => { router.get('/learner_survey', (req, res) => { res.sendFile(path.resolve('portal/learner_survey.html')); }); + +/*coach dashboard help page */ +router.get('/help', (req, res) => { + res.sendFile(path.resolve('dashboard/help.html')); +}); module.exports = router \ No newline at end of file From 7570d26984ff924ce517abad55f6ae84ed64f8e2 Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Mon, 16 Sep 2024 10:00:58 +0200 Subject: [PATCH 05/12] Refrenced some commands from The Tech Manual and changed icons on the navigation of the coach dashboard --- dashboard/help.html | 2 +- public/images/question.png | Bin 0 -> 19383 bytes .../coachDashboard/templates/navigation.html | 17 +++++++---------- public/js/help.js | 12 ++++++------ 4 files changed, 14 insertions(+), 17 deletions(-) create mode 100644 public/images/question.png diff --git a/dashboard/help.html b/dashboard/help.html index 55735d3c..c703acfd 100644 --- a/dashboard/help.html +++ b/dashboard/help.html @@ -3,7 +3,7 @@ - Help & FAQ - Command Reference + Help - Command Reference diff --git a/public/images/question.png b/public/images/question.png new file mode 100644 index 0000000000000000000000000000000000000000..5f519db3ee14ac7dfb69cee988fc4514b18a6951 GIT binary patch literal 19383 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

Coach Dashboard

- - -
-

+ + -
diff --git a/public/js/help.js b/public/js/help.js index 639dc44e..d073fbbb 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -2,14 +2,14 @@ angular.module('helpApp', []) .controller('HelpController', function($scope) { // FAQ data $scope.faqs = [ - { category: 'kolibri', question: "What does 'monthend 09-24' do?", answer: "This submits monthend report for your centre. This command is used for both mid-month and monthend, where (09) is the month and (24) is the year. Substitute the month and the year with the right dates." }, - { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "This command recreates quiz in Kolibri. Every time this runs, quizzes are regenerated." }, - { category: 'kolibri', question: "How do can i make a backup?", answer: "You make a backup of your data by opening the terminal and entering the command 'backup', this process does not require any internet connection"}, - { category: 'kolibri', question: "How can i upload a backup to telegram?", answer: "Copy the backup you want to upload from the centre laptop on to your mobile device, and then open the Edulution Telegram channel and upload the backup there, this requires internet connection. The anmount of data usage during the upload process will depend on the size of the backup you are uploading"}, + { category: 'kolibri', question: "What does 'monthend 02-24' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date" }, + { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, + { category: 'kolibri', question: "How do can i make a backup?", answer: "On the session laptop, initiate the backup process by accessing the terminal and executing the command “backup”. This action generates a backup inclusive of data up to the current day"}, + { category: 'kolibri', question: "How can i upload a backup to telegram?", answer: "Upon completion of taking backup, duplicate the backup and transfer it to the Coach tablet. Upload the backup to the Edulution Telegram Channel for secure data storage twice a month (mid-month and month-end data)"}, { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "This command assigns learners to their correct groups"}, { category: 'linux', question: "What does 'shutdown' do?", answer: "This command shuts down the session laptop, by first making a backup, then after that, the computer shuts down." }, - { category: 'kolibri', question: "What does 'restartko' do?", answer: "This command restarts Kolibri. It takes less than 3 minutes for Kolibri to start running again once this command is run." }, - { category: 'monthend', question: "When do we submit 'monthend' ?", answer: "We submit monthend on the last day of the month, and on the 15th of every month"} + { category: 'kolibri', question: "What does 'restartko' do?", answer: "This command restarts Kolibri. It takes less than 2 minutes for Kolibri to start running again once this command is run." }, + { category: 'monthend', question: "When do we submit 'monthend' ?", answer: "The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, ]; $scope.searchText = ''; From 057097cbcfd8f04afafc2580729383748dc4271e Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Wed, 18 Sep 2024 09:24:43 +0200 Subject: [PATCH 06/12] Removed old files from images that are not goi-ng to be used - Formatted text in the dropdown on theexplanations - Renamed the page to Help Page - Matched image color to the Edulution Africa online - Added more categories - Changed the placeholders --- dashboard/help.html | 16 +++---- public/images/help-web-button-2.png | Bin 0 -> 20377 bytes public/images/help.png | Bin 6052 -> 0 bytes public/images/question.png | Bin 19383 -> 0 bytes .../coachDashboard/templates/navigation.html | 2 +- public/js/help.js | 39 ++++++++++++++---- 6 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 public/images/help-web-button-2.png delete mode 100644 public/images/help.png delete mode 100644 public/images/question.png diff --git a/dashboard/help.html b/dashboard/help.html index c703acfd..8a4c68f2 100644 --- a/dashboard/help.html +++ b/dashboard/help.html @@ -3,7 +3,7 @@ - Help - Command Reference + Help page @@ -29,7 +29,7 @@
-

Help Page - Command Reference

+

Help Page

@@ -38,31 +38,31 @@

Help Page - Command Reference

- +
-

-

{{ faq.answer }}

+

diff --git a/public/images/help-web-button-2.png b/public/images/help-web-button-2.png new file mode 100644 index 0000000000000000000000000000000000000000..36fbc6592a59d7c0f3bd80a864abc202e3329ddc GIT binary patch literal 20377 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
@#<8h%k8d!*E1vmQvlbgfu8y)r zRFpS$PE}j}#}GHv4)$R1B6o?bkFZdu;|bd`gvN9l*}e*ok{3KiR%Sz9Py=2T2j2-6 z*HmGd0JKE~hN;Ju3S`#kz~N~Z3KH{!S7-KB?>5k&EuDIK?%^vZA$6l`fF*MO0B9(N zL&Ll@U;1TH_7GGa;!gvweHYY58jjhj^nKB7!IH{HZ=WN29zJP$GjIapgvOU|*_bX) ztu65!yXN>bt-&1swM?Ca(wtH?*ZMO>Cl$pYj-8@|V*Y)Zn51pRHX0<)R51b<@n!zX z#KYVblLMM`h5z$Oj=(Zwh`SH8k2aY(9$OA)F0+)&f{`j0qkEu;8~68}lkx$srf+9J z3iDeD%tPxwv}okfl*y-CO~DIwVV1T^GPudl{B24UQEd9d6`>e`2UTG%7U~AqfecRB zNnCE!C{PT`t83-)oI2e!swPFf{>NMUVAzZq&}Z>y7~kOM@t`}&`74~Rgf2t`ZGKa~ zupWDPGuB#gNAqjfKaxrb@pg7Hs!x0>30mP}54y;%*JUa^X|4 z$MYg)T}BvISpCBv&j$;u9o{X$nNl*@Uga{Ve1Zy2CFT9bt?VhL`$$)s0~WSd#o#~b znn*IT@^Axq!0mkR>i!-YUb+B&Z}hQ9rK-G^he( z#lOrgP3yP>Z`Fikrnp0*_$rkIA4^X2q2IxLqaOKJjQ<^CY_t|eiyfxO4^M5xlcL(- zWopdeDe7|K_=K<7*e=|cn^%3-r`B-U;Z^VRGAyPZC3t6hzCYg`U=e!o{3WQb3voN~ zZ{Bl4h};TG8RrJi&C=~*+Ba??5uJ&Gv^i1hA@xd8gg+^pzDCNYp1A2>`&!q~UP1>uznIBRj8|>`)lGTc&KOcwJ z?(wPfAE14H+t7ganP9dOe!vN?<;bjWl>YSX=%>VXF(4u%&!)NS^0eeg`tpM;agIm( zbUgOKX6;M5$=wR;=Rc@{=`S7`Afhnu$K%0AsO-L(s=Zj<`48m4WAB2yqt;j*WdknD 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

-ISG{cZ}IbT@G&*2%0i(LG4V$RLjx??K**XrIUH z%At;JFWB?YMKmO;STUB|j*U9V7Z@$jMqk;*roTw?T&X5|W83j8LJ}zp;)4pezaCE% zU`b)Q`Mt+ja4T{56B9(t zbXPY@Gv~*C?ZH)0@h5lH+QszWXjNkHoj=B)k@7OA;6hqu!o<0NSMX6Kp_cE-1?NvS7t6X-!!8ZUbkajGqLQ&)tdP6RI{e|_B z(N$mOv@P}b2?T<>aBR7ga=HCVhZ5*CKlU*0>c=TzI0-3&Z|m8T$R6`MRRHiTQEDUI z2aw3#x2ofJ!cQDt2V+{)eWBLdOHmKu;G?ch+jo?o#P56iz*?V)-6<(hz>3CTT+w`W z?;*SY-S%bxHvol|Ln`Uryl|Qg(zNN(zniR0oR|3z;HLJTww5M%$HST4p;xXvuUT+L zPKPL;Dv|^!Gpn5t)DLkYwh1_E;@wL12<~*)D8=-4vHN340D8`yal7R^ki^Qxi@~1t z0@vwnP^kSoQW4dkJ!H6opQXv?pM8oYd)=^ddnd=Nv$~3!1}8OFJyAksoy)HqMOJP0 zF=t_A4uBZlWnJ`$O^Oe)S4C!zOW!X=a>!1*ZlNf_*Vo_tt4{fpJboMt;_nru5xS<7 zqr#WoCip%+4(YCt08jq=3Sj;uO1z|x*Cd8^eHVc0A&oEkt|o;Ge+RdH zA8g#{LNDZ4iOnNR=}y*&{E#F%@C+SFig?jnvo7W_7f9-fAkj|=;|~{5v=ZEzO~b0}RKgAahG%L&XyoBTKWkQpe>1lI1oO4C;$$5m)ur_h zHI*;&=mtzkR&7F~5mTXEcK7gnqDpT!MHdYjV8hL|2$j zDj}jS?}sF+QM}c@s&<1O&vLcp(YnRWJVx>Ac?t53Nk)%J=Dd|K!krp{d|FT8i9%FDMtI~`4rdb z9^%vf3E7qk`B{Gg z{gl&7!p@aPuxs!cC~^hH!yb|xTzg0YS~Fp!+v_Hw>%3(8vy1_M6g_&kx4lJgwa(Bx zmz1bEm$2QI(ERg54otUCj7RjqIM`??|C?UR-SG0dUyfM=wF%_3#3;ML!=Yd5ABpTh zaA)!lqtUAzp3s?P=vzRtBaFZBwA(=x1~>*3>u%gLBL*DkJ9c*{ib#*&wpl2n)3`gK zMIg88`Gzl9!!X|Lt#ynb18?#Ja16TBsD~3;cQxrMfH}w0fnzxdUkZt%Wwix+btJ!q zaGtansF&gdt9?rWamb8G-~wQbc>{@8GF*r!>BcovM_^noWwrYNM{gb%`kFicZ9z%K z#=qMe5uy2Km&Zz~FMN`eWu+;;of0g(0m1KH%Lt$4!3U(b&@nAK9&8jqTMdmsRy%4P zW+6VyWy$+)!#Y?AO6bpb3&oX>AU}zgW|>U}AqcgPQmO`EN<@eK7S2iFaFAH;*D83I zVsQw@MeNMwhzj|#U8EIWr^RQO^H+?d1{-?iuKqPz zj~$Bh)Oa)uMz1}b?w`1&r0}?=;TvqAT{PSGS(E|2|5=>r?p&<7vFDiZ?vLSfMSq_h z^@})=24QC%|InOmsV=#j0%gKqP_W$#p#eEnnO1DCG|GbZ?H{W_hiQG+i@#oOZuh{o zWXed)Mjj3(e6l@L+SKA3^U+D)nDNHzXS=e$jwqNj72haVko25e$acTZ=X4j+EQ_0d ze50u+b{rmtx&dYL|5y%0_vpXluwmx8))T0G{OI1dmY?@Iz-h4}bc=JPAMvA^qK)+9 zQp#Rb!VN>Lw!$*fZuSSQP>6)pl$*K2h64x4R;S`B8^uFPvK9?Glg#o6J zr|GTdKIS(@+MYH8(_vz|3||3HWw=A_cQ`>*xD%pv?j9%R5_S?$Z&$mUT1x&4ogPR8 z=4#hH|8ctQI$W;7swJ>!*-G!sVX-R}{$i1sPmh2Jnfdul6sxwE=oKxXczs2aO}wu} z40-MCO$x#z;Gb%582aP%y!P3s9LvxJYxF(Gr?Na5JY&`1Htz<>4*aSg>u<_PQbH>o z{}V;Hx`MQn=2f=MJUH_pQNKE0LAFvd>rj6 z`hqqH&Xu?>`)wkffH}`4Myp{^2~vi4EX#xmrK~F*upvZ?no@Sn6Y5FZUyF0>5QLAb zRVtT#VYz+!gg-y5BQd8}x(&5%-od?HJFN_3#}R41zaDVdHO&wJ$=`hO#C1;Xf0p&dEmiE+G+1w2tR^vfe~=A?&KN0 z^+`vMd~>d!_YJx}Y$auAblTDOmfG--Vp6O`j7=>cp6(aF5qe=By+6kDa8$L$8a z9wTv|Q+^Nob!DbhVGqs70mW%Lxe>}325Sozf7dF~wi9u0Z9LreKzI8vScCA;3nIFg zok`0N79jagflgL0N1nFrwhji%GM*iK*x2Kdf68u9GpMDfKOBg759_+VH*Z4!ejYhO zBbCpbba|@2&THP-Umq)T0`-z|f?xY6JVpoYY{K^(fd-WjDv%7Dqw4n48n%;myFw zyg<(bA@kzt`>nDk*x5ck2n{NPbvNd?p=`t};noq@CHn3vx;u08S-)-kopa~%=?1PY zzcSaln(3LG*tzQ4v@H8zne?5#>b5|g$o$JC?xK(~D|+)MGUb2O69sME?pU4U0(6hp;a4hlVq1L1DD5H!@KgqXdmrBYVG1vcH|9kdHEB9G? z!i0-u0zszs2IIAA<&U4ZZQ`*;S507|`g@IAcTpXE-6;;Kw=Qh*7eJvB&x8(L3$$+EjM{%>IK&D7 z0qwBVT7r1{cj*oW!-pX5|D0)RH*AEnib8J5@SE)qi}2Qloi+r*Rkvu;%fY{&a(|tu zgidOviv9=2^;Fu&)$Yb%~ z8}R-p&)h%F*Zr@D=`Abe<<-6asCPU`2?+6Fmdmj%EUh2lW@7k^=~fy7XVm_bC%e7> z_7?hXkI`mnnO|%`oz^)i6F9>1%}LxL@(o3z?{4Q55V=rU_tasmiN%=+b9Usp*DM;B z@6L2Shi!~ca#Rr^_G;=c4YALe&1k)Fs35u4FLn(Z^hzqwgX07q;*U-xn_w{4V=#U< zzVFae4heY9OX4LNn@$AF`agnb2GXhkj0Sz*v7mAtQwpV9JR2>uuaDRI4+0n%tMzK9 zuKi}*t>PRlxV&LSAKk@!_MGWS|GK{99B-^foqeCWDVp@}v4@!2G`8HL(3#c>_sh34 zYdFTPWrJP>uJBJ+%afwd%w}iSqYoha3YB$P6|!FK#!@8ATM_;?4%Szmk(IeyrP#;{qLJsxpW&pe0|UsUCEVjfD0dN=oTa_{*tYg z24^7itBIih$!U78GCksL`mz0Vn&E_4(;cL>v=VtQ3G|uPd+$lZuf9e2^F968T19+$ zn3PBqr49Fc-xjOQDNgGuC7!a38yb7D8U2DQ;WQV1eN2sg z{n_{#Kx?KZyqmc2$9w)Tl|cFh4#r-0+uLT_bfH;)7b)N~bInjKJOEPP< zLo%(SvHQaW0#Sb=1$#8O3U~hhm2l?qQ0`wGe`Xl_&cv0$h)CDcBDShBS+HMVIXTlOVgB9XCAmYSs8@7&+N&v~8ivwY8Up6~NL=lyYI z8b>`yZLKX9XH3s7@rv3KR5;_adgj{$P-4n5kg_}@=*M&TcUUMpbhNCIEMvU_4_}m+ zHn6EMf@sE{Y9YKI8>#)f2kt!gVW~1}oVZ2ac zj=-_%SyQCC!F4!Y@jqjjNRcb3eHnVA#QbC+B;IvmThw+V0IFb<+)7h%Jav{nn;K3j zZ&2LWWQhr?s|vaZHpm8vbMVc`*KwvmE0lGp~nLC4UntSqtyT&9djibao)v)#{ZaWOBV8g4X zqv}altg4SvJM|tO2!#kk=WMo|+q$x$em4D`Dh6xHGjw*E$c!1Im7iyZFR4~<{CW9m zl{~*EApAvbBhIDEQGB=NJltd;hr>_fe%w6RGmzMY0%4Lu?#d!htxzoYDkF9TU8tkd zah#qiP7~4P)gQS*(>a(~hf`$=@frQ|ah@o^2$JKIIq>e88_&?5WN91@}H3xh6% z2`wi7%H0c{>Co*lKkg>o(E%=|H~V?15_=q5$&&Fg1~4*@!@0qK_WVR%pujJi365}) zFS9)o^+Mw>`DbZpAyU_oooDU>L)%i`;+C}!lUeGb7gOK znX<1+d1=vyS8~jc>u0SAqmYFn@nnIwR-O5UuR);2A%pB?UefD!y(&?1-+zu5`zANK zU=g;-0sWug_jeLekDPq@7PvBWATR7hlNOgd(-5n{hOwiCAIZG3F^dZA(o0Ia!y$hr zq3BD8>J@DgyX=VDILtoK>ksA z>@NONj%Hc3p>75hL5fMe^TiQ2V$b2$5puEss*Yqljmy(Zm)xJ9<;B85j^#I=Z3faQ zR1w?0BkngCe)f~b^^trI2W%j*E}t!%@?{G-gV+jeHwY20D$Y#(skYJN7M8L&u-Cm0 z|5E=~QZKBJ-GY!WvPbA;S<;T~+pkDSV`LyLtRr2+Dx~c+;kPvX2w1a8IRA9m*04h* z`^4V&*bIY4Mcn>5-niOZTTPSLW2KPO6rGkv_ggMeC2Q;}^>m;>e3;wFSzK!~)W;^Q z!|UO@$%H26gGe3+Np9>NyJW}ppx+NuV>z&Y1FZ~)>0pOeEu=)-p=q8P@5)`^|Ddio zEU;w#D83bj?EyE?>1IZX*|S?ZwIsW%u_E>4H4F=pGPO?he=TfARZk>fBynbqsyR#w zt#7t>9DOOhow0-hneVCTjx~=Sc)FEdO?=D>^@8{wy`-{44$|**lNn+EUsAYs3TPh^ z7A=&5ah2>kU|fhK>dsIzSQObVQSMc3y1br9QK0e;27+k!J|!@wKi#%H)1A;}yCRi( zSO|)?p)Djt1WdHeAT!(H0BRK$MU5Ger`DdWM|B7PV#pvDUS}$I9?I7z|9Z9 z9$W-N?SCFj#t3X=^uH0SH~v;GkJTN@rN z&eBAe1x9nwsf8BTU3|Zh!N;;j~OChOZ; z43HlA2ugBZLKt^qX=*G2+YDrK?05zxtJN*mEHoCWyH$3;K1V<=M1q|DoR_XNJMhQQ ztqW?^Gn-G7a~1GFAmzYsFG`r!aQJxrE)Pa{s2n=%^j)L_E2@wlK-M2Ad~s*|SdOa< zL_pG-YL8_MFUmiM(Fp*E<@vyyyP&Q#lRL?w4^(4*fD=_mAoe^1!?g{5C`jh^6YDsvrcV8n{hg@QC`V@f=JpZcs3&A}4X!2R(0o!<`SLbE_Pcm{Q_-gX?`7(MNwQ zyP3m`PE47vmRL% zS7jU06jA~HSLTgRmhcEPoDe?7Kj^HQkLaj}opYfM>E}R~MH!v=7QyAE&h6E`M<7Zy z%PK)>SW7u|jKJ;! zvaHo=1fB~5pT5IXjlFT0^P*-O3mlxcm##XS6piov8e-*J2O=| z4_4R+n^&De28lB!@d1e?g7nE*o%h@&a;Zkd;ri<9Wy6cc?Q(9v^odC}C*y#Vz|!(~ zcL%Mc+p%4j5FqBC&39k%%}JhqXpqPf9?;n#CPO!20w#~`4Fzs_;Z3867j>Mzy^f6@ z72LcPjf(;!C|Dz9-7g!qI!T_4Ue@N*R3cc4dLEa^Hr3SSJltD)6>SNBC^X0m9p=jz zH%T`&x`G|$@Fz}SzNkTm&hA}Pq01UZ2*l5l+uLkzB+53pAe+(eYw5u@ObR^Yrk$*H lI_;wCgP6j%+qj``Gyb(_ytjh8Fkp2JnVDMS>Wn=T{sl6?!D9db literal 0 HcmV?d00001 diff --git a/public/images/help.png b/public/images/help.png deleted file mode 100644 index ce60bdb6a4a9b5231381198483662955c7feaee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6052 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 diff --git a/public/images/question.png b/public/images/question.png deleted file mode 100644 index 5f519db3ee14ac7dfb69cee988fc4514b18a6951..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19383 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

- help + help
diff --git a/public/js/help.js b/public/js/help.js index d073fbbb..d62b31cf 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -1,16 +1,37 @@ -angular.module('helpApp', []) +angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module .controller('HelpController', function($scope) { // FAQ data $scope.faqs = [ - { category: 'kolibri', question: "What does 'monthend 02-24' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date" }, - { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, - { category: 'kolibri', question: "How do can i make a backup?", answer: "On the session laptop, initiate the backup process by accessing the terminal and executing the command “backup”. This action generates a backup inclusive of data up to the current day"}, - { category: 'kolibri', question: "How can i upload a backup to telegram?", answer: "Upon completion of taking backup, duplicate the backup and transfer it to the Coach tablet. Upload the backup to the Edulution Telegram Channel for secure data storage twice a month (mid-month and month-end data)"}, - { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "This command assigns learners to their correct groups"}, - { category: 'linux', question: "What does 'shutdown' do?", answer: "This command shuts down the session laptop, by first making a backup, then after that, the computer shuts down." }, - { category: 'kolibri', question: "What does 'restartko' do?", answer: "This command restarts Kolibri. It takes less than 2 minutes for Kolibri to start running again once this command is run." }, - { category: 'monthend', question: "When do we submit 'monthend' ?", answer: "The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, + // Kolibri + { category: 'kolibri', question: "What does 'monthend' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, + { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, + { category: 'kolibri', question: "How do I create a backup?", answer: "On the session laptop, initiate the backup process by accessing the terminal and executing the command 'backup'. This action generates a backup inclusive of data up to the current day." }, + { category: 'kolibri', question: "How do I upload a backup to Telegram?", answer: "After completing a backup, transfer it to the Coach tablet, and upload the backup to the Edulution Telegram Channel for secure data storage. This is done twice a month (mid-month and month-end)." }, + { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, + { category: 'kolibri', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, + { category: 'kolibri', question: "How do I log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, + { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that they are logged in correctly and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, + { category: 'kolibri', question: "How do I view learner progress on the Coach Dashboard ?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's progress." }, + + // Reports + { category: 'reports', question: "How do I analyze test results?", answer: "Go to the Coach Dashboard and select 'Test Results'. You can view a detailed breakdown of the learner’s performance and identify areas where they may need additional support." }, + { category: 'reports', question: "How do I view learner attendance on Kolibri?", answer: "Sign in as a Coach using the centre code, go to 'Classes', and then tap into 'Live attendance' to see the list of live learners in the session." }, + { category: 'reports', question: "How can I access reports on Qlik?", answer: "Access the Qlik dashboard using your Edulution email credentials. Navigate through the dashboard and apply filters as needed to generate customized reports on learner progress and other key metrics." }, + + // Hardware + { category: 'hardware', question: "What do I do if a tablet is malfunctioning?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists create a ticket on Freshdesk" }, + { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly. All devices should be charged and connected to the network." }, + { category: 'hardware', question: "What should I do if a tablet loses connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, + { category: 'hardware', question: "How do I manage solar equipment?", answer: "Keep the solar panels clean by using a sponge cleaner twice a week. Log the solar battery levels daily, and ensure that the solar equipment is functioning correctly to support off-grid sessions." }, + { category: 'hardware', question: "What should I do if the router is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If this issue persists create a ticket on Freshdesk." }, + + // Software + { category: 'software', question: "How do I access Google Drive?", answer: "Go to drive.google.com, log in with your Edulution credentials, and navigate to the relevant folders. You can upload and organize files, or access shared documents such as reports and personal files like payslips." }, + { category: 'software', question: "What does the 'shutdown' command do?", answer: "The 'shutdown' command safely powers down the session laptop, ensuring that a backup is made before the laptop shuts off." }, + { category: 'software', question: "What should I do if I experience slow performance in Kolibri?", answer: "If Kolibri is slow, you can try restarting the laptop or tablet. If the issue persists, use the 'restartko' command to reset Kolibri and restore its performance.If this issue persists create a ticket on Freshdesk." }, + ]; + $scope.searchText = ''; $scope.selectedCategory = ''; From e7fa61b3aa5a907b46dac70cc93eb7f803a8c2ff Mon Sep 17 00:00:00 2001 From: Sword Date: Tue, 24 Sep 2024 10:17:54 +0200 Subject: [PATCH 07/12] Added HUB feedback --- public/js/help.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/js/help.js b/public/js/help.js index d62b31cf..dba7ef21 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -9,8 +9,8 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module { category: 'kolibri', question: "How do I upload a backup to Telegram?", answer: "After completing a backup, transfer it to the Coach tablet, and upload the backup to the Edulution Telegram Channel for secure data storage. This is done twice a month (mid-month and month-end)." }, { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, { category: 'kolibri', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, - { category: 'kolibri', question: "How do I log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, - { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that they are logged in correctly and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, + { category: 'kolibri', question: "How do learners log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, + { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, { category: 'kolibri', question: "How do I view learner progress on the Coach Dashboard ?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's progress." }, // Reports @@ -20,7 +20,7 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module // Hardware { category: 'hardware', question: "What do I do if a tablet is malfunctioning?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists create a ticket on Freshdesk" }, - { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly. All devices should be charged and connected to the network." }, + { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly." }, { category: 'hardware', question: "What should I do if a tablet loses connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, { category: 'hardware', question: "How do I manage solar equipment?", answer: "Keep the solar panels clean by using a sponge cleaner twice a week. Log the solar battery levels daily, and ensure that the solar equipment is functioning correctly to support off-grid sessions." }, { category: 'hardware', question: "What should I do if the router is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If this issue persists create a ticket on Freshdesk." }, From f1fd00a101ee0f5fa2987e40a1aa1f17f1cb4fdc Mon Sep 17 00:00:00 2001 From: Sword Date: Tue, 24 Sep 2024 11:35:44 +0200 Subject: [PATCH 08/12] Updated strings --- public/js/help.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/help.js b/public/js/help.js index dba7ef21..e8935a35 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -11,7 +11,7 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module { category: 'kolibri', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, { category: 'kolibri', question: "How do learners log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, - { category: 'kolibri', question: "How do I view learner progress on the Coach Dashboard ?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's progress." }, + { category: 'kolibri', question: "How do I view learner details?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's details this would include Username, Class and Group." }, // Reports { category: 'reports', question: "How do I analyze test results?", answer: "Go to the Coach Dashboard and select 'Test Results'. You can view a detailed breakdown of the learner’s performance and identify areas where they may need additional support." }, From c60e2e604ad1f2260a70bc854d99d1e1c6c7d1d8 Mon Sep 17 00:00:00 2001 From: Jeenyhus Date: Wed, 9 Oct 2024 12:58:46 +0200 Subject: [PATCH 09/12] Added commonly used commands and changed questions from 'How to What' kind of questions --- dashboard/help.html | 1 + public/js/help.js | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/dashboard/help.html b/dashboard/help.html index 8a4c68f2..6d01df02 100644 --- a/dashboard/help.html +++ b/dashboard/help.html @@ -47,6 +47,7 @@

Help Page

+ diff --git a/public/js/help.js b/public/js/help.js index e8935a35..f3ef57c6 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -2,36 +2,38 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module .controller('HelpController', function($scope) { // FAQ data $scope.faqs = [ + // Common Commands + { category: 'common', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, + { category: 'common', question: "What does 'monthend' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, + { category: 'common', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, + { category: 'common', question: "What does 'assign_learners' do?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, + { category: 'common', question: "What does the 'shutdown' command do?", answer: "The 'shutdown' command safely powers down the session laptop, ensuring that a backup is made before the laptop shuts off." }, + // Kolibri - { category: 'kolibri', question: "What does 'monthend' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, - { category: 'kolibri', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, + { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, { category: 'kolibri', question: "How do I create a backup?", answer: "On the session laptop, initiate the backup process by accessing the terminal and executing the command 'backup'. This action generates a backup inclusive of data up to the current day." }, { category: 'kolibri', question: "How do I upload a backup to Telegram?", answer: "After completing a backup, transfer it to the Coach tablet, and upload the backup to the Edulution Telegram Channel for secure data storage. This is done twice a month (mid-month and month-end)." }, - { category: 'kolibri', question: "What does 'assign_learners' do?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, - { category: 'kolibri', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, { category: 'kolibri', question: "How do learners log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, - { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, - { category: 'kolibri', question: "How do I view learner details?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's details this would include Username, Class and Group." }, - + { category: 'kolibri', question: "How do I view learner details?", answer: "Go to the Coach Dashboard and view the 'Learners' tab for a detailed overview of each learner's details. This includes Username, Class, and Group." }, + // Reports { category: 'reports', question: "How do I analyze test results?", answer: "Go to the Coach Dashboard and select 'Test Results'. You can view a detailed breakdown of the learner’s performance and identify areas where they may need additional support." }, { category: 'reports', question: "How do I view learner attendance on Kolibri?", answer: "Sign in as a Coach using the centre code, go to 'Classes', and then tap into 'Live attendance' to see the list of live learners in the session." }, { category: 'reports', question: "How can I access reports on Qlik?", answer: "Access the Qlik dashboard using your Edulution email credentials. Navigate through the dashboard and apply filters as needed to generate customized reports on learner progress and other key metrics." }, - + // Hardware - { category: 'hardware', question: "What do I do if a tablet is malfunctioning?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists create a ticket on Freshdesk" }, + { category: 'hardware', question: "What do I do if a tablet is malfunctioning?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists, create a ticket on Freshdesk." }, { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly." }, { category: 'hardware', question: "What should I do if a tablet loses connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, { category: 'hardware', question: "How do I manage solar equipment?", answer: "Keep the solar panels clean by using a sponge cleaner twice a week. Log the solar battery levels daily, and ensure that the solar equipment is functioning correctly to support off-grid sessions." }, - { category: 'hardware', question: "What should I do if the router is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If this issue persists create a ticket on Freshdesk." }, - + { category: 'hardware', question: "What should I do if the router is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If the issue persists, create a ticket on Freshdesk." }, + // Software { category: 'software', question: "How do I access Google Drive?", answer: "Go to drive.google.com, log in with your Edulution credentials, and navigate to the relevant folders. You can upload and organize files, or access shared documents such as reports and personal files like payslips." }, - { category: 'software', question: "What does the 'shutdown' command do?", answer: "The 'shutdown' command safely powers down the session laptop, ensuring that a backup is made before the laptop shuts off." }, - { category: 'software', question: "What should I do if I experience slow performance in Kolibri?", answer: "If Kolibri is slow, you can try restarting the laptop or tablet. If the issue persists, use the 'restartko' command to reset Kolibri and restore its performance.If this issue persists create a ticket on Freshdesk." }, - + { category: 'software', question: "What should I do if I experience slow performance in Kolibri?", answer: "If Kolibri is slow, you can try restarting the laptop or tablet. If the issue persists, use the 'restartko' command to reset Kolibri and restore its performance. If the issue persists, create a ticket on Freshdesk." }, ]; + $scope.searchText = ''; $scope.selectedCategory = ''; From 552372ca6ea41fe6971930741edf27a19cdb8cf3 Mon Sep 17 00:00:00 2001 From: Dabwitso Mweemba <105205508+Jeenyhus@users.noreply.github.com> Date: Wed, 16 Oct 2024 06:31:24 +0200 Subject: [PATCH 10/12] Renamed the category from common to common_commands and rephrased What questions to How questions help.js --- public/js/help.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/js/help.js b/public/js/help.js index f3ef57c6..ad04c38d 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -3,14 +3,14 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module // FAQ data $scope.faqs = [ // Common Commands - { category: 'common', question: "What does 'restartko' do?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, - { category: 'common', question: "What does 'monthend' do?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, - { category: 'common', question: "What does 'make_quiz' do?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, - { category: 'common', question: "What does 'assign_learners' do?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, - { category: 'common', question: "What does the 'shutdown' command do?", answer: "The 'shutdown' command safely powers down the session laptop, ensuring that a backup is made before the laptop shuts off." }, + { category: 'common_commands', question: "How does 'restartko' work?", answer: "The 'restartko' command restarts Kolibri, ensuring it runs smoothly. Kolibri should be operational again within 2 minutes." }, + { category: 'common_commands', question: "How does 'monthend' work?", answer: "Input the command ‘monthend 02-24’; where, in this instance, '02' represents the month (February) and ‘24’ is the year (2024). The month-end process occurs on the 15th and the last day of every month. If the 15th falls on a Saturday, submission should be conducted on the preceding Friday, adhering to the same protocol for the month-end date." }, + { category: 'common_commands', question: "Hoe does 'make_quiz' work?", answer: "When you use the ‘make_quiz’ command it will refresh previously created quizzes." }, + { category: 'common_commands', question: "Hoe does 'assign_learners' work?", answer: "The 'assign_learners' command assigns learners to their correct groups in Kolibri." }, + { category: 'common_commands', question: "How does the 'shutdown' work?", answer: "The 'shutdown' command safely powers down the session laptop, ensuring that a backup is made before the laptop shuts off." }, // Kolibri - { category: 'kolibri', question: "What should I do if learners are not appearing in the Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, + { category: 'kolibri', question: "How can i fix the issue of learners not appearing in on Kolibri dashboard?", answer: "If learners are not showing on the Kolibri dashboard, ensure that learners are still logged in from the tablet and refresh the page. If the issue persists, check for possible network issues or try restarting Kolibri using the 'restartko' command." }, { category: 'kolibri', question: "How do I create a backup?", answer: "On the session laptop, initiate the backup process by accessing the terminal and executing the command 'backup'. This action generates a backup inclusive of data up to the current day." }, { category: 'kolibri', question: "How do I upload a backup to Telegram?", answer: "After completing a backup, transfer it to the Coach tablet, and upload the backup to the Edulution Telegram Channel for secure data storage. This is done twice a month (mid-month and month-end)." }, { category: 'kolibri', question: "How do learners log in to Kolibri?", answer: "Learners log in to Kolibri by opening Edulution Portal on the tablets, then selecting the Kolibri icon on the portal home page, entering their username, and tapping 'Sign in'." }, @@ -22,15 +22,15 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module { category: 'reports', question: "How can I access reports on Qlik?", answer: "Access the Qlik dashboard using your Edulution email credentials. Navigate through the dashboard and apply filters as needed to generate customized reports on learner progress and other key metrics." }, // Hardware - { category: 'hardware', question: "What do I do if a tablet is malfunctioning?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists, create a ticket on Freshdesk." }, + { category: 'hardware', question: "How can i fix a multinationing tablet?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists, create a ticket on Freshdesk." }, { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly." }, - { category: 'hardware', question: "What should I do if a tablet loses connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, + { category: 'hardware', question: "How can i fix the issue of a tablet losing WiFi connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, { category: 'hardware', question: "How do I manage solar equipment?", answer: "Keep the solar panels clean by using a sponge cleaner twice a week. Log the solar battery levels daily, and ensure that the solar equipment is functioning correctly to support off-grid sessions." }, - { category: 'hardware', question: "What should I do if the router is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If the issue persists, create a ticket on Freshdesk." }, + { category: 'hardware', question: "How can i fix a router that is not working?", answer: "Ensure the router is properly connected to the power source and the session laptop. If it's still not working, restart the router and check the cables. If the issue persists, create a ticket on Freshdesk." }, // Software { category: 'software', question: "How do I access Google Drive?", answer: "Go to drive.google.com, log in with your Edulution credentials, and navigate to the relevant folders. You can upload and organize files, or access shared documents such as reports and personal files like payslips." }, - { category: 'software', question: "What should I do if I experience slow performance in Kolibri?", answer: "If Kolibri is slow, you can try restarting the laptop or tablet. If the issue persists, use the 'restartko' command to reset Kolibri and restore its performance. If the issue persists, create a ticket on Freshdesk." }, + { category: 'software', question: "How can i fix a slow Kolibri performance issue?", answer: "If Kolibri is slow, you can try restarting the laptop or tablet. If the issue persists, use the 'restartko' command to reset Kolibri and restore its performance. If the issue persists, create a ticket on Freshdesk." }, ]; From c57326a39ec8bbe80eaca1acb22b05a2ea801fa3 Mon Sep 17 00:00:00 2001 From: Dabwitso Mweemba <105205508+Jeenyhus@users.noreply.github.com> Date: Wed, 16 Oct 2024 06:34:11 +0200 Subject: [PATCH 11/12] Changed categoryFilter selection option value from commands to common_commands help.html --- dashboard/help.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/help.html b/dashboard/help.html index 6d01df02..aa24971e 100644 --- a/dashboard/help.html +++ b/dashboard/help.html @@ -47,7 +47,7 @@

Help Page

- + From 7f1f4b91794b3cc5d8026b215edc8b1364d8317d Mon Sep 17 00:00:00 2001 From: Dabwitso Mweemba <105205508+Jeenyhus@users.noreply.github.com> Date: Mon, 21 Oct 2024 02:33:13 +0200 Subject: [PATCH 12/12] spelling check --- public/js/help.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/help.js b/public/js/help.js index ad04c38d..f1086d4e 100644 --- a/public/js/help.js +++ b/public/js/help.js @@ -22,7 +22,7 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module { category: 'reports', question: "How can I access reports on Qlik?", answer: "Access the Qlik dashboard using your Edulution email credentials. Navigate through the dashboard and apply filters as needed to generate customized reports on learner progress and other key metrics." }, // Hardware - { category: 'hardware', question: "How can i fix a multinationing tablet?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists, create a ticket on Freshdesk." }, + { category: 'hardware', question: "How can i fix a malfunctioning tablet?", answer: "Try restarting the tablet. If the issue persists, perform a factory reset by navigating to the 'Backup and Reset' option under 'Settings' and selecting 'Factory Data Reset'. If the issue persists, create a ticket on Freshdesk." }, { category: 'hardware', question: "How do I set up the hardware for a session?", answer: "Switch on the session laptop, connect it to the router using an ethernet cable, and ensure that the Wi-Fi access point is connected properly." }, { category: 'hardware', question: "How can i fix the issue of a tablet losing WiFi connection during a session?", answer: "Check if the Wi-Fi connection is active. If necessary, restart the tablet or refresh the Wi-Fi connection. You may also need to restart Kolibri using the 'restartko' command." }, { category: 'hardware', question: "How do I manage solar equipment?", answer: "Keep the solar panels clean by using a sponge cleaner twice a week. Log the solar battery levels daily, and ensure that the solar equipment is functioning correctly to support off-grid sessions." }, @@ -57,4 +57,4 @@ angular.module('helpApp', ['ngSanitize']) // Include ngSanitize module var matchesSearch = faq.question.toUpperCase().indexOf($scope.searchText.toUpperCase()) > -1; return matchesCategory && matchesSearch; }; -}); \ No newline at end of file +});