--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/httpd.conf Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,33 @@
+<VirtualHost *:80>
+ ServerName categoricaldata.net
+ ServerAlias colimit.net
+ ServerAdmin categoricaldata@tqft.net
+
+ DocumentRoot /Users/scott/projects/metaphor/src/main/website/
+
+ <Directory /Users/scott/projects/metaphor/src/main/website/>
+ Options Indexes FollowSymLinks MultiViews
+
+ # this disallows the use of .htaccess files.
+ # AllowOverride None
+
+ # so we have to do stuff here instead.
+ RewriteEngine on
+ RewriteBase /
+
+ Order allow,deny
+ allow from all
+
+ LimitRequestBody 0
+ </Directory>
+
+ # anything beginning with /metaphor is handled by the webapp
+ ProxyPreserveHost On
+ <Location /metaphor>
+ Order allow,deny
+ allow from all
+ ProxyPass http://localhost:8083/metaphor
+ ProxyPassReverse http://localhost:8083/metaphor
+ </Location>
+</VirtualHost>
+
--- a/src/main/webapp/index.html Sun Jan 15 22:23:07 2012 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-<html>
-<head>
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
-</head>
-<body>
-
-<hr>
-First, you'll need to load a dataset.
-<br/>
-
-<input id="dataset" value="TerminalBigraph"/>
-<button type="button" onclick="loadDataset()">Load dataset</button>
-<br/>
-
-<textarea id="dataset-display" rows="12" cols="60"></textarea>
-
-<hr>
-Next, specify a translation with the same source.
-<br/>
-
-<input id="translation" value="ReverseGraph"/>
-<button type="button" onclick="loadTranslation()">Load translation</button>
-<br/>
-
-<textarea id="translation-display" rows="12" cols="60"></textarea>
-
-<hr>
-Finally, you can ask the server to compute any of the following data migration functors:<br/>
-<button type="button" onclick="compute('pullback')">the pullback</button>
-<button type="button" onclick="compute('leftPushforward')">the left pushforward</button>
-<button type="button" onclick="compute('rightPushforward')">the right pushforward</button>
-<br/>
-
-<textarea id="result" rows="30" cols="120"></textarea>
-
-<script>
-function prettyPrint(json) {
- return JSON.stringify(json, undefined, 2);
-}
-</script>
-
-<script>
-var translation;
-var dataset;
-</script>
-
-<script>
-function loadDataset() {
-$.ajax({
- beforeSend: function(req) {
- req.setRequestHeader("Accept", "application/json");
- },
- type:"GET",
- url: "/metaphor/examples/datasets/" + $("#dataset").val(),
- success: function(data){
- dataset = data;
- $("#dataset-display").val(prettyPrint(data));
- }
- });
-}
-</script>
-
-<script>
-function loadTranslation() {
-$.ajax({
- beforeSend: function(req) {
- req.setRequestHeader("Accept", "application/json");
- },
- type:"GET",
- url: "/metaphor/examples/translations/" + $("#translation").val(),
- success: function(data){
- translation = data
- $("#translation-display").val(prettyPrint(data));
- }
- });
-}
-</script>
-
-<script>
-function compute(datafunctor) {
-$.ajax({
- type: "GET",
- url: "/metaphor/compute/" + datafunctor,
- data: { "translation": $("#translation-display").val(), "dataset": $("#dataset-display").val() },
- success: function(data){
- $("#result").val(prettyPrint(data));
- },
- error:function (xhr, ajaxOptions, thrownError){
- alert("An error occurred on the server. Response code " + xhr.status + ". " + thrownError);
- }
- });
-}
-</script>
-
-
-</body>
-</html>
-
--- a/src/main/webapp/jquery.html Sun Jan 15 22:23:07 2012 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-<html>
-<head>
-<script
- src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
-<script
- src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
-<link rel="stylesheet" href="stylesheet.css">
-</head>
-<body>
- <script>
- // make all the boxes draggable
- $(function() {
- $(".ontology-editor .box").draggable({ containment: ".canvas", stack: ".ontology-editor .box" });
- });
- </script>
- <div class="ontology ontology-editor">
-
- <div class="canvas" style="height: 400px">
- <!-- some draggable boxes -->
- <div id='an element' class="box"
- style="top: 25; left: 50;">
- <p>an element</p>
- </div>
- <div id='a pointed set' class="box"
- style="top: 25; left: 250;">
- <p>a pointed set</p>
- </div>
- </div>
-
- <!-- output -->
- <button
- onclick="$('.ontology-editor #output').val(generateOntology());">
- Generate DSL</button>
- <button
- onclick="$('.ontology-editor #output').val(generateJSON());">
- Generate JSON</button>
- <br />
- <textarea rows=20 cols=80 id="output"></textarea>
- </div>
-
- <script>
- function getBoxes() {
- return $(".ontology-editor .box").map(function() { return '"' + this.id + '"'; }).get();
- }
- function generateOntology() {
- return "Ontology(\n" + " objects = List(" + getBoxes().join(', ') + "))"
- }
- function generateJSON() {
- alert("Not implemented.");
- }
- </script>
-</body>
-</html>
\ No newline at end of file
--- a/src/main/webapp/ontology-editor.js Sun Jan 15 22:23:07 2012 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-// boxes stores all the current ontology boxes
-var boxes = [];
-
-// arrows stores all the current ontology arrows
-var arrows = [];
-
-// relations stores all the current ontology relations
-var relations = [];
-
-var ontology = {
- 'boxes': [],
- 'arrows': [],
- 'relations': [],
- 'display': { }
-}
-
-function generateJSON() {
- // TODO
- // just take ontology and strip out display
-}
-
-function generateDSL() {
- // TODO
-}
-
-function loadJSON(json) {
- // first, check if json contains 'editor-state'
- // if note, rebuild it
- // now, reinitialize the canvas from the editor-state
-}
-
-function updateTextareas() {
- $('ontology-JSON').val(JSON.stringify(generateJSON()));
- $('ontology-DSL').val(generateDSL());
-}
-
-function createBoxRectangle(x, y) {
- var WIDTH = 100, HEIGHT = 50, ROUNDING = 5;
- var box = r.rect(x, y, WIDTH, HEIGHT, ROUNDING);
- var color = Raphael.getColor();
- box.attr({fill: color, stroke: color, "fill-opacity": 0.5, "stroke-width": 2, cursor: "move"});
- return box;
-}
-function addLabel(c, label) {
- label = typeof(label) != 'undefined' ? label : ''
- var OFFSET_x = c.getBBox().width / 2, OFFSET_y = c.getBBox().height / 2;
- return r.text(c.attr('x') + OFFSET_x, c.attr('y') + OFFSET_y, label);
-}
-
-function createBox(x, y, label) {
- var box = createBoxRectangle(x, y);
-
- box.label = addLabel(box, label);
-
- box.addArrow = r.circle(0,0,3)
- .transform(translationString(box.right()) + "t-10,0") // position just inside the right edge
- .attr({ fill: '#ffffff', stroke: '#0000cc', 'stroke-width': 2 }) // blue, and filled (transparently)
- .hover(function() { this.glowing = this.glow(); }, function() { this.glowing.remove(); }); // glow on hover
-
- dragToCreateArrow(box.addArrow);
-
- box.receiveArrow = r.circle(0,0,3)
- .transform(translationString(box.left()) + "t10,0") // position just inside the left
- .attr({ fill: '#ffffff', stroke: '#0000cc', 'stroke-width': 2 }) // blue, and filled (transparently)
- .hover(function() { this.glowing = this.glow(); }, function() { this.glowing.remove(); }); // glow on hover
- // TODO make invisible (activate only while drawing an arrow
-
-
- var set = r.set()
- set.push(box, box.label, box.addArrow, box.receiveArrow);
- box.draggable(set);
-
- boxes.push(box);
- return box;
-}
-
-
-// Basic dragging functionality, e.g. for boxes.
-// x.draggable(set) makes x draggable, moving everything in set (optional) along too.
-
-Raphael.el.draggable = function(set) {
- set = typeof(set) != 'undefined' ? set : r.set();
- this.dragWith = set;
- this.drag(dragUpdate, dragStart, dragStop);
-}
-Raphael.st.draggable = function(set) {
- this.forEach(function (el) {
- el.draggable(set);
- });
-};
-
-var dragging = {};
-function dragStart() {
- dragging.ox = this.attr('x');
- dragging.oy = this.attr('y');
- dragging.x = 0;
- dragging.y = 0;
- dragging.active = true;
-};
-function dragUpdate(dx, dy) {
- // TODO prevent dragging off the canvas.
- this.dragWith.translate( dx - dragging.x, dy - dragging.y );
- dragging.x = dx;
- dragging.y = dy;
-};
-function dragStop() {
- dragging.active = false;
-};
-
-// Creating arrows via drag and drop
-function dragToCreateArrow(source) {
- var path;
- var ox;
- var oy;
-
- function drawPath(dx, dy) {
- // TODO, make the path prettier: nicer curvatuare, color, thickness
- path = r.path("M" + ox + "," + oy + "c20,0 -20,0 " + dx + "," + dy);
- }
-
- function dragStart() {
- // record the initial coordinates of the component
- var c = source.center();
- ox = c.x;
- oy = c.y;
-
- // activate the drop targets
- // TODO
-
- drawPath(0, 0);
- }
- function dragUpdate(dx, dy) {
- path.remove();
- drawPath(dx, dy);
- }
- function dragStop() {
- // check if we're over a drop target, and if so, build a new arrow
- // TODO
-
- // deactivate the drop targets
- // TODO
-
- path.remove();
- }
-
- source.drag(dragUpdate, dragStart, dragStop);
- return source;
- }
--- a/src/main/webapp/raphael-toolkit.js Sun Jan 15 22:23:07 2012 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-Raphael.el.bottomRight = function() {
- var bb = this.getBBox();
- return { x: bb.x + bb.width, y: bb.y + bb.height };
-}
-Raphael.el.right = function() {
- var bb = this.getBBox();
- return { x: bb.x + bb.width, y: bb.y + bb.height / 2 };
-}
-Raphael.el.center = function() {
- var bb = this.getBBox();
- return { x: bb.x + bb.width / 2, y: bb.y + bb.height / 2 };
-}
-
-
-function moveToString(coords) {
- return "T" + coords.x + "," + coords.y;
-}
-function translationString(coords) {
- return "T" + coords.x + "," + coords.y;
-}
--- a/src/main/webapp/raphael.html Sun Jan 15 22:23:07 2012 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<html>
-<head>
-<script
- src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
-<script src="http://yandex.st/raphael/2.0.1/raphael.min.js"></script>
-<script src="raphael-toolkit.js"></script>
-<script src="ontology-editor.js"></script>
-<link rel="stylesheet" href="stylesheet.css">
-</head>
-<body>
- <div id="ontology-editor">
- Ontology name: <input id="ontology-name"/><br/>
- Ontology URL: <span id="ontology-URL"><span style="">(Not saved yet)</span></span><br/>
- <div id="canvas" />
- <button onclick='createBox(100, 50);'>Create new box</button><br/>
- <button onclick='alert("???")'>Save ontology</button><br/>
- <hr/>
- Ontology JSON:<br/>
- <textarea id="ontology-JSON" cols=80 rows=20></textarea>
- <br/>
- Ontology DSL:<br/>
- <textarea id="ontology-DSL" cols=80 rows=20></textarea>
- </div>
- <script>
-var r = Raphael("canvas", 640, 480);
-createBox(100, 150); createBox(290, 80, 'an element'); createBox(290, 180); createBox(450, 100);
-</script>
-</body>
-</html>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/api Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,1 @@
+../../../target/scala-2.9.1/api
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/doc/user-guide.pdf Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,1 @@
+../../../../doc/user-guide.pdf
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/index.html Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,98 @@
+<html>
+<head>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+</head>
+<body>
+
+<hr>
+First, you'll need to load a dataset.
+<br/>
+
+<input id="dataset" value="TerminalBigraph"/>
+<button type="button" onclick="loadDataset()">Load dataset</button>
+<br/>
+
+<textarea id="dataset-display" rows="12" cols="60"></textarea>
+
+<hr>
+Next, specify a translation with the same source.
+<br/>
+
+<input id="translation" value="ReverseGraph"/>
+<button type="button" onclick="loadTranslation()">Load translation</button>
+<br/>
+
+<textarea id="translation-display" rows="12" cols="60"></textarea>
+
+<hr>
+Finally, you can ask the server to compute any of the following data migration functors:<br/>
+<button type="button" onclick="compute('pullback')">the pullback</button>
+<button type="button" onclick="compute('leftPushforward')">the left pushforward</button>
+<button type="button" onclick="compute('rightPushforward')">the right pushforward</button>
+<br/>
+
+<textarea id="result" rows="30" cols="120"></textarea>
+
+<script>
+function prettyPrint(json) {
+ return JSON.stringify(json, undefined, 2);
+}
+</script>
+
+<script>
+var translation;
+var dataset;
+</script>
+
+<script>
+function loadDataset() {
+$.ajax({
+ beforeSend: function(req) {
+ req.setRequestHeader("Accept", "application/json");
+ },
+ type:"GET",
+ url: "/metaphor/examples/datasets/" + $("#dataset").val(),
+ success: function(data){
+ dataset = data;
+ $("#dataset-display").val(prettyPrint(data));
+ }
+ });
+}
+</script>
+
+<script>
+function loadTranslation() {
+$.ajax({
+ beforeSend: function(req) {
+ req.setRequestHeader("Accept", "application/json");
+ },
+ type:"GET",
+ url: "/metaphor/examples/translations/" + $("#translation").val(),
+ success: function(data){
+ translation = data
+ $("#translation-display").val(prettyPrint(data));
+ }
+ });
+}
+</script>
+
+<script>
+function compute(datafunctor) {
+$.ajax({
+ type: "GET",
+ url: "/metaphor/compute/" + datafunctor,
+ data: { "translation": $("#translation-display").val(), "dataset": $("#dataset-display").val() },
+ success: function(data){
+ $("#result").val(prettyPrint(data));
+ },
+ error:function (xhr, ajaxOptions, thrownError){
+ alert("An error occurred on the server. Response code " + xhr.status + ". " + thrownError);
+ }
+ });
+}
+</script>
+
+
+</body>
+</html>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/jquery.html Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,53 @@
+<html>
+<head>
+<script
+ src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+<script
+ src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
+<link rel="stylesheet" href="stylesheet.css">
+</head>
+<body>
+ <script>
+ // make all the boxes draggable
+ $(function() {
+ $(".ontology-editor .box").draggable({ containment: ".canvas", stack: ".ontology-editor .box" });
+ });
+ </script>
+ <div class="ontology ontology-editor">
+
+ <div class="canvas" style="height: 400px">
+ <!-- some draggable boxes -->
+ <div id='an element' class="box"
+ style="top: 25; left: 50;">
+ <p>an element</p>
+ </div>
+ <div id='a pointed set' class="box"
+ style="top: 25; left: 250;">
+ <p>a pointed set</p>
+ </div>
+ </div>
+
+ <!-- output -->
+ <button
+ onclick="$('.ontology-editor #output').val(generateOntology());">
+ Generate DSL</button>
+ <button
+ onclick="$('.ontology-editor #output').val(generateJSON());">
+ Generate JSON</button>
+ <br />
+ <textarea rows=20 cols=80 id="output"></textarea>
+ </div>
+
+ <script>
+ function getBoxes() {
+ return $(".ontology-editor .box").map(function() { return '"' + this.id + '"'; }).get();
+ }
+ function generateOntology() {
+ return "Ontology(\n" + " objects = List(" + getBoxes().join(', ') + "))"
+ }
+ function generateJSON() {
+ alert("Not implemented.");
+ }
+ </script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/ontology-editor.js Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,148 @@
+// boxes stores all the current ontology boxes
+var boxes = [];
+
+// arrows stores all the current ontology arrows
+var arrows = [];
+
+// relations stores all the current ontology relations
+var relations = [];
+
+var ontology = {
+ 'boxes': [],
+ 'arrows': [],
+ 'relations': [],
+ 'display': { }
+}
+
+function generateJSON() {
+ // TODO
+ // just take ontology and strip out display
+}
+
+function generateDSL() {
+ // TODO
+}
+
+function loadJSON(json) {
+ // first, check if json contains 'editor-state'
+ // if note, rebuild it
+ // now, reinitialize the canvas from the editor-state
+}
+
+function updateTextareas() {
+ $('ontology-JSON').val(JSON.stringify(generateJSON()));
+ $('ontology-DSL').val(generateDSL());
+}
+
+function createBoxRectangle(x, y) {
+ var WIDTH = 100, HEIGHT = 50, ROUNDING = 5;
+ var box = r.rect(x, y, WIDTH, HEIGHT, ROUNDING);
+ var color = Raphael.getColor();
+ box.attr({fill: color, stroke: color, "fill-opacity": 0.5, "stroke-width": 2, cursor: "move"});
+ return box;
+}
+function addLabel(c, label) {
+ label = typeof(label) != 'undefined' ? label : ''
+ var OFFSET_x = c.getBBox().width / 2, OFFSET_y = c.getBBox().height / 2;
+ return r.text(c.attr('x') + OFFSET_x, c.attr('y') + OFFSET_y, label);
+}
+
+function createBox(x, y, label) {
+ var box = createBoxRectangle(x, y);
+
+ box.label = addLabel(box, label);
+
+ box.addArrow = r.circle(0,0,3)
+ .transform(translationString(box.right()) + "t-10,0") // position just inside the right edge
+ .attr({ fill: '#ffffff', stroke: '#0000cc', 'stroke-width': 2 }) // blue, and filled (transparently)
+ .hover(function() { this.glowing = this.glow(); }, function() { this.glowing.remove(); }); // glow on hover
+
+ dragToCreateArrow(box.addArrow);
+
+ box.receiveArrow = r.circle(0,0,3)
+ .transform(translationString(box.left()) + "t10,0") // position just inside the left
+ .attr({ fill: '#ffffff', stroke: '#0000cc', 'stroke-width': 2 }) // blue, and filled (transparently)
+ .hover(function() { this.glowing = this.glow(); }, function() { this.glowing.remove(); }); // glow on hover
+ // TODO make invisible (activate only while drawing an arrow
+
+
+ var set = r.set()
+ set.push(box, box.label, box.addArrow, box.receiveArrow);
+ box.draggable(set);
+
+ boxes.push(box);
+ return box;
+}
+
+
+// Basic dragging functionality, e.g. for boxes.
+// x.draggable(set) makes x draggable, moving everything in set (optional) along too.
+
+Raphael.el.draggable = function(set) {
+ set = typeof(set) != 'undefined' ? set : r.set();
+ this.dragWith = set;
+ this.drag(dragUpdate, dragStart, dragStop);
+}
+Raphael.st.draggable = function(set) {
+ this.forEach(function (el) {
+ el.draggable(set);
+ });
+};
+
+var dragging = {};
+function dragStart() {
+ dragging.ox = this.attr('x');
+ dragging.oy = this.attr('y');
+ dragging.x = 0;
+ dragging.y = 0;
+ dragging.active = true;
+};
+function dragUpdate(dx, dy) {
+ // TODO prevent dragging off the canvas.
+ this.dragWith.translate( dx - dragging.x, dy - dragging.y );
+ dragging.x = dx;
+ dragging.y = dy;
+};
+function dragStop() {
+ dragging.active = false;
+};
+
+// Creating arrows via drag and drop
+function dragToCreateArrow(source) {
+ var path;
+ var ox;
+ var oy;
+
+ function drawPath(dx, dy) {
+ // TODO, make the path prettier: nicer curvatuare, color, thickness
+ path = r.path("M" + ox + "," + oy + "c20,0 -20,0 " + dx + "," + dy);
+ }
+
+ function dragStart() {
+ // record the initial coordinates of the component
+ var c = source.center();
+ ox = c.x;
+ oy = c.y;
+
+ // activate the drop targets
+ // TODO
+
+ drawPath(0, 0);
+ }
+ function dragUpdate(dx, dy) {
+ path.remove();
+ drawPath(dx, dy);
+ }
+ function dragStop() {
+ // check if we're over a drop target, and if so, build a new arrow
+ // TODO
+
+ // deactivate the drop targets
+ // TODO
+
+ path.remove();
+ }
+
+ source.drag(dragUpdate, dragStart, dragStop);
+ return source;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/raphael-toolkit.js Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,20 @@
+Raphael.el.bottomRight = function() {
+ var bb = this.getBBox();
+ return { x: bb.x + bb.width, y: bb.y + bb.height };
+}
+Raphael.el.right = function() {
+ var bb = this.getBBox();
+ return { x: bb.x + bb.width, y: bb.y + bb.height / 2 };
+}
+Raphael.el.center = function() {
+ var bb = this.getBBox();
+ return { x: bb.x + bb.width / 2, y: bb.y + bb.height / 2 };
+}
+
+
+function moveToString(coords) {
+ return "T" + coords.x + "," + coords.y;
+}
+function translationString(coords) {
+ return "T" + coords.x + "," + coords.y;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/website/raphael.html Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,29 @@
+<html>
+<head>
+<script
+ src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+<script src="http://yandex.st/raphael/2.0.1/raphael.min.js"></script>
+<script src="raphael-toolkit.js"></script>
+<script src="ontology-editor.js"></script>
+<link rel="stylesheet" href="stylesheet.css">
+</head>
+<body>
+ <div id="ontology-editor">
+ Ontology name: <input id="ontology-name"/><br/>
+ Ontology URL: <span id="ontology-URL"><span style="">(Not saved yet)</span></span><br/>
+ <div id="canvas" />
+ <button onclick='createBox(100, 50);'>Create new box</button><br/>
+ <button onclick='alert("???")'>Save ontology</button><br/>
+ <hr/>
+ Ontology JSON:<br/>
+ <textarea id="ontology-JSON" cols=80 rows=20></textarea>
+ <br/>
+ Ontology DSL:<br/>
+ <textarea id="ontology-DSL" cols=80 rows=20></textarea>
+ </div>
+ <script>
+var r = Raphael("canvas", 640, 480);
+createBox(100, 150); createBox(290, 80, 'an element'); createBox(290, 180); createBox(450, 100);
+</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/start Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,2 @@
+cd `dirname $0`
+exec ./sbt ~container:start >> metaphor.log 2>> metaphor_error.log
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stop Mon Jan 16 09:11:11 2012 -0800
@@ -0,0 +1,12 @@
+if [ "`uname`" == "Darwin" ]; then
+ PROCESSES=`ps -A | grep java | grep container:start | grep metaphor | cut -f 3 -d ' '`
+else
+ PROCESSES=`./javaps -noflags | grep container:start | grep metaphor | cut -f 1`
+fi
+
+echo Found processes: "$PROCESSES". Killing them!
+for process in $PROCESSES;
+do
+ kill -9 $process
+done
+