From 6ab07c0557a49a21c91b7cfd54d65c3b0f9d1a60 Mon Sep 17 00:00:00 2001 From: ygrek Date: Mon, 12 Oct 2009 14:41:56 +0300 Subject: [PATCH] + edit --- lang.ml | 7 ++++--- page.ml | 46 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lang.ml b/lang.ml index 0deb09a..e44f59f 100644 --- a/lang.ml +++ b/lang.ml @@ -3,14 +3,15 @@ open Printf class en = object method main_page = "Main page" -method add_comment = "Add comment" +method add_comment = "Add" method not_found = "Not found" end class ru = object inherit en method main_page = "Главная страница" -method add_comment = "Добавить комментарий" -method view_comment = "Просмотреть комментарий" +method add_comment = "Добавить" +method view_comment = "Просмотреть" +method edit_comment = "Редактировать" method no_item = sprintf "Нет такого : %s" end diff --git a/page.ml b/page.ml index 90a848e..cfb587c 100644 --- a/page.ml +++ b/page.ml @@ -13,12 +13,15 @@ let document heading extra x = let doc heading x = document heading [] x -let input_text ~title () = +let input_text ~title ?(id="") ?(init="") () = form ~a:[a_method `Post] ~action:(uri_of_string "") (h1 [t title]) [ - (p [textarea ~rows:20 ~cols:80 ~a:[a_name "text"] (t"")]); - (p [input ~a:[a_name "submit"; a_value "Submit"; a_input_type `Submit] ()]); + (p [textarea ~rows:20 ~cols:80 ~a:[a_name "text"] (t init)]); + (p [ + input ~a:[a_name "id"; a_value id; a_input_type `Hidden] (); + input ~a:[a_name "submit"; a_value "Submit"; a_input_type `Submit] () + ]); ] let ahref s = a ~a:[a_href (uri_of_string s)] @@ -128,10 +131,45 @@ method render args = ] end +class edit_comment ctx = object(self) +inherit base +method children = [] +method url = "/edit_comment" +method name = z#edit_comment +method render args = + let store = Store.create "comments" in + let show_index () = + ul (List.map + (fun x -> li [ahref (Printf.sprintf "%s?id=%u" self#url x) [t (string_of_int x)]]) + (List.sort ~cmp:compare (get_index store))) + in + try + match arg "id" args, arg "text" args with + | Some n, Some text -> + let n = int_of_string n in + (match Store.get store (`I n) with + | Some text -> Store.add store (`I n) text + | None -> ()); + raise (Redirect (Printf.sprintf "/view?id=%u" n)) + | None, _ -> + doc self#name + [ + header self [ctx]; + show_index () + ] + | Some n, None -> + doc self#name + [ + header self [ctx]; + input_text ~init:(Store.get store (`I (int_of_string n)) >> Option.default "") ~id:n ~title:self#name () + ] + with _ -> doc self#name [ header self [ctx]; show_index ()] +end + class main = object(self) inherit base method comment = new comment self -method children = ([new comment self; new view_comment self]:>base list) +method children = ([new comment self; new view_comment self; new edit_comment self]:>base list) method url = "/" method name = z#main_page method render args = -- 2.11.4.GIT