UNPKG

google-closure-compiler

Version:

Check, compile, optimize and compress Javascript with Closure-Compiler

1,718 lines (1,460 loc) • 51 kB
/* * Copyright 2016 The Closure Compiler Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview Closure compiler externs for the Polymer library. * Originally part of the Polymer Project. Original license below. * * @externs * @suppress {strictMissingProperties} * @license * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. * This code may only be used under the BSD style license found at * http://polymer.github.io/LICENSE.txt. The complete set of authors may be * found at http://polymer.github.io/AUTHORS.txt. The complete set of * contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt. Code * distributed by Google as part of the polymer project is also subject to an * additional IP rights grant found at http://polymer.github.io/PATENTS.txt. */ if (Math.random() < 1) { throw "polymer externs should not be executed"; } /** * @param {!{is: string}} descriptor The Polymer descriptor of the element. * @see https://github.com/Polymer/polymer/blob/0.8-preview/PRIMER.md#custom-element-registration */ var Polymer = function(descriptor) {}; /** * Re-evaluates and applies custom CSS properties based on dynamic * changes to this element's scope, such as adding or removing classes. * * For performance reasons, Polymer's custom CSS property shim relies * on this explicit signal from the user to indicate when changes have * been made that affect the values of custom properties. * * @param {Object=} properties Properties object which is mixed into * the document root `customStyle` property. This argument provides a * shortcut for setting `customStyle` and then calling `updateStyles`. * * @see http://polymer.github.io/polymer/ */ Polymer.updateStyles = function(properties) {}; /** @constructor @extends {HTMLElement} */ var PolymerElement = function() {}; /** * A mapping from ID to element in this Polymer Element's local DOM. * @type {!Object} */ PolymerElement.prototype.$; /** * True if the element has been attached to the DOM. * @type {boolean} */ PolymerElement.prototype.isAttached; /** * The root node of the element. * @type {!Node} */ PolymerElement.prototype.root; /** * The root node for the element. * Only exists if running under Shady Dom. * You usually want to use `this.root`. * * @type {?Node|undefined} */ PolymerElement.prototype.shadyRoot; /** * Returns the first node in this element’s local DOM that matches selector. * @param {string} selector * @return {Element} Element found by the selector, or null if not found. */ PolymerElement.prototype.$$ = function(selector) {}; /** @type {string} The custom element tag name. */ PolymerElement.prototype.is; /** @type {null|!HTMLTemplateElement} The element's template. */ PolymerElement.prototype._template; /** @type {string} The native element this element extends. */ PolymerElement.prototype.extends; /** * An array of objects whose properties get added to this element. * @see https://www.polymer-project.org/1.0/docs/devguide/behaviors.html * @type {!Array<!Object>|undefined} */ PolymerElement.prototype.behaviors; /** * A string-separated list of dependent properties that should result in a * change function being called. These observers differ from single-property * observers in that the change handler is called asynchronously. * * @type {!Object<string, string>|undefined} */ PolymerElement.prototype.observers; /** On create callback. */ PolymerElement.prototype.created = function() {}; /** On ready callback. */ PolymerElement.prototype.ready = function() {}; /** On before register callback. */ PolymerElement.prototype.beforeRegister = function() {}; /** On registered callback. */ PolymerElement.prototype.registered = function() {}; /** On attached to the DOM callback. */ PolymerElement.prototype.attached = function() {}; /** On detached from the DOM callback. */ PolymerElement.prototype.detached = function() {}; /** * Callback fired when an attribute on the element has been changed. * * @param {string} name The name of the attribute that changed. */ PolymerElement.prototype.attributeChanged = function(name) {}; /** @typedef {!{ * type: !Function, * reflectToAttribute: (boolean|undefined), * readOnly: (boolean|undefined), * notify: (boolean|undefined), * value: *, * computed: (string|undefined), * observer: (string|undefined) * }} */ PolymerElement.PropertyConfig; /** @typedef {!Object<string, (!Function|!PolymerElement.PropertyConfig)>} */ PolymerElement.Properties; /** @type {!PolymerElement.Properties} */ PolymerElement.prototype.properties; /** @type {!Object<string, *>} */ PolymerElement.prototype.hostAttributes; /** * An object that maps events to event handler function names. * @type {!Object<string, string>} */ PolymerElement.prototype.listeners; /** * Force this element to distribute its children to its local dom. * A user should call `distributeContent` if distribution has been * invalidated due to changes to selectors on child elements that * effect distribution that were not made via `Polymer.dom`. * For example, if an element contains an insertion point with * `<content select=".foo">` and a `foo` class is added to a child, * then `distributeContent` must be called to update * local dom distribution. * @param {boolean} updateInsertionPoints Shady DOM does not detect * <content> insertion that is nested in a sub-tree being appended. * Set to true to distribute to newly added nested <content>'s. */ PolymerElement.prototype.distributeContent = function(updateInsertionPoints) {}; /** * Return the element whose local dom within which this element is contained. * @type {?Element} */ PolymerElement.prototype.domHost; /** * Notifies the event binding system of a change to a property. * @param {string} path The path to set. * @param {*=} value The value to send in the update notification. * @param {boolean=} fromAbove When true, specifies that the change came from * above this element and thus upward notification is not necessary. * @return {boolean} True if notification actually took place, based on a dirty * check of whether the new value was already known. */ PolymerElement.prototype.notifyPath = function(path, value, fromAbove) {}; /** * @param {string} path Path that should be notified. * @param {!Array<!PolymerSplice>} splices Array of splice records indicating * ordered changes that occurred to the array. */ PolymerElement.prototype.notifySplices = function(path, splices) {}; /** * Convienence method for setting a value to a path and notifying any * elements bound to the same path. * * Note, if any part in the path except for the last is undefined, * this method does nothing (this method does not throw when * dereferencing undefined paths). * * @param {(string|Array<(string|number)>)} path Path to the value * to read. The path may be specified as a string (e.g. `foo.bar.baz`) * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that * bracketed expressions are not supported; string-based path parts * *must* be separated by dots. Note that when dereferencing array * indices, the index may be used as a dotted part directly * (e.g. `users.12.name` or `['users', 12, 'name']`). * @param {*} value Value to set at the specified path. * @param {Object=} root Root object from which the path is evaluated. */ PolymerElement.prototype.set = function(path, value, root) {}; /** * Convienence method for reading a value from a path. * * Note, if any part in the path is undefined, this method returns * `undefined` (this method does not throw when dereferencing undefined * paths). * * @param {(string|Array<(string|number)>)} path Path to the value * to read. The path may be specified as a string (e.g. `foo.bar.baz`) * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that * bracketed expressions are not supported; string-based path parts * *must* be separated by dots. Note that when dereferencing array * indices, the index may be used as a dotted part directly * (e.g. `users.12.name` or `['users', 12, 'name']`). * @param {Object=} root Root object from which the path is evaluated. * @return {*} Value at the path, or `undefined` if any part of the path * is undefined. */ PolymerElement.prototype.get = function(path, root) {}; /** * Adds items onto the end of the array at the path specified. * * The arguments after `path` and return value match that of * `Array.prototype.push`. * * This method notifies other paths to the same array that a * splice occurred to the array. * * @param {string} path Path to array. * @param {...*} var_args Items to push onto array * @return {number} New length of the array. */ PolymerElement.prototype.push = function(path, var_args) {}; /** * Removes an item from the end of array at the path specified. * * The arguments after `path` and return value match that of * `Array.prototype.pop`. * * This method notifies other paths to the same array that a * splice occurred to the array. * * @param {string} path Path to array. * @return {*} Item that was removed. */ PolymerElement.prototype.pop = function(path) {}; /** * Starting from the start index specified, removes 0 or more items * from the array and inserts 0 or more new itms in their place. * * The arguments after `path` and return value match that of * `Array.prototype.splice`. * * This method notifies other paths to the same array that a * splice occurred to the array. * * @param {string} path Path to array. * @param {number} start Index from which to start removing/inserting. * @param {number} deleteCount Number of items to remove. * @param {...*} var_args Items to insert into array. * @return {!Array} Array of removed items. */ PolymerElement.prototype.splice = function(path, start, deleteCount, var_args) {}; /** * Removes an item from the beginning of array at the path specified. * * The arguments after `path` and return value match that of * `Array.prototype.pop`. * * This method notifies other paths to the same array that a * splice occurred to the array. * * @param {string} path Path to array. * @return {*} Item that was removed. */ PolymerElement.prototype.shift = function(path) {}; /** * Adds items onto the beginning of the array at the path specified. * * The arguments after `path` and return value match that of * `Array.prototype.push`. * * This method notifies other paths to the same array that a * splice occurred to the array. * * @param {string} path Path to array. * @param {...*} var_args Items to insert info array * @return {number} New length of the array. */ PolymerElement.prototype.unshift = function(path, var_args) {}; /** * Returns a list of element children distributed to this element's * `<content>`. * * If this element contans more than one `<content>` in its * local DOM, an optional selector may be passed to choose the desired * content. This method differs from `getContentChildNodes` in that only * elements are returned. * * @param {string=} slctr CSS selector to choose the desired * `<content>`. Defaults to `content`. * @return {!Array<!HTMLElement>} List of distributed nodes for the * `<content>`. */ PolymerElement.prototype.getContentChildren = function(slctr) {}; /** * Returns a list of nodes that are the effective childNodes. The effective * childNodes list is the same as the element's childNodes except that * any `<content>` elements are replaced with the list of nodes distributed * to the `<content>`, the result of its `getDistributedNodes` method. * * @return {!Array<!Node>} List of effective child nodes. */ PolymerElement.prototype.getEffectiveChildNodes = function() {}; /** * Returns a list of elements that are the effective children. The effective * children list is the same as the element's children except that * any `<content>` elements are replaced with the list of elements * distributed to the `<content>`. * * @return {!Array<!Node>} List of effective children. */ PolymerElement.prototype.getEffectiveChildren = function() {}; /** * Returns a string of text content that is the concatenation of the * text content's of the element's effective childNodes (the elements * returned by <a href="#getEffectiveChildNodes>getEffectiveChildNodes</a>. * * @return {string} A concatenated string of all effective childNode text * content. */ PolymerElement.prototype.getEffectiveTextContent = function() {}; /** * Returns the first effective child that match selector. * * @param {string} selector * @return {?HTMLElement} */ PolymerElement.prototype.queryEffectiveChildren = function(selector) {}; /** * Returns a list of effective children that match selector. * * @param {string} selector * @return {!Array<!HTMLElement>} */ PolymerElement.prototype.queryAllEffectiveChildren = function(selector) {}; /** * Fire an event. * * @param {string} type An event name. * @param {*=} detail * @param {{ * bubbles: (boolean|undefined), * cancelable: (boolean|undefined), * node: (!EventTarget|undefined)}=} options * @return {Object} event */ PolymerElement.prototype.fire = function(type, detail, options) {}; /** * Toggles the named boolean class on the host element, adding the class if * bool is truthy and removing it if bool is falsey. If node is specified, sets * the class on node instead of the host element. * @param {string} name * @param {boolean=} bool * @param {HTMLElement=} node */ PolymerElement.prototype.toggleClass = function(name, bool, node) {}; /** * Toggles the named boolean attribute on the host element, adding the attribute * if bool is truthy and removing it if bool is falsey. If node is specified, * sets the attribute on node instead of the host element. * @param {string} name * @param {boolean=} bool * @param {HTMLElement=} node */ PolymerElement.prototype.toggleAttribute = function(name, bool, node) {}; /** * Moves a boolean attribute from oldNode to newNode, unsetting the attribute * (if set) on oldNode and setting it on newNode. * @param {string} name * @param {!HTMLElement} newNode * @param {!HTMLElement} oldNode */ PolymerElement.prototype.attributeFollows = function(name, newNode, oldNode) {}; /** * Convenience method to add an event listener on a given element, late bound to * a named method on this element. * @param {!EventTarget} node Element to add event listener to. * @param {string} eventName Name of event to listen for. * @param {string} methodName Name of handler method on this to call. */ PolymerElement.prototype.listen = function(node, eventName, methodName) {}; /** * Convenience method to remove an event listener from a given element. * @param {?EventTarget} node Element to remove event listener from. * @param {string} eventName Name of event to stop listening for. * @param {string} methodName Name of handler method on this to remove. */ PolymerElement.prototype.unlisten = function(node, eventName, methodName) {}; /** * Override scrolling behavior to all direction, one direction, or none. * * Valid scroll directions: * 'all': scroll in any direction * 'x': scroll only in the 'x' direction * 'y': scroll only in the 'y' direction * 'none': disable scrolling for this node * * @param {string=} direction Direction to allow scrolling Defaults to all. * @param {HTMLElement=} node Element to apply scroll direction setting. * Defaults to this. */ PolymerElement.prototype.setScrollDirection = function(direction, node) {}; /** * @param {!Function} method * @param {number=} wait * @return {number} A handle which can be used to cancel the job. */ PolymerElement.prototype.async = function(method, wait) {}; /** * @param {...*} var_args */ PolymerElement.prototype.factoryImpl = function(var_args) {}; /** * Apply style scoping to the specified container and all its descendants. * @param {!Element} container Element to scope. * @param {boolean} shouldObserve When true, monitors the container for changes * and re-applies scoping for any future changes. */ PolymerElement.prototype.scopeSubtree = function(container, shouldObserve) {}; /** * Aliases one data path as another, such that path notifications from one * are routed to the other. * * @param {string} to Target path to link. * @param {string} from Source path to link. */ PolymerElement.prototype.linkPaths = function(to, from) {} /** * Removes a data path alias previously established with `linkPaths`. * * Note, the path to unlink should be the target (`to`) used when * linking the paths. * * @param {string} path Target path to unlink. */ PolymerElement.prototype.unlinkPaths = function(path) {} /** * Copies own properties (including accessor descriptors) from a source * object to a target object. * * @param {?Object} target Target object to copy properties to. * @param {?Object} source Source object to copy properties from. * @return {?Object} Target object that was passed as first argument or source * object if the target was null. */ PolymerElement.prototype.extend = function(target, source) {}; /** @const */ Polymer.Base = {}; /** * Used by the promise-polyfill on its own. * * @param {!Function} method * @param {number=} wait * @return {number} A handle which can be used to cancel the job. */ Polymer.Base.async = function(method, wait) {}; /** * @param {string} tag * @param {!Object=} props * @return {!Element} */ Polymer.Base.create = function(tag, props) {}; /** * Copies own properties (including accessor descriptors) from a source * object to a target object. * * @param {?Object} target Target object to copy properties to. * @param {?Object} source Source object to copy properties from. * @return {?Object} Target object that was passed as first argument or source * object if the target was null. */ Polymer.Base.extend = function(target, source) {}; /** * Returns a property descriptor object for the property specified. * * This method allows introspecting the configuration of a Polymer element's * properties as configured in its `properties` object. Note, this method * normalizes shorthand forms of the `properties` object into longhand form. * * @param {string} property Name of property to introspect. * @return {Object} Property descriptor for specified property. */ Polymer.Base.getPropertyInfo = function(property) {}; /** * Dynamically imports an HTML document. * @param {string} href * @param {Function=} onload * @param {Function=} onerror * @param {boolean=} async */ Polymer.Base.importHref = function(href, onload, onerror, async) {}; /** * Copies props from a source object to a target object. * * Note, this method uses a simple `for...in` strategy for enumerating * properties. To ensure only `ownProperties` are copied from source * to target and that accessor implementations are copied, use `extend`. * * @param {!Object} target Target object to copy properties to. * @param {?Object} source Source object to copy properties from. * @return {!Object} Target object that was passed as first argument. */ Polymer.Base.mixin = function(target, source) {}; /** * @param {string|!Array<string|number>} path * @param {!Object=} root * @return {*} */ Polymer.Base.get = function(path, root) {}; /** * @param {string} type * @param {*=} detail * @param {!Object=} options * @return {!CustomEvent} */ Polymer.Base.fire = function(type, detail, options) {}; /** * For Polymer internal use only, except for * github.com/Polymer/polymer/issues/4138 * @type {!function (!Node, ?string, *, ?Object)} */ Polymer.Base._computeFinalAnnotationValue; /** * @param {...*} var_args * For Polymer-internal use only. */ Polymer.Base._warn = function(var_args) {}; /** * @param {...*} var_args * For Polymer-internal use only. */ Polymer.Base._error = function(var_args) {}; /** @const */ Polymer.Gestures = {}; /** * @param {!Node} node * @param {string} evType * @param {?Function} handler * @return {boolean} * @deprecated Use addListener. */ Polymer.Gestures.add = function(node, evType, handler) {}; /** * @param {!Node} node * @param {string} evType * @param {?Function} handler * @return {boolean} */ Polymer.Gestures.addListener = function(node, evType, handler) {}; /** * Gets the original target of the given event. * * Cheaper than Polymer.dom(ev).path[0]; * See https://github.com/Polymer/polymer/blob/master/src/standard/gestures.html#L191 * * @param {Event} ev . * @return {Element} The original target of the event. */ Polymer.Gestures.findOriginalTarget = function(ev) {}; /** * @type {!Object} */ Polymer.Gestures.gestures = {}; /** * @param {Node} node * @param {string} value */ Polymer.Gestures.setTouchAction = function(node, value) {}; /** * @type {!Object} */ Polymer.Gestures.gestures.tap = {}; /** * Reset the tap gesture's state manually * @type {function()} */ Polymer.Gestures.gestures.tap.reset = function() {}; /** * @param {number} handle */ PolymerElement.prototype.cancelAsync = function(handle) {}; /** * Call debounce to collapse multiple requests for a named task into one * invocation, which is made after the wait time has elapsed with no new * request. If no wait time is given, the callback is called at microtask timing * (guaranteed to be before paint). * @param {string} jobName * @param {!Function} callback * @param {number=} wait */ PolymerElement.prototype.debounce = function(jobName, callback, wait) {}; /** * Cancels an active debouncer without calling the callback. * @param {string} jobName */ PolymerElement.prototype.cancelDebouncer = function(jobName) {}; /** * Calls the debounced callback immediately and cancels the debouncer. * @param {string} jobName */ PolymerElement.prototype.flushDebouncer = function(jobName) {}; /** * @param {string} jobName * @return {boolean} True if the named debounce task is waiting to run. */ PolymerElement.prototype.isDebouncerActive = function(jobName) {}; /** * Applies a CSS transform to the specified node, or this element if no node is * specified. transform is specified as a string. * @param {string} transform * @param {HTMLElement=} node */ PolymerElement.prototype.transform = function(transform, node) {}; /** * Transforms the specified node, or this element if no node is specified. * @param {number|string} x * @param {number|string} y * @param {number|string} z * @param {HTMLElement=} node */ PolymerElement.prototype.translate3d = function(x, y, z, node) {}; /** * Dynamically imports an HTML document. * @param {string} href * @param {Function=} onload * @param {Function=} onerror * @param {boolean=} async */ PolymerElement.prototype.importHref = function(href, onload, onerror, async) {}; /** * Checks whether an element is in this element's light DOM tree. * @param {?Node} node The element to be checked. * @return {boolean} true if node is in this element's light DOM tree. */ PolymerElement.prototype.isLightDescendant = function(node) {}; /** * Checks whether an element is in this element's local DOM tree. * @param {?Node} node The element to be checked. * @return {boolean} true if node is in this element's local DOM tree. */ PolymerElement.prototype.isLocalDescendant = function(node) {}; /** * Delete an element from an array. * @param {!Array|string} array Path to array from which to remove the item (or * the array itself). * @param {*} item Item to remove * @return {!Array} The array with the item removed. */ PolymerElement.prototype.arrayDelete = function(array, item) {}; /** * Resolve a url to make it relative to the current doc. * @param {string} url * @return {string} */ PolymerElement.prototype.resolveUrl = function(url) {}; /** * Re-evaluates and applies custom CSS properties based on dynamic * changes to this element's scope, such as adding or removing classes * in this element's local DOM. * * For performance reasons, Polymer's custom CSS property shim relies * on this explicit signal from the user to indicate when changes have * been made that affect the values of custom properties. * * @param {Object=} properties Properties object which, if provided is mixed * into the element's `customStyle` property. This argument provides a * shortcut for setting `customStyle` and then calling `updateStyles`. */ PolymerElement.prototype.updateStyles = function(properties) {}; /** * @type {!Object<string, string|undefined>} */ PolymerElement.prototype.customStyle; /** * Convenience method for creating an element and configuring it. * @param {string} tagName HTML tag name * @param {IObject<string, *>=} properties Object of properties to configure on the instance * @return {!Element} */ PolymerElement.prototype.create = function(tagName, properties) {}; /** * Returns the computed style value for the given property. * @param {string} property * @return {string} the computed value */ PolymerElement.prototype.getComputedStyleValue = function(property) {}; /** * Logs a message to the console. * * @param {...*} var_args * @protected */ PolymerElement.prototype._log = function(var_args) {}; /** * Logs a message to the console with a 'warn' level. * * @param {...*} var_args * @protected */ PolymerElement.prototype._warn = function(var_args) {}; /** * Logs a message to the console with an 'error' level. * * @param {...*} var_args * @protected */ PolymerElement.prototype._error = function(var_args) {}; /** * Formats string arguments together for a console log. * * @param {...*} var_args * @return {!Array} The formatted array of args to a log function. * @protected */ PolymerElement.prototype._logf = function(var_args) {}; /** @type {boolean} True after this.ready() has run */ PolymerElement.prototype._readied; /** * Do not call this function. * * @param {string} path . * @param {*} value . */ PolymerElement.prototype._notifyPathUp = function(path, value) {}; /** * Do not call this function. * * @param {string} path . * @param {*} value . */ PolymerElement.prototype._pathEffector = function(path, value) {}; /** * Do not call this function. * * @param {string} path . * @param {*} value . */ PolymerElement.prototype._propertySetter = function(path, value) {}; /** * Do not call this function. * * @param {string} path . */ PolymerElement.prototype._notifyChange = function(path) {}; /** * A Polymer DOM API for manipulating DOM such that local DOM and light DOM * trees are properly maintained. * * @constructor */ var PolymerDomApi = function() {}; /** * @param {?Node} node * @return {boolean} */ PolymerDomApi.prototype.deepContains = function(node) {}; /** @param {!Node} node */ PolymerDomApi.prototype.appendChild = function(node) {}; /** * @param {!Node} oldNode * @param {!Node} newNode */ PolymerDomApi.prototype.replaceChild = function(oldNode, newNode) {}; /** * @param {!Node} node * @param {?Node} beforeNode */ PolymerDomApi.prototype.insertBefore = function(node, beforeNode) {}; /** @param {!Node} node */ PolymerDomApi.prototype.removeChild = function(node) {}; /** @type {!Array<!HTMLElement>} */ PolymerDomApi.prototype.children; /** @type {!Array<!Node>} */ PolymerDomApi.prototype.childNodes; /** @type {?Node} */ PolymerDomApi.prototype.parentNode; /** @type {?Node} */ PolymerDomApi.prototype.firstChild; /** @type {?Node} */ PolymerDomApi.prototype.lastChild; /** @type {?HTMLElement} */ PolymerDomApi.prototype.firstElementChild; /** @type {?HTMLElement} */ PolymerDomApi.prototype.lastElementChild; /** @type {?Node} */ PolymerDomApi.prototype.previousSibling; /** @type {?Node} */ PolymerDomApi.prototype.nextSibling; /** @type {?HTMLElement} */ PolymerDomApi.prototype.previousElementSibling; /** @type {?HTMLElement} */ PolymerDomApi.prototype.nextElementSibling; /** @type {string} */ PolymerDomApi.prototype.textContent; /** @type {string} */ PolymerDomApi.prototype.innerHTML; /** @type {?HTMLElement} */ PolymerDomApi.prototype.activeElement; /** * @param {string} selector * @return {?HTMLElement} */ PolymerDomApi.prototype.querySelector = function(selector) {}; /** * @param {string} selector * @return {!Array<!HTMLElement>} */ PolymerDomApi.prototype.querySelectorAll = function(selector) {}; /** @return {!Array<!Node>} */ PolymerDomApi.prototype.getDistributedNodes = function() {}; /** @return {!Array<!Node>} */ PolymerDomApi.prototype.getDestinationInsertionPoints = function() {}; /** @return {?Node} */ PolymerDomApi.prototype.getOwnerRoot = function() {}; /** * @param {string} attribute * @param {string|number|boolean} value Values are converted to strings with * ToString, so we accept number and boolean since both convert easily to * strings. */ PolymerDomApi.prototype.setAttribute = function(attribute, value) {}; /** @param {string} attribute */ PolymerDomApi.prototype.removeAttribute = function(attribute) {}; /** * @typedef {function(!PolymerDomApi.ObserveInfo)} */ PolymerDomApi.ObserveCallback; /** * @typedef {{ * target: !Node, * addedNodes: !Array<!Node>, * removedNodes: !Array<!Node> * }} */ PolymerDomApi.ObserveInfo; /** * A virtual type for observer callback handles. * * @private @constructor */ PolymerDomApi.ObserveHandle = function() {}; /** * Notifies callers about changes to the element's effective child nodes, * the same list as returned by `getEffectiveChildNodes`. * * @param {!PolymerDomApi.ObserveCallback} callback The supplied callback * is called with an `info` argument which is an object that provides * the `target` on which the changes occurred, a list of any nodes * added in the `addedNodes` array, and nodes removed in the * `removedNodes` array. * * @return {!PolymerDomApi.ObserveHandle} Handle which is the argument to * `unobserveNodes`. */ PolymerDomApi.prototype.observeNodes = function(callback) {}; /** * Stops observing changes to the element's effective child nodes. * * @param {!PolymerDomApi.ObserveHandle} handle The handle for the * callback that should no longer receive notifications. This * handle is returned from `observeNodes`. */ PolymerDomApi.prototype.unobserveNodes = function(handle) {}; /** @type {?DOMTokenList} */ PolymerDomApi.prototype.classList; /** * @param {string} selector * @return {!Array<!HTMLElement>} */ PolymerDomApi.prototype.queryDistributedElements = function(selector) {}; /** * Returns a list of effective child nodes for this element. * * @return {!Array<!HTMLElement>} */ PolymerDomApi.prototype.getEffectiveChildNodes = function() {}; /** * A Polymer Event API. * * @constructor */ var PolymerEventApi = function() {}; /** @type {?EventTarget} */ PolymerEventApi.prototype.rootTarget; /** @type {?EventTarget} */ PolymerEventApi.prototype.localTarget; /** @type {?Array<!Element>|undefined} */ PolymerEventApi.prototype.path; /** @type {Event} */ PolymerEventApi.prototype.event; /** @const */ Polymer.Async = {}; /** * @param {function()} callback * @param {number=} waitTime * @return {number} */ Polymer.Async.run = function (callback, waitTime) {}; /** * @param {number} handle */ Polymer.Async.cancel = function(handle) {}; /** * polymer-onerror experiment relies on this private API, so expose it only * to let the compilation work. Do not use in user code. */ Polymer.Async._atEndOfMicrotask = function() {}; /** * Returns a Polymer-friendly API for manipulating DOM of a specified node or * an event API for a specified event.. * * @param {?Node|?Event} nodeOrEvent * @return {!PolymerDomApi|!PolymerEventApi} */ Polymer.dom = function(nodeOrEvent) {}; Polymer.dom.flush = function() {}; /** @constructor */ Polymer.Debouncer = function() {}; Polymer.Debouncer.prototype = { /** * @param {function()} callback * @param {number} wait */ go: function(callback, wait) {}, stop: function() {}, complete: function() {} }; /** @param {!Polymer.Debouncer} debouncer */ Polymer.dom.addDebouncer = function(debouncer) {}; /** * Returns whether the given object is an instance of a Polymer element. * @param {*} object * @return {boolean} */ Polymer.isInstance = function(object) {}; /** @const */ Polymer.CaseMap = {}; /** * Convert a string from dash to camel-case. * @param {string} dash * @return {string} The string in camel-case. */ Polymer.CaseMap.dashToCamelCase = function(dash) {}; /** * Convert a string from camel-case to dash format. * @param {string} camel * @return {string} The string in dash format. */ Polymer.CaseMap.camelToDashCase = function(camel) {}; /** * A Polymer data structure abstraction. * * @param {?Array} userArray * @constructor */ Polymer.Collection = function(userArray) {}; Polymer.Collection.prototype.initMap = function() {}; /** * @param {*} item */ Polymer.Collection.prototype.add = function(item) {}; /** * @param {number|string} key */ Polymer.Collection.prototype.removeKey = function(key) {}; /** * @param {*} item * @return {number|string} The key of the item removed. */ Polymer.Collection.prototype.remove = function(item) {}; /** * @param {*} item * @return {number|string} The key of the item. */ Polymer.Collection.prototype.getKey = function(item) {}; /** * @return {!Array<number|string>} The key of the item removed. */ Polymer.Collection.prototype.getKeys = function() {}; /** * @param {number|string} key * @param {*} item */ Polymer.Collection.prototype.setItem = function(key, item) {}; /** * @param {number|string} key * @return {*} The item for the given key if present. */ Polymer.Collection.prototype.getItem = function(key) {}; /** * @return {!Array} The items in the collection */ Polymer.Collection.prototype.getItems = function() {}; /** * @param {!Array} userArray * @return {!Polymer.Collection} A new Collection wrapping the given array. */ Polymer.Collection.get = function(userArray) {}; /** * @param {!Array} userArray * @param {!Array<!PolymerSplice>} splices * @return {!Array<!PolymerKeySplice>} KeySplices with added and removed keys */ Polymer.Collection.applySplices = function(userArray, splices) {}; /** * Settings pulled from * https://github.com/Polymer/polymer/blob/master/lib/utils/settings.html * @const */ Polymer.Settings = {}; /** @type {string} */ Polymer.Settings.dom; /** @type {boolean} */ Polymer.Settings.wantShadow; /** @type {boolean} */ Polymer.Settings.hasShadow; /** @type {boolean} */ Polymer.Settings.nativeShadow; /** @type {boolean} */ Polymer.Settings.useShadow; /** @type {boolean} */ Polymer.Settings.useNativeShadow; /** @type {boolean} */ Polymer.Settings.useNativeImports; /** @type {boolean} */ Polymer.Settings.useNativeCustomElements; /** @type {boolean} */ Polymer.Settings.useNativeCSSProperties; /** * @see https://github.com/Polymer/polymer/blob/master/src/lib/template/templatizer.html * @polymerBehavior */ Polymer.Templatizer = { ctor: function() {}, /** * @param {?Object=} model * @return {?Element} */ stamp: function(model) {}, /** * @param {?Element} template * @param {boolean=} mutableData In Polymer 1.x, passing this argument is a * no-op. */ templatize: function(template, mutableData) {}, /** * Returns the template "model" associated with a given element, which * serves as the binding scope for the template instance the element is * contained in. A template model is an instance of `Polymer.Base`, and * should be used to manipulate data associated with this template instance. * * Example: * * var model = modelForElement(el); * if (model.index < 10) { * model.set('item.checked', true); * } * * @param {?HTMLElement} el Element for which to return a template model. * @return {(!PolymerElement)|undefined} Model representing the binding scope for * the element. */ modelForElement: function(el) {}, /** * @param {function()} fn * @protected */ _debounceTemplate: function(fn) {} }; /** * A node produced by Templatizer which has a templateInstance property. * * @constructor * @extends {HTMLElement} */ var TemplatizerNode = function() {}; /** @type {?PolymerElement} */ TemplatizerNode.prototype._templateInstance; /** * @see https://github.com/Polymer/polymer/blob/1.x/src/lib/template/dom-if.html * @extends {PolymerElement} * @constructor */ var DomIf = function() {}; /** * Forces the element to render its content. Normally rendering is * asynchronous to a provoking change. This is done for efficiency so * that multiple changes trigger only a single render. The render method * should be called if, for example, template rendering is required to * validate application state. */ DomIf.prototype.render = function() {}; /** * @see https://github.com/Polymer/polymer/blob/master/src/lib/template/dom-repeat.html * @extends {PolymerElement} * @constructor */ var DomRepeatElement = function() {}; /** * Forces the element to render its content. Normally rendering is * asynchronous to a provoking change. This is done for efficiency so * that multiple changes trigger only a single render. The render method * should be called if, for example, template rendering is required to * validate application state. */ DomRepeatElement.prototype.render = function() {}; /** * Returns the item associated with a given element stamped by * this `dom-repeat`. * * @param {!HTMLElement} el Element for which to return the item. * @return {*} Item associated with the element. */ DomRepeatElement.prototype.itemForElement = function(el) {}; /** * Returns the `Polymer.Collection` key associated with a given * element stamped by this `dom-repeat`. * * @param {!HTMLElement} el Element for which to return the key. * @return {*} Key associated with the element. */ DomRepeatElement.prototype.keyForElement = function(el) {}; /** * Returns the inst index for a given element stamped by this `dom-repeat`. * If `sort` is provided, the index will reflect the sorted order (rather * than the original array order). * * @param {!HTMLElement} el Element for which to return the index. * @return {*} Row index associated with the element (note this may * not correspond to the array index if a user `sort` is applied). */ DomRepeatElement.prototype.indexForElement = function(el) {}; /** * Count of currently rendered items after `filter` (if any) has been applied. * If "chunking mode" is enabled, `renderedItemCount` is updated each time a * set of template instances is rendered. * * @type {number} */ DomRepeatElement.prototype.renderedItemCount; /** * Event object for an event handler on a child of a dom-repeat template. * @see https://www.polymer-project.org/1.0/docs/devguide/templates#handling-events * @extends {CustomEvent} * @constructor * @template T */ var DomRepeatEvent = function() {}; /** * @type {{ * index: number, * item: T * }} */ DomRepeatEvent.prototype.model; /** * @see https://github.com/Polymer/polymer/blob/master/src/lib/template/array-selector.html * @extends {PolymerElement} * @constructor */ var ArraySelectorElement = function() {}; /** * Returns whether the item is currently selected. * * @param {*} item Item from `items` array to test * @return {boolean} Whether the item is selected */ ArraySelectorElement.prototype.isSelected = function(item) {}; /** * Clears the selection state. */ ArraySelectorElement.prototype.clearSelection = function() {}; /** * Deselects the given item if it is already selected. * * @param {*} item Item from `items` array to deselect */ ArraySelectorElement.prototype.deselect = function(item) {}; /** * Selects the given item. When `toggle` is true, this will automatically * deselect the item if already selected. * * @param {*} item Item from `items` array to select */ ArraySelectorElement.prototype.select = function(item) {}; /** * An Event type fired when moving while finger/button is down. * state - a string indicating the tracking state: * + start: fired when tracking is first detected (finger/button down and * moved past a pre-set distance threshold) * + track: fired while tracking * + end: fired when tracking ends * x - clientX coordinate for event * y - clientY coordinate for event * dx - change in pixels horizontally since the first track event * dy - change in pixels vertically since the first track event * ddx - change in pixels horizontally since last track event * ddy - change in pixels vertically since last track event * hover() - a function that may be called to determine the element currently * being hovered * * @typedef {{ * state: string, * x: number, * y: number, * dx: number, * dy: number, * ddx: number, * ddy: number, * hover: (function(): Node) * }} */ var PolymerTrackEvent; /** * An Event type fired when a finger does down, up, or taps. * x - clientX coordinate for event * y - clientY coordinate for event * sourceEvent - the original DOM event that caused the down action * * @typedef {{ * x: number, * y: number, * sourceEvent: Event * }} */ var PolymerTouchEvent; /** * @typedef {{ * index: number, * removed: !Array, * addedCount: number, * object: !Array, * type: string, * }} */ var PolymerSplice; /** * @typedef {{ * added: !Array<string|number>, * removed: !Array<string|number> * }} */ var PolymerKeySplice; /** * @typedef {{ * indexSplices: ?Array<!PolymerSplice>, * keySplices: ?Array<!PolymerKeySplice> * }} */ var PolymerSpliceChange; /** * The type of the object received by an observer function when deep * sub-property observation is enabled. See: * https://www.polymer-project.org/1.0/docs/devguide/properties.html#deep-observation * * @typedef {{ * path: string, * value: (?Object|undefined), * base: (?Object|undefined) * }} */ var PolymerDeepPropertyChange; /** * The interface that iconsets should obey. Iconsets are registered by setting * their name in the IronMeta 'iconset' db, and a value of type Polymer.Iconset. * * Used by iron-icon but needs to live here since iron-icon, iron-iconset, etc don't * depend on each other at all and talk only through iron-meta. * * @interface */ Polymer.Iconset = function() {}; /** * Applies an icon to the given element as a css background image. This * method does not size the element, and it's usually necessary to set * the element's height and width so that the background image is visible. * * @param {Element} element The element to which the icon is applied. * @param {string} icon The name of the icon to apply. * @param {string=} theme (optional) The name or index of the icon to apply. * @param {number=} scale (optional, defaults to 1) Icon scaling factor. */ Polymer.Iconset.prototype.applyIcon = function( element, icon, theme, scale) {}; /** * Remove an icon from the given element by undoing the changes effected * by `applyIcon`. * * @param {Element} element The element from which the icon is removed. */ Polymer.Iconset.prototype.removeIcon = function(element) {}; Polymer.ResolveUrl = {}; /** * @param {string} cssText Some CSS text taken from ownerDocument. * @param {!Document} ownerDocument The source of the css. * @return {string} The given CSS text with its URLs rewritten to be based on * the primary document of this window rather than the given ownerDocument. */ Polymer.ResolveUrl.resolveCss = function(cssText, ownerDocument) {} /** * @param {!Element} element An element whose URL attributes need to be renormed. * @param {!Document} ownerDocument The document whose URL is the base of the * element's current attributes. */ Polymer.ResolveUrl.resolveAttrs = function(element, ownerDocument) {} /** * @param {string} url A url that needs to be renormed. * @param {?string} baseURI The current base of URL for the URL. * @return {string} The given url rewritten to be based on * the primary document of this window rather than the given url. */ Polymer.ResolveUrl.resolveUrl = function(url, baseURI) {} /** @const */ Polymer.RenderStatus = {}; /** * Makes callback when first render occurs or immediately if render has * occurred. * @param {!function()} cb Callback function to be invoked. */ Polymer.RenderStatus.whenReady = function(cb) {} /** * Queue up function call on next render. * @param {!Element} element The element on which the function call is made. * @param {!function()} fn The function called on next render. * @param {...*} args The function arguments. */ Polymer.RenderStatus.afterNextRender = function(element, fn, args) {} /** * Static analysis for Polymer. * @const */ var hydrolysis = {}; /** * A database of Polymer metadata defined in HTML * @param {boolean} attachAST If true, attach a parse5 compliant AST * @param {Object=} opt_loader An optional FileLoader used to load * external resources */ hydrolysis.Analyzer = function(attachAST, opt_loader) {}; /** * Shorthand for transitively loading and processing all imports * beginning at href. * @param {string} href The root import to begin loading from. * @param {Object=} opt_options Any additional options for the load. */ hydrolysis.Analyzer.analyze = function(href, opt_options) {}; /** * Contains information useful for debugging. Should not be used in production * code and the API may change on short notice. * @const */ Polymer.telemetry = {}; /** * Number of elements instantiated so far. * @type {number} */ Polymer.telemetry.instanceCount; /** * Array of all registered element prototypes. Being prototypes, not all runtime * properties will be available, but eg. `is` is always there. * @type {!Array<!PolymerElement>} */ Polymer.telemetry.registrations; /** @const */ Polymer.AppLayout = {}; /** @constructor */ Polymer.AppLayout.LocalDomWithBackground = function(){}; /** @type {!HTMLElement} */ Polymer.AppLayout.LocalDomWithBackground.prototype.backgroundFrontLayer; /** @type {!HTMLElement} */ Polymer.AppLayout.LocalDomWithBackground.prototype.backgroundRearLayer; /** @type {!HTMLElement} */ Polymer.AppLayout.LocalDomWithBackground.prototype.background; /** * @constructor * @extends {PolymerElement} */ Polymer.AppLayout.ElementWithBackground = function(){}; // TODO(ajo): Follow up with app-layout team and remove private api from this prototype Polymer.AppLayout.ElementWithBackground.prototype = { /** @type {!Polymer.AppLayout.LocalDomWithBackground} */ $: null, /** @return {boolean} True if there's content below the current element */ isContentBelow: function(){}, /** Updates the elements scroll state */ _updateScrollState: function(){}, /** @return {boolean} true if the element is on screen */ isOnScreen: function(){}, /** @type {number} Internal bookkeeping to track screen position */ _deltaHeight: 0, /** @return {?Element} Element in local dom by id. */ _getDOMRef: function(title){} } /** @const */ Polymer.ArraySplice = {}; /** * Returns an array of splice records indicating the minimum edits required * to transform the `previous` array into the `current` array. * * Splice records are ordered by index and contain the following fields: * - `index`: index where edit started * - `removed`: array of removed items from this index * - `addedCount`: number of items added at this index * * This function is based on the Levenshtein "minimum edit distance" * algorithm. Note that updates are treated as removal followed by addition. * * The worst-case time complexity of this algorithm is `O(l * p)` * l: The length of the current array * p: The length of the previous array * * However, the worst-case complexity is reduced by an `O(n)` optimization * to detect any shared prefix & suffix between the two arrays and only * perform the more expensive minimum edit distance calculation over the * non-shared portions of the arrays. * * @param {!Array} current The "changed" array for which splices will be * calculated. * @param {!Array} previous The "unchanged" original array to compare * `current` against to determine the splices. * @return {!Array} Returns an array of splice record objects. Each of these * contains: `index` the location where the splice occurred; `removed` * the array of removed items from this location; `addedCount` the number * of items added at this location. */ Polymer.ArraySplice.calculateSplices = function(current, previous) {}; /** * @constructor @extends {PolymerElement} */ Polymer.DomModule = function() {}; /** * Retrieves the dom specified by `selector` in the module specified by * `id`. For example, this.import('foo', 'img'); * @param {string} id * @param {string=} opt_selector * @return {?HTMLElement} Returns the dom which matches `selector` in the module * at the specified `id`. */ Polymer.DomModule.import = function(id, opt_selector) {}; /** @const */ Polymer.Path = { /** * @param {string=} base * @param {string=} newBase * @param {string=} path * @return {string} */ translate: function(base, newBase, path) {}, /** * @param {string=} base * @param {string=} wildcard * @param {string=