From 158aafa3af15db6fda40a2fdceae63662e08fbf1 Mon Sep 17 00:00:00 2001 From: hallgren Date: Fri, 23 Nov 2012 23:21:17 +0000 Subject: [PATCH] gf -server + gfse: show modification time of public grammars --- gf.cabal | 1 + src/compiler/GFServer.hs | 17 +++++++++++++++-- src/www/gfse/editor.js | 14 +++++++++----- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/gf.cabal b/gf.cabal index 49d7d734a..2044f9b50 100644 --- a/gf.cabal +++ b/gf.cabal @@ -112,6 +112,7 @@ executable gf directory, random, old-time, + old-locale, process, pretty, mtl, diff --git a/src/compiler/GFServer.hs b/src/compiler/GFServer.hs index a6e4c5a52..d84363cb2 100644 --- a/src/compiler/GFServer.hs +++ b/src/compiler/GFServer.hs @@ -12,7 +12,10 @@ import GF.System.Catch(try) import System.IO.Error(isAlreadyExistsError) import System.Directory(doesDirectoryExist,doesFileExist,createDirectory, setCurrentDirectory,getCurrentDirectory, - getDirectoryContents,removeFile,removeDirectory) + getDirectoryContents,removeFile,removeDirectory, + getModificationTime) +import System.Time(toUTCTime,formatCalendarTime) +import System.Locale(defaultTimeLocale,rfc822DateFormat) import System.FilePath(dropExtension,takeExtension,takeFileName,takeDirectory, ()) #ifndef mingw32_HOST_OS @@ -200,6 +203,7 @@ handle state0 cache execute1 "remake" -> make skip_empty dir . raw =<< get_qs "upload" -> upload id . raw =<< get_qs "ls" -> jsonList . maybe ".json" fst . lookup "ext" =<< get_qs + "ls-l" -> jsonListLong . maybe ".json" fst . lookup "ext" =<< get_qs "rm" -> rm =<< look_file "download" -> download =<< look_file "link_directories" -> link_directories dir =<< look "newdir" @@ -233,7 +237,16 @@ handle state0 cache execute1 skip_empty = filter (not.null.snd) - jsonList ext = fmap (json200) (ls_ext "." ext) + jsonList = jsonList' return + jsonListLong = jsonList' (mapM addTime) + jsonList' details ext = fmap (json200) (details =<< ls_ext "." ext) + + addTime path = + do t <- liftIO $ getModificationTime path + return $ makeObj ["path".=path,"time".=format t] + where + format = formatCalendarTime defaultTimeLocale rfc822DateFormat + . toUTCTime rm path | takeExtension path `elem` ok_to_delete = do b <- liftIO $ doesFileExist path diff --git a/src/www/gfse/editor.js b/src/www/gfse/editor.js index 4fba8b44c..ed8988f79 100644 --- a/src/www/gfse/editor.js +++ b/src/www/gfse/editor.js @@ -131,7 +131,7 @@ function draw_grammar_list() { var unique_id=local.get("unique_id","-") var t=empty_class("table","grammar_list") for(var i in files) { - var file=files[i] + var file=files[i].path var parts=file.split(/[-.]/) var basename=parts[0] var unique_name=parts[1]+"-"+parts[2] @@ -139,13 +139,17 @@ function draw_grammar_list() { var del = mine ? delete_button(rmpublic(file),"Don't publish this grammar") : [] - var tit = mine + var tip = mine ? "This is a copy of your grammar" : "Click to download a copy of this grammar" + var modt=new Date(files[i].time) + var fmtmodt=modt.toDateString()+", "+modt.toTimeString().split(" ")[0] + var when=wrap_class("small","modtime",text(" "+fmtmodt)) t.appendChild(edtr([td(del), - td(title(tit, + td(title(tip, a(jsurl('open_public("'+file+'")'), - [text(basename)])))])) + [text(basename)]))), + td(when)])) } publiclist.appendChild(t) } @@ -153,7 +157,7 @@ function draw_grammar_list() { publiclist.appendChild(p(text("No public grammars are available."))) } if(navigator.onLine) - gfcloud_public_json("ls",{},show_public,no_public) + gfcloud_public_json("ls-l",{},show_public,no_public) var home=div_class("home",table(tr([userlist,publiclist]))) home.appendChild(empty_id("div","sharing")); editor.appendChild(home)