/*package*/ ComponentMatchCtx(Component component, ComponentMatchCtx parent) { // first child _comp = component; int selectorListSize = parent._qualified.length; _qualified = new boolean[selectorListSize][]; for (int i = 0; i < selectorListSize; i++) _qualified[i] = new boolean[parent._qualified[i].length]; _parent = parent; _compChildIndex = 0; _isShadowHost = !((ComponentCtrl) component).getShadowRoots().isEmpty(); }
/*package*/ void moveToNextShadowSibling(Component next) { _comp = next; _compChildIndex++; // ZK-2944: status clearing is conditional, let the caller handle it // reset the status when moving to siblings _isShadowHost = !((ComponentCtrl) next).getShadowRoots().isEmpty(); }
/*package*/ ComponentMatchCtx(Component component) { // used by root jumping _comp = component; _qualified = new boolean[0][0]; _compChildIndex = getComponentIndex(); _isShadowHost = !((ComponentCtrl) component).getShadowRoots().isEmpty(); }
/*package*/ void moveToNextSibling() { _comp = _comp.getNextSibling(); _compChildIndex++; // ZK-2944: status clearing is conditional, let the caller handle it // reset the status when moving to siblings _isShadowHost = !((ComponentCtrl) _comp).getShadowRoots().isEmpty(); }
private ShadowElement getNextShadowRootSibling() { Component comp = _currCtx.getComponent(); if (comp instanceof ShadowElement) { Component host = ((ShadowElement) comp).getShadowHost(); if (host instanceof ComponentCtrl) { List<ShadowElement> seRoots = ((ComponentCtrl) host).getShadowRoots(); if (seRoots != null && seRoots.size() > 1) { //if equal to 1, then it is the current comp itelf int index = seRoots.indexOf(comp) + 1; if (index < seRoots.size()) { // return seRoots.get(index); } } } } return null; }
protected void onHostDetached(Component host) { if (host instanceof ComponentCtrl) { if (((ComponentCtrl) host).getShadowRoots().isEmpty()) { Iterable<EventListener<? extends Event>> eventListeners = host .getEventListeners(ON_REBUILD_SHADOW_TREE_LATER); for (EventListener<? extends Event> listener : eventListeners) { host.removeEventListener(ON_REBUILD_SHADOW_TREE_LATER, listener); } } } }
private static boolean matchPseudoElements(Component comp, List<PseudoElement> pseudoElements) { if (pseudoElements == null || pseudoElements.isEmpty()) return true; if (comp instanceof ShadowElement) { for (PseudoElement pe : pseudoElements) { if ("shadow".equals(pe.getName())) { Component parent = ((ShadowElement) comp).getShadowHost(); if (parent != null) { ComponentCtrl parentCtrl = (ComponentCtrl) parent; if (parentCtrl.getShadowRoots().contains(comp)) { return true; } } } } } return false; }
public String toString() { final String clsnm = getClass().getSimpleName(); if (_host == null) { if (getParent() != null) return getParent() + " -> <" + clsnm + "@" + (getParent().getChildren().indexOf(this)) + ">"; else return '<' + clsnm + '>'; } ComponentCtrl host = (ComponentCtrl) _host; return "<" + clsnm + "@" + host.getShadowRoots().indexOf(this) + " (" + _host + ")>"; }
/*package*/ ComponentMatchCtx(Component component, List<Selector> selectorList) { // root _comp = component; _qualified = new boolean[selectorList.size()][]; for (Selector selector : selectorList) _qualified[selector.getSelectorIndex()] = new boolean[selector.size()]; _compChildIndex = getComponentIndex(); _isShadowHost = !((ComponentCtrl) component).getShadowRoots().isEmpty(); }
private void removeBindingsRecursively(Component comp, Map<Binder, Set<Component>> batchRemove) { removeBindings0(comp, batchRemove); for (final Iterator<Component> it = comp.getChildren().iterator(); it.hasNext();) { final Component kid = it.next(); if (kid != null) { removeBindingsRecursively(kid, batchRemove); //recursive } } if (comp instanceof ComponentCtrl) { for (ShadowElement se : ((ComponentCtrl) comp).getShadowRoots()) { removeBindingsRecursively((Component) se, batchRemove); //recursive } } }
protected void loadComponent0(Component comp, boolean loadinit) { loadComponentProperties0(comp, loadinit); final Map<String, List<Binding>> compBindings = _bindings.get(comp); if (_activating || compBindings == null || !compBindings.keySet().contains(CHILDREN_ATTR)) { for (Component kid = comp.getFirstChild(); kid != null; kid = kid.getNextSibling()) { loadComponent0(kid, loadinit); //recursive } // Bug ZK-3046, we handle it in ShadowElementsCtrl.filterOutShadows() when invoked by BindChildRenderer.java if (comp instanceof ComponentCtrl) { for (ShadowElement se : ((ComponentCtrl) comp).getShadowRoots()) { loadComponent0((Component) se, loadinit); //recursive } } } }
if (pCtrl.getShadowRoots().isEmpty()) return shadows; // no shadow available here, we can skip the filter.
public void onEvent(Event event) throws Exception { Component target = event.getTarget(); if (target instanceof ComponentCtrl && target.getDesktop() != null) { for (ShadowElement se : new ArrayList<ShadowElement>( ((ComponentCtrl) target).getShadowRoots())) { if (se instanceof HtmlShadowElement) { ((HtmlShadowElement) se).rebuildShadowTree(); } } } else { // cleanup Iterable<EventListener<? extends Event>> eventListeners = target .getEventListeners(ON_REBUILD_SHADOW_TREE_LATER); for (EventListener<? extends Event> listener : eventListeners) { target.removeEventListener(ON_REBUILD_SHADOW_TREE_LATER, listener); } } }
public boolean accept(ComponentMatchCtx ctx, String... parameters) { ComponentCtrl comp = (ComponentCtrl) ctx.getComponent(); if (comp.getShadowRoots().isEmpty()) { return false; // not a shadow host } if (parameters.length == 0) { // select all hosts return true; } else { // select the hosts that match the selector ComponentIterator compIter = new ComponentIterator(ctx.getComponent(), parameters[0]); // only run once, since we only handle type, #id, or .class, no need to traverse component tree if (compIter.hasNext() && ctx.getComponent() == compIter.next()) { return true; } } return false; } });
private ComponentMatchCtx buildFirstShadowChildCtx(ComponentMatchCtx parent) { ComponentMatchCtx ctx = new ComponentMatchCtx( ((HtmlShadowElement) ((ComponentCtrl) parent.getComponent()).getShadowRoots().get(0)), parent); if (_posOffset == 0) matchLevel0(ctx); for (Selector selector : _selectorList) { int i = selector.getSelectorIndex(); int posStart = _posOffset > 0 ? _posOffset - 1 : 0; for (int j = posStart; j < selector.size() - 1; j++) { switch (selector.getCombinator(j)) { case CHILD: if (parent.isQualified(i, j) && match(selector, ctx, j + 1)) ctx.setQualified(i, j + 1); break; } } } return ctx; }
private boolean checkShadowElementAndCreateSubChildren(Component parent) { boolean hasShadow = false; if (parent instanceof ComponentCtrl) { ComponentCtrl pCtrl = (ComponentCtrl) parent; for (ShadowElement se : pCtrl.getShadowRoots()) { if (se instanceof HtmlShadowElement) { HtmlShadowElement hse = (HtmlShadowElement) se; if (hse.hasBindingAnnotation() || hse.hasSubBindingAnnotation()) { // used for shadow addon to be rendered directly hse.setAttribute(BinderCtrl.BINDRENDERING, true); try { Events.sendEvent(new Event(BinderCtrl.ON_BIND_INIT, hse)); // fixed for @ref case Events.sendEvent(new Event("onBindingReady", hse)); } finally { hse.removeAttribute(BinderCtrl.BINDRENDERING); } } } hasShadow = true; } } return hasShadow; }
for (ShadowElement se : ((ComponentCtrl) comp).getShadowRoots()) { processAllComponentsBindings((Component) se);
_previousInsertion = insertBefore.getPreviousSibling(); } else { List<ShadowElement> shadowRoots = ((ComponentCtrl) host).getShadowRoots(); ShadowElement lastShadowElement = shadowRoots.isEmpty() ? null : shadowRoots.get(shadowRoots.size() - 1); Component prev = (Component) lastShadowElement;
if (!((ComponentCtrl) rt).getShadowRoots().isEmpty() && seq.getId() != null) { //rt is shadow host and host id is given rt2 = (Component) ((ComponentCtrl) rt).getShadowFellowIfAny(seq.getId()); } else {
} else { ComponentCtrl ctrl = this; List<HtmlShadowElement> shadowRoots = ctrl.getShadowRoots(); if (!shadowRoots.isEmpty()) { Map<Component, Integer> indexCacheMap = getIndexCacheMap();