| LEFT | RIGHT |
| 1 /* | 1 /* |
| 2 * This Source Code is subject to the terms of the Mozilla Public License | 2 * This Source Code is subject to the terms of the Mozilla Public License |
| 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 3 * version 2.0 (the "License"). You can obtain a copy of the License at |
| 4 * http://mozilla.org/MPL/2.0/. | 4 * http://mozilla.org/MPL/2.0/. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 let {Prefs} = require("prefs"); | 7 let {Prefs} = require("prefs"); |
| 8 | 8 |
| 9 let domainData; | 9 let domainData; |
| 10 let nodeData; | 10 let nodeData; |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 else if (attr.value.substr(0, attr.selected.length) == attr.selected) | 241 else if (attr.value.substr(0, attr.selected.length) == attr.selected) |
| 242 op = "^="; | 242 op = "^="; |
| 243 else if (attr.value.substr(attr.value.length - attr.selected.length) =
= attr.selected) | 243 else if (attr.value.substr(attr.value.length - attr.selected.length) =
= attr.selected) |
| 244 op = "$="; | 244 op = "$="; |
| 245 | 245 |
| 246 let useFallback = false; | 246 let useFallback = false; |
| 247 if (attr.name == "id" && op == "=") | 247 if (attr.name == "id" && op == "=") |
| 248 expression += "#" + escapeName(attr.selected).replace(/^([^a-zA-Z\\]
)/, escapeChar).replace(/\\(\s)$/, escapeChar); | 248 expression += "#" + escapeName(attr.selected).replace(/^([^a-zA-Z\\]
)/, escapeChar).replace(/\\(\s)$/, escapeChar); |
| 249 else if (attr.name == "class" && /\S/.test(attr.selected)) | 249 else if (attr.name == "class" && /\S/.test(attr.selected)) |
| 250 { | 250 { |
| 251 let knownClasses = {}; | 251 let knownClasses = new Set(attr.value.split(/\s+/)); |
| 252 for (let cls of attr.value.split(/\s+/)) | |
| 253 knownClasses[cls] = true; | |
| 254 | |
| 255 let classes = attr.selected.split(/\s+/).filter(cls => cls != ""); | 252 let classes = attr.selected.split(/\s+/).filter(cls => cls != ""); |
| 256 if (classes.every(cls => knownClasses.hasOwnProperty(cls))) | 253 if (classes.every(cls => knownClasses.has(cls))) |
| 257 expression += "." + classes.map(escapeName).join("."); | 254 expression += "." + classes.map(escapeName).join("."); |
| 258 else | 255 else |
| 259 useFallback = true; | 256 useFallback = true; |
| 260 } | 257 } |
| 261 else | 258 else |
| 262 useFallback = true; | 259 useFallback = true; |
| 263 | 260 |
| 264 if (useFallback) | 261 if (useFallback) |
| 265 { | 262 { |
| 266 var escapedValue = attr.selected.replace(/(["\\])/g, '\\$1') | 263 var escapedValue = attr.selected.replace(/(["\\])/g, '\\$1') |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 | 628 |
| 632 fillAttributes(item.nodeData); | 629 fillAttributes(item.nodeData); |
| 633 } | 630 } |
| 634 | 631 |
| 635 function addExpression() | 632 function addExpression() |
| 636 { | 633 { |
| 637 AdblockPlus.addPatterns([document.getElementById("expression").value]); | 634 AdblockPlus.addPatterns([document.getElementById("expression").value]); |
| 638 | 635 |
| 639 togglePreview(false); | 636 togglePreview(false); |
| 640 } | 637 } |
| LEFT | RIGHT |