From 8939c6ffb549dd92207f0843276a0036f44a6a47 Mon Sep 17 00:00:00 2001 From: Jonas Weinz Date: Fri, 14 Nov 2025 16:47:01 +0100 Subject: [PATCH] keep session id history --- multiplayer_crosswords/crossword.py | 6 +-- .../server/serve_frontend.py | 35 +++++++++++++ .../server/server_config.py | 4 +- multiplayer_crosswords/server/server_utils.py | 2 +- .../server/websocket_crossword_server.py | 39 +++++++++++---- multiplayer_crosswords/utils.py | 43 +++++++++++++++- multiplayer_crosswords/webui/big_icon.png | Bin 9713 -> 69902 bytes multiplayer_crosswords/webui/favicon.png | Bin 3367 -> 12239 bytes multiplayer_crosswords/webui/keyboard.js | 7 ++- multiplayer_crosswords/webui/menu.js | 22 ++++++++- multiplayer_crosswords/webui/styles.css | 46 +++++++++++------- multiplayer_crosswords/webui/sw.js | 18 +++++-- pyproject.toml | 11 +++++ 13 files changed, 195 insertions(+), 38 deletions(-) create mode 100644 multiplayer_crosswords/server/serve_frontend.py diff --git a/multiplayer_crosswords/crossword.py b/multiplayer_crosswords/crossword.py index 90aea01..470851d 100644 --- a/multiplayer_crosswords/crossword.py +++ b/multiplayer_crosswords/crossword.py @@ -140,9 +140,9 @@ class Crossword: # Now find a solution word: generate a random word from the dictionary (with 10-20 letters) # and try to find the necessary letter positions in the grid. if we fail we repeat with another word (max 10 tries) solution_word_positions: Optional[List[Tuple[int, int]]] = None - max_solution_word_attempts = 10 - for _ in range(max_solution_word_attempts): - random_length = random.randint(10, 20) + max_solution_word_attempts = 20 + for i in range(max_solution_word_attempts): + random_length = random.randint(10, 27 - (i // 2)) possible_words = dictionary.find_by_pattern('*' * random_length) if not possible_words: continue diff --git a/multiplayer_crosswords/server/serve_frontend.py b/multiplayer_crosswords/server/serve_frontend.py new file mode 100644 index 0000000..aa09771 --- /dev/null +++ b/multiplayer_crosswords/server/serve_frontend.py @@ -0,0 +1,35 @@ +from pathlib import Path +import argparse +from http import server as http +import http.server + +BASE_DIR = Path(__file__).resolve().parent.parent / "webui" + +def main(): + parser = argparse.ArgumentParser(description="Serve Multiplayer Crossword Frontend") + parser.add_argument("--host", type=str, default="localhost") + parser.add_argument("--port", type=int, default=8000) + parser.add_argument("--no-file-list", action="store_true", help="Disable directory listing") + + args = parser.parse_args() + + path = BASE_DIR + host = args.host + port = args.port + no_file_list = args.no_file_list + + class CustomHandler(http.server.SimpleHTTPRequestHandler): + def __init__(self, *args, **kwargs): + super().__init__(*args, directory=str(path), **kwargs) + + if no_file_list: + def list_directory(self, path): + self.send_error(403, "Directory listing not allowed") + return None + server_address = (host, port) + httpd = http.server.HTTPServer(server_address, CustomHandler) + print(f"Serving frontend at http://{host}:{port}/ from {path}") + httpd.serve_forever() + +if __name__ == "__main__": + main() diff --git a/multiplayer_crosswords/server/server_config.py b/multiplayer_crosswords/server/server_config.py index 0b0458f..e3e5dec 100644 --- a/multiplayer_crosswords/server/server_config.py +++ b/multiplayer_crosswords/server/server_config.py @@ -3,8 +3,8 @@ from pydantic import BaseModel DEFAULT_WEBSOCKET_HOST = "0.0.0.0" DEFAULT_WEBSOCKET_PORT = 8765 -DEFAULT_MIN_GRID_SIZE = 10 -DEFAULT_MAX_GRID_SIZE = 30 +DEFAULT_MIN_GRID_SIZE = 12 +DEFAULT_MAX_GRID_SIZE = 25 DEFAULT_GRID_BLOCK_RATIO = 0.39 diff --git a/multiplayer_crosswords/server/server_utils.py b/multiplayer_crosswords/server/server_utils.py index 131c112..278b4a8 100644 --- a/multiplayer_crosswords/server/server_utils.py +++ b/multiplayer_crosswords/server/server_utils.py @@ -34,7 +34,7 @@ class BoardSizePreset(str, Enum): elif self == BoardSizePreset.SMALL: return (min_size + (max_size - min_size) // 4, min_size + (max_size - min_size) // 4) elif self == BoardSizePreset.MEDIUM: - return (max_size // 2, max_size // 2) + return (min_size + (max_size - min_size) // 2, min_size + (max_size - min_size) // 2) elif self == BoardSizePreset.LARGE: return (min_size + 3 * (max_size - min_size) // 4, min_size + 3 * (max_size - min_size) // 4) elif self == BoardSizePreset.VERY_LARGE: diff --git a/multiplayer_crosswords/server/websocket_crossword_server.py b/multiplayer_crosswords/server/websocket_crossword_server.py index 804e299..3a1f142 100644 --- a/multiplayer_crosswords/server/websocket_crossword_server.py +++ b/multiplayer_crosswords/server/websocket_crossword_server.py @@ -109,19 +109,38 @@ class MultiplayerSessionManager(object): self._sessions_lock = asyncio.Lock() self._grid_block_ratio = ServerConfig.get_config().GRID_BLOCK_RATIO + async def remove_idle_sessions(self): + """Remove all idle sessions that have exceeded their max idle time.""" + async with self._sessions_lock: + idle_session_ids = [ + session_id for session_id, session in self._sessions.items() + if session.is_idle + ] + for session_id in idle_session_ids: + logger.info("Removing idle session %s", session_id) + del self._sessions[session_id] + if idle_session_ids: + logger.info("Removed %d idle sessions", len(idle_session_ids)) async def create_session(self, lang: str | Languages, grid_w: int, grid_h: int) -> MultiplayerSession: async with self._sessions_lock: + # Remove idle sessions before creating a new one + await self.remove_idle_sessions() + if isinstance(lang, str): lang = Languages(lang) dictionary = lang.load_dictionary() - crossword = Crossword.generate( - dictionary=dictionary, - seed=None, - grid_width=grid_w, - grid_height=grid_h, - grid_block_ratio=self._grid_block_ratio, - ) + max_tries = 4 + for i in range(max_tries): + crossword = Crossword.generate( + dictionary=dictionary, + seed=None, + grid_width=grid_w, + grid_height=grid_h, + grid_block_ratio=self._grid_block_ratio, + ) + if crossword is not None: + break if crossword is None: raise RuntimeError("Failed to generate crossword for the given parameters.") session_id = str(uuid.uuid4()) @@ -146,7 +165,7 @@ class WebsocketCrosswordServer(object): async def handle_request_available_session_properties(handler: WebsocketConnectionHandler, message: client_messages.RequestAvailableSessionPropertiesClientMessage): server_config = ServerConfig.get_config() response = server_messages.AvailableSessionPropertiesServerMessage( - supported_languages=[lang.value for lang in Languages], + supported_languages=list(reversed([lang.value for lang in Languages])), min_grid_size=server_config.MIN_GRID_SIZE, max_grid_size=server_config.MAX_GRID_SIZE, board_size_presets={ @@ -227,7 +246,9 @@ class WebsocketCrosswordServer(object): solution_word_positions = [] positions = session.crossword.solution_word_positions for pos in positions: - solution_word_positions.append((pos[1], pos[0])) # convert (row, col) to (col, row) + # Convert from (row, col) to (col, row) for client + row, col = pos + solution_word_positions.append((col, row)) response = server_messages.SendFullSessionStateServerMessage( session_id=session.session_id, diff --git a/multiplayer_crosswords/utils.py b/multiplayer_crosswords/utils.py index c0bea7f..9e4f133 100644 --- a/multiplayer_crosswords/utils.py +++ b/multiplayer_crosswords/utils.py @@ -21,7 +21,48 @@ def load_dictionary(p: str | Path) -> Dictionary: if not word.isalpha(): continue word = word.lower() - dict_obj.add_word(Word(word=word, hints=[], difficulty=1)) + + hints = [] + try: + if "senses" in obj: + for sense in obj["senses"]: + text = sense + if word in text.lower(): + continue + hints.append(text) + except Exception: + pass + + try: + if "synonyms" in obj: + for synonym in obj["synonyms"]: + text = synonym + if word in text.lower(): + continue + hints.append( text) + except Exception: + pass + + try: + if "antonyms" in obj: + for antonym in obj["antonyms"]: + text = antonym + if word in text.lower(): + continue + if "de" in p.name: + text = "Gegenteil von " + text + else: + text = "Opposite of " + text + hints.append( text) + except Exception: + pass + + if len(hints) > 0: + + w = Word(word=word, + hints=hints, + difficulty=1) + dict_obj.add_word(w) load_dictionary._cache[cache_key] = dict_obj return dict_obj diff --git a/multiplayer_crosswords/webui/big_icon.png b/multiplayer_crosswords/webui/big_icon.png index f479724e684c93224dd658b8949e4010df326493..01f7750a96ad83dbd1c21ff42f440ba18a8714e6 100644 GIT binary patch literal 69902 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≈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

Lb*>y;t0nh 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Ü+10uyI(sxv9Xy&L${JLD=r6_GJoR;T zc?Wpyo>MsfwzV7`CW`5KlUrnR*9j~mE=$e+yxugDb0xL~b^^r1c*$};RwKNShFJwq OAvGoRy-Ed3%zpvDdihTP diff --git a/multiplayer_crosswords/webui/favicon.png b/multiplayer_crosswords/webui/favicon.png index 4af4d5fdc00b033d51a26a0dfae7d8e621dcf1d4..b4495227c04433eba1d2f1e58afcf3c769164d69 100644 GIT binary patch literal 12239 zcmV;=FEG%FP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;wH)0002_L%V+f000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2k8qA4_$V03ZNKL_t(|+I@Xn(_U9`=F@Af{eH3}^hpM6V}lQ1Y`_>U zG86^OxW*Jo6_s$4x#0(p`AM0pnM@@$6NW41f~l#=gyIjXfp6~c@$I;a#7 z2+YFP)Dub(O1 zTCEt&5C~drw&*xk+!!M!vG)!Uu|Z<2>xz^8i7gz8>xl@Zl=yRN%_eW?^F`3d0DRDS zKmaVY>4FvAQ38Dyp!e&&gIRFl!UZ%U#5NOVtbGNKxx#o1NGT|_q7>bBMEc=t@9~n% zY&)cy34^Ylq1&7QltLK2$Gz3G=z#XVZdNuk$Ce*MR~=W5)d`W91YyP?U3|DRc(4+z%ud|j*nvyR&sLnlB@1DcsS z5EZo600Q>1*A)Z8U`AzuE?SD&7KCZW=))$X#GnuXR48^!skZg(x>{?PC;b2$Xc5#} z<5@nrLerAFDRY}nrJzs&lh`#99}NtMlsUP@7K{ym51VdwwBWIrZz5(uJ-P};$wX6er}$K{2hz#^nm~-x=RH^)WoUN*70e6BW6bB8YsXY-deMl2G%}w zCcE13Kt6>~t2$>Ygg%Cunu#I=f@0>X)*9x(2e{T6TR0<*G1RULfNDsM=P1}j30Nk& zsI{QhhPk`bd$53o)ybMEDYk+ql99N!qsL+>08j|T6Ak&d5p(QHeSS@dX_|SRG*+i9 zf(Fn;FTERzVY72{GHOw?vg+r0!piQUTPqw_fr<;;7Mu33)d-D#C zXlg~XNfU@UdV&b0-N6`x;$e9q`14!5ov-v-QENkO)ol9!ucA9ZQix>Nwpu|{u=0w| zYiwijfGJIy<93H`>ey)G2pJ66;5ot~Y=a@#N@8a4FqmuaU&^%8`d>+_T#-|uf>Hz! zj!6jr#u6*v$HT`V0x&~fY-mjYlsb2?Kif^9n=_ax(nY3Y*d%=nQnXvBpfnGj6fgHN zFhZT^+5js0phAXT5SZT42Z#*r z&4F-;+RUs~n{2;!i*x{yvYEIs#s-z>b%{=}oe|C?Oc~EW4vG?~6m{VC{t~O6W9Par zbA;sY@9!{JsfrdWxK*VK*rGc}r;xCtN-s3DWr46@zpg;<1_^m%D;=VW2v##YVp};u zdc*5#gZ<@+H1K0_1VS5!?K`6o0fwtHM2xtChv9U)-^gZUnhM{s8sHIHOHfj_lSXEK zD8b3H;fkC_DG>v-rq_w@lH|`@z(K>isAPj=ro^Ja#=M1fRn18;%EA#;K+J=Qs8v^g zA05LSJCX^>TRsPTzO#gBqLYAr#U@@rR8fkAtqzkTqJARYUng$ZduM{p=@sULv{Fnk zZM(!y)%P`LEWXkyg2BzA@f}$Uswm`d?hKi2`&tz0F@T6*U01B@s*&+v)I^#=5cYpv z*NJ!xdisP23+kdft*=fO*kq>d>JBSH|00IbCqxtr!x)l5(TV%y$M(UL{Q;WTYk`fnSBxkJoEh*&UJHE0SmWb^>D1zJNt zIsz=hCU8?nJT?^je5V{4>!c~#8XE?H?Aq#lRE`;pJ*~9_EO*{0B4{TL0Yd?e0V1PG z2Oxx{HC-*F_?#+Xw8;cA58JXeR*^oqqAd%Wt^O{8zB;WvxpvPL%onnl#JQSn5TJu$ z?5lq~2RR1_O;9j+K#b2KC}N|8$Rf9p2F;&eOF_@iPf@Hd5Z@J``Fv+`Spq0fh=`Qv}09XMOEGKHQTkZo^6`Xy!b79}xj^(+HXpoNcWIQN^s+t7%f( z8mq^gWJ%7=P2DiOuRDV=Sd{N^9wr>Cu2f+*!i{}gHiI^pH$EkJowUj`<2sO_r;P^} zn=~p10oyd`2u4BT-Xcm}&zqPXZfEXF@r;^ZXY{>N-#SKQ5xW0`6Nhr}{D$CloYh5N+AZpkO^#Dt=Q7vGX+UAB)he6Cq;FUVr)|fnlyAJh=+j!sr8rp|YG85#ha*}1j zf`Ji%S(sQ`G`gytTBqRl#TJ4TNwl{Fx8v}bjXsIz^EUobwspjA^2Ldi;IUX=$1WV2 z4Pq@d@P98o?5C52Zl7zbGsx=By(bev1vRLLhW&oUFd{BedTCYaBzP7}10l~NM^qSz z7V}BfO_w5_JZWsUIw<0jlSK*>Noe{& zk~?UJP`<)TEm(FtwANx3jWN(Y-RGGibFLm_0qVThwMTH`v+M~T&n-yGe!-w+FwmIL z4}wVUXD27{44P8UipIpuph46KFpZUzbe$ujfSi=r(Mf-cLD~6yk3nEgR!xo!zxLo= zZB>Xt@VSd8$=Co1)RTh|wg1cHL4?t}L{2wWQbG-yNXI6E_SB;zD4&c{Ypkqd_LnHj zPZX(;MN9fkmQq9ok2O$~(*$D3#&LQPG8U2|@DngFVEJnbRL4xp#3u8o6E+9l=GV{mH2f=6E9aB!6IGvE0PWKm*v@yk)MHC9N(k)J|2JIS_S8Xms3ZmQCQ6I3;0-p(15s?OPK4ahQZc%bDh*4Q0=RfiiiWjMY660#aeu07Fn`kZ3fq zBoi!205Dgy5_fL$@-O#awU$kCeiM;95J73q-e94F$&=w^3)O{V%y+`7=CPq{*v$Fef${lK`A%FDFe(T&Lmy zHNGR!)NE*QY$E%~-)E>gpO0Emef1^?8BwpW`h{xo2P5+2BPD9o8DqmuwakZ%-Z84? zSrM!vVOf?4%bB~Gonk4t?6fs~SDi)O@6r1TDw(3DsTc@oH=|MJsjmsz*WwMNSi)^J z(R6aYtC$&;n(B{AHA*5Aa%vt_hA2r0Kp=2XBZtW#kD}qu++dcNa}fgqY&t59&IQ|S zs?2C#QXr;gXPA>!Gtp{+Pz`MCIM%mR?*qNBDl4HDnjsf?35#hlM^F^1BXWv1`J6Fg zTPj^cvD(N}kRfv{@%O$E#*oOvYGBpFBzS_q$Q=Twr0^)E8qr1@)0jCR9g7l*hpgmt zlM~FXiM4_vrve5e5eOQHjnNY?gCOGOO}3(0PUeGIaI)W{^d3-_OdULUpvXi4!zQ@* zF#{b;X`qW}RXGO?=kmvh3|Clmwh(*Vq`l~5@8UaEeCw)GQ!Bi^4 z?_(?51ik7zM$)TtMA9&t+sCL_GDx3OH@i02(3@}H!1F)(aVXoe5;{9R&zWY$z*IJ5 zk>Qpr&FBTo^=!+XY|og zOO0;`)m^HOSl1PAz4ayX?ec(eMdK~X~$2oh(UXvJ0GutZI?T$44xvq-Vh|t$HgvQR;9v$r>O}bzg zDN<&wjktXI5?*=bw|L}{hjG_kr}6WP7eS@qqaS?&XV0F6h+uzmf?B5%un=L{?Nmw9 zJ7_UM^SXjd2la#NM9|lcWw%&*R#2SZU}k*%>tDy;{_U4>>()(l6XFU>N_tZWZdn+6 zOV$q)8+kktYPecJqA#>xSM+tAL0Cv`O`9r=*Is`eU;gr!@#Y(EVqH7_@8ADDUikHk z%HdnRfhRLqR2JiP1uWCal11hk(ONBo2?l)OK(Hx;8e`zfl~?iAul`S5zI++ae*gOl zt8WXSC~6G$t4cUkxHdNQjps%nf_2sB_qEUKTubYy<=4OdHGcQI-{JW9IM9yD2>XV` zBOBPo*i9IUa)jef42gWJt!e(&iy>Am0?B;+ZnwivfBI8A_`dhy{Dt$l@4ov`O2P5* zxp~i&3tn2C6*HF0aNa30c0vBR*;M-68QbhDmbT!>KmG~szyE&hc02TS#W%nCEnL5T zU3Xhbyab_0Qe`Oop{?_R~<{Po}9 zbD#Sh&YwSzK5PZs>e=u2`2FvHkLNEwk01Qt2l)Q8&*J|*^9-JO<{3Qq+;e#K)mL%r z+cWE4?s(Rwa?n4qC~O71`W`JdzDc7fYr8e>17MM zj0Y(uq#FAXgq|xOa-zeP)(%*D@A&bLeuRJi=a=!>&pwSCZ@-Om$LH{qpFD>%XHMe- z@BaV_66)(Q{B7XbID>y!X9{1jRFCKjGK`gc5WWR?%aP8VP{PLH-!dq`Wiw}PA zgLvqnhp_B+Sd6Nkny0C28iVnpAN?4=dHFYZ`st@}2>?PnwnaJ$ZM_X?%D5gwA-QBzj?Cfr_cQuwKhEd;U{qGPHKKiT8$w{PImrAv6> zg%|MTlTYG(?|UCwTQqVvMfcBt_8g8*-GztV|0wqR6P4Z+9l&K-P)kKmV&t{2!NLyK zB9v2i-KBilevh^+T74L?L&ATw+o9HqbzSw{neh+b{-)Q6=`1d7K`o41C%4pL zSbc!=H|}6sZD6Zj9KFY%fhkmS=(Tvx7qdW3M6h^$04bE)EjzTO+3J}(pD`HEKmR=5 zeB%u~{q)l~efl(ZyB&BiPEKyA0~C)y3o0sVt2ll73_kkNkK(}xAH=u6{cYU1aRZM( z{&=c>oEfW92)kvc0~RtHiQqIPx0GgC8fZ-ECJ5*TQGIKdf}nVuIq-;o3ZONWIm0$G zTUlG^`A4vuY-;7ng;!HI_~i7ysuC_&l!U0a&ZLe>-5rV@I_=hK5PCoR*-vr(+I4*T z)1SfFvu8JojbitV>K*eHxiI70xpR2xsi*Mz>#yU*7k{0SNv??eshWj}cH#Sa9R*8~EWr z{Scq{#3yiM=&81vwzA`TnQ*eqo#w03w|#33pZw$}@xy=mAx=(CqMFjVp24h|*FH3+ zfK{{?*dc<+1PiHE7CtYkLGMY*jl!6NkG zH4?IkYf7#crJ_9-S~EDAgE2D^asa)2RXXep+ZsDa)0}RrovU$Y44Db~VgZ)0;PRzQ zc<+1Ps{vjgCjF39%TUc%S&m|8Zo*@QSZuZ`-B&&Q@Wc4UFMffWH*am&OG>3y&Wnw~ zW^((?1w`t$hS_tf-NkBCsE~GLZDz{7Gk{h6u&bPnav-l#C+J`p&(gaVYmYI&bvCPT zL?aP|xv+OVs1IO}`H9H>M^*bYWhez#uU*AG_uPZCXU|v=*s)rQ(|4L$Q&r-53+@BF@GPUE z8MsYzWHn+CL|M|3<>Qu;tgT{MmOvT3uc%T((miR4Vr(H#+h=A9<`bg&uxw?D>R0r` zue|yy-gE!`p^$F&{Lu&2bstbJ*V`7Fs3>TZ-lLY+!9gLy{rBIGYuB!Ap6>ycv#Y`a zSgDdg2d?*lK2A{fu02&?Qp&PHP&9xODF`^wDSPG&^`}TH?DxVei;*{nMwlko&Lub+d~+o8IOMR!8id zcn+GTq;C$e+cRevb>c=8sAbr-Sbcy_+L*yeO4}5}^^|s0kLsFPXPe=yFOp$JCCmb@ z4Mdr*F|k4)u2)`X1VxN|ZJ~Kj)Ac}PQ*Vn@MCY7|b1SRC&P^ka1d)q1c3S(I zsOMofH3^8l>$!8sc*_)i|mi z7Q|WNl3JD(Qydamm1HdygIsF3U1{D&&Bac!?ac-vm8N?Cw$>`fs3B_YeQYW)4|}iG zRwGR~M#t&Xr}5TXZ{ePM?uqgrUu}+|dn8vxGi*sk*IL6^7F#qX7xac9DfgXg+9=g2 zD6dnd53rqHDy(2+@;bWmOC+MG5Gpk^?|WfAgG%8kP0ao(FtDv2rwE2QF7^s@N_`({ z(`&8wTkk#Dz_7kncjmZyl5siO&W_NZf6qPl;L@c_)4>Tg74ZrNS|}Ra!RDaR7fszH zjyzW2P1SlNjy&HCE6wdWgSDj-JlYN*unwz7b_IlW4QoqS0q-6*lU$++87~uZY4>io zL=(R(T$)l9g;LA1Cp}Ci)79+!)*YONcE>g=CF7B{g86l}6a=Y#4pgCXTNty`UY^4zhLm11l z;A0>A7@m3N8SMA_w9=PJXUnwfv(*emgAOMSwO8E;N<|?uZ&HfQI4}h4PJSh+;x?sL zX3AoMb8UB_>8pq^M!zF7ni_r3CfY2?!8)dvq(&}wt=m5yO6T^?OG|13RimL1dxcHv z!0T-VYOB~;YVSSoc@N(G?swyvXP&{y$;oVMW+a#AAP7?c?7V(CKt-h#y!g^f_|A8} zgFpP?59sUI(8IZ(Q8NUUcRDAhy-8dp1eM9StyQR-#Lc8>SQ9dV3e2#U6ks^@J8Xcr z_J0yrZJA0iMb-zwYt1ul+BaoSfkQ{N3Lnlu6zgF!zq5nFG)Trp;yhs*!OdglOyF4<}*- z={U`9GhgBGzIl}B12_u?|kPw@!juy7Y{t}03LkkAsnAOXI-&)+vO{qHb-x009e|B&wlo4yzs&c zxPJXc2+aHiTwJy(C3RC`Nqm`zW11$?YxHGy z@7;$-hGnxVvnbZ>uV#1Jw#!OuXsi%)cqhRXK$Q)g^D4#Gnzb(;u^7DlBN5>}_uYqk z{^U>a!V53pTi^U9?!NnO+;`u-IDPsw&Yn4o^B2xXy_a(TvxS$BE7K7-Lf(;4R3U)9|cRW<}Wrvob5anHl@Bx8BcnQ-R{ST7_43QVL2C_9Jn=-BPqLO^!?dS<-w%E0LwM}558~+P6#Ck1 ziBIML01pRAL_t)e3V)2T$uqmY^CZa@eepT8^njJetdHouo3)tDKcZcZ%<^5Q$pL`= z`(OWOdEbK%MP+#mv~{H2bTW@_=p3D5*}IM;>Y`Ap8c98<$-8S=$E+LIuHy8WGdO?Y zg7x~D&-Zp?(RtiEsi$gsZJtj3f1@b4AR@f|_6^ihapvqh?7kBwMr%pg zYD0a}+=u0~B@3sHDA<@PVSAT^D1U$D3ff=(<$uEIGiPEomQ-^^W%l%;gZ}wAXeI2C zWE41f18!5;<>si)i65Uo#((^azrfMaUAR-D|IMQg_4l&~s@g#1mj<{2~M6w2gD`;=N`6iZS7yN`P6};bm?%!X{9QkUF z{{3bjbN_y%PJ_7{x~uQp;lAVCF&=sJu~{E5=5sX#+EJ)RIy5@-TE{EDj#GVtx3~9m z1jL-V*O~d502fbg;po&|c;o|*ZJVm5`h;2cpnrCXI=Gzlt!`Fb&6iu;ME=B{zxIyb zzH(W8fcJ#!qsK&f4VFt11yE`@k{VO`9Uo}9)ySvHL^|H)MhPrcvmGCwi+0G@uV2GI ze(xVarQoTjp2F$Vr?ox8x}q&)wFRr1y*45@e6-s^0IYqrNLAl&5Wu5G{TrP+3UxFs z%j_dPII8|@D(YLXXe+nS^9$Bh&p7b9gHrT5F$w;%n`0-1F@{FMg_K`&y%c$U0L%$% zK0sMQ7mj+@DR*d@)8H{st2ZdMo(R$X(AoyWdwAA6l-4W23L!&~FAz1qwRDsLVJ&!$G}kK8s`X1yFObnl&K$G z8GTF$9M?I$5!IWsLeyIUHEy$zecL~O5@?4?u3SImY^Kr)9QDN8ew?#8UMBlO8Ac^F z#b8{#coCOhc?JLDD__xktxRr6n}uxKYi2@kBqf|226UF)n)1n+^T39_Hkx}$eA9u{ z#Ep2N5;=4q)Tj>-PSj1R4~Qsu4Y+H%pxh2%+rOWqkm zXC%L{ttPzh-h1)HM?PX@O>9xP3B?l4tVP^7;G3p=QU}5)VaP^8ANNevlhK9_a$8*D z6*4YK97#@s)DJIm6J8(CCv}6AsGliWC@EuBi!z|jCBbZXA7cVBEAdk5UX_5QmMK(|ZEH{ORqYfl@yQ>H{ENFT@kNKXrEpQMT^!oRl3Ky1>tlHxoHXP+Cpu42YPWQdF>^J<%4?j~ zw9%ZJt@c8XZn@SRy&g*KJ;L_nQ=F!OJJknhr$*jug%5ViM)RL*8ALI%%F%u7qV8h) zP*@Ga7&9l`klOZ+)RiRn*$fHD!O%q3CDSpaI)e}7|b9R&@xXJ@}vzY9UUclU6z=-dV#&)bS_-;u2XiPniG6H zI2cCPCjr39n)DyAoNH~Ul{Tk(f)BRk*$$*zk<-ox53_c2hIQI;hd zNvX_+<2b~1uMu!-SjZxAhhT{QfPLz_4)wU@`GaAbL!OFY6`}nK*4qYxocvp zbt_*?UEPauFg;E=;;lZ_+IEg*q?D|Ss!d@ zmC09}U_+qg<2V?W)b<|Fc7BU%@m(rjo%^tXV|d#}BdNTnoAB(oVz%G&!vsoNAJY>p zv(L4+1pszYAjozKNE;kg>i!+OW!Z>>C8cEZ0DFV-5FU>{n?}hJQDoEyM5}uV0rHF= zvLvQK;^?h}f;esPtXQt#+YsF-Q<|y^hqbUJo&k0C$Ka3+wd?JKXbEnibt5Yb` zKoj;=OO!{pY&D*U$84LH^0=J()-e~=vo6^gm)O~E<{TcDs1IPkk3NK|He748TK7j` zuMcRUhErK4QX_K;MzusY8bpBFygmIGsgTadIL@juXdmckc7b`6iLPkYq78A{p{Jgl zHTjF&M`um$bGy_p#QBu`JQ%*bBUC<4v-?rm!DG7$zNz!z5Ds z{8pW(nIhdRGt8~-TPa`*@?5pe%xLK-EWhup55R3okrpQb*}-IzI2P^x#{j7ii&N85 zKcoOO;%jp!B+rNo^Z=S8EiZ zQ53Lg)4VP8tYJz7x3^@RN4!?Rj;#`G+e`9hqSeP_T6@+fERp2#6OlS~)pe)TB$bIw z0!mU(&0g*K?%=(ZzRcDER8LX!CuNdTG)|hZBi$IXq@?gjCTXss>~nPS!Q`tu?GQYfk6tq+|}Ott=u-toY$> zt!=vOw${K_pBo4Kgpy-Rh($%D%NM(+6w6lKW)bvgV;;%advr|CX3Fh?@zplO7jRL)u;^FbggxI!Mk_$uIb23CFE{Y zhcZ9kNjW1=rG!36W#bHp9kW==MqJ=Y6Hl2s|Af>JIwLdRX(P^1o;y2^c?3)!HIk~@ zNYAEY+ah^ll^;{>H4nC@Qb0jTPlr8ZN((7#MZuo42#pY|&p$wVHWy9lMjVt-5XYOi zXx4W{RLC4Eq0Q`!KCoJTx7dk*LfcvbZxbVZwpo+etz$;9t%8RB%<7de-h>a^0MBz4 zvi6YgdnJ#Qxr2(ay;HjAM;U^)iU3cvB*+A8F*HH!1PYm^Dm5+j1PQ2s%l4RYSYfm$ zZld^`({bi0^pA5O;~i|E zDLUBbnt^#X=CB&%Wl^QZR6h(zmsu!IQ@+^Z*mUIP-F_U?_C#x>9wAR>B&mY&eu`?Vvl) z?2qkrU$ZCbVM)@Iu5+rK58I!L#XX*JDC-%yMX)(t!_Jc29+IP~uX!3Cr-LiAN=}3~ z2W5H;A;|~$VQ-4>XX8BGMYD6FSD3hB&U33Sbj=Ras~{Z}Y3fg}}geoH#d6=%$UJw-i4hls1{J2<2UooeIDmG>7row8t?*E`!h(Euj28Ww=59x^a z`Fye}$yC*WbVwR#+e4p+My%cwLZaAgs-`)yr{0RpZIvJOx)J%(Y&iz=EncJB(<#_W zi_H4m+*o5>_c0NwmL?QKI&re==vbrvfa7pw=aqK5T?C4^HLOjjOsghqD8qA&avUaM zt%~QnDm9|*bjGGLdCMnWlVf!vv{K{9)ga#t?-!m>yT)Gn^0FVe1b)li_n!XVLC{ zzqhK#Vd+UtgtO&!b3H-SA*41pw{9`k(oL#Z!p?g~Lti|rOgg#NW-KsUVMq_XC-VsP zS}7`lsZMiS^D2s?76)$KIsp~cBGuM5MJAGtu+^@)dkgY(m$ru?2 zdY!fnSf?l|^_mZL-B#RnCrvpKaN)vv{O*;@xN-e@D)pf_B7NI)U)fUEpZfXlSw`u= zpr+!F(0F=;YH>)Rg5FoW{q{|~@WL-cSmtNXWMQ%Yz3z0ry=^~c#Y>#Pahud$!sqzz dKe>4m{~v`-3_A(5Nwoj~002ovPDHLkV1nW4tlaG2#;R8Rx~L8Pjb958S23pGw*Jind$c(?|$jx%;Rh<_zQ@Lin5QsapIr| z=Gq$<{xP4lgCwm3G&}#2aZT=k=OF}p%QHn@LfHDR#xS2=p_|42BRG4+i@9Ya$BR$0 zakmcWhUT5F4RArhtjo83CVQ8AFWhPFj=!(nGxQX9#a1tHj4Ml$UKjVPk3RpjOI?Pb zrEV^MO4Lf?k7!keJBaV6Bdo`xhr}Y0HKi@uLF0&^DQc&x`(H&xt+r9{-xR%tPMDx7 zX=HTp>40&|C)a80hxsW3TUPV-1CAUr{d!tu#~l#MpG8tpS{vJ|S(PR`twT!7|L z=0Yl6_v`B=c{)^pr6z>{gzZZZ*Mu)emsvO29^yPpi0c|;c8d8}0friI(r z%G?AvIK0X_9#g>;-f#<-C;(8FIea+cDhy-6MV@F&8&jSy-0)*)iNgM$U?zcoM4MiW z#)gH2_=iRV*hqh$X#Y!6Bw}=cl)0r1-Z_n53;>`9mL|pyag(cey{s=Rp6u_eXd=Tj zYHL-$LTQu+M^2V})gNz(YW{8T02CqRW}f1jZ_e}E9`Q9K&#y0U#eHVxj>nasF) zmHVQi=#{tYXeaGzAoUZD0<75_m7CfAJ8M&w)zxJCs!LiGXa@p8 zZhLJiM>FVcS!1KHA$wD}&YiBdyiKRm-#;S?17#Hz{(Wq+)Xetk2Ow3z@RwlFyE+>* z^1BlJ~N z1d#diRksUpvenhq;lEfB8d_TA<>lmw!m(#*jL#MW8e(DBA|7$Cz2?niWG$aO8*2SG z*KvOS+1@N+)|Vo$nVr32pDIY`Ng$UW0v0<%TbN%-_0%FPw6w4Oe%Q4|7Ey{82{;_ z;?*26mD%@C{8|%tlpB?{iRqVEbNPneT6gU1?9%%B%s^kI5qTII-a9%P1|~8K{Sqre zDRFMnj{k8QM367%CAqv@+S=N>tffV)NX4sfpS{Nc9I$sJ`}+FEew2c4#I3T<;AN8oNVVur=dq!wQa-6Rh3kdf}|jh`B!U zw!d1jc1S}BWwI$qEHEgD14!BbTmEAx3AdMJA`QaM07EGrA4fTahANkolr;GD^8=}` zmwLlG*|)}CxGRh8?(Pa^ncN;7mn-P@PGu4pbslYH_Ei875)z`FxE+l9dA=odYPN_` z<5>B?JYNodVk5z6Z>+-V>(Y{C{QUx=2;bKHpm6TBYvnaHd`e16jmkYTW2RS$`dVU* zdqbdKLRltblO7pU&b=ZBH=Qa62QByc>ciu1a{h~+|DSa?#+kY6KkR9hm5>k3Ay!LI zJUl#pQ>m6wc!r@*h3X}4D=zixCvNAe*;SI%ryGA4+l4>HWk8Q|TGoa|(%s#~TM!v1 zj-L8r1*Y8BW&HqKVNa{A4Ke;xGsY$B;arl-&~SOu(1j|8h7YSzp_f}eEXpE3KjQ!k znTI;4vCNjE^6qV~&gq_~Eu8oB^TX{3LAPwtXta0Z1mR<7<3ya93I%t(ZED}CWxA?Q zBm+~C;Z&1kC8bqYhUa_q;sr9H1HA7k#W?ZiBqKxwqH1#f;l*$D_i08Uxge_Ri-L)c z9|}W*{MX?BQ-i>r|5ud$XW<3czcdR4J7r0|b^okPhRC6G(FV|dW^TkP634CC^Y<*- znhkuaF3+KbXtI#oIR}4Uj0gZyfLRx#fIH9V&*Rd{~2&_iX-Ib$BBpF0r&n30PE$7ai z8yL8~XMxD?7lKk|qIJ$_YlEJp4GrPod3_J7MJYF1@uLASklw82`c6S81rKs>Y|I{2 zI8<;X+e8`;hj&e<9ORXjiU&_T<x6h-+ASTpJ8Oe^rS*(tA1Y_NBxWps5*CEysD4!Y&IJV(#Xk4R83vIDEO6y9MuPGEe#XFhs!A`hK;f@ zw0njr{Fw}nn(>k`@lkU6@Ib0l4P`u#!uZ_vbMepOGgVNL{Ql8TpRV=vU_cKQ-BLmA z0S`tgDw-rF>dt=GZj>{n{Yo~}Lkgf36iyWl7in71-LHXph|@!|*vSN&Y|J@veo&Qy z-#7S7bOuoeFM-C95rVonKTo3^fu@0A=AP{D@BjQg4)5uCEo$)ggd1H51#!sam*}BkGfmFC zqdC>k?5k$B66{=EhgPz-u3y$b*txm!Js5=m;cZi@@MGm}PSVstFh4V~ZN=xFo{93+pSS7s2@hAj(O&;z7pimD)&ayU@MyX*!8Y*zkF}5V zbQ$w&GoWmhSK~ofR6N_g7aq#NfL`A-?(K0x{nsQIQ*9(up$2zla}9+5!b4O6JnN+| z(Mt;}8gWds1Mz+}_RYI@Ino!61;OgLarZ8B#L}kn+qXasP0g%OJn|Sf7*X-LDhMdu z-WmuW4aAd(IWs#h1qkOogQRSbgaq3azeM&56Y<3S#nnVT1N;CRWYqoa14+uP;OpO?5$ zd*FdOuC=1v=^Rs2Q@_9T9Y$PI6vdKAXOD3odFHBgST$;DYTiw*XY}-PX*8NY6)l?M z6A%Car;G;I+MhbiyT9X6zyOnJ8WW>A`QgLooxP$fdSEqz#$iE%(9AC^sQKB8LV=;7 zA-t<=_S?5kxp{d?6LC1fqo6@+Y7(ias6Z(w_%%C`@wkc;A6mjPZ67n3cg_}FLi+?} z&nz(S{IwMQ{zcLrxg_Fxh2N(sXE`~!@Pqv%y@XAOZtTj%f=}FC%WKMD;ej(1N?G|{ zV++T5Q!(dXmQ6pwUdaNx|NA5groz0k3fi-ehoM6-HX#iD*h8a(u9O&TU-^u8tFF4~ zjYsNlZ=fRCgJt-iC7IHvf1`JS@=N@;{(^Fyfw|$okg}E++Aanuwgu;9z|z##qz>av F{wETpDDnUR diff --git a/multiplayer_crosswords/webui/keyboard.js b/multiplayer_crosswords/webui/keyboard.js index 81ae929..1035d82 100644 --- a/multiplayer_crosswords/webui/keyboard.js +++ b/multiplayer_crosswords/webui/keyboard.js @@ -41,7 +41,12 @@ export class MobileKeyboard extends LitElement { return html`

- ${html`
${this.collapsed ? '▲' : '▼'}
`} + ${html`
+ + + + ${this.collapsed ? '▲' : '▼'} +
`}
${rows.map((r, idx) => { diff --git a/multiplayer_crosswords/webui/menu.js b/multiplayer_crosswords/webui/menu.js index 86d1d65..b7a061a 100644 --- a/multiplayer_crosswords/webui/menu.js +++ b/multiplayer_crosswords/webui/menu.js @@ -130,6 +130,13 @@ export class CrosswordMenu extends LitElement { notificationManager.info('Creating session...'); } + _toggleDataInfo() { + const element = this.querySelector('.data-info-details'); + if (element) { + element.style.display = element.style.display === 'none' ? 'block' : 'none'; + } + } + render() { if (this._loading) { return html` @@ -152,7 +159,9 @@ export class CrosswordMenu extends LitElement { return html`
`; diff --git a/multiplayer_crosswords/webui/styles.css b/multiplayer_crosswords/webui/styles.css index fff46e4..f6bc54d 100644 --- a/multiplayer_crosswords/webui/styles.css +++ b/multiplayer_crosswords/webui/styles.css @@ -657,26 +657,38 @@ mobile-keyboard .key-spacer { mobile-keyboard .handle { position: absolute; - top: -2.4rem; - left: 50%; - transform: translateX(-50%); + top: -1.6rem; + left: 0.75rem; + transform: none; background: - repeating-linear-gradient(87deg, transparent, transparent 3px, rgba(255,255,255,.02) 3px, rgba(255,255,255,.02) 5px), - repeating-linear-gradient(22deg, transparent, transparent 4px, rgba(255,255,255,.015) 4px, rgba(255,255,255,.015) 6px), - repeating-linear-gradient(59deg, transparent, transparent 3px, rgba(0,0,0,.02) 3px, rgba(0,0,0,.02) 5px), - repeating-linear-gradient(-11deg, transparent, transparent 4px, rgba(0,0,0,.015) 4px, rgba(0,0,0,.015) 6px), - repeating-radial-gradient(circle at 12% 18%, rgba(255,255,255,.02) 1px, transparent 1px), - repeating-radial-gradient(circle at 67% 77%, rgba(0,0,0,.03) 1px, transparent 1px), - repeating-radial-gradient(circle at 34% 51%, rgba(255,255,255,.015) 1.5px, transparent 1.5px), - linear-gradient(135deg, #0a0805 0%, #0f0c09 100%); - color: #a89f99; - padding: 0.55rem 0.9rem; + repeating-linear-gradient(87deg, transparent, transparent 3px, rgba(255,255,255,.01) 3px, rgba(255,255,255,.01) 5px), + repeating-linear-gradient(22deg, transparent, transparent 4px, rgba(255,255,255,.008) 4px, rgba(255,255,255,.008) 6px), + repeating-linear-gradient(59deg, transparent, transparent 3px, rgba(0,0,0,.012) 3px, rgba(0,0,0,.012) 5px), + repeating-linear-gradient(-11deg, transparent, transparent 4px, rgba(0,0,0,.008) 4px, rgba(0,0,0,.008) 6px), + repeating-radial-gradient(circle at 12% 18%, rgba(255,255,255,.01) 1px, transparent 1px), + repeating-radial-gradient(circle at 67% 77%, rgba(0,0,0,.015) 1px, transparent 1px), + repeating-radial-gradient(circle at 34% 51%, rgba(255,255,255,.008) 1.5px, transparent 1.5px), + linear-gradient(135deg, #1a1512 0%, #0f0c09 100%); + color: #7a7268; + padding: 0.35rem 0.6rem; border-radius: 0.25rem 0.25rem 0 0; - border: 1px solid #2a2520; + border: 1px solid rgba(58, 53, 48, 0.4); cursor: pointer; - box-shadow: 0 -2px 8px rgba(0,0,0,0.5); - font-size: 0.9rem; - font-weight: 600; + box-shadow: 0 -1px 3px rgba(0,0,0,0.3); + font-size: 0.75rem; + font-weight: 500; + letter-spacing: 0.05em; + text-transform: uppercase; + opacity: 0.75; + transition: opacity 0.2s ease; + display: flex; + align-items: center; + justify-content: flex-start; + gap: 0.3rem; +} + +mobile-keyboard .handle:hover { + opacity: 0.95; } mobile-keyboard[collapsed] .keyboard-container { transform: translateY(calc(100% - 2.6rem)); } diff --git a/multiplayer_crosswords/webui/sw.js b/multiplayer_crosswords/webui/sw.js index 46f10f3..b62c2dd 100644 --- a/multiplayer_crosswords/webui/sw.js +++ b/multiplayer_crosswords/webui/sw.js @@ -1,8 +1,20 @@ const cacheName = 'pwa-conf-v4'; const staticAssets = [ - './app.js ', - './websocket.js' //TODO: add all necessary files - + './', + './index.html', + './app.js', + './main.js', + './websocket.js', + './grid.js', + './clue_area.js', + './keyboard.js', + './menu.js', + './notification-area.js', + './notification-manager.js', + './styles.css', + './manifest.json', + './favicon.png', + './big_icon.png' ]; diff --git a/pyproject.toml b/pyproject.toml index 1fbad06..5b21faf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,17 @@ pytest = "^7.0" [tool.poetry.group.dev.dependencies] jupyterlab = "^4.4.3" +[[tool.poetry.packages]] +include = "multiplayer_crosswords" + +[[tool.poetry.include]] +path = "multiplayer_crosswords/webui" +format = "sdist" + +[[tool.poetry.include]] +path = "multiplayer_crosswords/webui" +format = "wheel" + [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api"