Added a custom entrypoint script and finished off the saving feature of the admin page.

This commit is contained in:
2025-07-03 12:19:22 +10:00
parent 7237db7d52
commit 80119002e9
5 changed files with 61 additions and 54 deletions

View File

@@ -4,10 +4,10 @@ Vue.createApp({
, 'frm': { 'e': null, 'modal': null }
, 'faults': null
, 'fields': { 'coordinates': { 'patterns': [ '^$', '^-?\\d{1,3}(?:\\.\\d+)?,-?\\d{1,3}(?:\\.\\d+)?$' ], 'default': '-27.38621539644283,153.0351689206467' }
, 'start': { 'patterns': [ '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$' ], 'default': '' }
, 'end': { 'patterns': [ '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$' ], 'default': '' }
, 'title': { 'patterns': [ '^.{20,50}$' ], 'default': 'Event Title' }
, 'description': { 'patterns': [ '^.{20,}$' ], 'default': 'Event Description' }
, 'start': { 'patterns': [ '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:?\\d{0,2}$' ], 'default': '' }
, 'end': { 'patterns': [ '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:?\\d{0,2}$' ], 'default': '' }
, 'title': { 'patterns': [ '^.{10,50}$' ], 'default': 'Event Title' }
, 'description': { 'patterns': [ '^.{16,}$' ], 'default': 'Event Description' }
, 'location': { 'patterns': [ '^.{5,100}$' ], 'default': 'Event Location' }
}
}
@@ -17,11 +17,14 @@ Vue.createApp({
var m = moment(dt);
var t = m.hour() * 3600 + m.minute() * 60 + m.second();
if ( t > 0 ) {
fmt = 'DD MMM YYYY, HH:mm:ss';
fmt = ' ddd DD MMM YYYY, h:mm A';
}
var ret = moment(dt).format(fmt);
return ret;
},
hoursDiff: function(d1, d2) {
return moment(d2).diff(moment(d1), 'hours', true);
},
createEvent: function() {
var event = {};
for ( var k in this.fields ) {
@@ -33,8 +36,8 @@ Vue.createApp({
next7pm.add(1, 'day');
}
const twoHoursLater = moment(next7pm).add(2, 'hours');
event.start = next7pm.format('YYYY-MM-DDTHH:mm:ss');
event.end = twoHoursLater.format('YYYY-MM-DDTHH:mm:ss');
event.start = next7pm.format('YYYY-MM-DDTHH:mm');
event.end = twoHoursLater.format('YYYY-MM-DDTHH:mm');
this.events.unshift(event);
this.frm.e = 0;
},
@@ -47,6 +50,7 @@ Vue.createApp({
}
, function(data) {
app.events = data;
app.frm.e = null;
app.validateEvents();
}
);
@@ -73,9 +77,20 @@ Vue.createApp({
fault.e = e;
fault.k = k;
fault.v = value;
fault.msg = 'Bad format for ' + k + '.';
faults.push(fault);
}
}
var d1 = moment(this.events[e].start);
var d2 = moment(this.events[e].end);
if ( d2.isSameOrBefore(d1) ) {
var fault = {};
fault.e = e;
fault.k = 'end';
fault.v = this.formatDate(d2);
fault.msg = 'Event ends before start.';
faults.push(fault);
}
}
this.faults = ( faults.length == 0 ? null : faults );
},
@@ -95,7 +110,15 @@ Vue.createApp({
d.property = property;
d.value = this.events[this.frm.e][property];
this.frm.modal = d;
}
},
modalUpdate: function() {
this.events[this.frm.e][this.frm.modal.property] = this.frm.modal.value;
this.frm.modal = null;
this.validateEvents();
},
modalCancel: function() {
frm.modal = null;
}
},
mounted: function() {
this.load();