From f502bf1ba31576a15fe52234ddae6bf74f794566 Mon Sep 17 00:00:00 2001
From: Lance Edgar <lance@edbob.org>
Date: Tue, 20 Aug 2024 16:48:33 -0500
Subject: [PATCH 1/4] fix: tweak style config for home link app title in main
 menu

putting the gap/margin in base css so another template can override
---
 src/wuttaweb/templates/base.mako | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/wuttaweb/templates/base.mako b/src/wuttaweb/templates/base.mako
index ddee561..ce5e4ca 100644
--- a/src/wuttaweb/templates/base.mako
+++ b/src/wuttaweb/templates/base.mako
@@ -124,9 +124,11 @@
         }
     % endif
 
-    ## nb. this refers to the "menu-sized" app title in far left of main menu
+    ## nb. this refers to the "home link" app title, next to small
+    ## header logo in top left of screen
     #navbar-brand-title {
         font-weight: bold;
+        margin-left: 0.3rem;
     }
 
     #header-index-title {
@@ -299,7 +301,7 @@
 <%def name="render_navbar_brand()">
   <div class="navbar-brand">
     <a class="navbar-item" href="${url('home')}">
-      <div style="display: flex; gap: 0.3rem; align-items: center;">
+      <div style="display: flex; align-items: center;">
         ${base_meta.header_logo()}
         <div id="navbar-brand-title">
           ${base_meta.global_title()}

From bdc57abd5a54384ed98e3d887d3c59c9249b8e3e Mon Sep 17 00:00:00 2001
From: Lance Edgar <lance@edbob.org>
Date: Tue, 20 Aug 2024 17:02:38 -0500
Subject: [PATCH 2/4] fix: show CRUD buttons in header only if relevant and
 user has access

---
 src/wuttaweb/templates/base.mako | 68 ++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 30 deletions(-)

diff --git a/src/wuttaweb/templates/base.mako b/src/wuttaweb/templates/base.mako
index ce5e4ca..ffe903c 100644
--- a/src/wuttaweb/templates/base.mako
+++ b/src/wuttaweb/templates/base.mako
@@ -482,36 +482,44 @@
 <%def name="render_crud_header_buttons()">
   % if master:
       % if master.viewing:
-         <wutta-button once
-                       tag="a" href="${master.get_action_url('edit', instance)}"
-                       icon-left="edit"
-                       label="Edit This" />
-         % if instance_deletable:
-             <wutta-button once type="is-danger"
-                           tag="a" href="${master.get_action_url('delete', instance)}"
-                           icon-left="trash"
-                           label="Delete This" />
-         % endif
-     % elif master.editing:
-         <wutta-button once
-                       tag="a" href="${master.get_action_url('view', instance)}"
-                       icon-left="eye"
-                       label="View This" />
-         % if instance_deletable:
-             <wutta-button once type="is-danger"
-                           tag="a" href="${master.get_action_url('delete', instance)}"
-                           icon-left="trash"
-                           label="Delete This" />
-         % endif
-     % elif master.deleting:
-         <wutta-button once
-                       tag="a" href="${master.get_action_url('view', instance)}"
-                       icon-left="eye"
-                       label="View This" />
-         <wutta-button once
-                       tag="a" href="${master.get_action_url('edit', instance)}"
-                       icon-left="edit"
-                       label="Edit This" />
+          % if instance_editable and master.has_perm('edit'):
+              <wutta-button once
+                            tag="a" href="${master.get_action_url('edit', instance)}"
+                            icon-left="edit"
+                            label="Edit This" />
+          % endif
+          % if instance_deletable and master.has_perm('delete'):
+              <wutta-button once type="is-danger"
+                            tag="a" href="${master.get_action_url('delete', instance)}"
+                            icon-left="trash"
+                            label="Delete This" />
+          % endif
+      % elif master.editing:
+          % if instance_viewable and master.has_perm('view'):
+              <wutta-button once
+                            tag="a" href="${master.get_action_url('view', instance)}"
+                            icon-left="eye"
+                            label="View This" />
+          % endif
+          % if instance_deletable and master.has_perm('delete'):
+              <wutta-button once type="is-danger"
+                            tag="a" href="${master.get_action_url('delete', instance)}"
+                            icon-left="trash"
+                            label="Delete This" />
+          % endif
+      % elif master.deleting:
+          % if instance_viewable and master.has_perm('view'):
+              <wutta-button once
+                            tag="a" href="${master.get_action_url('view', instance)}"
+                            icon-left="eye"
+                            label="View This" />
+          % endif
+          % if instance_editable and master.has_perm('edit'):
+              <wutta-button once
+                            tag="a" href="${master.get_action_url('edit', instance)}"
+                            icon-left="edit"
+                            label="Edit This" />
+          % endif
       % endif
   % endif
 </%def>

From cadd63e3e8c0ce221d240eb7b8a9502edce4a706 Mon Sep 17 00:00:00 2001
From: Lance Edgar <lance@edbob.org>
Date: Tue, 20 Aug 2024 17:03:15 -0500
Subject: [PATCH 3/4] fix: add padding around main form, via wrapper css

---
 src/wuttaweb/templates/base.mako | 6 ++++++
 src/wuttaweb/templates/form.mako | 8 ++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/wuttaweb/templates/base.mako b/src/wuttaweb/templates/base.mako
index ffe903c..f58f7ec 100644
--- a/src/wuttaweb/templates/base.mako
+++ b/src/wuttaweb/templates/base.mako
@@ -151,6 +151,12 @@
         white-space: nowrap;
     }
 
+    .wutta-form-wrapper {
+        margin-left: 5rem;
+        margin-top: 2rem;
+        width: 50%;
+    }
+
   </style>
 </%def>
 
diff --git a/src/wuttaweb/templates/form.mako b/src/wuttaweb/templates/form.mako
index 2baf95a..7029463 100644
--- a/src/wuttaweb/templates/form.mako
+++ b/src/wuttaweb/templates/form.mako
@@ -2,11 +2,11 @@
 <%inherit file="/page.mako" />
 
 <%def name="page_content()">
-  <div style="margin-top: 2rem; width: 50%;">
-    % if form is not Undefined:
+  % if form is not Undefined:
+      <div class="wutta-form-wrapper">
         ${form.render_vue_tag()}
-    % endif
-  </div>
+      </div>
+  % endif
 </%def>
 
 <%def name="render_vue_templates()">

From e9d59062ca45fa03dd633adbd7fb0317aeb335d5 Mon Sep 17 00:00:00 2001
From: Lance Edgar <lance@edbob.org>
Date: Tue, 20 Aug 2024 19:02:00 -0500
Subject: [PATCH 4/4] fix: add form padding, validators for /configure pages

---
 src/wuttaweb/templates/configure.mako | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/wuttaweb/templates/configure.mako b/src/wuttaweb/templates/configure.mako
index d430672..6b7a766 100644
--- a/src/wuttaweb/templates/configure.mako
+++ b/src/wuttaweb/templates/configure.mako
@@ -8,8 +8,10 @@
   ${self.buttons_content()}
 
   ${h.form(request.current_route_url(), enctype='multipart/form-data', ref='saveSettingsForm', **{'@submit': 'saveSettingsFormSubmit'})}
-  ${h.csrf_token(request)}
-  ${self.form_content()}
+    ${h.csrf_token(request)}
+    <div class="wutta-form-wrapper">
+      ${self.form_content()}
+    </div>
   ${h.end_form()}
 
   <b-modal has-modal-card
@@ -148,8 +150,18 @@
     ThisPageData.settingsNeedSaved = false
     ThisPageData.undoChanges = false
     ThisPageData.savingSettings = false
+    ThisPageData.validators = []
 
     ThisPage.methods.saveSettings = function() {
+
+        for (let validator of this.validators) {
+            let msg = validator.call(this)
+            if (msg) {
+                alert(msg)
+                return
+            }
+        }
+
         this.savingSettings = true
         this.$refs.saveSettingsForm.submit()
     }