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)
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)
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)
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()