{"version":3,"sources":["mdlComponentHandler.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","spinner.js","switch.js","tabs.js","textfield.js","tooltip.js","layout.js","data-table.js","ripple.js","main.js"],"names":["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","createEvent_","eventType","bubbles","cancelable","window","CustomEvent","ev","document","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","classList","forEach","component","contains","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","registerInternal","widgetMissing","newConfig","constructor","classAsString","item","hasOwnProperty","found","registerUpgradedCallbackInternal","regClass","upgradeAllRegisteredInternal","deconstructComponentInternal","componentIndex","splice","upgrades","element_","componentPlace","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","addEventListener","createElement","documentElement","add","MaterialButton","this","init","Constant_","CssClasses_","RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","blurHandler_","event","blur","disable","disabled","enable","rippleContainer","rippleElement_","appendChild","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","setTimeout","inputElement_","checked","check","uncheck","querySelector","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","ripple","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","JS_RIPPLE_EFFECT","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","preventDefault","focus","currentIndex","target","e","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","show","transitionDuration","itemDelay","transitionDelay","requestAnimationFrame","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_","navigator","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","max","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","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","MaterialTab","tab","ctx","MDL_JS_RIPPLE_EFFECT","MDL_RIPPLE_CONTAINER","MDL_RIPPLE","charAt","href","panel","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","Boolean","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","IS_ACTIVE","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","tabBar_","TAB_MANUAL_SWITCH","MaterialLayout","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","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","textContent","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","clearTimeout","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_","Math","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","undefined","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform","isLocalhost","location","hostname","match","protocol","serviceWorker","then","registration","onupdatefound","controller","installingWorker","installing","onstatechange","state","console","error","$","$modalHref","attr","addClass","css","overflow","removeClass","each","toggleClass","closest","log","classes","template","find","html","wrap","after","hover","parents","one","val","data","text"],"mappings":"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","file":"main.min.js","sourcesContent":["/**\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 * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\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 // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\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 upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\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 = createEvent_('mdl-componentdowngraded', true, false);\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 componentHandler.upgradeAllRegistered();\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(function() {\n 'use strict';\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 */\n var MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialButton'] = MaterialButton;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialButton.prototype.Constant_ = {\n // None for now.\n };\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 */\n MaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n };\n\n /**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialButton.prototype.blurHandler_ = function(event) {\n if (event) {\n this.element_.blur();\n }\n };\n\n // Public methods.\n\n /**\n * Disable button.\n *\n * @public\n */\n MaterialButton.prototype.disable = function() {\n this.element_.disabled = true;\n };\n MaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n\n /**\n * Enable button.\n *\n * @public\n */\n MaterialButton.prototype.enable = function() {\n this.element_.disabled = false;\n };\n MaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n\n /**\n * Initialize element.\n */\n MaterialButton.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\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialCheckbox'] = MaterialCheckbox;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialCheckbox.prototype.Constant_ = {\n TINY_TIMEOUT: 0.001\n };\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 */\n MaterialCheckbox.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 /**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialCheckbox.prototype.onChange_ = function(event) {\n this.updateClasses_();\n };\n\n /**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialCheckbox.prototype.onFocus_ = function(event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialCheckbox.prototype.onBlur_ = function(event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialCheckbox.prototype.onMouseUp_ = function(event) {\n this.blur_();\n };\n\n /**\n * Handle class updates.\n *\n * @private\n */\n MaterialCheckbox.prototype.updateClasses_ = function() {\n this.checkDisabled();\n this.checkToggleState();\n };\n\n /**\n * Add blur.\n *\n * @private\n */\n MaterialCheckbox.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), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));\n };\n\n // Public methods.\n\n /**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\n MaterialCheckbox.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 };\n MaterialCheckbox.prototype['checkToggleState'] =\n MaterialCheckbox.prototype.checkToggleState;\n\n /**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\n MaterialCheckbox.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 };\n MaterialCheckbox.prototype['checkDisabled'] =\n MaterialCheckbox.prototype.checkDisabled;\n\n /**\n * Disable checkbox.\n *\n * @public\n */\n MaterialCheckbox.prototype.disable = function() {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n };\n MaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n\n /**\n * Enable checkbox.\n *\n * @public\n */\n MaterialCheckbox.prototype.enable = function() {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n };\n MaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n\n /**\n * Check checkbox.\n *\n * @public\n */\n MaterialCheckbox.prototype.check = function() {\n this.inputElement_.checked = true;\n this.updateClasses_();\n };\n MaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n\n /**\n * Uncheck checkbox.\n *\n * @public\n */\n MaterialCheckbox.prototype.uncheck = function() {\n this.inputElement_.checked = false;\n this.updateClasses_();\n };\n MaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n\n /**\n * Initialize element.\n */\n MaterialCheckbox.prototype.init = function() {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' +\n this.CssClasses_.INPUT);\n\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n\n boxOutline.appendChild(tickOutline);\n\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n\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\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n\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\n this.updateClasses_();\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.\n componentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialIconToggle'] = MaterialIconToggle;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialIconToggle.prototype.Constant_ = {\n TINY_TIMEOUT: 0.001\n };\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 */\n MaterialIconToggle.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 /**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialIconToggle.prototype.onChange_ = function(event) {\n this.updateClasses_();\n };\n\n /**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialIconToggle.prototype.onFocus_ = function(event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialIconToggle.prototype.onBlur_ = function(event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialIconToggle.prototype.onMouseUp_ = function(event) {\n this.blur_();\n };\n\n /**\n * Handle class updates.\n *\n * @private\n */\n MaterialIconToggle.prototype.updateClasses_ = function() {\n this.checkDisabled();\n this.checkToggleState();\n };\n\n /**\n * Add blur.\n *\n * @private\n */\n MaterialIconToggle.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), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));\n };\n\n // Public methods.\n\n /**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\n MaterialIconToggle.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 };\n MaterialIconToggle.prototype['checkToggleState'] =\n MaterialIconToggle.prototype.checkToggleState;\n\n /**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\n MaterialIconToggle.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 };\n MaterialIconToggle.prototype['checkDisabled'] =\n MaterialIconToggle.prototype.checkDisabled;\n\n /**\n * Disable icon toggle.\n *\n * @public\n */\n MaterialIconToggle.prototype.disable = function() {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n };\n MaterialIconToggle.prototype['disable'] =\n MaterialIconToggle.prototype.disable;\n\n /**\n * Enable icon toggle.\n *\n * @public\n */\n MaterialIconToggle.prototype.enable = function() {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n };\n MaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n\n /**\n * Check icon toggle.\n *\n * @public\n */\n MaterialIconToggle.prototype.check = function() {\n this.inputElement_.checked = true;\n this.updateClasses_();\n };\n MaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n\n /**\n * Uncheck icon toggle.\n *\n * @public\n */\n MaterialIconToggle.prototype.uncheck = function() {\n this.inputElement_.checked = false;\n this.updateClasses_();\n };\n MaterialIconToggle.prototype['uncheck'] =\n MaterialIconToggle.prototype.uncheck;\n\n /**\n * Initialize element.\n */\n MaterialIconToggle.prototype.init = function() {\n\n if (this.element_) {\n this.inputElement_ =\n this.element_.querySelector('.' + this.CssClasses_.INPUT);\n\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\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\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\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n };\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialMenu'] = MaterialMenu;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialMenu.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 /**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\n MaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n };\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 */\n MaterialMenu.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', // 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 /**\n * Initialize element.\n */\n MaterialMenu.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\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\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') ||\n 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',\n this.handleForKeyboardEvent_.bind(this));\n }\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\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\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\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\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\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 */\n MaterialMenu.prototype.handleForClick_ = function(evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not position the menu automatically. Requires the developer to\n // manually specify position.\n } else if (this.element_.classList.contains(\n 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 =\n 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 =\n this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n\n this.toggle(evt);\n };\n\n /**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\n MaterialMenu.prototype.handleForKeyboardEvent_ = function(evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +\n ':not([disabled])');\n\n if (items && items.length > 0 &&\n 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 /**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\n MaterialMenu.prototype.handleItemKeyboardEvent_ = function(evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +\n ':not([disabled])');\n\n if (items && items.length > 0 &&\n this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n\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 ||\n 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 /**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\n MaterialMenu.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), /** @type {number} */ (this.Constant_.CLOSE_TIMEOUT));\n }\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 */\n MaterialMenu.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 =\n '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 =\n '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 ' +\n 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 /**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\n\n MaterialMenu.prototype.removeAnimationEndListener_ = function(evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n };\n\n /**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\n MaterialMenu.prototype.addAnimationEndListener_ = function() {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n };\n\n /**\n * Displays the menu.\n *\n * @public\n */\n MaterialMenu.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\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\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS *\n this.Constant_.TRANSITION_DURATION_FRACTION;\n\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) ||\n this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = ((height - items[i].offsetTop - items[i].offsetHeight) /\n height * transitionDuration) + 's';\n } else {\n itemDelay = (items[i].offsetTop / height * transitionDuration) + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n\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\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n\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 };\n MaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n\n /**\n * Hides the menu.\n *\n * @public\n */\n MaterialMenu.prototype.hide = function() {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n\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\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n\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\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n };\n MaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n\n /**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\n MaterialMenu.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 };\n MaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialProgress'] = MaterialProgress;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialProgress.prototype.Constant_ = {\n };\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 */\n MaterialProgress.prototype.CssClasses_ = {\n INDETERMINATE_CLASS: 'mdl-progress__indeterminate'\n };\n\n /**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\n MaterialProgress.prototype.setProgress = function(p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n\n this.progressbar_.style.width = p + '%';\n };\n MaterialProgress.prototype['setProgress'] =\n MaterialProgress.prototype.setProgress;\n\n /**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\n MaterialProgress.prototype.setBuffer = function(p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = (100 - p) + '%';\n };\n MaterialProgress.prototype['setBuffer'] =\n MaterialProgress.prototype.setBuffer;\n\n /**\n * Initialize element.\n */\n MaterialProgress.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\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n\n this.element_.classList.add('is-upgraded');\n }\n };\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialRadio'] = MaterialRadio;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialRadio.prototype.Constant_ = {\n TINY_TIMEOUT: 0.001\n };\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 */\n MaterialRadio.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 /**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRadio.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 if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n };\n\n /**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRadio.prototype.onFocus_ = function(event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRadio.prototype.onBlur_ = function(event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRadio.prototype.onMouseup_ = function(event) {\n this.blur_();\n };\n\n /**\n * Update classes.\n *\n * @private\n */\n MaterialRadio.prototype.updateClasses_ = function() {\n this.checkDisabled();\n this.checkToggleState();\n };\n\n /**\n * Add blur.\n *\n * @private\n */\n MaterialRadio.prototype.blur_ = function() {\n\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), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));\n };\n\n // Public methods.\n\n /**\n * Check the components disabled state.\n *\n * @public\n */\n MaterialRadio.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 };\n MaterialRadio.prototype['checkDisabled'] =\n MaterialRadio.prototype.checkDisabled;\n\n /**\n * Check the components toggled state.\n *\n * @public\n */\n MaterialRadio.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 };\n MaterialRadio.prototype['checkToggleState'] =\n MaterialRadio.prototype.checkToggleState;\n\n /**\n * Disable radio.\n *\n * @public\n */\n MaterialRadio.prototype.disable = function() {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n };\n MaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n\n /**\n * Enable radio.\n *\n * @public\n */\n MaterialRadio.prototype.enable = function() {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n };\n MaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n\n /**\n * Check radio.\n *\n * @public\n */\n MaterialRadio.prototype.check = function() {\n this.btnElement_.checked = true;\n this.onChange_(null);\n };\n MaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n\n /**\n * Uncheck radio.\n *\n * @public\n */\n MaterialRadio.prototype.uncheck = function() {\n this.btnElement_.checked = false;\n this.onChange_(null);\n };\n MaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n\n /**\n * Initialize element.\n */\n MaterialRadio.prototype.init = function() {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' +\n this.CssClasses_.RADIO_BTN);\n\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\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n\n var rippleContainer;\n if (this.element_.classList.contains(\n this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(\n this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(\n 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\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\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\n this.updateClasses_();\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.\n componentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\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(function() {\n 'use strict';\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 */\n var 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 };\n window['MaterialSlider'] = MaterialSlider;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialSlider.prototype.Constant_ = {\n // None for now.\n };\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 */\n MaterialSlider.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 /**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSlider.prototype.onInput_ = function(event) {\n this.updateValueStyles_();\n };\n\n /**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSlider.prototype.onChange_ = function(event) {\n this.updateValueStyles_();\n };\n\n /**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSlider.prototype.onMouseUp_ = function(event) {\n event.target.blur();\n };\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 */\n MaterialSlider.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\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 /**\n * Handle updating of values.\n *\n * @private\n */\n MaterialSlider.prototype.updateValueStyles_ = function() {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) /\n (this.element_.max - this.element_.min);\n\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\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\n // Public methods.\n\n /**\n * Disable slider.\n *\n * @public\n */\n MaterialSlider.prototype.disable = function() {\n this.element_.disabled = true;\n };\n MaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n\n /**\n * Enable slider.\n *\n * @public\n */\n MaterialSlider.prototype.enable = function() {\n\n this.element_.disabled = false;\n };\n MaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n\n /**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\n MaterialSlider.prototype.change = function(value) {\n\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n };\n MaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n\n /**\n * Initialize element.\n */\n MaterialSlider.prototype.init = function() {\n\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\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\n this.updateValueStyles_();\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.\n componentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialSpinner'] = MaterialSpinner;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialSpinner.prototype.Constant_ = {\n MDL_SPINNER_LAYER_COUNT: 4\n };\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 */\n MaterialSpinner.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 /**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\n MaterialSpinner.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\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\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n\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\n var circleOwners = [leftClipper, gapPatch, 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\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n\n this.element_.appendChild(layer);\n };\n MaterialSpinner.prototype['createLayer'] =\n MaterialSpinner.prototype.createLayer;\n\n /**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\n MaterialSpinner.prototype.stop = function() {\n this.element_.classList.remove('is-active');\n };\n MaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n\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 */\n MaterialSpinner.prototype.start = function() {\n this.element_.classList.add('is-active');\n };\n MaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n\n /**\n * Initialize element.\n */\n MaterialSpinner.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\n this.element_.classList.add('is-upgraded');\n }\n };\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialSwitch'] = MaterialSwitch;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialSwitch.prototype.Constant_ = {\n TINY_TIMEOUT: 0.001\n };\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 */\n MaterialSwitch.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 /**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSwitch.prototype.onChange_ = function(event) {\n this.updateClasses_();\n };\n\n /**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSwitch.prototype.onFocus_ = function(event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSwitch.prototype.onBlur_ = function(event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialSwitch.prototype.onMouseUp_ = function(event) {\n this.blur_();\n };\n\n /**\n * Handle class updates.\n *\n * @private\n */\n MaterialSwitch.prototype.updateClasses_ = function() {\n this.checkDisabled();\n this.checkToggleState();\n };\n\n /**\n * Add blur.\n *\n * @private\n */\n MaterialSwitch.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), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));\n };\n\n // Public methods.\n\n /**\n * Check the components disabled state.\n *\n * @public\n */\n MaterialSwitch.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 };\n MaterialSwitch.prototype['checkDisabled'] =\n MaterialSwitch.prototype.checkDisabled;\n\n /**\n * Check the components toggled state.\n *\n * @public\n */\n MaterialSwitch.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 };\n MaterialSwitch.prototype['checkToggleState'] =\n MaterialSwitch.prototype.checkToggleState;\n\n /**\n * Disable switch.\n *\n * @public\n */\n MaterialSwitch.prototype.disable = function() {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n };\n MaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n\n /**\n * Enable switch.\n *\n * @public\n */\n MaterialSwitch.prototype.enable = function() {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n };\n MaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n\n /**\n * Activate switch.\n *\n * @public\n */\n MaterialSwitch.prototype.on = function() {\n this.inputElement_.checked = true;\n this.updateClasses_();\n };\n MaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n\n /**\n * Deactivate switch.\n *\n * @public\n */\n MaterialSwitch.prototype.off = function() {\n this.inputElement_.checked = false;\n this.updateClasses_();\n };\n MaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n\n /**\n * Initialize element.\n */\n MaterialSwitch.prototype.init = function() {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' +\n this.CssClasses_.INPUT);\n\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n\n thumb.appendChild(focusHelper);\n\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n\n if (this.element_.classList.contains(\n this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(\n this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(\n 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\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n\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\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n };\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialTabs'] = MaterialTabs;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\n MaterialTabs.prototype.Constant_ = {\n // None at the moment.\n };\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 */\n MaterialTabs.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\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 /**\n * Handle clicks to a tabs component\n *\n * @private\n */\n MaterialTabs.prototype.initTabs_ = function() {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(\n this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ =\n this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n\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\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n };\n\n /**\n * Reset tab state, dropping active classes\n *\n * @private\n */\n MaterialTabs.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 /**\n * Reset panel state, droping active classes\n *\n * @private\n */\n MaterialTabs.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 /**\n * Initialize element.\n */\n MaterialTabs.prototype.init = function() {\n if (this.element_) {\n this.initTabs_();\n }\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 */\n function 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\n tab.addEventListener('click', function(e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n\n }\n }\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\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(function() {\n 'use strict';\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 */\n var MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n };\n window['MaterialTextfield'] = MaterialTextfield;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n };\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 */\n MaterialTextfield.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 /**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialTextfield.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 /**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialTextfield.prototype.onFocus_ = function(event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialTextfield.prototype.onBlur_ = function(event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n };\n\n /**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialTextfield.prototype.onReset_ = function(event) {\n this.updateClasses_();\n };\n\n /**\n * Handle class updates.\n *\n * @private\n */\n MaterialTextfield.prototype.updateClasses_ = function() {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n };\n\n // Public methods.\n\n /**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\n MaterialTextfield.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 };\n MaterialTextfield.prototype['checkDisabled'] =\n MaterialTextfield.prototype.checkDisabled;\n\n /**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\n MaterialTextfield.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 };\n MaterialTextfield.prototype['checkFocus'] =\n MaterialTextfield.prototype.checkFocus;\n\n /**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\n MaterialTextfield.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 };\n MaterialTextfield.prototype['checkValidity'] =\n MaterialTextfield.prototype.checkValidity;\n\n /**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\n MaterialTextfield.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 };\n MaterialTextfield.prototype['checkDirty'] =\n MaterialTextfield.prototype.checkDirty;\n\n /**\n * Disable text field.\n *\n * @public\n */\n MaterialTextfield.prototype.disable = function() {\n this.input_.disabled = true;\n this.updateClasses_();\n };\n MaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n\n /**\n * Enable text field.\n *\n * @public\n */\n MaterialTextfield.prototype.enable = function() {\n this.input_.disabled = false;\n this.updateClasses_();\n };\n MaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n\n /**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\n MaterialTextfield.prototype.change = function(value) {\n\n this.input_.value = value || '';\n this.updateClasses_();\n };\n MaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n\n /**\n * Initialize element.\n */\n MaterialTextfield.prototype.init = function() {\n\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n\n if (this.input_) {\n if (this.input_.hasAttribute(\n /** @type {string} */ (this.Constant_.MAX_ROWS_ATTRIBUTE))) {\n this.maxRows = parseInt(this.input_.getAttribute(\n /** @type {string} */ (this.Constant_.MAX_ROWS_ATTRIBUTE)), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\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\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\n .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\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\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(function() {\n 'use strict';\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 */\n var MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialTooltip'] = MaterialTooltip;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialTooltip.prototype.Constant_ = {\n // None for now.\n };\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 */\n MaterialTooltip.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 /**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialTooltip.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\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\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\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n };\n\n /**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\n MaterialTooltip.prototype.hideTooltip_ = function() {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n };\n\n /**\n * Initialize element.\n */\n MaterialTooltip.prototype.init = function() {\n\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') ||\n this.element_.getAttribute('data-mdl-for');\n\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\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\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\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\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(function() {\n 'use strict';\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 */\n var MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialLayout'] = MaterialLayout;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n };\n\n /**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\n MaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n };\n\n /**\n * Modes.\n *\n * @enum {number}\n * @private\n */\n MaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n };\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 */\n MaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n\n ICON: 'material-icons',\n\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\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n\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 TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n\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\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n\n };\n\n /**\n * Handles scrolling on the content.\n *\n * @private\n */\n MaterialLayout.prototype.contentScrollHandler_ = function() {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n\n var headerVisible =\n !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) ||\n this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n\n if (this.content_.scrollTop > 0 &&\n !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 &&\n 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 /**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\n MaterialLayout.prototype.keyboardEventHandler_ = function(evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE &&\n this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n };\n\n /**\n * Handles changes in screen size.\n *\n * @private\n */\n MaterialLayout.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 /**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\n MaterialLayout.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\n this.toggleDrawer();\n };\n\n /**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\n MaterialLayout.prototype.headerTransitionEndHandler_ = function() {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n };\n\n /**\n * Handles expanding the header on click\n *\n * @private\n */\n MaterialLayout.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 /**\n * Reset tab state, dropping active classes\n *\n * @private\n */\n MaterialLayout.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 /**\n * Reset panel state, droping active classes\n *\n * @private\n */\n MaterialLayout.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 /**\n * Toggle drawer state\n *\n * @public\n */\n MaterialLayout.prototype.toggleDrawer = function() {\n var drawerButton = this.element_.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\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 };\n MaterialLayout.prototype['toggleDrawer'] =\n MaterialLayout.prototype.toggleDrawer;\n\n /**\n * Initialize element.\n */\n MaterialLayout.prototype.init = function() {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n\n var focusedElement = this.element_.querySelector(':focus');\n\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n\n if (focusedElement) {\n focusedElement.focus();\n }\n\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList &&\n child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n\n if (child.classList &&\n child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n\n if (child.classList &&\n child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n\n window.addEventListener('pageshow', function(e) {\n if (e.persisted) { // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function() {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n\n var mode = this.Mode_.STANDARD;\n\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(\n this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend',\n this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click',\n this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(\n this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\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',\n this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' +\n 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\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\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\n drawerButton.addEventListener('click',\n this.drawerToggleHandler_.bind(this));\n\n drawerButton.addEventListener('keydown',\n this.drawerToggleHandler_.bind(this));\n\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\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.element_.insertBefore(drawerButton, this.content_);\n }\n\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click',\n this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(\n /** @type {string} */ (this.Constant_.MAX_WIDTH));\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n\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\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\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\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n\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\n if (this.tabBar_.scrollLeft <\n 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\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n\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), /** @type {number} */ (this.Constant_.RESIZE_TIMEOUT));\n }.bind(this);\n\n window.addEventListener('resize', windowResizeHandler);\n\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\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\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\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\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 */\n function MaterialLayoutTab(tab, tabs, panels, layout) {\n\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n\n if (layout.tabBar_.classList.contains(\n 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\n if (!layout.tabBar_.classList.contains(\n layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function(e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n\n tab.show = selectTab;\n }\n window['MaterialLayoutTab'] = MaterialLayoutTab;\n\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\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(function() {\n 'use strict';\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 */\n var MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n\n window['MaterialDataTable'] = MaterialDataTable;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialDataTable.prototype.Constant_ = {\n // None at the moment.\n };\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 */\n MaterialDataTable.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 /**\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 */\n MaterialDataTable.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\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 /**\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 */\n MaterialDataTable.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\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\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n };\n\n /**\n * Initialize element.\n */\n MaterialDataTable.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\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\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\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\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(function() {\n 'use strict';\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 */\n var MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n };\n window['MaterialRipple'] = MaterialRipple;\n\n /**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\n MaterialRipple.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 /**\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 */\n MaterialRipple.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 /**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRipple.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 +\n rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n\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 !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? 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 /**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\n MaterialRipple.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 /**\n * Initialize element.\n */\n MaterialRipple.prototype.init = function() {\n if (this.element_) {\n var recentering =\n this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(\n this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' +\n this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n\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\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown',\n this.boundDownHandler);\n this.element_.addEventListener('touchstart',\n this.boundDownHandler);\n\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 /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function() {\n return this.frameCount_;\n };\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 /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function() {\n return this.rippleElement_;\n };\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 /**\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\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, ' +\n this.boundHeight / 2 + 'px)';\n }\n }\n\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n\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 /**\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\n // The component registers itself. It can assume componentHandler is available\n // in the global scope.\n componentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n });\n})();\n","/*!\n *\n * Web Starter Kit\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 * https://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/* eslint-env browser */\n(function() {\n 'use strict';\n\n // Check to make sure service workers are supported in the current browser,\n // and that the current page is accessed from a secure origin. Using a\n // service worker from an insecure origin will trigger JS console errors. See\n // http://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features\n var isLocalhost = Boolean(window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n );\n\n if ('serviceWorker' in navigator &&\n (window.location.protocol === 'https:' || isLocalhost)) {\n navigator.serviceWorker.register('service-worker.js')\n .then(function(registration) {\n // updatefound is fired if service-worker.js changes.\n registration.onupdatefound = function() {\n // updatefound is also fired the very first time the SW is installed,\n // and there's no need to prompt for a reload at that point.\n // So check here to see if the page is already controlled,\n // i.e. whether there's an existing service worker.\n if (navigator.serviceWorker.controller) {\n // The updatefound event implies that registration.installing is set:\n // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-updatefound-event\n var installingWorker = registration.installing;\n\n installingWorker.onstatechange = function() {\n switch (installingWorker.state) {\n case 'installed':\n // At this point, the old content will have been purged and the\n // fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in the page's interface.\n break;\n\n case 'redundant':\n throw new Error('The installing ' +\n 'service worker became redundant.');\n\n default:\n // Ignore\n }\n };\n }\n };\n }).catch(function(e) {\n console.error('Error during service worker registration:', e);\n });\n }\n\n // Your custom JavaScript goes here\n\n // Your custom jQuery goes here\n\n // Modal\n\n $('.open-modal').on('click', function (e) {\n e.preventDefault();\n var $modalHref = $(this).attr('href');\n $($modalHref).addClass('modals-open');\n $('html, body').css({\n overflow: 'hidden',\n height: '100%'\n });\n });\n\n $('.close-modal').on('click', function (e) {\n e.preventDefault();\n $('.modals').removeClass('modals-open');\n $('html, body').css({\n overflow: 'auto',\n height: 'auto'\n });\n });\n\n // Menu\n\n $('.arrow-parent').on('click', function(e) {\n $(this).each(function() {\n e.preventDefault();\n $(this).toggleClass('arrow-up');\n $(this).closest('.nav-first').toggleClass('active-second');\n console.log('parent');\n });\n });\n\n $('.arrow-children').on('click', function(e) {\n $(this).each(function() {\n e.preventDefault();\n $(this).toggleClass('arrow-up');\n $(this).closest('.nav-second').toggleClass('active-third');\n console.log('child');\n });\n });\n\n // Custom Select\n\n $('.custom-select').each(function() {\n var classes = $(this).attr('class'),\n id = $(this).attr('id'),\n name = $(this).attr('name');\n var template = '
';\n // template += '' + $(this).attr('placeholder') + '';\n template += '' + $(this).find('option:first').attr('placeholder') + '';\n template += '
';\n $(this).find('option').each(function() {\n template += '' + $(this).html() + '';\n });\n template += '
';\n\n $(this).wrap('
');\n $(this).hide();\n $(this).after(template);\n });\n\n $('.custom-option:first-of-type').hover(function() {\n $(this).parents('.custom-options').addClass('option-hover');\n }, function() {\n $(this).parents('.custom-options').removeClass('option-hover');\n });\n $('.custom-select-trigger').on('click', function(event) {\n $('html').one('click',function() {\n $('.custom-select').removeClass('opened');\n });\n $(this).parents('.custom-select').toggleClass('opened');\n event.stopPropagation();\n });\n $('.custom-option').on('click', function() {\n $(this).parents('.custom-select-wrapper').find('select').val($(this).data('value'));\n $(this).parents('.custom-options').find('.custom-option').removeClass('selection');\n $(this).addClass('selection');\n $(this).parents('.custom-select').removeClass('opened');\n $(this).parents('.custom-select').find('.custom-select-trigger').text($(this).text());\n });\n\n\n // Date Picker\n\n})();"]}