| Index: tools/turbolizer/selection-broker.js
|
| diff --git a/tools/turbolizer/selection-broker.js b/tools/turbolizer/selection-broker.js
|
| index 3a223d8b643097079d68b543eadc741e797c7977..822cf1ce1f62fd74b7874fd7e76e3323d40c9ac4 100644
|
| --- a/tools/turbolizer/selection-broker.js
|
| +++ b/tools/turbolizer/selection-broker.js
|
| @@ -6,25 +6,78 @@ var SelectionBroker = function() {
|
| this.brokers = [];
|
| this.dispatching = false;
|
| this.lastDispatchingHandler = null;
|
| + this.nodePositionMap = [];
|
| + this.sortedPositionList = [];
|
| + this.positionNodeMap = [];
|
| };
|
|
|
| SelectionBroker.prototype.addSelectionHandler = function(handler) {
|
| this.brokers.push(handler);
|
| }
|
|
|
| -SelectionBroker.prototype.select = function(from, ranges, selected) {
|
| - if (!this.dispatching) {
|
| - this.lastDispatchingHandler = from;
|
| +SelectionBroker.prototype.setNodePositionMap = function(map) {
|
| + let broker = this;
|
| + if (!map) return;
|
| + broker.nodePositionMap = map;
|
| + broker.positionNodeMap = [];
|
| + broker.sortedPositionList = [];
|
| + let next = 0;
|
| + for (let i in broker.nodePositionMap) {
|
| + broker.sortedPositionList[next] = Number(broker.nodePositionMap[i]);
|
| + broker.positionNodeMap[next++] = i;
|
| + }
|
| + broker.sortedPositionList = sortUnique(broker.sortedPositionList,
|
| + function(a,b) { return a - b; });
|
| + this.positionNodeMap.sort(function(a,b) {
|
| + let result = broker.nodePositionMap[a] - broker.nodePositionMap[b];
|
| + if (result != 0) return result;
|
| + return a - b;
|
| + });
|
| +}
|
| +
|
| +SelectionBroker.prototype.select = function(from, locations, selected) {
|
| + let broker = this;
|
| + if (!broker.dispatching) {
|
| + broker.lastDispatchingHandler = from;
|
| try {
|
| - this.dispatching = true;
|
| + broker.dispatching = true;
|
| + let enrichLocations = function(locations) {
|
| + result = [];
|
| + for (let location of locations) {
|
| + let newLocation = {};
|
| + if (location.pos_start != undefined) {
|
| + newLocation.pos_start = location.pos_start;
|
| + }
|
| + if (location.pos_end != undefined) {
|
| + newLocation.pos_end = location.pos_end;
|
| + }
|
| + if (location.node_id != undefined) {
|
| + newLocation.node_id = location.node_id;
|
| + }
|
| + if (location.block_id != undefined) {
|
| + newLocation.block_id = location.block_id;
|
| + }
|
| + if (newLocation.pos_start == undefined &&
|
| + newLocation.pos_end == undefined &&
|
| + newLocation.node_id != undefined) {
|
| + if (broker.nodePositionMap && broker.nodePositionMap[location.node_id]) {
|
| + newLocation.pos_start = broker.nodePositionMap[location.node_id];
|
| + newLocation.pos_end = location.pos_start + 1;
|
| + }
|
| + }
|
| + result.push(newLocation);
|
| + }
|
| + return result;
|
| + }
|
| + locations = enrichLocations(locations);
|
| for (var b of this.brokers) {
|
| if (b != from) {
|
| - b.brokeredSelect(ranges, selected);
|
| + b.brokeredSelect(locations, selected);
|
| }
|
| }
|
| }
|
| finally {
|
| - this.dispatching = false;
|
| + broker.dispatching = false;
|
| }
|
| }
|
| }
|
|
|