Got a basic calendar editing page going.

This commit is contained in:
2025-07-01 23:02:30 +10:00
parent 7607d807fe
commit f8616ff819
12 changed files with 148 additions and 30 deletions

9
cal/api.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
header("Content-Type: application/json");
include('lib.php');
$ret = array( "err" => "unknown command" );
if ( $_GET["cmd"] == "get" ) {
$ret = getEvents();
}
print(json_encode($ret));
?>

0
cal/events.json Normal file
View File

7
cal/index.css Normal file
View File

@@ -0,0 +1,7 @@
.tabbody {
border-bottom: solid 1px rgb(222, 226, 230);
border-left: solid 1px rgb(222, 226, 230);
border-right: solid 1px rgb(222, 226, 230);
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}

17
cal/index.js Executable file
View File

@@ -0,0 +1,17 @@
Vue.createApp({
data: function() {
return { 'events': null
, 'tabs': [ 'Events', 'Create' ]
, 'frm': { 'tab': 0, 'e': null }
}
},
mounted: function() {
var app = this;
jQuery.get( 'api.php'
, { 'cmd': 'get' }
, function(data) {
app.events = data;
}
);
}
}).mount('#app')

73
cal/index.php Executable file
View File

@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Events</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
crossorigin="anonymous" />
<link href="index.css" rel="stylesheet" />
<style>
</style>
</head>
<body>
<div class="container" id="app">
<ul class="nav nav-tabs">
<li class="nav-item" v-for="lbl, t in tabs" v-on:click="frm.tab = t; frm.e = null;">
<a class="nav-link" :class="{ 'active': frm.tab == t }" aria-current="page" href="#">{{lbl}}</a>
</li>
</ul>
<div v-if="frm.tab == 0" class="tabbody">
<div class="row">
<div class="col-6">
<table class="table">
<tbody>
<tr v-for="event, e in events" v-on:click="frm.e = e">
<td>{{event.start}}</td>
<td>{{event.end}}</td>
</tr>
</tbody>
</table>
</div>
<div class="col-6" v-if="frm.e != null">
<div class="input-group mb-1">
<span class="input-group-text">Start</span>
<input type="text" class="form-control" v-model="events[frm.e].start">
</div>
<div class="input-group mb-1">
<span class="input-group-text">End</span>
<input type="text" class="form-control" v-model="events[frm.e].end">
</div>
<div class="input-group mb-1">
<span class="input-group-text">Title</span>
<input type="text" class="form-control" v-model="events[frm.e].title">
</div>
<div class="input-group mb-1">
<span class="input-group-text">Description</span>
<input type="text" class="form-control" v-model="events[frm.e].description">
</div>
<div class="input-group mb-1">
<span class="input-group-text">Location</span>
<input type="text" class="form-control" v-model="events[frm.e].location">
</div>
<div class="input-group mb-1">
<span class="input-group-text">Coordinates</span>
<input type="text" class="form-control" v-model="events[frm.e].coordinates">
</div>
</div>
</div>
</div>
<div v-else-if="frm.tab == 1" class="tabbody">
<h1>Create</h1>
</div>
<pre>{{events}}</pre>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="index.js"></script>
</body>
</html>

0
cal/lib.php Normal file
View File