1
0
forked from GitHub/gf-core

gfse: grammars in the cloud, still primitve, but good enough to be installed on the server, I think

This commit is contained in:
hallgren
2011-07-07 16:57:59 +00:00
parent 8e47fa6d88
commit 5f624dce85
2 changed files with 71 additions and 19 deletions

View File

@@ -34,7 +34,7 @@ function initial_view() {
function draw_grammar_list() { function draw_grammar_list() {
local.put("current",0); local.put("current",0);
editor.innerHTML=""; editor.innerHTML="";
var uploaded=local.get("json_uploaded"); var uploaded=local.get("dir") && local.get("json_uploaded");
var cloud_upload= var cloud_upload=
a(jsurl("upload_json()"), a(jsurl("upload_json()"),
[node("img",{"class":"cloud", [node("img",{"class":"cloud",
@@ -84,13 +84,22 @@ function new_grammar() {
edit_grammar(g); edit_grammar(g);
} }
function remove_local_grammar(i) {
local.remove(i);
while(local.count>0 && !local.get(local.count-1))
local.count--;
}
function delete_grammar(i) { function delete_grammar(i) {
var g=local.get(i); var g=local.get(i);
var ok=confirm("Do you really want to delete the grammar "+g.basename+"?") var ok=confirm("Do you really want to delete the grammar "+g.basename+"?")
if(ok) { if(ok) {
local.remove(i); remove_local_grammar(i)
while(local.count>0 && !local.get(local.count-1)) var dir=local.get("dir")
local.count--; if(dir && g.unique_name) {
var path=dir+"/"+g.unique_name+".json"
ajax_http_get("upload.cgi?rm="+encodeURIComponent(path),debug);
}
initial_view(); initial_view();
} }
} }
@@ -158,7 +167,7 @@ function draw_plainbutton(g,files) {
} }
function upload_button(g) { function upload_button(g) {
var b=button("Upload",function(){upload(g);}); var b=button("Compile",function(){upload(g);});
b.title="Upload the grammar to the server to check it in GF and test it in the minibar"; b.title="Upload the grammar to the server to check it in GF and test it in the minibar";
return b; return b;
} }
@@ -889,6 +898,20 @@ function find_langcode(concs,langcode) {
return null; return null;
} }
function cleanup_deleted(files) {
var keep={}
for(var i in files) keep[files[i]]=true;
//debug("cleanup_deleted "+JSON.stringify(files))
//debug("keep "+JSON.stringify(keep))
for(var i=0;i<local.count;i++) {
var g=local.get(i,null)
if(g && g.unique_name && !keep[g.unique_name+".json"]) {
debug("cleanup "+i+" "+g.unique_name);
remove_local_grammar(i)
}
}
}
function grammar_index() { function grammar_index() {
var index={} var index={}
var count=local.count var count=local.count
@@ -922,8 +945,8 @@ function merge_grammar(i,newg) {
return keep; return keep;
} }
function download_json(dir0) { function download_json() {
var dir= dir0 || local.get("dir"); var dir=local.get("dir");
var index=grammar_index(); var index=grammar_index();
var downloading=0; var downloading=0;
@@ -951,32 +974,43 @@ function download_json(dir0) {
newg.index=null; newg.index=null;
save_grammar(newg); save_grammar(newg);
} }
if(downloading==0) setTimeout(function(){location.href="."},3000); if(downloading==0) done()
}
function done() {
setTimeout(function(){location.href="."},2000);
} }
function download_files(ls) { function download_files(ls) {
local.put("current",0); local.put("current",0);
var files=ls.split(" "); if(ls) {
for(var i in files) get_file(files[i],file_downloaded,file_failed); var files=ls.split(" ");
cleanup_deleted(files);
for(var i in files) get_file(files[i],file_downloaded,file_failed);
}
else {
debug("No grammars in the cloud")
done()
}
} }
get_list(download_files); get_list(download_files);
} }
function download_from_cloud() { function download_from_cloud() {
var olddir=local.get("dir",null)
var uploaded=local.get("json_uploaded");
var newdir="/tmp/"+location.hash.substr(1) var newdir="/tmp/"+location.hash.substr(1)
local.put("dir",newdir);
if(olddir && uploaded && newdir!=olddir) { function download2(olddir) {
function download() { download_json(newdir) } if(newdir!=olddir) {
function rmolddir(){
ajax_http_get("upload.cgi?rmdir="+olddir+"&newdir="+newdir, ajax_http_get("upload.cgi?rmdir="+olddir+"&newdir="+newdir,
download,download) download3)
} }
upload_json(rmolddir) else download4()
} }
else download_json(newdir) function download3() { upload_json(download4) }
function download4() { download_json() }
get_dir(download2)
} }
function timestamp(obj,prop) { function timestamp(obj,prop) {

View File

@@ -145,6 +145,7 @@ case "$REQUEST_METHOD" in
ContentType="text/plain; charset=$charset" ContentType="text/plain; charset=$charset"
cgiheaders cgiheaders
cd "$path" cd "$path"
shopt -s nullglob
echo_n *-*.json echo_n *-*.json
else else
error404 error404
@@ -162,6 +163,7 @@ case "$REQUEST_METHOD" in
ContentType="text/plain; charset=$charset" ContentType="text/plain; charset=$charset"
cgiheaders cgiheaders
cd "$path" cd "$path"
shopt -s nullglob
rm *.gf *.gfo *-*.json *.pgf grammars.cgi rm *.gf *.gfo *-*.json *.pgf grammars.cgi
cd .. cd ..
rmdir "$path" rmdir "$path"
@@ -195,6 +197,22 @@ case "$REQUEST_METHOD" in
*) error400 *) error400
esac esac
;; ;;
rm=*)
file=$(qparse "$QUERY_STRING" rm)
case "$file" in
/tmp/gfse.*/*.json) # shouldn't allow .. in path !!!
path="$documentRoot$file"
if [ -r "$path" ] ; then
ContentType="text/javascript; charset=$charset"
cgiheaders
rm "$path"
else
error404
fi
;;
*) error400
esac
;;
*) error400 *) error400
esac esac
esac esac