{"version":3,"sources":["mdlComponentHandler.js","tabs.js","layout.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","ripple.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","preventDefault","resetTabState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","show","window","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","getAttribute","split","isElementUpgraded_","upgradedList","indexOf","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","ev","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","registerInternal","widgetMissing","newConfig","constructor","classAsString","item","hasOwnProperty","found","registerUpgradedCallbackInternal","regClass","upgradeAllRegisteredInternal","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","querySelector","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","resetPanelState_","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","innerContainer_","INNER_CONTAINER","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","content_","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform"],"mappings":"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","file":"material.min.js","sourcesContent":["if (typeof window === 'undefined') return;\n\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var ev;\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n ev = new CustomEvent('mdl-componentupgraded', {\n bubbles: true, cancelable: false\n });\n } else {\n ev = document.createEvent('Events');\n ev.initEvent('mdl-componentupgraded', true, true);\n }\n element.dispatchEvent(ev);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev;\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n ev = new CustomEvent('mdl-componentdowngraded', {\n bubbles: true, cancelable: false\n });\n } else {\n ev = document.createEvent('Events');\n ev.initEvent('mdl-componentdowngraded', true, true);\n }\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n ctx.resetTabState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n this.innerContainer_ = element.querySelector('.' + this.CssClasses_.INNER_CONTAINER);\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n INNER_CONTAINER: 'mdl-layout__inner-container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.innerContainer_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var focusedElement = this.element_.querySelector(':focus');\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.innerContainer_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.innerContainer_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.innerContainer_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n this.element_.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.innerContainer_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.innerContainer_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.innerContainer_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n layout.resetTabState_(tabs);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n e.preventDefault();\n selectTab();\n });\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});"],"sourceRoot":"/source/"}