| Index: tools/turbolizer/text-view.js
|
| diff --git a/tools/turbolizer/text-view.js b/tools/turbolizer/text-view.js
|
| index eb86bf62735f9c723595e0b8eb3aac63a0f6c23d..70d2a252ae245403d67e415c46e1726cd9a15e5a 100644
|
| --- a/tools/turbolizer/text-view.js
|
| +++ b/tools/turbolizer/text-view.js
|
| @@ -8,9 +8,7 @@ class TextView extends View {
|
| constructor(id, broker, patterns, allowSpanSelection) {
|
| super(id, broker);
|
| let view = this;
|
| - view.sortedPositionList = [];
|
| - view.nodePositionMap = [];
|
| - view.positionNodeMap = [];
|
| + view.hide();
|
| view.textListNode = view.divNode.getElementsByTagName('ul')[0];
|
| view.fillerSvgElement = view.divElement.append("svg").attr('version','1.1').attr("width", "0");
|
| view.patterns = patterns;
|
| @@ -29,13 +27,12 @@ class TextView extends View {
|
| }
|
| }
|
| broker.clear(selectionHandler);
|
| - broker.select(selectionHandler, view.getRanges(items), selected);
|
| + broker.select(selectionHandler, view.getLocations(items), selected);
|
| },
|
| selectionDifference: function(span1, inclusive1, span2, inclusive2) {
|
| return null;
|
| },
|
| - brokeredSelect: function(ranges, selected) {
|
| - let locations = view.rangesToLocations(ranges);
|
| + brokeredSelect: function(locations, selected) {
|
| view.selectLocations(locations, selected, true);
|
| },
|
| brokeredClear: function() {
|
| @@ -58,36 +55,6 @@ class TextView extends View {
|
| }
|
| }
|
|
|
| - rangeToLocation(range) {
|
| - return range;
|
| - }
|
| -
|
| - rangesToLocations(ranges) {
|
| - let view = this;
|
| - let nodes = new Set();
|
| - let result = [];
|
| - for (let range of ranges) {
|
| - let start = range[0];
|
| - let end = range[1];
|
| - let block_id = range[3];
|
| - let location = { pos_start: start, pos_end: end, block_id: block_id };
|
| - if (range[2] !== null && range[2] != -1) {
|
| - location.node_id = range[2];
|
| - if (range[0] == -1 && range[1] == -1) {
|
| - location.pos_start = view.nodePositionMap[location.node_id];
|
| - location.pos_end = location.pos_start + 1;
|
| - }
|
| - } else {
|
| - if (range[0] != undefined) {
|
| - location.pos_start = range[0];
|
| - location.pos_end = range[1];
|
| - }
|
| - }
|
| - result.push(location);
|
| - }
|
| - return result;
|
| - }
|
| -
|
| sameLocation(l1, l2) {
|
| let view = this;
|
| if (l1.block_id != undefined && l2.block_id != undefined &&
|
| @@ -102,7 +69,7 @@ class TextView extends View {
|
| let node1 = l1.node_id;
|
| let node2 = l2.node_id;
|
|
|
| - if (node1 === undefined && node2 == undefined) {
|
| + if (node1 === undefined || node2 == undefined) {
|
| if (l1.pos_start === undefined || l2.pos_start == undefined) {
|
| return false;
|
| }
|
| @@ -116,56 +83,9 @@ class TextView extends View {
|
| }
|
| }
|
|
|
| - if (node1 === undefined) {
|
| - let lower = lowerBound(view.positionNodeMap, l1.pos_start, undefined, function(a, b) {
|
| - var node = a[b];
|
| - return view.nodePositionMap[node];
|
| - } );
|
| - while (++lower < view.positionNodeMap.length &&
|
| - view.nodePositionMap[view.positionNodeMap[lower]] < l1.pos_end) {
|
| - if (view.positionNodeMap[lower] == node2) {
|
| - return true;
|
| - }
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - if (node2 === undefined) {
|
| - let lower = lowerBound(view.positionNodeMap, l2.pos_start, undefined, function(a, b) {
|
| - var node = a[b];
|
| - return view.nodePositionMap[node];
|
| - } );
|
| - while (++lower < view.positionNodeMap.length &&
|
| - view.nodePositionMap[view.positionNodeMap[lower]] < l2.pos_end) {
|
| - if (view.positionNodeMap[lower] == node1) {
|
| - return true;
|
| - }
|
| - }
|
| - return false;
|
| - }
|
| -
|
| return l1.node_id == l2.node_id;
|
| }
|
|
|
| - setNodePositionMap(map) {
|
| - let view = this;
|
| - view.nodePositionMap = map;
|
| - view.positionNodeMap = [];
|
| - view.sortedPositionList = [];
|
| - let next = 0;
|
| - for (let i in view.nodePositionMap) {
|
| - view.sortedPositionList[next] = Number(view.nodePositionMap[i]);
|
| - view.positionNodeMap[next++] = i;
|
| - }
|
| - view.sortedPositionList = sortUnique(view.sortedPositionList,
|
| - function(a,b) { return a - b; });
|
| - this.positionNodeMap.sort(function(a,b) {
|
| - let result = view.nodePositionMap[a] - view.nodePositionMap[b];
|
| - if (result != 0) return result;
|
| - return a - b;
|
| - });
|
| - }
|
| -
|
| selectLocations(locations, selected, makeVisible) {
|
| let view = this;
|
| let s = new Set();
|
| @@ -180,39 +100,12 @@ class TextView extends View {
|
| view.selectCommon(s, selected, makeVisible);
|
| }
|
|
|
| - getRanges(items) {
|
| + getLocations(items) {
|
| let result = [];
|
| let lastObject = null;
|
| for (let i of items) {
|
| if (i.location) {
|
| - let location = i.location;
|
| - let start = -1;
|
| - let end = -1;
|
| - let node_id = -1;
|
| - let block_id = -1;
|
| - if (location.node_id !== undefined) {
|
| - node_id = location.node_id;
|
| - }
|
| - if (location.block_id !== undefined) {
|
| - block_id = location.block_id;
|
| - }
|
| - if (location.pos_start !== undefined) {
|
| - start = location.pos_start;
|
| - end = location.pos_end;
|
| - } else {
|
| - if (this.nodePositionMap && this.nodePositionMap[node_id]) {
|
| - start = this.nodePositionMap[node_id];
|
| - end = start + 1;
|
| - }
|
| - }
|
| - if (lastObject == null ||
|
| - (lastObject[2] != node_id ||
|
| - lastObject[0] != start ||
|
| - lastObject[1] != end ||
|
| - lastObject[3] != block_id)) {
|
| - lastObject = [start, end, node_id, block_id];
|
| - result.push(lastObject);
|
| - }
|
| + result.push(i.location);
|
| }
|
| }
|
| return result;
|
| @@ -304,13 +197,13 @@ class TextView extends View {
|
| }
|
| }
|
| } else if (typeof s[Symbol.iterator] === 'function') {
|
| - for (let i of s) {
|
| - if (firstSelect) {
|
| + if (firstSelect) {
|
| + for (let i of s) {
|
| makeContainerPosVisible(view.parentNode, i.offsetTop);
|
| - firstSelect = false;
|
| + break;
|
| }
|
| - view.selection.select(i, selected);
|
| }
|
| + view.selection.select(s, selected);
|
| } else {
|
| if (firstSelect) {
|
| makeContainerPosVisible(view.parentNode, s.offsetTop);
|
|
|