replace name of methods and funtions

This commit is contained in:
2026-05-21 22:27:23 +02:00
committed by kitoy
parent 7709f6127b
commit bf43a417c8
11 changed files with 118 additions and 140 deletions

View File

@@ -18,17 +18,17 @@ class MyBlocs:
mybloc['type'] = str(blocType)
return mybloc
def makeForm(bloc):
def make_form(bloc):
form = FormBloc()
return form
def imgForm():
def img_form():
return ImageForm()
def newImgForm():
def new_img_form():
return ImageUpload()
def listTypeBlocs(theme):
def list_type_blocs(theme):
typeBlocs = list()
folders = Path(PurePosixPath('./app').joinpath('templates', theme, 'blocs'))
for folder in folders.iterdir():

View File

@@ -26,7 +26,7 @@ class DataSite:
self.static_path = Path(PurePosixPath(self.user_folder.joinpath('public')))
self.static_path.mkdir(parents=True, exist_ok=True)
def loadFile(self):
def load_file(self):
if not self.filej.isfile():
raise FileNotFoundError(f"Le fichier ident.json n'existe pas : {self.filej}")
@@ -36,7 +36,7 @@ class DataSite:
def getBlocs(self, page: str):
def get_blocs(self, page: str):
if page != '':
page = Path(self.user_folder.joinpath(page, 'page.json'))
@@ -51,7 +51,7 @@ class DataSite:
return datas
def updateBloc(self, bloc, form, files=None):
def update_bloc(self, bloc, form, files=None):
print (form)
for field in form():
print(field)
@@ -68,7 +68,7 @@ class DataSite:
return bloc
def updateImg(self, image, form):
def update_img(self, image, form):
img = dict()
img['title'] = form.title.data
img['subtitle'] = form.subtitle.data
@@ -77,7 +77,7 @@ class DataSite:
img['file'] = image
return img
def addImg(self, image_uploaded):
def add_img(self, image_uploaded):
img = dict()
img['title'] = ""
@@ -89,7 +89,7 @@ class DataSite:
return img
def delImg(self, bloc, img):
def del_img(self, bloc, img):
if bloc['type'] == 'gallery':
img_file = Path(PurePosixPath(self.user_folder).joinpath('public', 'img', bloc[img]['file'] ))
@@ -107,12 +107,12 @@ class DataSite:
return bloc
def saveMenu(self, menu:dict):
def save_menu(self, menu:dict):
self.datas['menu'] = menu
self.filej.write_text(json.dumps(self.datas, indent=5))
def saveBlocs(self, page='', blocs=dict()):
def save_blocs(self, page='', blocs=dict()):
if page != '':
datas = dict()
datas['blocs'] = blocs
@@ -128,7 +128,10 @@ class DataSite:
self.filej.write_text(json.dumps(self.datas, indent=5))
def getPages(self):
def get_theme(self):
return self.datas['config']['theme']
def get_pages(self):
mypages = list()
folders = Path(self.user_folder)
for folder in folders.iterdir():
@@ -194,7 +197,8 @@ class DataSite:
userDir = Path(PurePosixPath(self.user_folder))
command = "lftp -u \"{}\",\"{}\" -p {} {} -e ' mirror -R public {}; bye;'".format(user,
command = "lftp -u \"{}\",\"{}\" -p {} {} -e ' mirror -R public {}; chmod -R o+rx ./; bye;'".format(user,
password,
serverPort,
serverAddress,
@@ -216,3 +220,6 @@ class DataSite:
if path.exists((self.static_path+'img/portfolio/thumbnails/'+file)):
remove(self.static_path+'img/portfolio/thumbnails/'+file)
self.trash.clear()

View File

@@ -21,7 +21,7 @@ csrf = CSRFProtect(app)
app.secret_key = 'your_secret_key'
app.config.from_pyfile('config.py')
THEMES_FOLDER = './templates/themes/'
THEMES_FOLDER = '/themes/'
USERS_FOLDER = app.config['USERS_FOLDER']
bcrypt = Bcrypt(app)
@@ -53,7 +53,7 @@ def login():
return resp
@app.route( '/logout/', methods=['GET'] )
@app.route( '/logout', methods=['GET'] )
@login_required
def logout():
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
@@ -68,10 +68,10 @@ def edit(page):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
db = DataSite(user, USERS_FOLDER)
mypages = db.getPages()
mypages = db.get_pages()
theme = db.datas['config']['theme']
menu = db.datas['menu']
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
return render_template('/edit.html.tpl',
blocEdit="",
@@ -87,7 +87,7 @@ def edit(page):
@app.route('/edit/images/<bloc>/<image>', methods=['GET', 'POST'], defaults={'page': ''})
@app.route('/<page>/edit/images/<bloc>/<image>', methods=['GET', 'POST'])
@login_required
def editPhoto(page, image, bloc):
def edit_photo(page, image, bloc):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
image = '%s' % escape(image)
@@ -96,12 +96,12 @@ def editPhoto(page, image, bloc):
db = DataSite(user, USERS_FOLDER)
theme = db.datas['config']['theme']
form = ImageForm()
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
if form.validate_on_submit():
if request.method == 'POST':
myblocs[bloc][image] = db.updateImg(image, form)
db.saveBlocs(page, myblocs)
myblocs[bloc][image] = db.update_img(image, form)
db.save_blocs(page, myblocs)
form = MyBlocs.makeForm(db.datas['blocs'][bloc])
if "hx-request" in request.headers:
return make_response(('Image modified', 200))
@@ -120,7 +120,7 @@ def drop_upload(page, bloc):
datas = dict()
file = request.files['file']
filename = secure_filename(file.filename)
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
ext = os.path.splitext(filename)[-1]
save_path = os.path.join(USERS_FOLDER, user, 'public', 'img' )
if ext not in EXT_IMG :
@@ -150,35 +150,35 @@ def drop_upload(page, bloc):
img.save(os.path.join(save_path, 'thumbnails', filename ) )
myblocs[bloc][filename] = db.addImg(filename)
db.saveBlocs(page, myblocs)
db.save_blocs(page, myblocs)
return make_response(('Chunk upload succesfull', 200))
@app.route('/edit/images/<bloc>/del/<image>', methods=['GET'], defaults={'page': ''})
@app.route('/<page>/edit/images/<bloc>/del/<image>', methods=['GET'])
@login_required
def delImage(page, bloc, image):
def del_image(page, bloc, image):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
db = DataSite(user, USERS_FOLDER)
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
myblocs[bloc] = db.delImg(myblocs[bloc], image)
db.saveBlocs(page, myblocs)
myblocs[bloc] = db.del_img(myblocs[bloc], image)
db.save_blocs(page, myblocs)
return make_response(('Image removed', 200))
@app.route('/imgs_list/<blocname>', methods=['GET'], defaults={'page': ''})
@app.route('/<page>/imgs_list/<blocname>', methods=['GET'])
@login_required
def imagesList(page, blocname):
def images_list(page, blocname):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
blocname = '%s' % escape(blocname)
db = DataSite(user, USERS_FOLDER)
theme = db.datas['config']['theme']
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
bloc = myblocs[blocname]
return render_template(THEMES_FOLDER+theme+'/blocs/edit/images_list.html',page=page,
@@ -187,29 +187,26 @@ def imagesList(page, blocname):
@app.route('/edit/<blocname>', methods=['GET', 'POST'], defaults={'page': ''})
@app.route('/<page>/edit/<blocname>', methods=['GET', 'POST'])
@login_required
def editBloc(page, blocname):
def edit_bloc(page, blocname):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
db = DataSite(user, USERS_FOLDER)
theme = db.datas['config']['theme']
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
bloc = myblocs[blocname]
form = MyBlocs.makeForm(bloc)
form = MyBlocs.make_form(bloc)
if request.method == 'POST':
datas=dict()
if form.validate_on_submit():
for field, value in request.form.items():
print (field)
if field != 'csrf_token' and field != 'image':
myblocs[blocname][field] = value
if 'image' in request.files.keys():
file = request.files['image']
print ('filename: '+ file.filename)
filename = secure_filename(file.filename)
bg_custom = 'bg_custom_'+bloc['name']+filename
print('bg_custom : '+ bg_custom)
file.save(os.path.join(USERS_FOLDER, user, 'public', 'img', bg_custom ))
if 'bg_img' in bloc.keys():
db.delImg(bloc, bloc['bg_img'])
@@ -217,7 +214,7 @@ def editBloc(page, blocname):
myblocs[blocname]['bg_img'] = bg_custom
db.saveBlocs(page, myblocs)
db.save_blocs(page, myblocs)
flash(u'Vos changements on été pris en compte et enregistré', 'success')
else:
print(form.errors)
@@ -251,13 +248,13 @@ def editBloc(page, blocname):
@app.route('/view/<bloc>', methods=['GET'], defaults={'page': ''})
@app.route('/<page>/view/<bloc>', methods=['GET'])
@login_required
def viewBloc(page, bloc):
def view_bloc(page, bloc):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
db = DataSite(user, USERS_FOLDER)
theme = db.datas['config']['theme']
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
bloc = myblocs[bloc]
return render_template(THEMES_FOLDER+theme+'/blocs/_'+bloc['type']+'.html',
@@ -266,13 +263,13 @@ def viewBloc(page, bloc):
@app.route('/addBloc', methods=['POST'], defaults={'page': ''})
@app.route('/<page>/addBloc', methods=['POST'])
@login_required
def addBloc(page):
def add_bloc(page):
user = '%s'% escape(session['username'])
page = '%s' % escape(page)
db = DataSite(user, USERS_FOLDER)
datas = dict()
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
blocName = '%s' % escape(request.form['blocName'])
blocType = request.form['blocType']
@@ -287,7 +284,7 @@ def addBloc(page):
else:
return make_response(('Invalid bloc Name', 500))
db.saveBlocs(page, myblocs)
db.save_blocs(page, myblocs)
if "hx-request" in request.headers:
return render_template('/admin/_blocs-list.html',
@@ -297,7 +294,7 @@ def addBloc(page):
@app.route('/addPage', methods=['POST'])
@login_required
def addPage():
def add_page():
user = '%s'% escape(session['username'])
db = DataSite(user, USERS_FOLDER)
@@ -317,12 +314,12 @@ def addPage():
return make_response(('Invalid type ', 500))
mypages = db.getPages()
mypages = db.get_pages()
return redirect(url_for('edit', page=pageName))
@app.route('/rmPage/<pageName>')
@login_required
def rmPage(pageName):
def rm_page(pageName):
pageName = '%s' % escape(pageName)
user = '%s'% escape(session['username'])
@@ -350,7 +347,7 @@ def sortblocs(page):
datas = dict()
myblocs = dict()
myblocs_orig = db.getBlocs(page)['blocs']
myblocs_orig = db.get_blocs(page)['blocs']
for bloc in request.form:
if bloc != 'csrf_token':
@@ -358,13 +355,13 @@ def sortblocs(page):
myblocs[bloc_name] = myblocs_orig[bloc_name]
flash (u'Les blocs ont été réagencés', 'succes');
db.saveBlocs(page, myblocs)
db.save_blocs(page, myblocs)
return redirect(url_for('edit'))
@app.route('/editmenu', methods=['POST'])
@login_required
def editMenu():
def edit_menu():
user = '%s'% escape(session['username'])
db = DataSite(user, USERS_FOLDER)
db.datas['menu']=dict()
@@ -381,7 +378,7 @@ def editMenu():
else:
db.datas['menu'][menu] = str(request.form[menu])
db.saveMenu(db.datas['menu'])
db.save_menu(db.datas['menu'])
flash (u'Le menu a bien été modifier', 'success');
return redirect(url_for('edit'))
@@ -401,17 +398,19 @@ def mythumbnails(filename):
@app.route('/favicon.ico', methods=['GET'])
@app.route('/favicon.ico/', methods=['GET'])
@login_required
def favicon():
return make_response(('Ok! ', 200))
@app.route('/publish', methods=['POST'])
@login_required
def publish():
user = '%s' % escape(session['username'])
db = DataSite(user, USERS_FOLDER)
listPages = db.getPages()
listPages = db.get_pages()
theme = db.datas['config']['theme']
menu = db.datas['menu']
test_alphanum = "^[A-Za-z0-9/_-]*$"
@@ -425,7 +424,7 @@ def publish():
for page in listPages:
myblocs = db.getBlocs(page)['blocs']
myblocs = db.get_blocs(page)['blocs']
htmlExport = render_template('/index.html.tpl',
config=db.datas['config'],
menu=menu,
@@ -435,7 +434,7 @@ def publish():
db.writeHTML(theme, page, htmlExport)
# Export index.html landing page
myblocs = db.getBlocs('')['blocs']
myblocs = db.get_blocs('')['blocs']
htmlExport = render_template('/index.html.tpl',
config=db.datas['config'],
menu=menu,
@@ -463,3 +462,5 @@ def publish():
return redirect(url_for('edit'))

View File

@@ -40,6 +40,14 @@
</button>
<a href="/logout">
<button class="btn btn-dark nav-brand"
type="button">
Se déconnecter
</button>
</a>
</div>
</nav>
@@ -162,3 +170,4 @@
</div>
</div>

View File

@@ -32,12 +32,15 @@
</div>
<hr />
</form>
<div class="newItemMenu" id="newItem">
<form class="form-container">
<h3>Nouvelle entrée</h3><br>
<label for="nom"><b>Nom</b></label>
<input type="text" placeholder="Nom" id="newEntry_name" required="">
<input type="text" placeholder="Nom" id="newEntry_name" required>
<br/>
<label> Cette entré est un sous menu </label>
<input type="checkbox" id="submenu" onclick="disableLink()" value="Cette entré est un sous-menu"><br>
@@ -45,14 +48,15 @@
<input type="text" placeholder="un lien ou nom d'un bloc" id="newEntry_link">
<br>
<button type="button" onclick="addEntry()" class="btn btn-outline-success">+</button>
</div>
</form>
</div>
<hr>
<button class="btn btn-success" type="submit" form="menuEdit"> Enregistrer </button>
</form>
@@ -120,71 +124,6 @@
</script>
<!-- Add entry to menu-->
<style>
.entry {
padding-bottom: 5px;
}
/* The popup form - hidden by default */
.form-popup {
display: none;
position: fixed;
top: 20%;
right: 50%;
opacity: 1;
background-color: white;
border: 3px solid #f1f1f1;
z-index: 9999;
}
/* Add styles to the form container */
.form-container {
max-width: 300px;
padding:0;
text-align:center;
}
/* Full-width input fields */
.form-container input[type=text], .form-container{
width: 100%;
padding: 15px;
margin: 5px 0 22px 0;
border: none;
background: #fff;
z-index: 9999;
}
/* When the inputs get focus, do something */
.form-container input[type=text]:focus, .form-container input[type=password]:focus {
background-color: #ddd;
outline: 1px;
}
/* Set a style for the submit/login button */
.form-container .btn {
background-color: #04AA6D;
color: white;
padding: 20px 20px;
border: none;
cursor: pointer;
text-align :center;
width: 40%;
opacity: 0.8;
}
/* Add a red background color to the cancel button */
.form-container .cancel {
background-color: red;
}
/* Add some hover effects to buttons */
.form-container .btn:hover, .open-button:hover {
opacity: 1;
}
</style>
<script>
function disableLink() {

View File

@@ -1,14 +1,36 @@
<div class="container text-center">
<form method='POST' action='/login'>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/static/css/monsiteperso.css">
<title>Login</title>
</head>
<body>
<div class="login-box">
<form action="/login" method="POST" class="form_main">
{{ form.csrf_token }}
<h3 class="heading"> Connexion Mon site perso </h3>
<div class="inputContainer">
<svg class="inputIcon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#2e2e2e" viewBox="0 0 16 16">
<path d="M13.106 7.222c0-2.967-2.249-5.032-5.482-5.032-3.35 0-5.646 2.318-5.646 5.702 0 3.493 2.235 5.708 5.762 5.708.862 0 1.689-.123 2.304-.335v-.862c-.43.199-1.354.328-2.29.328-2.926 0-4.813-1.88-4.813-4.798 0-2.844 1.921-4.881 4.594-4.881 2.735 0 4.608 1.688 4.608 4.156 0 1.682-.554 2.769-1.416 2.769-.492 0-.772-.28-.772-.76V5.206H8.923v.834h-.11c-.266-.595-.881-.964-1.6-.964-1.4 0-2.378 1.162-2.378 2.823 0 1.737.957 2.906 2.379 2.906.8 0 1.415-.39 1.709-1.087h.11c.081.67.703 1.148 1.503 1.148 1.572 0 2.57-1.415 2.57-3.643zm-7.177.704c0-1.197.54-1.907 1.456-1.907.93 0 1.524.738 1.524 1.907S8.308 9.84 7.371 9.84c-.895 0-1.442-.725-1.442-1.914z"></path>
</svg>
<h2 class="mb-4"> Entrez votre login et votre mot de passe : </h2>
{{ form.login(col=5, class="form-control form-control-lg text-center" ) }}
{{ form.passwd(col=5, class="form-control form-control-lg text-center" ) }}
<br />
{{ form.submit() }}
</form>
{{ form.login(col=5, class="inputField" ) }}
</div>
<div class="inputContainer">
<svg class="inputIcon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#2e2e2e" viewBox="0 0 16 16">
<path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"></path>
</svg>
{{ form.passwd(class="inputField" ) }}
</div>
{{ form.submit() }}
<a class="forgotLink" href="#"> J'ai oublié mon mot de passe </a>
</form>
</div>
</body>
</html>

View File

@@ -1,18 +1,18 @@
<h3> Nom du bloc : {{ bloc.name }} </h3>
<div class="row mx-md-5">
<div class="class-edit row mx-md-5">
<div class="col-auto">
<label> Classes CSS </label>
{{ form.property(col=4,value=bloc.property,
class="form-control text-center") }}
</div>
<div class="col-auto">
<div class="color-bloc-background col-auto">
<label> Couleur de l'arrière plan </label>
{{ form.bg_color(col=4,
class="form-control form-control-color text-center",
value=bloc.bg_color) }}
</div>
<div class="col-auto">
<div class="color-bloc-foreground col-auto">
<label> Couleur du texte</label>
{{ form.fg_color(col=4,
class="form-control form-control-color text-center",

View File

@@ -2,7 +2,7 @@
<div class="container my-auto">
<div class="row" style="mix-blend-mode: hard-light;background-color: rgba(0,0,0,0.3);">
<div class="col-lg-10 mx-auto">
<h1 class="text-uppercase">
<h1 class="">
<strong> {{ bloc.title }} </strong>
</h1>
<hr>

View File

@@ -2,7 +2,7 @@
<form id="uploader" methods="POST" class="dropzone dz-clickable">
{{ form.csrf_token }}
</form>
<div hx-get="{{ url_for('imagesList', page=page, blocname=bloc.name) }}" hx-trigger="load, every 7s">
<div hx-get="{{ url_for('images_list', page=page, blocname=bloc.name) }}" hx-trigger="load, every 7s">
</div>

View File

@@ -4,7 +4,7 @@
{{ form.csrf_token }}
<div class="row">
<div class="col-lg-2 mx-auto my-4 text-center">
<img class="img-fluid" src="/public/img/thumbnails/{{ image.file }}" alt="{{ image.description }}">
<img class="img-fluid" src="/img/thumbnails/{{ image.file }}" alt="{{ image.description }}">
</div>
<div class="col-lg-4 mx-auto my-4 text-center">
<h3> Titre </h3>
@@ -26,7 +26,7 @@
hx-swap="outerHTML"
hx-target="#editImageInfo"
hx-swap="delete"> Valider </button>
<button class="btn btn-danger mx-auto" hx-get="{{ url_for('delImage', page=page, bloc=bloc.name, image=image.file) }}"
<button class="btn btn-danger mx-auto" hx-get="{{ url_for('del_image', page=page, bloc=bloc.name, image=image.file) }}"
hx-swap="delete"
hx-target="#editImageInfo"> Supprimer l'image</button>
</div>

View File

@@ -5,7 +5,7 @@
{% if image.file %}
<div class="col-lg-4 col-sm-6 text-center">
<a class="portfolio-box">
<img class="img-fluid" src="/public/img/thumbnails/{{ image.file }}" alt="{{ image.description }}">
<img class="img-fluid" src="/img/thumbnails/{{ image.file }}" alt="{{ image.description }}">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">