2022-12-22 04:45:15 +00:00
<!DOCTYPE html>
< html lang = "en-US" >
< head >
< meta charset = "UTF-8" / >
< title > Felt< / title >
< meta name = "viewport" content = "width=device-width" / >
2023-07-12 05:57:06 +00:00
< link rel = "shortcut icon" href = "./favicon.png" / >
< link href = "./leaflet.css?v=1.9.4" rel = "stylesheet" / >
2023-07-22 05:49:14 +00:00
< link href = "./style.css?v=0.2.2" rel = "stylesheet" / >
2022-12-22 04:45:15 +00:00
< / head >
< body >
2023-07-13 05:49:07 +00:00
< noscript > < div id = "noscript_container" >
< img src = "./logo.svg" alt = "FELT VIRTUAL TABLETOP" / >
< p > < a href = "https://hacklab.nilfm.cc/felt" > Felt< / a > is a virtual tabletop webapp; therefore, the frontend is written in Javascript< / p >
< p > Enable Javascript in your browser to get your game on!< / p > < / div >
< / noscript >
2023-07-02 07:10:06 +00:00
< div id = "map" > < / div >
2023-07-08 07:42:31 +00:00
2023-07-19 07:43:06 +00:00
< div id = "err_wrapper" style = 'display:none' > < button id = "err_close" onclick = "closeErr()" > x< / button > < div id = "err_div" > < / div > < / div >
2023-07-08 07:42:31 +00:00
2022-12-22 04:45:15 +00:00
< nav >
2023-07-02 07:10:06 +00:00
< section id = "user_section" >
2023-07-10 05:41:30 +00:00
< details class = "ui_win" open > < summary > identity< / summary >
2023-02-20 17:40:25 +00:00
< label for = "name_entry" > username< / label >
2023-02-19 03:37:50 +00:00
< input id = "name_entry" onblur = "saveName()" >
2023-07-02 07:10:06 +00:00
< / details > < br / >
< details class = "ui_win" > < summary > goto< / summary >
< form id = "table_modal" onsubmit = "return false" >
2023-02-20 17:40:25 +00:00
< label > table.name< br > < input id = "input_table_name" > < / label > < br >
< label > table.passcode< br > < input id = "input_table_pass" > < / label > < br >
2023-07-02 07:10:06 +00:00
< button type = "submit" id = "table_join" onclick = "dial();" > Join< / button >
2023-07-13 05:49:07 +00:00
< button id = "table_leave" style = "display:none;" onclick = "leave()" > Leave< / button >
2023-01-28 07:28:15 +00:00
< / form >
2023-07-02 07:10:06 +00:00
< / details > < br / >
2023-07-03 05:10:58 +00:00
< div id = "tabletop" style = "display:none;" >
2023-07-06 04:27:38 +00:00
< details id = "dice_win" class = "ui_win" > < summary > dice< / summary >
2023-07-08 07:42:31 +00:00
< select id = "num_dice" >
< option > 1< / option >
< option > 2< / option >
< option > 3< / option >
< option > 4< / option >
< option > 5< / option >
< option > 6< / option >
< option > 7< / option >
< option > 8< / option >
< option > 9< / option >
< option > 10< / option >
< option > 11< / option >
< option > 12< / option >
< option > 13< / option >
< option > 14< / option >
< option > 15< / option >
< option > 16< / option >
< option > 17< / option >
< option > 18< / option >
< option > 19< / option >
< option > 20< / option >
< / select >
< label for = "dice_faces" > d< / label >
< select id = "dice_faces" >
< option > 4< / option >
< option selected > 6< / option >
< option > 8< / option >
< option > 10< / option >
< option > 12< / option >
< option > 20< / option >
< / select >
< input id = "dice_note" > < button id = "dice_submit" onclick = "rollDice()" > Roll< / button >
< div id = "dice_log" > < / div >
2023-07-02 07:10:06 +00:00
< / details > < br / >
2023-07-08 07:42:31 +00:00
2023-07-02 07:10:06 +00:00
< details class = "ui_win" > < summary > status< / summary > < pre id = "aux" > < / pre > < / details > < br / >
2023-07-08 07:42:31 +00:00
< details class = "ui_win" > < summary > token select< / summary >
2023-07-19 07:43:06 +00:00
< button id = "token_preview_clear" onclick = "dismissPreview()" style = "display: none;" > Dismiss Preview< / button >
< div id = "token_preview" > < / div >
< input hidden id = "token_preview_id" / >
2023-07-17 03:29:53 +00:00
< ul id = "token_select" class = "single_btn_list" > < / ul >
2023-07-08 07:42:31 +00:00
< / details > < br / >
2023-07-03 05:10:58 +00:00
< / div >
2023-07-08 07:42:31 +00:00
2023-07-02 07:10:06 +00:00
< / section >
2023-07-03 05:10:58 +00:00
2023-07-02 07:10:06 +00:00
< section id = "admin_section" >
< details class = "ui_win admin_win" > < summary > admin< / summary >
< form id = "admin_modal" onsubmit = "return false" >
< label > pass< input type = "password" id = "input_admin_pass" > < / label >
2023-07-03 05:10:58 +00:00
< button type = "submit" id = "admin_login" onclick = "doLogin();" > Login< / button >
2023-07-02 07:10:06 +00:00
< / form >
< / details >
< br / >
2023-07-08 07:42:31 +00:00
2023-07-19 07:43:06 +00:00
< div id = "admin_ui" style = "display:none;" >
2023-07-06 05:19:14 +00:00
< details id = "admin_table_win" class = "ui_win admin_win" > < summary > table< / summary >
2023-01-28 07:28:15 +00:00
< button onclick = "setTableCreateFormVisible(true)" > New Table< / button >
2023-07-19 07:43:06 +00:00
< form onsubmit = "return false" id = "table_creation_form" style = "display:none;" >
< label > Name< input id = "new_table_name" / > < / label > < br / >
< label > Passcode< input id = "new_table_pass" type = "password" / > < / label > < br / >
2023-01-28 07:28:15 +00:00
< button type = "submit" onclick = "createTable()" > Create< / button >
< button onclick = "setTableCreateFormVisible(false)" > Cancel< / button >
< / form >
2023-07-19 07:43:06 +00:00
< div id = "table_management" > < / div >
2023-07-06 05:19:14 +00:00
< / details > < br / >
2023-07-17 03:29:53 +00:00
2023-07-19 07:43:06 +00:00
< div id = "token_management" >
2023-07-06 05:19:14 +00:00
< details id = "admin_token_win" class = "ui_win admin_win" > < summary > tokens< / summary >
< button onclick = "setTokenCreateFormVisible(true)" > New Token< / button >
2023-07-19 07:43:06 +00:00
< form onsubmit = "return false" id = "token_creation_form" style = "display:none;" >
< label > Sprite< select id = "sprite_dropdown" onchange = "previewSprite(this)" > < / select > < / label > < br / >
2023-07-06 08:20:30 +00:00
< label > Name< input id = "token_name" / > < / label > < br / >
2023-08-03 00:15:45 +00:00
< label > Width< input type = "number" id = "token_width" min = "1" max = "9999" step = "1" onchange = "previewSprite(this)" / > < / label > < label id = "aspect_lock_label" for = "token_aspect_lock" > w:h locked< / label > < input type = "checkbox" checked id = "token_aspect_lock" onchange = "toggleAspectLock()" / > < br / >
2023-07-17 03:29:53 +00:00
< label > Height< input type = "number" id = "token_height" min = "1" step = "1" max = "9999" onchange = "previewSprite(this)" / > < / label > < br / >
< label > cX< input type = "number" id = "token_cx" min = "0" max = "9999" step = "1" onchange = "previewSprite(this)" / > < / label > < br / >
< label > cY< input type = "number" id = "token_cy" min = "0" max = "9999" step = "1" onchange = "previewSprite(this)" / > < / label > < br / >
2023-07-06 08:20:30 +00:00
< button type = "submit" onclick = "createToken()" > Create< / button >
2023-07-06 05:19:14 +00:00
< button onclick = "setTokenCreateFormVisible(false)" > Cancel< / button >
< / form >
2023-07-19 07:43:06 +00:00
< div id = "token_admin_preview" > < / div >
< ul id = "token_list" class = "two_btn_list" > < / ul >
2023-07-06 05:19:14 +00:00
< / details > < br / >
2023-07-17 03:29:53 +00:00
2023-07-06 05:19:14 +00:00
< details id = "admin_sprite_win" class = "ui_win admin_win" > < summary > sprites< / summary >
2023-07-19 07:43:06 +00:00
< div id = "sprite_zone" > < / div >
2023-07-06 05:19:14 +00:00
< / details >
2023-01-28 07:28:15 +00:00
< / div >
2023-07-17 03:29:53 +00:00
2023-07-06 05:19:14 +00:00
< / div >
2023-07-02 07:10:06 +00:00
< / section >
2023-07-12 05:57:06 +00:00
< details class = "ui_win" id = "theme_accordion" > < summary > theme< / summary >
< form id = "theme_cfg" onsubmit = "return false" >
< label > bg color< input type = "color" id = "bg_col_input" / > < / label >
< label > bg opacity< input type = "range" id = "bg_col_opacity" min = "0" max = "255" / > < / label >
< label > fg color< input type = "color" id = "fg_col_input" / > < / label >
< label > fg opacity< input type = "range" id = "fg_col_opacity" min = "0" max = "255" / > < / label >
< label > main color< input type = "color" id = "main_col_input" / > < / label >
< label > main opacity< input type = "range" id = "main_col_opacity" min = "0" max = "255" / > < / label >
< label > sub color< input type = "color" id = "sub_col_input" / > < / label >
< label > sub opacity< input type = "range" id = "sub_col_opacity" min = "0" max = "255" / > < / label >
< label > error color< input type = "color" id = "err_col_input" / > < / label >
2023-07-13 05:49:07 +00:00
< label > error opacity< input type = "range" id = "err_col_opacity" min = "0" max = "255" / > < / label >
2023-07-12 05:57:06 +00:00
< button onclick = "setTheme()" > Apply< / button > < button onclick = "resetTheme(defaultTheme)" > Reset< / button >
< / form >
< / details >
2023-07-13 05:49:07 +00:00
< div id = "lag" style = "display:none;" > lag...< / div >
2024-11-28 17:58:22 +00:00
< div class = "ui_win" id = "felt_info" > < a href = "https://forge.lightcrystal.systems/nilix/felt" > felt v0.3.0< / a > (< a href = "https://forge.lightcrystal.systems/nilix/felt/raw/branch/main/LICENSE" > license< / a > ) | built with < a href = "https://leafletjs.com" > leaflet< / a > (< a href = "https://forge.lightcrystal.systems/nilix/felt/raw/main/LEAFLET_LICENSE" > license< / a > ) < / div >
2023-07-02 07:10:06 +00:00
< / nav >
2023-01-28 07:28:15 +00:00
< / body >
2023-07-29 05:30:48 +00:00
< script > L _DISABLE _3D = window . location . hash . toLowerCase ( ) === "#no3d" ; < / script >
2023-07-12 05:57:06 +00:00
< script src = "./leaflet.js?v=1.9.4" type = "text/javascript" > < / script >
2023-10-29 06:04:22 +00:00
< script src = "./util.js?v=0.2.6" type = "text/javascript" > < / script >
< script src = "./map.js?v=0.2.6" type = "text/javascript" > < / script >
< script src = "./socket.js?v=0.2.6" type = "text/javascript" > < / script >
< script src = "./dice.js?v=0.2.6" type = "text/javascript" > < / script >
< script src = "./admin.js?v=0.2.6" type = "text/javascript" > < / script >
2023-07-28 05:34:45 +00:00
< / html >