From 372e10ab16c3fa956a68a93d62b4cfea277c7318 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 9 Jul 2017 15:56:56 +0200 Subject: [PATCH] Filter only computed properties that have some CSS rule associated --- js/tools/Snapshooter.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/js/tools/Snapshooter.js b/js/tools/Snapshooter.js index a6a8e4a..3b3d403 100644 --- a/js/tools/Snapshooter.js +++ b/js/tools/Snapshooter.js @@ -111,6 +111,25 @@ function Snapshooter(root) { return ':snappysnippet_prefix:' + node.tagName + '_' + idCounter++; } + function findMatchedProperties(el) { + var sheets = document.styleSheets, ret = {}; + el.matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector + || el.msMatchesSelector || el.oMatchesSelector; + for (var i in sheets) { + var rules = sheets[i].rules || sheets[i].cssRules; + for (var r in rules) { + if (el.matches(rules[r].selectorText)) { + var rule_style = rules[r].style; + for (var i = rule_style.length -1 ; i >=0; i--) { + ret[rule_style[i]] = true; + } + } + } + } + return ret; + } + + function dumpCSS(node, pseudoElement) { var styles; @@ -124,7 +143,20 @@ function Snapshooter(root) { } } - return styleDeclarationToSimpleObject(styles); + var style_object = styleDeclarationToSimpleObject(styles); + var filtered_properties = findMatchedProperties(node); + + var properties = Object.keys(style_object) + + for (var i = properties.length-1; i >=0; i--) { + var property_name = properties[i]; + + if (!filtered_properties.hasOwnProperty(property_name)) { + delete style_object[property_name]; + } + } + + return style_object } function cssObjectForElement(element, omitPseudoElements) {