# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # Gestion scolarite IUT # # Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Emmanuel Viennet emmanuel.viennet@viennet.net # ############################################################################## """HTML Header/Footer for ScoDoc pages""" from flask import g, render_template, url_for from flask_login import current_user import app.scodoc.sco_utils as scu from app import scodoc_flash_status_messages from app.scodoc import html_sidebar import sco_version # Some constants: BOOTSTRAP_JS = ["libjs/bootstrap/js/bootstrap.min.js", "libjs/purl.js"] BOOTSTRAP_CSS = ["libjs/bootstrap/css/bootstrap.min.css"] def standard_html_header(): """Standard HTML header for pages outside depts""" # not used in ZScolar, see sco_header return f"""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head> <title>ScoDoc: accueil</title> <META http-equiv="Content-Type" content="text/html; charset={scu.SCO_ENCODING}"> <META http-equiv="Content-Style-Type" content="text/css"> <META name="LANG" content="fr"> <META name="DESCRIPTION" content="ScoDoc: gestion scolarite"> <link href="{scu.STATIC_DIR}/css/scodoc.css" rel="stylesheet" type="text/css"/> </head><body>{scu.CUSTOM_HTML_HEADER_CNX}""" def standard_html_footer(): """Le pied de page HTML de la page d'accueil.""" return f"""<p class="footer"> Problème de connexion (identifiant, mot de passe): <em>contacter votre responsable ou chef de département</em>.</p> <p>Problèmes et suggestions sur le logiciel: <a href="mailto:{scu.SCO_USERS_LIST}">{scu.SCO_USERS_LIST}</a></p> <p><em>ScoDoc est un logiciel libre développé par Emmanuel Viennet.</em></p> </body></html>""" _HTML_BEGIN = f"""<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=%(encoding)s" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="LANG" content="fr" /> <meta name="DESCRIPTION" content="ScoDoc" /> <title>%(page_title)s</title> <link type="text/css" rel="stylesheet" href="{scu.STATIC_DIR}/libjs/jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.min.css" /> <link href="{scu.STATIC_DIR}/css/scodoc.css" rel="stylesheet" type="text/css" /> <link href="{scu.STATIC_DIR}/css/menu.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="{scu.STATIC_DIR}/DataTables/datatables.min.css" /> <link href="{scu.STATIC_DIR}/css/gt_table.css" rel="stylesheet" type="text/css" /> <script src="{scu.STATIC_DIR}/libjs/menu.js"></script> <script src="{scu.STATIC_DIR}/libjs/bubble.js"></script> <script src="{scu.STATIC_DIR}/jQuery/jquery.js"></script> <script src="{scu.STATIC_DIR}/jQuery/jquery-migrate-3.5.2.min.js"></script> <script src="{scu.STATIC_DIR}/libjs/jquery.field.min.js"></script> <script src="{scu.STATIC_DIR}/libjs/jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js"></script> <script src="{scu.STATIC_DIR}/DataTables/datatables.min.js"></script> <script src="{scu.STATIC_DIR}/libjs/qtip/jquery.qtip-3.0.3.min.js"></script> <link type="text/css" rel="stylesheet" href="{scu.STATIC_DIR}/libjs/qtip/jquery.qtip-3.0.3.min.css" /> <link type="text/css" rel="stylesheet" href="{scu.STATIC_DIR}/libjs/timepicker-1.3.5/jquery.timepicker.min.css" /> <script src="{scu.STATIC_DIR}/libjs/timepicker-1.3.5/jquery.timepicker.min.js"></script> <script src="{scu.STATIC_DIR}/js/scodoc.js"></script> <script src="{scu.STATIC_DIR}/js/etud_info.js"></script> <script src="{scu.STATIC_DIR}/libjs/qtip/jquery.qtip-3.0.3.min.js"></script> <link type="text/css" rel="stylesheet" href="{scu.STATIC_DIR}/libjs/qtip/jquery.qtip-3.0.3.min.css" /> <script> document.addEventListener('DOMContentLoaded', function() {{ if (document.getElementById('gtrcontent')) {{ enableTooltips("gtrcontent"); }} if (document.getElementById('sidebar')) {{ enableTooltips("sidebar"); }} }}); </script> """ def scodoc_top_html_header(page_title="ScoDoc: bienvenue"): """HTML header for top level pages""" H = [ _HTML_BEGIN % {"page_title": page_title, "encoding": scu.SCO_ENCODING}, """</head><body id="gtrcontent">""", scu.CUSTOM_HTML_HEADER_CNX, ] return "\n".join(H) # Header: def sco_header( # optional args page_title="", # page title no_sidebar=False, # hide sidebar cssstyles=(), # additionals CSS sheets javascripts=(), # additionals JS filenames to load scripts=(), # script to put in page header init_google_maps=False, # Google maps titrebandeau="", # titre dans bandeau superieur etudid=None, formsemestre_id=None, ): """Main HTML page header for ScoDoc Utilisé dans les anciennes pages. Les nouvelles pages utilisent le template Jinja. """ from app.scodoc.sco_formsemestre_status import formsemestre_page_title if etudid is not None: g.current_etudid = etudid scodoc_flash_status_messages() params = { "page_title": page_title or sco_version.SCONAME, "no_sidebar": no_sidebar, "ScoURL": url_for("scolar.index_html", scodoc_dept=g.scodoc_dept), "encoding": scu.SCO_ENCODING, "titrebandeau_mkup": "<td>" + titrebandeau + "</td>", "authuser": current_user.user_name, } if no_sidebar: params["margin_left"] = "1em" else: params["margin_left"] = "140px" H = [_HTML_BEGIN % params] if init_google_maps: # It may be necessary to add an API key: H.append('<script src="https://maps.google.com/maps/api/js"></script>') # Feuilles de style additionnelles: for cssstyle in cssstyles: H.append( f"""<link type="text/css" rel="stylesheet" href="{scu.STATIC_DIR}/{cssstyle}" />\n""" ) H.append( f""" <script> const SCO_URL="{url_for("scolar.index_html", scodoc_dept=g.scodoc_dept)}"; const SCO_TIMEZONE="{scu.TIME_ZONE}"; </script>""" ) if init_google_maps: # utilisé uniquement pour carte lycées H.append( f'<script src="{scu.STATIC_DIR}/libjs/jquery.ui.map.full.min.js"></script>' ) # JS additionels for js in javascripts: H.append(f"""<script src="{scu.STATIC_DIR}/{js}"></script>\n""") H.append( f"""<style> #gtrcontent {{ margin-left: {params["margin_left"]}; height: 100%%; margin-bottom: 16px; }} </style> """ ) # Scripts de la page: if scripts: H.append("""<script>""") for script in scripts: H.append(script) H.append("""</script>""") # Fin head, Body et bandeau haut: H.append( f"""</head> <!-- Legacy ScoDoc header --> <body> {scu.CUSTOM_HTML_HEADER} {'' if no_sidebar else html_sidebar.sidebar(etudid)} <div id="mobileNav" mobile="true" style="display:none;"></div> <div id="gtrcontent"> """ ) # En attendant le replacement complet de cette fonction, # inclusion ici des messages flask H.append(render_template("flashed_messages.j2")) # # Barre menu semestre: H.append(formsemestre_page_title(formsemestre_id)) # div pour affichage messages temporaires H.append('<div id="sco_msg" class="head_message"></div>') # H.append('<div class="sco-app-content">') return "".join(H) def sco_footer(): """Main HTMl pages footer""" return ( """</div></div><!-- /gtrcontent -->""" + scu.CUSTOM_HTML_FOOTER + """</body></html>""" )