mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
gfse: grammars in the cloud, still primitve, but good enough to be installed on the server, I think
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user