{"version":3,"sources":["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","mdlComponentHandler.js","rAF.js"],"names":["MaterialButton","element","this","element_","init","MaterialCheckbox","MaterialIconToggle","MaterialMenu","MaterialProgress","MaterialRadio","MaterialSlider","isIE_","window","navigator","msPointerEnabled","MaterialSpinner","MaterialSwitch","MaterialTabs","MaterialTab","tab","ctx","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialTextfield","maxRows","Constant_","NO_MAX_ROWS","MaterialTooltip","MaterialLayout","MaterialLayoutTab","tabs","panels","layout","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","content_","IS_ACTIVE","MaterialDataTable","MaterialRipple","componentHandler","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","undefined","getUpgradedListOfElement_","dataUpgraded","getAttribute","isElementUpgraded_","jsClass","upgradedList","indexOf","upgradeDomInternal","optJsClass","optCssClass","cssClass","registeredClass","elements","querySelectorAll","n","upgradeElementInternal","Element","Error","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","ev","createEvent","initEvent","dispatchEvent","upgradeElementsInternal","Array","isArray","item","prototype","slice","call","HTMLElement","children","registerInternal","config","newConfig","constructor","classAsString","hasOwnProperty","found","registerUpgradedCallbackInternal","callback","regClass","upgradeAllRegisteredInternal","findCreatedComponentByNodeInternal","node","deconstructComponentInternal","downgradeMethod_","componentIndex","splice","upgrades","componentPlace","downgradeNodesInternal","nodes","downgradeNode","NodeList","Node","upgradeDom","upgradeElement","upgradeElements","upgradeAllRegistered","registerUpgradedCallback","register","downgradeElements","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","RIPPLE_EFFECT","blurHandler","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","mdlDowngrade_","removeEventListener","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","boundElementOnMouseUp","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","handleItemClick_","tabIndex","handleItemKeyboardEvent_","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","stopPropagation","closing_","applyClip_","height","width","clip","addAnimationEndListener_","cleanup","show","transitionDuration","itemDelay","transitionDelay","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","firstChild","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","outerCircle","innerCircle","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","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","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","onKeyDown_","currentRowCount","checkValidity","checkDirty","input_","validity","valid","label_","hasAttribute","parseInt","isNaN","boundUpdateClassesHandler","boundKeyDownHandler","handleMouseEnter_","props","marginLeft","offsetWidth","boundMouseLeaveHandler","handleMouseLeave_","boundMouseEnterHandler","MAX_WIDTH","TAB_SCROLL_PIXELS","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_","scrollTop","screenSizeHandler_","screenSizeMediaQuery_","matches","drawer_","drawerToggleHandler_","headerTransitionEndHandler","headerClickHandler","tabBar","directChildren","childNodes","c","child","mode","matchMedia","addListener","drawerButton","drawerButtonIcon","textContent","obfuscator","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabScrollHandler","scrollWidth","DATA_TABLE","SELECTABLE","IS_SELECTED","selectRow_","checkbox","row","rows","createCheckbox_","label","type","firstHeader","th","headerCheckbox","firstCell","td","rowCheckbox","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform"],"mappings":"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","file":"material.min.js","sourcesContent":["/**\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 * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialButton(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialButton.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 * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n\n/**\n * Handle blur of element.\n * @param {HTMLElement} element The instance of a button we want to blur.\n * @private\n */\nMaterialButton.prototype.blurHandler = function(event) {\n 'use strict';\n\n if (event) {\n this.element_.blur();\n }\n};\n\n// Public methods.\n\n/**\n * Disable button.\n * @public\n */\nMaterialButton.prototype.disable = function() {\n 'use strict';\n\n this.element_.disabled = true;\n};\n\n/**\n * Enable button.\n * @public\n */\nMaterialButton.prototype.enable = function() {\n 'use strict';\n\n this.element_.disabled = false;\n};\n\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function() {\n 'use strict';\n\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/**\n * Downgrade the element.\n */\nMaterialButton.prototype.mdlDowngrade_ = function() {\n 'use strict';\n if (this.rippleElement_) {\n this.rippleElement_.removeEventListener('mouseup', this.boundRippleBlurHandler);\n }\n this.element_.removeEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.removeEventListener('mouseleave', this.boundButtonBlurHandler);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});\n","/**\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 * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialCheckbox(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.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 * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n\n/**\n * Handle change of state.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function(event) {\n 'use strict';\n\n this.updateClasses_();\n};\n\n/**\n * Handle focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function(event) {\n 'use strict';\n\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle lost focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function(event) {\n 'use strict';\n\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle mouseup.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function(event) {\n 'use strict';\n\n this.blur_();\n};\n\n/**\n * Handle class updates.\n * @param {HTMLElement} button The button whose classes we should update.\n * @param {HTMLElement} label The label whose classes we should update.\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function() {\n 'use strict';\n this.checkDisabled();\n this.checkToggleState();\n};\n\n/**\n * Add blur.\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function(event) {\n 'use strict';\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.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n\n// Public methods.\n\n/**\n* Check the inputs toggle state and update display.\n* @public\n*/\nMaterialCheckbox.prototype.checkToggleState = function() {\n 'use strict';\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\n/**\n* Check the inputs disabled state and update display.\n* @public\n*/\nMaterialCheckbox.prototype.checkDisabled = function() {\n 'use strict';\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\n/**\n * Disable checkbox.\n * @public\n */\nMaterialCheckbox.prototype.disable = function() {\n 'use strict';\n\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n\n/**\n * Enable checkbox.\n * @public\n */\nMaterialCheckbox.prototype.enable = function() {\n 'use strict';\n\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n\n/**\n * Check checkbox.\n * @public\n */\nMaterialCheckbox.prototype.check = function() {\n 'use strict';\n\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n\n/**\n * Uncheck checkbox.\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function() {\n 'use strict';\n\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function() {\n 'use strict';\n\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/*\n* Downgrade the component.\n*/\nMaterialCheckbox.prototype.mdlDowngrade_ = function() {\n 'use strict';\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementMouseUp);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});\n","/**\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 * 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 * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialIconToggle(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.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 * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n\n/**\n * Handle change of state.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function(event) {\n 'use strict';\n\n this.updateClasses_();\n};\n\n/**\n * Handle focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function(event) {\n 'use strict';\n\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle lost focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function(event) {\n 'use strict';\n\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle mouseup.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function(event) {\n 'use strict';\n\n this.blur_();\n};\n\n/**\n * Handle class updates.\n * @param {HTMLElement} button The button whose classes we should update.\n * @param {HTMLElement} label The label whose classes we should update.\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function() {\n 'use strict';\n this.checkDisabled();\n this.checkToggleState();\n};\n\n/**\n * Add blur.\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function(event) {\n 'use strict';\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.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n\n// Public methods.\n\n/**\n* Check the inputs toggle state and update display.\n* @public\n*/\nMaterialIconToggle.prototype.checkToggleState = function() {\n 'use strict';\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\n/**\n* Check the inputs disabled state and update display.\n* @public\n*/\nMaterialIconToggle.prototype.checkDisabled = function() {\n 'use strict';\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\n/**\n * Disable icon toggle.\n * @public\n */\nMaterialIconToggle.prototype.disable = function() {\n 'use strict';\n\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n\n/**\n * Enable icon toggle.\n * @public\n */\nMaterialIconToggle.prototype.enable = function() {\n 'use strict';\n\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n\n/**\n * Check icon toggle.\n * @public\n */\nMaterialIconToggle.prototype.check = function() {\n 'use strict';\n\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n\n/**\n * Uncheck icon toggle.\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function() {\n 'use strict';\n\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function() {\n 'use strict';\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/*\n* Downgrade the component\n*/\nMaterialIconToggle.prototype.mdlDowngrade_ = function() {\n 'use strict';\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundRippleMouseUp);\n }\n this.inputElement_.removeEventListener('change', this.boundInputOnChange);\n this.inputElement_.removeEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.removeEventListener('blur', this.boundInputOnBlur);\n this.element_.removeEventListener('mouseup', this.boundElementOnMouseUp);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});\n","/**\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 * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialMenu(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n\n/**\n * Keycodes, for code readability.\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n\n/**\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 * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left', // 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 */\nMaterialMenu.prototype.init = function() {\n 'use strict';\n\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 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\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.handleItemClick_.bind(this));\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',\n this.handleItemKeyboardEvent_.bind(this));\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 * @private\n */\nMaterialMenu.prototype.handleForClick_ = function(evt) {\n 'use strict';\n\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 * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function(evt) {\n 'use strict';\n\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 * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function(evt) {\n 'use strict';\n\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 * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function(evt) {\n 'use strict';\n\n if (evt.target.getAttribute('disabled') !== null) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function(evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n\n/**\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 * @private\n */\nMaterialMenu.prototype.applyClip_ = function(height, width) {\n 'use strict';\n\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = null;\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 = null;\n }\n};\n\n/**\n * Adds an event listener to clean up after the animation ends.\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function() {\n 'use strict';\n\n var cleanup = function () {\n this.element_.removeEventListener('transitionend', cleanup);\n this.element_.removeEventListener('webkitTransitionEnd', cleanup);\n this.element_.classList.remove(this.CssClasses_.IS_ANIMATING);\n }.bind(this);\n\n // Remove animation class once the transition is done.\n this.element_.addEventListener('transitionend', cleanup);\n this.element_.addEventListener('webkitTransitionEnd', cleanup);\n};\n\n/**\n * Displays the menu.\n * @public\n */\nMaterialMenu.prototype.show = function(evt) {\n 'use strict';\n\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 if (e !== evt && !this.closing_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\n\n/**\n * Hides the menu.\n * @public\n */\nMaterialMenu.prototype.hide = function() {\n 'use strict';\n\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.transitionDelay = null;\n }\n\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().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\n/**\n * Displays or hides the menu, depending on current state.\n * @public\n */\nMaterialMenu.prototype.toggle = function(evt) {\n 'use strict';\n\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});\n","/**\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 * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialProgress(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialProgress.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 * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = {\n INDETERMINATE_CLASS: 'mdl-progress__indeterminate'\n};\n\nMaterialProgress.prototype.setProgress = function(p) {\n 'use strict';\n\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n\n this.progressbar_.style.width = p + '%';\n};\n\nMaterialProgress.prototype.setBuffer = function(p) {\n 'use strict';\n\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = (100 - p) + '%';\n};\n\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function() {\n 'use strict';\n\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/*\n* Downgrade the component\n*/\nMaterialProgress.prototype.mdlDowngrade_ = function() {\n 'use strict';\n while (this.element_.firstChild) {\n this.element_.removeChild(this.element_.firstChild);\n }\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});\n","/**\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 * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialRadio(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialRadio.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 * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n\n/**\n * Handle change of state.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function(event) {\n 'use strict';\n\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n radios[i].MaterialRadio.updateClasses_();\n }\n }\n};\n\n/**\n * Handle focus.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function(event) {\n 'use strict';\n\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle lost focus.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function(event) {\n 'use strict';\n\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle mouseup.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function(event) {\n 'use strict';\n\n this.blur_();\n};\n\n/**\n * Update classes.\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function() {\n 'use strict';\n this.checkDisabled();\n this.checkToggleState();\n};\n\n/**\n * Add blur.\n * @private\n */\nMaterialRadio.prototype.blur_ = function(event) {\n 'use strict';\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), this.Constant_.TINY_TIMEOUT);\n};\n\n// Public methods.\n\n/**\n* Check the components disabled state.\n* @public\n*/\nMaterialRadio.prototype.checkDisabled = function() {\n 'use strict';\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\n/**\n* Check the components toggled state.\n* @public\n*/\nMaterialRadio.prototype.checkToggleState = function() {\n 'use strict';\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\n/**\n * Disable radio.\n * @public\n */\nMaterialRadio.prototype.disable = function() {\n 'use strict';\n\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\n\n/**\n * Enable radio.\n * @public\n */\nMaterialRadio.prototype.enable = function() {\n 'use strict';\n\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\n\n/**\n * Check radio.\n * @public\n */\nMaterialRadio.prototype.check = function() {\n 'use strict';\n\n this.btnElement_.checked = true;\n this.updateClasses_();\n};\n\n/**\n * Uncheck radio.\n * @public\n */\nMaterialRadio.prototype.uncheck = function() {\n 'use strict';\n\n this.btnElement_.checked = false;\n this.updateClasses_();\n};\n\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function() {\n 'use strict';\n\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' +\n this.CssClasses_.RADIO_BTN);\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.onMouseup_.bind(this));\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.onChange_.bind(this));\n this.btnElement_.addEventListener('focus', this.onFocus_.bind(this));\n this.btnElement_.addEventListener('blur', this.onBlur_.bind(this));\n this.element_.addEventListener('mouseup', this.onMouseup_.bind(this));\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.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialSlider(element) {\n 'use strict';\n\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialSlider.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 * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n\n/**\n * Handle input on element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function(event) {\n 'use strict';\n\n this.updateValueStyles_();\n};\n\n/**\n * Handle change on element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function(event) {\n 'use strict';\n\n this.updateValueStyles_();\n};\n\n/**\n * Handle mouseup on element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function(event) {\n 'use strict';\n\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 * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function(event) {\n 'use strict';\n\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 * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function(event) {\n 'use strict';\n\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 * @public\n */\nMaterialSlider.prototype.disable = function() {\n 'use strict';\n\n this.element_.disabled = true;\n};\n\n/**\n * Enable slider.\n * @public\n */\nMaterialSlider.prototype.enable = function() {\n 'use strict';\n\n this.element_.disabled = false;\n};\n\n/**\n * Update slider value.\n * @param {Number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function(value) {\n 'use strict';\n\n if (value) {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\n\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function() {\n 'use strict';\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/*\n* Downgrade the component\n*/\nMaterialSlider.prototype.mdlDowngrade_ = function() {\n 'use strict';\n this.element_.removeEventListener('input', this.boundInputHandler);\n this.element_.removeEventListener('change', this.boundChangeHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.removeEventListener('mousedown', this.boundContainerMouseDownHandler);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});\n","/**\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 * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nfunction MaterialSpinner(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.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 * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n\n/**\n* Auxiliary method to create a spinner layer.\n*/\nMaterialSpinner.prototype.createLayer = function(index) {\n 'use strict';\n\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\n/**\n* Stops the spinner animation.\n* Public method for users who need to stop the spinner for any reason.\n* @public\n*/\nMaterialSpinner.prototype.stop = function() {\n 'use strict';\n\n this.element_.classList.remove('is-active');\n};\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* @public\n*/\nMaterialSpinner.prototype.start = function() {\n 'use strict';\n\n this.element_.classList.add('is-active');\n};\n\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function() {\n 'use strict';\n\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.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialSwitch(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.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 * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n\n/**\n * Handle change of state.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function(event) {\n 'use strict';\n\n this.updateClasses_();\n};\n\n/**\n * Handle focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function(event) {\n 'use strict';\n\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle lost focus of element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function(event) {\n 'use strict';\n\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle mouseup.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function(event) {\n 'use strict';\n\n this.blur_();\n};\n\n/**\n * Handle class updates.\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function() {\n 'use strict';\n this.checkDisabled();\n this.checkToggleState();\n};\n\n/**\n * Add blur.\n * @private\n */\nMaterialSwitch.prototype.blur_ = function(event) {\n 'use strict';\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.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n\n// Public methods.\n\n/**\n* Check the components disabled state.\n* @public\n*/\nMaterialSwitch.prototype.checkDisabled = function() {\n 'use strict';\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\n/**\n* Check the components toggled state.\n* @public\n*/\nMaterialSwitch.prototype.checkToggleState = function() {\n 'use strict';\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\n/**\n * Disable switch.\n * @public\n */\nMaterialSwitch.prototype.disable = function() {\n 'use strict';\n\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\n\n/**\n * Enable switch.\n * @public\n */\nMaterialSwitch.prototype.enable = function() {\n 'use strict';\n\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\n\n/**\n * Activate switch.\n * @public\n */\nMaterialSwitch.prototype.on = function() {\n 'use strict';\n\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\n\n/**\n * Deactivate switch.\n * @public\n */\nMaterialSwitch.prototype.off = function() {\n 'use strict';\n\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\n\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function() {\n 'use strict';\n\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/*\n* Downgrade the component.\n*/\nMaterialSwitch.prototype.mdlDowngrade_ = function() {\n 'use strict';\n if (this.rippleContainerElement_) {\n this.rippleContainerElement_.removeEventListener('mouseup', this.boundMouseUpHandler);\n }\n this.inputElement_.removeEventListener('change', this.boundChangeHandler);\n this.inputElement_.removeEventListener('focus', this.boundFocusHandler);\n this.inputElement_.removeEventListener('blur', this.boundBlurHandler);\n this.element_.removeEventListener('mouseup', this.boundMouseUpHandler);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});\n","/**\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 * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialTabs(element) {\n 'use strict';\n\n // Stores the HTML element.\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string}\n * @private\n */\nMaterialTabs.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 * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n\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 * @private\n */\nMaterialTabs.prototype.initTabs_ = function(e) {\n 'use strict';\n\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 * @private\n */\nMaterialTabs.prototype.resetTabState_ = function() {\n 'use strict';\n\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 * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function() {\n 'use strict';\n\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n\nMaterialTabs.prototype.init = function() {\n 'use strict';\n\n if (this.element_) {\n this.initTabs_();\n }\n};\n\nfunction MaterialTab(tab, ctx) {\n 'use strict';\n\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 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// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});\n","/**\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 * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialTextfield(element) {\n 'use strict';\n\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.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 * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded'\n};\n\n/**\n * Handle input being entered.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function(event) {\n 'use strict';\n\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 * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function(event) {\n 'use strict';\n\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle lost focus.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function(event) {\n 'use strict';\n\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n\n/**\n * Handle class updates.\n * @param {HTMLElement} button The button whose classes we should update.\n * @param {HTMLElement} label The label whose classes we should update.\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function() {\n 'use strict';\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n};\n\n// Public methods.\n\n/**\n * Check the disabled state and update field accordingly.\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function() {\n 'use strict';\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\n/**\n * Check the validity state and update field accordingly.\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function() {\n 'use strict';\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/**\n* Check the dirty state and update field accordingly.\n* @public\n*/\nMaterialTextfield.prototype.checkDirty = function() {\n 'use strict';\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\n/**\n * Disable text field.\n * @public\n */\nMaterialTextfield.prototype.disable = function() {\n 'use strict';\n\n this.input_.disabled = true;\n this.updateClasses_();\n};\n\n/**\n * Enable text field.\n * @public\n */\nMaterialTextfield.prototype.enable = function() {\n 'use strict';\n\n this.input_.disabled = false;\n this.updateClasses_();\n};\n\n/**\n * Update text field value.\n * @param {String} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function(value) {\n 'use strict';\n\n if (value) {\n this.input_.value = value;\n }\n this.updateClasses_();\n};\n\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function() {\n 'use strict';\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(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(\n this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\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.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\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\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n\n/*\n* Downgrade the component\n*/\nMaterialTextfield.prototype.mdlDowngrade_ = function() {\n 'use strict';\n this.input_.removeEventListener('input', this.boundUpdateClassesHandler);\n this.input_.removeEventListener('focus', this.boundFocusHandler);\n this.input_.removeEventListener('blur', this.boundBlurHandler);\n if (this.boundKeyDownHandler) {\n this.input_.removeEventListener('keydown', this.boundKeyDownHandler);\n }\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});\n","/**\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 * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialTooltip(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.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 * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active'\n};\n\n/**\n * Handle mouseenter for tooltip.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function(event) {\n 'use strict';\n\n event.stopPropagation();\n var props = event.target.getBoundingClientRect();\n var left = props.left + (props.width / 2);\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n\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 this.element_.style.top = props.top + props.height + 10 + 'px';\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n window.addEventListener('scroll', this.boundMouseLeaveHandler, false);\n window.addEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n\n/**\n * Handle mouseleave for tooltip.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseLeave_ = function(event) {\n 'use strict';\n\n event.stopPropagation();\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n window.removeEventListener('scroll', this.boundMouseLeaveHandler);\n window.removeEventListener('touchmove', this.boundMouseLeaveHandler, false);\n};\n\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function() {\n 'use strict';\n\n if (this.element_) {\n var forElId = this.element_.getAttribute('for');\n\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n\n if (this.forElement_) {\n // Tabindex needs to be set for `blur` events to be emitted\n if (!this.forElement_.getAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveHandler = this.handleMouseLeave_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler,\n false);\n this.forElement_.addEventListener('click', this.boundMouseEnterHandler,\n false);\n this.forElement_.addEventListener('blur', this.boundMouseLeaveHandler);\n this.forElement_.addEventListener('touchstart', this.boundMouseEnterHandler,\n false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n }\n};\n\n/*\n* Downgrade the component\n*/\nMaterialTooltip.prototype.mdlDowngrade_ = function() {\n 'use strict';\n if (this.forElement_) {\n this.forElement_.removeEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('click', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('touchstart', this.boundMouseEnterHandler, false);\n this.forElement_.removeEventListener('mouseleave', this.boundMouseLeaveHandler);\n }\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});\n","/**\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 * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialLayout(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n\n MENU_ICON: 'menu',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n\n/**\n * Modes.\n * @enum {number}\n * @private\n */\nMaterialLayout.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 * @enum {string}\n * @private\n */\nMaterialLayout.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 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 * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function() {\n 'use strict';\n\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\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 this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\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 this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n\n/**\n * Handles changes in screen size.\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function() {\n 'use strict';\n\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 }\n }\n};\n\n/**\n * Handles toggling of the drawer.\n * @param {Element} drawer The drawer container element.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function() {\n 'use strict';\n\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n};\n\n/**\n * Handles (un)setting the `is-animating` class\n */\nMaterialLayout.prototype.headerTransitionEndHandler = function() {\n 'use strict';\n\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n\n/**\n * Handles expanding the header on click\n */\nMaterialLayout.prototype.headerClickHandler = function() {\n 'use strict';\n\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 * @private\n */\nMaterialLayout.prototype.resetTabState_ = function(tabBar) {\n 'use strict';\n\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 * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function(panels) {\n 'use strict';\n\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function() {\n 'use strict';\n\n if (this.element_) {\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\n var directChildren = this.element_.childNodes;\n for (var c = 0; c < directChildren.length; 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 if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n\n var mode = this.Mode_.STANDARD;\n\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n\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 = document.createElement('div');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\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 var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.textContent = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n drawerButton.addEventListener('click',\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 }\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 buttons depending on scroll position.\n var tabScrollHandler = 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', tabScrollHandler);\n tabScrollHandler();\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\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n 'use strict';\n\n if (tab) {\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 tab.addEventListener('click', function(e) {\n e.preventDefault();\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 }\n}\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * 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 * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialDataTable(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.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 * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n\nMaterialDataTable.prototype.selectRow_ = function(checkbox, row, rows) {\n 'use strict';\n\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 (rows) {\n return function() {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.check();\n rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < rows.length; i++) {\n el = rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el.MaterialCheckbox.uncheck();\n rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n\nMaterialDataTable.prototype.createCheckbox_ = function(row, rows) {\n 'use strict';\n\n var label = document.createElement('label');\n label.classList.add('mdl-checkbox');\n label.classList.add('mdl-js-checkbox');\n label.classList.add('mdl-js-ripple-effect');\n label.classList.add('mdl-data-table__select');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function() {\n 'use strict';\n\n if (this.element_) {\n\n var firstHeader = this.element_.querySelector('th');\n var rows = this.element_.querySelector('tbody').querySelectorAll('tr');\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 var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n rows[i].insertBefore(td, firstCell);\n }\n }\n }\n\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});\n","/**\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 * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @param {HTMLElement} element The element that will be upgraded.\n */\nfunction MaterialRipple(element) {\n 'use strict';\n\n this.element_ = element;\n\n // Initialize instance.\n this.init();\n}\n\n/**\n * Store constants in one place so they can be updated easily.\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n\n/**\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 * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n\n/**\n * Handle mouse / finger down on element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function(event) {\n 'use strict';\n\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 ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n\n/**\n * Handle mouse / finger up on element.\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function(event) {\n 'use strict';\n\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }\n};\n\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function() {\n 'use strict';\n\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 this.getFrameCount = function() {\n return this.frameCount_;\n };\n\n this.setFrameCount = function(fC) {\n this.frameCount_ = fC;\n };\n\n this.getRippleElement = function() {\n return this.rippleElement_;\n };\n\n this.setRippleXY = function(newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\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 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/*\n* Downgrade the component\n*/\nMaterialRipple.prototype.mdlDowngrade_ = function() {\n 'use strict';\n this.element_.removeEventListener('mousedown',\n this.boundDownHandler);\n this.element_.removeEventListener('touchstart',\n this.boundDownHandler);\n\n this.element_.removeEventListener('mouseup', this.boundUpHandler);\n this.element_.removeEventListener('mouseleave', this.boundUpHandler);\n this.element_.removeEventListener('touchend', this.boundUpHandler);\n this.element_.removeEventListener('blur', this.boundUpHandler);\n};\n\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n * @author Jason Mayes.\n */\n/* exported componentHandler */\nvar componentHandler = (function() {\n 'use strict';\n\n var registeredComponents_ = [];\n var createdComponents_ = [];\n var downgradeMethod_ = 'mdlDowngrade_';\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 * @param {string} name The name of a class we want to use.\n * @param {Object=} 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 (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 * @param {HTMLElement} 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 * @param {HTMLElement} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @return boolean\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n * @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 (optJsClass === undefined && 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 (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 * @param {HTMLElement} element The element we wish to upgrade.\n * @param {!string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function (component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentupgraded', true, true);\n element.dispatchEvent(ev);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n * @param {HTMLElement | Array | NodeList | HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (typeof elements.item === 'function') {\n elements = Array.prototype.slice.call(elements);\n } else {\n elements = [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 if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n upgradeElementInternal(element);\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n * @param {Object} config An object containing:\n * {constructor: Constructor, classAsString: string, cssClass: string}\n */\n function registerInternal(config) {\n var newConfig = {\n 'classConstructor': config.constructor,\n 'className': config.classAsString,\n 'cssClass': config.cssClass,\n 'widget': config.widget === undefined ? true : config.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.');\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 * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {!Function} callback The function to call upon an upgrade. This\n * function should expect 1 parameter - the HTMLElement which 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 * Finds a created component by a given DOM node.\n *\n * @param {!Element} node\n * @return {*}\n */\n function findCreatedComponentByNodeInternal(node) {\n for (var n = 0; n < createdComponents_.length; n++) {\n var component = createdComponents_[n];\n if (component.element_ === node) {\n return component;\n }\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 {*} component\n */\n function deconstructComponentInternal(component) {\n if (component &&\n component[componentConfigProperty_]\n .classConstructor.prototype\n .hasOwnProperty(downgradeMethod_)) {\n component[downgradeMethod_]();\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(\n component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = document.createEvent('Events');\n ev.initEvent('mdl-componentdowngraded', true, true);\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 {*} nodes\n */\n function downgradeNodesInternal(nodes) {\n var downgradeNode = function(node) {\n deconstructComponentInternal(findCreatedComponentByNodeInternal(node));\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\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 componentHandler.upgradeElement =\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n\n// MIT license\n\n(function() {\n'use strict';\n\nif (!Date.now) {\n Date.now = function() { return new Date().getTime(); };\n}\n\nvar vendors = ['webkit', 'moz'];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = (window[vp + 'CancelAnimationFrame'] ||\n window[vp + 'CancelRequestAnimationFrame']);\n}\n\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function() { callback(lastTime = nextTime); },\n nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n}\n\n})();\n\n"],"sourceRoot":"/source/"}