diff options
| author | hallgren <hallgren@chalmers.se> | 2011-07-07 16:57:59 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2011-07-07 16:57:59 +0000 |
| commit | c4f1fbbc9ad7efb7ec1e0286f8659f299c2330b8 (patch) | |
| tree | f4465f48e0b4f633312e0839149c75f1a6bca417 /src/editor | |
| parent | c7fffd861b4fa74afc450be2970cd8cf63f64a88 (diff) | |
gfse: grammars in the cloud, still primitve, but good enough to be installed on the server, I think
Diffstat (limited to 'src/editor')
| -rw-r--r-- | src/editor/simple/editor.js | 72 | ||||
| -rw-r--r-- | src/editor/simple/upload.cgi | 18 |
2 files changed, 71 insertions, 19 deletions
diff --git a/src/editor/simple/editor.js b/src/editor/simple/editor.js index 9954c5f7e..90d85274b 100644 --- a/src/editor/simple/editor.js +++ b/src/editor/simple/editor.js @@ -34,7 +34,7 @@ function initial_view() { function draw_grammar_list() { local.put("current",0); editor.innerHTML=""; - var uploaded=local.get("json_uploaded"); + var uploaded=local.get("dir") && local.get("json_uploaded"); var cloud_upload= a(jsurl("upload_json()"), [node("img",{"class":"cloud", @@ -84,13 +84,22 @@ function new_grammar() { 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) { var g=local.get(i); var ok=confirm("Do you really want to delete the grammar "+g.basename+"?") if(ok) { - local.remove(i); - while(local.count>0 && !local.get(local.count-1)) - local.count--; + remove_local_grammar(i) + var dir=local.get("dir") + if(dir && g.unique_name) { + var path=dir+"/"+g.unique_name+".json" + ajax_http_get("upload.cgi?rm="+encodeURIComponent(path),debug); + } initial_view(); } } @@ -158,7 +167,7 @@ function draw_plainbutton(g,files) { } 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"; return b; } @@ -889,6 +898,20 @@ function find_langcode(concs,langcode) { 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() { var index={} var count=local.count @@ -922,8 +945,8 @@ function merge_grammar(i,newg) { return keep; } -function download_json(dir0) { - var dir= dir0 || local.get("dir"); +function download_json() { + var dir=local.get("dir"); var index=grammar_index(); var downloading=0; @@ -951,32 +974,43 @@ function download_json(dir0) { newg.index=null; 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) { local.put("current",0); - var files=ls.split(" "); - for(var i in files) get_file(files[i],file_downloaded,file_failed); + if(ls) { + 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); } function download_from_cloud() { - var olddir=local.get("dir",null) - var uploaded=local.get("json_uploaded"); var newdir="/tmp/"+location.hash.substr(1) - local.put("dir",newdir); - if(olddir && uploaded && newdir!=olddir) { - function download() { download_json(newdir) } - function rmolddir(){ + + function download2(olddir) { + if(newdir!=olddir) { 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) { diff --git a/src/editor/simple/upload.cgi b/src/editor/simple/upload.cgi index ec262a062..18d584b54 100644 --- a/src/editor/simple/upload.cgi +++ b/src/editor/simple/upload.cgi @@ -145,6 +145,7 @@ case "$REQUEST_METHOD" in ContentType="text/plain; charset=$charset" cgiheaders cd "$path" + shopt -s nullglob echo_n *-*.json else error404 @@ -162,6 +163,7 @@ case "$REQUEST_METHOD" in ContentType="text/plain; charset=$charset" cgiheaders cd "$path" + shopt -s nullglob rm *.gf *.gfo *-*.json *.pgf grammars.cgi cd .. rmdir "$path" @@ -195,6 +197,22 @@ case "$REQUEST_METHOD" in *) error400 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 esac esac |
