Basic interface

This commit is contained in:
Remy Moll 2021-10-30 21:50:35 +02:00
parent 458156fafd
commit 14ddbf0ce4
8 changed files with 162 additions and 6 deletions

View File

@ -1,9 +1,51 @@
from models import user, events
from apis import sbb
from flask import Flask, render_template, request, jsonify, make_response, request
import random
import time
SBB = sbb.SBBWrapper()
from flask.templating import render_template_string
ret = SBB.wrapper.locations.get(params={"name":"Zürich"})
print(ret[:3])
app = Flask(__name__)
# def load_events()
heading = "Lorem ipsum dolor sit amet."
content = """
Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Repellat inventore assumenda laboriosam,
obcaecati saepe pariatur atque est? Quam, molestias nisi.
"""
db = list() # The mock database
posts = 500 # num posts to generate
quantity = 20 # num posts to return per request
@app.route("/")
def index():
""" Route to render the HTML """
context = {
"title" : f"Event title {id}",
"image_name" : "fallback.jpg",
"star_rating" : random.randint(1,4),
"reviews" : random.randint(10,30),
"user" : "Remy"
}
return render_template("base.html", context=context)
@app.route("/get_event")
def get_event():
id = request.args.get("id", type = int)
context = {
"title" : f"Event title {id}",
"image_name" : "fallback.jpg",
"star_rating" : random.randint(1,4),
"reviews" : random.randint(10,30),
"user" : "Remy"
}
return render_template("event_card.html", context=context)
app.run(port=8000, debug=True)

BIN
static/SBB-Logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1,9 @@
.bg-primary .btn-primary .btn-primary:hover{
border-color: red;
background-color: red !important;
}
* {
border-radius: 0 !important;
}

BIN
static/fallback.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

33
static/index.js Normal file
View File

@ -0,0 +1,33 @@
var currentscrollHeight = 0;
var count = 0;
jQuery(document).ready(function ($) {
for (var i = 0; i < 8; i++) {
callData(count);//Call 8 times on page load
count++;
}
});
$(window).on("scroll", function () {
const scrollHeight = $(document).height();
const scrollPos = Math.floor($(window).height() + $(window).scrollTop());
const isBottom = scrollHeight - 100 < scrollPos;
if (isBottom && currentscrollHeight < scrollHeight) {
//alert('calling...');
for (var i = 0; i < 6; i++) {
callData(count);//Once at bottom of page -> call 6 times
count++;
}
currentscrollHeight = scrollHeight;
}
});
function callData(counter) {
$.ajax({
type: "GET",
url: "http://localhost:8000/get_event?id=" + counter,
dataType: "html",
success: function (result) {
//alert(result[0]);
$(result).appendTo('.list');
},
error: function (result) {}
});
}

32
templates/base.html Normal file
View File

@ -0,0 +1,32 @@
<!doctype html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" integrity="undefined" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="undefined" crossorigin="anonymous"></script>
<link href="static/custom-bootstrap-override.css" rel="stylesheet">
<!-- Font Awesome JS -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.12/css/all.css" integrity="sha384-G0fIWCsCzJIMAVNQPfjH08cyYaUtMwjJwqiRKxxE/rx96Uroj1BtIQ6MLJuheaO9" crossorigin="anonymous">
<!-- Jquery + ajax (dynamic content) -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="static/index.js"></script>
</head>
<body>
{% include "sidebar.html" %}
<div class="container-fluid">
<h1 class="display-3">Physical doodling</h1>
<div class="row row-cols-1 row-cols-lg-2 row-cols-xl-3 row-cols-xxl-4 p-1">
<h1 class="display-3">Welcome {{ context.user }}</h1>
<div class="col">
<div class="list">
</div>
</div>
</div>
</body>
</html>

24
templates/event_card.html Normal file
View File

@ -0,0 +1,24 @@
<div class="card mb-4 shadow">
<!-- <div class="card-header"> -->
<img src="static/{{ context.image_name }}" class="card-img-top" alt="...">
<!-- </div> -->
<div class="sep"></div>
<div class="card-body">
<h5 class="card-title">{{ context.title }}</h5>
<ul class="list-group list-group-flush">
<li class="list-group-item"><i class="far fa-clock"></i> Total duration: {{context.duration }}</li>
<li class="list-group-item"><i class="far fa-map"></i> {{ context.location }}</li>
<ul class="list-group-item d-flex justify-content-between align-items-center">
<span>
{% for n in range(context.star_rating) %}
<i class="fas fa-star"></i>
{% endfor %}
{% for n in range(5 - context.star_rating) %}
<i class="far fa-star"></i>
{% endfor %}
</span>
<span class="badge bg-secondary small rounded-pill">{{ context.reviews }} reviews</span>
</ul>
</ul>
</div>
</div>

16
templates/sidebar.html Normal file
View File

@ -0,0 +1,16 @@
<nav class="navbar navbar-dark fixed-top bg-secondary">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/static/SBB-Logo.png" alt="SBB" width="50px">
<span class="font-monospace fw-bold">Click & Hike</span>
</a>
<form class="d-flex">
<a href="/profile" style="color: inherit; text-decoration: none;">
<i class="fas fa-user"></i>
</a>
</form>
</div>
</nav>