# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # Gestion scolarite IUT # # Copyright (c) 1999 - 2021 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 # ############################################################################## """Various HTML generation functions """ from flask import g, url_for import app.scodoc.sco_utils as scu from . import listhistogram def horizontal_bargraph(value, mark): """html drawing an horizontal bar and a mark used to vizualize the relative level of a student """ tmpl = """ <span class="graph"> <span class="bar" style="width: %(value)d%%;"></span> <span class="mark" style="left: %(mark)d%%; "></span> </span> """ return tmpl % {"value": int(value), "mark": int(mark)} def histogram_notes(notes): "HTML code drawing histogram" if not notes: return "" _, H = listhistogram.ListHistogram(notes, 21, minmax=(0, 20)) D = ['<ul id="vhist-q-graph"><li class="vhist-qtr" id="vhist-q1"><ul>'] left = 5 colwidth = 16 # must match #q-graph li.bar width in stylesheet if max(H) <= 0: return "" hfactor = 95.0 / max(H) # garde une marge de 5% pour l'esthetique for i in range(len(H)): if H[i] >= 0: x = left + i * (4 + colwidth) heightpercent = H[i] * hfactor if H[i] > 0: nn = "<p>%d</p>" % H[i] else: nn = "" D.append( '<li class="vhist-bar" style="left:%dpx;height:%f%%">%s<p class="leg">%d</p></li>' % (x, heightpercent, nn, i) ) D.append("</ul></li></ul>") return "\n".join(D) def make_menu(title, items, css_class="", alone=False): """HTML snippet to render a simple drop down menu. items is a list of dicts: { 'title' : 'endpoint' : flask endpoint (name of the function) 'args' : url query args 'id' : 'attr' : "" # optional html <a> attributes 'enabled' : # True by default 'helpmsg' : 'submenu' : [ list of sub-items ] } """ def gen_menu_items(items): H.append("<ul>") for item in items: if not item.get("enabled", True): cls = ' class="ui-state-disabled"' else: cls = "" the_id = item.get("id", "") if the_id: li_id = 'id="%s" ' % the_id else: li_id = "" if "endpoint" in item: args = item.get("args", {}) item["urlq"] = url_for( item["endpoint"], scodoc_dept=g.scodoc_dept, **args ) else: item["urlq"] = "#" item["attr"] = item.get("attr", "") submenu = item.get("submenu", None) H.append( "<li " + li_id + cls + '><a href="%(urlq)s" %(attr)s>%(title)s</a>' % item ) if submenu: gen_menu_items(submenu) H.append("</li>") H.append("</ul>") H = [] if alone: H.append('<ul class="sco_dropdown_menu %s">' % css_class) H.append("""<li><a href="#">%s</a>""" % title) gen_menu_items(items) H.append("</li>") if alone: H.append("</ul>") return "".join(H)