automated push from the terminal
15
.dockerignore
Normal file
@@ -0,0 +1,15 @@
|
||||
.git
|
||||
|
||||
.volume
|
||||
|
||||
.volumes
|
||||
|
||||
.import
|
||||
|
||||
.trash
|
||||
|
||||
.backup
|
||||
|
||||
.recycle
|
||||
|
||||
__pycache__
|
||||
1
.gitignore
vendored
Executable file
@@ -0,0 +1 @@
|
||||
__pycache__
|
||||
47
Dockerfile
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
# base image
|
||||
|
||||
FROM python:3.8
|
||||
|
||||
# setup environment variable
|
||||
|
||||
ENV DockerHOME=/home/app/webapp
|
||||
|
||||
# set work directory
|
||||
|
||||
RUN mkdir -p $DockerHOME
|
||||
|
||||
# where your code lives
|
||||
|
||||
WORKDIR $DockerHOME
|
||||
|
||||
# set environment variables
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE 1
|
||||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
|
||||
# install dependencies
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
|
||||
# copy whole project to your docker home directory.
|
||||
|
||||
COPY . .
|
||||
|
||||
# run this command to install all dependencies
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
RUN python3 manage.py makemigrations
|
||||
|
||||
RUN python3 manage.py migrate
|
||||
|
||||
|
||||
# port where the Django app runs
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
# start server
|
||||
|
||||
CMD python manage.py runserver 0.0.0.0:8000
|
||||
6
application/__init__.py
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__VERSION__ = "1.6.28"
|
||||
__RELEASE_DATE__ = "20-Jul-2023"
|
||||
__AUTHOR__ = "Agus Makmun (Summon Agus)"
|
||||
__AUTHOR_EMAIL__ = "summon.agus@gmail.com"
|
||||
16
application/asgi.py
Normal file
@@ -0,0 +1,16 @@
|
||||
"""
|
||||
ASGI config for application project.
|
||||
|
||||
It exposes the ASGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.asgi import get_asgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
|
||||
|
||||
application = get_asgi_application()
|
||||
173
application/settings.py
Normal file
@@ -0,0 +1,173 @@
|
||||
"""
|
||||
Django settings for card players unite project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 3.1.5.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/3.1/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/3.1/ref/settings/
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = '7!%*_%*0x9*#-k*1$b$^dax14hu2tazzrvk5tvj@#7vlg*h0ni'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = ['localhost']
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
|
||||
'django.contrib.admin',
|
||||
|
||||
'django.contrib.auth',
|
||||
|
||||
'django.contrib.contenttypes',
|
||||
|
||||
'django.contrib.sessions',
|
||||
|
||||
'django.contrib.messages',
|
||||
|
||||
'django.contrib.staticfiles',
|
||||
|
||||
'rest_framework',
|
||||
|
||||
'corsheaders',
|
||||
|
||||
'player',
|
||||
|
||||
'tournament',
|
||||
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
"corsheaders.middleware.CorsMiddleware",
|
||||
|
||||
]
|
||||
|
||||
CORS_ALLOWED_ORIGINS = [
|
||||
"https://example.com",
|
||||
"https://sub.example.com",
|
||||
"http://localhost:8000",
|
||||
"http://127.0.0.1:9000",
|
||||
]
|
||||
|
||||
CORS_ORIGIN_ALLOW_ALL = True
|
||||
|
||||
ROOT_URLCONF = 'application.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
|
||||
'DIRS': [BASE_DIR / 'templates'],
|
||||
|
||||
'APP_DIRS': True,
|
||||
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
},
|
||||
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'application.wsgi.application'
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.postgresql',
|
||||
'NAME': 'maverickdb',
|
||||
'USER':'maverickdb',
|
||||
'PASSWORD':'maverickdb',
|
||||
'HOST':'localhost',
|
||||
'PORT':'5432'
|
||||
}
|
||||
}
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||
},
|
||||
]
|
||||
|
||||
##########################################
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/3.1/topics/i18n/
|
||||
|
||||
##LANGUAGE_CODE = 'en-us'
|
||||
|
||||
##TIME_ZONE = 'UTC'
|
||||
|
||||
##USE_I18N = True
|
||||
|
||||
##USE_L10N = True
|
||||
|
||||
##USE_TZ = True
|
||||
|
||||
##########################################
|
||||
|
||||
LOGIN_REDIRECT_URL = "home"
|
||||
|
||||
LOGOUT_REDIRECT_URL = 'logout1'
|
||||
|
||||
#SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
|
||||
SESSION_COOKIE_AGE = 180 # 3 minutes. "1209600(2 weeks)" by default
|
||||
|
||||
#SESSION_SAVE_EVERY_REQUEST = True # "False" by default
|
||||
|
||||
##########################################
|
||||
|
||||
## https://www.w3schools.com/django/django_add_css_file_global.php
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
STATICFILES_DIRS = [
|
||||
|
||||
BASE_DIR / "static"
|
||||
|
||||
]
|
||||
|
||||
##########################################
|
||||
21
application/urls.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from django.urls import path, include
|
||||
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
path("", TemplateView.as_view(template_name="listing.html"), name="listing"),
|
||||
|
||||
path("home", TemplateView.as_view(template_name="home.html"), name="home"),
|
||||
|
||||
path('tournament/', include('tournament.urls')),
|
||||
|
||||
path("player/", include("player.urls")),
|
||||
|
||||
path("player/", include("django.contrib.auth.urls")),
|
||||
|
||||
]
|
||||
22
application/views.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from rest_framework import generics
|
||||
|
||||
from django.http import HttpResponse
|
||||
|
||||
from django.template import loader
|
||||
|
||||
## https://docs.djangoproject.com/en/4.2/intro/tutorial03/
|
||||
|
||||
def home(request):
|
||||
|
||||
print("home home")
|
||||
|
||||
template = loader.get_template("home.html")
|
||||
|
||||
context = {
|
||||
|
||||
"key": "value",
|
||||
}
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
16
application/wsgi.py
Normal file
@@ -0,0 +1,16 @@
|
||||
"""
|
||||
WSGI config for application project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
|
||||
|
||||
application = get_wsgi_application()
|
||||
56
cardplayersunite.bash
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
##
|
||||
|
||||
set -e
|
||||
|
||||
set -x
|
||||
|
||||
##
|
||||
|
||||
reset
|
||||
|
||||
clear
|
||||
|
||||
##
|
||||
|
||||
docker-compose down --remove-orphans
|
||||
|
||||
docker-compose rm
|
||||
|
||||
docker-compose pull
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
sleep 8
|
||||
|
||||
########
|
||||
|
||||
###docker-compose -f postgres.yaml pull
|
||||
|
||||
#python3 manage.py dumpdata
|
||||
## This will IRREVERSIBLY DESTROY all data currently in the "maverickdb" database, and return each table to an empty state.
|
||||
|
||||
|
||||
|
||||
### python3 manage.py flush
|
||||
|
||||
### python3 manage.py sqlflush
|
||||
|
||||
#python3 manage.py sqlmigrate
|
||||
|
||||
##python3 manage.py sqlsequencereset
|
||||
|
||||
#python3 manage.py generateschema
|
||||
|
||||
|
||||
|
||||
python3 manage.py makemigrations
|
||||
|
||||
python3 manage.py migrate
|
||||
|
||||
#python3 manage.py squashmigrations bikes
|
||||
|
||||
#python3 manage.py optimizemigration
|
||||
|
||||
python3 manage.py runserver 0.0.0.0:8888
|
||||
51
compose.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
|
||||
card-players-unite-postgres:
|
||||
|
||||
container_name: card-players-unite-postgres
|
||||
|
||||
image: postgres:14.1-alpine
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
|
||||
- 5432:5432
|
||||
|
||||
environment:
|
||||
|
||||
- POSTGRES_DB=maverickdb
|
||||
|
||||
- POSTGRES_USER=maverickdb
|
||||
|
||||
- POSTGRES_PASSWORD=maverickdb
|
||||
|
||||
## volumes:
|
||||
##
|
||||
## - /tmp/volume-data-postgres:/var/lib/postgresql/data
|
||||
|
||||
card-players-unite-pgadmin:
|
||||
|
||||
container_name: card-players-unite-pgadmin
|
||||
|
||||
image: dpage/pgadmin4
|
||||
|
||||
depends_on:
|
||||
|
||||
- card-players-unite-postgres
|
||||
|
||||
ports:
|
||||
|
||||
- "5480:80"
|
||||
|
||||
environment:
|
||||
|
||||
PGADMIN_DEFAULT_EMAIL: lorem@loremipsum.com
|
||||
|
||||
PGADMIN_DEFAULT_PASSWORD: maverickdb
|
||||
|
||||
## volumes:
|
||||
##
|
||||
## - /tmp/volume-data-pgadmin4:/var/lib/pgadmin
|
||||
1
createuser.bash
Executable file
@@ -0,0 +1 @@
|
||||
python3 manage.py createsuperuser --username rlmessick --email fake@cardplayersunite.online
|
||||
BIN
docs/imagery/cover.png
Normal file
|
After Width: | Height: | Size: 851 KiB |
1
docs/index.md
Normal file
@@ -0,0 +1 @@
|
||||
# index! docs!
|
||||
3
docs/quick-start.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# quick start!
|
||||
|
||||

|
||||
43
docs/readme.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# intro
|
||||
|
||||

|
||||
|
||||
## Developer Documentation
|
||||
|
||||
You can run the app at home.
|
||||
|
||||
Follow the instructions below on an Ubuntu Linux server.
|
||||
|
||||
[Developer Docs](/docs/index.md)
|
||||
|
||||
## Tools & Tech
|
||||
|
||||
the tools and tech
|
||||
|
||||
| website | how the site helped |
|
||||
|---------|---------------------|
|
||||
|[Bootswatch](https://bootswatch.com/)|bootstrap compatible prebuild color theming and css|
|
||||
|[Digital Ocean](https://www.digitalocean.com/community/tutorials)|cloud server hosting and tutorials|
|
||||
|[Internet Tutorials](/docs/tutorials.md)|various tutorials from the internet with how-to help and information|
|
||||
|[Stock Imagery](/docs/attribution.md)|free stock imagery from the internet, with attribution.|
|
||||
|[TOC Generator](https://ecotrust-canada.github.io/markdown-toc/)|github wiki toc generator.|
|
||||
|[Jigsaw validator](https://jigsaw.w3.org/css-validator/)|Validator CSS and HTML|
|
||||
|[Browserstack](https://www.browserstack.com/responsive)|Responsiveness|
|
||||
|
||||
## Quick Start Guide
|
||||
|
||||
You can run the app at home.
|
||||
|
||||
Follow the instructions below on an Ubuntu Linux server.
|
||||
|
||||
[Quick Start Guide](/docs/quick-start.md)
|
||||
|
||||
### Preview Card Players Unite
|
||||
|
||||

|
||||
|
||||
the app is deployed and available for usage.
|
||||
|
||||
Click the link below to access Card Players Unite.
|
||||
|
||||
[Access Card Players Unite](https://cardplayersunite.online/)
|
||||
7
docs/updates.md
Normal file
@@ -0,0 +1,7 @@
|
||||
correct the favicon
|
||||
|
||||
use an open source landing page for the home page when you access site
|
||||
|
||||
use the red admin template as the login when you login as a root user
|
||||
|
||||
use the open source listing page for the home page when you log in
|
||||
31
manage.py
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
|
||||
import sys
|
||||
|
||||
def main():
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
|
||||
|
||||
try:
|
||||
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
except ImportError as exc:
|
||||
|
||||
raise ImportError(
|
||||
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
|
||||
"forget to activate a virtual environment?"
|
||||
|
||||
) from exc
|
||||
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
main()
|
||||
13
player/urls.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import RegisterView
|
||||
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
path("register", RegisterView.as_view(), name="register"),
|
||||
|
||||
path("home", TemplateView.as_view(template_name="home.html"), name="home"),
|
||||
|
||||
]
|
||||
13
player/views.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
|
||||
from django.urls import reverse_lazy
|
||||
|
||||
from django.views import generic
|
||||
|
||||
class RegisterView(generic.CreateView):
|
||||
|
||||
form_class = UserCreationForm
|
||||
|
||||
success_url = reverse_lazy("login")
|
||||
|
||||
template_name = "registration/register.html"
|
||||
37
readme.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# adsfads
|
||||
|
||||
## view all tourney
|
||||
|
||||
## add new tourney
|
||||
|
||||
## admin home
|
||||
|
||||
## login
|
||||
|
||||
## how to create new user
|
||||
|
||||
## tournament operations
|
||||
|
||||
### create tournament
|
||||
|
||||
http://localhost:8888/tournament/create/
|
||||
|
||||
### view existing tournament
|
||||
|
||||
browser:
|
||||
|
||||
```
|
||||
http://localhost:8888/tournament/1/
|
||||
```
|
||||
|
||||
terminal:
|
||||
|
||||
```
|
||||
curl http://localhost:8888/tournament/1/
|
||||
```
|
||||
|
||||
response:
|
||||
|
||||
```
|
||||
{"id":1,"name":"323","description":"222","rental_price":222.0,"rented_user_id":222}
|
||||
```
|
||||
5
requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
djangorestframework
|
||||
django-cors-headers
|
||||
psycopg2-binary
|
||||
django-rest-auth-forked
|
||||
52
static/.recycle/custom.css
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
.footer {
|
||||
|
||||
width: 50%;
|
||||
|
||||
text-align: center !important;
|
||||
|
||||
margin: auto;
|
||||
|
||||
font-size: 10px;
|
||||
|
||||
}
|
||||
|
||||
input {
|
||||
|
||||
width: 50%;
|
||||
|
||||
text-align: center !important;
|
||||
|
||||
margin: auto;
|
||||
|
||||
}
|
||||
|
||||
p {
|
||||
|
||||
width: 50%;
|
||||
|
||||
}
|
||||
|
||||
table {
|
||||
|
||||
width: 80%;
|
||||
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
|
||||
height: 200px;
|
||||
|
||||
width: 200px;
|
||||
|
||||
}
|
||||
|
||||
div, h1, table, p, input, footer {
|
||||
|
||||
margin: auto;
|
||||
|
||||
padding: 10px;
|
||||
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
12
static/.recycle/sketchy.css
Normal file
12549
static/.recycle/vapor.css
Normal file
1
static/listing/features.js
Normal file
@@ -0,0 +1 @@
|
||||
alert("features");
|
||||
BIN
static/listing/imagery/10.jpg
Normal file
|
After Width: | Height: | Size: 496 KiB |
BIN
static/listing/imagery/11.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
static/listing/imagery/12.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
static/listing/imagery/15.jpg
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
static/listing/imagery/17.jpg
Normal file
|
After Width: | Height: | Size: 304 KiB |
BIN
static/listing/imagery/18.jpg
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
static/listing/imagery/19.jpg
Normal file
|
After Width: | Height: | Size: 455 KiB |
BIN
static/listing/imagery/2.jpeg
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
static/listing/imagery/3.jpg
Normal file
|
After Width: | Height: | Size: 633 KiB |
BIN
static/listing/imagery/4.jpg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
static/listing/imagery/5.jpg
Normal file
|
After Width: | Height: | Size: 338 KiB |
BIN
static/listing/imagery/6.jpg
Normal file
|
After Width: | Height: | Size: 373 KiB |
BIN
static/listing/imagery/7.jpg
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
static/listing/imagery/8.jpg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
static/listing/imagery/9.jpg
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
static/listing/imagery/f-2.jpg
Normal file
|
After Width: | Height: | Size: 414 KiB |
279
static/listing/listing.css
Normal file
@@ -0,0 +1,279 @@
|
||||
* {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Roboto", sans-serif;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
background-color: black;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
transition: 1s ease all;
|
||||
}
|
||||
|
||||
.navbar-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 50px;
|
||||
height: 100%;
|
||||
color: white;
|
||||
font-family: "Sen", sans-serif;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
|
||||
flex: 4;
|
||||
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-size: 30px;
|
||||
color: #4dbf00;
|
||||
}
|
||||
|
||||
.menu-container {
|
||||
flex: 6;
|
||||
}
|
||||
|
||||
.menu-list {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.menu-list-item {
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
.menu-list-item.active {
|
||||
font-weight: bold;
|
||||
}
|
||||
.profile-container {
|
||||
flex: 2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.profile-text-container {
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
.profile-picture {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.toggle {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
background-color: white;
|
||||
border-radius: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toggle-icon {
|
||||
color: goldenrod;
|
||||
}
|
||||
|
||||
.toggle-ball {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-color: black;
|
||||
position: absolute;
|
||||
right: 1px;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
transition: 1s ease all;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 50px;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 60px;
|
||||
transition: 1s ease all;
|
||||
}
|
||||
|
||||
.left-menu-icon {
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: #151515;
|
||||
min-height: calc(100vh - 50px);
|
||||
color: white;
|
||||
transition: 1s ease all;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
.featured-content {
|
||||
height: 50vh;
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
.featured-title {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.featured-desc {
|
||||
width: 500px;
|
||||
color: lightgray;
|
||||
margin: 30px 0;
|
||||
}
|
||||
|
||||
.featured-button {
|
||||
background-color: #4dbf00;
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-radius: 10px;
|
||||
border: none;
|
||||
outline: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.movie-list-container {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.movie-list-wrapper {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.movie-list {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 300px;
|
||||
transform: translateX(0);
|
||||
transition: all 1s ease-in-out;
|
||||
}
|
||||
|
||||
.movie-list-item {
|
||||
margin-right: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.movie-list-item:hover .movie-list-item-img {
|
||||
transform: scale(1.2);
|
||||
margin: 0 30px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.movie-list-item:hover .movie-list-item-title,
|
||||
.movie-list-item:hover .movie-list-item-desc,
|
||||
.movie-list-item:hover .movie-list-item-button {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.movie-list-item-img {
|
||||
transition: all 1s ease-in-out;
|
||||
width: 270px;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.movie-list-item-title {
|
||||
background-color: #333;
|
||||
padding: 0 10px;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
top: 10%;
|
||||
left: 50px;
|
||||
opacity: 0;
|
||||
transition: 1s all ease-in-out;
|
||||
}
|
||||
|
||||
.movie-list-item-desc {
|
||||
background-color: #333;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
position: absolute;
|
||||
top: 30%;
|
||||
left: 50px;
|
||||
width: 230px;
|
||||
opacity: 0;
|
||||
transition: 1s all ease-in-out;
|
||||
}
|
||||
|
||||
.movie-list-item-button {
|
||||
padding: 10px;
|
||||
background-color: #4dbf00;
|
||||
color: white;
|
||||
border-radius: 10px;
|
||||
outline: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
left: 50px;
|
||||
opacity: 0;
|
||||
transition: 1s all ease-in-out;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
font-size: 120px;
|
||||
position: absolute;
|
||||
top: 90px;
|
||||
right: 0;
|
||||
color: lightgray;
|
||||
opacity: 0.5;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.container.active {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.movie-list-title.active {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.navbar-container.active {
|
||||
background-color: white;
|
||||
|
||||
color: black;
|
||||
}
|
||||
|
||||
.sidebar.active{
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.left-menu-icon.active{
|
||||
color: black;
|
||||
}
|
||||
|
||||
.toggle.active{
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
.toggle-ball.active{
|
||||
background-color: white;
|
||||
transform: translateX(-20px);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 940px){
|
||||
.menu-container{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
35
static/listing/listing.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const arrows = document.querySelectorAll(".arrow");
|
||||
const movieLists = document.querySelectorAll(".movie-list");
|
||||
|
||||
arrows.forEach((arrow, i) => {
|
||||
const itemNumber = movieLists[i].querySelectorAll("img").length;
|
||||
let clickCounter = 0;
|
||||
arrow.addEventListener("click", () => {
|
||||
const ratio = Math.floor(window.innerWidth / 270);
|
||||
clickCounter++;
|
||||
if (itemNumber - (4 + clickCounter) + (4 - ratio) >= 0) {
|
||||
movieLists[i].style.transform = `translateX(${
|
||||
movieLists[i].computedStyleMap().get("transform")[0].x.value - 300
|
||||
}px)`;
|
||||
} else {
|
||||
movieLists[i].style.transform = "translateX(0)";
|
||||
clickCounter = 0;
|
||||
}
|
||||
});
|
||||
|
||||
console.log(Math.floor(window.innerWidth / 270));
|
||||
});
|
||||
|
||||
//TOGGLE
|
||||
|
||||
const ball = document.querySelector(".toggle-ball");
|
||||
const items = document.querySelectorAll(
|
||||
".container,.movie-list-title,.navbar-container,.sidebar,.left-menu-icon,.toggle"
|
||||
);
|
||||
|
||||
ball.addEventListener("click", () => {
|
||||
items.forEach((item) => {
|
||||
item.classList.toggle("active");
|
||||
});
|
||||
ball.classList.toggle("active");
|
||||
});
|
||||
24
templates/.recycle/Movies-Website-main/LICENSE
Normal file
@@ -0,0 +1,24 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <https://unlicense.org>
|
||||
19
templates/.recycle/Movies-Website-main/README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Movies-Website-Redesign
|
||||
Movies website Redesign with,
|
||||
|
||||
1. Responsive View,
|
||||
2. Sticky Menu,
|
||||
3. Awesome Menu,
|
||||
4. Sticky Side Bar,
|
||||
5. Hover Transition,
|
||||
6. Pop-Over Animation,
|
||||
7. Slider,
|
||||
8. Day & Night View.
|
||||
|
||||
Live Preview: https://mhmiyazi.github.io/Movies-Website/
|
||||
# Preview:
|
||||
# Dark Theme:
|
||||
<img src="img/fullView.png" alt="MH Miyazi's Design Full Preview">
|
||||
<h1>Light Theme:</h1>
|
||||
<img src="img/FullPreviewLightTheme.png" alt="MH Miyazi's Design Full Preview">
|
||||
|
||||
1
templates/.recycle/Movies-Website-main/_config.yml
Normal file
@@ -0,0 +1 @@
|
||||
theme: jekyll-theme-cayman
|
||||
136
templates/.restore/.cascadr/.trash/cascadr (copy 1).py
Executable file
@@ -0,0 +1,136 @@
|
||||
import re
|
||||
|
||||
import sys
|
||||
|
||||
fileToUpdate = sys.argv[1]
|
||||
|
||||
print(fileToUpdate)
|
||||
|
||||
nodeOpenName="22222"
|
||||
|
||||
nodeCloseName="44444"
|
||||
|
||||
def replaceCSSIncludes():
|
||||
|
||||
templateSectionBegin="<styling>"
|
||||
|
||||
templateSectionEnd="</styling>"
|
||||
|
||||
with open('templates/html-includes-styling.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName, substitutionContent, ddd, flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def replaceJavascriptIncludes():
|
||||
|
||||
templateSectionBegin="<!-- body / javascript / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- body / javascript / end -->"
|
||||
|
||||
with open('templates/body-javascript-includes.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def updateSideBarDesktop():
|
||||
|
||||
templateSectionBegin="<sidebar.desktop>"
|
||||
|
||||
templateSectionEnd="</sidebar.desktop>"
|
||||
|
||||
with open('templates/navigation-sidebar-desktop.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def updateSideBarMobile():
|
||||
|
||||
templateSectionBegin="<sidebar.mobile>"
|
||||
|
||||
templateSectionEnd="</sidebar.mobile>"
|
||||
|
||||
with open('templates/navigation-sidebar-mobile.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
###################################################################
|
||||
##
|
||||
## driver
|
||||
##
|
||||
###################################################################
|
||||
|
||||
##replaceCSSIncludes()
|
||||
|
||||
replaceJavascriptIncludes()
|
||||
|
||||
##updateSideBarDesktop()
|
||||
|
||||
##updateSideBarMobile()
|
||||
13
templates/.restore/.cascadr/cascadr.bash
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
sourceDirectory="../"
|
||||
|
||||
appName="cascadr.py"
|
||||
|
||||
##
|
||||
|
||||
echo "##"
|
||||
echo "## start cascadr template work"
|
||||
echo "##"
|
||||
|
||||
find $sourceDirectory -iname "*.html" -exec python3 $appName {} \;
|
||||
194
templates/.restore/.cascadr/cascadr.py
Normal file
@@ -0,0 +1,194 @@
|
||||
import re
|
||||
|
||||
import sys
|
||||
|
||||
fileToUpdate = sys.argv[1]
|
||||
|
||||
print(fileToUpdate)
|
||||
|
||||
nodeOpenName="22222"
|
||||
|
||||
nodeCloseName="44444"
|
||||
|
||||
def cascadeStylingIncludes():
|
||||
|
||||
templateSectionBegin="<!-- head / css / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- head / css / end -->"
|
||||
|
||||
with open('templates/head.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def cascadeJavascriptIncludes():
|
||||
|
||||
templateSectionBegin="<!-- body / javascript / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- body / javascript / end -->"
|
||||
|
||||
with open('templates/body-javascript-includes.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def cascadeFooterContent():
|
||||
|
||||
templateSectionBegin="<!-- body / footer / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- body / footer / end -->"
|
||||
|
||||
with open('templates/body-footer-content.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def cascadeTopNavigation():
|
||||
|
||||
templateSectionBegin="<!-- Navbar -->"
|
||||
|
||||
templateSectionEnd=" <!-- /.navbar -->"
|
||||
|
||||
with open('templates/navigation-top-menu.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def cascadeSideNavigation():
|
||||
|
||||
templateSectionBegin="<!-- navigation / side / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- navigation / side / end -->"
|
||||
|
||||
with open('templates/navigation-side-menu.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
def cascadeFlyoutContent():
|
||||
|
||||
templateSectionBegin="<!-- body / flyout / begin -->"
|
||||
|
||||
templateSectionEnd="<!-- body / flyout / end -->"
|
||||
|
||||
with open('templates/body-flyout-content.template') as templateFile:
|
||||
|
||||
substitutionContent = templateFile.read()
|
||||
|
||||
with open(fileToUpdate) as targetSubstitutionFile:
|
||||
s = targetSubstitutionFile.read()
|
||||
|
||||
ddd=s
|
||||
|
||||
ddd=re.sub(templateSectionBegin, templateSectionBegin+nodeOpenName, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(templateSectionEnd, nodeCloseName+templateSectionEnd, ddd, flags=re.DOTALL)
|
||||
|
||||
ddd=re.sub(nodeOpenName+".*"+nodeCloseName,substitutionContent,ddd,flags=re.DOTALL)
|
||||
|
||||
f = open(fileToUpdate, "w")
|
||||
|
||||
f.write(ddd)
|
||||
|
||||
f.close()
|
||||
|
||||
###################################################################
|
||||
##
|
||||
## driver
|
||||
##
|
||||
###################################################################
|
||||
|
||||
cascadeStylingIncludes()
|
||||
|
||||
##cascadeJavascriptIncludes()
|
||||
|
||||
##cascadeFooterContent()
|
||||
|
||||
##cascadeTopNavigation()
|
||||
|
||||
##cascadeSideNavigation()
|
||||
|
||||
##cascadeFlyoutContent()
|
||||
##updateSideBarDesktop()
|
||||
|
||||
##updateSideBarMobile()
|
||||
@@ -0,0 +1,278 @@
|
||||
<!-- Desktop sidebar -->
|
||||
<aside
|
||||
class="z-20 hidden w-64 overflow-y-auto bg-white dark:bg-gray-800 md:block flex-shrink-0"
|
||||
>
|
||||
<div class="py-4 text-gray-500 dark:text-gray-400">
|
||||
<a
|
||||
class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
Windmill
|
||||
</a>
|
||||
<ul class="mt-6">
|
||||
<li class="relative px-6 py-3">
|
||||
<span
|
||||
class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg"
|
||||
aria-hidden="true"
|
||||
></span>
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100"
|
||||
href="index.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="forms.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Forms</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="cards.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Cards</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="charts.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"
|
||||
></path>
|
||||
<path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path>
|
||||
</svg>
|
||||
<span class="ml-4">Charts</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="buttons.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Buttons</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="modals.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Modals</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<nav.pages>
|
||||
|
||||
<li class="relative px-6 py-3">
|
||||
<button
|
||||
class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
@click="togglePagesMenu"
|
||||
aria-haspopup="true"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<span class="inline-flex items-center">
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
<span class="ml-4">Tournaments</span>
|
||||
</span>
|
||||
<svg
|
||||
class="w-4 h-4"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
</button>
|
||||
<template x-if="isPagesMenuOpen">
|
||||
<ul
|
||||
x-transition:enter="transition-all ease-in-out duration-300"
|
||||
x-transition:enter-start="opacity-25 max-h-0"
|
||||
x-transition:enter-end="opacity-100 max-h-xl"
|
||||
x-transition:leave="transition-all ease-in-out duration-300"
|
||||
x-transition:leave-start="opacity-100 max-h-xl"
|
||||
x-transition:leave-end="opacity-0 max-h-0"
|
||||
class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900"
|
||||
aria-label="submenu"
|
||||
>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/login.html">Tournament Dashboard</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/create-account.html">
|
||||
Tournament Manager
|
||||
</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/forgot-password.html">
|
||||
Add New Tournament
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</template>
|
||||
</li>
|
||||
|
||||
|
||||
</nav.pages>
|
||||
|
||||
<nav.tables>
|
||||
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="tables.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path>
|
||||
</svg>
|
||||
<span class="ml-4">Tables</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav.tables>
|
||||
|
||||
|
||||
</ul>
|
||||
<div class="px-6 my-6">
|
||||
<button
|
||||
class="flex items-center justify-between w-full px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"
|
||||
>
|
||||
Create account
|
||||
<span class="ml-2" aria-hidden="true">+</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
@@ -0,0 +1,538 @@
|
||||
<!-- Mobile sidebar -->
|
||||
<!-- Backdrop -->
|
||||
<div
|
||||
x-show="isSideMenuOpen"
|
||||
x-transition:enter="transition ease-in-out duration-150"
|
||||
x-transition:enter-start="opacity-0"
|
||||
x-transition:enter-end="opacity-100"
|
||||
x-transition:leave="transition ease-in-out duration-150"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0"
|
||||
class="fixed inset-0 z-10 flex items-end bg-black bg-opacity-50 sm:items-center sm:justify-center"
|
||||
></div>
|
||||
<aside
|
||||
class="fixed inset-y-0 z-20 flex-shrink-0 w-64 mt-16 overflow-y-auto bg-white dark:bg-gray-800 md:hidden"
|
||||
x-show="isSideMenuOpen"
|
||||
x-transition:enter="transition ease-in-out duration-150"
|
||||
x-transition:enter-start="opacity-0 transform -translate-x-20"
|
||||
x-transition:enter-end="opacity-100"
|
||||
x-transition:leave="transition ease-in-out duration-150"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0 transform -translate-x-20"
|
||||
@click.away="closeSideMenu"
|
||||
@keydown.escape="closeSideMenu"
|
||||
>
|
||||
<div class="py-4 text-gray-500 dark:text-gray-400">
|
||||
<a
|
||||
class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
Windmill
|
||||
</a>
|
||||
<ul class="mt-6">
|
||||
<li class="relative px-6 py-3">
|
||||
<span
|
||||
class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg"
|
||||
aria-hidden="true"
|
||||
></span>
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100"
|
||||
href="index.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="forms.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Forms</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="cards.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Cards</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="charts.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"
|
||||
></path>
|
||||
<path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path>
|
||||
</svg>
|
||||
<span class="ml-4">Charts</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="buttons.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Buttons</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="modals.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Modals</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<a
|
||||
class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
href="tables.html"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path>
|
||||
</svg>
|
||||
<span class="ml-4">Tables</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="relative px-6 py-3">
|
||||
<button
|
||||
class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
@click="togglePagesMenu"
|
||||
aria-haspopup="true"
|
||||
>
|
||||
<span class="inline-flex items-center">
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"
|
||||
></path>
|
||||
</svg>
|
||||
<span class="ml-4">Pages</span>
|
||||
</span>
|
||||
<svg
|
||||
class="w-4 h-4"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
</button>
|
||||
<template x-if="isPagesMenuOpen">
|
||||
<ul
|
||||
x-transition:enter="transition-all ease-in-out duration-300"
|
||||
x-transition:enter-start="opacity-25 max-h-0"
|
||||
x-transition:enter-end="opacity-100 max-h-xl"
|
||||
x-transition:leave="transition-all ease-in-out duration-300"
|
||||
x-transition:leave-start="opacity-100 max-h-xl"
|
||||
x-transition:leave-end="opacity-0 max-h-0"
|
||||
class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900"
|
||||
aria-label="submenu"
|
||||
>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/login.html">Login</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/create-account.html">
|
||||
Create account
|
||||
</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/forgot-password.html">
|
||||
Forgot password
|
||||
</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/404.html">404</a>
|
||||
</li>
|
||||
<li
|
||||
class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"
|
||||
>
|
||||
<a class="w-full" href="pages/blank.html">Blank</a>
|
||||
</li>
|
||||
</ul>
|
||||
</template>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="px-6 my-6">
|
||||
<button
|
||||
class="flex items-center justify-between px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"
|
||||
>
|
||||
Create account
|
||||
<span class="ml-2" aria-hidden="true">+</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<div class="flex flex-col flex-1 w-full">
|
||||
<header class="z-10 py-4 bg-white shadow-md dark:bg-gray-800">
|
||||
<div
|
||||
class="container flex items-center justify-between h-full px-6 mx-auto text-purple-600 dark:text-purple-300"
|
||||
>
|
||||
<!-- Mobile hamburger -->
|
||||
<button
|
||||
class="p-1 mr-5 -ml-1 rounded-md md:hidden focus:outline-none focus:shadow-outline-purple"
|
||||
@click="toggleSideMenu"
|
||||
aria-label="Menu"
|
||||
>
|
||||
<svg
|
||||
class="w-6 h-6"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
</button>
|
||||
<!-- Search input -->
|
||||
<div class="flex justify-center flex-1 lg:mr-32">
|
||||
<div
|
||||
class="relative w-full max-w-xl mr-6 focus-within:text-purple-500"
|
||||
>
|
||||
<div class="absolute inset-y-0 flex items-center pl-2">
|
||||
<svg
|
||||
class="w-4 h-4"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
</div>
|
||||
<input
|
||||
class="w-full pl-8 pr-2 text-sm text-gray-700 placeholder-gray-600 bg-gray-100 border-0 rounded-md dark:placeholder-gray-500 dark:focus:shadow-outline-gray dark:focus:placeholder-gray-600 dark:bg-gray-700 dark:text-gray-200 focus:placeholder-gray-500 focus:bg-white focus:border-purple-300 focus:outline-none focus:shadow-outline-purple form-input"
|
||||
type="text"
|
||||
placeholder="Search for projects"
|
||||
aria-label="Search"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="flex items-center flex-shrink-0 space-x-6">
|
||||
<!-- Theme toggler -->
|
||||
<li class="flex">
|
||||
<button
|
||||
class="rounded-md focus:outline-none focus:shadow-outline-purple"
|
||||
@click="toggleTheme"
|
||||
aria-label="Toggle color mode"
|
||||
>
|
||||
<template x-if="!dark">
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"
|
||||
></path>
|
||||
</svg>
|
||||
</template>
|
||||
<template x-if="dark">
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
</template>
|
||||
</button>
|
||||
</li>
|
||||
<!-- Notifications menu -->
|
||||
<li class="relative">
|
||||
<button
|
||||
class="relative align-middle rounded-md focus:outline-none focus:shadow-outline-purple"
|
||||
@click="toggleNotificationsMenu"
|
||||
@keydown.escape="closeNotificationsMenu"
|
||||
aria-label="Notifications"
|
||||
aria-haspopup="true"
|
||||
>
|
||||
<svg
|
||||
class="w-5 h-5"
|
||||
aria-hidden="true"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
d="M10 2a6 6 0 00-6 6v3.586l-.707.707A1 1 0 004 14h12a1 1 0 00.707-1.707L16 11.586V8a6 6 0 00-6-6zM10 18a3 3 0 01-3-3h6a3 3 0 01-3 3z"
|
||||
></path>
|
||||
</svg>
|
||||
<!-- Notification badge -->
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="absolute top-0 right-0 inline-block w-3 h-3 transform translate-x-1 -translate-y-1 bg-red-600 border-2 border-white rounded-full dark:border-gray-800"
|
||||
></span>
|
||||
</button>
|
||||
<template x-if="isNotificationsMenuOpen">
|
||||
<ul
|
||||
x-transition:leave="transition ease-in duration-150"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0"
|
||||
@click.away="closeNotificationsMenu"
|
||||
@keydown.escape="closeNotificationsMenu"
|
||||
class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:text-gray-300 dark:border-gray-700 dark:bg-gray-700"
|
||||
>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<span>Messages</span>
|
||||
<span
|
||||
class="inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-red-600 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-600"
|
||||
>
|
||||
13
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<span>Sales</span>
|
||||
<span
|
||||
class="inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-red-600 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-600"
|
||||
>
|
||||
2
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<span>Alerts</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</template>
|
||||
</li>
|
||||
<!-- Profile menu -->
|
||||
<li class="relative">
|
||||
<button
|
||||
class="align-middle rounded-full focus:shadow-outline-purple focus:outline-none"
|
||||
@click="toggleProfileMenu"
|
||||
@keydown.escape="closeProfileMenu"
|
||||
aria-label="Account"
|
||||
aria-haspopup="true"
|
||||
>
|
||||
<img
|
||||
class="object-cover w-8 h-8 rounded-full"
|
||||
src="https://images.unsplash.com/photo-1502378735452-bc7d86632805?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=aa3a807e1bbdfd4364d1f449eaa96d82"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</button>
|
||||
<template x-if="isProfileMenuOpen">
|
||||
<ul
|
||||
x-transition:leave="transition ease-in duration-150"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0"
|
||||
@click.away="closeProfileMenu"
|
||||
@keydown.escape="closeProfileMenu"
|
||||
class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:border-gray-700 dark:text-gray-300 dark:bg-gray-700"
|
||||
aria-label="submenu"
|
||||
>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<svg
|
||||
class="w-4 h-4 mr-3"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
||||
></path>
|
||||
</svg>
|
||||
<span>Profile</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<svg
|
||||
class="w-4 h-4 mr-3"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"
|
||||
></path>
|
||||
<path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
<span>Settings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="flex">
|
||||
<a
|
||||
class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200"
|
||||
href="#"
|
||||
>
|
||||
<svg
|
||||
class="w-4 h-4 mr-3"
|
||||
aria-hidden="true"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1"
|
||||
></path>
|
||||
</svg>
|
||||
<span>Log out</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</template>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
16
templates/.restore/.cascadr/templates/.trash/body-flyout-content.template
Executable file
@@ -0,0 +1,16 @@
|
||||
|
||||
<aside class="control-sidebar control-sidebar-dark">
|
||||
|
||||
<h4>Current Project</h4>
|
||||
|
||||
<div id="projectBannerArea" class="btn-group-vertical col-12">
|
||||
|
||||
<button id="projectBanner" disabled type="button" class="btn btn-lg btn-success">--</button>
|
||||
|
||||
</div>
|
||||
|
||||
<h4>Select Project</h4>
|
||||
|
||||
<div id="projectSwitcherArea" class="btn-group-vertical col-12"></div>
|
||||
|
||||
</aside>
|
||||
15
templates/.restore/.cascadr/templates/.trash/body-footer-content.template
Executable file
@@ -0,0 +1,15 @@
|
||||
<footer class="main-footer">
|
||||
|
||||
<div class="float-right d-none d-sm-block">
|
||||
|
||||
</div>
|
||||
|
||||
<strong>
|
||||
|
||||
Made with ❤ by the
|
||||
|
||||
<a href="https://softwareshinobi.digital" target="softwareshinobi">Software Shinobi</a>.
|
||||
|
||||
</strong>
|
||||
|
||||
</footer>
|
||||
@@ -0,0 +1,17 @@
|
||||
<!-- custom stuff -->
|
||||
|
||||
<script src="/scripting/config.js"></script>
|
||||
|
||||
<script src="/plugins/jquery/jquery.min.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<script src="/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script src="/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
|
||||
|
||||
<script src="/dist/js/adminlte.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js "></script>
|
||||
|
||||
<script src="/project/scripting/flyout.js"></script>
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
|
||||
|
||||
<link rel="stylesheet" href="./assets/css/tailwind.output.css" />
|
||||
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css" />
|
||||
188
templates/.restore/.cascadr/templates/.trash/navigation-side-menu.template
Executable file
@@ -0,0 +1,188 @@
|
||||
<!-- Main Sidebar Container -->
|
||||
|
||||
<aside class="main-sidebar sidebar-darkrrr-primary elevation-4">
|
||||
|
||||
<!-- Brand Logo -->
|
||||
|
||||
<a href="/index.html" class="brand-link">
|
||||
|
||||
<img src="https://github.com/softwareshinobi/assets.softwareshinobi.digital/blob/production/imagery/valorantdigital/valorant.png?raw=true" alt="" class="brand-image img-circle elevation-3" style="opacity: .8">
|
||||
|
||||
<span class="brand-text font-weight-light">
|
||||
|
||||
Workspace
|
||||
|
||||
</span>
|
||||
|
||||
</a>
|
||||
|
||||
<!-- Sidebar -->
|
||||
|
||||
<div class="sidebar">
|
||||
|
||||
<!-- Sidebar user (optional) -->
|
||||
|
||||
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
|
||||
|
||||
<div class="image">
|
||||
|
||||
<img src="https://avatars.githubusercontent.com/u/45909594?v=4" class="img-circle elevation-2" alt="Software Shinobi">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
|
||||
<a href="#" class="d-block">
|
||||
|
||||
software shinobi
|
||||
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- SidebarSearch Form -->
|
||||
<div styles="visibility:hidden" class="form-inline">
|
||||
<div class="input-group" data-widget="sidebar-search">
|
||||
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-sidebar">
|
||||
<i class="fas fa-search fa-fw"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar Menu -->
|
||||
|
||||
<nav class="mt-2">
|
||||
|
||||
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
|
||||
|
||||
<!-- Add icons to the links using the .nav-icon class
|
||||
with font-awesome or any other icon font library -->
|
||||
|
||||
<li class="nav-header">Productivity</li>
|
||||
|
||||
|
||||
|
||||
<!--home links -->
|
||||
<li class="nav-item">
|
||||
|
||||
<a class="nav-link">
|
||||
<i class="nav-icon fas fa-table"></i>
|
||||
<p>
|
||||
|
||||
home
|
||||
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="/home/links.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>link portal</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<!--productivity links -->
|
||||
<li class="nav-item menu-open">
|
||||
|
||||
<a class="nav-link">
|
||||
<i class="nav-icon fas fa-columns"></i>
|
||||
<p>
|
||||
|
||||
projects
|
||||
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
|
||||
|
||||
<ul class="nav nav-treeview">
|
||||
|
||||
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="/project/list.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>project list</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="/project/kanban.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>kanban board</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="/project/calendar.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>calendar</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="/project/create.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>create project</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="/story/create.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>create story</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!--dev links -->
|
||||
<li class="nav-item">
|
||||
|
||||
<a class="nav-link">
|
||||
<i class="nav-icon fas fa-table"></i>
|
||||
<p>
|
||||
|
||||
.development
|
||||
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="/story/list.html" class="nav-link">
|
||||
<i class="far fa-circle nav-icon"></i>
|
||||
<p>all stories</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<!-- /.sidebar-menu -->
|
||||
</div>
|
||||
<!-- /.sidebar -->
|
||||
</aside>
|
||||
68
templates/.restore/.cascadr/templates/.trash/navigation-top-menu.template
Executable file
@@ -0,0 +1,68 @@
|
||||
<nav class="main-header navbar navbar-expand navbar-fpink navbar-daddrk">
|
||||
|
||||
<!-- Left navbar links -->
|
||||
|
||||
<ul class="navbar-nav">
|
||||
|
||||
<li class="nav-item">
|
||||
|
||||
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/home/links.html" class="nav-link">Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/project/list.html" class="nav-link">Projects</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/project/kanban.html" class="nav-link">Kanban</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/project/calendar.html" class="nav-link">Calendar</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/project/create.html" class="nav-link">Create Project</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
|
||||
<a href="/story/create.html" class="nav-link">Create Story</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<!-- Right navbar links -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-widget="fullscreen" href="#" role="button">
|
||||
<i class="fas fa-expand-arrows-alt"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
|
||||
<i class="fas fa-th-large"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
4
templates/.restore/.cascadr/templates/head.template
Executable file
@@ -0,0 +1,4 @@
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
40
templates/.restore/.cascadr/templates/sidebar.template
Executable file
@@ -0,0 +1,40 @@
|
||||
<nav class="navbar navbar-expand-lg bg-primary" data-bs-theme="dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">Navbar</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarColor01">
|
||||
<ul class="navbar-nav me-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="#">Home
|
||||
<span class="visually-hidden">(current)</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#">Features</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#">Pricing</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#">About</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="#">Action</a>
|
||||
<a class="dropdown-item" href="#">Another action</a>
|
||||
<a class="dropdown-item" href="#">Something else here</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#">Separated link</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<form class="d-flex">
|
||||
<input class="form-control me-sm-2" type="search" placeholder="Search">
|
||||
<button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
85
templates/.restore/.clean/index.html
Normal file
@@ -0,0 +1,85 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Home / Card Players Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Home </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/bike-shop-concept-with-bicycles.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Welcome to Robert's Bike Rental. We have bikes of all sizes and accessories for you and your loved ones. Explore the local neighborhood in style & comfort on our bikes.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
90
templates/.restore/.trash/about.html
Normal file
@@ -0,0 +1,90 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
About / Robert's Bike Rentals
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'css/custom.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Robert's Bike Rentals > About </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/close-up-bicycle-bell.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Rental bikes and fun for the entire family. Our bike rental store features multiple bikes that can be rented and reserved for your next cycle adventure.
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
Click the link below to reserve your bike with us.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
|
||||
198
templates/.restore/.trash/accessories.html
Normal file
@@ -0,0 +1,198 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Bike Accessories / Robert's Bike Rentals
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'css/custom.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Robert's Bike Rentals > Bike Accessories </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/cover.jpg' %}" alt="My image">
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Keep your rental in good condition with our custom line of products to bring with you on your bike adventure. Browse our collection of bike accessories to maintain and repair your bike.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
|
||||
<table id="table" class="center products">
|
||||
|
||||
<thead>
|
||||
|
||||
<th></th> <th>Name</th>
|
||||
<th>Description</th>
|
||||
<th>Price</th>
|
||||
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
|
||||
<img class="thumbnail" src="https://www.bike-discount.de/media/image/2c/5b/25/Feedback-Sports-Pro-Mechanic-Reparaturstander-FA003475003-1_800x800.jpg">
|
||||
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
||||
Aluminum Bike Stand
|
||||
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
||||
Our sturdy and reliable bike stand securely holds your bike in place, allowing you to make critical repairs with ease. Its aluminum construction ensures durability while remaining lightweight, making it a perfect choice for both professionals and hobbyists.
|
||||
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
||||
€339.99
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td><img class="thumbnail" src="https://www.bike-discount.de/media/image/71/1f/64/Topeak-JoeBlow-Booster-TJB-BST3-1_300x300.jpg"></td>
|
||||
|
||||
<td>
|
||||
|
||||
Hydraulic Pump
|
||||
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
||||
Level up your biking experience with our revolutionary Hydraulic Bike Pump. Say goodbye to sore arms and endless pumping! Our innovative pump utilizes hydraulic technology to effortlessly fill your bike tires with air.
|
||||
|
||||
</td>
|
||||
|
||||
<td>€39.99 </td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td><img class="thumbnail" src="https://www.bike-discount.de/media/image/95/da/80/Stans-NoTubes_Tire-Sealant-Reifendichtmittel_800x800.jpg"></td>
|
||||
|
||||
<td>
|
||||
|
||||
Bike Gear Lubricant
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td>
|
||||
|
||||
on't let rusty gears slow you down or ruin your biking experience. Our specially formulated lubricant is designed to keep your bike gears in top-notch shape, ensuring smooth and effortless gear changes every time you hit the road.
|
||||
|
||||
</td>
|
||||
|
||||
<td>€19.99</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td><img class="thumbnail" src="https://www.bike-discount.de/media/image/a0/f6/d8/Schwalbe_Tubeless-Felgenband_887019_300x300.jpg"></td>
|
||||
|
||||
<td>
|
||||
|
||||
Bike Repair Tape
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td>
|
||||
|
||||
the ultimate solution for quick and hassle-free bike repairs. Whether you're on a leisurely ride or in the middle of an epic adventure, this special emergency tape will have you back on track in no time.
|
||||
|
||||
</td>
|
||||
|
||||
<td>€19.99</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
173
templates/.restore/.trash/manage.html
Normal file
@@ -0,0 +1,173 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Manage Rental Bikes / Robert's Bike Rentals
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'css/custom.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h1>
|
||||
|
||||
Robert's Bike Rentals > Manage Rental Bikes <i>[admin]</i>
|
||||
|
||||
</h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/close-up-bicycle-gears.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Use this page to view our fleet of rental bikes. You can use this page to return bikes that have been rented by customers.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<table class="center">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
<th>Description</th>
|
||||
<th>Rental Price</th>
|
||||
|
||||
<th>Rental User ID</th>
|
||||
|
||||
<th>Actions</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
|
||||
{% if status_message %}
|
||||
|
||||
<h4>
|
||||
|
||||
{{ status_message }}
|
||||
|
||||
</h4>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if latest_question_list %}
|
||||
|
||||
{% for question in latest_question_list %}
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class=""> {{ question.name }} </td>
|
||||
<td class=""> {{ question.description }} </td>
|
||||
<td class=""> € {{ question.rental_price }} </td>
|
||||
<td class=""> {{ question.rented_user_id }} </td>
|
||||
|
||||
{% if question.rented_user_id != 0 %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/return/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-primary">
|
||||
|
||||
Return bike: {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% else %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<button type="button" class="btn btn-dark">
|
||||
|
||||
Not currently rented by a customer.
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% else %}
|
||||
|
||||
<h2>No bikes are available.</h2>
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
183
templates/.restore/.trash/reserve.html
Normal file
@@ -0,0 +1,183 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Reserve Bike / Robert's Bike Rentals
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'css/custom.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h1> Robert's Bike Rentals > Reserve Bike </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/bicycles-workshop.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Use this page to view our rental bikes. You can see which bikes are already reserved and which bikes are available for rent.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<table id="rent-payment-table" class="center products">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
<th>Description</th>
|
||||
<th>Rental Price</th>
|
||||
<!-- <th>Rental User ID</th>
|
||||
-->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
|
||||
{% if status_message %}
|
||||
|
||||
<h4>
|
||||
|
||||
{{ status_message }}
|
||||
|
||||
</h4>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if latest_question_list %}
|
||||
|
||||
{% for question in latest_question_list %}
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class=""> {{ question.name }} </td>
|
||||
<td class=""> {{ question.description }} </td>
|
||||
<td class=""> € {{ question.rental_price }} </td>
|
||||
|
||||
{% if question.rented_user_id == user.pk %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/return/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-secondary">
|
||||
|
||||
Return {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% elif question.rented_user_id == 0 %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/reserve/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-primary">
|
||||
|
||||
Reserve {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% else %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<button type="button" class="disabled">
|
||||
|
||||
Not Available
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% else %}
|
||||
|
||||
<h6 class="notification">No bikes are available for rent.</h6>
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
BIN
templates/.restore/Movies-Website-main.zip
Normal file
53
templates/.restore/admin.html
Normal file
@@ -0,0 +1,53 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Home / Card Players Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Home </h1>
|
||||
|
||||
this is the admin page.
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
21
templates/.restore/cascadr.bash
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
##
|
||||
|
||||
##
|
||||
|
||||
reset
|
||||
|
||||
clear
|
||||
|
||||
##
|
||||
|
||||
set -e
|
||||
|
||||
set -x
|
||||
|
||||
##
|
||||
|
||||
cd .cascadr
|
||||
|
||||
bash cascadr.bash
|
||||
53
templates/.restore/home.html
Normal file
@@ -0,0 +1,53 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
home / card players unite
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Home </h1>
|
||||
|
||||
this is home.html
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
53
templates/.restore/landing.html
Normal file
@@ -0,0 +1,53 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
landing / card players unite
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Home </h1>
|
||||
|
||||
this is landing.html
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
187
templates/.restore/player.html
Normal file
@@ -0,0 +1,187 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Manage Players / Card Players Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h1> Robert's Bike Rentals > Reserve Bike </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/bicycles-workshop.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Use this page to view our rental bikes. You can see which bikes are already reserved and which bikes are available for rent.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<table id="rent-payment-table" class="center products">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
<th>Description</th>
|
||||
<th>Rental Price</th>
|
||||
<!-- <th>Rental User ID</th>
|
||||
-->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
|
||||
{% if status_message %}
|
||||
|
||||
<h4>
|
||||
|
||||
{{ status_message }}
|
||||
|
||||
</h4>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if latest_question_list %}
|
||||
|
||||
{% for question in latest_question_list %}
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class=""> {{ question.name }} </td>
|
||||
<td class=""> {{ question.description }} </td>
|
||||
<td class=""> € {{ question.rental_price }} </td>
|
||||
|
||||
{% if question.rented_user_id == user.pk %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/return/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-secondary">
|
||||
|
||||
Return {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% elif question.rented_user_id == 0 %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/reserve/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-primary">
|
||||
|
||||
Reserve {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% else %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<button type="button" class="disabled">
|
||||
|
||||
Not Available
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% else %}
|
||||
|
||||
<h6 class="notification">No bikes are available for rent.</h6>
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
187
templates/.restore/team.html
Normal file
@@ -0,0 +1,187 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Manage Teams / Card Players Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h1> Robert's Bike Rentals > Reserve Bike </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/bicycles-workshop.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Use this page to view our rental bikes. You can see which bikes are already reserved and which bikes are available for rent.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<table id="rent-payment-table" class="center products">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
<th>Description</th>
|
||||
<th>Rental Price</th>
|
||||
<!-- <th>Rental User ID</th>
|
||||
-->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
|
||||
{% if status_message %}
|
||||
|
||||
<h4>
|
||||
|
||||
{{ status_message }}
|
||||
|
||||
</h4>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if latest_question_list %}
|
||||
|
||||
{% for question in latest_question_list %}
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class=""> {{ question.name }} </td>
|
||||
<td class=""> {{ question.description }} </td>
|
||||
<td class=""> € {{ question.rental_price }} </td>
|
||||
|
||||
{% if question.rented_user_id == user.pk %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/return/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-secondary">
|
||||
|
||||
Return {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% elif question.rented_user_id == 0 %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/reserve/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-primary">
|
||||
|
||||
Reserve {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% else %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<button type="button" class="disabled">
|
||||
|
||||
Not Available
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% else %}
|
||||
|
||||
<h6 class="notification">No bikes are available for rent.</h6>
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
177
templates/.restore/tournament.html
Normal file
@@ -0,0 +1,177 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Manage Tournaments / Card Players Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<!-- head / css / begin -->
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
<!-- head / css / end -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/about-roberts-rentals">
|
||||
<button type="button" class="btn btn-primary">
|
||||
About
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike-accessories">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Bike Accessories
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/bike/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Reserve Bike
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/accounts/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Log In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h1>
|
||||
|
||||
Robert's Bike Rentals > Manage Rental Bikes <i>[admin]</i>
|
||||
|
||||
</h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/close-up-bicycle-gears.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
|
||||
Use this page to view our fleet of rental bikes. You can use this page to return bikes that have been rented by customers.
|
||||
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<table class="center">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
<th>Description</th>
|
||||
<th>Rental Price</th>
|
||||
|
||||
<th>Rental User ID</th>
|
||||
|
||||
<th>Actions</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
|
||||
{% if status_message %}
|
||||
|
||||
<h4>
|
||||
|
||||
{{ status_message }}
|
||||
|
||||
</h4>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if latest_question_list %}
|
||||
|
||||
{% for question in latest_question_list %}
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class=""> {{ question.name }} </td>
|
||||
<td class=""> {{ question.description }} </td>
|
||||
<td class=""> € {{ question.rental_price }} </td>
|
||||
<td class=""> {{ question.rented_user_id }} </td>
|
||||
|
||||
{% if question.rented_user_id != 0 %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<a href="/bike/return/{{question.id}}/{{user.pk}}">
|
||||
|
||||
<button type="button" class="btn btn-primary">
|
||||
|
||||
Return bike: {{ question.name }}
|
||||
|
||||
</button>
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
|
||||
{% else %}
|
||||
|
||||
<td class="">
|
||||
|
||||
<button type="button" class="btn btn-dark">
|
||||
|
||||
Not currently rented by a customer.
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% else %}
|
||||
|
||||
<h2>No bikes are available.</h2>
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
213
templates/listing.html
Normal file
@@ -0,0 +1,213 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Card Players Unite / card tournaments and events near you
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static '/listing/listing.css' %}">
|
||||
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link rel="stylesheet" href="/listing/listing.css">
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&family=Sen:wght@400;700;800&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="navbar">
|
||||
|
||||
<div class="navbar-container">
|
||||
|
||||
<div class="logo-container">
|
||||
|
||||
<h1 class="logo">
|
||||
|
||||
Card Players Unite
|
||||
|
||||
</h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="menu-container">
|
||||
|
||||
<ul class="menu-list">
|
||||
|
||||
<li class="menu-list-item active">Home</li>
|
||||
|
||||
<li class="menu-list-item">Tournaments</li>
|
||||
|
||||
<li class="menu-list-item">Teams</li>
|
||||
|
||||
<li class="menu-list-item">Login</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="profile-container">
|
||||
|
||||
<div class="toggle">
|
||||
<i class="fas fa-moon toggle-icon"></i>
|
||||
<i class="fas fa-sun toggle-icon"></i>
|
||||
<div class="toggle-ball"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sidebar">
|
||||
|
||||
<i class="left-menu-icon fas fa-home"></i>
|
||||
|
||||
<i class="left-menu-icon fas fa-users"></i>
|
||||
|
||||
<i class="left-menu-icon fas fa-bookmark"></i>
|
||||
|
||||
<i class="left-menu-icon fas fa-tv"></i>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="content-container">
|
||||
|
||||
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/18.jpg' %}');">
|
||||
|
||||
<p class="featured-desc">
|
||||
|
||||
|
||||
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis minima voluptatibus incidunt. Accusamus, provident.
|
||||
|
||||
</p>
|
||||
|
||||
<button class="featured-button">
|
||||
|
||||
LEARN MORE
|
||||
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="movie-list-container">
|
||||
<h1 class="movie-list-title">Alll Tournaments</h1>
|
||||
<div class="movie-list-wrapper">
|
||||
<div class="movie-list">
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/8.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/9.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/10.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/11.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/12.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
<div class="movie-list-item">
|
||||
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
|
||||
<span class="movie-list-item-title">Her</span>
|
||||
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
|
||||
hic fugit similique accusantium.</p>
|
||||
<button class="movie-list-item-button">Watch</button>
|
||||
</div>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right arrow"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/7.jpg' %}');">
|
||||
|
||||
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
|
||||
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
|
||||
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
|
||||
minima voluptatibus incidunt. Accusamus, provident.</p>
|
||||
<button class="featured-button">111WATCH</button>
|
||||
</div>
|
||||
|
||||
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/6.jpg' %}');">
|
||||
|
||||
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
|
||||
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
|
||||
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
|
||||
minima voluptatibus incidunt. Accusamus, provident.</p>
|
||||
<button class="featured-button">WATCH</button>
|
||||
</div>
|
||||
|
||||
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/8.jpg' %}');">
|
||||
|
||||
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
|
||||
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
|
||||
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
|
||||
minima voluptatibus incidunt. Accusamus, provident.</p>
|
||||
<button class="featured-button">WATCH</button>
|
||||
</div>
|
||||
|
||||
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/9.jpg' %}');">
|
||||
|
||||
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
|
||||
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
|
||||
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
|
||||
minima voluptatibus incidunt. Accusamus, provident.</p>
|
||||
<button class="featured-button">WATCH</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<script src="{% static 'listing/listing.js' %}"></script>
|
||||
|
||||
<script src="{% static 'listing/features.js' %}"></script>
|
||||
|
||||
-->
|
||||
</body>
|
||||
|
||||
</html>
|
||||
95
templates/registration/login.html
Normal file
@@ -0,0 +1,95 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Sign In / Card Player's Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Log In </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/cyclist-sunny-day-bike-adventure-travel-photo.jpg' %}" height=480 width=640>
|
||||
|
||||
</div>
|
||||
|
||||
<form method="POST" action="">
|
||||
|
||||
{{ form.non_field_errors }}
|
||||
|
||||
{% csrf_token %}
|
||||
|
||||
<div>
|
||||
|
||||
<h3> user name </h3>
|
||||
|
||||
<input type="text" name="username">
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
<h3> password </h3>
|
||||
|
||||
<input type="password" name="password">
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
<br>
|
||||
|
||||
<button type="submit" class="btn btn-secondary"> Log In </button>
|
||||
|
||||
<p class="message">Don't have an account? <a href="/player/register">Create Account</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
Robert's Bike Rental created by <a href="https://github.com/gomsur">Robert</a>. <a href="https://www.freepik.com/free-photo/cyclist-sunny-day-bike-adventure-travel-photo_3972810.htm#query=bike&position=0&from_view=search&track=sph">Image by jcomp</a> on Freepik.
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
114
templates/registration/register.html
Normal file
@@ -0,0 +1,114 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<title>
|
||||
|
||||
Sign In / Card Player's Unite Admin
|
||||
|
||||
</title>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/custom.css' %}">
|
||||
|
||||
<link rel="stylesheet" href="{% static 'styling/sketchy.css' %}">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div>
|
||||
|
||||
<a href="/home">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Home
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/tournament/">
|
||||
<button type="button" class="btn btn-primary">
|
||||
Manage Tournaments
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<a href="/player/login/">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
Sign In
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h1> Card Players Unite Admin > Register </h1>
|
||||
|
||||
<div>
|
||||
|
||||
<img src="{% static 'img/woman-going-work-bicycle.jpg' %}" width=480 height=640>
|
||||
|
||||
</div>
|
||||
<div class="register-page">
|
||||
|
||||
<div class="form">
|
||||
|
||||
<form class="register-form" method="POST" action="">
|
||||
|
||||
{% csrf_token %}
|
||||
|
||||
{{ form.errors }}
|
||||
|
||||
<h4>{{form.username.label}}</h4>
|
||||
|
||||
<p>
|
||||
|
||||
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
|
||||
|
||||
</p>
|
||||
{{form.username}}
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<h4>{{form.password1.label}}</h4>
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
Your password can’t be too similar to your other personal information.
|
||||
<br>
|
||||
|
||||
<br> Your password must contain at least 8 characters.
|
||||
<br> Your password can’t be a commonly used password.
|
||||
<br> Your password can’t be entirely numeric. </p>
|
||||
|
||||
|
||||
|
||||
{{form.password1}}
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<h4>{{form.password2.label}}</h4>
|
||||
|
||||
<p> Password confirmation: Enter the same password as before, for verification. <p>
|
||||
{{form.password2}}
|
||||
|
||||
<br/><br/>
|
||||
<button type="submit" class="btn btn-secondary"> Create Account</button>
|
||||
|
||||
<p class="message">Already registered? <a href="/player/login/">Log In</a>.</p>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
3
tournament/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
5
tournament/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
class TournamentConfig(AppConfig):
|
||||
|
||||
name = 'tournament'
|
||||
24
tournament/migrations/0001_initial.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.0.1 on 2024-03-05 17:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Tournament',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=240, verbose_name='name')),
|
||||
('description', models.CharField(max_length=240, verbose_name='description')),
|
||||
('rental_price', models.FloatField(default=999.99, verbose_name='rental_price')),
|
||||
('rented_user_id', models.IntegerField(verbose_name='rented_user_id')),
|
||||
],
|
||||
),
|
||||
]
|
||||
0
tournament/migrations/__init__.py
Normal file
15
tournament/models.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django.db import models
|
||||
|
||||
class Tournament(models.Model):
|
||||
|
||||
name = models.CharField("name", max_length=240)
|
||||
|
||||
description = models.CharField("description", max_length=240)
|
||||
|
||||
rental_price = models.FloatField("rental_price", default=999.99)
|
||||
|
||||
rented_user_id = models.IntegerField("rented_user_id")
|
||||
|
||||
def __str__(self):
|
||||
|
||||
return self.name
|
||||
10
tournament/serializers.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Tournament
|
||||
|
||||
class TournamentSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
|
||||
model = Tournament
|
||||
|
||||
fields = ['id', 'name', 'description', 'rental_price', 'rented_user_id']
|
||||
3
tournament/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
50
tournament/urls.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from django.urls import include, path
|
||||
from .views import TournamentCreate, TournamentList, TournamentDetail
|
||||
from .views import TournamentUpdate, TournamentDelete
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
path('', views.custom, name="custom"),
|
||||
|
||||
path('<int:pk>/', TournamentDetail.as_view(), name='retrieve-bike'),
|
||||
|
||||
path("reserve/<int:pk>/<int:user_pk>", views.reserveTournament, name="reserve-bike"),
|
||||
|
||||
path("return/<int:pk>/<int:user_pk>", views.returnTournament, name="return-bike"),
|
||||
|
||||
path('create/', TournamentCreate.as_view(), name='create-bike'),
|
||||
|
||||
path('update/<int:pk>/', TournamentUpdate.as_view(), name='update-bike'),
|
||||
|
||||
path('delete/<int:pk>/', TournamentDelete.as_view(), name='delete-bike'),
|
||||
|
||||
]
|
||||
|
||||
## path("<int:question_id>/vote/", views.vote, name="vote"),
|
||||
|
||||
## path("about", views.about, name="about"),
|
||||
|
||||
## ex: /polls/5/
|
||||
|
||||
## path("<int:question_id>/", views.detail, name="detail"),
|
||||
|
||||
## ex: /polls/5/results/
|
||||
|
||||
## path("<int:question_id>/results/", views.results, name="results"),
|
||||
|
||||
## ex: /polls/5/vote/
|
||||
|
||||
## path("<int:question_id>/vote/", views.vote, name="vote"),
|
||||
|
||||
## path('', TournamentList.as_view()),
|
||||
|
||||
## path('', login_required(direct_to_template), {'template': 'registration/login.html'}),
|
||||
|
||||
## path("custom", views.custom, name="custom"),
|
||||
|
||||
## (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}),
|
||||
|
||||
## path('reserve/<int:pk>/<str:userid>/', TournamentUpdate.as_view(), name='reserve-bike')
|
||||
|
||||
## path('return/<int:pk>/', TournamentUpdate.as_view(), name='return-bike'),
|
||||
128
tournament/views.py
Normal file
@@ -0,0 +1,128 @@
|
||||
from django.shortcuts import render
|
||||
from .models import Tournament
|
||||
from rest_framework import generics
|
||||
from .serializers import TournamentSerializer
|
||||
from django.http import HttpResponse
|
||||
from django.template import loader
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
from django.shortcuts import redirect
|
||||
from django.shortcuts import reverse
|
||||
|
||||
## https://docs.djangoproject.com/en/4.2/intro/tutorial03/
|
||||
|
||||
class TournamentCreate(generics.CreateAPIView):
|
||||
|
||||
queryset = Tournament.objects.all(),
|
||||
|
||||
serializer_class = TournamentSerializer
|
||||
|
||||
class TournamentList(generics.ListAPIView):
|
||||
|
||||
queryset = Tournament.objects.all()
|
||||
|
||||
serializer_class = TournamentSerializer
|
||||
|
||||
class TournamentDetail(generics.RetrieveAPIView):
|
||||
|
||||
queryset = Tournament.objects.all()
|
||||
|
||||
serializer_class = TournamentSerializer
|
||||
|
||||
class TournamentUpdate(generics.RetrieveUpdateAPIView):
|
||||
|
||||
queryset = Tournament.objects.all()
|
||||
|
||||
serializer_class = TournamentSerializer
|
||||
|
||||
class TournamentDelete(generics.RetrieveDestroyAPIView):
|
||||
|
||||
queryset = Tournament.objects.all()
|
||||
|
||||
serializer_class = TournamentSerializer
|
||||
|
||||
def reserveTournament(request, pk, user_pk):
|
||||
|
||||
t = Tournament.objects.get(id=pk)
|
||||
|
||||
t.rented_user_id = user_pk # change field
|
||||
|
||||
t.save() # this will update only
|
||||
|
||||
##
|
||||
|
||||
latest_question_list = Tournament.objects.all()
|
||||
|
||||
context = {
|
||||
"latest_question_list": latest_question_list,
|
||||
"status_message": ("You have successfull reserved the %s." % t.name),
|
||||
}
|
||||
|
||||
if request.user.is_superuser:
|
||||
|
||||
template = loader.get_template("manage.html")
|
||||
|
||||
else:
|
||||
|
||||
template = loader.get_template("reserve.html")
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
latest_question_list = Tournament.objects.all()
|
||||
|
||||
template = loader.get_template("reserve.html")
|
||||
|
||||
context = {
|
||||
"latest_question_list": latest_question_list,
|
||||
"status_message": ("You have successfull reserved the %s." % t.name),
|
||||
}
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
def returnTournament(request, pk, user_pk):
|
||||
|
||||
t = Tournament.objects.get(id=pk)
|
||||
|
||||
t.rented_user_id = 0 # change field
|
||||
|
||||
t.save() # this will update only
|
||||
|
||||
##
|
||||
|
||||
latest_question_list = Tournament.objects.all()
|
||||
|
||||
context = {
|
||||
"latest_question_list": latest_question_list,
|
||||
"status_message": ("You have successfull returned the %s." % t.name),
|
||||
}
|
||||
|
||||
if request.user.is_superuser:
|
||||
|
||||
template = loader.get_template("manage.html")
|
||||
|
||||
else:
|
||||
|
||||
template = loader.get_template("reserve.html")
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
#@login_required
|
||||
def custom(request):
|
||||
print("custom custom custom")
|
||||
|
||||
latest_question_list = Tournament.objects.all()
|
||||
|
||||
context = {
|
||||
|
||||
"latest_question_list": latest_question_list,
|
||||
}
|
||||
|
||||
if request.user.is_superuser:
|
||||
|
||||
template = loader.get_template("admin.html")
|
||||
|
||||
else:
|
||||
|
||||
template = loader.get_template("tournament.html")
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||