diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json
index 4e82cec..d44bc97 100644
--- a/nodejs/package-lock.json
+++ b/nodejs/package-lock.json
@@ -1,18 +1,19 @@
{
"name": "t42-jump-host",
- "version": "1.4.0",
+ "version": "1.5.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "t42-jump-host",
- "version": "1.4.0",
+ "version": "1.5.0",
"license": "MIT",
"dependencies": {
"@fortawesome/fontawesome-free": "^7.3.0",
"@simpleworkjs/app-stack": "^1.0.0",
"@simpleworkjs/conf": "^1.2.0",
"@simpleworkjs/directory-schema": "^1.0.0",
+ "@simpleworkjs/frontend": "^0.2.5",
"@simpleworkjs/ldap": "^1.0.1",
"@simpleworkjs/oidc-client": "^1.0.0",
"@simpleworkjs/orm": "^0.2.8",
@@ -176,6 +177,15 @@
"node": ">=18.0.0"
}
},
+ "node_modules/@simpleworkjs/frontend": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@simpleworkjs/frontend/-/frontend-0.2.5.tgz",
+ "integrity": "sha512-PxR7UVPv3gRpdF0WsuAZplF1vYvKsEJQevVPhz9d72U+69vP/OH3tlaAXjtO/apMHfhT1viOPw2gMVOrPSxYZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/@simpleworkjs/ldap": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@simpleworkjs/ldap/-/ldap-1.0.1.tgz",
diff --git a/nodejs/package.json b/nodejs/package.json
index aa15769..d94e6a9 100644
--- a/nodejs/package.json
+++ b/nodejs/package.json
@@ -23,6 +23,7 @@
"@simpleworkjs/app-stack": "^1.0.0",
"@simpleworkjs/conf": "^1.2.0",
"@simpleworkjs/directory-schema": "^1.0.0",
+ "@simpleworkjs/frontend": "^0.2.5",
"@simpleworkjs/ldap": "^1.0.1",
"@simpleworkjs/oidc-client": "^1.0.0",
"@simpleworkjs/orm": "^0.2.8",
diff --git a/nodejs/public/lib/js/app-base.js b/nodejs/public/lib/js/app-base.js
index 7aa874d..7fe4a17 100644
--- a/nodejs/public/lib/js/app-base.js
+++ b/nodejs/public/lib/js/app-base.js
@@ -363,7 +363,7 @@ app.auth = (function(app){
}
if(requiredGroups && !await memberOf(requiredGroups, user)){
- app.util.actionMessage(
+ app.messages.action(
`
You do not have permission to be here.
@@ -520,68 +520,15 @@ app.util = (function(app){
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
- function actionMessage(message, $targetPassed, type, callback){
- message = message || '';
-
- let $target = $targetPassed.closest('div.card').find('.actionMessage');
- if(!$target.length) $target = $($targetPassed.find('.actionMessage')[0]);
-
- type = type || 'info';
- callback = callback || function(){};
-
- if($target.html() === message) return;
-
- if($target.html()){
- $target.slideUp('fast', function(){
- $target.html('')
- $target.removeClass (function(index, className){
- return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
- });
- if(message) return actionMessage(message, $target, type, callback);
- $target.hide()
- })
- }else{
- if(type) $target.addClass('bg-' + type);
-
- // Messages that bring their own buttons (actionConfirm) are left
- // alone; everything else gets the standard dismiss button.
- if(!message.includes('