summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2012-04-30 13:53:55 +0000
committerhallgren <hallgren@chalmers.se>2012-04-30 13:53:55 +0000
commitc10bd79e26803358e68c1ce89a98cc22b6101924 (patch)
tree7cb840fa834eb487f40d0e94aeca78adbf3da60f /src
parentc6c9b994d21af42a2dc7b8145967bf8c24bc2f7d (diff)
minibar_offline: Update the API exported by pgf_offline.js to be compatible with pgf_online.js
This makes the minibar offline demo work again.
Diffstat (limited to 'src')
-rw-r--r--src/www/minibar/minibar_offline.html67
-rw-r--r--src/www/minibar/minibar_offline.js18
-rw-r--r--src/www/minibar/minibar_offline.manifest4
-rw-r--r--src/www/minibar/pgf_offline.js29
4 files changed, 114 insertions, 4 deletions
diff --git a/src/www/minibar/minibar_offline.html b/src/www/minibar/minibar_offline.html
new file mode 100644
index 000000000..d4d7f3919
--- /dev/null
+++ b/src/www/minibar/minibar_offline.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html manifest="minibar_offline.manifest">
+<head>
+<title>Minibar Offline</title>
+<link rel=stylesheet type="text/css" href="http://www.grammaticalframework.org/src/www/minibar/minibar.css">
+
+<meta name = "viewport" content = "width = device-width">
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<meta charset="UTF-8">
+
+</head>
+
+<body class=minibar>
+<h2>Minibar Offline, technology preview</h2>
+<div id=beskrivning_intro>
+<p>
+<a href="javascript:dolj('intro')">[Hide introduction]</a>
+<br>
+<strong>These examples work flawlessly in the <a href="http://www.opera.com/browser/">Opera</a> web browser.</strong>
+They also work to some extent in Opera Mobile 11 and WebKit browsers
+(Safari and Chrome) and recent versions of Gecko browers (Firefox).
+A hardcoded
+<a href="http://tests.novemberborn.net/javascript/callstack-size.html">call stack size limit</a> still causes some problems.
+
+<p>
+How it works: a JavaScript translation of the Haskell PGF run-time library
+is downloaded and run in the browser. The binary PGF files are downloaded
+from the server, parsed and used in the normal way by functions in the PGF
+library. The brower is
+<a href="http://diveintohtml5.info/offline.html">directed to keep a
+local copy of everything</a>, so that you can have access to the minibar
+even when you are offline.
+</div>
+<p id=beskriv_intro style="display: none"><a href="javascript:beskriv('intro')">[Show introduction]</a>
+
+<div id=minibar>
+</div>
+
+<hr>
+
+<small>
+[<a href="http://www.altocumulus.org/~hallgren/hs2js/tests/">About hs2js</a>
+| <a href="http://www.grammaticalframework.org:41296/minibar/minibar.html">Minibar online</a>]
+</small>
+<small class=modtime>
+HTML <!-- hhmts start --> Last modified: Mon Apr 30 15:44:47 CEST 2012 <!-- hhmts end -->
+</small>
+<address><a href="http://www.cse.chalmers.se/~hallgren/">TH</a></address>
+
+<pre id=nodebug>
+</pre>
+
+<script type="text/javascript" src="http://www.grammaticalframework.org/~hallgren/hs2js/test/debug.js"></script>
+<script type="text/javascript" src="http://www.grammaticalframework.org/~hallgren/hs2js/test/json.js"></script>
+<script type="text/javascript" src="http://www.grammaticalframework.org/~hallgren/hs2js/test/builtin.js"></script>
+<script type="text/JavaScript" src="http://www.grammaticalframework.org/~hallgren/hs2js/test/Services.js"></script>
+<script type="text/javascript" src="http://www.grammaticalframework.org/~hallgren/hs2js/test/visadolj.js"></script>
+
+<script type="text/JavaScript" src="support.js"></script>
+<script type="text/JavaScript" src="minibar.js"></script>
+<script type="text/JavaScript" src="minibar_input.js"></script>
+<script type="text/JavaScript" src="minibar_translations.js"></script>
+<script type="text/JavaScript" src="minibar_support.js"></script>
+<script type="text/JavaScript" src="pgf_offline.js"></script>
+<script type="text/javascript" src="minibar_offline.js"></script>
+</body>
+</html>
diff --git a/src/www/minibar/minibar_offline.js b/src/www/minibar/minibar_offline.js
new file mode 100644
index 000000000..6069f1430
--- /dev/null
+++ b/src/www/minibar/minibar_offline.js
@@ -0,0 +1,18 @@
+
+var offline_options = {
+ grammars_url: "/~hallgren/hs2js/test/",
+ grammar_list: ["Foods.pgf","Smart.pgf","Phrasebook.pgf"]
+}
+
+var server=pgf_offline(offline_options);
+
+var minibar_options= {
+ show_abstract: true,
+ show_trees: false,
+ show_grouped_translations: false,
+ default_source_language: "Eng",
+ try_google: true,
+ random_button: false
+}
+
+var minibar1=new Minibar(server,minibar_options);
diff --git a/src/www/minibar/minibar_offline.manifest b/src/www/minibar/minibar_offline.manifest
new file mode 100644
index 000000000..b0e46cd62
--- /dev/null
+++ b/src/www/minibar/minibar_offline.manifest
@@ -0,0 +1,4 @@
+CACHE MANIFEST
+# 12
+NETWORK:
+*
diff --git a/src/www/minibar/pgf_offline.js b/src/www/minibar/pgf_offline.js
index cd2d40b1c..e5a3933a5 100644
--- a/src/www/minibar/pgf_offline.js
+++ b/src/www/minibar/pgf_offline.js
@@ -4,15 +4,22 @@ function pgf_offline(options) {
var server = {
// State variables (private):
grammars_url: "",
+ other_grammars_urls: [],
grammar_list: ["Foods.pgf"],
-
current_grammar_url: null,
pgf : null,
// Methods:
switch_grammar: function(grammar_url,cont) {
- //debug("switch_grammar ");
var new_grammar_url=this.grammars_url+grammar_url;
+ this.switch_to_other_grammar(new_grammar_url,cont)
+ },
+ add_grammars_url: function(grammars_url,cont) {
+ this.other_grammars_urls.push(grammars_url);
+ if(cont) cont();
+ },
+ switch_to_other_grammar: function(new_grammar_url,cont) {
+ //debug("switch_grammar ");
var self=this;
var update_pgf=function(pgfbinary) {
debug("Got "+new_grammar_url+", length="
@@ -20,11 +27,25 @@ function pgf_offline(options) {
self.pgf = {v: Services_decodePGF.v({v:pgfbinary}) }
//debug("done")
self.current_grammar_url=new_grammar_url;
- cont();
+ if(cont) cont();
}
ajax_http_get_binary(new_grammar_url,update_pgf);
},
- get_grammarlist: function(cont) { cont([this.grammar_list]); },
+ get_grammarlist: function(cont,err) {
+ if(this.grammar_list) cont(this.grammar_list)
+ else http_get_json(this.grammars_url+"grammars.cgi",cont,err);
+ },
+ get_grammarlists: function(cont,err) { // May call cont several times!
+ var ds=this.other_grammars_urls;
+ var n=1+ds.length;
+ function pair(dir) {
+ return function(grammar_list){cont(dir,grammar_list,n)}
+ }
+ function ignore_error(err) { console.log(err) }
+ this.get_grammarlist(pair(this.grammars_url),err)
+ for(var i in ds)
+ http_get_json(ds[i]+"grammars.cgi",pair(ds[i]),ignore_error);
+ },
get_languages: function(cont) {
cont(fromJSValue(Services_grammar.v(this.pgf)))