Beispiel #1
0
def outputHtmlUserlist(fname, db, keys):
    h = HTML()
    head = h.head("")
    with h.body(""):
        with h.table(border='1', newlines=True):
            with h.colgroup:
                h.col(span="1", style="width: 64px;")
                h.col(span="1", style="width: 130px;")
                h.col(span="1", style="width: 250px;")
                h.col(span="1", style="width: 250px;")
            with h.tr:
                h.th("avatar")
                h.th("username")
                h.th("fullname")
                h.th("location")
            for u in keys:
                with h.tr:
                    with h.td():
                        h.img('',
                              src=escape(db.usernames[u].avatar),
                              width="64",
                              height="64")
                    h.td(u)
                    h.td(escape(db.usernames[u].fullname))
                    h.td(escape(db.usernames[u].location))
    open(fname, "w").write(str(h))
Beispiel #2
0
def outputHtmlUserlist(fname, db, keys):
    h = HTML()
    head = h.head("")
    with h.body(""):
        with h.table(border='1', newlines=True):
            with h.colgroup:
                h.col(span="1", style="width: 64px;")
                h.col(span="1", style="width: 130px;")
                h.col(span="1", style="width: 250px;")
                h.col(span="1", style="width: 250px;")
            with h.tr:
                h.th("avatar")
                h.th("username")
                h.th("fullname")
                h.th("location")
            for u in keys:
                with h.tr:
                    with h.td():
                        h.img('',src=escape(db.usernames[u].avatar), width="64", height="64")
                    h.td(u)
                    h.td(escape(db.usernames[u].fullname))
                    h.td(escape(db.usernames[u].location))
    open(fname, "w").write(str(h))
Beispiel #3
0
class Spot:
    """
    The Spot class
    
    """
    
    # ----------------------------------------------------------------------
    def __init__(self, settings, session, data, inputs):

        # --- Definitions
        
        self.settings = settings
        self.session = session
        self.data = data
        self.inputs = inputs
        self.html = HTML(self)
        self.display = True;
        
        # --- Pre-processing
        self.pre_process()
        
        # --- Actions
        if self.inputs.getvalue('form_action') is not None:
            
            # NB: stop is for redirection
            stop = self.form_action()
            
        else:
            stop = None
            
        # --- Html
        if stop is None:    
            self.html.meta(Language=self.session.language)
            self.html.favicon('Core/Style/Icons/favicon.ico?v={0}'.format(time()))
            self.html.style('fonts')
            self.html.style('common')
            self.html.jsfile('Core/JS/jquery.js')
            self.html.jsfile('Core/JS/common.js')
            self.set_html()
        
    # ----------------------------------------------------------------------
    def pre_process(self):
        '''
        Pre-processing method
        
        Inputs:
            -
            
        Output:
            None
        '''
        
        # --- Set language
        self.set_lang()
        
    # ----------------------------------------------------------------------
    def set_html(self):
        '''
        Sets html code
        
        Inputs:
            -
            
        Output:
            None
        '''
        pass
    
    # ----------------------------------------------------------------------
    def set_lang(self):
        '''
        Determine spot language
        
        Inputs:
            -
            
        Output:
            None
        '''

        # self.session.language

        # --- Modification
        lang = self.inputs.getvalue('lang')
        if lang is not None and lang in self.settings.LANGUAGES:
            
            # Update database
            self.session.DB.update('Sessions', 'lang', lang, 'sid=?', self.session.id)
            
            # Update session
            self.session.language = lang

        # --- Conversion
        self.LangIdx = self.settings.LANGUAGES.index(self.session.language)
        
    # ----------------------------------------------------------------------
    def mlt(self, M, decode=True, newlines=True):
        '''
        Multi-language text handler
        
        Inputs:
            M (tuple)             The text in many languages
            decode (bool=true)    Decode html or not
            newlines (bool=true)  Convert newlines ('\n' -> '<br>')
        
        Output:
            The text in the current language
        '''
        
        # --- Manage input
        if isinstance(M, str):
            tmp = M
        else:
            tmp = M[self.LangIdx]
        
        # --- Convert special chararters (decode)
        if decode:
            res = ''
            K = list(html.entities.entitydefs.keys())
            V = list(html.entities.entitydefs.values())
            
            for char in tmp:
                
                if char in V:
                    res += '&{0};'.format(K[V.index(char)])
                else:
                    res += char
            
        else:
            res = tmp
        
        # --- Convert newlines
        if newlines:
            res = str.replace(res, '\n', '<br>')
        
        # --- Return
        return res
      
    # ----------------------------------------------------------------------
    def truncate(self, s, limit=100, suffix='...'):
        '''
        Smart truncate
        
        Inputs:
            M (tuple) The text in many languages
        
        Output:
            The text in the current language
        '''
        if len(s) <= limit:
            return s
        else:
            return ' '.join(s[:limit+1].split(' ')[0:-1]) + suffix
    
    # ----------------------------------------------------------------------
    def redirect(self, location):
        '''
        Redirection (javascript based)
        
        Inputs:
            location (str) The new spot location
            
        Output
            None
        '''

        self.html.javascript('document.location.href="{0}"'.format(location))
        
    # ----------------------------------------------------------------------
    def language_chooser(self):
        '''
        Language chooser
        
        Inputs:
            -
            
        Output
            None
        '''
        
        # --- Store reference
        ref = self.html.ref
            
        # Language container
        self.html.div(0, id='language')
        
        if self.session.language != 'en':
            self.html.a(0, "?spot={0}&lang=en".format(self.settings.get('spot')))
            self.html.img(0, 'Core/Style/Icons/Flags/English.png')
        
        if self.session.language != 'fr':
            self.html.a(0, "?spot={0}&lang=fr".format(self.settings.get('spot')))
            self.html.img(0, 'Core/Style/Icons/Flags/French.png')

        # --- Restore reference
        self.html.ref = ref
        
    # ----------------------------------------------------------------------
    def main_menu(self, mid):
        '''
        Append the main menu.
        
        Inputs:
            None
            
        Output:
            None
        '''
        
        # Logo
        self.html.a(mid, '?spot=home')
        self.html.img(0, 'Core/Style/Logo.svg', id='logo')
        
        # Language chooser
        self.html.ref = mid
        self.language_chooser()
        
        self.html.a(0, '?spot=connection', id='disconnection')
        
        # Menu containers
        self.html.div(mid, id='menu')
        
        self.html.a(0, '?spot=settings', id="menu_Param", cls='menu_item')
        self.html.text(0, ("General settings", "Paramètres généraux"))
        
        self.html.a(-1, '?spot=users', id='menu_Users', cls='menu_item')
        self.html.text(0, ("Manage users", "Gestion des utilisateurs"))
        
        self.html.a(-1, '?spot=locations', id='menu_Locations', cls='menu_item')
        self.html.text(0, ("Storage locations", "Espaces de stockage"))
           
Beispiel #4
0
class Spot:
    """
    The Spot class
    
    """

    # ----------------------------------------------------------------------
    def __init__(self, settings, session, data, inputs):

        # --- Definitions

        self.settings = settings
        self.session = session
        self.data = data
        self.inputs = inputs
        self.html = HTML(self)
        self.display = True

        # --- Pre-processing
        self.pre_process()

        # --- Actions
        if self.inputs.getvalue('form_action') is not None:

            # NB: stop is for redirection
            stop = self.form_action()

        else:
            stop = None

        # --- Html
        if stop is None:
            self.html.meta(Language=self.session.language)
            self.html.favicon('Core/Style/Icons/favicon.ico?v={0}'.format(
                time()))
            self.html.style('fonts')
            self.html.style('common')
            self.html.jsfile('Core/JS/jquery.js')
            self.html.jsfile('Core/JS/common.js')
            self.set_html()

    # ----------------------------------------------------------------------
    def pre_process(self):
        '''
        Pre-processing method
        
        Inputs:
            -
            
        Output:
            None
        '''

        # --- Set language
        self.set_lang()

    # ----------------------------------------------------------------------
    def set_html(self):
        '''
        Sets html code
        
        Inputs:
            -
            
        Output:
            None
        '''
        pass

    # ----------------------------------------------------------------------
    def set_lang(self):
        '''
        Determine spot language
        
        Inputs:
            -
            
        Output:
            None
        '''

        # self.session.language

        # --- Modification
        lang = self.inputs.getvalue('lang')
        if lang is not None and lang in self.settings.LANGUAGES:

            # Update database
            self.session.DB.update('Sessions', 'lang', lang, 'sid=?',
                                   self.session.id)

            # Update session
            self.session.language = lang

        # --- Conversion
        self.LangIdx = self.settings.LANGUAGES.index(self.session.language)

    # ----------------------------------------------------------------------
    def mlt(self, M, decode=True, newlines=True):
        '''
        Multi-language text handler
        
        Inputs:
            M (tuple)             The text in many languages
            decode (bool=true)    Decode html or not
            newlines (bool=true)  Convert newlines ('\n' -> '<br>')
        
        Output:
            The text in the current language
        '''

        # --- Manage input
        if isinstance(M, str):
            tmp = M
        else:
            tmp = M[self.LangIdx]

        # --- Convert special chararters (decode)
        if decode:
            res = ''
            K = list(html.entities.entitydefs.keys())
            V = list(html.entities.entitydefs.values())

            for char in tmp:

                if char in V:
                    res += '&{0};'.format(K[V.index(char)])
                else:
                    res += char

        else:
            res = tmp

        # --- Convert newlines
        if newlines:
            res = str.replace(res, '\n', '<br>')

        # --- Return
        return res

    # ----------------------------------------------------------------------
    def truncate(self, s, limit=100, suffix='...'):
        '''
        Smart truncate
        
        Inputs:
            M (tuple) The text in many languages
        
        Output:
            The text in the current language
        '''
        if len(s) <= limit:
            return s
        else:
            return ' '.join(s[:limit + 1].split(' ')[0:-1]) + suffix

    # ----------------------------------------------------------------------
    def redirect(self, location):
        '''
        Redirection (javascript based)
        
        Inputs:
            location (str) The new spot location
            
        Output
            None
        '''

        self.html.javascript('document.location.href="{0}"'.format(location))

    # ----------------------------------------------------------------------
    def language_chooser(self):
        '''
        Language chooser
        
        Inputs:
            -
            
        Output
            None
        '''

        # --- Store reference
        ref = self.html.ref

        # Language container
        self.html.div(0, id='language')

        if self.session.language != 'en':
            self.html.a(0,
                        "?spot={0}&lang=en".format(self.settings.get('spot')))
            self.html.img(0, 'Core/Style/Icons/Flags/English.png')

        if self.session.language != 'fr':
            self.html.a(0,
                        "?spot={0}&lang=fr".format(self.settings.get('spot')))
            self.html.img(0, 'Core/Style/Icons/Flags/French.png')

        # --- Restore reference
        self.html.ref = ref

    # ----------------------------------------------------------------------
    def main_menu(self, mid):
        '''
        Append the main menu.
        
        Inputs:
            None
            
        Output:
            None
        '''

        # Logo
        self.html.a(mid, '?spot=home')
        self.html.img(0, 'Core/Style/Logo.svg', id='logo')

        # Language chooser
        self.html.ref = mid
        self.language_chooser()

        self.html.a(0, '?spot=connection', id='disconnection')

        # Menu containers
        self.html.div(mid, id='menu')

        self.html.a(0, '?spot=settings', id="menu_Param", cls='menu_item')
        self.html.text(0, ("General settings", "Paramètres généraux"))

        self.html.a(-1, '?spot=users', id='menu_Users', cls='menu_item')
        self.html.text(0, ("Manage users", "Gestion des utilisateurs"))

        self.html.a(-1,
                    '?spot=locations',
                    id='menu_Locations',
                    cls='menu_item')
        self.html.text(0, ("Storage locations", "Espaces de stockage"))
Beispiel #5
0
class Spot:
    """
    The Spot class
    
    """

    # ----------------------------------------------------------------------
    def __init__(self, settings, session, inputs):

        # --- Definitions

        self.settings = settings
        self.session = session
        self.inputs = inputs
        self.html = HTML(self)
        self.display = True

        # --- Pre-processing
        self.pre_process()

        # --- Actions
        if self.inputs.getvalue("form_action") is not None:

            # NB: stop is for redirection
            stop = self.form_action()

        else:
            stop = None

        # --- Html
        if stop is None:
            self.html.meta(Language=self.session.language)
            self.html.favicon("Core/Style/Icons/favicon.ico?v={0}".format(time()))
            self.html.style("fonts")
            self.html.style("common")
            self.html.jsfile("Core/JS/jquery.js")
            self.html.jsfile("Core/JS/common.js")
            self.set_html()

    # ----------------------------------------------------------------------
    def pre_process(self):
        """
        Pre-processing method
        
        Inputs:
            -
            
        Output:
            None
        """

        # --- Set language
        self.set_lang()

    # ----------------------------------------------------------------------
    def set_html(self):
        """
        Sets html code
        
        Inputs:
            -
            
        Output:
            None
        """
        pass

    # ----------------------------------------------------------------------
    def set_lang(self):
        """
        Determine spot language
        
        Inputs:
            -
            
        Output:
            None
        """

        #  self.session.language

        # --- Modification
        lang = self.inputs.getvalue("lang")
        if lang is not None and lang in self.settings.LANGUAGES:

            # Update database
            self.session.DB.update("Sessions", "lang", lang, "sid=?", self.session.id)

            # Update session
            self.session.language = lang

        # --- Conversion
        self.LangIdx = self.settings.LANGUAGES.index(self.session.language)

    # ----------------------------------------------------------------------
    def mlt(self, M, decode=True, newlines=True):
        """
        Multi-language text handler
        
        Inputs:
            M (tuple)             The text in many languages
            decode (bool=true)    Decode html or not
            newlines (bool=true)  Convert newlines ('\n' -> '<br>')
        
        Output:
            The text in the current language
        """

        # --- Manage input
        if isinstance(M, str):
            tmp = M
        else:
            tmp = M[self.LangIdx]

        # --- Convert special chararters (decode)
        if decode:
            res = ""
            K = list(html.entities.entitydefs.keys())
            V = list(html.entities.entitydefs.values())

            for char in tmp:

                if char in V:
                    res += "&{0};".format(K[V.index(char)])
                else:
                    res += char

        else:
            res = tmp

        # --- Convert newlines
        if newlines:
            res = str.replace(res, "\n", "<br>")

        # --- Return
        return res

    # ----------------------------------------------------------------------
    def truncate(self, s, limit=100, suffix="..."):
        """
        Smart truncate
        
        Inputs:
            M (tuple) The text in many languages
        
        Output:
            The text in the current language
        """
        if len(s) <= limit:
            return s
        else:
            return " ".join(s[: limit + 1].split(" ")[0:-1]) + suffix

    # ----------------------------------------------------------------------
    def redirect(self, location):
        """
        Redirection (javascript based)
        
        Inputs:
            location (str) The new spot location
            
        Output
            None
        """

        self.html.javascript('document.location.href="{0}"'.format(location))

    # ----------------------------------------------------------------------
    def language_chooser(self):
        """
        Language chooser
        
        Inputs:
            -
            
        Output
            None
        """

        # --- Store reference
        ref = self.html.ref

        # Language container
        self.html.div(0, id="language")

        if self.session.language != "en":
            self.html.a(0, "?spot={0}&lang=en".format(self.settings.get("spot")))
            self.html.img(0, "Core/Style/Icons/Flags/English.png")

        if self.session.language != "fr":
            self.html.a(0, "?spot={0}&lang=fr".format(self.settings.get("spot")))
            self.html.img(0, "Core/Style/Icons/Flags/French.png")

        # --- Restore reference
        self.html.ref = ref

    # ----------------------------------------------------------------------
    def navbar(self, tree, main, last, page=()):
        """
        Append a navigation bar.
        
        Inputs:
            - parent (int) The identifier of the most remote element
            
        Output:
            None
        """

        # Append style and javascript to the head
        self.html.style("navbar")
        self.html.jsfile("Core/JS/navbar.js")

        # Main contener
        self.html.div(main, id="navbar")

        # Get parent list
        P = int(last)
        Plist = []
        while True:
            Plist.extend([P])
            if P == 0:
                break
            else:
                tmp = tree.single("SELECT parent FROM Elements WHERE id=?", P)
                P = tmp["parent"]

        # Display navbar
        for P in reversed(Plist):

            ref = self.html.ref

            if P:

                # --- Spacer

                tmp = self.html.div(0, cls="nav_cont")
                self.html.a(tmp, "#", id="nav_spacer_{0}".format(P), cls="nav_spacer")
                self.html.text(0, "&#x25BC;", decode=False)

                # --- Element

                res = tree.single("SELECT * FROM Elements WHERE id=?", P)
                if res["type"] == "group":

                    if P == int(last) and not page:
                        if res["name"]:
                            self.html.p(tmp, cls="nav_elm_group nav_elm_mod", contenteditable="true")
                            self.html.text(0, res["name"])
                        else:
                            self.html.p(tmp, cls="nav_elm_group nav_elm_mod nav_elm_mod_empty", contenteditable="true")
                            self.html.span(0, cls="nav_undef")
                            self.html.text(0, "Group {0}".format(P))

                    else:
                        self.html.a(tmp, "?spot=home&parent={0}".format(P), cls="nav_elm_group")
                        if res["name"]:
                            self.html.text(0, res["name"])
                        else:
                            self.html.span(0, cls="nav_undef")
                            self.html.text(0, "Group {0}".format(P))

                elif res["type"] == "note":

                    if P == int(last) and not page:
                        if res["name"]:
                            self.html.p(tmp, cls="nav_elm_note nav_elm_mod", contenteditable="true")
                            self.html.text(0, res["name"])
                        else:
                            self.html.p(tmp, cls="nav_elm_note nav_elm_mod nav_elm_mod_empty", contenteditable="true")
                            self.html.span(0, cls="nav_undef")
                            self.html.text(0, "Note {0}".format(P))

                    else:
                        self.html.a(tmp, "?spot=note&note={0}".format(P), cls="nav_elm_note")
                        if res["name"]:
                            self.html.text(0, res["name"])
                        else:
                            self.html.span(0, cls="nav_undef")
                            self.html.text(0, "Note {0}".format(P))

                # --- List

                tmp = self.html.div(tmp, id="nav_list_{0}".format(P), cls="nav_list")

                for alt in tree.multi(
                    "SELECT * FROM Elements WHERE id!=? AND parent=(SELECT parent FROM Elements WHERE id=?)", P, P
                ):

                    if alt["type"] == "group":
                        self.html.a(tmp, "?spot=home&parent={0}".format(alt["id"]), cls="nav_menu_item")
                        self.html.img(0, "Core/Style/Icons/navbar_group.png", cls="nav_icon_group")
                    elif alt["type"] == "note":
                        self.html.a(tmp, "?spot=note&note={0}".format(alt["id"]), cls="nav_menu_item")
                        self.html.img(0, "Core/Style/Icons/navbar_note.png", cls="nav_icon_note")

                    if alt["name"]:
                        self.html.text(0, alt["name"])
                    elif alt["type"] == "note":
                        self.html.span(0, cls="nav_undef")
                        self.html.text(0, "Note {0}".format(alt["id"]))
                    elif alt["type"] == "group":
                        self.html.span(0, cls="nav_undef")
                        self.html.text(0, "Group {0}".format(alt["id"]))

            else:
                self.html.a(0, "?spot=home", cls="nav_elm")
                self.html.img(0, "Core/Style/Icons/navbar_home.png", id="nav_icon_home")
                self.html.text(0, "Home")

            self.html.ref = ref

        if page:

            # --- Get page infos
            note = page[0]
            nid = page[1]
            pid = page[2]

            # --- Spacer
            tmp = self.html.div(0, cls="nav_cont")
            self.html.a(tmp, "#", id="nav_spacer_page", cls="nav_spacer_page")
            self.html.text(0, "&#x25BC;", decode=False)

            # --- Element
            res = note.single("SELECT * FROM Pages WHERE id=?", pid)
            if res["name"]:
                self.html.p(tmp, cls="nav_elm_page nav_elm_mod", contenteditable="true")
                self.html.text(0, res["name"])
            else:
                self.html.p(tmp, cls="nav_elm_page nav_elm_mod nav_elm_mod_empty", contenteditable="true")
                self.html.span(0, cls="nav_undef")
                self.html.text(0, "Page {0}".format(res["position"]))

            # --- List
            tmp = self.html.div(tmp, id="nav_list_page", cls="nav_list")
            for res in note.multi("SELECT * FROM Pages ORDER BY position"):

                self.html.a(
                    tmp,
                    "?spot=page&note={0}&page={1}".format(nid, res["id"]),
                    id="nav_menu_item_{0}".format(res["id"]),
                    cls="nav_menu_item_page",
                )
                if res["name"]:
                    self.html.text(0, "{0}. {1}".format(res["position"], res["name"]))
                else:
                    self.html.text(
                        0,
                        '{0}. <span class="nav_undef">Page {1}</span>'.format(res["position"], res["position"]),
                        decode=False,
                    )