summaryrefslogtreecommitdiff
path: root/src/editor
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2011-07-07 16:57:59 +0000
committerhallgren <hallgren@chalmers.se>2011-07-07 16:57:59 +0000
commitc4f1fbbc9ad7efb7ec1e0286f8659f299c2330b8 (patch)
treef4465f48e0b4f633312e0839149c75f1a6bca417 /src/editor
parentc7fffd861b4fa74afc450be2970cd8cf63f64a88 (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.js72
-rw-r--r--src/editor/simple/upload.cgi18
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