"serde",
]
+[[package]]
+name = "heck"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+dependencies = [
+ "unicode-segmentation",
+]
+
[[package]]
name = "hermit-abi"
version = "0.1.17"
"serde_json",
"serde_with",
"slotmap",
+ "strum",
"thiserror",
"toml 0.5.7",
"typetag",
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+[[package]]
+name = "strum"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
+dependencies = [
+ "heck",
+ "proc-macro2 1.0.24",
+ "quote 1.0.7",
+ "syn 1.0.48",
+]
+
[[package]]
name = "subtle"
version = "1.0.0"
"tinyvec",
]
+[[package]]
+name = "unicode-segmentation"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
+
[[package]]
name = "unicode-xid"
version = "0.1.0"
serde_json = "1"
serde_with = "1"
slotmap = { version = "0.4", features = ['serde'] }
+strum = { version = "0.20", features = ['derive'] }
thiserror = "1"
toml = "0.5"
typetag = "0.1.6"
type WRC = WhatResponseToClientOp;
+#[derive(Clone,Copy,Debug,Eq,PartialEq,Serialize,Deserialize,EnumString)]
+pub enum PresentationLayout {
+ Portrait,
+ Landscape,
+}
+
+impl<'r> FromParam<'r> for PresentationLayout {
+ type Error = strum::ParseError;
+ fn from_param(param: &'r RawStr) -> Result<Self, Self::Error> {
+ param.as_str().parse()
+ }
+}
+
+impl PresentationLayout {
+ pub fn template(self) -> &'static str {
+ match self {
+ PresentationLayout::Portrait => "session",
+ PresentationLayout::Landscape => "landscape",
+ }
+ }
+}
+
#[derive(Debug,Serialize,Deserialize)]
struct ApiPiece<O : ApiPieceOp> {
ctoken : RawToken,
#[derive(Serialize,Debug)]
struct LoadingRenderContext<'r> {
- ptoken : &'r RawTokenVal,
+ ptoken: &'r RawTokenVal,
+ layout: PresentationLayout,
}
#[get("/")]
#[throws(OE)]
-fn loading(ptoken: WholeQueryString) -> Template {
+fn loading_p(ptoken: WholeQueryString) -> Template {
+ loading(PresentationLayout::Portrait, ptoken)?
+}
+#[get("/l")]
+#[throws(OE)]
+fn loading_l(ptoken: WholeQueryString) -> Template {
+ loading(PresentationLayout::Landscape, ptoken)?
+}
+
+#[throws(OE)]
+fn loading(layout: PresentationLayout, ptoken: WholeQueryString) -> Template {
if let Some(ptoken) = ptoken.0 {
- let c = LoadingRenderContext { ptoken : RawTokenVal::from_str(ptoken) };
+ let c = LoadingRenderContext {
+ ptoken: RawTokenVal::from_str(ptoken),
+ layout,
+ };
Template::render("loading",&c)
} else {
let c = FrontPageRenderContext { };
.attach(Template::fairing())
.manage(cors_state)
.mount("/", routes![
- loading,
+ loading_l,
+ loading_p,
resource,
updates,
])
pub use std::os::unix;
pub use std::time::Instant;
pub use std::path::PathBuf;
+pub use std::string::ParseError;
pub use std::os::unix::ffi::OsStrExt;
pub use std::env;
pub use std::process::exit;
pub use if_chain::if_chain;
+pub use strum::EnumString;
+
pub use crate::global::*;
pub use crate::gamestate::*;
pub use crate::pieces::*;
pub use crate::cmdlistener::*;
pub use crate::mgmtchannel::*;
pub use crate::api::{Lens,TransparentLens,ApiPieceOpError};
+pub use crate::api::{PresentationLayout};
pub use crate::utils::*;
pub use crate::spec::*;
pub use crate::debugreader::DebugReader;
struct SessionForm {
ptoken : RawToken,
}
-#[post("/_/session", format="json", data="<form>")]
-fn session(form : Json<SessionForm>) -> Result<Template,OE> {
+#[post("/_/session/<layout>", format="json", data="<form>")]
+fn session(form : Json<SessionForm>, layout: PresentationLayout)
+ -> Result<Template,OE> {
// make session in this game, log a message to other players
let iad = lookup_token(form.ptoken.borrow())?;
let player = iad.ident;
&player, client, &c.nick, &c.ctoken,
iad.gref.lock().ok().as_ref().map(|ig| &**ig));
- Ok(Template::render("session",&c))
+ Ok(Template::render(layout.template(),&c))
}
pub fn mount(rocket_instance: Rocket) -> Rocket {
<link rel="license" href="/_/libre">
<script defer>let wasm_input = fetch('/_/wasm.wasm');</script>
<script src="/_/wasm.js" defer></script>
+<script id="global-info" data-layout="{{ layout }}"></script>
<script src="/_/script.js" defer></script>
</head>
<body id="loading_body">
=> boolean;
interface DispatchTable<H> { [key: string]: H };
+var globalinfo_elem : HTMLElement;
var general_timeout : number = 10000;
var messages : DispatchTable<MessageHandler> = Object();
var pieceops : DispatchTable<PieceHandler> = Object();
function doload(){
console.log('DOLOAD');
+ globalinfo_elem = document.getElementById('global-info')!;
+ let layout = globalinfo_elem!.dataset!.layout!;
var elem = document.getElementById('loading_token')!;
var ptoken = elem.dataset.ptoken;
- xhr_post_then('/_/session',
+ xhr_post_then('/_/session/' + layout,
JSON.stringify({ ptoken : ptoken }),
loaded);