| Index: include.postload.js |
| =================================================================== |
| --- a/include.postload.js |
| +++ b/include.postload.js |
| @@ -219,7 +219,7 @@ |
| return; |
| var target = e.target; |
| - while (target.parentNode && !(target.id || target.className || target.src)) |
| + while (target.parentNode && target.attributes.length == 0) |
| target = target.parentNode; |
| if (target == document.documentElement || target == document.body) |
| target = null; |
| @@ -294,34 +294,52 @@ |
| clickHideFilters = new Array(); |
| selectorList = new Array(); |
| - if (elementId) |
| + |
| + var addSelector = function(selector) |
| { |
| - clickHideFilters.push(document.domain + "###" + elementId); |
| - selectorList.push("#" + elementId); |
| - } |
| - if (elementClasses && elementClasses.length > 0) |
| - { |
| - var selector = elementClasses.map(function(elClass) |
| - { |
| - return "." + elClass.replace(/([^\w-])/, "\\$1"); |
| - }).join(""); |
| - |
| clickHideFilters.push(document.domain + "##" + selector); |
| selectorList.push(selector); |
| + }; |
| + |
| + if (elementId) |
| + addSelector("#" + elementId); |
| + |
| + if (elt.classList.length > 0) |
| + { |
| + var selector = ""; |
| + |
| + for (var i = 0; i < elt.classList.length; i++) |
| + selector += "." + elt.classList[i].replace(/([^\w-])/, "\\$1"); |
| + |
| + addSelector(selector); |
| } |
| + |
| if (url) |
| { |
| clickHideFilters.push(relativeToAbsoluteUrl(url)); |
| selectorList.push(elt.localName + '[src="' + url + '"]'); |
| } |
| + // restore the original style, before generating the fallback filter that |
| + // will include the style, and to prevent highlightElements from saving those |
| + currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShadow); |
| + currentElement.style.backgroundColor = currentElement_backgroundColor; |
| + |
| + // as last resort, create a filter based on tag's name |
| + // and all of its attributes, if everything else fails |
| + if (clickHideFilters.length == 0) |
| + { |
| + var selector = elt.localName; |
| + |
| + for (var i = 0; i < elt.attributes.length; i++) |
| + selector += "[" + elt.attributes[i].name + '="' + elt.attributes[i].value.replace('"', '\\"') + '"]'; |
| + |
| + addSelector(selector); |
| + } |
| + |
| // Show popup |
| clickHide_showDialog(e.clientX, e.clientY, clickHideFilters); |
| - // Highlight the unlucky elements |
| - // Restore currentElement's box-shadow and bgcolor so that highlightElements won't save those |
| - currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShadow); |
| - currentElement.style.backgroundColor = currentElement_backgroundColor; |
| // Highlight the elements specified by selector in yellow |
| highlightElements(selectorList.join(",")); |
| // Now, actually highlight the element the user clicked on in red |