Compare commits

...

8 Commits

Author SHA1 Message Date
f76ab2c2b1 Added actions
All checks were successful
build / build (push) Successful in 1m25s
2023-07-17 17:37:46 +02:00
26244330b7 Bug on new private tasks solved 2022-11-22 11:26:54 +01:00
2d191db378 Private tasks ok 2022-11-18 17:35:26 +01:00
e96ae59b7e Private tasks ok 2022-11-18 17:33:11 +01:00
8531c141d7 Taches personnelles OK - partie Done à gérer 2022-11-18 17:24:56 +01:00
df14d389b1 Affiche colonnes avec break-word 2022-09-24 12:27:51 +02:00
e0a6b0a34c Affichage en colonne 2022-09-24 12:20:44 +02:00
efc0fe0f75 Chgt theme par defaut, chgt emoji 2022-09-24 11:37:24 +02:00
9 changed files with 182 additions and 320 deletions

View 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

View File

@ -3,7 +3,7 @@
from flask import Flask, render_template, Markup, request, redirect, url_for, make_response from flask import Flask, render_template, Markup, request, redirect, url_for, make_response
from classes import task from classes import task
from datetime import datetime, timedelta 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 from random import choice
#!---------- sq_todo.py ---------- #!---------- sq_todo.py ----------
@ -15,6 +15,7 @@ from random import choice
app = Flask(__name__) app = Flask(__name__)
mktaskdir() 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 #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']) @app.route('/', methods=['GET'])
def render(): def render():
@ -31,13 +32,13 @@ def render():
#...or using their preferred theme if do have one #...or using their preferred theme if do have one
else: else:
csslink = request.cookies.get('csslink') 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 #Delete has been clicked
if request.args.get("delete") is not None: if request.args.get("delete") is not None:
todelete = request.args.get("delete") todelete = request.args.get("delete")
deltask(int(todelete)) 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 #Edit has been clicked
elif request.args.get("edit") is not None: elif request.args.get("edit") is not None:
@ -70,9 +71,9 @@ def render():
mytask = switchstatus(mytask) mytask = switchstatus(mytask)
deltask(toswitch) deltask(toswitch)
addtask(mytask) 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: 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 return resp
@ -88,17 +89,22 @@ def homepage():
try: try:
tasktitle = request.form['title'] tasktitle = request.form['title']
tasktext = request.form['text'] tasktext = request.form['text']
print("PING")
priority = request.form['priority'] priority = request.form['priority']
if "personnal" in request.form.keys():
personnal = True
else:
personnal = False
print(f"Got new task with prio {priority}") print(f"Got new task with prio {priority}")
rightnow = int(time.time()) 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) addtask(newtask)
except: except Exception as E:
print(f"!!!!!!!!!! {E} - {request.form}")
pass 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 #Export mode
@ -126,7 +132,13 @@ def edit():
todoselected = "selected" todoselected = "selected"
doneselected = "" 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 #Handling post
if request.method == "POST": if request.method == "POST":
@ -141,13 +153,18 @@ def edit():
taskdone = True taskdone = True
else: else:
taskdone = False taskdone = False
if "personnal" in request.form.keys():
personnal = True
else:
personnal = False
deltask(tasknumber) deltask(tasknumber)
rightnow = int(time.time()) 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) 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__': if __name__ == '__main__':
convertemoji()
app.run(host="0.0.0.0") app.run(host="0.0.0.0")

View File

@ -7,7 +7,7 @@
#CLASS #CLASS
class task: 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 createtime, modtime : epoch time of task writing / modfying
title and text are str title and text are str
@ -17,11 +17,15 @@ class task:
self.title = title self.title = title
self.text = text self.text = text
self.priority = priority self.priority = priority
self.personnal = personnal
if done: if done:
self.donemark = "" self.donemark = ""
else: else:
self.donemark = "😓" if personnal:
self.donemark = "🔒"
else:
self.donemark = "⚠️"
def rendertime(self, pretimestamp: int): def rendertime(self, pretimestamp: int):
""" """
@ -40,15 +44,15 @@ class task:
from flask import Markup, url_for from flask import Markup, url_for
rendered = f""" rendered = f"""
<hr> <div class="taskcontainer">
<div class="tasktitle">{self.donemark} {Markup.escape(self.title)}</div> <div class="tasktitle">{self.donemark} {Markup.escape(self.title)}</div>
<form action="." method="GET" name="{self.createtime}"> <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>
<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> </form>
<div class="tasktime">Priority: {self.priority}</div> <div class="tasktime">Priority: {self.priority}</div>
<div class="tasktime">Created : {self.rendertime(self.createtime)} <div class="tasktime">Created : {self.rendertime(self.createtime)}
<br>Modified : {self.rendertime(self.modtime)}</div><br> <br>Modified : {self.rendertime(self.modtime)}</div><br>
<div class="tasktext">{markdown.markdown(self.text, extensions=['fenced_code', 'codehilite', 'nl2br', 'smarty'])}</div><br> <div class="tasktext">{markdown.markdown(self.text, extensions=['fenced_code', 'codehilite', 'nl2br', 'smarty'])}</div><br>
</div>
""" """
return Markup(rendered) return Markup(rendered)

View File

@ -87,6 +87,7 @@ def exporttasks():
rawtext += f"#{task.title}\n" rawtext += f"#{task.title}\n"
rawtext += f"* Created: {task.rendertime(task.createtime)}\n" rawtext += f"* Created: {task.rendertime(task.createtime)}\n"
rawtext += f"* Modified: {task.rendertime(task.modtime)}\n" rawtext += f"* Modified: {task.rendertime(task.modtime)}\n"
rawtext += f"* Marked private: {task.personnal}\n"
rawtext += f"{task.text}\n" rawtext += f"{task.text}\n"
rawtext += f"-----\n\n" rawtext += f"-----\n\n"
@ -122,7 +123,7 @@ def switchstatus(task):
rightnow = int(time.time()) rightnow = int(time.time())
if task.donemark == "": if task.donemark == "":
task.donemark = "😓" task.donemark = "⚠️"
else: else:
task.donemark = "" task.donemark = ""
@ -132,12 +133,28 @@ def switchstatus(task):
def todotasks(tasklist): 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 = [] buffer = []
finalstr = "" finalstr = ""
for task in tasklist: 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) buffer.append(task)
tasks = sorted(buffer, key=lambda task: task.priority, reverse=True) tasks = sorted(buffer, key=lambda task: task.priority, reverse=True)
@ -148,12 +165,12 @@ def todotasks(tasklist):
def donetasks(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 = [] buffer = []
finalstr = "" finalstr = ""
for task in tasklist: for task in tasklist:
if task.donemark == "": if task.donemark == "" and not task.personnal:
buffer.append(task) buffer.append(task)
tasks = sorted(buffer, key=lambda task: task.modtime, reverse=True) tasks = sorted(buffer, key=lambda task: task.modtime, reverse=True)
@ -162,6 +179,29 @@ def donetasks(tasklist):
return finalstr 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)

View File

@ -73,6 +73,20 @@ a {
font-size: 1em; 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 { .topbar {
background-color: #eee8d5; background-color: #eee8d5;
border: none; border: none;
@ -292,3 +306,4 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.codehilite .vm { color: #268bd2 } /* Name.Variable.Magic */ .codehilite .vm { color: #268bd2 } /* Name.Variable.Magic */
.codehilite .il { color: #2aa198 } /* Literal.Number.Integer.Long */ .codehilite .il { color: #2aa198 } /* Literal.Number.Integer.Long */

View File

@ -73,6 +73,20 @@ a {
font-size: 1em; 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 { .topbar {
background-color: #22242e; background-color: #22242e;
border: none; border: none;

View File

@ -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 */

View File

@ -17,9 +17,11 @@
<input type="hidden" name="tasknumber" value="{{ tasknumber }}" /> <input type="hidden" name="tasknumber" value="{{ tasknumber }}" />
<label for"donemark">Status: </label> <label for"donemark">Status: </label>
<select name="donemark" id="donemark" class="donemarkselect"> <select name="donemark" id="donemark" class="donemarkselect">
<option value="😓" {{ todoselected }}>😓</option> <option value="⚠️" {{ todoselected }}>⚠️</option>
<option value="✅" {{ doneselected }}></option> <option value="✅" {{ doneselected }}></option>
</select> </select>
<label for="personnal">Private</label>
<input type="checkbox" name="personnal" id="personnal" {{ pers_checked }}><br>
<button type="submit" name="submit">OK</button> <button type="submit" name="submit">OK</button>
<div class="tasktime">Note : you can drag the textbox to make it bigger.</div> <div class="tasktime">Note : you can drag the textbox to make it bigger.</div>
</form> </form>

View File

@ -15,19 +15,38 @@
<input type="text" name="title" class="title" placeholder="Title"><br> <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> <textarea type="text" name="text" rows = "5" cols = "60*" class="text" placeholder="Text"></textarea><br>
<label for="priority">Priority</label> <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> <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> <div class="tasktime">Note : you can drag the textbox to make it bigger. Scroll down to see your previous tasks.</div>
</form> </form>
<br> <br>
<hr> <hr>
<h2 class="separator">Todo</h2> <h2 class="separator">Private</h2>
<hr> <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> <hr>
<h2 class="separator">Done</h2> <h2 class="separator">Done</h2>
<hr> <hr>
{{ ndone }} <div class="globalcontainer">
{{ ndone }}
</div>
</body> </body>
<footer> <footer>