| Index: include.preload.js |
| =================================================================== |
| --- a/include.preload.js |
| +++ b/include.preload.js |
| @@ -152,6 +152,47 @@ |
| observer.observe(style.parentNode, {childList: true}); |
| } |
| +function convertSelectorsForShadowDOM(selectors) |
| +{ |
| + var result = []; |
| + var prefix = "::content "; |
| + |
| + for (var i = 0; i < selectors.length; i++) |
| + { |
| + var selector = selectors[i]; |
| + var start = 0; |
| + var sep = ""; |
| + |
| + for (var j = 0; j < selector.length; j++) |
| + { |
| + var chr = selector[j]; |
| + switch (chr) |
| + { |
| + case "\\": |
| + j++; |
| + break; |
| + case sep: |
| + sep = ""; |
| + break; |
| + case '"': |
| + case "'": |
| + sep = chr; |
| + break; |
|
Wladimir Palant
2015/01/22 08:15:52
Note that technically there might be more separato
|
| + case ",": |
| + if (sep == "") |
| + { |
| + result.push(prefix + selector.substring(start, j)); |
| + start = j + 1; |
| + } |
|
Wladimir Palant
2015/01/22 08:15:52
Nit: please add a break statement here, for consis
Sebastian Noack
2015/01/22 09:40:59
Ah, let's go with if/else then. It's more compact,
|
| + } |
| + } |
| + |
| + result.push(prefix + selector.substring(start, j)); |
|
Wladimir Palant
2015/01/22 08:15:52
The second parameter is unnecessary here, can be s
Sebastian Noack
2015/01/22 09:40:59
Oh, you are right.
|
| + } |
| + |
| + return result; |
| +} |
| + |
| function init(document) |
| { |
| // Use Shadow DOM if available to don't mess with web pages that rely on |
| @@ -181,9 +222,7 @@ |
| if (shadow) |
| { |
| shadow.appendChild(style); |
| - |
| - for (var i = 0; i < selectors.length; i++) |
| - selectors[i] = "::content " + selectors[i]; |
| + selectors = convertSelectorsForShadowDOM(selectors); |
| } |
| else |
| { |