Esempio n. 1
0
class DirItem(e):
    def __init__(self, obj):
        super().__init__("div")
        self.container = Div("diritem")
        for field in DIR_ITEM_FIELDS:
            self[field[1]] = obj[field[0]]
            fdiv = Div(field[1])
            self[field[1] + "div"] = fdiv
            self.container.a(fdiv)
        if self.isdir:
            self.container.ac("isdir")
        self.filenamelabel = Div().html(self.filename)
        self.filenamediv.a([self.filenamelabel])
        self.deletebutton = None
        if self.filename == "..":
            self.filenamediv.ac("parent")
        else:
            self.deletebutton = Button("Delete").ac("delete")
            self.isdirdiv.a(self.deletebutton)
            self.mtimediv.html(
                __new__(Date(self.mtime * 1000)).toLocaleString())
        if self.isdir:
            self.sizediv.html("dir")
        else:
            self.editbutton = Button("Edit")
            self.filenamediv.a(self.editbutton)
            self.sizediv.html(self.size)
        if self.rwx:
            self.rwxdiv.html(self.rwx)
        self.a(self.container)
Esempio n. 2
0
class LogItem(e):
    def __init__(self, args = {}):        
        super().__init__("div")        
        self.text = args.get("text", "")
        self.kind = args.get("kind", "normal")
        self.prompt = args.get("prompt", None)
        self.container = Div("logitem")
        self.container.ac(self.kind)
        self.promptspan = Span().ac("prompt")
        if self.prompt:
            self.promptspan.html(self.prompt)
        self.textspan = Span().html(escapeHTML(self.text)).ac(self.kind)
        self.container.a([self.promptspan, self.textspan])
        self.a(self.container)
Esempio n. 3
0
 def buildsquares(self):
     self.container.x()
     self.sqdivs = {}
     self.sqhdivs = {}
     for sq in self.squarelist():
         sqclass = cpick(self.islightsquare(sq), "boardsquarelight", "boardsquaredark")
         sqdiv = Div().ac(["boardsquare", sqclass]).w(self.squaresize).h(self.squaresize)
         sqhdiv = Div().pa().w(self.squaresize).h(self.squaresize)
         self.sqdivs[sq.hashkey()] = sqdiv
         self.sqhdivs[sq.hashkey()] = {
             "div": sqhdiv,
             "cumop": 0.0
         }
         fasq = self.flipawaresquare(sq)
         sqdiv.pv(self.squarecoordsvect(fasq))
         sqhdiv.pv(self.squarecoordsvect(fasq))
         sqdiv.ae("dragover", self.piecedragoverfactory(sq))
         sqdiv.ae("drop", self.piecedropfactory(sq))            
         sqhdiv.ae("dragover", self.piecedragoverfactory(sq))
         sqhdiv.ae("drop", self.piecedropfactory(sq))            
         self.container.a([sqdiv, sqhdiv])
         p = self.getpieceatsquare(sq)
         if p.ispiece():
             pdiv = Div().ac("boardpiece").w(self.piecesize).h(self.piecesize).pv(self.piececoordsvect(fasq))
             pdiv.ac(getclassforpiece(p, self.piecestyle)).sa("draggable", True)
             pdiv.ae("dragstart", self.piecedragstartfactory(sq, pdiv))
             pdiv.ae("drag", self.piecedragfactory())
             pdiv.ae("dragend", self.piecedragendfactory(sq, pdiv))
             pdiv.ae("dragover", self.piecedragoverfactory(sq))
             pdiv.ae("drop", self.piecedropfactory(sq))            
             pdiv.zi(10)
             if self.variantkey == "threeCheck":
                 if ( p.kind == "k" ):
                     mul = self.getthreelifesforcolor(p.color)
                     lifesdiv = Div().pa().t(- self.squaresize / 10).l(self.squaresize / 2 + self.squaresize / 10).w(self.squaresize / 2).h(self.squaresize / 2)
                     lifesdiv.ac("boardthreechecklifesdiv").fs(self.squaresize / 1.5).html("{}".format(mul))
                     lifesdiv.c(["#ff0", "#ff0"][p.color])
                     pdiv.a(lifesdiv)
             self.container.a(pdiv)
Esempio n. 4
0
class PgnInfo(e):
    def __init__(self, parent, pgnlistparent):
        super().__init__("div")
        self.headers = []
        self.parent = parent
        self.pgnlistparent = pgnlistparent

    def getheader(self, key, default):
        for header in self.headers:
            if header[0] == key:
                return header[1]
        return default

    def playerlink(self, username):
        return "<a href='https://lichess.org/@/{}' target='_blank' rel='noopener noreferrer'>{}</a>".format(username, username)

    def parsecontent(self):        
        lines = self.content.split("\n")
        self.headers = []
        for line in lines:
            if line[0] == "[":
                parts = line[1:].split("\"")
                key = parts[0].split(" ")[0]
                value = parts[1].split("\"")[0]
                self.headers.append((key, value))
        self.white = self.getheader("White", "?")        
        self.black = self.getheader("Black", "?")        
        self.result = self.getheader("Result", "?")        
        self.site = self.getheader("Site", "")               
        self.whiteelo =  self.getheader("WhiteElo", "?")
        self.whiteratingdiff =  self.getheader("WhiteRatingDiff", "?")
        self.blackelo =  self.getheader("BlackElo", "?")
        self.blackratingdiff =  self.getheader("BlackRatingDiff", "?")
        self.variant = self.getheader("Variant", "Standard")
        self.timecontrol = self.getheader("TimeControl", "?")
        self.utcdate = self.getheader("UTCDate", "?")
        self.id = self.site.split("/")[-1:][0]

    def idclicked(self):
        self.parent.loadedgameid = self.id
        self.parent.loadedgameside = "white"        
        if self.meblack():
            self.parent.loadedgameside = "black"
        self.parent.pgntext.setpgn(self.content)
        self.bds("dotted").bdw("6").bdc("#00f")
        localStorage.setItem("pgninfo/idclicked", self.id)
        self.pgnlistparent.bookmarkedpi = self
        getconn().sioreq({
            "kind": "parsepgn",
            "owner": self.parent.id,
            "data": self.content
        })

    def mecolor(self):
        if self.white == self.parent.username:
            return WHITE
        if self.black == self.parent.username:
            return BLACK
        return None

    def mewhite(self):
        return self.mecolor() == WHITE

    def meblack(self):
        return self.mecolor() == BLACK

    def hasme(self):
        return not ( self.mecolor() is None )

    def score(self):
        if self.result == "1-0":
            return 1
        if self.result == "0-1":
            return 0
        return 0.5

    def mescore(self):
        if self.hasme():
            if self.mewhite():
                return self.score()
            return 1 - self.score()
        return self.score()

    def meratinginfo(self):
        if self.hasme():
            if self.mewhite():
                return [ self.whiteelo, self.whiteratingdiff ]
            return [ self.blackelo, self.blackratingdiff ]
        return None

    def build(self):        
        self.x().ac("pgninfocontainer")
        self.tcdiv = Div().ac("pgninfotcdiv").html("{} {}".format(self.timecontrol, self.variant))        
        self.whitediv = Div().ac("pgninfoplayerdiv").html(self.playerlink(self.white))        
        self.whiteelodiv = Div().ac("pgninfoplayerelodiv").html("{} {}".format(self.whiteelo, self.whiteratingdiff))        
        if self.meblack():
            self.whitediv.ac("pgninfotheyplayerdiv")
        self.blackdiv = Div().ac("pgninfoplayerdiv").html(self.playerlink(self.black))        
        self.blackelodiv = Div().ac("pgninfoplayerelodiv").html("{} {}".format(self.blackelo, self.blackratingdiff))        
        if self.mewhite():
            self.blackdiv.ac("pgninfotheyplayerdiv")
        self.resultdiv = Div().ac("pgninforesultdiv").html(self.result)
        self.iddiv = Div().ac("pgninfoiddiv").html(self.id)
        self.iddiv.ae("mousedown", self.idclicked)
        mescore = self.mescore()
        if mescore == 1:
            self.ac("pgninfowhitewin")
        elif mescore == 0:
            self.ac("pgninfoblackwin")
        else:
            self.ac("pgninfodraw")
        self.a([self.tcdiv, self.whitediv, self.whiteelodiv, self.blackdiv, self.blackelodiv, self.resultdiv, self.iddiv])
        if self.id == localStorage.getItem("pgninfo/idclicked"):
            self.bds("dashed").bdw("6").bdc("#00f")
        return self

    def setcontent(self, content):
        self.content = content
        self.parsecontent()
        return self.build()