Search in sources :

Example 1 with StyleRuleNameAccumulator

use of com.facebook.stetho.inspector.elements.StyleRuleNameAccumulator in project stetho by facebook.

the class CSS method getMatchedStylesForNode.

@SuppressLint("DefaultLocale")
@ChromeDevtoolsMethod
public JsonRpcResult getMatchedStylesForNode(JsonRpcPeer peer, JSONObject params) {
    final GetMatchedStylesForNodeRequest request = mObjectMapper.convertValue(params, GetMatchedStylesForNodeRequest.class);
    final GetMatchedStylesForNodeResult result = new GetMatchedStylesForNodeResult();
    result.matchedCSSRules = new ArrayList<>();
    result.inherited = Collections.emptyList();
    result.pseudoElements = Collections.emptyList();
    mDocument.postAndWait(new Runnable() {

        @Override
        public void run() {
            final Object elementForNodeId = mDocument.getElementForNodeId(request.nodeId);
            if (elementForNodeId == null) {
                LogUtil.w("Failed to get style of an element that does not exist, nodeid=" + request.nodeId);
                return;
            }
            mDocument.getElementStyleRuleNames(elementForNodeId, new StyleRuleNameAccumulator() {

                @Override
                public void store(String ruleName, boolean editable) {
                    final ArrayList<CSSProperty> properties = new ArrayList<>();
                    final RuleMatch match = new RuleMatch();
                    match.matchingSelectors = ListUtil.newImmutableList(0);
                    final Selector selector = new Selector();
                    selector.value = ruleName;
                    final CSSRule rule = new CSSRule();
                    rule.origin = Origin.REGULAR;
                    rule.selectorList = new SelectorList();
                    rule.selectorList.selectors = ListUtil.newImmutableList(selector);
                    rule.style = new CSSStyle();
                    rule.style.cssProperties = properties;
                    rule.style.shorthandEntries = Collections.emptyList();
                    if (editable) {
                        rule.style.styleSheetId = String.format("%s.%s", Integer.toString(request.nodeId), selector.value);
                    }
                    mDocument.getElementStyles(elementForNodeId, ruleName, new StyleAccumulator() {

                        @Override
                        public void store(String name, String value, boolean isDefault) {
                            final CSSProperty property = new CSSProperty();
                            property.name = name;
                            property.value = value;
                            properties.add(property);
                        }
                    });
                    match.rule = rule;
                    result.matchedCSSRules.add(match);
                }
            });
        }
    });
    return result;
}
Also used : ArrayList(java.util.ArrayList) JSONObject(org.json.JSONObject) ComputedStyleAccumulator(com.facebook.stetho.inspector.elements.ComputedStyleAccumulator) StyleAccumulator(com.facebook.stetho.inspector.elements.StyleAccumulator) StyleRuleNameAccumulator(com.facebook.stetho.inspector.elements.StyleRuleNameAccumulator) ChromeDevtoolsMethod(com.facebook.stetho.inspector.protocol.ChromeDevtoolsMethod) SuppressLint(android.annotation.SuppressLint)

Aggregations

SuppressLint (android.annotation.SuppressLint)1 ComputedStyleAccumulator (com.facebook.stetho.inspector.elements.ComputedStyleAccumulator)1 StyleAccumulator (com.facebook.stetho.inspector.elements.StyleAccumulator)1 StyleRuleNameAccumulator (com.facebook.stetho.inspector.elements.StyleRuleNameAccumulator)1 ChromeDevtoolsMethod (com.facebook.stetho.inspector.protocol.ChromeDevtoolsMethod)1 ArrayList (java.util.ArrayList)1 JSONObject (org.json.JSONObject)1