summaryrefslogtreecommitdiff
path: root/scripts/history.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/history.js')
-rw-r--r--scripts/history.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/scripts/history.js b/scripts/history.js
new file mode 100644
index 00000000..396b3f3c
--- /dev/null
+++ b/scripts/history.js
@@ -0,0 +1,79 @@
+// Once upon a time we shall have a versioned property graph from which history
+// will be one extractable aspect, much like a git for graphs. Now we just have
+// a plain list of events for a specific user.
+
+// Enums and chrome don't play along well. Object.freeze I guess? actually rhizi code cuases
+// exceptions but that shouldn't break the console, as evidenced by the '__commandLineAPI is not defined'
+// error below.
+//
+// Uncaught TypeError: Can't add property addednodes, object is not extensible rhizicore.js:4
+// Uncaught TypeError: Can't add property text, object is not extensible textanalysis.js:3
+// Uncaught TypeError: Can't add property key, object is not extensible buttons.js:5
+// Uncaught ReferenceError: sentence is not defined robot.js:11
+// Resource interpreted as Font but transferred with MIME type application/font-sfnt: "http://localhost:8000/external/Lato300.ttf". jquery.js:2
+// > document
+// ReferenceError: __commandLineAPI is not defined
+//var ActionEnum = Enum();
+
+function History(user) {
+ this.records = [];
+ this.user = user;
+}
+
+var ACTION_TYPE = 'ACTION_TYPE';
+var ACTION_MOUSE = 'ACTION_MOUSE';
+var ACTION_GRAPH_ADD = 'ACTION_GRAPH_ADD';
+var ACTION_GRAPH_DELETE = 'ACTION_GRAPH_DELETE';
+
+History.prototype.record = function(d)
+{
+ if (d === undefined || d.action === undefined) {
+ throw "Invalid arguments";
+ }
+ d['user'] = this.user;
+ d['timestamp'] = new Date();
+ this.records.push(d);
+};
+
+History.prototype.save_to_file = function()
+{
+ // TODO: filename and chrome support (grep json;base64 for other locations)
+ // perhaps has to wait for FileWriter api?
+ location.href = 'data:text/json;base64,' + window.btoa(JSON.stringify(this.records));
+};
+
+History.prototype.clear_history = function()
+{
+ this.records = [];
+}
+
+History.prototype.record_nodes_removal = function(ids)
+{
+ this.record({
+ 'action': ACTION_GRAPH_DELETE,
+ 'node_ids': ids
+ });
+}
+
+History.prototype.record_links = function(links)
+{
+ if (links === undefined || links.length === undefined || links.length <= 0) {
+ throw "Invalid arguments"
+ }
+ this.record({
+ 'action': ACTION_GRAPH_ADD,
+ 'nodes': [],
+ 'links': links
+ });
+}
+
+History.prototype.record_nodes = function(nodes)
+{
+ if (nodes === undefined || nodes.length === undefined || nodes.length <= 0) {
+ throw "Invalid arguments"
+ }
+ this.record({'action': ACTION_GRAPH_ADD,
+ 'nodes': nodes,
+ 'linkes': []
+ });
+}