ctoken: RawToken,
player: PlayerId,
gen: Generation,
- space_attrs: SvgAttrs,
- rect_attrs: SvgAttrs,
+ space_attrs: Html,
+ rect_attrs: Html,
uses: Vec<SessionPieceContext>,
defs: Vec<(VisiblePieceId, Html)>,
nick: String,
session_inner(form, layout.map(|pl| pl.0))?
}
+#[ext]
+impl SvgAttrs {
+ fn to_html(&self) -> Html {
+ let mut o = String::new();
+ for (k,v) in self {
+ write!(o, r##"{}="{}""##, k, v).unwrap();
+ }
+ Html::from_html_string(o)
+ }
+}
+
fn session_inner(form: Json<SessionForm>,
layout: Option<PresentationLayout>)
-> Result<Template,OE> {
player,
defs: alldefs,
uses,
- space_attrs: space_table_attrs(table_size),
- rect_attrs: space_table_attrs(table_size),
+ space_attrs: space_table_attrs(table_size).to_html(),
+ rect_attrs: space_table_attrs(table_size).to_html(),
nick,
sse_url_prefix,
player_info_pane,
{% endmacro errors %}
{% macro space() %}
- <svg id="space"
- xmlns="http://www.w3.org/2000/svg"
-{%- for attr in space_attrs %}
- {{ attr.0 }}="{{ attr.1 }}"
-{%- endfor %}
- >
- <rect fill="{{ table_colour }}" x="0" y="0"
-{%- for attr in rect_attrs %}
- {{ attr.0 }}="{{ attr.1 }}"
-{%- endfor %}
- />
+ <svg xmlns="http://www.w3.org/2000/svg"
+ id="space" {{ space_attrs }} >
+ <rect fill="{{ table_colour }}" x="0" y="0" {{ rect_attrs }} />
<g id="pieces_marker"></g>
{%- for piece in uses %}
<use id="use{{ piece.id }}" href="#piece{{ piece.id }}"