diff options
| author | LV-426 <lv-426@taproot.org.il> | 2014-11-13 17:41:57 +0200 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2014-11-13 17:41:57 +0200 |
| commit | 76d1de512a58f023ae348ae8500100490fba9915 (patch) | |
| tree | 87a3df058d3aaf1a3f2c408a784ffe63209cdaac /scripts/history.js | |
| parent | 4a303d5a7a7e1f8327bb18a2ef3e3093a30a50b6 (diff) | |
rename scripts/ -> src/
Diffstat (limited to 'scripts/history.js')
| -rw-r--r-- | scripts/history.js | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/scripts/history.js b/scripts/history.js deleted file mode 100644 index b46dd260..00000000 --- a/scripts/history.js +++ /dev/null @@ -1,135 +0,0 @@ -// 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 rz_core.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(); - -define(['jquery', 'FileSaver', 'consts', 'signal'], - function($, saveAs, consts, signal) { - -/* user - username (string) - * svg - svg element for catching zoom events (jquery DOMNode wrapper) - */ -function History(user, transform_element) { - var that = this; - this.records = []; - this.user = user; - this.transform_element = transform_element; - signal.slot(consts.APPLIED_GRAPH_DIFF, function(obj) { - return that.record_graph_diff(obj) - }); - signal.slot(consts.KEYSTROKES, function(obj) { - return that.record_keystrokes(obj); - }); - // XXX create zoom behavior - then proof to event name change - $(window).on('wheel.history', function(obj) { - that.record_zoom(obj); - return true; - }); -} - -var ACTION_KEYSTROKES = 'ACTION_KEYSTROKES'; -var ACTION_GRAPH_DIFF = 'ACTION_GRAPH_DIFF'; -var ACTION_ZOOM = 'ACTION_ZOOM'; - -var KEYSTROKE_WHERE_TEXTANALYSIS = 'KEYSTROKE_WHERE_TEXTANALYSIS'; -var KEYSTROKE_WHERE_DOCUMENT = 'KEYSTROKE_WHERE_DOCUMENT'; -var KEYSTROKE_WHERE_EDIT_NODE = 'KEYSTROKE_WHERE_EDIT_NODE'; - -History.prototype.record = function(action, d) -{ - if (d === undefined || action === undefined) { - throw "Invalid arguments"; - } - d['action'] = action; - d['user'] = this.user; - d['timestamp'] = new Date(); - this.records.push(d); - $('.history-timeline').html('<pre>' + JSON.stringify(d) + '</pre>'); -}; - -function svg_extract_translate_and_scale(e) -{ - // See: http://stackoverflow.com/questions/10349811/how-to-manipulate-translate-transforms-on-a-svg-element-with-javascript-in-chrom - // Using the regexp option right now, did only firefox testing 36 - var str = e.attributes['transform'].value; - var parts = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(str); - var scale = /scale\(\s*([^\s)]+)\)/.exec(str); - if (scale) { - var x = parts[1], y = parts[2]; - return {scale:+scale[1], translate: [+x, +y]}; - } else { - return {scale:1.0, translate: [0.0, 0.0]}; - } -} - -History.prototype.record_zoom = function(d) -{ - var transform = svg_extract_translate_and_scale(this.transform_element); - - if (transform === undefined) { - console.log('record_zoom: bug: transform_element has no transform attribute'); - return; - } - this.record(ACTION_ZOOM, {transform: transform}); -} - -History.prototype.save_to_file = function() -{ - var json = JSON.stringify(this.records, function (k, v) { return v; }, 2); - - saveAs(new Blob([json], {type: 'application/json'}), 'history.json'); -}; - -History.prototype.clear_history = function() -{ - this.records = []; -} - -History.prototype.record_graph_diff = function(obj) -{ - this.record(ACTION_GRAPH_DIFF, { - nodes: {add: obj.nodes && obj.nodes.add, remove: obj.nodes && obj.nodes.remove, - change: obj.nodes && obj.nodes.change}, - links: {add: obj.links && obj.links.add, remove: obj.links && obj.links.remove, - change: obj.links && obj.links.change}, - }); -} - -History.prototype.record_keystrokes = function(obj) -{ - var where = obj.where, - keys = obj.keys; - - if (where === undefined || keys === undefined || keys.length === undefined || - keys.length <= 0) { - throw "Invalid arguments"; - } - keys = keys.filter(function(k) { return k !== undefined; }); - if (keys.length == 0) { - return; - } - this.record(ACTION_KEYSTROKES, { - 'keys': keys, - 'where': where - }); -} - -return { - History:History, - KEYSTROKE_WHERE_TEXTANALYSIS:KEYSTROKE_WHERE_TEXTANALYSIS, - KEYSTROKE_WHERE_DOCUMENT:KEYSTROKE_WHERE_DOCUMENT, - KEYSTROKE_WHERE_EDIT_NODE:KEYSTROKE_WHERE_EDIT_NODE -}; -}); // define |
