mirror of
https://github.com/YunoHost/yunorunner.git
synced 2024-09-03 20:05:52 +02:00
[enh] start an app page
This commit is contained in:
parent
2b10a70d6d
commit
892905093d
3 changed files with 68 additions and 0 deletions
20
run.py
20
run.py
|
@ -451,6 +451,20 @@ async def ws_job(request, websocket, job_id):
|
||||||
await websocket.recv()
|
await websocket.recv()
|
||||||
|
|
||||||
|
|
||||||
|
@app.websocket('/apps-ws')
|
||||||
|
async def ws_apps(request, websocket):
|
||||||
|
# subscribe(websocket, f"job-{job.id}")
|
||||||
|
|
||||||
|
await websocket.send(ujson.dumps({
|
||||||
|
"action": "init_apps",
|
||||||
|
"data": map(model_to_dict, Repo.select().order_by(Repo.name))
|
||||||
|
}))
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# do nothing with input but wait
|
||||||
|
await websocket.recv()
|
||||||
|
|
||||||
|
|
||||||
def require_token():
|
def require_token():
|
||||||
def decorator(f):
|
def decorator(f):
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
|
@ -615,6 +629,12 @@ async def job(request, job_id):
|
||||||
return {"job": job[0], 'relative_path_to_root': '../', 'path': request.path}
|
return {"job": job[0], 'relative_path_to_root': '../', 'path': request.path}
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/apps/')
|
||||||
|
@jinja.template('apps.html')
|
||||||
|
async def apps(request):
|
||||||
|
return {'relative_path_to_root': '../', 'path': request.path}
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
@jinja.template('index.html')
|
@jinja.template('index.html')
|
||||||
async def index(request):
|
async def index(request):
|
||||||
|
|
44
templates/apps.html
Normal file
44
templates/apps.html
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<% extends "base.html" %>
|
||||||
|
|
||||||
|
<% block content %>
|
||||||
|
<section class="section">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="title">Apps</h1>
|
||||||
|
<div id="apps">
|
||||||
|
<table class="table is-bordered is-hoverable is-striped is-fullwidth">
|
||||||
|
<thead>
|
||||||
|
<th>App</th>
|
||||||
|
</thead>
|
||||||
|
<tr v-for="(app, index) in apps" :id="app.id">
|
||||||
|
<td>{{app.name}}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<% endblock %>
|
||||||
|
|
||||||
|
<% block javascript %>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
var app = new Vue({
|
||||||
|
el: '#apps',
|
||||||
|
data: {
|
||||||
|
apps: []
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ws = new ReconnectingWebSocket(websocketPrefix() + '://' + document.domain + ':' + location.port + websocketRelativePath('<{ path }>') + '/apps-ws');
|
||||||
|
|
||||||
|
ws.onmessage = function (event) {
|
||||||
|
var message = JSON.parse(event.data);
|
||||||
|
var data = message.data;
|
||||||
|
var action = message.action;
|
||||||
|
|
||||||
|
if (action == "init_apps") {
|
||||||
|
app.apps = data;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})()
|
||||||
|
</script>
|
||||||
|
<% endblock %>
|
|
@ -16,6 +16,10 @@
|
||||||
<a class="navbar-item" href="<{ relative_path_to_root }>">
|
<a class="navbar-item" href="<{ relative_path_to_root }>">
|
||||||
Home
|
Home
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<a class="navbar-item" href="<{ relative_path_to_root }>/apps/">
|
||||||
|
Apps
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
Loading…
Add table
Reference in a new issue