From: Ian Jackson Date: Wed, 8 Jul 2020 01:51:03 +0000 (+0100) Subject: raise seems to work X-Git-Tag: otter-0.2.0~1399 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ef589fe710a4ec389a740400d747d54bc422274d;p=otter.git raise seems to work --- diff --git a/src/bin/server.rs b/src/bin/server.rs index d63b7f5b..e8e0775c 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -87,7 +87,7 @@ fn session(form : Json) -> Result { let mut pieces : Vec<_> = ig.gs.pieces.iter().collect(); - pieces.sort_by_key(|(_,pr)| !pr.raised.0); + pieces.sort_by_key(|(_,pr)| pr.raised); for (gpid, pr) in pieces { let pri = PieceRenderInstructions { @@ -329,7 +329,7 @@ impl ApiPieceOp for ApiPieceRaise { -> (PieceUpdateOp<()>, Vec) { let pc = gs.pieces.byid_mut(piece).unwrap(); pc.raised = gs.gen; - let update = PieceUpdateOp::Raise; + let update = PieceUpdateOp::Raise(); (update, vec![]) } } diff --git a/src/global.rs b/src/global.rs index 4e6aee4c..69f6aac7 100644 --- a/src/global.rs +++ b/src/global.rs @@ -55,32 +55,32 @@ impl PreparedUpdate { #[derive(Debug,Serialize)] pub enum PieceUpdateOp { - Delete, + Delete(), Insert(NS), Modify(NS), Move(Pos), - Raise, + Raise(), } impl PieceUpdateOp { pub fn new_state(&self) -> Option<&NS> { use PieceUpdateOp::*; match self { - Delete => None, + Delete() => None, Insert(ns) => Some(ns), Modify(ns) => Some(ns), Move(_) => None, - Raise => None, + Raise() => None, } } pub fn map_new_state NS2>(self, f:F) -> PieceUpdateOp { use PieceUpdateOp::*; match self { - Delete => Delete, + Delete() => Delete(), Insert(ns) => Insert(f(ns)), Modify(ns) => Modify(f(ns)), Move(pos) => Move(pos), - Raise => Raise, + Raise() => Raise(), } } } diff --git a/templates/script.ts b/templates/script.ts index f8b670da..da9ee814 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -232,6 +232,14 @@ function drag_mouseup(e: MouseEvent) { let dragraise = +pelem.dataset.dragraise!; console.log('CHECK RAISE ', dragraise, dragraise*dragraise, ddr2); if (dragraise > 0 && ddr2 >= dragraise*dragraise) { + let marker = piece_element('raisemarker',piece); + if (marker == null) { + marker = document.createElementNS(svg_ns,'defs')! as + SVGGraphicsElement; + marker.setAttributeNS(null,'id','raisemarker'+piece); + drag_uelem!.parentNode!.insertBefore(marker, drag_uelem!); + } + raise_piece(drag_uelem!); api_piece(api, "raise", piece, drag_uelem!, { }); } if (dragging == DRAGGING.MAYBE_UNGRAB || @@ -307,6 +315,16 @@ pieceops.Modify = function console.log('MODIFY DONE'); } +function raise_piece(uelem: SVGGraphicsElement) { + uelem.parentElement!.appendChild(uelem); +} + +pieceops.Raise = function +(piece, info: { } ) { + var uelem = piece_element('use',piece)!; + raise_piece(uelem); +} + pieceops.Move = function (piece, info: Pos ) { var uelem = piece_element('use',piece)!; @@ -317,9 +335,14 @@ pieceops.Move = function messages.Recorded = function (j: { piece: PieceId, cseq: ClientSeq, gen: Generation } ) { - var uelem = document.getElementById('use'+j.piece)!; + let piece = j.piece; + var uelem = document.getElementById('use'+piece)!; if (uelem.dataset.cseq != null && j.cseq >= +uelem.dataset.cseq) { delete uelem.dataset.cseq; + let marker = piece_element('raisemarker',piece); + if (marker != null) { + marker.remove(); + } } gen = j.gen; } @@ -327,6 +350,11 @@ messages.Recorded = function function uelem_checkconflict(piece: PieceId, uelem: SVGGraphicsElement) { if (uelem.dataset.cseq == null) { return; } delete uelem.dataset.cseq; + let marker = piece_element('raisemarker',piece); + if (marker != null) { + uelem.parentElement!.insertBefore(marker,uelem); + marker.remove(); + } add_log_message('Conflict! - simultaneous update'); }