diff --git a/verse/distribusiselector.py b/verse/distribusiselector.py index f4da28c..aef787b 100644 --- a/verse/distribusiselector.py +++ b/verse/distribusiselector.py @@ -1,6 +1,6 @@ import os import shutil -from flask import flash +from flask import flash, render_template from flask_login import current_user from sqlalchemy.exc import ( DataError, @@ -11,25 +11,70 @@ from sqlalchemy.exc import ( from usermodel import User from distribusimodel import Distribusis - +from distribusisinfo import DistribusisInfo from forms.selectorform import SelectorForm -from statuspengguna.helper import HasDistribusi +from forms.uploadform import UploadForm +from forms.distribusiform import DistribusiForm +from forms.themeform import ThemeForm +from forms.publicthemeform import PublicThemeForm + +# UserPengguna +from statuspengguna.helper import ( + IsZipUploaded, + CurrentDistribusi, + HasDistribusi, + IsDistribusiLive, + DistribusiLimitReached, +) + from app import db +def SelectorPage(): + uploadform = UploadForm() + selectorform = SelectorForm() + selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() + current_distribusi = CurrentDistribusi() + if selectorform.validate_on_submit(): + if selectorform.new.data: + SelectNewDistribusi() + if selectorform.delete.data: + selectorform = DeleteDistribusi(selectorform.distribusis.data) + selectorform.distribusis.choices = ( + DistribusisInfo.userdistribusinames() + ) + if selectorform.update.data: + SelectUpdateDistribusi(selectorform.distribusis.data) + current_distribusi = CurrentDistribusi() + uploadform = AutoFillInUploadForm(uploadform, current_distribusi) + + return RenderDistribusiTemplate( + selectorform, uploadform, current_distribusi + ) + + +def AutoFillInUploadForm(uploadform, current_distribusi): + distribusi = Distribusis.query.filter_by( + distribusiname=current_distribusi + ).first() + uploadform.sitename.data = distribusi.distribusiname + uploadform.sitename.render_kw = {"readonly": True} + uploadform.term.data = distribusi.term + uploadform.course.data = distribusi.course + uploadform.academicyear.data = distribusi.year + uploadform.tags.data = distribusi.tags + return uploadform + + def SelectNewDistribusi(): print("make a new distribusi") - selectorform = SelectorForm() SelectCurrentDistribusi("new") - return selectorform def SelectUpdateDistribusi(distribusiname): print(f"Update this distribusi {distribusiname}") - selectorform = SelectorForm() SelectCurrentDistribusi(distribusiname) - return selectorform def DeleteDistribusi(distribusiname): @@ -49,10 +94,11 @@ def DeleteDistribusi(distribusiname): "themes/userthemes", distribusi.distribusiname ) shutil.rmtree(cssfolder) - selectorform.delete.errors.append("Distribusi deleted!") + # SelectField error is list is a tuple?? why?? + # selectorform.distribusis.errors.append("Distribusi deleted!") except (InvalidRequestError, DataError, InterfaceError, DatabaseError): db.session.rollback() - selectorform.delete.errors.append("Unknown error occured!") + # selectorform.distribusis.errors.append("Unknown error occured!") flash("An error occured !", "danger") return selectorform @@ -84,3 +130,32 @@ def SelectorVisible(): if not has_distribusi: return False return True + + +def RenderDistribusiTemplate(selectorform, uploadform, current_distribusi): + distribusiform = DistribusiForm() + themeform = ThemeForm() + publicthemeform = PublicThemeForm() + publicthemeform.publicthemes.choices = DistribusisInfo.publicthemes() + files_uploaded = IsZipUploaded(current_distribusi) + distribusi_live = IsDistribusiLive(current_distribusi) + + # because the user has chosen to update his distribusi, we assume + # no selected css. + css_selected = False + selectorvisible = SelectorVisible() + limit_reached = DistribusiLimitReached() + template = render_template( + "distribusi.html", + uploadform=uploadform, + distribusiform=distribusiform, + themeform=themeform, + publicthemeform=publicthemeform, + selectorform=selectorform, + files_uploaded=files_uploaded, + distribusi_live=distribusi_live, + css_selected=css_selected, + selectorvisible=selectorvisible, + limit_reached=limit_reached, + ) + return template diff --git a/verse/start.py b/verse/start.py index e692e13..9d64d29 100644 --- a/verse/start.py +++ b/verse/start.py @@ -18,7 +18,6 @@ from flask_wtf.csrf import CSRFError from app import create_app, login_manager from usermodel import User -from distribusimodel import Distribusis # Forms! from forms.uploadform import UploadForm @@ -27,20 +26,13 @@ from forms.themeform import ThemeForm from forms.publicthemeform import PublicThemeForm from forms.selectorform import SelectorForm -# CRUD! -from distribusiselector import ( - SelectNewDistribusi, - SelectUpdateDistribusi, - DeleteDistribusi, - SelectorVisible, -) - # Interface! +from adminpage import AdminPage from editor import Editor from themeselector import ThemeSelector -from upload import UploadNewDistribusi, UploadUpdatedFiles -from adminpage import AdminPage from distribusiworkflow import DistribusiWorkflow +from distribusiselector import SelectorPage, SelectorVisible +from upload import UploadNewDistribusi, UploadUpdatedFiles # UserPengguna from statuspengguna.helper import ( @@ -153,59 +145,7 @@ def editor(): @APP.route("/selector", methods=["GET", "POST"]) @login_required def selector(): - selectorform = SelectorForm() - uploadform = UploadForm() - distribusiform = DistribusiForm() - themeform = ThemeForm() - publicthemeform = PublicThemeForm() - publicthemeform.publicthemes.choices = DistribusisInfo.publicthemes() - selectorform = SelectorForm() - selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() - current_distribusi = CurrentDistribusi() - if selectorform.validate_on_submit(): - if selectorform.new.data: - selectorform = SelectNewDistribusi() - if selectorform.delete.data: - selectorform = DeleteDistribusi(selectorform.distribusis.data) - selectorform.distribusis.choices = ( - DistribusisInfo.userdistribusinames() - ) - if selectorform.update.data: - selectorform = SelectUpdateDistribusi( - selectorform.distribusis.data - ) - current_distribusi = CurrentDistribusi() - distribusi = Distribusis.query.filter_by( - distribusiname=current_distribusi - ).first() - uploadform.sitename.data = distribusi.distribusiname - uploadform.sitename.render_kw = {"readonly": True} - uploadform.term.data = distribusi.term - uploadform.course.data = distribusi.course - uploadform.academicyear.data = distribusi.year - uploadform.tags.data = distribusi.tags - - files_uploaded = IsZipUploaded(current_distribusi) - distribusi_live = IsDistribusiLive(current_distribusi) - # because the user has chosen to update his distribusi, we assume - # no selected css. - css_selected = False - selectorvisible = SelectorVisible() - limit_reached = DistribusiLimitReached() - template = render_template( - "distribusi.html", - uploadform=uploadform, - distribusiform=distribusiform, - themeform=themeform, - publicthemeform=publicthemeform, - selectorform=selectorform, - files_uploaded=files_uploaded, - distribusi_live=distribusi_live, - css_selected=css_selected, - selectorvisible=selectorvisible, - limit_reached=limit_reached, - ) - return template + return SelectorPage() @APP.route("/stash/") diff --git a/verse/static/css/style.css b/verse/static/css/style.css index 4f00c98..69dd6d6 100644 --- a/verse/static/css/style.css +++ b/verse/static/css/style.css @@ -77,20 +77,16 @@ div#buttons{ align-items: center; } -div#buttons .logout input{ - border: none; - background: #E0B0FF; - text-decoration: none; - margin: 1px; -} - div#buttons .distribusi input{ border: none; background: #fff600; text-decoration: none; margin: 0.2em; } +div#buttons .distribusi input:hover{ + background: #ffbf00; +} fieldset.required { border: none; } @@ -167,6 +163,7 @@ a:active { #fancyboi::before { content: "$ "; } + @media (prefers-reduced-motion: no-preference) { @keyframes flash { 50% { opacity: 0; } diff --git a/verse/templates/distribusi.html b/verse/templates/distribusi.html index 33eef63..104faed 100644 --- a/verse/templates/distribusi.html +++ b/verse/templates/distribusi.html @@ -3,7 +3,7 @@