Merge pull request #5413 from Polymer/polymer-dom-externs

Hybrid compatibility for PolymerDomApi and Polymer.Iconset types.
This commit is contained in:
Daniel Freedman
2018-11-02 12:58:51 -07:00
committed by GitHub
6 changed files with 233 additions and 4 deletions

View File

@@ -39,7 +39,7 @@ export const matchesSelector = function(node, selector) {
/**
* Node API wrapper class returned from `Polymer.dom.(target)` when
* `target` is a `Node`.
*
* @implements {PolymerDomApi}
*/
export class DomApi {
@@ -56,7 +56,8 @@ export class DomApi {
*
* @param {function(this:HTMLElement, { target: !HTMLElement, addedNodes: !Array<!Element>, removedNodes: !Array<!Element> }):void} callback Called when direct or distributed children
* of this element changes
* @return {!FlattenedNodesObserver} Observer instance
* @return {!PolymerDomApi.ObserveHandle} Observer instance
* @override
*/
observeNodes(callback) {
return new FlattenedNodesObserver(
@@ -66,9 +67,10 @@ export class DomApi {
/**
* Disconnects an observer previously created via `observeNodes`
*
* @param {!FlattenedNodesObserver} observerHandle Observer instance
* @param {!PolymerDomApi.ObserveHandle} observerHandle Observer instance
* to disconnect.
* @return {void}
* @override
*/
unobserveNodes(observerHandle) {
observerHandle.disconnect();
@@ -88,6 +90,7 @@ export class DomApi {
* @param {Node} node Node to test
* @return {boolean} Returns true if the given `node` is contained within
* this element's light or shadow DOM.
* @override
*/
deepContains(node) {
if (this.node.contains(node)) {
@@ -110,6 +113,7 @@ export class DomApi {
* exists. If the node is connected to a document this is either a
* shadowRoot or the document; otherwise, it may be the node
* itself or a node or document fragment containing it.
* @override
*/
getOwnerRoot() {
return this.node.getRootNode();
@@ -120,6 +124,7 @@ export class DomApi {
* an empty array. It is equivalent to `<slot>.addignedNodes({flatten:true})`.
*
* @return {!Array<!Node>} Array of assigned nodes
* @override
*/
getDistributedNodes() {
return (this.node.localName === 'slot') ?
@@ -131,6 +136,7 @@ export class DomApi {
* Returns an array of all slots this element was distributed to.
*
* @return {!Array<!HTMLSlotElement>} Description
* @override
*/
getDestinationInsertionPoints() {
let ip$ = [];
@@ -159,6 +165,7 @@ export class DomApi {
/**
* @return {!Array<!Node>} Returns a flattened list of all child nodes and
* nodes assigned to child slots.
* @override
*/
getEffectiveChildNodes() {
return FlattenedNodesObserver.getFlattenedNodes(
@@ -171,6 +178,7 @@ export class DomApi {
*
* @param {string} selector Selector to filter nodes against
* @return {!Array<!HTMLElement>} List of flattened child elements
* @override
*/
queryDistributedElements(selector) {
let c$ = this.getEffectiveChildNodes();
@@ -189,6 +197,7 @@ export class DomApi {
* shadow root.
*
* @return {Node|undefined} Currently focused element
* @override
*/
get activeElement() {
let node = this.node;

View File

@@ -62,6 +62,7 @@ function isSlot(node) {
*
* @summary Class that listens for changes (additions or removals) to
* "flattened nodes" on a given `node`.
* @implements {PolymerDomApi.ObserveHandle}
*/
export class FlattenedNodesObserver {
@@ -168,6 +169,7 @@ export class FlattenedNodesObserver {
* the observer.
*
* @return {void}
* @override
*/
disconnect() {
if (isSlot(this._target)) {