terminus 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/terminus +5 -5
- data/lib/capybara/driver/terminus.rb +24 -13
- data/lib/terminus.rb +21 -15
- data/lib/terminus/application.rb +6 -6
- data/lib/terminus/browser.rb +77 -60
- data/lib/terminus/client.rb +33 -16
- data/lib/terminus/client/browser.rb +10 -9
- data/lib/terminus/client/phantom.js +25 -3
- data/lib/terminus/client/phantomjs.rb +44 -7
- data/lib/terminus/connector.rb +2 -2
- data/lib/terminus/connector/server.rb +15 -15
- data/lib/terminus/connector/socket_handler.rb +11 -11
- data/lib/terminus/controller.rb +62 -26
- data/lib/terminus/headers.rb +25 -0
- data/lib/terminus/host.rb +6 -6
- data/lib/terminus/node.rb +36 -22
- data/lib/terminus/proxy.rb +81 -45
- data/lib/terminus/proxy/driver_body.rb +14 -15
- data/lib/terminus/proxy/external.rb +12 -6
- data/lib/terminus/proxy/rewrite.rb +7 -6
- data/lib/terminus/public/compiled/terminus-min.js +3 -3
- data/lib/terminus/public/compiled/terminus.js +225 -180
- data/lib/terminus/public/pathology.js +87 -87
- data/lib/terminus/public/terminus.js +138 -93
- data/lib/terminus/server.rb +7 -7
- data/lib/terminus/timeouts.rb +8 -8
- data/lib/terminus/views/bootstrap.erb +7 -7
- data/lib/terminus/views/index.erb +4 -4
- data/lib/terminus/views/infinite.html +4 -4
- data/spec/1.1/reports/android.txt +874 -0
- data/spec/{reports → 1.1/reports}/chrome.txt +72 -69
- data/spec/{reports → 1.1/reports}/firefox.txt +72 -69
- data/spec/{reports → 1.1/reports}/opera.txt +72 -69
- data/spec/{reports → 1.1/reports}/phantomjs.txt +72 -69
- data/spec/{reports → 1.1/reports}/safari.txt +72 -69
- data/spec/{spec_helper.rb → 1.1/spec_helper.rb} +5 -2
- data/spec/{terminus_driver_spec.rb → 1.1/terminus_driver_spec.rb} +2 -2
- data/spec/{terminus_session_spec.rb → 1.1/terminus_session_spec.rb} +2 -2
- data/spec/2.0/reports/android.txt +815 -0
- data/spec/2.0/reports/chrome.txt +806 -0
- data/spec/2.0/reports/firefox.txt +812 -0
- data/spec/2.0/reports/opera.txt +806 -0
- data/spec/2.0/reports/phantomjs.txt +803 -0
- data/spec/2.0/reports/safari.txt +806 -0
- data/spec/2.0/spec_helper.rb +21 -0
- data/spec/2.0/terminus_spec.rb +25 -0
- metadata +41 -32
- data/spec/reports/android.txt +0 -875
@@ -5,20 +5,20 @@ var Pathology = {
|
|
5
5
|
expression.evaluate(context, context, resultType, result);
|
6
6
|
return result;
|
7
7
|
},
|
8
|
-
|
8
|
+
|
9
9
|
atomize: function(expression, context, root) {
|
10
10
|
var result = expression.evaluate(context, root);
|
11
11
|
if (result && result.atomize) result = result.atomize();
|
12
12
|
return result;
|
13
13
|
},
|
14
|
-
|
14
|
+
|
15
15
|
array: function(list) {
|
16
16
|
if (!list) return [];
|
17
17
|
var array = [], i = list.length;
|
18
18
|
while (i--) array[i] = list[i];
|
19
19
|
return array;
|
20
20
|
},
|
21
|
-
|
21
|
+
|
22
22
|
indexOf: function(list, item) {
|
23
23
|
if (list.indexOf) return list.indexOf(item);
|
24
24
|
for (var i = 0, n = list.length; i < n; i++) {
|
@@ -85,17 +85,17 @@ Pathology.XPathResult.prototype.atomize = function() {
|
|
85
85
|
Pathology.XPathResult.prototype.makeString = function() {
|
86
86
|
var first = this._nodes[0];
|
87
87
|
if (!first) return '';
|
88
|
-
|
88
|
+
|
89
89
|
switch (first.nodeType) {
|
90
90
|
case XPathResult.STRING_TYPE:
|
91
91
|
return this.atomize();
|
92
|
-
|
92
|
+
|
93
93
|
case XPathResult.BOOLEAN_TYPE:
|
94
94
|
var parts = [];
|
95
95
|
for (var i = 0, n = this._nodes.length; i < n; i++)
|
96
96
|
parts.push(this._nodes[i].nodeValue);
|
97
97
|
return parts.join('');
|
98
|
-
|
98
|
+
|
99
99
|
default:
|
100
100
|
var result = document.evaluate('//text()', first, null, XPathResult.ANY_TYPE, null);
|
101
101
|
return result.makeString();
|
@@ -112,11 +112,11 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
112
112
|
}
|
113
113
|
return destination;
|
114
114
|
};
|
115
|
-
|
115
|
+
|
116
116
|
var find = function (root, objectName) {
|
117
117
|
var parts = objectName.split('.'),
|
118
118
|
part;
|
119
|
-
|
119
|
+
|
120
120
|
while (part = parts.shift()) {
|
121
121
|
root = root[part];
|
122
122
|
if (root === undefined)
|
@@ -124,31 +124,31 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
124
124
|
}
|
125
125
|
return root;
|
126
126
|
};
|
127
|
-
|
127
|
+
|
128
128
|
var formatError = function (error) {
|
129
129
|
var lines = error.input.split(/\n/g),
|
130
130
|
lineNo = 0,
|
131
131
|
offset = 0;
|
132
|
-
|
132
|
+
|
133
133
|
while (offset < error.offset + 1) {
|
134
134
|
offset += lines[lineNo].length + 1;
|
135
135
|
lineNo += 1;
|
136
136
|
}
|
137
137
|
var message = 'Line ' + lineNo + ': expected ' + error.expected + '\n',
|
138
138
|
line = lines[lineNo - 1];
|
139
|
-
|
139
|
+
|
140
140
|
message += line + '\n';
|
141
141
|
offset -= line.length + 1;
|
142
|
-
|
142
|
+
|
143
143
|
while (offset < error.offset) {
|
144
144
|
message += ' ';
|
145
145
|
offset += 1;
|
146
146
|
}
|
147
147
|
return message + '^';
|
148
148
|
};
|
149
|
-
|
149
|
+
|
150
150
|
var Grammar = {
|
151
|
-
__consume__union_expression: function(
|
151
|
+
__consume__union_expression: function() {
|
152
152
|
var address0 = null, index0 = this._offset;
|
153
153
|
this._nodeCache["union_expression"] = this._nodeCache["union_expression"] || {};
|
154
154
|
var cached = this._nodeCache["union_expression"][index0];
|
@@ -287,7 +287,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
287
287
|
}
|
288
288
|
return this._nodeCache["union_expression"][index0] = address0;
|
289
289
|
},
|
290
|
-
__consume__location_path: function(
|
290
|
+
__consume__location_path: function() {
|
291
291
|
var address0 = null, index0 = this._offset;
|
292
292
|
this._nodeCache["location_path"] = this._nodeCache["location_path"] || {};
|
293
293
|
var cached = this._nodeCache["location_path"][index0];
|
@@ -350,7 +350,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
350
350
|
}
|
351
351
|
return this._nodeCache["location_path"][index0] = address0;
|
352
352
|
},
|
353
|
-
__consume__location_step: function(
|
353
|
+
__consume__location_step: function() {
|
354
354
|
var address0 = null, index0 = this._offset;
|
355
355
|
this._nodeCache["location_step"] = this._nodeCache["location_step"] || {};
|
356
356
|
var cached = this._nodeCache["location_step"][index0];
|
@@ -557,7 +557,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
557
557
|
}
|
558
558
|
return this._nodeCache["location_step"][index0] = address0;
|
559
559
|
},
|
560
|
-
__consume__axis: function(
|
560
|
+
__consume__axis: function() {
|
561
561
|
var address0 = null, index0 = this._offset;
|
562
562
|
this._nodeCache["axis"] = this._nodeCache["axis"] || {};
|
563
563
|
var cached = this._nodeCache["axis"][index0];
|
@@ -679,7 +679,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
679
679
|
}
|
680
680
|
return this._nodeCache["axis"][index0] = address0;
|
681
681
|
},
|
682
|
-
__consume__axis_shorthand: function(
|
682
|
+
__consume__axis_shorthand: function() {
|
683
683
|
var address0 = null, index0 = this._offset;
|
684
684
|
this._nodeCache["axis_shorthand"] = this._nodeCache["axis_shorthand"] || {};
|
685
685
|
var cached = this._nodeCache["axis_shorthand"][index0];
|
@@ -810,7 +810,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
810
810
|
}
|
811
811
|
return this._nodeCache["axis_shorthand"][index0] = address0;
|
812
812
|
},
|
813
|
-
__consume__node_test: function(
|
813
|
+
__consume__node_test: function() {
|
814
814
|
var address0 = null, index0 = this._offset;
|
815
815
|
this._nodeCache["node_test"] = this._nodeCache["node_test"] || {};
|
816
816
|
var cached = this._nodeCache["node_test"][index0];
|
@@ -904,7 +904,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
904
904
|
}
|
905
905
|
return this._nodeCache["node_test"][index0] = address0;
|
906
906
|
},
|
907
|
-
__consume__node_condition: function(
|
907
|
+
__consume__node_condition: function() {
|
908
908
|
var address0 = null, index0 = this._offset;
|
909
909
|
this._nodeCache["node_condition"] = this._nodeCache["node_condition"] || {};
|
910
910
|
var cached = this._nodeCache["node_condition"][index0];
|
@@ -1016,7 +1016,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1016
1016
|
}
|
1017
1017
|
return this._nodeCache["node_condition"][index0] = address0;
|
1018
1018
|
},
|
1019
|
-
__consume__node_name: function(
|
1019
|
+
__consume__node_name: function() {
|
1020
1020
|
var address0 = null, index0 = this._offset;
|
1021
1021
|
this._nodeCache["node_name"] = this._nodeCache["node_name"] || {};
|
1022
1022
|
var cached = this._nodeCache["node_name"][index0];
|
@@ -1072,7 +1072,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1072
1072
|
}
|
1073
1073
|
return this._nodeCache["node_name"][index0] = address0;
|
1074
1074
|
},
|
1075
|
-
__consume__subscript: function(
|
1075
|
+
__consume__subscript: function() {
|
1076
1076
|
var address0 = null, index0 = this._offset;
|
1077
1077
|
this._nodeCache["subscript"] = this._nodeCache["subscript"] || {};
|
1078
1078
|
var cached = this._nodeCache["subscript"][index0];
|
@@ -1193,7 +1193,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1193
1193
|
}
|
1194
1194
|
return this._nodeCache["subscript"][index0] = address0;
|
1195
1195
|
},
|
1196
|
-
__consume__node_predicate: function(
|
1196
|
+
__consume__node_predicate: function() {
|
1197
1197
|
var address0 = null, index0 = this._offset;
|
1198
1198
|
this._nodeCache["node_predicate"] = this._nodeCache["node_predicate"] || {};
|
1199
1199
|
var cached = this._nodeCache["node_predicate"][index0];
|
@@ -1316,7 +1316,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1316
1316
|
}
|
1317
1317
|
return this._nodeCache["node_predicate"][index0] = address0;
|
1318
1318
|
},
|
1319
|
-
__consume__expression: function(
|
1319
|
+
__consume__expression: function() {
|
1320
1320
|
var address0 = null, index0 = this._offset;
|
1321
1321
|
this._nodeCache["expression"] = this._nodeCache["expression"] || {};
|
1322
1322
|
var cached = this._nodeCache["expression"][index0];
|
@@ -1347,7 +1347,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1347
1347
|
}
|
1348
1348
|
return this._nodeCache["expression"][index0] = address0;
|
1349
1349
|
},
|
1350
|
-
__consume__or_expression: function(
|
1350
|
+
__consume__or_expression: function() {
|
1351
1351
|
var address0 = null, index0 = this._offset;
|
1352
1352
|
this._nodeCache["or_expression"] = this._nodeCache["or_expression"] || {};
|
1353
1353
|
var cached = this._nodeCache["or_expression"][index0];
|
@@ -1434,7 +1434,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1434
1434
|
}
|
1435
1435
|
return this._nodeCache["or_expression"][index0] = address0;
|
1436
1436
|
},
|
1437
|
-
__consume__and_expression: function(
|
1437
|
+
__consume__and_expression: function() {
|
1438
1438
|
var address0 = null, index0 = this._offset;
|
1439
1439
|
this._nodeCache["and_expression"] = this._nodeCache["and_expression"] || {};
|
1440
1440
|
var cached = this._nodeCache["and_expression"][index0];
|
@@ -1521,7 +1521,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1521
1521
|
}
|
1522
1522
|
return this._nodeCache["and_expression"][index0] = address0;
|
1523
1523
|
},
|
1524
|
-
__consume__comparison: function(
|
1524
|
+
__consume__comparison: function() {
|
1525
1525
|
var address0 = null, index0 = this._offset;
|
1526
1526
|
this._nodeCache["comparison"] = this._nodeCache["comparison"] || {};
|
1527
1527
|
var cached = this._nodeCache["comparison"][index0];
|
@@ -1584,7 +1584,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1584
1584
|
}
|
1585
1585
|
return this._nodeCache["comparison"][index0] = address0;
|
1586
1586
|
},
|
1587
|
-
__consume__comparator: function(
|
1587
|
+
__consume__comparator: function() {
|
1588
1588
|
var address0 = null, index0 = this._offset;
|
1589
1589
|
this._nodeCache["comparator"] = this._nodeCache["comparator"] || {};
|
1590
1590
|
var cached = this._nodeCache["comparator"][index0];
|
@@ -1655,7 +1655,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1655
1655
|
}
|
1656
1656
|
return this._nodeCache["comparator"][index0] = address0;
|
1657
1657
|
},
|
1658
|
-
__consume__atom: function(
|
1658
|
+
__consume__atom: function() {
|
1659
1659
|
var address0 = null, index0 = this._offset;
|
1660
1660
|
this._nodeCache["atom"] = this._nodeCache["atom"] || {};
|
1661
1661
|
var cached = this._nodeCache["atom"][index0];
|
@@ -1808,7 +1808,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1808
1808
|
}
|
1809
1809
|
return this._nodeCache["atom"][index0] = address0;
|
1810
1810
|
},
|
1811
|
-
__consume__value: function(
|
1811
|
+
__consume__value: function() {
|
1812
1812
|
var address0 = null, index0 = this._offset;
|
1813
1813
|
this._nodeCache["value"] = this._nodeCache["value"] || {};
|
1814
1814
|
var cached = this._nodeCache["value"][index0];
|
@@ -1834,7 +1834,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1834
1834
|
}
|
1835
1835
|
return this._nodeCache["value"][index0] = address0;
|
1836
1836
|
},
|
1837
|
-
__consume__function_call: function(
|
1837
|
+
__consume__function_call: function() {
|
1838
1838
|
var address0 = null, index0 = this._offset;
|
1839
1839
|
this._nodeCache["function_call"] = this._nodeCache["function_call"] || {};
|
1840
1840
|
var cached = this._nodeCache["function_call"][index0];
|
@@ -1945,7 +1945,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
1945
1945
|
}
|
1946
1946
|
return this._nodeCache["function_call"][index0] = address0;
|
1947
1947
|
},
|
1948
|
-
__consume__function_name: function(
|
1948
|
+
__consume__function_name: function() {
|
1949
1949
|
var address0 = null, index0 = this._offset;
|
1950
1950
|
this._nodeCache["function_name"] = this._nodeCache["function_name"] || {};
|
1951
1951
|
var cached = this._nodeCache["function_name"][index0];
|
@@ -2001,7 +2001,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2001
2001
|
}
|
2002
2002
|
return this._nodeCache["function_name"][index0] = address0;
|
2003
2003
|
},
|
2004
|
-
__consume__function_args: function(
|
2004
|
+
__consume__function_args: function() {
|
2005
2005
|
var address0 = null, index0 = this._offset;
|
2006
2006
|
this._nodeCache["function_args"] = this._nodeCache["function_args"] || {};
|
2007
2007
|
var cached = this._nodeCache["function_args"][index0];
|
@@ -2132,7 +2132,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2132
2132
|
}
|
2133
2133
|
return this._nodeCache["function_args"][index0] = address0;
|
2134
2134
|
},
|
2135
|
-
__consume__integer: function(
|
2135
|
+
__consume__integer: function() {
|
2136
2136
|
var address0 = null, index0 = this._offset;
|
2137
2137
|
this._nodeCache["integer"] = this._nodeCache["integer"] || {};
|
2138
2138
|
var cached = this._nodeCache["integer"][index0];
|
@@ -2243,7 +2243,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2243
2243
|
}
|
2244
2244
|
return this._nodeCache["integer"][index0] = address0;
|
2245
2245
|
},
|
2246
|
-
__consume__string: function(
|
2246
|
+
__consume__string: function() {
|
2247
2247
|
var address0 = null, index0 = this._offset;
|
2248
2248
|
this._nodeCache["string"] = this._nodeCache["string"] || {};
|
2249
2249
|
var cached = this._nodeCache["string"][index0];
|
@@ -2722,7 +2722,7 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2722
2722
|
}
|
2723
2723
|
return this._nodeCache["string"][index0] = address0;
|
2724
2724
|
},
|
2725
|
-
__consume__space: function(
|
2725
|
+
__consume__space: function() {
|
2726
2726
|
var address0 = null, index0 = this._offset;
|
2727
2727
|
this._nodeCache["space"] = this._nodeCache["space"] || {};
|
2728
2728
|
var cached = this._nodeCache["space"][index0];
|
@@ -2779,13 +2779,13 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2779
2779
|
return this._nodeCache["space"][index0] = address0;
|
2780
2780
|
}
|
2781
2781
|
};
|
2782
|
-
|
2782
|
+
|
2783
2783
|
var Parser = function(input) {
|
2784
2784
|
this._input = input;
|
2785
2785
|
this._offset = 0;
|
2786
2786
|
this._nodeCache = {};
|
2787
2787
|
};
|
2788
|
-
|
2788
|
+
|
2789
2789
|
Parser.prototype.parse = function() {
|
2790
2790
|
var result = this.__consume__union_expression();
|
2791
2791
|
if (result && this._offset === this._input.length) {
|
@@ -2798,14 +2798,14 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2798
2798
|
var error = new Error(message);
|
2799
2799
|
throw error;
|
2800
2800
|
};
|
2801
|
-
|
2801
|
+
|
2802
2802
|
Parser.parse = function(input) {
|
2803
2803
|
var parser = new Parser(input);
|
2804
2804
|
return parser.parse();
|
2805
2805
|
};
|
2806
|
-
|
2806
|
+
|
2807
2807
|
extend(Parser.prototype, Grammar);
|
2808
|
-
|
2808
|
+
|
2809
2809
|
var SyntaxNode = function(textValue, offset, elements, properties) {
|
2810
2810
|
this.textValue = textValue;
|
2811
2811
|
this.offset = offset;
|
@@ -2813,20 +2813,20 @@ Pathology.XPathResult.prototype.makeString = function() {
|
|
2813
2813
|
if (!properties) return;
|
2814
2814
|
for (var key in properties) this[key] = properties[key];
|
2815
2815
|
};
|
2816
|
-
|
2816
|
+
|
2817
2817
|
SyntaxNode.prototype.forEach = function(block, context) {
|
2818
2818
|
for (var i = 0, n = this.elements.length; i < n; i++) {
|
2819
2819
|
block.call(context, this.elements[i], i);
|
2820
2820
|
}
|
2821
2821
|
};
|
2822
|
-
|
2822
|
+
|
2823
2823
|
Parser.SyntaxNode = SyntaxNode;
|
2824
|
-
|
2824
|
+
|
2825
2825
|
if (typeof require === "function" && typeof exports === "object") {
|
2826
2826
|
exports.Grammar = Grammar;
|
2827
2827
|
exports.Parser = Parser;
|
2828
2828
|
exports.parse = Parser.parse;
|
2829
|
-
|
2829
|
+
|
2830
2830
|
if (typeof Pathology !== "undefined") {
|
2831
2831
|
Pathology.XPath = Grammar;
|
2832
2832
|
Pathology.XPathParser = Parser;
|
@@ -2866,39 +2866,39 @@ Pathology.Axis.prototype.walk = function(context, block, scope) {
|
|
2866
2866
|
var children = context.childNodes,
|
2867
2867
|
attributes = Pathology.array(context.attributes),
|
2868
2868
|
sibling;
|
2869
|
-
|
2869
|
+
|
2870
2870
|
if (context.checked)
|
2871
2871
|
attributes.push({ nodeName: 'checked',
|
2872
2872
|
nodeValue: true,
|
2873
2873
|
nodeType: XPathResult.STRING_TYPE
|
2874
2874
|
});
|
2875
|
-
|
2875
|
+
|
2876
2876
|
if (context.selected)
|
2877
2877
|
attributes.push({ nodeName: 'selected',
|
2878
2878
|
nodeValue: true,
|
2879
2879
|
nodeType: XPathResult.STRING_TYPE
|
2880
2880
|
});
|
2881
|
-
|
2881
|
+
|
2882
2882
|
switch (this.name) {
|
2883
2883
|
case 'attribute':
|
2884
2884
|
for (var i = 0, n = attributes.length; i < n; i++) {
|
2885
2885
|
block.call(scope, attributes[i]);
|
2886
2886
|
}
|
2887
2887
|
break;
|
2888
|
-
|
2888
|
+
|
2889
2889
|
case 'child':
|
2890
2890
|
for (var i = 0, n = children.length; i < n; i++) {
|
2891
2891
|
block.call(scope, children[i]);
|
2892
2892
|
}
|
2893
2893
|
break;
|
2894
|
-
|
2894
|
+
|
2895
2895
|
case 'descendant-or-self':
|
2896
2896
|
block.call(scope, context);
|
2897
2897
|
for (var i = 0, n = children.length; i < n; i++) {
|
2898
2898
|
this.walk(children[i], block, scope);
|
2899
2899
|
}
|
2900
2900
|
break;
|
2901
|
-
|
2901
|
+
|
2902
2902
|
case 'following-sibling':
|
2903
2903
|
sibling = context.nextSibling;
|
2904
2904
|
while (sibling) {
|
@@ -2906,11 +2906,11 @@ Pathology.Axis.prototype.walk = function(context, block, scope) {
|
|
2906
2906
|
sibling = sibling.nextSibling;
|
2907
2907
|
}
|
2908
2908
|
break;
|
2909
|
-
|
2909
|
+
|
2910
2910
|
case 'parent':
|
2911
2911
|
block.call(scope, context.parentNode);
|
2912
2912
|
break;
|
2913
|
-
|
2913
|
+
|
2914
2914
|
case 'self':
|
2915
2915
|
block.call(scope, context);
|
2916
2916
|
break;
|
@@ -2924,12 +2924,12 @@ Pathology.Axis.SHORTHANDS = {
|
|
2924
2924
|
'/' : 'descendant-or-self',
|
2925
2925
|
'' : 'child'
|
2926
2926
|
};
|
2927
|
-
|
2927
|
+
|
2928
2928
|
Pathology.Axis.fromAST = function(node) {
|
2929
2929
|
var name = node.axis_name
|
2930
2930
|
? node.axis_name.textValue
|
2931
2931
|
: node.textValue;
|
2932
|
-
|
2932
|
+
|
2933
2933
|
return new this(this.SHORTHANDS[name] || name);
|
2934
2934
|
};
|
2935
2935
|
|
@@ -2943,7 +2943,7 @@ Pathology.XPathParser.Comparison = {
|
|
2943
2943
|
viable = false,
|
2944
2944
|
array = (right instanceof Array),
|
2945
2945
|
node;
|
2946
|
-
|
2946
|
+
|
2947
2947
|
if (left._nodes) {
|
2948
2948
|
for (var i = 0, n = left._nodes.length; i < n; i++) {
|
2949
2949
|
node = left._nodes[i];
|
@@ -2954,7 +2954,7 @@ Pathology.XPathParser.Comparison = {
|
|
2954
2954
|
}
|
2955
2955
|
}
|
2956
2956
|
return viable;
|
2957
|
-
|
2957
|
+
|
2958
2958
|
} else {
|
2959
2959
|
switch (comparator) {
|
2960
2960
|
case '=': return array ? Pathology.indexOf(right, left.nodeValue) >= 0 : left == right;
|
@@ -2969,7 +2969,7 @@ Pathology.XPathParser.FunctionCall = {
|
|
2969
2969
|
getArguments: function(context, root) {
|
2970
2970
|
var args = [],
|
2971
2971
|
rest = this.function_args.rest;
|
2972
|
-
|
2972
|
+
|
2973
2973
|
if (this.function_args.first && this.function_args.first.evaluate) {
|
2974
2974
|
args.push(this.function_args.first.evaluate(context, root));
|
2975
2975
|
}
|
@@ -2979,14 +2979,14 @@ Pathology.XPathParser.FunctionCall = {
|
|
2979
2979
|
}
|
2980
2980
|
return args;
|
2981
2981
|
},
|
2982
|
-
|
2982
|
+
|
2983
2983
|
evaluate: function(context, root) {
|
2984
2984
|
var args = this.getArguments(context, root),
|
2985
2985
|
proc = this.REGISTER[this.function_name.textValue];
|
2986
|
-
|
2986
|
+
|
2987
2987
|
return proc.apply(context, args);
|
2988
2988
|
},
|
2989
|
-
|
2989
|
+
|
2990
2990
|
REGISTER: {
|
2991
2991
|
'concat': function() {
|
2992
2992
|
var string = '';
|
@@ -2994,36 +2994,36 @@ Pathology.XPathParser.FunctionCall = {
|
|
2994
2994
|
string += arguments[i].makeString ? arguments[i].makeString() : arguments[i];
|
2995
2995
|
return string;
|
2996
2996
|
},
|
2997
|
-
|
2997
|
+
|
2998
2998
|
'contains': function(haystack, needle) {
|
2999
2999
|
if (!haystack) return false;
|
3000
3000
|
if (haystack.makeString) haystack = haystack.makeString();
|
3001
|
-
|
3001
|
+
|
3002
3002
|
return haystack.toString().indexOf(needle) >= 0;
|
3003
3003
|
},
|
3004
|
-
|
3004
|
+
|
3005
3005
|
'normalize-space': function(string) {
|
3006
3006
|
if (string.makeString) string = string.makeString();
|
3007
|
-
|
3007
|
+
|
3008
3008
|
return string.toString().replace(/^\s*/g, '')
|
3009
3009
|
.replace(/\s*$/g, '')
|
3010
3010
|
.replace(/\s+/g, ' ');
|
3011
3011
|
},
|
3012
|
-
|
3012
|
+
|
3013
3013
|
'name': function() {
|
3014
3014
|
return this.nodeName.toLowerCase();
|
3015
3015
|
},
|
3016
|
-
|
3016
|
+
|
3017
3017
|
'not': function(value) {
|
3018
3018
|
if (value && value.atomize) value = value.atomize();
|
3019
3019
|
if (typeof value === 'string') return false;
|
3020
3020
|
return !value;
|
3021
3021
|
},
|
3022
|
-
|
3022
|
+
|
3023
3023
|
'string': function(value) {
|
3024
3024
|
return value.atomize().innerText;
|
3025
3025
|
},
|
3026
|
-
|
3026
|
+
|
3027
3027
|
'text': function() {
|
3028
3028
|
return document.evaluate('/text()', this, null, XPathResult.ANY_TYPE, null);
|
3029
3029
|
}
|
@@ -3037,20 +3037,20 @@ Pathology.XPathParser.LocationPath = {
|
|
3037
3037
|
for (var i = 0, n = list.length; i < n; i++)
|
3038
3038
|
block.call(scope, list[i]);
|
3039
3039
|
},
|
3040
|
-
|
3040
|
+
|
3041
3041
|
evaluate: function(context, root, resultType, result) {
|
3042
3042
|
result = result || new Pathology.XPathResult(XPathResult.ANY_TYPE);
|
3043
3043
|
resultType = resultType || XPathResult.ANY_TYPE;
|
3044
|
-
|
3044
|
+
|
3045
3045
|
var intermediate = new Pathology.XPathResult(resultType),
|
3046
3046
|
startNode = this.head.isRelative() ? context : root,
|
3047
3047
|
steps = [this.head].concat(this.rest.elements),
|
3048
3048
|
step,
|
3049
3049
|
nextStage,
|
3050
3050
|
i, j, n, m;
|
3051
|
-
|
3051
|
+
|
3052
3052
|
intermediate.push(startNode);
|
3053
|
-
|
3053
|
+
|
3054
3054
|
for (i = 0, n = steps.length; i < n; i++) {
|
3055
3055
|
step = steps[i];
|
3056
3056
|
nextStage = new Pathology.XPathResult(resultType);
|
@@ -3059,10 +3059,10 @@ Pathology.XPathParser.LocationPath = {
|
|
3059
3059
|
}
|
3060
3060
|
intermediate = nextStage;
|
3061
3061
|
}
|
3062
|
-
|
3062
|
+
|
3063
3063
|
for (i = 0, n = intermediate._nodes.length; i < n; i++)
|
3064
3064
|
result.push(intermediate._nodes[i]);
|
3065
|
-
|
3065
|
+
|
3066
3066
|
return result;
|
3067
3067
|
}
|
3068
3068
|
};
|
@@ -3072,12 +3072,12 @@ Pathology.XPathParser.LocationStep = {
|
|
3072
3072
|
isRelative: function() {
|
3073
3073
|
return this.elements[0].textValue !== '/';
|
3074
3074
|
},
|
3075
|
-
|
3075
|
+
|
3076
3076
|
evaluate: function(context, root, resultType, result) {
|
3077
3077
|
var axis = this.selector.axis,
|
3078
3078
|
test = this.selector.test,
|
3079
3079
|
levels = [[]];
|
3080
|
-
|
3080
|
+
|
3081
3081
|
Pathology.Axis.fromAST(axis).walk(context, function(node) {
|
3082
3082
|
if (!test || !test.evaluate) return result.push(node);
|
3083
3083
|
test.evaluate(node, this.predicates, root, resultType, levels, result);
|
@@ -3090,7 +3090,7 @@ Pathology.XPathParser.NodeTest = {
|
|
3090
3090
|
evaluate: function(context, predicates, root, resultType, levels, result) {
|
3091
3091
|
var name = this.elements[0].condition_name,
|
3092
3092
|
tagName = tagName = this.elements[0].textValue.toLowerCase();
|
3093
|
-
|
3093
|
+
|
3094
3094
|
var first = {
|
3095
3095
|
expression: {
|
3096
3096
|
evaluate: function() {
|
@@ -3111,25 +3111,25 @@ Pathology.XPathParser.NodeTest = {
|
|
3111
3111
|
},
|
3112
3112
|
subscript: this.subscript
|
3113
3113
|
};
|
3114
|
-
|
3114
|
+
|
3115
3115
|
predicates = [first].concat(predicates.elements);
|
3116
3116
|
var accepted, predicate;
|
3117
|
-
|
3117
|
+
|
3118
3118
|
for (var i = 0, n = predicates.length; i < n; i++) {
|
3119
3119
|
levels[i] = levels[i] || [];
|
3120
3120
|
predicate = predicates[i];
|
3121
|
-
|
3121
|
+
|
3122
3122
|
accepted = Pathology.atomize(predicate.expression, context, root);
|
3123
3123
|
if (typeof accepted === 'string') accepted = true;
|
3124
3124
|
if (!accepted) return;
|
3125
|
-
|
3125
|
+
|
3126
3126
|
levels[i].push(context);
|
3127
|
-
|
3127
|
+
|
3128
3128
|
if (predicate.subscript.integer) {
|
3129
3129
|
if (predicate.subscript.integer.evaluate() !== levels[i].length) return;
|
3130
3130
|
}
|
3131
3131
|
}
|
3132
|
-
|
3132
|
+
|
3133
3133
|
result.push(context);
|
3134
3134
|
}
|
3135
3135
|
};
|
@@ -3161,13 +3161,13 @@ Pathology.XPathParser.Union = {
|
|
3161
3161
|
evaluate: function(context, root, resultType, result) {
|
3162
3162
|
result = result || new Pathology.XPathResult(XPathResult.ANY_TYPE);
|
3163
3163
|
resultType = resultType || XPathResult.ANY_TYPE;
|
3164
|
-
|
3164
|
+
|
3165
3165
|
this.head.evaluate(context, root, resultType, result);
|
3166
|
-
|
3166
|
+
|
3167
3167
|
var sections = this.rest.elements;
|
3168
3168
|
for (var i = 0, n = sections.length; i < n; i++)
|
3169
3169
|
sections[i].location_path.evaluate(context, root, resultType, result);
|
3170
|
-
|
3170
|
+
|
3171
3171
|
return result;
|
3172
3172
|
}
|
3173
3173
|
};
|