From 6354358caa1dfbf2fe1d481f6ac5fba3775938fc Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Tue, 22 Dec 2020 21:42:55 +0100 Subject: Blog integration --- blog/sidebar.ml | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100755 blog/sidebar.ml (limited to 'blog/sidebar.ml') diff --git a/blog/sidebar.ml b/blog/sidebar.ml new file mode 100755 index 0000000..ed4b856 --- /dev/null +++ b/blog/sidebar.ml @@ -0,0 +1,131 @@ +open StdLabels +open Brr +open Brr_note +open Note + +(** Return the sidebar *) +let get + : unit -> El.t option + = fun () -> + + List.find_opt (El.children @@ Document.body G.document) + ~f:(fun t -> El.has_tag_name El.Name.aside t) + +let rec clean + : El.t -> unit + = fun el -> + List.iter (El.children el) + ~f:(fun el -> + (* Remove the links from the sidebar, keep h1 and other stuff *) + if (El.has_tag_name (Jstr.v "nav") el) + || (El.has_tag_name (Jstr.v "ul") el) then + El.remove el + else + clean el + ) + +(** Create a slider element, and the event on change *) +let slider ~at = + let slider = + El.input ~at () in + + let event = + Evr.on_el + Ev.input + (fun _ -> + let raw_value = El.prop El.Prop.value slider in + Jstr.to_int raw_value) + slider + in + slider, event + +let click_event el = + Evr.on_el + Ev.click + Evr.unit + el + +let show_value = function + | None -> El.txt' "" + | Some input -> + El.txt (Jstr.of_int input) + +let add_button + : El.t -> unit E.t + = fun element -> + + let open El in + + let delete = + button + [ El.i + ~at:At.[ class' (Jstr.v "fas") + ; class' (Jstr.v "fa-times-circle") ] + [] + ; txt' "Delete "] in + + let delete_event = click_event delete in + + let export = + button + [ El.i + ~at:At.[ class' (Jstr.v "fas") + ; class' (Jstr.v "fa-download") ] + [] + ; txt' "Download"] in + + + let nib_size, value = + slider + ~at:At.[ type' (Jstr.v "range") + ; v (Jstr.v "min") (Jstr.v "0") + ; v (Jstr.v "max") (Jstr.v "50") + ; id (Jstr.v "nib_size") + ] in + + let width = El.div [] in + Elr.set_children + width + ~on:(value + |> E.map (fun v -> + [ txt' "Width : " + ; show_value v ] + ) + ); + + let input_angle, angle_event = + slider + ~at:At.[ type' (Jstr.v "range") + ; v (Jstr.v "min") (Jstr.v "0") + ; v (Jstr.v "max") (Jstr.v "90")] in + let angle = El.div [] in + Elr.set_children + angle + ~on:(angle_event + |> E.map (fun v -> + [ txt' "Angle : " + ; show_value v + ; txt' "°" ] + ) + ); + + let click = Evr.on_el Ev.click Evr.unit delete in + let _ = click in + + let () = + El.append_children element + [ hr () + ; delete + ; export + ; hr () + + ; width + ; nib_size + ; El.br () + + ; angle + ; input_angle + + ] + in + delete_event -- cgit v1.2.3