| /********************************************* |
| * Controller for a MathQuill instance, |
| * on which services are registered with |
| * |
| * Controller.open(function(_) { ... }); |
| * |
| ********************************************/ |
| |
| var Controller = P(function(_) { |
| _.init = function(root, container, options) { |
| this.id = root.id; |
| this.data = {}; |
| |
| this.root = root; |
| this.container = container; |
| this.options = options; |
| |
| root.controller = this; |
| |
| this.cursor = root.cursor = Cursor(root, options); |
| // TODO: stop depending on root.cursor, and rm it |
| }; |
| |
| _.handle = function(name, dir) { |
| var handlers = this.options.handlers; |
| if (handlers && handlers.fns[name]) { |
| var mq = handlers.APIClasses[this.KIND_OF_MQ](this); |
| if (dir === L || dir === R) handlers.fns[name](dir, mq); |
| else handlers.fns[name](mq); |
| } |
| }; |
| |
| var notifyees = []; |
| this.onNotify = function(f) { notifyees.push(f); }; |
| _.notify = function() { |
| for (var i = 0; i < notifyees.length; i += 1) { |
| notifyees[i].apply(this.cursor, arguments); |
| } |
| return this; |
| }; |
| }); |