From b3f96efb33d7fc99500147d336ead1536b6b24e9 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Sun, 26 Oct 2014 22:25:29 +0200 Subject: introduce signal, start using in history; use consts for signal name introduces two new modules: scripts/consts.js scripts/signal.js signal is a thin wrapper for jquery('window').on and jquery('window').trigger, which seems like an adaquete signal library - there are faster things around, but why introduce another dependency. --- scripts/consts.js | 5 +++++ scripts/history.js | 7 ++++++- scripts/rhizicore.js | 8 +++----- scripts/signal.js | 22 ++++++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 scripts/consts.js create mode 100644 scripts/signal.js diff --git a/scripts/consts.js b/scripts/consts.js new file mode 100644 index 00000000..927a30d3 --- /dev/null +++ b/scripts/consts.js @@ -0,0 +1,5 @@ +define('consts', function() { + return { + RECORD_LINKS: 'record_links', + }; +}); diff --git a/scripts/history.js b/scripts/history.js index a3127c75..e99cbb08 100644 --- a/scripts/history.js +++ b/scripts/history.js @@ -15,11 +15,16 @@ // ReferenceError: __commandLineAPI is not defined //var ActionEnum = Enum(); -define('history', ['FileSaver'], function(saveAs) { +define('history', ['jquery', 'FileSaver', 'consts', 'signal'], + function($, saveAs, consts, signal) { function History(user) { + var that = this; this.records = []; this.user = user; + signal.slot(consts.RECORD_LINKS, function(obj) { + return that.record_links(obj) + }); } var ACTION_KEYSTROKES = 'ACTION_KEYSTROKES'; diff --git a/scripts/rhizicore.js b/scripts/rhizicore.js index cdffde64..1b4bcbb3 100644 --- a/scripts/rhizicore.js +++ b/scripts/rhizicore.js @@ -1,8 +1,8 @@ "use strict" define('rhizicore', -['jquery', 'd3', 'util', 'history', 'textanalysis'], -function($, d3, util, history, textanalysis) { +['jquery', 'd3', 'consts', 'signal', 'util', 'history', 'textanalysis'], +function($, d3, consts, signal, util, history, textanalysis) { var History = history.History; var addednodes = []; @@ -260,9 +260,7 @@ function myGraph(el) { "state": state }; links.push(link); - if (this.history !== undefined) { - this.history.record_links([link]); - } + signal.signal(consts.RECORD_LINKS, [[link]]); } else { found.name = name; found.state = state; diff --git a/scripts/signal.js b/scripts/signal.js new file mode 100644 index 00000000..49c5afd3 --- /dev/null +++ b/scripts/signal.js @@ -0,0 +1,22 @@ +/* + * Signal/slot (i.e. blackboard pattern) for rhizi. + * + * This is a thin wrapper over jquery right now. + * But just keeping it here to make any future change of implementation slightly + * easier. + */ + +define('signal', ['jquery'], function($) { + function slot(name, handler) { + $(window).on(name, function(e, args) { + handler(args); + }); + }; + function signal(name, obj) { + $(window).trigger(name, obj); + } + return { + 'slot': slot, + 'signal': signal + }; +}) -- cgit v1.3.1