Compare commits
8 Commits
d562d62f72
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| f76ab2c2b1 | |||
| 26244330b7 | |||
| 2d191db378 | |||
| e96ae59b7e | |||
| 8531c141d7 | |||
| df14d389b1 | |||
| e0a6b0a34c | |||
| efc0fe0f75 |
43
.gitea/workflows/docker.yml
Normal file
43
.gitea/workflows/docker.yml
Normal file
@ -0,0 +1,43 @@
|
||||
name: build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
- "master"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # all history for all branches and tags
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Login to registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: gitea.squi.fr
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
env:
|
||||
ACTIONS_RUNTIME_TOKEN: '' # See https://gitea.com/gitea/act_runner/issues/119
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
push: true
|
||||
tags: gitea.squi.fr/justine/sqtasks:latest
|
||||
|
||||
|
||||
41
src/app.py
41
src/app.py
@ -3,7 +3,7 @@
|
||||
from flask import Flask, render_template, Markup, request, redirect, url_for, make_response
|
||||
from classes import task
|
||||
from datetime import datetime, timedelta
|
||||
from funcs import dumptasks, gettasks, cattasks, deltask, findtask, addtask, mktaskdir, exporttasks, getthemes, switchstatus, todotasks, donetasks
|
||||
from funcs import *
|
||||
from random import choice
|
||||
|
||||
#!---------- sq_todo.py ----------
|
||||
@ -15,6 +15,7 @@ from random import choice
|
||||
app = Flask(__name__)
|
||||
mktaskdir()
|
||||
|
||||
|
||||
#Homepage, GET : getting the page. Maybe getting it with arguments generated by a button on the page, in which case we take it into account
|
||||
@app.route('/', methods=['GET'])
|
||||
def render():
|
||||
@ -31,13 +32,13 @@ def render():
|
||||
#...or using their preferred theme if do have one
|
||||
else:
|
||||
csslink = request.cookies.get('csslink')
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink))
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
|
||||
|
||||
#Delete has been clicked
|
||||
if request.args.get("delete") is not None:
|
||||
todelete = request.args.get("delete")
|
||||
deltask(int(todelete))
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink))
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
|
||||
|
||||
#Edit has been clicked
|
||||
elif request.args.get("edit") is not None:
|
||||
@ -70,9 +71,9 @@ def render():
|
||||
mytask = switchstatus(mytask)
|
||||
deltask(toswitch)
|
||||
addtask(mytask)
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink))
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
|
||||
else:
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink))
|
||||
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
|
||||
|
||||
return resp
|
||||
|
||||
@ -88,17 +89,22 @@ def homepage():
|
||||
try:
|
||||
tasktitle = request.form['title']
|
||||
tasktext = request.form['text']
|
||||
print("PING")
|
||||
priority = request.form['priority']
|
||||
|
||||
if "personnal" in request.form.keys():
|
||||
personnal = True
|
||||
else:
|
||||
personnal = False
|
||||
|
||||
print(f"Got new task with prio {priority}")
|
||||
|
||||
rightnow = int(time.time())
|
||||
newtask = task(createtime=rightnow, modtime=rightnow, title=tasktitle, text=tasktext, done=False, priority=int(priority))
|
||||
newtask = task(createtime=rightnow, modtime=rightnow, title=tasktitle, text=tasktext, done=False, priority=int(priority), personnal=personnal)
|
||||
addtask(newtask)
|
||||
except:
|
||||
except Exception as E:
|
||||
print(f"!!!!!!!!!! {E} - {request.form}")
|
||||
pass
|
||||
return render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink)
|
||||
return render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink)
|
||||
|
||||
|
||||
#Export mode
|
||||
@ -126,7 +132,13 @@ def edit():
|
||||
todoselected = "selected"
|
||||
doneselected = ""
|
||||
|
||||
return render_template("edit.html", tasknumber=tasknumber, ntitle=mytask.title, ntext=mytask.text, csslink = csslink, priority=mytask.priority, taskdonemark=mytask.donemark, todoselected=todoselected, doneselected=doneselected)
|
||||
#Is it personnal ?
|
||||
if mytask.personnal:
|
||||
pers_checked = "checked"
|
||||
else:
|
||||
pers_checked = ""
|
||||
|
||||
return render_template("edit.html", tasknumber=tasknumber, ntitle=mytask.title, ntext=mytask.text, csslink = csslink, priority=mytask.priority, taskdonemark=mytask.donemark, todoselected=todoselected, doneselected=doneselected, pers_checked=pers_checked)
|
||||
|
||||
#Handling post
|
||||
if request.method == "POST":
|
||||
@ -141,13 +153,18 @@ def edit():
|
||||
taskdone = True
|
||||
else:
|
||||
taskdone = False
|
||||
if "personnal" in request.form.keys():
|
||||
personnal = True
|
||||
else:
|
||||
personnal = False
|
||||
deltask(tasknumber)
|
||||
rightnow = int(time.time())
|
||||
newtask = task(createtime=tasknumber, modtime=rightnow, title=tasktitle, text=tasktext, done=taskdone, priority=taskpriority)
|
||||
newtask = task(createtime=tasknumber, modtime=rightnow, title=tasktitle, text=tasktext, done=taskdone, priority=taskpriority, personnal = personnal)
|
||||
addtask(newtask)
|
||||
return render_template("homepage.html", ntodo = todotasks(gettasks()), ndone = donetasks(gettasks()), csslink = csslink)
|
||||
return render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
convertemoji()
|
||||
app.run(host="0.0.0.0")
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
#CLASS
|
||||
class task:
|
||||
def __init__(self, createtime: int, modtime: int, title: str, text: str, done: bool, priority: int):
|
||||
def __init__(self, createtime: int, modtime: int, title: str, text: str, done: bool, priority: int, personnal: bool = False):
|
||||
"""
|
||||
createtime, modtime : epoch time of task writing / modfying
|
||||
title and text are str
|
||||
@ -17,11 +17,15 @@ class task:
|
||||
self.title = title
|
||||
self.text = text
|
||||
self.priority = priority
|
||||
self.personnal = personnal
|
||||
|
||||
if done:
|
||||
self.donemark = "✅"
|
||||
else:
|
||||
self.donemark = "😓"
|
||||
if personnal:
|
||||
self.donemark = "🔒"
|
||||
else:
|
||||
self.donemark = "⚠️"
|
||||
|
||||
def rendertime(self, pretimestamp: int):
|
||||
"""
|
||||
@ -40,15 +44,15 @@ class task:
|
||||
from flask import Markup, url_for
|
||||
|
||||
rendered = f"""
|
||||
<hr>
|
||||
<div class="taskcontainer">
|
||||
<div class="tasktitle">{self.donemark} {Markup.escape(self.title)}</div>
|
||||
<form action="." method="GET" name="{self.createtime}">
|
||||
<button type="submit" name="toswitch" value="{self.createtime}" class "taskbutton">Done/Todo</button>|<button type="submit" name="delete" value="{self.createtime}" class="taskbutton" onclick="return confirm('Really ?')">Delete</button>|<button type="submit" name="edit" value="{self.createtime}" class="taskbutton">Edit</button>
|
||||
<form action="." method="GET" name="{self.createtime}"><button type="submit" name="toswitch" value="{self.createtime}" class "taskbutton">Done/Todo</button>|<button type="submit" name="delete" value="{self.createtime}" class="taskbutton" onclick="return confirm('Really ?')">Delete</button>|<button type="submit" name="edit" value="{self.createtime}" class="taskbutton">Edit</button>
|
||||
</form>
|
||||
<div class="tasktime">Priority: {self.priority}</div>
|
||||
<div class="tasktime">Created : {self.rendertime(self.createtime)}
|
||||
<br>Modified : {self.rendertime(self.modtime)}</div><br>
|
||||
<div class="tasktext">{markdown.markdown(self.text, extensions=['fenced_code', 'codehilite', 'nl2br', 'smarty'])}</div><br>
|
||||
</div>
|
||||
"""
|
||||
return Markup(rendered)
|
||||
|
||||
|
||||
50
src/funcs.py
50
src/funcs.py
@ -87,6 +87,7 @@ def exporttasks():
|
||||
rawtext += f"#{task.title}\n"
|
||||
rawtext += f"* Created: {task.rendertime(task.createtime)}\n"
|
||||
rawtext += f"* Modified: {task.rendertime(task.modtime)}\n"
|
||||
rawtext += f"* Marked private: {task.personnal}\n"
|
||||
rawtext += f"{task.text}\n"
|
||||
rawtext += f"-----\n\n"
|
||||
|
||||
@ -122,7 +123,7 @@ def switchstatus(task):
|
||||
|
||||
rightnow = int(time.time())
|
||||
if task.donemark == "✅":
|
||||
task.donemark = "😓"
|
||||
task.donemark = "⚠️"
|
||||
else:
|
||||
task.donemark = "✅"
|
||||
|
||||
@ -132,12 +133,28 @@ def switchstatus(task):
|
||||
|
||||
def todotasks(tasklist):
|
||||
"""
|
||||
Sorts tasks in tasklist: Gives todotasks sorted by priority
|
||||
Sorts tasks in tasklist: Gives todotasks that are not private sorted by priority
|
||||
"""
|
||||
buffer = []
|
||||
finalstr = ""
|
||||
for task in tasklist:
|
||||
if task.donemark == "😓":
|
||||
if task.donemark == "⚠️":
|
||||
buffer.append(task)
|
||||
|
||||
tasks = sorted(buffer, key=lambda task: task.priority, reverse=True)
|
||||
for task in tasks:
|
||||
finalstr += task.flaskrender()
|
||||
|
||||
return finalstr
|
||||
|
||||
def personnaltasks(tasklist):
|
||||
"""
|
||||
Sorts tasks in tasklist: Gives todotasks that are private sorted by priority
|
||||
"""
|
||||
buffer = []
|
||||
finalstr = ""
|
||||
for task in tasklist:
|
||||
if task.donemark == "🔒":
|
||||
buffer.append(task)
|
||||
|
||||
tasks = sorted(buffer, key=lambda task: task.priority, reverse=True)
|
||||
@ -148,12 +165,12 @@ def todotasks(tasklist):
|
||||
|
||||
def donetasks(tasklist):
|
||||
"""
|
||||
Sorts tasks in tasklist: Gives done tasks sorted by modtime
|
||||
Sorts tasks in tasklist: Gives public done tasks sorted by modtime
|
||||
"""
|
||||
buffer = []
|
||||
finalstr = ""
|
||||
for task in tasklist:
|
||||
if task.donemark == "✅":
|
||||
if task.donemark == "✅" and not task.personnal:
|
||||
buffer.append(task)
|
||||
|
||||
tasks = sorted(buffer, key=lambda task: task.modtime, reverse=True)
|
||||
@ -162,6 +179,29 @@ def donetasks(tasklist):
|
||||
|
||||
return finalstr
|
||||
|
||||
def donetasks_pers(tasklist):
|
||||
"""
|
||||
Sorts tasks in tasklist: Gives public done tasks sorted by modtime
|
||||
"""
|
||||
buffer = []
|
||||
finalstr = ""
|
||||
for task in tasklist:
|
||||
if task.donemark == "✅" and task.personnal:
|
||||
buffer.append(task)
|
||||
|
||||
tasks = sorted(buffer, key=lambda task: task.modtime, reverse=True)
|
||||
for task in tasks:
|
||||
finalstr += task.flaskrender()
|
||||
|
||||
return finalstr
|
||||
|
||||
def convertemoji():
|
||||
tasks = gettasks()
|
||||
for task in tasks:
|
||||
if task.donemark not in ["⚠️", "✅", "🔒"]:
|
||||
task.donemark = "⚠️"
|
||||
dumptasks(tasks)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -73,6 +73,20 @@ a {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.globalcontainer {
|
||||
text-align: left;
|
||||
margin: auto;
|
||||
padding: 10px;
|
||||
width: 900px;
|
||||
}
|
||||
|
||||
.taskcontainer {
|
||||
border: 3px dotted;
|
||||
margin: 20px;
|
||||
padding: 10px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
background-color: #eee8d5;
|
||||
border: none;
|
||||
@ -292,3 +306,4 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
|
||||
.codehilite .vm { color: #268bd2 } /* Name.Variable.Magic */
|
||||
.codehilite .il { color: #2aa198 } /* Literal.Number.Integer.Long */
|
||||
|
||||
|
||||
@ -73,6 +73,20 @@ a {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.globalcontainer {
|
||||
text-align: left;
|
||||
margin: auto;
|
||||
padding: 10px;
|
||||
width: 900px;
|
||||
}
|
||||
|
||||
.taskcontainer {
|
||||
border: 3px dotted;
|
||||
margin: 20px;
|
||||
padding: 10px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
background-color: #22242e;
|
||||
border: none;
|
||||
@ -1,292 +0,0 @@
|
||||
@font-face {
|
||||
font-family: "Work Sans";
|
||||
src: url(WorkSans-Regular.ttf);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Work Sans";
|
||||
src: url(WorkSans-Bold.ttf);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Work Sans";
|
||||
src: url(WorkSans-Italic.ttf);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Work Sans";
|
||||
src: url(WorkSans-BoldItalic.ttf);
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
|
||||
html {
|
||||
background-color: #2e2e2e;
|
||||
font-family: 'Work Sans';
|
||||
color: #ffbc80;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #f76e11;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #f76e11;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #f76e11;
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: #f76e11;
|
||||
}
|
||||
|
||||
h5 {
|
||||
color: #f76e11;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #b958a5;
|
||||
padding: 1px 2px;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-size: 1em;
|
||||
font-style: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 3px dotted;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #b958a5;
|
||||
text-decoration: underline;
|
||||
font-style: normal;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
background-color: #eee8d5;
|
||||
border: none;
|
||||
color: #ff9f45;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
font-style: normal;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.topbutton {
|
||||
float: right;
|
||||
text-decoration: none;
|
||||
color: #ff9f45;
|
||||
}
|
||||
|
||||
.exportlink {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
.pagetitle {
|
||||
font-size: 3em;
|
||||
color: #fc4f4f;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.backlink {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.tasktitle {
|
||||
color: #f76e11;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.tasktime {
|
||||
color: #ff9f45;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/*
|
||||
.title {
|
||||
background: #44475a;
|
||||
color: #f76e11;
|
||||
font-weight: bold;
|
||||
font-size: 2em
|
||||
border-style: none;
|
||||
border-radius: 1px;
|
||||
outline: none;
|
||||
border-width: 1px;
|
||||
}
|
||||
*/
|
||||
|
||||
.text {
|
||||
width: 100%;
|
||||
background: #404040;
|
||||
color: #ff9f45;
|
||||
border-radius: 5px;
|
||||
border-style: none;
|
||||
outline: none;
|
||||
border-width: 1px;
|
||||
height: 40%;
|
||||
font-size: 15px;
|
||||
-webkit-box-shadow: 0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
background: #404040;
|
||||
color: #ff9f45;
|
||||
border-radius: 5px;
|
||||
border-style: none;
|
||||
outline: none;
|
||||
border-width: 1px;
|
||||
height: 25px;
|
||||
margin: 5px 0px 5px 0px;
|
||||
font-size: 15px;
|
||||
-webkit-box-shadow: 0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);
|
||||
}
|
||||
|
||||
.rawtext {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.priorityinput {
|
||||
background-color: #404040;
|
||||
color: #ff9f45;
|
||||
border-radius: 5px;
|
||||
border-style: none;
|
||||
border-width: 1px;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
label {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #ff9f45;
|
||||
padding: 1px 2px;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-size: 1em;
|
||||
font-style: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
/* Hide priority select arrows
|
||||
Chrome, Safari, Edge, Opera */
|
||||
input::-webkit-outer-spin-button,
|
||||
input::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Firefox */
|
||||
input[type=number] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
.donemarkselect {
|
||||
background-color: #404040;
|
||||
color: #ff9f45;
|
||||
border-radius: 5px;
|
||||
border-style: inset;
|
||||
border-color: #ff79c6;
|
||||
border-width: 1px;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.separator {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
pre { line-height: 125%; }
|
||||
td.linenos .normal { color: #5d6262; background-color: #353535; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos { color: #5d6262; background-color: #353535; padding-left: 5px; padding-right: 5px; }
|
||||
td.linenos .special { color: #7a8080; background-color: #353535; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos.special { color: #7a8080; background-color: #353535; padding-left: 5px; padding-right: 5px; }
|
||||
.codehilite .hll { background-color: #484848 }
|
||||
.codehilite { background: #3f3f3f; color: #dcdccc }
|
||||
.codehilite .c { color: #7f9f7f; font-style: italic } /* Comment */
|
||||
.codehilite .err { color: #e37170; font-weight: bold } /* Error */
|
||||
.codehilite .esc { color: #dcdccc } /* Escape */
|
||||
.codehilite .g { color: #ecbcbc; font-weight: bold } /* Generic */
|
||||
.codehilite .k { color: #efdcbc } /* Keyword */
|
||||
.codehilite .l { color: #9fafaf } /* Literal */
|
||||
.codehilite .n { color: #dcdccc } /* Name */
|
||||
.codehilite .o { color: #f0efd0 } /* Operator */
|
||||
.codehilite .x { color: #dcdccc } /* Other */
|
||||
.codehilite .p { color: #f0efd0 } /* Punctuation */
|
||||
.codehilite .ch { color: #7f9f7f; font-style: italic } /* Comment.Hashbang */
|
||||
.codehilite .cm { color: #7f9f7f; font-style: italic } /* Comment.Multiline */
|
||||
.codehilite .cp { color: #dfaf8f; font-weight: bold; font-style: italic } /* Comment.Preproc */
|
||||
.codehilite .cpf { color: #cc9393; font-style: italic } /* Comment.PreprocFile */
|
||||
.codehilite .c1 { color: #7f9f7f; font-style: italic } /* Comment.Single */
|
||||
.codehilite .cs { color: #dfdfdf; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.codehilite .gd { color: #c3bf9f; font-weight: bold; background-color: #313c36 } /* Generic.Deleted */
|
||||
.codehilite .ge { color: #ffffff; font-weight: bold } /* Generic.Emph */
|
||||
.codehilite .gr { color: #ecbcbc; font-weight: bold } /* Generic.Error */
|
||||
.codehilite .gh { color: #efefef; font-weight: bold } /* Generic.Heading */
|
||||
.codehilite .gi { color: #709080; font-weight: bold; background-color: #313c36 } /* Generic.Inserted */
|
||||
.codehilite .go { color: #5b605e; font-weight: bold } /* Generic.Output */
|
||||
.codehilite .gp { color: #ecbcbc; font-weight: bold } /* Generic.Prompt */
|
||||
.codehilite .gs { color: #ecbcbc; font-weight: bold } /* Generic.Strong */
|
||||
.codehilite .gu { color: #efefef; font-weight: bold } /* Generic.Subheading */
|
||||
.codehilite .gt { color: #80d4aa; font-weight: bold; background-color: #2f2f2f } /* Generic.Traceback */
|
||||
.codehilite .kc { color: #dca3a3 } /* Keyword.Constant */
|
||||
.codehilite .kd { color: #f0dfaf } /* Keyword.Declaration */
|
||||
.codehilite .kn { color: #f0dfaf } /* Keyword.Namespace */
|
||||
.codehilite .kp { color: #efdcbc } /* Keyword.Pseudo */
|
||||
.codehilite .kr { color: #efdcbc } /* Keyword.Reserved */
|
||||
.codehilite .kt { color: #dfdfbf; font-weight: bold } /* Keyword.Type */
|
||||
.codehilite .ld { color: #9fafaf } /* Literal.Date */
|
||||
.codehilite .m { color: #8cd0d3 } /* Literal.Number */
|
||||
.codehilite .s { color: #cc9393 } /* Literal.String */
|
||||
.codehilite .na { color: #efef8f } /* Name.Attribute */
|
||||
.codehilite .nb { color: #efef8f } /* Name.Builtin */
|
||||
.codehilite .nc { color: #efef8f } /* Name.Class */
|
||||
.codehilite .no { color: #dca3a3 } /* Name.Constant */
|
||||
.codehilite .nd { color: #dcdccc } /* Name.Decorator */
|
||||
.codehilite .ni { color: #cfbfaf } /* Name.Entity */
|
||||
.codehilite .ne { color: #c3bf9f; font-weight: bold } /* Name.Exception */
|
||||
.codehilite .nf { color: #efef8f } /* Name.Function */
|
||||
.codehilite .nl { color: #dcdccc } /* Name.Label */
|
||||
.codehilite .nn { color: #dcdccc } /* Name.Namespace */
|
||||
.codehilite .nx { color: #dcdccc } /* Name.Other */
|
||||
.codehilite .py { color: #dcdccc } /* Name.Property */
|
||||
.codehilite .nt { color: #e89393; font-weight: bold } /* Name.Tag */
|
||||
.codehilite .nv { color: #dcdccc } /* Name.Variable */
|
||||
.codehilite .ow { color: #f0efd0 } /* Operator.Word */
|
||||
.codehilite .w { color: #dcdccc } /* Text.Whitespace */
|
||||
.codehilite .mb { color: #8cd0d3 } /* Literal.Number.Bin */
|
||||
.codehilite .mf { color: #c0bed1 } /* Literal.Number.Float */
|
||||
.codehilite .mh { color: #8cd0d3 } /* Literal.Number.Hex */
|
||||
.codehilite .mi { color: #8cd0d3 } /* Literal.Number.Integer */
|
||||
.codehilite .mo { color: #8cd0d3 } /* Literal.Number.Oct */
|
||||
.codehilite .sa { color: #cc9393 } /* Literal.String.Affix */
|
||||
.codehilite .sb { color: #cc9393 } /* Literal.String.Backtick */
|
||||
.codehilite .sc { color: #cc9393 } /* Literal.String.Char */
|
||||
.codehilite .dl { color: #cc9393 } /* Literal.String.Delimiter */
|
||||
.codehilite .sd { color: #7f9f7f } /* Literal.String.Doc */
|
||||
.codehilite .s2 { color: #cc9393 } /* Literal.String.Double */
|
||||
.codehilite .se { color: #cc9393 } /* Literal.String.Escape */
|
||||
.codehilite .sh { color: #cc9393 } /* Literal.String.Heredoc */
|
||||
.codehilite .si { color: #dca3a3; font-weight: bold } /* Literal.String.Interpol */
|
||||
.codehilite .sx { color: #cc9393 } /* Literal.String.Other */
|
||||
.codehilite .sr { color: #cc9393 } /* Literal.String.Regex */
|
||||
.codehilite .s1 { color: #cc9393 } /* Literal.String.Single */
|
||||
.codehilite .ss { color: #cc9393 } /* Literal.String.Symbol */
|
||||
.codehilite .bp { color: #dcdccc } /* Name.Builtin.Pseudo */
|
||||
.codehilite .fm { color: #efef8f } /* Name.Function.Magic */
|
||||
.codehilite .vc { color: #dcdccc } /* Name.Variable.Class */
|
||||
.codehilite .vg { color: #dcdccc } /* Name.Variable.Global */
|
||||
.codehilite .vi { color: #dcdccc } /* Name.Variable.Instance */
|
||||
.codehilite .vm { color: #dcdccc } /* Name.Variable.Magic */
|
||||
.codehilite .il { color: #8cd0d3 } /* Literal.Number.Integer.Long */
|
||||
|
||||
@ -17,9 +17,11 @@
|
||||
<input type="hidden" name="tasknumber" value="{{ tasknumber }}" />
|
||||
<label for"donemark">Status: </label>
|
||||
<select name="donemark" id="donemark" class="donemarkselect">
|
||||
<option value="😓" {{ todoselected }}>😓</option>
|
||||
<option value="⚠️" {{ todoselected }}>⚠️</option>
|
||||
<option value="✅" {{ doneselected }}>✅</option>
|
||||
</select>
|
||||
<label for="personnal">Private</label>
|
||||
<input type="checkbox" name="personnal" id="personnal" {{ pers_checked }}><br>
|
||||
<button type="submit" name="submit">OK</button>
|
||||
<div class="tasktime">Note : you can drag the textbox to make it bigger.</div>
|
||||
</form>
|
||||
|
||||
@ -15,19 +15,38 @@
|
||||
<input type="text" name="title" class="title" placeholder="Title"><br>
|
||||
<textarea type="text" name="text" rows = "5" cols = "60*" class="text" placeholder="Text"></textarea><br>
|
||||
<label for="priority">Priority</label>
|
||||
<input type="number" name="priority" class="priorityinput" id="priority" min="0" max="10" value="5"><br>
|
||||
<input type="number" name="priority" class="priorityinput" id="priority" min="0" max="10" value="5">
|
||||
<label for="personnal">Private</label><input type="checkbox" name="personnal" id="personnal"><br>
|
||||
<button type="submit" name="submit">Post</button>
|
||||
<div class="tasktime">Note : you can drag the textbox to make it bigger. Scroll down to see your previous tasks.</div>
|
||||
</form>
|
||||
<br>
|
||||
<hr>
|
||||
<h2 class="separator">Todo</h2>
|
||||
<h2 class="separator">Private</h2>
|
||||
<hr>
|
||||
{{ ntodo }}
|
||||
<details>
|
||||
<summary>Click to expand.</summary>
|
||||
<p>
|
||||
{{ npers }}
|
||||
<hr>
|
||||
<h2 class="separator">Private and done</h2>
|
||||
<hr>
|
||||
{{ ndone_pers }}
|
||||
|
||||
</p>
|
||||
</details>
|
||||
<hr>
|
||||
<h2 class="separator">Work</h2>
|
||||
<hr>
|
||||
<div class="globalcontainer">
|
||||
{{ ntodo }}
|
||||
</div>
|
||||
<hr>
|
||||
<h2 class="separator">Done</h2>
|
||||
<hr>
|
||||
{{ ndone }}
|
||||
<div class="globalcontainer">
|
||||
{{ ndone }}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
<footer>
|
||||
|
||||
Reference in New Issue
Block a user