let node_remove (dr: node_ref) (b: b)
: b * output_event list =
begin match node_parent dr b with
| No_parent ->
(b, [])
| Page_parent(pr') ->
let p = page_assoc_valid pr' b in
let p' = { p with page_document = None } in
let b' = page_update pr' p' b in
(b', [ page_update_event pr' b' ])
| Parent_node(p) ->
begin match node_assoc_valid p b with
| Div_node(id, children) ->
let children' = List.filter (fun dr' -> dr' <> dr) children in
let b' = node_update p (Div_node(id, children')) b in
begin match node_page dr b with
| None -> (b', [])
| Some(pr') -> (b', [ page_update_event pr' b' ])
end
| _ -> assert false
end
end