{"version":3,"sources":["wrap_start.js","polyfill.js","jq.js","global.js","function.js","jq_extend.js","mutation.js","headroom.js","headroom.data.js","collapse.js","ripple.js","textfield.js","slider.js","spinner.js","wrap_end.js","collapse.data.js","table.js","fab.js","fab.data.js","select.js","select.data.js","appbar.js","tab.js","tab.data.js","drawer.js","drawer.data.js","dialog.js","dialog.data.js","dialog.dialog.js","dialog.alert.js","dialog.confirm.js","dialog.prompt.js","tooltip.js","tooltip.data.js","snackbar.js","bottom_nav.js","panel.js","panel.data.js","menu.js","menu.data.js"],"names":["global","factory","exports","module","define","amd","mdui","this","lastTime","window","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","callback","element","currTime","Date","getTime","timeToCall","Math","max","id","setTimeout","clearTimeout","queueData","$","JQ","arr","i","length","selector","html","trim","toCreate","indexOf","tempParent","document","createElement","innerHTML","childNodes","push","elems","match","querySelectorAll","getElementById","slice","i$1","ready","nodeType","i$2","extend","this$1","args","len","arguments","Object","keys","forEach","prop","target","shift","loop","isObjectLike","obj","isFunction","fn","isString","isArrayLike","each","call","map","ref","value","ret","elem","concat","apply","merge","first","second","val","unique","result","prototype","elementDisplay","dir","nodes","nameIndex","node","j","_this","is","contains","parent","documentElement","param","key","destructure","keyTmp","v","Array","isArray","encodeURIComponent","join","el","get","index","undefined","filter","ele","$selector","not","$excludes","offset","getBoundingClientRect","left","pageXOffset","top","pageYOffset","width","height","offsetParent","css","position","self","name","parentOffset","nodeName","toLowerCase","show","display","style","getComputedStyle","getPropertyValue","body","appendChild","parentNode","removeChild","hide","toggle","hasClass","className","classList","removeAttr","attr","removeAttribute","removeProp","e","eq","last","children","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","$compareWith","find","foundElements","_","__","childNode","has","$targets","siblings","prevAll","add","nextAll","closest","parents","remove","empty","clone","cloneNode","replaceWith","newContent","before","serializeArray","elements","$elem","type","disabled","checked","serialize","props","0","1","2","defaults","set","setAttribute","argLength","getAttribute","k","classes","split","cls","Width","Height","isNaN","Number","doc","win","DOCUMENT_NODE","IEFixValue","isWidth","parseFloat","reverse","newChild","newChilds","copyByClone","tempDiv","child","insertBefore","nextSibling","appendTo","prependTo","after","replaceAll","original","dataNS","data","attributes","attribute","replace","u","charAt","toUpperCase","dataKey","removeData","t","bubbles","cancelable","n","createEvent","initMouseEvent","Event","MouseEvent","detail","initCustomEvent","CustomEvent","handlers","mduiElementId","fnFalse","getElementId","eventName","func","event","handler","toString","sel","removeEventListener","proxy","test","readyState","addEventListener","on","one","origCallback","off","elementId","useCapture","callFn","_detail","preventDefault","stopPropagation","proxyfn","_data","eName","trigger","evt","isMouseEvent","dispatchEvent","globalOptions","jsonpID","ajaxEvent","ajaxStart","ajaxSuccess","ajaxError","ajaxComplete","isQueryStringData","method","appendQuery","url","query","ajaxSetup","options","ajax","processData","async","cache","username","password","headers","xhrFields","statusCode","dataType","jsonp","jsonpCallback","now","contentType","timeout","callbacks","isCanceled","globals","eventParams","triggerEvent","xhr","triggerCallback","result1","result2","sendData","location","ArrayBuffer","Blob","Document","FormData","constructor","abortTimeout","callbackName","requestUrl","script","onerror","src","append","xhrTimeout","XMLHttpRequest","open","setRequestHeader","crossDomain","RegExp","$2","host","onload","textStatus","responseData","isHttpStatusSuccess","status","JSON","parse","responseText","err","responseType","response","statusText","onabort","abort","send","params","$document","$window","queue","queueName","dequeue","TouchHandler","touches","isAllow","allow","register","start","move","end","cancel","unlock","addClass","GUID","parseOptions","str","Function","substr","componentEvent","pluginName","inst","fullEventName","jQuery","reflow","clientLeft","transition","duration","webkitTransitionDuration","transitionDuration","transitionEnd","events","fireCallBack","transformOrigin","webkitTransformOrigin","transform","webkitTransform","showOverlay","zIndex","$overlay","level","hideOverlay","force","removeClass","lockScreen","$body","newBodyWidth","unlockScreen","throttle","delay","timer","guid","s4","floor","random","substring","entries","mutation","apiInit","that","item","$this","m","Headroom","DEFAULT","tolerance","initialClass","pinnedClass","unpinnedClass","opts","$headroom","oldInst","down","up","_init","state","inited","lastScrollY","_attachEvent","_scroll","rafId","currentScrollY","direction","toleranceExceeded","abs","unpin","pin","enable","disable","getState","Ripple","getProp","updateValueStyle","reInit","rangeSelector","layerHTML","fillHTML","CollapsePrivate","accordion","Collapse","namespace","ns","classpPefix","class_item","class_item_open","class_header","class_body","$collapse","$item","_isOpen","close","_getItem","parseInt","$content","$tmpItem","scrollHeight","openAll","closeAll","$target","checkboxHTML","tag","Table","$table","init","$thRow","$tdRows","$tdCheckboxs","selectable","selectedRow","_updateThCheckbox","_updateTdCheckbox","_updateNumericCol","_updateThCheckboxStatus","checkbox","$thCheckbox","indeterminate","$tdRow","$checkbox","isCheckedAll","row","$th","th","updateTables","$ripple","button","tmp","touchStartX","pageX","touchStartY","pageY","center","innerHeight","innerWidth","diameter","pow","translate","$wave","removeTimeout","removeRipple","hidden","hideRipple","hideEvent","moveEvent","input","$input","domLoadedEvent","$textField","validity","valid","inputValue","hasExtraSpace","maxlength","text","focus","updateTextFields","$slider","$track","$fill","$thumb","min","isDisabled","isDiscrete","discrete","$thumbText","percent","updateSliders","Fab","$fab","$btn","$dial","$dialBtns","btn","Select","gutter","$selectNative","uniqueID","handleUpdate","$select","$items","option","textContent","selected","selectedIndex","$selected","$menu","size","itemData","margin-top","transformOriginY","menuMarginTop","windowHeight","selectHeight","$menuItemFirst","menuItemHeight","menuItemMargin","menuWidth","menuHeight","selectTop","heightTemp","menuMarginTopMax","menuTop","transform-origin","readjustMenu","Tab","$ele","$tab","$tabs","$indicator","activeIndex","hash","tab","_setActive","_setIndicatorPosition","_bindTabEvent","clickEvent","targetId","$activeTab","activeTabOffset","scrollLeft","next","prev","$oldTabs","$newTabs","oldTabsEle","newTabsEle","Drawer","overlay","swipe","isDesktop","$drawer","openNavEventHandler","swipeStartX","swiping","maybeSwiping","swipeAreaWidth","setPosition","translateX","closeTransform","rtlTranslateMultiplier","transformCSS","cleanPosition","getMaxTranslateX","getTranslateX","currentX","onBodyTouchStart","touchmove","onBodyTouchMove","touchend","onBodyTouchEnd","touchcancel","touchX","touchY","dXAbs","dYAbs","changedTouches","translateRatio","swipingState","swipeSupport","Dialog","isLockScreen","currentInst","history","modal","closeOnEsc","closeOnCancel","closeOnConfirm","destroyOnClosed","readjust","$dialog","$dialogTitle","$dialogContent","$dialogActions","dialogHeight","hashchangeEvent","overlayClick","destroy","_doOpen","_arguments","back","keyCode","dialog","DEFAULT_BUTTON","bold","onClick","title","content","buttons","stackedButtons","cssClass","onOpen","onOpened","onClose","onClosed","buttonsHTML","HTML","alert","onConfirm","confirmText","confirm","onCancel","cancelText","prompt","label","defaultValue","confirmOnEnter","onCancelClick","onConfirmClick","Tooltip","marginLeft","marginTop","targetProps","targetMargin","tooltipWidth","$tooltip","offsetWidth","tooltipHeight","offsetHeight","targetOffset","margin-left","oldOpts","timeoutId","buttonText","buttonColor","closeOnButtonClick","closeOnOutsideClick","onButtonClick","Snackbar","message","buttonColorStyle","buttonColorClass","$snackbar","_setPosition","translateY","snackbarHeight","clientHeight","snackbar","isThis","$bottomNav","spinner","layer","$spinner","updateSpinners","Panel","Menu","align","fixed","covered","subMenuTrigger","subMenuDelay","menuLeft","transformOriginX","windowWidth","isCovered","isFixed","$anchor","anchorTmp","anchorTop","anchorLeft","anchorHeight","anchorWidth","anchorBottom","anchorRight","anchorOffsetTop","offsetTop","anchorOffsetLeft","offsetLeft","menuHeightTemp","isCascade","menuWidthTemp","openSubMenu","$submenu","submenuTop","submenuLeft","submenuWidth","submenuHeight","itemTmp","itemWidth","itemHeight","itemLeft","itemTop","closeSubMenu","$subSubmenu","bindSubMenuEvent","timeoutOpen","$tmpSubmenu","eventType","$relatedTarget","relatedTarget","tmpClose","tmpOpen","anchorSelector","menuSelector"],"mappings":"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","file":"mdui.min.js","sourcesContent":["/* jshint ignore:start */\n;(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.mdui = factory());\n}(this, (function() {\n 'use strict';\n\n /* jshint ignore:end */\n var mdui = {};\n","/**\n * =============================================================================\n * ************ 浏览器兼容性问题修复 ************\n * =============================================================================\n */\n\n/**\n * requestAnimationFrame\n * cancelAnimationFrame\n */\n(function () {\n var lastTime = 0;\n\n if (!window.requestAnimationFrame) {\n window.requestAnimationFrame = window.webkitRequestAnimationFrame;\n window.cancelAnimationFrame = window.webkitCancelAnimationFrame;\n }\n\n if (!window.requestAnimationFrame) {\n window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));\n\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n\n lastTime = currTime + timeToCall;\n return id;\n };\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n }\n})();\n","/**\n * JQ 1.0.0 (https://github.com/zdhxiong/mdui.JQ#readme)\n * Copyright 2018-2018 zdhxiong\n * Licensed under MIT\n */\nvar $ = (function () {\n 'use strict';\n\n var JQ = function JQ(arr) {\n var self = this;\n\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n\n self.length = arr.length;\n\n return this;\n };\n\n function $(selector) {\n var arr = [];\n\n if (!selector) {\n return new JQ(arr);\n }\n\n if (selector instanceof JQ) {\n return selector;\n }\n\n if (typeof selector === 'string') {\n var html = selector.trim();\n\n if (html[0] === '<' && html[html.length - 1] === '>') {\n // 创建 HTML 字符串\n var toCreate = 'div';\n\n if (html.indexOf(':~]/)\n ? [document.getElementById(selector.slice(1))]\n : document.querySelectorAll(selector);\n\n for (var i$1 = 0; i$1 < elems.length; i$1 += 1) {\n if (elems[i$1]) {\n arr.push(elems[i$1]);\n }\n }\n }\n } else if (typeof selector === 'function') {\n // function\n return $(document).ready(selector);\n } else if (selector.nodeType || selector === window || selector === document) {\n // Node\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // NodeList\n for (var i$2 = 0; i$2 < selector.length; i$2 += 1) {\n arr.push(selector[i$2]);\n }\n }\n\n return new JQ(arr);\n }\n\n $.fn = JQ.prototype;\n\n function extend() {\n var this$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (!args.length) {\n return this;\n }\n\n // $.extend(obj)\n if (args.length === 1) {\n Object.keys(args[0]).forEach(function (prop) {\n this$1[prop] = args[0][prop];\n });\n\n return this;\n }\n\n // $.extend({}, defaults[, obj])\n var target = args.shift();\n\n var loop = function ( i ) {\n Object.keys(args[i]).forEach(function (prop) {\n target[prop] = args[i][prop];\n });\n };\n\n for (var i = 0; i < args.length; i += 1) loop( i );\n\n return target;\n }\n\n $.fn.extend = extend;\n $.extend = extend;\n\n /**\n * 判断一个节点名\n * @param ele\n * @param name\n * @returns {boolean}\n */\n function isNodeName(ele, name) {\n return ele.nodeName && ele.nodeName.toLowerCase() === name.toLowerCase();\n }\n\n /**\n * 除去 null 后的 object 类型\n * @param obj\n * @returns {*|boolean}\n */\n function isObjectLike(obj) {\n return typeof obj === 'object' && obj !== null;\n }\n\n function isFunction(fn) {\n return typeof fn === 'function';\n }\n\n function isString(obj) {\n return typeof obj === 'string';\n }\n\n function isWindow(win) {\n return win && win === win.window;\n }\n\n function isDocument(doc) {\n return doc && doc.nodeType === doc.DOCUMENT_NODE;\n }\n\n function isArrayLike(obj) {\n return typeof obj.length === 'number';\n }\n\n /**\n * 循环数组或对象\n * @param obj\n * @param callback\n * @returns {*}\n */\n function each(obj, callback) {\n if (isArrayLike(obj)) {\n for (var i = 0; i < obj.length; i += 1) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n return obj;\n }\n }\n } else {\n var keys = Object.keys(obj);\n for (var i$1 = 0; i$1 < keys.length; i$1 += 1) {\n if (callback.call(obj[keys[i$1]], keys[i$1], obj[keys[i$1]]) === false) {\n return obj;\n }\n }\n }\n\n return obj;\n }\n\n /**\n * 遍历数组或对象,通过函数返回一个新的数组或对象,null 和 undefined 将被过滤掉。\n * @param elems\n * @param callback\n * @returns {Array}\n */\n function map(elems, callback) {\n var ref;\n\n var value;\n var ret = [];\n\n each(elems, function (i, elem) {\n value = callback(elem, i);\n\n if (value !== null && value !== undefined) {\n ret.push(value);\n }\n });\n\n return (ref = []).concat.apply(ref, ret);\n }\n\n /**\n * 把对象合并到第一个参数中,并返回第一个参数\n * @param first\n * @param second\n * @returns {*}\n */\n function merge(first, second) {\n each(second, function (i, val) {\n first.push(val);\n });\n\n return first;\n }\n\n /**\n * 删除数组中重复元素\n * @param arr {Array}\n * @returns {Array}\n */\n function unique(arr) {\n var result = [];\n\n for (var i = 0; i < arr.length; i += 1) {\n if (result.indexOf(arr[i]) === -1) {\n result.push(arr[i]);\n }\n }\n\n return result;\n }\n\n var elementDisplay = {};\n\n /**\n * 获取元素的默认 display 样式值,用于 .show() 方法\n * @param nodeName\n * @returns {*}\n */\n function defaultDisplay(nodeName) {\n var element;\n var display;\n\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName);\n document.body.appendChild(element);\n display = getComputedStyle(element, '').getPropertyValue('display');\n element.parentNode.removeChild(element);\n if (display === 'none') {\n display = 'block';\n }\n\n elementDisplay[nodeName] = display;\n }\n\n return elementDisplay[nodeName];\n }\n\n $.extend({\n each: each,\n merge: merge,\n unique: unique,\n map: map,\n\n /**\n * 一个 DOM 节点是否包含另一个 DOM 节点\n * @param parent {Node} 父节点\n * @param node {Node} 子节点\n * @returns {Boolean}\n */\n contains: function contains(parent, node) {\n if (parent && !node) {\n return document.documentElement.contains(parent);\n }\n\n return parent !== node && parent.contains(node);\n },\n\n /**\n * 将数组或对象序列化\n * @param obj\n * @returns {String}\n */\n param: function param(obj) {\n if (!isObjectLike(obj)) {\n return '';\n }\n\n var args = [];\n\n function destructure(key, value) {\n var keyTmp;\n\n if (isObjectLike(value)) {\n each(value, function (i, v) {\n if (Array.isArray(value) && !isObjectLike(v)) {\n keyTmp = '';\n } else {\n keyTmp = i;\n }\n\n destructure((key + \"[\" + keyTmp + \"]\"), v);\n });\n } else {\n if (value !== null && value !== '') {\n keyTmp = \"=\" + (encodeURIComponent(value));\n } else {\n keyTmp = '';\n }\n\n args.push(encodeURIComponent(key) + keyTmp);\n }\n }\n\n each(obj, function (key, value) {\n destructure(key, value);\n });\n\n return args.join('&');\n },\n });\n\n $.fn.extend({\n /**\n * 遍历对象\n * @param callback {Function}\n * @return {JQ}\n */\n each: function each$1(callback) {\n return each(this, callback);\n },\n\n /**\n * 通过遍历集合中的节点对象,通过函数返回一个新的对象,null 或 undefined 将被过滤掉。\n * @param callback {Function}\n * @returns {JQ}\n */\n map: function map$1(callback) {\n return new JQ(map(this, function (el, i) { return callback.call(el, i, el); }));\n },\n\n /**\n * 获取指定 DOM 元素,没有 index 参数时,获取所有 DOM 的数组\n * @param index {Number=}\n * @returns {Node|Array}\n */\n get: function get(index) {\n return index === undefined\n ? [].slice.call(this)\n : this[index >= 0 ? index : index + this.length];\n },\n\n /**\n * array中提取的方法。从start开始,如果end 指出。提取不包含end位置的元素。\n * @param args {start, end}\n * @returns {JQ}\n */\n slice: function slice() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new JQ([].slice.apply(this, args));\n },\n\n /**\n * 筛选元素集合\n * @param selector {String|JQ|Node|Function}\n * @returns {JQ}\n */\n filter: function filter(selector) {\n if (isFunction(selector)) {\n return this.map(function (index, ele) { return (selector.call(ele, index, ele) ? ele : undefined); });\n }\n\n var $selector = $(selector);\n\n return this.map(function (index, ele) { return ($selector.index(ele) > -1 ? ele : undefined); });\n },\n\n /**\n * 从元素集合中删除指定的元素\n * @param selector {String|Node|JQ|Function}\n * @return {JQ}\n */\n not: function not(selector) {\n var $excludes = this.filter(selector);\n\n return this.map(function (index, ele) { return ($excludes.index(ele) > -1 ? undefined : ele); });\n },\n\n /**\n * 获取元素相对于 document 的偏移\n * @returns {Object}\n */\n offset: function offset() {\n if (this[0]) {\n var offset = this[0].getBoundingClientRect();\n\n return {\n left: offset.left + window.pageXOffset,\n top: offset.top + window.pageYOffset,\n width: offset.width,\n height: offset.height,\n };\n }\n\n return null;\n },\n\n /**\n * 返回最近的用于定位的父元素\n * @returns {*|JQ}\n */\n offsetParent: function offsetParent() {\n return this.map(function () {\n var parent = this.offsetParent;\n\n while (parent && $(parent).css('position') === 'static') {\n parent = parent.offsetParent;\n }\n\n return parent || document.documentElement;\n });\n },\n\n /**\n * 获取元素相对于父元素的偏移\n * @return {Object}\n */\n position: function position() {\n var self = this;\n\n if (!self[0]) {\n return null;\n }\n\n var offsetParent;\n var offset;\n var parentOffset = {\n top: 0,\n left: 0,\n };\n\n if (self.css('position') === 'fixed') {\n offset = self[0].getBoundingClientRect();\n } else {\n offsetParent = self.offsetParent();\n offset = self.offset();\n if (!isNodeName(offsetParent[0], 'html')) {\n parentOffset = offsetParent.offset();\n }\n\n parentOffset = {\n top: parentOffset.top + offsetParent.css('borderTopWidth'),\n left: parentOffset.left + offsetParent.css('borderLeftWidth'),\n };\n }\n\n return {\n top: offset.top - parentOffset.top - self.css('marginTop'),\n left: offset.left - parentOffset.left - self.css('marginLeft'),\n width: offset.width,\n height: offset.height,\n };\n },\n\n /**\n * 显示指定元素\n * @returns {JQ}\n */\n show: function show() {\n return this.each(function () {\n if (this.style.display === 'none') {\n this.style.display = '';\n }\n\n if (window.getComputedStyle(this, '').getPropertyValue('display') === 'none') {\n this.style.display = defaultDisplay(this.nodeName);\n }\n });\n },\n\n /**\n * 隐藏指定元素\n * @returns {JQ}\n */\n hide: function hide() {\n return this.each(function () {\n this.style.display = 'none';\n });\n },\n\n /**\n * 切换元素的显示状态\n * @returns {JQ}\n */\n toggle: function toggle() {\n return this.each(function () {\n this.style.display = this.style.display === 'none' ? '' : 'none';\n });\n },\n\n /**\n * 是否含有指定的 CSS 类\n * @param className {String}\n * @returns {boolean}\n */\n hasClass: function hasClass(className) {\n if (!this[0] || !className) {\n return false;\n }\n\n return this[0].classList.contains(className);\n },\n\n /**\n * 移除指定属性\n * @param attr {String}\n * @returns {JQ}\n */\n removeAttr: function removeAttr(attr) {\n return this.each(function () {\n this.removeAttribute(attr);\n });\n },\n\n /**\n * 删除属性值\n * @param name {String}\n * @returns {JQ}\n */\n removeProp: function removeProp(name) {\n return this.each(function () {\n try {\n delete this[name];\n } catch (e) {\n // empty\n }\n });\n },\n\n /**\n * 获取当前对象中第n个元素\n * @param index {Number}\n * @returns {JQ}\n */\n eq: function eq(index) {\n var ret = index === -1\n ? this.slice(index)\n : this.slice(index, +index + 1);\n\n return new JQ(ret);\n },\n\n /**\n * 获取对象中第一个元素\n * @returns {JQ}\n */\n first: function first() {\n return this.eq(0);\n },\n\n /**\n * 获取对象中最后一个元素\n * @returns {JQ}\n */\n last: function last() {\n return this.eq(-1);\n },\n\n /**\n * 获取一个元素的位置。\n * 当 elem 参数没有给出时,返回当前元素在兄弟节点中的位置。\n * 有给出了 elem 参数时,返回 elem 元素在当前对象中的位置\n * @param elem {Selector|Node=}\n * @returns {Number}\n */\n index: function index(elem) {\n if (!elem) {\n // 获取当前 JQ 对象的第一个元素在同辈元素中的位置\n return this\n .eq(0)\n .parent()\n .children()\n .get()\n .indexOf(this[0]);\n }\n\n if (isString(elem)) {\n // 返回当前 JQ 对象的第一个元素在指定选择器对应的元素中的位置\n return $(elem)\n .eq(0)\n .parent()\n .children()\n .get()\n .indexOf(this[0]);\n }\n\n // 返回指定元素在当前 JQ 对象中的位置\n return this\n .get()\n .indexOf(elem);\n },\n\n /**\n * 根据选择器、DOM元素或 JQ 对象来检测匹配元素集合,\n * 如果其中至少有一个元素符合这个给定的表达式就返回true\n * @param selector {String|Node|NodeList|Array|JQ|Window}\n * @returns boolean\n */\n is: function is(selector) {\n var self = this[0];\n\n if (!self || selector === undefined || selector === null) {\n return false;\n }\n\n if (isString(selector)) {\n if (self === document || self === window) {\n return false;\n }\n\n var matchesSelector = self.matches\n || self.matchesSelector\n || self.webkitMatchesSelector\n || self.mozMatchesSelector\n || self.oMatchesSelector\n || self.msMatchesSelector;\n\n return matchesSelector.call(self, selector);\n }\n\n if (selector === document || selector === window) {\n return self === selector;\n }\n\n if (selector.nodeType || isArrayLike(selector)) {\n var $compareWith = selector.nodeType ? [selector] : selector;\n\n for (var i = 0; i < $compareWith.length; i += 1) {\n if ($compareWith[i] === self) {\n return true;\n }\n }\n\n return false;\n }\n\n return false;\n },\n\n /**\n * 根据 CSS 选择器找到后代节点的集合\n * @param selector {String}\n * @returns {JQ}\n */\n find: function find(selector) {\n var foundElements = [];\n\n this.each(function (i, _this) {\n var nodeType = _this.nodeType;\n\n if (nodeType !== 1 && nodeType !== 9) {\n // 不是 element 和 document 则跳过\n return;\n }\n\n merge(foundElements, _this.querySelectorAll(selector));\n });\n\n return new JQ(foundElements);\n },\n\n /**\n * 找到直接子元素的元素集合\n * @param selector {String=}\n * @returns {JQ}\n */\n children: function children(selector) {\n var children = [];\n\n this.each(function (_, _this) {\n each(_this.childNodes, function (__, childNode) {\n if (childNode.nodeType !== 1) {\n return;\n }\n\n if (!selector || (selector && $(childNode).is(selector))) {\n children.push(childNode);\n }\n });\n });\n\n return new JQ(unique(children));\n },\n\n /**\n * 保留含有指定子元素的元素,去掉不含有指定子元素的元素\n * @param selector {String|Node|JQ|NodeList|Array}\n * @return {JQ}\n */\n has: function has(selector) {\n var $targets = isString(selector) ? this.find(selector) : $(selector);\n var length = $targets.length;\n\n return this.filter(function () {\n for (var i = 0; i < length; i += 1) {\n if ($.contains(this, $targets[i])) {\n return true;\n }\n }\n\n return false;\n });\n },\n\n /**\n * 取得同辈元素的集合\n * @param selector {String=}\n * @returns {JQ}\n */\n siblings: function siblings(selector) {\n return this.prevAll(selector).add(this.nextAll(selector));\n },\n\n /**\n * 返回首先匹配到的父节点,包含父节点\n * @param selector {String}\n * @returns {JQ}\n */\n closest: function closest(selector) {\n var self = this;\n\n if (!self.is(selector)) {\n self = self.parents(selector).eq(0);\n }\n\n return self;\n },\n\n /**\n * 删除所有匹配的元素\n * @returns {JQ}\n */\n remove: function remove() {\n return this.each(function (i, _this) {\n if (_this.parentNode) {\n _this.parentNode.removeChild(_this);\n }\n });\n },\n\n /**\n * 添加匹配的元素到当前对象中\n * @param selector {String|JQ}\n * @returns {JQ}\n */\n add: function add(selector) {\n return new JQ(unique(merge(this.get(), $(selector))));\n },\n\n /**\n * 删除子节点\n * @returns {JQ}\n */\n empty: function empty() {\n return this.each(function () {\n this.innerHTML = '';\n });\n },\n\n /**\n * 通过深度克隆来复制集合中的所有元素。\n * (通过原生 cloneNode 方法深度克隆来复制集合中的所有元素。此方法不会有数据和事件处理程序复制到新的元素。这点和jquery中利用一个参数来确定是否复制数据和事件处理不相同。)\n * @returns {JQ}\n */\n clone: function clone() {\n return this.map(function () {\n return this.cloneNode(true);\n });\n },\n\n /**\n * 用新元素替换当前元素\n * @param newContent {String|Node|NodeList|JQ}\n * @returns {JQ}\n */\n replaceWith: function replaceWith(newContent) {\n return this.before(newContent).remove();\n },\n\n /**\n * 将表单元素的值组合成键值对数组\n * @returns {Array}\n */\n serializeArray: function serializeArray() {\n var result = [];\n var elem = this[0];\n\n if (!elem || !elem.elements) {\n return result;\n }\n\n $([].slice.call(elem.elements)).each(function () {\n var $elem = $(this);\n var type = $elem.attr('type');\n if (\n this.nodeName.toLowerCase() !== 'fieldset'\n && !this.disabled\n && ['submit', 'reset', 'button'].indexOf(type) === -1\n && (['radio', 'checkbox'].indexOf(type) === -1 || this.checked)\n ) {\n result.push({\n name: $elem.attr('name'),\n value: $elem.val(),\n });\n }\n });\n\n return result;\n },\n\n /**\n * 将表单元素或对象序列化\n * @returns {String}\n */\n serialize: function serialize() {\n var result = [];\n\n each(this.serializeArray(), function (i, elem) {\n result.push(((encodeURIComponent(elem.name)) + \"=\" + (encodeURIComponent(elem.value))));\n });\n\n return result.join('&');\n },\n });\n\n /**\n * val - 获取或设置元素的值\n * @param value {String=}\n * @return {*|JQ}\n */\n /**\n * html - 获取或设置元素的 HTML\n * @param value {String=}\n * @return {*|JQ}\n */\n /**\n * text - 获取或设置元素的内容\n * @param value {String=}\n * @return {*|JQ}\n */\n each(['val', 'html', 'text'], function (nameIndex, name) {\n var props = {\n 0: 'value',\n 1: 'innerHTML',\n 2: 'textContent',\n };\n\n var defaults = {\n 0: undefined,\n 1: undefined,\n 2: null,\n };\n\n $.fn[name] = function (value) {\n if (value === undefined) {\n // 获取值\n return this[0] ? this[0][props[nameIndex]] : defaults[nameIndex];\n }\n\n // 设置值\n return this.each(function (i, elem) {\n elem[props[nameIndex]] = value;\n });\n };\n });\n\n /**\n * attr - 获取或设置元素的属性值\n * @param {name|props|key,value=}\n * @return {String|JQ}\n */\n /**\n * prop - 获取或设置元素的属性值\n * @param {name|props|key,value=}\n * @return {String|JQ}\n */\n /**\n * css - 获取或设置元素的样式\n * @param {name|props|key,value=}\n * @return {String|JQ}\n */\n each(['attr', 'prop', 'css'], function (nameIndex, name) {\n function set(elem, key, value) {\n if (nameIndex === 0) {\n elem.setAttribute(key, value);\n } else if (nameIndex === 1) {\n elem[key] = value;\n } else {\n elem.style[key] = value;\n }\n }\n\n function get(elem, key) {\n if (!elem) {\n return undefined;\n }\n\n if (nameIndex === 0) {\n return elem.getAttribute(key);\n }\n\n if (nameIndex === 1) {\n return elem[key];\n }\n\n return window.getComputedStyle(elem, null).getPropertyValue(key);\n }\n\n $.fn[name] = function (key, value) {\n var argLength = arguments.length;\n\n if (argLength === 1 && isString(key)) {\n // 获取值\n return get(this[0], key);\n }\n\n // 设置值\n return this.each(function (i, elem) {\n if (argLength === 2) {\n set(elem, key, value);\n } else {\n each(key, function (k, v) {\n set(elem, k, v);\n });\n }\n });\n };\n });\n\n /**\n * addClass - 添加 CSS 类,多个类名用空格分割\n * @param className {String}\n * @return {JQ}\n */\n /**\n * removeClass - 移除 CSS 类,多个类名用空格分割\n * @param className {String}\n * @return {JQ}\n */\n /**\n * toggleClass - 切换 CSS 类名,多个类名用空格分割\n * @param className {String}\n * @return {JQ}\n */\n each(['add', 'remove', 'toggle'], function (nameIndex, name) {\n $.fn[(name + \"Class\")] = function (className) {\n if (!className) {\n return this;\n }\n\n var classes = className.split(' ');\n\n return this.each(function (i, elem) {\n each(classes, function (j, cls) {\n elem.classList[name](cls);\n });\n });\n };\n });\n\n /**\n * width - 获取元素的宽度\n * @return {Number}\n */\n /**\n * height - 获取元素的高度\n * @return {Number}\n */\n each({\n Width: 'width',\n Height: 'height',\n }, function (prop, name) {\n $.fn[name] = function (val) {\n if (val === undefined) {\n // 获取\n var elem = this[0];\n\n if (isWindow(elem)) {\n return elem[(\"inner\" + prop)];\n }\n\n if (isDocument(elem)) {\n return elem.documentElement[(\"scroll\" + prop)];\n }\n\n var $elem = $(elem);\n\n // IE10、IE11 在 box-sizing:border-box 时,不会包含 padding 和 border,这里进行修复\n var IEFixValue = 0;\n var isWidth = name === 'width';\n if ('ActiveXObject' in window) { // 判断是 IE 浏览器\n if ($elem.css('box-sizing') === 'border-box') {\n IEFixValue = parseFloat($elem.css((\"padding-\" + (isWidth ? 'left' : 'top'))))\n + parseFloat($elem.css((\"padding-\" + ((isWidth ? 'right' : 'bottom')))))\n + parseFloat($elem.css((\"border-\" + (isWidth ? 'left' : 'top') + \"-width\")))\n + parseFloat($elem.css((\"border-\" + (isWidth ? 'right' : 'bottom') + \"-width\")));\n }\n }\n\n return parseFloat($(elem).css(name)) + IEFixValue;\n }\n\n // 设置\n /* eslint no-restricted-globals: 0 */\n if (!isNaN(Number(val)) && val !== '') {\n val += 'px';\n }\n\n return this.css(name, val);\n };\n });\n\n /**\n * innerWidth - 获取元素的宽度,包含内边距\n * @return {Number}\n */\n /**\n * innerHeight - 获取元素的高度,包含内边距\n * @return {Number}\n */\n each({\n Width: 'width',\n Height: 'height',\n }, function (prop, name) {\n $.fn[(\"inner\" + prop)] = function () {\n var value = this[name]();\n var $elem = $(this[0]);\n\n if ($elem.css('box-sizing') !== 'border-box') {\n value += parseFloat($elem.css((\"padding-\" + (name === 'width' ? 'left' : 'top'))));\n value += parseFloat($elem.css((\"padding-\" + (name === 'width' ? 'right' : 'bottom'))));\n }\n\n return value;\n };\n });\n\n function dir(nodes, selector, nameIndex, node) {\n var ret = [];\n var elem;\n\n nodes.each(function (j, _this) {\n elem = _this[node];\n while (elem) {\n if (nameIndex === 2) {\n // prevUntil\n if (!selector || (selector && $(elem).is(selector))) {\n break;\n }\n\n ret.push(elem);\n } else if (nameIndex === 0) {\n // prev\n if (!selector || (selector && $(elem).is(selector))) {\n ret.push(elem);\n }\n\n break;\n } else if (!selector || (selector && $(elem).is(selector))) {\n // prevAll\n ret.push(elem);\n }\n\n elem = elem[node];\n }\n });\n\n return new JQ(unique(ret));\n }\n\n /**\n * prev - 取得前一个匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * prevAll - 取得前面所有匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * prevUntil - 取得前面的所有元素,直到遇到匹配的元素,不包含匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n each(['', 'All', 'Until'], function (nameIndex, name) {\n $.fn[(\"prev\" + name)] = function (selector) {\n // prevAll、prevUntil 需要把元素的顺序倒序处理,以便和 jQuery 的结果一致\n var $nodes = nameIndex === 0 ? this : $(this.get().reverse());\n\n return dir($nodes, selector, nameIndex, 'previousElementSibling');\n };\n });\n\n /**\n * next - 取得后一个匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * nextAll - 取得后面所有匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * nextUntil - 取得后面所有匹配的元素,直到遇到匹配的元素,不包含匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n each(['', 'All', 'Until'], function (nameIndex, name) {\n $.fn[(\"next\" + name)] = function (selector) {\n return dir(this, selector, nameIndex, 'nextElementSibling');\n };\n });\n\n /**\n * parent - 取得匹配的直接父元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * parents - 取得所有匹配的父元素\n * @param selector {String=}\n * @return {JQ}\n */\n /**\n * parentUntil - 取得所有的父元素,直到遇到匹配的元素,不包含匹配的元素\n * @param selector {String=}\n * @return {JQ}\n */\n each(['', 's', 'sUntil'], function (nameIndex, name) {\n $.fn[(\"parent\" + name)] = function (selector) {\n // parents、parentsUntil 需要把元素的顺序反向处理,以便和 jQuery 的结果一致\n var $nodes = nameIndex === 0 ? this : $(this.get().reverse());\n\n return dir($nodes, selector, nameIndex, 'parentNode');\n };\n });\n\n /**\n * append - 在元素内部追加内容\n * @param newChild {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * prepend - 在元素内部前置内容\n * @param newChild {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n each(['append', 'prepend'], function (nameIndex, name) {\n $.fn[name] = function (newChild) {\n var newChilds;\n var copyByClone = this.length > 1;\n\n if (isString(newChild) && (newChild[0] !== '<' || newChild[newChild.length - 1] !== '>')) {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n newChilds = [].slice.call(tempDiv.childNodes);\n } else {\n newChilds = $(newChild).get();\n }\n\n if (nameIndex === 1) {\n // prepend\n newChilds.reverse();\n }\n\n return this.each(function (i, _this) {\n each(newChilds, function (j, child) {\n // 一个元素要同时追加到多个元素中,需要先复制一份,然后追加\n if (copyByClone && i > 0) {\n child = child.cloneNode(true);\n }\n\n if (nameIndex === 0) {\n // append\n _this.appendChild(child);\n } else {\n // prepend\n _this.insertBefore(child, _this.childNodes[0]);\n }\n });\n });\n };\n });\n\n /**\n * insertBefore - 插入到指定元素的前面\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * insertAfter - 插入到指定元素的后面\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n each(['insertBefore', 'insertAfter'], function (nameIndex, name) {\n $.fn[name] = function (selector) {\n var $elem = $(selector);\n\n return this.each(function (i, _this) {\n $elem.each(function (j, elem) {\n elem.parentNode.insertBefore(\n $elem.length === 1 ? _this : _this.cloneNode(true),\n nameIndex === 0 ? elem : elem.nextSibling\n );\n });\n });\n };\n });\n\n /**\n * appendTo - 追加到指定元素内容\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * prependTo - 前置到指定元素内部\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * before - 插入到指定元素前面\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * after - 插入到指定元素后面\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n /**\n * replaceAll - 替换掉指定元素\n * @param selector {String|Node|NodeList|JQ}\n * @return {JQ}\n */\n each({\n appendTo: 'append',\n prependTo: 'prepend',\n before: 'insertBefore',\n after: 'insertAfter',\n replaceAll: 'replaceWith',\n }, function (name, original) {\n $.fn[name] = function (selector) {\n $(selector)[original](this);\n return this;\n };\n });\n\n var dataNS = 'mduiElementDataStorage';\n\n $.extend({\n /**\n * 在指定元素上存储数据,或从指定元素上读取数据\n * @param elem 必须, DOM 元素\n * @param key 必须,键名\n * @param value 可选,值\n */\n data: function data(elem, key, value) {\n var data = {};\n\n if (value !== undefined) {\n // 根据 key、value 设置值\n data[key] = value;\n } else if (isObjectLike(key)) {\n // 根据键值对设置值\n data = key;\n } else if (key === undefined) {\n // 获取所有值\n var result = {};\n\n each(elem.attributes, function (i, attribute) {\n var name = attribute.name;\n\n if (name.indexOf('data-') === 0) {\n var prop = name.slice(5).replace(/-./g, function (u) { return u.charAt(1).toUpperCase(); });\n\n result[prop] = attribute.value;\n }\n });\n\n if (elem[dataNS]) {\n each(elem[dataNS], function (k, v) {\n result[k] = v;\n });\n }\n\n return result;\n } else if (elem[dataNS] && (key in elem[dataNS])) {\n // 获取指定值\n return elem[dataNS][key];\n } else {\n // 从 data- 中获取指定值\n var dataKey = elem.getAttribute((\"data-\" + key));\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n }\n\n // 设置值\n if (!elem[dataNS]) {\n elem[dataNS] = {};\n }\n\n each(data, function (k, v) {\n elem[dataNS][k] = v;\n });\n\n return undefined;\n },\n\n /**\n * 移除指定元素上存放的数据\n * @param elem 必须,DOM 元素\n * @param key 必须,键名\n */\n removeData: function removeData(elem, key) {\n if (elem[dataNS] && elem[dataNS][key]) {\n elem[dataNS][key] = null;\n delete elem[dataNS][key];\n }\n },\n });\n\n $.fn.extend({\n /**\n * 在元素上读取或设置数据\n * @param key 必须\n * @param value\n * @returns {*}\n */\n data: function data(key, value) {\n if (value === undefined) {\n if (isObjectLike(key)) {\n // 同时设置多个值\n return this.each(function (i, elem) {\n $.data(elem, key);\n });\n }\n\n if (this[0]) {\n // 获取值\n return $.data(this[0], key);\n }\n\n return undefined;\n }\n\n // 设置值\n return this.each(function (i, elem) {\n $.data(elem, key, value);\n });\n },\n\n /**\n * 移除元素上存储的数据\n * @param key 必须\n * @returns {*}\n */\n removeData: function removeData(key) {\n return this.each(function (i, elem) {\n $.removeData(elem, key);\n });\n },\n });\n\n !function(){try{return new e(\"test\")}catch(e){}var e=function(e,t){t=t||{bubbles:!1,cancelable:!1};var n=document.createEvent(\"MouseEvent\");return n.initMouseEvent(e,t.bubbles,t.cancelable,window,0,0,0,0,0,!1,!1,!1,!1,0,null),n};e.prototype=Event.prototype,window.MouseEvent=e;}();\n\n !function(){function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}\"function\"!=typeof window.CustomEvent&&(t.prototype=window.Event.prototype,window.CustomEvent=t);}();\n\n // 存储事件\n var handlers = {\n // i: { // 元素ID\n // j: { // 事件ID\n // e: 事件名\n // fn: 事件处理函数\n // i: 事件ID\n // proxy:\n // sel: 选择器\n // }\n // }\n };\n\n // 元素ID\n var mduiElementId = 1;\n\n function fnFalse() {\n return false;\n }\n\n /**\n * 为元素赋予一个唯一的ID\n * @param element\n * @returns {number|*}\n */\n function getElementId(element) {\n if (!element.mduiElementId) {\n mduiElementId += 1;\n element.mduiElementId = mduiElementId;\n }\n\n return element.mduiElementId;\n }\n\n /**\n * 获取匹配的事件\n * @param element\n * @param eventName\n * @param func\n * @param selector\n * @returns {Array}\n */\n function getHandlers(element, eventName, func, selector) {\n return (handlers[getElementId(element)] || []).filter(function (handler) { return handler\n && (!eventName || handler.e === eventName)\n && (!func || handler.fn.toString() === func.toString())\n && (!selector || handler.sel === selector); });\n }\n\n /**\n * 添加事件监听\n * @param element\n * @param eventName\n * @param func\n * @param data\n * @param selector\n */\n function add(element, eventName, func, data, selector) {\n var elementId = getElementId(element);\n\n if (!handlers[elementId]) {\n handlers[elementId] = [];\n }\n\n // 传入 data.useCapture 来设置 useCapture: true\n var useCapture = false;\n if (isObjectLike(data) && data.useCapture) {\n useCapture = true;\n }\n\n eventName.split(' ').forEach(function (event) {\n var handler = {\n e: event,\n fn: func,\n sel: selector,\n i: handlers[elementId].length,\n };\n\n function callFn(e, elem) {\n // 因为鼠标事件模拟事件的 detail 属性是只读的,因此在 e._detail 中存储参数\n /* eslint no-underscore-dangle: 0 */\n var result = func.apply(elem, e._detail === undefined ? [e] : [e].concat(e._detail));\n\n if (result === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n function proxyfn(e) {\n e._data = data;\n\n if (selector) {\n // 事件代理\n $(element)\n .find(selector)\n .get()\n .reverse()\n .forEach(function (elem) {\n if (elem === e.target || $.contains(elem, e.target)) {\n callFn(e, elem);\n }\n });\n } else {\n // 不使用事件代理\n callFn(e, element);\n }\n }\n\n handler.proxy = proxyfn;\n handlers[elementId].push(handler);\n element.addEventListener(handler.e, proxyfn, useCapture);\n });\n }\n\n /**\n * 移除事件监听\n * @param element\n * @param eventName\n * @param func\n * @param selector\n */\n function remove(element, eventName, func, selector) {\n (eventName || '').split(' ').forEach(function (event) {\n getHandlers(element, event, func, selector).forEach(function (handler) {\n delete handlers[getElementId(element)][handler.i];\n element.removeEventListener(handler.e, handler.proxy, false);\n });\n });\n }\n\n $.fn.extend({\n /**\n * DOM 加载完毕后调用的函数\n * @param callback\n * @returns {ready}\n */\n ready: function ready(callback) {\n if (/complete|loaded|interactive/.test(document.readyState) && document.body) {\n callback($);\n } else {\n document.addEventListener('DOMContentLoaded', function () {\n callback($);\n }, false);\n }\n\n return this;\n },\n\n /**\n * 绑定事件\n *\n * $().on({eventName: fn}, selector, data);\n * $().on({eventName: fn}, selector)\n * $().on({eventName: fn})\n * $().on(eventName, selector, data, fn);\n * $().on(eventName, selector, fn);\n * $().on(eventName, data, fn);\n * $().on(eventName, fn);\n * $().on(eventName, false);\n *\n * @param eventName\n * @param selector\n * @param data\n * @param callback\n * @param one 是否是 one 方法,只在 JQ 内部使用\n * @returns\n */\n on: function on(eventName, selector, data, callback, one) {\n var self = this;\n\n // 默认\n // $().on(event, selector, data, callback)\n\n // event 使用 事件:函数 键值对\n // event = {\n // 'event1': callback1,\n // 'event2': callback2\n // }\n //\n // $().on(event, selector, data)\n if (eventName && !isString(eventName)) {\n each(eventName, function (type, fn) {\n self.on(type, selector, data, fn);\n });\n\n return self;\n }\n\n // selector 不存在\n // $().on(event, data, callback)\n if (!isString(selector) && !isFunction(callback) && callback !== false) {\n callback = data;\n data = selector;\n selector = undefined;\n }\n\n // data 不存在\n // $().on(event, callback)\n if (isFunction(data) || data === false) {\n callback = data;\n data = undefined;\n }\n\n // callback 为 false\n // $().on(event, false)\n if (callback === false) {\n callback = fnFalse;\n }\n\n if (one === 1) {\n var origCallback = callback;\n callback = function () {\n self.off(eventName, selector, callback);\n /* eslint prefer-rest-params: 0 */\n return origCallback.apply(this, arguments);\n };\n }\n\n return this.each(function () {\n add(this, eventName, callback, data, selector);\n });\n },\n\n /**\n * 绑定事件,只触发一次\n * @param eventName\n * @param selector\n * @param data\n * @param callback\n */\n one: function one(eventName, selector, data, callback) {\n var self = this;\n\n if (!isString(eventName)) {\n each(eventName, function (type, fn) {\n type.split(' ').forEach(function (eName) {\n self.on(eName, selector, data, fn, 1);\n });\n });\n } else {\n eventName.split(' ').forEach(function (eName) {\n self.on(eName, selector, data, callback, 1);\n });\n }\n\n return this;\n },\n\n /**\n * 取消绑定事件\n *\n * $().off(eventName, selector);\n * $().off(eventName, callback);\n * $().off(eventName, false);\n *\n */\n off: function off(eventName, selector, callback) {\n var self = this;\n\n // event 使用 事件:函数 键值对\n // event = {\n // 'event1': callback1,\n // 'event2': callback2\n // }\n //\n // $().off(event, selector)\n if (eventName && !isString(eventName)) {\n each(eventName, function (type, fn) {\n self.off(type, selector, fn);\n });\n\n return self;\n }\n\n // selector 不存在\n // $().off(event, callback)\n if (!isString(selector) && !isFunction(callback) && callback !== false) {\n callback = selector;\n selector = undefined;\n }\n\n // callback 为 false\n // $().off(event, false)\n if (callback === false) {\n callback = fnFalse;\n }\n\n return self.each(function () {\n remove(this, eventName, callback, selector);\n });\n },\n\n /**\n * 触发一个事件\n * @param eventName\n * @param data\n * @returns {*|JQ}\n */\n trigger: function trigger(eventName, data) {\n var isMouseEvent = ['click', 'mousedown', 'mouseup', 'mousemove'].indexOf(eventName) > -1;\n var evt;\n\n if (isMouseEvent) {\n // Note: MouseEvent 无法传入 detail 参数\n evt = new MouseEvent(eventName, {\n bubbles: true,\n cancelable: true,\n });\n } else {\n evt = new CustomEvent(eventName, {\n detail: data,\n bubbles: true,\n cancelable: true,\n });\n }\n\n evt._detail = data;\n\n return this.each(function () {\n this.dispatchEvent(evt);\n });\n },\n });\n\n var globalOptions = {};\n var jsonpID = 0;\n\n // 全局事件名\n var ajaxEvent = {\n ajaxStart: 'start.mdui.ajax',\n ajaxSuccess: 'success.mdui.ajax',\n ajaxError: 'error.mdui.ajax',\n ajaxComplete: 'complete.mdui.ajax',\n };\n\n /**\n * 判断此请求方法是否通过查询字符串提交参数\n * @param method 请求方法,大写\n * @returns {boolean}\n */\n function isQueryStringData(method) {\n return ['GET', 'HEAD'].indexOf(method) >= 0;\n }\n\n /**\n * 添加参数到 URL 上,且 URL 中不存在 ? 时,自动把第一个 & 替换为 ?\n * @param url\n * @param query 参数 key=value\n * @returns {string}\n */\n function appendQuery(url, query) {\n return ((url + \"&\" + query)).replace(/[&?]{1,2}/, '?');\n }\n\n $.extend({\n\n /**\n * 为 ajax 请求设置全局配置参数\n * @param options\n */\n ajaxSetup: function ajaxSetup(options) {\n $.extend(globalOptions, options || {});\n },\n\n /**\n * 发送 ajax 请求\n * @param options\n */\n ajax: function ajax(options) {\n // 配置参数\n var defaults = {\n // 请求方式\n method: 'GET',\n // 请求的数据,查询字符串或对象\n data: false,\n // 是否把数据转换为查询字符串发送,为 false 时不进行自动转换。\n processData: true,\n // 是否为异步请求\n async: true,\n // 是否从缓存中读取,只对 GET/HEAD 请求有效,dataType 为 jsonp 时为 false\n cache: true,\n // HTTP 访问认证的用户名\n username: '',\n // HTTP 访问认证的密码\n password: '',\n // 一个键值对,随着请求一起发送\n headers: {},\n // 设置 XHR 对象\n xhrFields: {},\n // 一个 HTTP 代码和函数的对象\n statusCode: {},\n // 预期服务器返回的数据类型 text、json、jsonp\n dataType: 'text',\n // jsonp 请求的回调函数名称\n jsonp: 'callback',\n // (string 或 Function)使用指定的回调函数名代替自动生成的回调函数名\n jsonpCallback: function () {\n jsonpID += 1;\n\n return (\"mduijsonp_\" + (Date.now()) + \"_\" + jsonpID);\n },\n // 发送信息至服务器时内容编码类型\n contentType: 'application/x-www-form-urlencoded',\n // 设置请求超时时间(毫秒)\n timeout: 0,\n // 是否在 document 上触发全局 ajax 事件\n global: true,\n // beforeSend: function (XMLHttpRequest) 请求发送前执行,返回 false 可取消本次 ajax 请求\n // success: function (data, textStatus, XMLHttpRequest) 请求成功时调用\n // error: function (XMLHttpRequest, textStatus) 请求失败时调用\n // statusCode: {404: function ()}\n // 200-299之间的状态码表示成功,参数和 success 回调一样;其他状态码表示失败,参数和 error 回调一样\n // complete: function (XMLHttpRequest, textStatus) 请求完成后回调函数 (请求成功或失败之后均调用)\n };\n\n // 回调函数\n var callbacks = [\n 'beforeSend',\n 'success',\n 'error',\n 'statusCode',\n 'complete' ];\n\n // 是否已取消请求\n var isCanceled = false;\n\n // 保存全局配置\n var globals = globalOptions;\n\n // 事件参数\n var eventParams = {};\n\n // 合并全局参数到默认参数,全局回调函数不覆盖\n each(globals, function (key, value) {\n if (callbacks.indexOf(key) < 0) {\n defaults[key] = value;\n }\n });\n\n // 参数合并\n options = $.extend({}, defaults, options);\n\n /**\n * 触发全局事件\n * @param event string 事件名\n * @param xhr XMLHttpRequest 事件参数\n */\n function triggerEvent(event, xhr) {\n if (options.global) {\n $(document).trigger(event, xhr);\n }\n }\n\n /**\n * 触发 XHR 回调和事件\n * @param callback string 回调函数名称\n * @param args\n */\n function triggerCallback(callback) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n var result1;\n var result2;\n\n if (callback) {\n // 全局回调\n if (callback in globals) {\n result1 = globals[callback].apply(globals, args);\n }\n\n // 自定义回调\n if (options[callback]) {\n result2 = options[callback].apply(options, args);\n }\n\n // beforeSend 回调返回 false 时取消 ajax 请求\n if (callback === 'beforeSend' && (result1 === false || result2 === false)) {\n isCanceled = true;\n }\n }\n }\n\n // 请求方式转为大写\n var method = options.method.toUpperCase();\n\n // 默认使用当前页面 URL\n if (!options.url) {\n options.url = window.location.toString();\n }\n\n // 需要发送的数据\n // GET/HEAD 请求和 processData 为 true 时,转换为查询字符串格式,特殊格式不转换\n var sendData;\n if (\n (isQueryStringData(method) || options.processData)\n && options.data\n && [ArrayBuffer, Blob, Document, FormData].indexOf(options.data.constructor) < 0\n ) {\n sendData = isString(options.data) ? options.data : $.param(options.data);\n } else {\n sendData = options.data;\n }\n\n // 对于 GET、HEAD 类型的请求,把 data 数据添加到 URL 中\n if (isQueryStringData(method) && sendData) {\n // 查询字符串拼接到 URL 中\n options.url = appendQuery(options.url, sendData);\n sendData = null;\n }\n\n // JSONP\n if (options.dataType === 'jsonp') {\n // URL 中添加自动生成的回调函数名\n var callbackName = isFunction(options.jsonpCallback)\n ? options.jsonpCallback()\n : options.jsonpCallback;\n var requestUrl = appendQuery(options.url, ((options.jsonp) + \"=\" + callbackName));\n\n eventParams.options = options;\n\n triggerEvent(ajaxEvent.ajaxStart, eventParams);\n triggerCallback('beforeSend', null);\n\n if (isCanceled) {\n return undefined;\n }\n\n var abortTimeout;\n\n // 创建 script\n var script = document.createElement('script');\n script.type = 'text/javascript';\n\n // 创建 script 失败\n script.onerror = function () {\n if (abortTimeout) {\n clearTimeout(abortTimeout);\n }\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', null, 'scripterror');\n\n triggerEvent(ajaxEvent.ajaxComplete, eventParams);\n triggerCallback('complete', null, 'scripterror');\n };\n\n script.src = requestUrl;\n\n // 处理\n window[callbackName] = function (data) {\n if (abortTimeout) {\n clearTimeout(abortTimeout);\n }\n\n eventParams.data = data;\n\n triggerEvent(ajaxEvent.ajaxSuccess, eventParams);\n triggerCallback('success', data, 'success', null);\n\n $(script).remove();\n script = null;\n delete window[callbackName];\n };\n\n $('head').append(script);\n\n if (options.timeout > 0) {\n abortTimeout = setTimeout(function () {\n $(script).remove();\n script = null;\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', null, 'timeout');\n }, options.timeout);\n }\n\n return undefined;\n }\n\n // GET/HEAD 请求的缓存处理\n if (isQueryStringData(method) && !options.cache) {\n options.url = appendQuery(options.url, (\"_=\" + (Date.now())));\n }\n\n // 创建 XHR\n var xhr = new XMLHttpRequest();\n\n xhr.open(method, options.url, options.async, options.username, options.password);\n\n if (\n options.contentType\n || (\n sendData\n && !isQueryStringData(method)\n && options.contentType !== false\n )\n ) {\n xhr.setRequestHeader('Content-Type', options.contentType);\n }\n\n // 设置 Accept\n if (options.dataType === 'json') {\n xhr.setRequestHeader('Accept', 'application/json, text/javascript');\n }\n\n // 添加 headers\n if (options.headers) {\n each(options.headers, function (key, value) {\n xhr.setRequestHeader(key, value);\n });\n }\n\n // 检查是否是跨域请求\n if (options.crossDomain === undefined) {\n options.crossDomain = /^([\\w-]+:)?\\/\\/([^/]+)/.test(options.url)\n && RegExp.$2 !== window.location.host;\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.xhrFields) {\n each(options.xhrFields, function (key, value) {\n xhr[key] = value;\n });\n }\n\n eventParams.xhr = xhr;\n eventParams.options = options;\n\n var xhrTimeout;\n\n xhr.onload = function () {\n if (xhrTimeout) {\n clearTimeout(xhrTimeout);\n }\n\n // 包含成功或错误代码的字符串\n var textStatus;\n\n // AJAX 返回的 HTTP 响应码是否表示成功\n var isHttpStatusSuccess = (xhr.status >= 200 && xhr.status < 300) || xhr.status === 0;\n\n var responseData;\n\n if (isHttpStatusSuccess) {\n if (xhr.status === 204 || method === 'HEAD') {\n textStatus = 'nocontent';\n } else if (xhr.status === 304) {\n textStatus = 'notmodified';\n } else {\n textStatus = 'success';\n }\n\n if (options.dataType === 'json') {\n try {\n responseData = JSON.parse(xhr.responseText);\n eventParams.data = responseData;\n } catch (err) {\n textStatus = 'parsererror';\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', xhr, textStatus);\n }\n\n if (textStatus !== 'parsererror') {\n triggerEvent(ajaxEvent.ajaxSuccess, eventParams);\n triggerCallback('success', responseData, textStatus, xhr);\n }\n } else {\n responseData = xhr.responseType === 'text' || xhr.responseType === ''\n ? xhr.responseText\n : xhr.response;\n eventParams.data = responseData;\n\n triggerEvent(ajaxEvent.ajaxSuccess, eventParams);\n triggerCallback('success', responseData, textStatus, xhr);\n }\n } else {\n textStatus = 'error';\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', xhr, textStatus);\n }\n\n // statusCode\n each([globals.statusCode, options.statusCode], function (i, func) {\n if (func && func[xhr.status]) {\n if (isHttpStatusSuccess) {\n func[xhr.status](responseData, textStatus, xhr);\n } else {\n func[xhr.status](xhr, textStatus);\n }\n }\n });\n\n triggerEvent(ajaxEvent.ajaxComplete, eventParams);\n triggerCallback('complete', xhr, textStatus);\n };\n\n xhr.onerror = function () {\n if (xhrTimeout) {\n clearTimeout(xhrTimeout);\n }\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', xhr, xhr.statusText);\n\n triggerEvent(ajaxEvent.ajaxComplete, eventParams);\n triggerCallback('complete', xhr, 'error');\n };\n\n xhr.onabort = function () {\n var textStatus = 'abort';\n\n if (xhrTimeout) {\n textStatus = 'timeout';\n clearTimeout(xhrTimeout);\n }\n\n triggerEvent(ajaxEvent.ajaxError, eventParams);\n triggerCallback('error', xhr, textStatus);\n\n triggerEvent(ajaxEvent.ajaxComplete, eventParams);\n triggerCallback('complete', xhr, textStatus);\n };\n\n // ajax start 回调\n triggerEvent(ajaxEvent.ajaxStart, eventParams);\n triggerCallback('beforeSend', xhr);\n\n if (isCanceled) {\n return xhr;\n }\n\n // Timeout\n if (options.timeout > 0) {\n xhrTimeout = setTimeout(function () {\n xhr.abort();\n }, options.timeout);\n }\n\n // 发送 XHR\n xhr.send(sendData);\n\n return xhr;\n },\n });\n\n // 监听全局事件\n //\n // 通过 $(document).on('success.mdui.ajax', function (event, params) {}) 调用时,包含两个参数\n // event: 事件对象\n // params: {\n // xhr: XMLHttpRequest 对象\n // options: ajax 请求的配置参数\n // data: ajax 请求返回的数据\n // }\n\n // 全局 Ajax 事件快捷方法\n // $(document).ajaxStart(function (event, xhr, options) {})\n // $(document).ajaxSuccess(function (event, xhr, options, data) {})\n // $(document).ajaxError(function (event, xhr, options) {})\n // $(document).ajaxComplete(function (event, xhr, options) {})\n each(ajaxEvent, function (name, eventName) {\n $.fn[name] = function (fn) {\n return this.on(eventName, function (e, params) {\n fn(e, params.xhr, params.options, params.data);\n });\n };\n });\n\n return $;\n\n}());\n","/**\n * =============================================================================\n * ************ 定义全局变量 ************\n * =============================================================================\n */\n\nvar $document = $(document);\nvar $window = $(window);\n\n/**\n * 队列 -- 当前队列的 api 和 jquery 不一样,所以不打包进 mdui.JQ 里\n */\nvar queue = {};\n(function () {\n var queueData = [];\n\n /**\n * 写入队列\n * @param queueName 对列名\n * @param func 函数名,该参数为空时,返回所有队列\n */\n queue.queue = function (queueName, func) {\n if (queueData[queueName] === undefined) {\n queueData[queueName] = [];\n }\n\n if (func === undefined) {\n return queueData[queueName];\n }\n\n queueData[queueName].push(func);\n };\n\n /**\n * 从队列中移除第一个函数,并执行该函数\n * @param queueName\n */\n queue.dequeue = function (queueName) {\n if (queueData[queueName] !== undefined && queueData[queueName].length) {\n (queueData[queueName].shift())();\n }\n };\n\n})();\n\n/**\n * touch 事件后的 500ms 内禁用 mousedown 事件\n *\n * 不支持触控的屏幕上事件顺序为 mousedown -> mouseup -> click\n * 支持触控的屏幕上事件顺序为 touchstart -> touchend -> mousedown -> mouseup -> click\n */\nvar TouchHandler = {\n touches: 0,\n\n /**\n * 该事件是否被允许\n * 在执行事件前调用该方法判断事件是否可以执行\n * @param e\n * @returns {boolean}\n */\n isAllow: function (e) {\n var allow = true;\n\n if (\n TouchHandler.touches &&\n [\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'click',\n 'mouseover',\n 'mouseout',\n 'mouseenter',\n 'mouseleave',\n ].indexOf(e.type) > -1\n ) {\n // 触发了 touch 事件后阻止鼠标事件\n allow = false;\n }\n\n return allow;\n },\n\n /**\n * 在 touchstart 和 touchmove、touchend、touchcancel 事件中调用该方法注册事件\n * @param e\n */\n register: function (e) {\n if (e.type === 'touchstart') {\n // 触发了 touch 事件\n TouchHandler.touches += 1;\n } else if (['touchmove', 'touchend', 'touchcancel'].indexOf(e.type) > -1) {\n // touch 事件结束 500ms 后解除对鼠标事件的阻止\n setTimeout(function () {\n if (TouchHandler.touches) {\n TouchHandler.touches -= 1;\n }\n }, 500);\n }\n },\n\n start: 'touchstart mousedown',\n move: 'touchmove mousemove',\n end: 'touchend mouseup',\n cancel: 'touchcancel mouseleave',\n unlock: 'touchend touchmove touchcancel',\n};\n\n// 测试事件\n// 在每一个事件中都使用 TouchHandler.isAllow(e) 判断事件是否可执行\n// 在 touchstart 和 touchmove、touchend、touchcancel\n// (function () {\n//\n// $document\n// .on(TouchHandler.start, function (e) {\n// if (!TouchHandler.isAllow(e)) {\n// return;\n// }\n// TouchHandler.register(e);\n// console.log(e.type);\n// })\n// .on(TouchHandler.move, function (e) {\n// if (!TouchHandler.isAllow(e)) {\n// return;\n// }\n// console.log(e.type);\n// })\n// .on(TouchHandler.end, function (e) {\n// if (!TouchHandler.isAllow(e)) {\n// return;\n// }\n// console.log(e.type);\n// })\n// .on(TouchHandler.unlock, TouchHandler.register);\n// })();\n\n$(function () {\n // 避免页面加载完后直接执行css动画\n // https://css-tricks.com/transitions-only-after-page-load/\n\n setTimeout(function () {\n $('body').addClass('mdui-loaded');\n }, 0);\n});\n","/**\n * =============================================================================\n * ************ MDUI 内部使用的函数 ************\n * =============================================================================\n */\n\n/**\n * 解析 DATA API 的参数\n * @param str\n * @returns {*}\n */\nvar parseOptions = function (str) {\n var options = {};\n\n if (str === null || !str) {\n return options;\n }\n\n if (typeof str === 'object') {\n return str;\n }\n\n /* jshint ignore:start */\n var start = str.indexOf('{');\n try {\n options = (new Function('',\n 'var json = ' + str.substr(start) +\n '; return JSON.parse(JSON.stringify(json));'))();\n } catch (e) {\n }\n /* jshint ignore:end */\n\n return options;\n};\n\n/**\n * 绑定组件的事件\n * @param eventName 事件名\n * @param pluginName 插件名\n * @param inst 插件实例\n * @param trigger 在该元素上触发\n * @param obj 事件参数\n */\nvar componentEvent = function (eventName, pluginName, inst, trigger, obj) {\n if (!obj) {\n obj = {};\n }\n\n obj.inst = inst;\n\n var fullEventName = eventName + '.mdui.' + pluginName;\n\n // jQuery 事件\n if (typeof jQuery !== 'undefined') {\n jQuery(trigger).trigger(fullEventName, obj);\n }\n\n // JQ 事件\n $(trigger).trigger(fullEventName, obj);\n};\n","/**\n * =============================================================================\n * ************ 开放的常用方法 ************\n * =============================================================================\n */\n\n$.fn.extend({\n\n /**\n * 执行强制重绘\n */\n reflow: function () {\n return this.each(function () {\n return this.clientLeft;\n });\n },\n\n /**\n * 设置 transition 时间\n * @param duration\n */\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n\n return this.each(function () {\n this.style.webkitTransitionDuration = duration;\n this.style.transitionDuration = duration;\n });\n },\n\n /**\n * transition 动画结束回调\n * @param callback\n * @returns {transitionEnd}\n */\n transitionEnd: function (callback) {\n var events = [\n 'webkitTransitionEnd',\n 'transitionend',\n ];\n var i;\n var _this = this;\n\n function fireCallBack(e) {\n if (e.target !== this) {\n return;\n }\n\n callback.call(this, e);\n\n for (i = 0; i < events.length; i++) {\n _this.off(events[i], fireCallBack);\n }\n }\n\n if (callback) {\n for (i = 0; i < events.length; i++) {\n _this.on(events[i], fireCallBack);\n }\n }\n\n return this;\n },\n\n /**\n * 设置 transform-origin 属性\n * @param transformOrigin\n */\n transformOrigin: function (transformOrigin) {\n return this.each(function () {\n this.style.webkitTransformOrigin = transformOrigin;\n this.style.transformOrigin = transformOrigin;\n });\n },\n\n /**\n * 设置 transform 属性\n * @param transform\n */\n transform: function (transform) {\n return this.each(function () {\n this.style.webkitTransform = transform;\n this.style.transform = transform;\n });\n },\n\n});\n\n$.extend({\n /**\n * 创建并显示遮罩\n * @param zIndex 遮罩层的 z-index\n */\n showOverlay: function (zIndex) {\n var $overlay = $('.mdui-overlay');\n\n if ($overlay.length) {\n $overlay.data('isDeleted', 0);\n\n if (zIndex !== undefined) {\n $overlay.css('z-index', zIndex);\n }\n } else {\n if (zIndex === undefined) {\n zIndex = 2000;\n }\n\n $overlay = $('
')\n .appendTo(document.body)\n .reflow()\n .css('z-index', zIndex);\n }\n\n var level = $overlay.data('overlay-level') || 0;\n return $overlay\n .data('overlay-level', ++level)\n .addClass('mdui-overlay-show');\n },\n\n /**\n * 隐藏遮罩层\n * @param force 是否强制隐藏遮罩\n */\n hideOverlay: function (force) {\n var $overlay = $('.mdui-overlay');\n\n if (!$overlay.length) {\n return;\n }\n\n var level = force ? 1 : $overlay.data('overlay-level');\n if (level > 1) {\n $overlay.data('overlay-level', --level);\n return;\n }\n\n $overlay\n .data('overlay-level', 0)\n .removeClass('mdui-overlay-show')\n .data('isDeleted', 1)\n .transitionEnd(function () {\n if ($overlay.data('isDeleted')) {\n $overlay.remove();\n }\n });\n },\n\n /**\n * 锁定屏幕\n */\n lockScreen: function () {\n var $body = $('body');\n\n // 不直接把 body 设为 box-sizing: border-box,避免污染全局样式\n var newBodyWidth = $body.width();\n\n $body\n .addClass('mdui-locked')\n .width(newBodyWidth);\n\n var level = $body.data('lockscreen-level') || 0;\n $body.data('lockscreen-level', ++level);\n },\n\n /**\n * 解除屏幕锁定\n * @param force 是否强制解锁屏幕\n */\n unlockScreen: function (force) {\n var $body = $('body');\n\n var level = force ? 1 : $body.data('lockscreen-level');\n if (level > 1) {\n $body.data('lockscreen-level', --level);\n return;\n }\n\n $body\n .data('lockscreen-level', 0)\n .removeClass('mdui-locked')\n .width('');\n },\n\n /**\n * 函数节流\n * @param fn\n * @param delay\n * @returns {Function}\n */\n throttle: function (fn, delay) {\n var timer = null;\n if (!delay || delay < 16) {\n delay = 16;\n }\n\n return function () {\n var _this = this;\n var args = arguments;\n\n if (timer === null) {\n timer = setTimeout(function () {\n fn.apply(_this, args);\n timer = null;\n }, delay);\n }\n };\n },\n});\n\n/**\n * 生成唯一 id\n * @param string name id的名称,若该名称对于的guid不存在,则生成新的guid并返回;若已存在,则返回原有guid\n * @returns {string}\n */\n(function () {\n var GUID = {};\n\n $.extend({\n guid: function (name) {\n if (typeof name !== 'undefined' && typeof GUID[name] !== 'undefined') {\n return GUID[name];\n }\n\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n var guid = s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n\n if (typeof name !== 'undefined') {\n GUID[name] = guid;\n }\n\n return guid;\n },\n });\n})();\n","/**\n * =============================================================================\n * ************ Mutation ************\n * =============================================================================\n */\n\n(function () {\n /**\n * API 初始化代理, 当 DOM 突变再次执行代理的初始化函数. 使用方法:\n *\n * 1. 代理组件 API 执行初始化函数, selector 必须为字符串.\n * mdui.mutation(selector, apiInit);\n * mutation 会执行 $(selector).each(apiInit)\n *\n * 2. 突变时, 再次执行代理的初始化函数\n * mdui.mutation() 等价 $(document).mutation()\n * $(selector).mutation() 在 selector 节点内进行 API 初始化\n *\n * 原理:\n *\n * mutation 执行了 $().data('mdui.mutation', [selector]).\n * 当元素被重构时, 该数据会丢失, 由此判断是否突变.\n *\n * 提示:\n *\n * 类似 Drawer 可以使用委托事件完成.\n * 类似 Collapse 需要知道 DOM 发生突变, 并再次进行初始化.\n */\n var entries = { };\n\n function mutation(selector, apiInit, that, i, item) {\n var $this = $(that);\n var m = $this.data('mdui.mutation');\n\n if (!m) {\n m = [];\n $this.data('mdui.mutation', m);\n }\n\n if (m.indexOf(selector) === -1) {\n m.push(selector);\n apiInit.call(that, i, item);\n }\n }\n\n $.fn.extend({\n mutation: function () {\n return this.each(function (i, item) {\n var $this = $(this);\n $.each(entries, function (selector, apiInit) {\n if ($this.is(selector)) {\n mutation(selector, apiInit, $this[0], i, item);\n }\n\n $this.find(selector).each(function (i, item) {\n mutation(selector, apiInit, this, i, item);\n });\n });\n });\n },\n });\n\n mdui.mutation = function (selector, apiInit) {\n if (typeof selector !== 'string' || typeof apiInit !== 'function') {\n $(document).mutation();\n return;\n }\n\n entries[selector] = apiInit;\n $(selector).each(function (i, item) {\n mutation(selector, apiInit, this, i, item);\n });\n };\n\n})();\n","/**\n * =============================================================================\n * ************ Headroom.js ************\n * =============================================================================\n */\n\nmdui.Headroom = (function () {\n\n /**\n * 默认参数\n * @type {{}}\n */\n var DEFAULT = {\n tolerance: 5, // 滚动条滚动多少距离开始隐藏或显示元素,{down: num, up: num},或数字\n offset: 0, // 在页面顶部多少距离内滚动不会隐藏元素\n initialClass: 'mdui-headroom', // 初始化时添加的类\n pinnedClass: 'mdui-headroom-pinned-top', // 元素固定时添加的类\n unpinnedClass: 'mdui-headroom-unpinned-top', // 元素隐藏时添加的类\n };\n\n /**\n * Headroom\n * @param selector\n * @param opts\n * @constructor\n */\n function Headroom(selector, opts) {\n var _this = this;\n\n _this.$headroom = $(selector).eq(0);\n if (!_this.$headroom.length) {\n return;\n }\n\n // 已通过自定义属性实例化过,不再重复实例化\n var oldInst = _this.$headroom.data('mdui.headroom');\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n\n // 数值转为 {down: bum, up: num}\n var tolerance = _this.options.tolerance;\n if (tolerance !== Object(tolerance)) {\n _this.options.tolerance = {\n down: tolerance,\n up: tolerance,\n };\n }\n\n _this._init();\n }\n\n /**\n * 初始化\n * @private\n */\n Headroom.prototype._init = function () {\n var _this = this;\n\n _this.state = 'pinned';\n _this.$headroom\n .addClass(_this.options.initialClass)\n .removeClass(_this.options.pinnedClass + ' ' + _this.options.unpinnedClass);\n\n _this.inited = false;\n _this.lastScrollY = 0;\n\n _this._attachEvent();\n };\n\n /**\n * 监听滚动事件\n * @private\n */\n Headroom.prototype._attachEvent = function () {\n var _this = this;\n\n if (!_this.inited) {\n _this.lastScrollY = window.pageYOffset;\n _this.inited = true;\n\n $window.on('scroll', function () {\n _this._scroll();\n });\n }\n };\n\n /**\n * 滚动时的处理\n * @private\n */\n Headroom.prototype._scroll = function () {\n var _this = this;\n _this.rafId = window.requestAnimationFrame(function () {\n var currentScrollY = window.pageYOffset;\n var direction = currentScrollY > _this.lastScrollY ? 'down' : 'up';\n var toleranceExceeded =\n Math.abs(currentScrollY - _this.lastScrollY) >=\n _this.options.tolerance[direction];\n\n if (\n currentScrollY > _this.lastScrollY &&\n currentScrollY >= _this.options.offset &&\n toleranceExceeded) {\n _this.unpin();\n } else if (\n (currentScrollY < _this.lastScrollY && toleranceExceeded) ||\n currentScrollY <= _this.options.offset\n ) {\n _this.pin();\n }\n\n _this.lastScrollY = currentScrollY;\n });\n };\n\n /**\n * 动画结束回调\n * @param inst\n */\n var transitionEnd = function (inst) {\n if (inst.state === 'pinning') {\n inst.state = 'pinned';\n componentEvent('pinned', 'headroom', inst, inst.$headroom);\n }\n\n if (inst.state === 'unpinning') {\n inst.state = 'unpinned';\n componentEvent('unpinned', 'headroom', inst, inst.$headroom);\n }\n };\n\n /**\n * 固定住\n */\n Headroom.prototype.pin = function () {\n var _this = this;\n\n if (\n _this.state === 'pinning' ||\n _this.state === 'pinned' ||\n !_this.$headroom.hasClass(_this.options.initialClass)\n ) {\n return;\n }\n\n componentEvent('pin', 'headroom', _this, _this.$headroom);\n\n _this.state = 'pinning';\n\n _this.$headroom\n .removeClass(_this.options.unpinnedClass)\n .addClass(_this.options.pinnedClass)\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 不固定住\n */\n Headroom.prototype.unpin = function () {\n var _this = this;\n\n if (\n _this.state === 'unpinning' ||\n _this.state === 'unpinned' ||\n !_this.$headroom.hasClass(_this.options.initialClass)\n ) {\n return;\n }\n\n componentEvent('unpin', 'headroom', _this, _this.$headroom);\n\n _this.state = 'unpinning';\n\n _this.$headroom\n .removeClass(_this.options.pinnedClass)\n .addClass(_this.options.unpinnedClass)\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 启用\n */\n Headroom.prototype.enable = function () {\n var _this = this;\n\n if (!_this.inited) {\n _this._init();\n }\n };\n\n /**\n * 禁用\n */\n Headroom.prototype.disable = function () {\n var _this = this;\n\n if (_this.inited) {\n _this.inited = false;\n _this.$headroom\n .removeClass([\n _this.options.initialClass,\n _this.options.pinnedClass,\n _this.options.unpinnedClass,\n ].join(' '));\n\n $window.off('scroll', function () {\n _this._scroll();\n });\n\n window.cancelAnimationFrame(_this.rafId);\n }\n };\n\n /**\n * 获取当前状态 pinning | pinned | unpinning | unpinned\n */\n Headroom.prototype.getState = function () {\n return this.state;\n };\n\n return Headroom;\n\n})();\n","/**\n * =============================================================================\n * ************ Headroom 自定义属性 API ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-headroom]', function () {\n var $this = $(this);\n var options = parseOptions($this.attr('mdui-headroom'));\n\n var inst = $this.data('mdui.headroom');\n if (!inst) {\n inst = new mdui.Headroom($this, options);\n $this.data('mdui.headroom', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ 供 Collapse、 Panel 调用的折叠内容块插件 ************\n * =============================================================================\n */\nvar CollapsePrivate = (function () {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n accordion: false, // 是否使用手风琴效果\n };\n\n /**\n * 折叠内容块\n * @param selector\n * @param opts\n * @param namespace\n * @constructor\n */\n function Collapse(selector, opts, namespace) {\n var _this = this;\n\n // 命名空间\n _this.ns = namespace;\n\n // 类名\n var classpPefix = 'mdui-' + _this.ns + '-item';\n _this.class_item = classpPefix;\n _this.class_item_open = classpPefix + '-open';\n _this.class_header = classpPefix + '-header';\n _this.class_body = classpPefix + '-body';\n\n // 折叠面板元素\n _this.$collapse = $(selector).eq(0);\n if (!_this.$collapse.length) {\n return;\n }\n\n // 已通过自定义属性实例化过,不再重复实例化\n var oldInst = _this.$collapse.data('mdui.' + _this.ns);\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n\n _this.$collapse.on('click', '.' + _this.class_header, function () {\n var $item = $(this).parent('.' + _this.class_item);\n if (_this.$collapse.children($item).length) {\n _this.toggle($item);\n }\n });\n\n // 绑定关闭按钮\n _this.$collapse.on('click', '[mdui-' + _this.ns + '-item-close]', function () {\n var $item = $(this).parents('.' + _this.class_item).eq(0);\n if (_this._isOpen($item)) {\n _this.close($item);\n }\n });\n }\n\n /**\n * 指定 item 是否处于打开状态\n * @param $item\n * @returns {boolean}\n * @private\n */\n Collapse.prototype._isOpen = function ($item) {\n return $item.hasClass(this.class_item_open);\n };\n\n /**\n * 获取指定 item\n * @param item\n * @returns {*}\n * @private\n */\n Collapse.prototype._getItem = function (item) {\n var _this = this;\n\n if (parseInt(item) === item) {\n // item 是索引号\n return _this.$collapse.children('.' + _this.class_item).eq(item);\n }\n\n return $(item).eq(0);\n };\n\n /**\n * 动画结束回调\n * @param inst\n * @param $content\n * @param $item\n */\n var transitionEnd = function (inst, $content, $item) {\n if (inst._isOpen($item)) {\n $content\n .transition(0)\n .height('auto')\n .reflow()\n .transition('');\n\n componentEvent('opened', inst.ns, inst, $item[0]);\n } else {\n $content.height('');\n\n componentEvent('closed', inst.ns, inst, $item[0]);\n }\n };\n\n /**\n * 打开指定面板项\n * @param item 面板项的索引号或 DOM 元素或 CSS 选择器\n */\n Collapse.prototype.open = function (item) {\n var _this = this;\n var $item = _this._getItem(item);\n\n if (_this._isOpen($item)) {\n return;\n }\n\n // 关闭其他项\n if (_this.options.accordion) {\n _this.$collapse.children('.' + _this.class_item_open).each(function () {\n var $tmpItem = $(this);\n\n if ($tmpItem !== $item) {\n _this.close($tmpItem);\n }\n });\n }\n\n var $content = $item.children('.' + _this.class_body);\n\n $content\n .height($content[0].scrollHeight)\n .transitionEnd(function () {\n transitionEnd(_this, $content, $item);\n });\n\n componentEvent('open', _this.ns, _this, $item[0]);\n\n $item.addClass(_this.class_item_open);\n };\n\n /**\n * 关闭指定项\n * @param item 面板项的索引号或 DOM 元素或 CSS 选择器\n */\n Collapse.prototype.close = function (item) {\n var _this = this;\n var $item = _this._getItem(item);\n\n if (!_this._isOpen($item)) {\n return;\n }\n\n var $content = $item.children('.' + _this.class_body);\n\n componentEvent('close', _this.ns, _this, $item[0]);\n\n $item.removeClass(_this.class_item_open);\n\n $content\n .transition(0)\n .height($content[0].scrollHeight)\n .reflow()\n .transition('')\n .height('')\n .transitionEnd(function () {\n transitionEnd(_this, $content, $item);\n });\n };\n\n /**\n * 切换指定项的状态\n * @param item 面板项的索引号或 DOM 元素或 CSS 选择器或 JQ 对象\n */\n Collapse.prototype.toggle = function (item) {\n var _this = this;\n var $item = _this._getItem(item);\n\n if (_this._isOpen($item)) {\n _this.close($item);\n } else {\n _this.open($item);\n }\n };\n\n /**\n * 打开所有项\n */\n Collapse.prototype.openAll = function () {\n var _this = this;\n\n _this.$collapse.children('.' + _this.class_item).each(function () {\n var $tmpItem = $(this);\n\n if (!_this._isOpen($tmpItem)) {\n _this.open($tmpItem);\n }\n });\n };\n\n /**\n * 关闭所有项\n */\n Collapse.prototype.closeAll = function () {\n var _this = this;\n\n _this.$collapse.children('.' + _this.class_item).each(function () {\n var $tmpItem = $(this);\n\n if (_this._isOpen($tmpItem)) {\n _this.close($tmpItem);\n }\n });\n };\n\n return Collapse;\n})();\n\n/**\n * =============================================================================\n * ************ Collapse 折叠内容块插件 ************\n * =============================================================================\n */\nmdui.Collapse = (function () {\n\n function Collapse(selector, opts) {\n return new CollapsePrivate(selector, opts, 'collapse');\n }\n\n return Collapse;\n})();\n","/**\n * =============================================================================\n * ************ 涟漪 ************\n * =============================================================================\n *\n * Inspired by https://github.com/nolimits4web/Framework7/blob/master/src/js/fast-clicks.js\n * https://github.com/nolimits4web/Framework7/blob/master/LICENSE\n *\n * Inspired by https://github.com/fians/Waves\n */\n\n(function () {\n\n var Ripple = {\n\n /**\n * 延时,避免手指滑动时也触发涟漪(单位:毫秒)\n */\n delay: 200,\n\n /**\n * 显示涟漪动画\n * @param e\n * @param $ripple\n */\n show: function (e, $ripple) {\n\n // 鼠标右键不产生涟漪\n if (e.button === 2) {\n return;\n }\n\n // 点击位置坐标\n var tmp;\n if ('touches' in e && e.touches.length) {\n tmp = e.touches[0];\n } else {\n tmp = e;\n }\n\n var touchStartX = tmp.pageX;\n var touchStartY = tmp.pageY;\n\n // 涟漪位置\n var offset = $ripple.offset();\n var center = {\n x: touchStartX - offset.left,\n y: touchStartY - offset.top,\n };\n\n var height = $ripple.innerHeight();\n var width = $ripple.innerWidth();\n var diameter = Math.max(\n Math.pow((Math.pow(height, 2) + Math.pow(width, 2)), 0.5), 48\n );\n\n // 涟漪扩散动画\n var translate =\n 'translate3d(' + (-center.x + width / 2) + 'px, ' + (-center.y + height / 2) + 'px, 0) ' +\n 'scale(1)';\n\n // 涟漪的 DOM 结构\n $('
' +\n '
')\n\n // 缓存动画效果\n .data('translate', translate)\n\n .prependTo($ripple)\n .reflow()\n .transform(translate);\n },\n\n /**\n * 隐藏涟漪动画\n */\n hide: function (e, element) {\n var $ripple = $(element || this);\n\n $ripple.children('.mdui-ripple-wave').each(function () {\n removeRipple($(this));\n });\n\n $ripple.off('touchmove touchend touchcancel mousemove mouseup mouseleave', Ripple.hide);\n },\n };\n\n /**\n * 隐藏并移除涟漪\n * @param $wave\n */\n function removeRipple($wave) {\n if (!$wave.length || $wave.data('isRemoved')) {\n return;\n }\n\n $wave.data('isRemoved', true);\n\n var removeTimeout = setTimeout(function () {\n $wave.remove();\n }, 400);\n\n var translate = $wave.data('translate');\n\n $wave\n .addClass('mdui-ripple-wave-fill')\n .transform(translate.replace('scale(1)', 'scale(1.01)'))\n .transitionEnd(function () {\n clearTimeout(removeTimeout);\n\n $wave\n .addClass('mdui-ripple-wave-out')\n .transform(translate.replace('scale(1)', 'scale(1.01)'));\n\n removeTimeout = setTimeout(function () {\n $wave.remove();\n }, 700);\n\n setTimeout(function () {\n $wave.transitionEnd(function () {\n clearTimeout(removeTimeout);\n $wave.remove();\n });\n }, 0);\n });\n }\n\n /**\n * 显示涟漪,并绑定 touchend 等事件\n * @param e\n */\n function showRipple(e) {\n if (!TouchHandler.isAllow(e)) {\n return;\n }\n\n TouchHandler.register(e);\n\n // Chrome 59 点击滚动条时,会在 document 上触发事件\n if (e.target === document) {\n return;\n }\n\n var $ripple;\n var $target = $(e.target);\n\n // 获取含 .mdui-ripple 类的元素\n if ($target.hasClass('mdui-ripple')) {\n $ripple = $target;\n } else {\n $ripple = $target.parents('.mdui-ripple').eq(0);\n }\n\n if ($ripple.length) {\n\n // 禁用状态的元素上不产生涟漪效果\n if ($ripple[0].disabled || $ripple.attr('disabled') !== null) {\n return;\n }\n\n if (e.type === 'touchstart') {\n var hidden = false;\n\n // toucstart 触发指定时间后开始涟漪动画\n var timer = setTimeout(function () {\n timer = null;\n Ripple.show(e, $ripple);\n }, Ripple.delay);\n\n var hideRipple = function (hideEvent) {\n // 如果手指没有移动,且涟漪动画还没有开始,则开始涟漪动画\n if (timer) {\n clearTimeout(timer);\n timer = null;\n Ripple.show(e, $ripple);\n }\n\n if (!hidden) {\n hidden = true;\n Ripple.hide(hideEvent, $ripple);\n }\n };\n\n // 手指移动后,移除涟漪动画\n var touchMove = function (moveEvent) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n\n hideRipple(moveEvent);\n };\n\n $ripple\n .on('touchmove', touchMove)\n .on('touchend touchcancel', hideRipple);\n\n } else {\n Ripple.show(e, $ripple);\n $ripple.on('touchmove touchend touchcancel mousemove mouseup mouseleave', Ripple.hide);\n }\n }\n }\n\n // 初始化绑定的事件\n $document\n .on(TouchHandler.start, showRipple)\n .on(TouchHandler.unlock, TouchHandler.register);\n})();\n","/**\n * =============================================================================\n * ************ Text Field 文本框 ************\n * =============================================================================\n */\n\n(function () {\n\n var getProp = function (obj, prop) {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n obj[prop] !== undefined &&\n obj[prop]\n ) ? obj[prop] : false;\n };\n\n /**\n * 输入框事件\n * @param e\n */\n var inputEvent = function (e) {\n var input = e.target;\n var $input = $(input);\n var event = e.type;\n var value = $input.val();\n\n // reInit 为 true 时,需要重新初始化文本框\n var reInit = getProp(e.detail, 'reInit');\n\n // domLoadedEvent 为 true 时,为 DOM 加载完毕后自动触发的事件\n var domLoadedEvent = getProp(e.detail, 'domLoadedEvent');\n\n // 文本框类型\n var type = $input.attr('type') || '';\n if (['checkbox', 'button', 'submit', 'range', 'radio', 'image'].indexOf(type) >= 0) {\n return;\n }\n\n var $textField = $input.parent('.mdui-textfield');\n\n // 输入框是否聚焦\n if (event === 'focus') {\n $textField.addClass('mdui-textfield-focus');\n }\n\n if (event === 'blur') {\n $textField.removeClass('mdui-textfield-focus');\n }\n\n // 输入框是否为空\n if (event === 'blur' || event === 'input') {\n $textField[(value && value !== '') ? 'addClass' : 'removeClass']('mdui-textfield-not-empty');\n }\n\n // 输入框是否禁用\n $textField[input.disabled ? 'addClass' : 'removeClass']('mdui-textfield-disabled');\n\n // 表单验证\n if ((event === 'input' || event === 'blur') && !domLoadedEvent) {\n if (input.validity) {\n var method = input.validity.valid ? 'removeClass' : 'addClass';\n $textField[method]('mdui-textfield-invalid-html5');\n }\n }\n\n // textarea 高度自动调整\n if (e.target.nodeName.toLowerCase() === 'textarea') {\n\n // IE bug:textarea 的值仅为多个换行,不含其他内容时,textarea 的高度不准确\n // 此时,在计算高度前,在值的开头加入一个空格,计算完后,移除空格\n var inputValue = $input.val();\n var hasExtraSpace = false;\n if (inputValue.replace(/[\\r\\n]/g, '') === '') {\n $input.val(' ' + inputValue);\n hasExtraSpace = true;\n }\n\n // 设置 textarea 高度\n $input.height('');\n var height = $input.height();\n var scrollHeight = input.scrollHeight;\n\n if (scrollHeight > height) {\n $input.height(scrollHeight);\n }\n\n // 计算完,还原 textarea 的值\n if (hasExtraSpace) {\n $input.val(inputValue);\n }\n }\n\n // 实时字数统计\n if (reInit) {\n $textField\n .find('.mdui-textfield-counter')\n .remove();\n }\n\n var maxlength = $input.attr('maxlength');\n if (maxlength) {\n if (reInit || domLoadedEvent) {\n $('
' +\n ' / ' + maxlength +\n '
').appendTo($textField);\n }\n\n $textField.find('.mdui-textfield-counter-inputed').text(value.length.toString());\n }\n\n // 含 帮助文本、错误提示、字数统计 时,增加文本框底部内边距\n if (\n $textField.find('.mdui-textfield-helper').length ||\n $textField.find('.mdui-textfield-error').length ||\n maxlength\n ) {\n $textField.addClass('mdui-textfield-has-bottom');\n }\n };\n\n // 绑定事件\n $document.on('input focus blur', '.mdui-textfield-input', { useCapture: true }, inputEvent);\n\n // 可展开文本框展开\n $document.on('click', '.mdui-textfield-expandable .mdui-textfield-icon', function () {\n $(this)\n\n // 展开文本框\n .parents('.mdui-textfield')\n .addClass('mdui-textfield-expanded')\n\n // 聚焦到输入框\n .find('.mdui-textfield-input')[0].focus();\n });\n\n // 可展开文本框关闭\n $document.on('click', '.mdui-textfield-expanded .mdui-textfield-close', function () {\n $(this)\n\n // 关闭文本框\n .parents('.mdui-textfield')\n .removeClass('mdui-textfield-expanded')\n\n // 清空输入框\n .find('.mdui-textfield-input')\n .val('');\n });\n\n /**\n * 通过 JS 更新了表单内容,需要重新进行表单处理\n * @param- 如果传入了 .mdui-textfield 所在的 DOM 元素,则更新该文本框;否则,更新所有文本框\n */\n mdui.updateTextFields = function () {\n $(arguments.length ? arguments[0] : '.mdui-textfield').each(function () {\n $(this)\n .find('.mdui-textfield-input')\n .trigger('input', {\n reInit: true,\n });\n });\n };\n})();\n\n$(function () {\n /**\n * 初始化文本框\n */\n mdui.mutation('.mdui-textfield', function () {\n $(this)\n .find('.mdui-textfield-input')\n .trigger('input', {\n domLoadedEvent: true,\n });\n });\n});\n","/**\n * =============================================================================\n * ************ Slider 滑块 ************\n * =============================================================================\n */\n\n(function () {\n\n /**\n * 滑块的值变更后修改滑块样式\n * @param $slider\n */\n var updateValueStyle = function ($slider) {\n var data = $slider.data();\n\n var $track = data.$track;\n var $fill = data.$fill;\n var $thumb = data.$thumb;\n var $input = data.$input;\n var min = data.min;\n var max = data.max;\n var isDisabled = data.disabled;\n var isDiscrete = data.discrete;\n var $thumbText = data.$thumbText;\n var value = $input.val();\n var percent = (value - min) / (max - min) * 100;\n\n $fill.width(percent + '%');\n $track.width((100 - percent) + '%');\n\n if (isDisabled) {\n $fill.css('padding-right', '6px');\n $track.css('padding-left', '6px');\n }\n\n $thumb.css('left', percent + '%');\n\n if (isDiscrete) {\n $thumbText.text(value);\n }\n\n $slider[parseFloat(percent) === 0 ? 'addClass' : 'removeClass']('mdui-slider-zero');\n };\n\n /**\n * 重新初始化\n * @param $slider\n */\n var reInit = function ($slider) {\n var $track = $('
');\n var $fill = $('
');\n var $thumb = $('
');\n var $input = $slider.find('input[type=\"range\"]');\n\n // 禁用状态\n var isDisabled = $input[0].disabled;\n $slider[isDisabled ? 'addClass' : 'removeClass']('mdui-slider-disabled');\n\n // 重新填充 HTML\n $slider.find('.mdui-slider-track').remove();\n $slider.find('.mdui-slider-fill').remove();\n $slider.find('.mdui-slider-thumb').remove();\n $slider.append($track).append($fill).append($thumb);\n\n // 间续型滑块\n var isDiscrete = $slider.hasClass('mdui-slider-discrete');\n\n var $thumbText;\n if (isDiscrete) {\n $thumbText = $('');\n $thumb.empty().append($thumbText);\n }\n\n $slider.data({\n $track: $track,\n $fill: $fill,\n $thumb: $thumb,\n $input: $input,\n min: $input.attr('min'), // 滑块最小值\n max: $input.attr('max'), // 滑块最大值\n disabled: isDisabled, // 是否禁用状态\n discrete: isDiscrete, // 是否是间续型滑块\n $thumbText: $thumbText, // 间续型滑块的数值\n });\n\n // 设置默认值\n updateValueStyle($slider);\n };\n\n var rangeSelector = '.mdui-slider input[type=\"range\"]';\n\n $document\n\n // 滑动滑块事件\n .on('input change', rangeSelector, function () {\n var $slider = $(this).parent();\n updateValueStyle($slider);\n })\n\n // 开始触摸滑块事件\n .on(TouchHandler.start, rangeSelector, function (e) {\n if (!TouchHandler.isAllow(e)) {\n return;\n }\n\n TouchHandler.register(e);\n\n if (!this.disabled) {\n var $slider = $(this).parent();\n $slider.addClass('mdui-slider-focus');\n }\n })\n\n // 结束触摸滑块事件\n .on(TouchHandler.end, rangeSelector, function (e) {\n if (!TouchHandler.isAllow(e)) {\n return;\n }\n\n if (!this.disabled) {\n var $slider = $(this).parent();\n $slider.removeClass('mdui-slider-focus');\n }\n })\n\n .on(TouchHandler.unlock, rangeSelector, TouchHandler.register);\n\n /**\n * 重新初始化滑块(强制重新初始化)\n */\n mdui.updateSliders = function () {\n $(arguments.length ? arguments[0] : '.mdui-slider').each(function () {\n reInit($(this));\n });\n };\n\n $(function () {\n /**\n * 页面加载完后自动初始化(未初始化时,可以调用该方法初始化)\n */\n mdui.mutation('.mdui-slider', function () {\n reInit($(this));\n });\n });\n})();\n","/**\n * =============================================================================\n * ************ Spinner 圆形进度条 ************\n * =============================================================================\n */\n\n(function () {\n /**\n * layer 的 HTML 结构\n */\n var layerHTML = function () {\n var i = arguments.length ? arguments[0] : false;\n\n return '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
';\n };\n\n /**\n * 填充 HTML\n * @param spinner\n */\n var fillHTML = function (spinner) {\n var $spinner = $(spinner);\n var layer;\n if ($spinner.hasClass('mdui-spinner-colorful')) {\n layer = layerHTML('1') + layerHTML('2') + layerHTML('3') + layerHTML('4');\n } else {\n layer = layerHTML();\n }\n\n $spinner.html(layer);\n };\n\n /**\n * 页面加载完后自动填充 HTML 结构\n */\n $(function () {\n mdui.mutation('.mdui-spinner', function () {\n fillHTML(this);\n });\n });\n\n /**\n * 更新圆形进度条\n */\n mdui.updateSpinners = function () {\n $(arguments.length ? arguments[0] : '.mdui-spinner').each(function () {\n fillHTML(this);\n });\n };\n\n})();\n"," /* jshint ignore:start */\n mdui.JQ = $;\n return mdui;\n})));\n/* jshint ignore:end */\n","/**\n * =============================================================================\n * ************ Collapse 自定义属性 ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-collapse]', function () {\n var $target = $(this);\n\n var inst = $target.data('mdui.collapse');\n if (!inst) {\n var options = parseOptions($target.attr('mdui-collapse'));\n inst = new mdui.Collapse($target, options);\n $target.data('mdui.collapse', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Table 表格 ************\n * =============================================================================\n */\n\n(function () {\n\n /**\n * 生成 checkbox 的 HTML 结构\n * @param tag\n * @returns {string}\n */\n var checkboxHTML = function (tag) {\n return '<' + tag + ' class=\"mdui-table-cell-checkbox\">' +\n '' +\n '';\n };\n\n /**\n * Table 表格\n * @param selector\n * @constructor\n */\n function Table(selector) {\n var _this = this;\n\n _this.$table = $(selector).eq(0);\n\n if (!_this.$table.length) {\n return;\n }\n\n _this.init();\n }\n\n /**\n * 初始化\n */\n Table.prototype.init = function () {\n var _this = this;\n\n _this.$thRow = _this.$table.find('thead tr');\n _this.$tdRows = _this.$table.find('tbody tr');\n _this.$tdCheckboxs = $();\n _this.selectable = _this.$table.hasClass('mdui-table-selectable');\n _this.selectedRow = 0;\n\n _this._updateThCheckbox();\n _this._updateTdCheckbox();\n _this._updateNumericCol();\n };\n\n /**\n * 更新表头 checkbox 的状态\n */\n Table.prototype._updateThCheckboxStatus = function () {\n var _this = this;\n var checkbox = _this.$thCheckbox[0];\n\n checkbox.checked = _this.selectedRow === _this.$tdRows.length;\n checkbox.indeterminate = _this.selectedRow && _this.selectedRow !== _this.$tdRows.length;\n };\n\n /**\n * 更新表格行的 checkbox\n */\n Table.prototype._updateTdCheckbox = function () {\n var _this = this;\n\n _this.$tdRows.each(function () {\n var $tdRow = $(this);\n\n // 移除旧的 checkbox\n $tdRow.find('.mdui-table-cell-checkbox').remove();\n\n if (!_this.selectable) {\n return;\n }\n\n // 创建 DOM\n var $checkbox = $(checkboxHTML('td'))\n .prependTo($tdRow)\n .find('input[type=\"checkbox\"]');\n\n // 默认选中的行\n if ($tdRow.hasClass('mdui-table-row-selected')) {\n $checkbox[0].checked = true;\n _this.selectedRow++;\n }\n\n _this._updateThCheckboxStatus();\n\n // 绑定事件\n $checkbox.on('change', function () {\n if ($checkbox[0].checked) {\n $tdRow.addClass('mdui-table-row-selected');\n _this.selectedRow++;\n } else {\n $tdRow.removeClass('mdui-table-row-selected');\n _this.selectedRow--;\n }\n\n _this._updateThCheckboxStatus();\n });\n\n _this.$tdCheckboxs = _this.$tdCheckboxs.add($checkbox);\n });\n };\n\n /**\n * 更新表头的 checkbox\n */\n Table.prototype._updateThCheckbox = function () {\n var _this = this;\n\n // 移除旧的 checkbox\n _this.$thRow.find('.mdui-table-cell-checkbox').remove();\n\n if (!_this.selectable) {\n return;\n }\n\n _this.$thCheckbox = $(checkboxHTML('th'))\n .prependTo(_this.$thRow)\n .find('input[type=\"checkbox\"]')\n .on('change', function () {\n\n var isCheckedAll = _this.$thCheckbox[0].checked;\n _this.selectedRow = isCheckedAll ? _this.$tdRows.length : 0;\n\n _this.$tdCheckboxs.each(function (i, checkbox) {\n checkbox.checked = isCheckedAll;\n });\n\n _this.$tdRows.each(function (i, row) {\n $(row)[isCheckedAll ? 'addClass' : 'removeClass']('mdui-table-row-selected');\n });\n });\n };\n\n /**\n * 更新数值列\n */\n Table.prototype._updateNumericCol = function () {\n var _this = this;\n var $th;\n var $tdRow;\n\n _this.$thRow.find('th').each(function (i, th) {\n $th = $(th);\n\n _this.$tdRows.each(function () {\n $tdRow = $(this);\n var method = $th.hasClass('mdui-table-col-numeric') ? 'addClass' : 'removeClass';\n $tdRow.find('td').eq(i)[method]('mdui-table-col-numeric');\n });\n });\n };\n\n /**\n * 初始化表格\n */\n mdui.mutation('.mdui-table', function () {\n var $table = $(this);\n if (!$table.data('mdui.table')) {\n $table.data('mdui.table', new Table($table));\n }\n });\n\n /**\n * 更新表格\n */\n mdui.updateTables = function () {\n $(arguments.length ? arguments[0] : '.mdui-table').each(function () {\n var $table = $(this);\n var inst = $table.data('mdui.table');\n\n if (inst) {\n inst.init();\n } else {\n $table.data('mdui.table', new Table($table));\n }\n });\n };\n\n})();\n","/**\n * =============================================================================\n * ************ Fab 浮动操作按钮 ************\n * =============================================================================\n */\n\nmdui.Fab = (function () {\n\n /**\n * 默认参数\n * @type {{}}\n */\n var DEFAULT = {\n trigger: 'hover', // 触发方式 ['hover', 'click']\n };\n\n /**\n * 浮动操作按钮实例\n * @param selector 选择器或 HTML 字符串或 DOM 元素或 JQ 对象\n * @param opts\n * @constructor\n */\n function Fab(selector, opts) {\n var _this = this;\n\n _this.$fab = $(selector).eq(0);\n if (!_this.$fab.length) {\n return;\n }\n\n // 已通过 data 属性实例化过,不再重复实例化\n var oldInst = _this.$fab.data('mdui.fab');\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n _this.state = 'closed';\n\n _this.$btn = _this.$fab.find('.mdui-fab');\n _this.$dial = _this.$fab.find('.mdui-fab-dial');\n _this.$dialBtns = _this.$dial.find('.mdui-fab');\n\n if (_this.options.trigger === 'hover') {\n _this.$btn\n .on('touchstart mouseenter', function () {\n _this.open();\n });\n\n _this.$fab\n .on('mouseleave', function () {\n _this.close();\n });\n }\n\n if (_this.options.trigger === 'click') {\n _this.$btn\n .on(TouchHandler.start, function () {\n _this.open();\n });\n }\n\n // 触摸屏幕其他地方关闭快速拨号\n $document.on(TouchHandler.start, function (e) {\n if (!$(e.target).parents('.mdui-fab-wrapper').length) {\n _this.close();\n }\n });\n }\n\n /**\n * 打开菜单\n */\n Fab.prototype.open = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n // 为菜单中的按钮添加不同的 transition-delay\n _this.$dialBtns.each(function (index, btn) {\n btn.style['transition-delay'] = btn.style['-webkit-transition-delay'] =\n 15 * (_this.$dialBtns.length - index) + 'ms';\n });\n\n _this.$dial\n .css('height', 'auto')\n .addClass('mdui-fab-dial-show');\n\n // 如果按钮中存在 .mdui-fab-opened 的图标,则进行图标切换\n if (_this.$btn.find('.mdui-fab-opened').length) {\n _this.$btn.addClass('mdui-fab-opened');\n }\n\n _this.state = 'opening';\n componentEvent('open', 'fab', _this, _this.$fab);\n\n // 打开顺序为从下到上逐个打开,最上面的打开后才表示动画完成\n _this.$dialBtns.eq(0).transitionEnd(function () {\n if (_this.$btn.hasClass('mdui-fab-opened')) {\n _this.state = 'opened';\n componentEvent('opened', 'fab', _this, _this.$fab);\n }\n });\n };\n\n /**\n * 关闭菜单\n */\n Fab.prototype.close = function () {\n var _this = this;\n\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n // 为菜单中的按钮添加不同的 transition-delay\n _this.$dialBtns.each(function (index, btn) {\n btn.style['transition-delay'] = btn.style['-webkit-transition-delay'] = 15 * index + 'ms';\n });\n\n _this.$dial.removeClass('mdui-fab-dial-show');\n _this.$btn.removeClass('mdui-fab-opened');\n _this.state = 'closing';\n componentEvent('close', 'fab', _this, _this.$fab);\n\n // 从上往下依次关闭,最后一个关闭后才表示动画完成\n _this.$dialBtns.eq(-1).transitionEnd(function () {\n if (!_this.$btn.hasClass('mdui-fab-opened')) {\n _this.state = 'closed';\n componentEvent('closed', 'fab', _this, _this.$fab);\n _this.$dial.css('height', 0);\n }\n });\n };\n\n /**\n * 切换菜单的打开状态\n */\n Fab.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n /**\n * 获取当前菜单状态\n * @returns {'opening'|'opened'|'closing'|'closed'}\n */\n Fab.prototype.getState = function () {\n return this.state;\n };\n\n /**\n * 以动画的形式显示浮动操作按钮\n */\n Fab.prototype.show = function () {\n this.$fab.removeClass('mdui-fab-hide');\n };\n\n /**\n * 以动画的形式隐藏浮动操作按钮\n */\n Fab.prototype.hide = function () {\n this.$fab.addClass('mdui-fab-hide');\n };\n\n return Fab;\n})();\n","/**\n * =============================================================================\n * ************ Fab DATA API ************\n * =============================================================================\n */\n\n$(function () {\n // mouseenter 不冒泡,无法进行事件委托,这里用 mouseover 代替。\n // 不管是 click 、 mouseover 还是 touchstart ,都先初始化。\n\n $document.on('touchstart mousedown mouseover', '[mdui-fab]', function (e) {\n var $this = $(this);\n\n var inst = $this.data('mdui.fab');\n if (!inst) {\n var options = parseOptions($this.attr('mdui-fab'));\n inst = new mdui.Fab($this, options);\n $this.data('mdui.fab', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Select 下拉选择 ************\n * =============================================================================\n */\n\nmdui.Select = (function () {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n position: 'auto', // 下拉框位置,auto、bottom、top\n gutter: 16, // 菜单与窗口上下边框至少保持多少间距\n };\n\n /**\n * 调整菜单位置\n * @param _this Select 实例\n */\n var readjustMenu = function (_this) {\n // 窗口高度\n var windowHeight = $window.height();\n\n // 配置参数\n var gutter = _this.options.gutter;\n var position = _this.options.position;\n\n // mdui-select 高度\n var selectHeight = parseInt(_this.$select.height());\n\n // 菜单项高度\n var $menuItemFirst = _this.$items.eq(0);\n var menuItemHeight = parseInt($menuItemFirst.height());\n var menuItemMargin = parseInt($menuItemFirst.css('margin-top'));\n\n // 菜单高度\n var menuWidth = parseFloat(_this.$select.width() + 0.01); // 必须比真实宽度多一点,不然会出现省略号\n var menuHeight = menuItemHeight * _this.size + menuItemMargin * 2;\n\n // var menuRealHeight = menuItemHeight * _this.$items.length + menuItemMargin * 2;\n\n // 菜单是否出现了滚动条\n //var isMenuScrollable = menuRealHeight > menuHeight;\n\n // select 在窗口中的位置\n var selectTop = _this.$select[0].getBoundingClientRect().top;\n\n var transformOriginY;\n var menuMarginTop;\n\n // position 为 auto 时\n if (position === 'auto') {\n\n // 菜单高度不能超过窗口高度\n var heightTemp = windowHeight - gutter * 2;\n if (menuHeight > heightTemp) {\n menuHeight = heightTemp;\n }\n\n // 菜单的 margin-top\n menuMarginTop = -(\n menuItemMargin + _this.selectedIndex * menuItemHeight +\n (menuItemHeight - selectHeight) / 2\n );\n var menuMarginTopMax = -(\n menuItemMargin + (_this.size - 1) * menuItemHeight +\n (menuItemHeight - selectHeight) / 2\n );\n if (menuMarginTop < menuMarginTopMax) {\n menuMarginTop = menuMarginTopMax;\n }\n\n // 菜单不能超出窗口\n var menuTop = selectTop + menuMarginTop;\n\n if (menuTop < gutter) {\n // 不能超出窗口上方\n menuMarginTop = -(selectTop - gutter);\n } else if (menuTop + menuHeight + gutter > windowHeight) {\n // 不能超出窗口下方\n menuMarginTop = -(selectTop + menuHeight + gutter - windowHeight);\n }\n\n // transform 的 Y 轴坐标\n transformOriginY = (_this.selectedIndex * menuItemHeight + menuItemHeight / 2 + menuItemMargin) + 'px';\n } else if (position === 'bottom') {\n menuMarginTop = selectHeight;\n transformOriginY = '0px';\n } else if (position === 'top') {\n menuMarginTop = -menuHeight - 1;\n transformOriginY = '100%';\n }\n\n // 设置样式\n _this.$select.width(menuWidth);\n _this.$menu\n .width(menuWidth)\n .height(menuHeight)\n .css({\n 'margin-top': menuMarginTop + 'px',\n 'transform-origin':\n 'center ' + transformOriginY + ' 0',\n });\n };\n\n /**\n * 下拉选择\n * @param selector\n * @param opts\n * @constructor\n */\n function Select(selector, opts) {\n var _this = this;\n\n var $selectNative = _this.$selectNative = $(selector).eq(0);\n if (!$selectNative.length) {\n return;\n }\n\n // 已通过自定义属性实例化过,不再重复实例化\n var oldInst = $selectNative.data('mdui.select');\n if (oldInst) {\n return oldInst;\n }\n\n $selectNative.hide();\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n\n // 为当前 select 生成唯一 ID\n _this.uniqueID = $.guid();\n\n _this.state = 'closed';\n\n // 生成 select\n _this.handleUpdate();\n\n // 点击 select 外面区域关闭\n $document.on('click touchstart', function (e) {\n var $target = $(e.target);\n if (\n (_this.state === 'opening' || _this.state === 'opened') &&\n !$target.is(_this.$select) &&\n !$.contains(_this.$select[0], $target[0])\n ) {\n _this.close();\n }\n });\n }\n\n /**\n * 对原生 select 组件进行了修改后,需要调用该方法\n */\n Select.prototype.handleUpdate = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n }\n\n var $selectNative = _this.$selectNative;\n\n // 当前的值和文本\n _this.value = $selectNative.val();\n _this.text = '';\n\n // 生成 HTML\n // 菜单项\n _this.$items = $();\n $selectNative.find('option').each(function (index, option) {\n var data = {\n value: option.value,\n text: option.textContent,\n disabled: option.disabled,\n selected: _this.value === option.value,\n index: index,\n };\n\n if (_this.value === data.value) {\n _this.text = data.text;\n _this.selectedIndex = index;\n }\n\n _this.$items = _this.$items.add(\n $('
' + data.text + '
')\n .data(data)\n );\n });\n\n // selected\n _this.$selected = $('' + _this.text + '');\n\n // select\n _this.$select =\n $(\n '
'\n )\n .show()\n .append(_this.$selected);\n\n // menu\n _this.$menu =\n $('
')\n .appendTo(_this.$select)\n .append(_this.$items);\n\n $('#' + _this.uniqueID).remove();\n $selectNative.after(_this.$select);\n\n // 根据 select 的 size 属性设置高度,默认为 6\n _this.size = parseInt(_this.$selectNative.attr('size'));\n\n if (!_this.size || _this.size < 0) {\n _this.size = _this.$items.length;\n if (_this.size > 8) {\n _this.size = 8;\n }\n }\n\n // 点击选项时关闭下拉菜单\n _this.$items.on('click', function () {\n if (_this.state === 'closing') {\n return;\n }\n\n var $item = $(this);\n\n if ($item.data('disabled')) {\n return;\n }\n\n var itemData = $item.data();\n\n _this.$selected.text(itemData.text);\n $selectNative.val(itemData.value);\n _this.$items.removeAttr('selected');\n $item.attr('selected', '');\n _this.selectedIndex = itemData.index;\n _this.value = itemData.value;\n _this.text = itemData.text;\n $selectNative.trigger('change');\n\n _this.close();\n });\n\n // 点击 select 时打开下拉菜单\n _this.$select.on('click', function (e) {\n var $target = $(e.target);\n\n // 在菜单上点击时不打开\n if ($target.is('.mdui-select-menu') || $target.is('.mdui-select-menu-item')) {\n return;\n }\n\n _this.toggle();\n });\n };\n\n /**\n * 动画结束回调\n * @param inst\n */\n var transitionEnd = function (inst) {\n inst.$select.removeClass('mdui-select-closing');\n\n if (inst.state === 'opening') {\n inst.state = 'opened';\n componentEvent('opened', 'select', inst, inst.$selectNative);\n\n inst.$menu.css('overflow-y', 'auto');\n }\n\n if (inst.state === 'closing') {\n inst.state = 'closed';\n componentEvent('closed', 'select', inst, inst.$selectNative);\n\n // 恢复样式\n inst.$select.width('');\n inst.$menu.css({\n 'margin-top': '',\n height: '',\n width: '',\n });\n }\n };\n\n /**\n * 打开 Select\n */\n Select.prototype.open = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n _this.state = 'opening';\n componentEvent('open', 'select', _this, _this.$selectNative);\n\n readjustMenu(_this);\n\n _this.$select.addClass('mdui-select-open');\n\n _this.$menu.transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 关闭 Select\n */\n Select.prototype.close = function () {\n var _this = this;\n\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n _this.state = 'closing';\n componentEvent('close', 'select', _this, _this.$selectNative);\n\n _this.$menu.css('overflow-y', '');\n\n _this.$select\n .removeClass('mdui-select-open')\n .addClass('mdui-select-closing');\n _this.$menu.transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 切换 Select 显示状态\n */\n Select.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n return Select;\n})();\n","/**\n * =============================================================================\n * ************ Select 下拉选择 ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-select]', function () {\n var $this = $(this);\n var inst = $this.data('mdui.select');\n if (!inst) {\n inst = new mdui.Select($this, parseOptions($this.attr('mdui-select')));\n $this.data('mdui.select', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Appbar ************\n * =============================================================================\n * 滚动时自动隐藏应用栏\n * mdui-appbar-scroll-hide\n * mdui-appbar-scroll-toolbar-hide\n */\n\n$(function () {\n // 滚动时隐藏应用栏\n mdui.mutation('.mdui-appbar-scroll-hide', function () {\n var $this = $(this);\n $this.data('mdui.headroom', new mdui.Headroom($this));\n });\n\n // 滚动时只隐藏应用栏中的工具栏\n mdui.mutation('.mdui-appbar-scroll-toolbar-hide', function () {\n var $this = $(this);\n var inst = new mdui.Headroom($this, {\n pinnedClass: 'mdui-headroom-pinned-toolbar',\n unpinnedClass: 'mdui-headroom-unpinned-toolbar',\n });\n $this.data('mdui.headroom', inst);\n });\n});\n","/**\n * =============================================================================\n * ************ Tab ************\n * =============================================================================\n */\n\nmdui.Tab = (function () {\n\n var DEFAULT = {\n trigger: 'click', // 触发方式 click: 鼠标点击切换 hover: 鼠标悬浮切换\n //animation: false, // 切换时是否显示动画\n loop: false, // 为true时,在最后一个选项卡时调用 next() 方法会回到第一个选项卡\n };\n\n // 元素是否已禁用\n var isDisabled = function ($ele) {\n return $ele[0].disabled || $ele.attr('disabled') !== null;\n };\n\n /**\n * 选项卡\n * @param selector\n * @param opts\n * @returns {*}\n * @constructor\n */\n function Tab(selector, opts) {\n var _this = this;\n\n _this.$tab = $(selector).eq(0);\n if (!_this.$tab.length) {\n return;\n }\n\n // 已通过自定义属性实例化过,不再重复实例化\n var oldInst = _this.$tab.data('mdui.tab');\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n _this.$tabs = _this.$tab.children('a');\n _this.$indicator = $('
').appendTo(_this.$tab);\n _this.activeIndex = false; // 为 false 时表示没有激活的选项卡,或不存在选项卡\n\n // 根据 url hash 获取默认激活的选项卡\n var hash = location.hash;\n if (hash) {\n _this.$tabs.each(function (i, tab) {\n if ($(tab).attr('href') === hash) {\n _this.activeIndex = i;\n return false;\n }\n });\n }\n\n // 含 mdui-tab-active 的元素默认激活\n if (_this.activeIndex === false) {\n _this.$tabs.each(function (i, tab) {\n if ($(tab).hasClass('mdui-tab-active')) {\n _this.activeIndex = i;\n return false;\n }\n });\n }\n\n // 存在选项卡时,默认激活第一个选项卡\n if (_this.$tabs.length && _this.activeIndex === false) {\n _this.activeIndex = 0;\n }\n\n // 设置激活状态选项卡\n _this._setActive();\n\n // 监听窗口大小变化事件,调整指示器位置\n $window.on('resize', $.throttle(function () {\n _this._setIndicatorPosition();\n }, 100));\n\n // 监听点击选项卡事件\n _this.$tabs.each(function (i, tab) {\n _this._bindTabEvent(tab);\n });\n }\n\n /**\n * 绑定在 Tab 上点击或悬浮的事件\n * @private\n */\n Tab.prototype._bindTabEvent = function (tab) {\n var _this = this;\n var $tab = $(tab);\n\n // 点击或鼠标移入触发的事件\n var clickEvent = function (e) {\n // 禁用状态的选项无法选中\n if (isDisabled($tab)) {\n e.preventDefault();\n return;\n }\n\n _this.activeIndex = _this.$tabs.index(tab);\n _this._setActive();\n };\n\n // 无论 trigger 是 click 还是 hover,都会响应 click 事件\n $tab.on('click', clickEvent);\n\n // trigger 为 hover 时,额外响应 mouseenter 事件\n if (_this.options.trigger === 'hover') {\n $tab.on('mouseenter', clickEvent);\n }\n\n $tab.on('click', function (e) {\n // 阻止链接的默认点击动作\n if ($tab.attr('href').indexOf('#') === 0) {\n e.preventDefault();\n }\n });\n };\n\n /**\n * 设置激活状态的选项卡\n * @private\n */\n Tab.prototype._setActive = function () {\n var _this = this;\n\n _this.$tabs.each(function (i, tab) {\n var $tab = $(tab);\n var targetId = $tab.attr('href');\n\n // 设置选项卡激活状态\n if (i === _this.activeIndex && !isDisabled($tab)) {\n if (!$tab.hasClass('mdui-tab-active')) {\n componentEvent('change', 'tab', _this, _this.$tab, {\n index: _this.activeIndex,\n id: targetId.substr(1),\n });\n componentEvent('show', 'tab', _this, $tab);\n\n $tab.addClass('mdui-tab-active');\n }\n\n $(targetId).show();\n _this._setIndicatorPosition();\n } else {\n $tab.removeClass('mdui-tab-active');\n $(targetId).hide();\n }\n });\n };\n\n /**\n * 设置选项卡指示器的位置\n */\n Tab.prototype._setIndicatorPosition = function () {\n var _this = this;\n var $activeTab;\n var activeTabOffset;\n\n // 选项卡数量为 0 时,不显示指示器\n if (_this.activeIndex === false) {\n _this.$indicator.css({\n left: 0,\n width: 0,\n });\n\n return;\n }\n\n $activeTab = _this.$tabs.eq(_this.activeIndex);\n if (isDisabled($activeTab)) {\n return;\n }\n\n activeTabOffset = $activeTab.offset();\n _this.$indicator.css({\n left: activeTabOffset.left + _this.$tab[0].scrollLeft -\n _this.$tab[0].getBoundingClientRect().left + 'px',\n width: $activeTab.width() + 'px',\n });\n };\n\n /**\n * 切换到下一个选项卡\n */\n Tab.prototype.next = function () {\n var _this = this;\n\n if (_this.activeIndex === false) {\n return;\n }\n\n if (_this.$tabs.length > _this.activeIndex + 1) {\n _this.activeIndex++;\n } else if (_this.options.loop) {\n _this.activeIndex = 0;\n }\n\n _this._setActive();\n };\n\n /**\n * 切换到上一个选项卡\n */\n Tab.prototype.prev = function () {\n var _this = this;\n\n if (_this.activeIndex === false) {\n return;\n }\n\n if (_this.activeIndex > 0) {\n _this.activeIndex--;\n } else if (_this.options.loop) {\n _this.activeIndex = _this.$tabs.length - 1;\n }\n\n _this._setActive();\n };\n\n /**\n * 显示指定序号或指定id的选项卡\n * @param index 从0开始的序号,或以#开头的id\n */\n Tab.prototype.show = function (index) {\n var _this = this;\n\n if (_this.activeIndex === false) {\n return;\n }\n\n if (parseInt(index) === index) {\n _this.activeIndex = index;\n } else {\n _this.$tabs.each(function (i, tab) {\n if (tab.id === index) {\n _this.activeIndex = i;\n return false;\n }\n });\n }\n\n _this._setActive();\n };\n\n /**\n * 在父元素的宽度变化时,需要调用该方法重新调整指示器位置\n * 在添加或删除选项卡时,需要调用该方法\n */\n Tab.prototype.handleUpdate = function () {\n var _this = this;\n\n var $oldTabs = _this.$tabs; // 旧的 tabs JQ对象\n var $newTabs = _this.$tab.children('a'); // 新的 tabs JQ对象\n var oldTabsEle = $oldTabs.get(); // 旧 tabs 的元素数组\n var newTabsEle = $newTabs.get(); // 新的 tabs 元素数组\n\n if (!$newTabs.length) {\n _this.activeIndex = false;\n _this.$tabs = $newTabs;\n _this._setIndicatorPosition();\n\n return;\n }\n\n // 重新遍历选项卡,找出新增的选项卡\n $newTabs.each(function (i, tab) {\n // 有新增的选项卡\n if (oldTabsEle.indexOf(tab) < 0) {\n _this._bindTabEvent(tab);\n\n if (_this.activeIndex === false) {\n _this.activeIndex = 0;\n } else if (i <= _this.activeIndex) {\n _this.activeIndex++;\n }\n }\n });\n\n // 找出被移除的选项卡\n $oldTabs.each(function (i, tab) {\n // 有被移除的选项卡\n if (newTabsEle.indexOf(tab) < 0) {\n\n if (i < _this.activeIndex) {\n _this.activeIndex--;\n } else if (i === _this.activeIndex) {\n _this.activeIndex = 0;\n }\n }\n });\n\n _this.$tabs = $newTabs;\n\n _this._setActive();\n };\n\n return Tab;\n})();\n","/**\n * =============================================================================\n * ************ Tab 自定义属性 API ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-tab]', function () {\n var $this = $(this);\n var inst = $this.data('mdui.tab');\n if (!inst) {\n inst = new mdui.Tab($this, parseOptions($this.attr('mdui-tab')));\n $this.data('mdui.tab', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Drawer 抽屉栏 ************\n * =============================================================================\n *\n * 在桌面设备上默认显示抽屉栏,不显示遮罩层\n * 在手机和平板设备上默认不显示抽屉栏,始终显示遮罩层,且覆盖导航栏\n */\n\nmdui.Drawer = (function () {\n\n /**\n * 默认参数\n * @type {{}}\n */\n var DEFAULT = {\n // 在桌面设备上是否显示遮罩层。手机和平板不受这个参数影响,始终会显示遮罩层\n overlay: false,\n\n // 是否开启手势\n swipe: false,\n };\n\n var isDesktop = function () {\n return $window.width() >= 1024;\n };\n\n /**\n * 抽屉栏实例\n * @param selector 选择器或 HTML 字符串或 DOM 元素\n * @param opts\n * @constructor\n */\n function Drawer(selector, opts) {\n var _this = this;\n\n _this.$drawer = $(selector).eq(0);\n if (!_this.$drawer.length) {\n return;\n }\n\n var oldInst = _this.$drawer.data('mdui.drawer');\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n\n _this.overlay = false; // 是否显示着遮罩层\n _this.position = _this.$drawer.hasClass('mdui-drawer-right') ? 'right' : 'left';\n\n if (_this.$drawer.hasClass('mdui-drawer-close')) {\n _this.state = 'closed';\n } else if (_this.$drawer.hasClass('mdui-drawer-open')) {\n _this.state = 'opened';\n } else if (isDesktop()) {\n _this.state = 'opened';\n } else {\n _this.state = 'closed';\n }\n\n // 浏览器窗口大小调整时\n $window.on('resize', $.throttle(function () {\n // 由手机平板切换到桌面时\n if (isDesktop()) {\n // 如果显示着遮罩,则隐藏遮罩\n if (_this.overlay && !_this.options.overlay) {\n $.hideOverlay();\n _this.overlay = false;\n $.unlockScreen();\n }\n\n // 没有强制关闭,则状态为打开状态\n if (!_this.$drawer.hasClass('mdui-drawer-close')) {\n _this.state = 'opened';\n }\n }\n\n // 由桌面切换到手机平板时。如果抽屉栏是打开着的且没有遮罩层,则关闭抽屉栏\n else {\n if (!_this.overlay && _this.state === 'opened') {\n // 抽屉栏处于强制打开状态,添加遮罩\n if (_this.$drawer.hasClass('mdui-drawer-open')) {\n $.showOverlay();\n _this.overlay = true;\n $.lockScreen();\n\n $('.mdui-overlay').one('click', function () {\n _this.close();\n });\n } else {\n _this.state = 'closed';\n }\n }\n }\n }, 100));\n\n // 绑定关闭按钮事件\n _this.$drawer.find('[mdui-drawer-close]').each(function () {\n $(this).on('click', function () {\n _this.close();\n });\n });\n\n swipeSupport(_this);\n }\n\n /**\n * 滑动手势支持\n * @param _this\n */\n var swipeSupport = function (_this) {\n // 抽屉栏滑动手势控制\n var openNavEventHandler;\n var touchStartX;\n var touchStartY;\n var swipeStartX;\n var swiping = false;\n var maybeSwiping = false;\n var $body = $('body');\n\n // 手势触发的范围\n var swipeAreaWidth = 24;\n\n function enableSwipeHandling() {\n if (!openNavEventHandler) {\n $body.on('touchstart', onBodyTouchStart);\n openNavEventHandler = onBodyTouchStart;\n }\n }\n\n function setPosition(translateX, closeTransform) {\n var rtlTranslateMultiplier = _this.position === 'right' ? -1 : 1;\n var transformCSS = 'translate(' + (-1 * rtlTranslateMultiplier * translateX) + 'px, 0) !important;';\n _this.$drawer.css(\n 'cssText',\n 'transform:' + transformCSS + (closeTransform ? 'transition: initial !important;' : '')\n );\n }\n\n function cleanPosition() {\n _this.$drawer.css({\n transform: '',\n transition: '',\n });\n }\n\n function getMaxTranslateX() {\n return _this.$drawer.width() + 10;\n }\n\n function getTranslateX(currentX) {\n return Math.min(\n Math.max(\n swiping === 'closing' ? (swipeStartX - currentX) : (getMaxTranslateX() + swipeStartX - currentX),\n 0\n ),\n getMaxTranslateX()\n );\n }\n\n function onBodyTouchStart(event) {\n touchStartX = event.touches[0].pageX;\n if (_this.position === 'right') {\n touchStartX = $body.width() - touchStartX;\n }\n\n touchStartY = event.touches[0].pageY;\n\n if (_this.state !== 'opened') {\n if (touchStartX > swipeAreaWidth || openNavEventHandler !== onBodyTouchStart) {\n return;\n }\n }\n\n maybeSwiping = true;\n\n $body.on({\n touchmove: onBodyTouchMove,\n touchend: onBodyTouchEnd,\n touchcancel: onBodyTouchMove,\n });\n }\n\n function onBodyTouchMove(event) {\n var touchX = event.touches[0].pageX;\n if (_this.position === 'right') {\n touchX = $body.width() - touchX;\n }\n\n var touchY = event.touches[0].pageY;\n\n if (swiping) {\n setPosition(getTranslateX(touchX), true);\n } else if (maybeSwiping) {\n var dXAbs = Math.abs(touchX - touchStartX);\n var dYAbs = Math.abs(touchY - touchStartY);\n var threshold = 8;\n\n if (dXAbs > threshold && dYAbs <= threshold) {\n swipeStartX = touchX;\n swiping = _this.state === 'opened' ? 'closing' : 'opening';\n $.lockScreen();\n setPosition(getTranslateX(touchX), true);\n } else if (dXAbs <= threshold && dYAbs > threshold) {\n onBodyTouchEnd();\n }\n }\n }\n\n function onBodyTouchEnd(event) {\n if (swiping) {\n var touchX = event.changedTouches[0].pageX;\n if (_this.position === 'right') {\n touchX = $body.width() - touchX;\n }\n\n var translateRatio = getTranslateX(touchX) / getMaxTranslateX();\n\n maybeSwiping = false;\n var swipingState = swiping;\n swiping = null;\n\n if (swipingState === 'opening') {\n if (translateRatio < 0.92) {\n cleanPosition();\n _this.open();\n } else {\n cleanPosition();\n }\n } else {\n if (translateRatio > 0.08) {\n cleanPosition();\n _this.close();\n } else {\n cleanPosition();\n }\n }\n\n $.unlockScreen();\n } else {\n maybeSwiping = false;\n }\n\n $body.off({\n touchmove: onBodyTouchMove,\n touchend: onBodyTouchEnd,\n touchcancel: onBodyTouchMove,\n });\n }\n\n if (_this.options.swipe) {\n enableSwipeHandling();\n }\n };\n\n /**\n * 动画结束回调\n * @param inst\n */\n var transitionEnd = function (inst) {\n if (inst.$drawer.hasClass('mdui-drawer-open')) {\n inst.state = 'opened';\n componentEvent('opened', 'drawer', inst, inst.$drawer);\n } else {\n inst.state = 'closed';\n componentEvent('closed', 'drawer', inst, inst.$drawer);\n }\n };\n\n /**\n * 打开抽屉栏\n */\n Drawer.prototype.open = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n _this.state = 'opening';\n componentEvent('open', 'drawer', _this, _this.$drawer);\n\n if (!_this.options.overlay) {\n $('body').addClass('mdui-drawer-body-' + _this.position);\n }\n\n _this.$drawer\n .removeClass('mdui-drawer-close')\n .addClass('mdui-drawer-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n\n if (!isDesktop() || _this.options.overlay) {\n _this.overlay = true;\n $.showOverlay().one('click', function () {\n _this.close();\n });\n\n $.lockScreen();\n }\n };\n\n /**\n * 关闭抽屉栏\n */\n Drawer.prototype.close = function () {\n var _this = this;\n\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n _this.state = 'closing';\n componentEvent('close', 'drawer', _this, _this.$drawer);\n\n if (!_this.options.overlay) {\n $('body').removeClass('mdui-drawer-body-' + _this.position);\n }\n\n _this.$drawer\n .addClass('mdui-drawer-close')\n .removeClass('mdui-drawer-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n\n if (_this.overlay) {\n $.hideOverlay();\n _this.overlay = false;\n $.unlockScreen();\n }\n };\n\n /**\n * 切换抽屉栏打开/关闭状态\n */\n Drawer.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n /**\n * 获取抽屉栏状态\n * @returns {'opening'|'opened'|'closing'|'closed'}\n */\n Drawer.prototype.getState = function () {\n return this.state;\n };\n\n return Drawer;\n\n})();\n","/**\n * =============================================================================\n * ************ Drawer 自定义属性 API ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-drawer]', function () {\n var $this = $(this);\n var options = parseOptions($this.attr('mdui-drawer'));\n var selector = options.target;\n delete options.target;\n\n var $drawer = $(selector).eq(0);\n\n var inst = $drawer.data('mdui.drawer');\n if (!inst) {\n inst = new mdui.Drawer($drawer, options);\n $drawer.data('mdui.drawer', inst);\n }\n\n $this.on('click', function () {\n inst.toggle();\n });\n\n });\n});\n","/**\n * =============================================================================\n * ************ Dialog 对话框 ************\n * =============================================================================\n */\n\nmdui.Dialog = (function () {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n history: true, // 监听 hashchange 事件\n overlay: true, // 打开对话框时是否显示遮罩\n modal: false, // 是否模态化对话框,为 false 时点击对话框外面区域关闭对话框,为 true 时不关闭\n closeOnEsc: true, // 按下 esc 关闭对话框\n closeOnCancel: true, // 按下取消按钮时关闭对话框\n closeOnConfirm: true, // 按下确认按钮时关闭对话框\n destroyOnClosed: false, // 关闭后销毁\n };\n\n /**\n * 遮罩层元素\n */\n var $overlay;\n\n /**\n * 窗口是否已锁定\n */\n var isLockScreen;\n\n /**\n * 当前对话框实例\n */\n var currentInst;\n\n /**\n * 队列名\n */\n var queueName = '__md_dialog';\n\n /**\n * 窗口宽度变化,或对话框内容变化时,调整对话框位置和对话框内的滚动条\n */\n var readjust = function () {\n if (!currentInst) {\n return;\n }\n\n var $dialog = currentInst.$dialog;\n\n var $dialogTitle = $dialog.children('.mdui-dialog-title');\n var $dialogContent = $dialog.children('.mdui-dialog-content');\n var $dialogActions = $dialog.children('.mdui-dialog-actions');\n\n // 调整 dialog 的 top 和 height 值\n $dialog.height('');\n $dialogContent.height('');\n\n var dialogHeight = $dialog.height();\n $dialog.css({\n top: (($window.height() - dialogHeight) / 2) + 'px',\n height: dialogHeight + 'px',\n });\n\n // 调整 mdui-dialog-content 的高度\n $dialogContent.height(dialogHeight - ($dialogTitle.height() || 0) - ($dialogActions.height() || 0));\n };\n\n /**\n * hashchange 事件触发时关闭对话框\n */\n var hashchangeEvent = function () {\n if (location.hash.substring(1).indexOf('mdui-dialog') < 0) {\n currentInst.close(true);\n }\n };\n\n /**\n * 点击遮罩层关闭对话框\n * @param e\n */\n var overlayClick = function (e) {\n if ($(e.target).hasClass('mdui-overlay') && currentInst) {\n currentInst.close();\n }\n };\n\n /**\n * 对话框实例\n * @param selector 选择器或 HTML 字符串或 DOM 元素\n * @param opts\n * @constructor\n */\n function Dialog(selector, opts) {\n var _this = this;\n\n // 对话框元素\n _this.$dialog = $(selector).eq(0);\n if (!_this.$dialog.length) {\n return;\n }\n\n // 已通过 data 属性实例化过,不再重复实例化\n var oldInst = _this.$dialog.data('mdui.dialog');\n if (oldInst) {\n return oldInst;\n }\n\n // 如果对话框元素没有在当前文档中,则需要添加\n if (!$.contains(document.body, _this.$dialog[0])) {\n _this.append = true;\n $('body').append(_this.$dialog);\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n _this.state = 'closed';\n\n // 绑定取消按钮事件\n _this.$dialog.find('[mdui-dialog-cancel]').each(function () {\n $(this).on('click', function () {\n componentEvent('cancel', 'dialog', _this, _this.$dialog);\n if (_this.options.closeOnCancel) {\n _this.close();\n }\n });\n });\n\n // 绑定确认按钮事件\n _this.$dialog.find('[mdui-dialog-confirm]').each(function () {\n $(this).on('click', function () {\n componentEvent('confirm', 'dialog', _this, _this.$dialog);\n if (_this.options.closeOnConfirm) {\n _this.close();\n }\n });\n });\n\n // 绑定关闭按钮事件\n _this.$dialog.find('[mdui-dialog-close]').each(function () {\n $(this).on('click', function () {\n _this.close();\n });\n });\n }\n\n /**\n * 动画结束回调\n * @param inst\n */\n var transitionEnd = function (inst) {\n if (inst.$dialog.hasClass('mdui-dialog-open')) {\n inst.state = 'opened';\n componentEvent('opened', 'dialog', inst, inst.$dialog);\n } else {\n inst.state = 'closed';\n componentEvent('closed', 'dialog', inst, inst.$dialog);\n\n inst.$dialog.hide();\n\n // 所有对话框都关闭,且当前没有打开的对话框时,解锁屏幕\n if (queue.queue(queueName).length === 0 && !currentInst && isLockScreen) {\n $.unlockScreen();\n isLockScreen = false;\n }\n\n $window.off('resize', $.throttle(function () {\n readjust();\n }, 100));\n\n if (inst.options.destroyOnClosed) {\n inst.destroy();\n }\n }\n };\n\n /**\n * 打开指定对话框\n * @private\n */\n Dialog.prototype._doOpen = function () {\n var _this = this;\n\n currentInst = _this;\n\n if (!isLockScreen) {\n $.lockScreen();\n isLockScreen = true;\n }\n\n _this.$dialog.show();\n\n readjust();\n $window.on('resize', $.throttle(function () {\n readjust();\n }, 100));\n\n // 打开消息框\n _this.state = 'opening';\n componentEvent('open', 'dialog', _this, _this.$dialog);\n\n _this.$dialog\n .addClass('mdui-dialog-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n\n // 不存在遮罩层元素时,添加遮罩层\n if (!$overlay) {\n $overlay = $.showOverlay(5100);\n }\n\n $overlay\n\n // 点击遮罩层时是否关闭对话框\n [_this.options.modal ? 'off' : 'on']('click', overlayClick)\n\n // 是否显示遮罩层,不显示时,把遮罩层背景透明\n .css('opacity', _this.options.overlay ? '' : 0);\n\n if (_this.options.history) {\n // 如果 hash 中原来就有 mdui-dialog,先删除,避免后退历史纪录后仍然有 mdui-dialog 导致无法关闭\n // 包括 mdui-dialog 和 &mdui-dialog 和 ?mdui-dialog\n var hash = location.hash.substring(1);\n if (hash.indexOf('mdui-dialog') > -1) {\n hash = hash.replace(/[&?]?mdui-dialog/g, '');\n }\n\n // 后退按钮关闭对话框\n if (hash) {\n location.hash = hash + (hash.indexOf('?') > -1 ? '&' : '?') + 'mdui-dialog';\n } else {\n location.hash = 'mdui-dialog';\n }\n\n $window.on('hashchange', hashchangeEvent);\n }\n };\n\n /**\n * 打开对话框\n */\n Dialog.prototype.open = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n // 如果当前有正在打开或已经打开的对话框,或队列不为空,则先加入队列,等旧对话框开始关闭时再打开\n if (\n (currentInst && (currentInst.state === 'opening' || currentInst.state === 'opened')) ||\n queue.queue(queueName).length\n ) {\n queue.queue(queueName, function () {\n _this._doOpen();\n });\n\n return;\n }\n\n _this._doOpen();\n };\n\n /**\n * 关闭对话框\n */\n Dialog.prototype.close = function () {\n var _this = this;\n var _arguments = arguments;\n\n // setTimeout 的作用是:\n // 当同时关闭一个对话框,并打开另一个对话框时,使打开对话框的操作先执行,以使需要打开的对话框先加入队列\n setTimeout(function () {\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n currentInst = null;\n\n _this.state = 'closing';\n componentEvent('close', 'dialog', _this, _this.$dialog);\n\n // 所有对话框都关闭,且当前没有打开的对话框时,隐藏遮罩\n if (queue.queue(queueName).length === 0 && $overlay) {\n $.hideOverlay();\n $overlay = null;\n }\n\n _this.$dialog\n .removeClass('mdui-dialog-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n\n if (_this.options.history && queue.queue(queueName).length === 0) {\n // 是否需要后退历史纪录,默认为 false。\n // 为 false 时是通过 js 关闭,需要后退一个历史记录\n // 为 true 时是通过后退按钮关闭,不需要后退历史记录\n if (!_arguments[0]) {\n window.history.back();\n }\n\n $window.off('hashchange', hashchangeEvent);\n }\n\n // 关闭旧对话框,打开新对话框。\n // 加一点延迟,仅仅为了视觉效果更好。不加延时也不影响功能\n setTimeout(function () {\n queue.dequeue(queueName);\n }, 100);\n }, 0);\n };\n\n /**\n * 切换对话框打开/关闭状态\n */\n Dialog.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n /**\n * 获取对话框状态\n * @returns {'opening'|'opened'|'closing'|'closed'}\n */\n Dialog.prototype.getState = function () {\n return this.state;\n };\n\n /**\n * 销毁对话框\n */\n Dialog.prototype.destroy = function () {\n var _this = this;\n\n if (_this.append) {\n _this.$dialog.remove();\n }\n\n _this.$dialog.removeData('mdui.dialog');\n\n if (queue.queue(queueName).length === 0 && !currentInst) {\n if ($overlay) {\n $.hideOverlay();\n $overlay = null;\n }\n\n if (isLockScreen) {\n $.unlockScreen();\n isLockScreen = false;\n }\n }\n };\n\n /**\n * 对话框内容变化时,需要调用该方法来调整对话框位置和滚动条高度\n */\n Dialog.prototype.handleUpdate = function () {\n readjust();\n };\n\n // esc 按下时关闭对话框\n $document.on('keydown', function (e) {\n if (\n currentInst &&\n currentInst.options.closeOnEsc &&\n currentInst.state === 'opened' &&\n e.keyCode === 27\n ) {\n currentInst.close();\n }\n });\n\n return Dialog;\n\n})();\n","/**\n * =============================================================================\n * ************ Dialog DATA API ************\n * =============================================================================\n */\n\n$(function () {\n $document.on('click', '[mdui-dialog]', function () {\n var $this = $(this);\n var options = parseOptions($this.attr('mdui-dialog'));\n var selector = options.target;\n delete options.target;\n\n var $dialog = $(selector).eq(0);\n\n var inst = $dialog.data('mdui.dialog');\n if (!inst) {\n inst = new mdui.Dialog($dialog, options);\n $dialog.data('mdui.dialog', inst);\n }\n\n inst.open();\n });\n});\n","/**\n * =============================================================================\n * ************ mdui.dialog(options) ************\n * =============================================================================\n */\n\nmdui.dialog = function (options) {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n title: '', // 标题\n content: '', // 文本\n buttons: [], // 按钮\n stackedButtons: false, // 垂直排列按钮\n cssClass: '', // 在 Dialog 上添加的 CSS 类\n history: true, // 监听 hashchange 事件\n overlay: true, // 是否显示遮罩\n modal: false, // 是否模态化对话框\n closeOnEsc: true, // 按下 esc 时关闭对话框\n destroyOnClosed: true, // 关闭后销毁\n onOpen: function () { // 打开动画开始时的回调\n },\n\n onOpened: function () { // 打开动画结束后的回调\n },\n\n onClose: function () { // 关闭动画开始时的回调\n },\n\n onClosed: function () { // 关闭动画结束时的回调\n },\n };\n\n /**\n * 按钮的默认参数\n */\n var DEFAULT_BUTTON = {\n text: '', // 按钮文本\n bold: false, // 按钮文本是否加粗\n close: true, // 点击按钮后关闭对话框\n onClick: function (inst) { // 点击按钮的回调\n },\n };\n\n // 合并参数\n options = $.extend({}, DEFAULT, (options || {}));\n $.each(options.buttons, function (i, button) {\n options.buttons[i] = $.extend({}, DEFAULT_BUTTON, button);\n });\n\n // 按钮的 HTML\n var buttonsHTML = '';\n if (options.buttons.length) {\n buttonsHTML =\n '
';\n $.each(options.buttons, function (i, button) {\n buttonsHTML +=\n '' +\n button.text +\n '';\n });\n\n buttonsHTML += '
';\n }\n\n // Dialog 的 HTML\n var HTML =\n '
' +\n (options.title ? '
' + options.title + '
' : '') +\n (options.content ? '
' + options.content + '
' : '') +\n buttonsHTML +\n '
';\n\n // 实例化 Dialog\n var inst = new mdui.Dialog(HTML, {\n history: options.history,\n overlay: options.overlay,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc,\n destroyOnClosed: options.destroyOnClosed,\n });\n\n // 绑定按钮事件\n if (options.buttons.length) {\n inst.$dialog.find('.mdui-dialog-actions .mdui-btn').each(function (i, button) {\n $(button).on('click', function () {\n if (typeof options.buttons[i].onClick === 'function') {\n options.buttons[i].onClick(inst);\n }\n\n if (options.buttons[i].close) {\n inst.close();\n }\n });\n });\n }\n\n // 绑定打开关闭事件\n if (typeof options.onOpen === 'function') {\n inst.$dialog\n .on('open.mdui.dialog', function () {\n options.onOpen(inst);\n })\n .on('opened.mdui.dialog', function () {\n options.onOpened(inst);\n })\n .on('close.mdui.dialog', function () {\n options.onClose(inst);\n })\n .on('closed.mdui.dialog', function () {\n options.onClosed(inst);\n });\n }\n\n inst.open();\n\n return inst;\n};\n","/**\n * =============================================================================\n * ************ mdui.alert(text, title, onConfirm, options) ************\n * ************ mdui.alert(text, onConfirm, options) ************\n * =============================================================================\n */\n\nmdui.alert = function (text, title, onConfirm, options) {\n\n // title 参数可选\n if (typeof title === 'function') {\n title = '';\n onConfirm = arguments[1];\n options = arguments[2];\n }\n\n if (onConfirm === undefined) {\n onConfirm = function () {};\n }\n\n if (options === undefined) {\n options = {};\n }\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n confirmText: 'ok', // 按钮上的文本\n history: true, // 监听 hashchange 事件\n modal: false, // 是否模态化对话框,为 false 时点击对话框外面区域关闭对话框,为 true 时不关闭\n closeOnEsc: true, // 按下 esc 关闭对话框\n };\n\n options = $.extend({}, DEFAULT, options);\n\n return mdui.dialog({\n title: title,\n content: text,\n buttons: [\n {\n text: options.confirmText,\n bold: false,\n close: true,\n onClick: onConfirm,\n },\n ],\n cssClass: 'mdui-dialog-alert',\n history: options.history,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc,\n });\n};\n","/**\n * =============================================================================\n * ************ mdui.confirm(text, title, onConfirm, onCancel, options) ************\n * ************ mdui.confirm(text, onConfirm, onCancel, options) ************\n * =============================================================================\n */\n\nmdui.confirm = function (text, title, onConfirm, onCancel, options) {\n\n // title 参数可选\n if (typeof title === 'function') {\n title = '';\n onConfirm = arguments[1];\n onCancel = arguments[2];\n options = arguments[3];\n }\n\n if (onConfirm === undefined) {\n onConfirm = function () {};\n }\n\n if (onCancel === undefined) {\n onCancel = function () {};\n }\n\n if (options === undefined) {\n options = {};\n }\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n confirmText: 'ok', // 确认按钮的文本\n cancelText: 'cancel', // 取消按钮的文本\n history: true, // 监听 hashchange 事件\n modal: false, // 是否模态化对话框,为 false 时点击对话框外面区域关闭对话框,为 true 时不关闭\n closeOnEsc: true, // 按下 esc 关闭对话框\n };\n\n options = $.extend({}, DEFAULT, options);\n\n return mdui.dialog({\n title: title,\n content: text,\n buttons: [\n {\n text: options.cancelText,\n bold: false,\n close: true,\n onClick: onCancel,\n },\n {\n text: options.confirmText,\n bold: false,\n close: true,\n onClick: onConfirm,\n },\n ],\n cssClass: 'mdui-dialog-confirm',\n history: options.history,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc,\n });\n};\n","/**\n * =============================================================================\n * ************ mdui.prompt(label, title, onConfirm, onCancel, options) ************\n * ************ mdui.prompt(label, onConfirm, onCancel, options) ************\n * =============================================================================\n */\n\nmdui.prompt = function (label, title, onConfirm, onCancel, options) {\n\n // title 参数可选\n if (typeof title === 'function') {\n title = '';\n onConfirm = arguments[1];\n onCancel = arguments[2];\n options = arguments[3];\n }\n\n if (onConfirm === undefined) {\n onConfirm = function () {};\n }\n\n if (onCancel === undefined) {\n onCancel = function () {};\n }\n\n if (options === undefined) {\n options = {};\n }\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n confirmText: 'ok', // 确认按钮的文本\n cancelText: 'cancel', // 取消按钮的文本\n history: true, // 监听 hashchange 事件\n modal: false, // 是否模态化对话框,为 false 时点击对话框外面区域关闭对话框,为 true 时不关闭\n closeOnEsc: true, // 按下 esc 关闭对话框\n type: 'text', // 输入框类型,text: 单行文本框 textarea: 多行文本框\n maxlength: '', // 最大输入字符数\n defaultValue: '', // 输入框中的默认文本\n confirmOnEnter: false, // 按下 enter 确认输入内容\n };\n\n options = $.extend({}, DEFAULT, options);\n\n var content =\n '
' +\n (label ? '' : '') +\n (options.type === 'text' ?\n '' :\n '') +\n (options.type === 'textarea' ?\n '' :\n '') +\n '
';\n\n var onCancelClick = onCancel;\n if (typeof onCancel === 'function') {\n onCancelClick = function (inst) {\n var value = inst.$dialog.find('.mdui-textfield-input').val();\n onCancel(value, inst);\n }\n }\n\n var onConfirmClick = onConfirm;\n if (typeof onConfirm === 'function') {\n onConfirmClick = function (inst) {\n var value = inst.$dialog.find('.mdui-textfield-input').val();\n onConfirm(value, inst);\n }\n }\n\n return mdui.dialog({\n title: title,\n content: content,\n buttons: [\n {\n text: options.cancelText,\n bold: false,\n close: true,\n onClick: onCancelClick,\n },\n {\n text: options.confirmText,\n bold: false,\n close: true,\n onClick: onConfirmClick,\n },\n ],\n cssClass: 'mdui-dialog-prompt',\n history: options.history,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc,\n onOpen: function (inst) {\n\n // 初始化输入框\n var $input = inst.$dialog.find('.mdui-textfield-input');\n mdui.updateTextFields($input);\n\n // 聚焦到输入框\n $input[0].focus();\n\n // 捕捉文本框回车键,在单行文本框的情况下触发回调\n if (options.type === 'text' && options.confirmOnEnter === true) {\n $input.on('keydown', function (event) {\n if (event.keyCode === 13) {\n var value = inst.$dialog.find('.mdui-textfield-input').val();\n onConfirm(value, inst);\n inst.close();\n }\n });\n }\n\n // 如果是多行输入框,监听输入框的 input 事件,更新对话框高度\n if (options.type === 'textarea') {\n $input.on('input', function () {\n inst.handleUpdate();\n });\n }\n\n // 有字符数限制时,加载完文本框后 DOM 会变化,需要更新对话框高度\n if (options.maxlength) {\n inst.handleUpdate();\n }\n },\n });\n\n};\n","/**\n * =============================================================================\n * ************ ToolTip 工具提示 ************\n * =============================================================================\n */\n\nmdui.Tooltip = (function () {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n position: 'auto', // 提示所在位置\n delay: 0, // 延迟,单位毫秒\n content: '', // 提示文本,允许包含 HTML\n };\n\n /**\n * 是否是桌面设备\n * @returns {boolean}\n */\n var isDesktop = function () {\n return $window.width() > 1024;\n };\n\n /**\n * 设置 Tooltip 的位置\n * @param inst\n */\n function setPosition(inst) {\n var marginLeft;\n var marginTop;\n var position;\n\n // 触发的元素\n var targetProps = inst.$target[0].getBoundingClientRect();\n\n // 触发的元素和 Tooltip 之间的距离\n var targetMargin = (isDesktop() ? 14 : 24);\n\n // Tooltip 的宽度和高度\n var tooltipWidth = inst.$tooltip[0].offsetWidth;\n var tooltipHeight = inst.$tooltip[0].offsetHeight;\n\n // Tooltip 的方向\n position = inst.options.position;\n\n // 自动判断位置,加 2px,使 Tooltip 距离窗口边框至少有 2px 的间距\n if (['bottom', 'top', 'left', 'right'].indexOf(position) === -1) {\n if (\n targetProps.top + targetProps.height + targetMargin + tooltipHeight + 2 <\n $window.height()\n ) {\n position = 'bottom';\n } else if (targetMargin + tooltipHeight + 2 < targetProps.top) {\n position = 'top';\n } else if (targetMargin + tooltipWidth + 2 < targetProps.left) {\n position = 'left';\n } else if (\n targetProps.width + targetMargin + tooltipWidth + 2 <\n $window.width() - targetProps.left\n ) {\n position = 'right';\n } else {\n position = 'bottom';\n }\n }\n\n // 设置位置\n switch (position) {\n case 'bottom':\n marginLeft = -1 * (tooltipWidth / 2);\n marginTop = (targetProps.height / 2) + targetMargin;\n inst.$tooltip.transformOrigin('top center');\n break;\n case 'top':\n marginLeft = -1 * (tooltipWidth / 2);\n marginTop = -1 * (tooltipHeight + (targetProps.height / 2) + targetMargin);\n inst.$tooltip.transformOrigin('bottom center');\n break;\n case 'left':\n marginLeft = -1 * (tooltipWidth + (targetProps.width / 2) + targetMargin);\n marginTop = -1 * (tooltipHeight / 2);\n inst.$tooltip.transformOrigin('center right');\n break;\n case 'right':\n marginLeft = (targetProps.width / 2) + targetMargin;\n marginTop = -1 * (tooltipHeight / 2);\n inst.$tooltip.transformOrigin('center left');\n break;\n }\n\n var targetOffset = inst.$target.offset();\n inst.$tooltip.css({\n top: targetOffset.top + (targetProps.height / 2) + 'px',\n left: targetOffset.left + (targetProps.width / 2) + 'px',\n 'margin-left': marginLeft + 'px',\n 'margin-top': marginTop + 'px',\n });\n }\n\n /**\n * Tooltip 实例\n * @param selector\n * @param opts\n * @constructor\n */\n function Tooltip(selector, opts) {\n var _this = this;\n\n _this.$target = $(selector).eq(0);\n if (!_this.$target.length) {\n return;\n }\n\n // 已通过 data 属性实例化过,不再重复实例化\n var oldInst = _this.$target.data('mdui.tooltip');\n if (oldInst) {\n return oldInst;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n _this.state = 'closed';\n\n // 创建 Tooltip HTML\n _this.$tooltip = $(\n '
' +\n _this.options.content +\n '
'\n ).appendTo(document.body);\n\n // 绑定事件。元素处于 disabled 状态时无法触发鼠标事件,为了统一,把 touch 事件也禁用\n _this.$target\n .on('touchstart mouseenter', function (e) {\n if (this.disabled) {\n return;\n }\n\n if (!TouchHandler.isAllow(e)) {\n return;\n }\n\n TouchHandler.register(e);\n\n _this.open();\n })\n .on('touchend mouseleave', function (e) {\n if (this.disabled) {\n return;\n }\n\n if (!TouchHandler.isAllow(e)) {\n return;\n }\n\n _this.close();\n })\n .on(TouchHandler.unlock, function (e) {\n if (this.disabled) {\n return;\n }\n\n TouchHandler.register(e);\n });\n }\n\n /**\n * 动画结束回调\n * @private\n */\n var transitionEnd = function (inst) {\n if (inst.$tooltip.hasClass('mdui-tooltip-open')) {\n inst.state = 'opened';\n componentEvent('opened', 'tooltip', inst, inst.$target);\n } else {\n inst.state = 'closed';\n componentEvent('closed', 'tooltip', inst, inst.$target);\n }\n };\n\n /**\n * 执行打开 Tooltip\n * @private\n */\n Tooltip.prototype._doOpen = function () {\n var _this = this;\n\n _this.state = 'opening';\n componentEvent('open', 'tooltip', _this, _this.$target);\n\n _this.$tooltip\n .addClass('mdui-tooltip-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 打开 Tooltip\n * @param opts 允许每次打开时设置不同的参数\n */\n Tooltip.prototype.open = function (opts) {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n var oldOpts = $.extend({}, _this.options);\n\n // 合并 data 属性参数\n $.extend(_this.options, parseOptions(_this.$target.attr('mdui-tooltip')));\n if (opts) {\n $.extend(_this.options, opts);\n }\n\n // tooltip 的内容有更新\n if (oldOpts.content !== _this.options.content) {\n _this.$tooltip.html(_this.options.content);\n }\n\n setPosition(_this);\n\n if (_this.options.delay) {\n _this.timeoutId = setTimeout(function () {\n _this._doOpen();\n }, _this.options.delay);\n } else {\n _this.timeoutId = false;\n _this._doOpen();\n }\n };\n\n /**\n * 关闭 Tooltip\n */\n Tooltip.prototype.close = function () {\n var _this = this;\n\n if (_this.timeoutId) {\n clearTimeout(_this.timeoutId);\n _this.timeoutId = false;\n }\n\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n _this.state = 'closing';\n componentEvent('close', 'tooltip', _this, _this.$target);\n\n _this.$tooltip\n .removeClass('mdui-tooltip-open')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 切换 Tooltip 状态\n */\n Tooltip.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n /**\n * 获取 Tooltip 状态\n * @returns {'opening'|'opened'|'closing'|'closed'}\n */\n Tooltip.prototype.getState = function () {\n return this.state;\n };\n\n /**\n * 销毁 Tooltip\n */\n /*Tooltip.prototype.destroy = function () {\n var _this = this;\n clearTimeout(_this.timeoutId);\n $.data(_this.target, 'mdui.tooltip', null);\n $.remove(_this.tooltip);\n };*/\n\n return Tooltip;\n\n})();\n","/**\n * =============================================================================\n * ************ Tooltip DATA API ************\n * =============================================================================\n */\n\n$(function () {\n // mouseenter 不能冒泡,所以这里用 mouseover 代替\n $document.on('touchstart mouseover', '[mdui-tooltip]', function () {\n var $this = $(this);\n\n var inst = $this.data('mdui.tooltip');\n if (!inst) {\n var options = parseOptions($this.attr('mdui-tooltip'));\n inst = new mdui.Tooltip($this, options);\n $this.data('mdui.tooltip', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Snackbar ************\n * =============================================================================\n */\n\n(function () {\n\n /**\n * 当前打开着的 Snackbar\n */\n var currentInst;\n\n /**\n * 对列名\n * @type {string}\n */\n var queueName = '__md_snackbar';\n\n var DEFAULT = {\n timeout: 4000, // 在用户没有操作时多长时间自动隐藏\n buttonText: '', // 按钮的文本\n buttonColor: '', // 按钮的颜色,支持 blue #90caf9 rgba(...)\n position: 'bottom', // 位置 bottom、top、left-top、left-bottom、right-top、right-bottom\n closeOnButtonClick: true, // 点击按钮时关闭\n closeOnOutsideClick: true, // 触摸或点击屏幕其他地方时关闭\n onClick: function () { // 在 Snackbar 上点击的回调\n },\n\n onButtonClick: function () { // 点击按钮的回调\n },\n\n onOpen: function () { // 打开动画开始时的回调\n },\n\n onOpened: function () { // 打开动画结束时的回调\n },\n\n onClose: function () { // 关闭动画开始时的回调\n },\n\n onClosed: function () { // 打开动画结束时的回调\n },\n };\n\n /**\n * 点击 Snackbar 外面的区域关闭\n * @param e\n */\n var closeOnOutsideClick = function (e) {\n var $target = $(e.target);\n if (!$target.hasClass('mdui-snackbar') && !$target.parents('.mdui-snackbar').length) {\n currentInst.close();\n }\n };\n\n /**\n * Snackbar 实例\n * @param message\n * @param opts\n * @constructor\n */\n function Snackbar(message, opts) {\n var _this = this;\n\n _this.message = message;\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n\n // message 参数必须\n if (!_this.message) {\n return;\n }\n\n _this.state = 'closed';\n\n _this.timeoutId = false;\n\n // 按钮颜色\n var buttonColorStyle = '';\n var buttonColorClass = '';\n\n if (\n _this.options.buttonColor.indexOf('#') === 0 ||\n _this.options.buttonColor.indexOf('rgb') === 0\n ) {\n buttonColorStyle = 'style=\"color:' + _this.options.buttonColor + '\"';\n } else if (_this.options.buttonColor !== '') {\n buttonColorClass = 'mdui-text-color-' + _this.options.buttonColor;\n }\n\n // 添加 HTML\n _this.$snackbar = $(\n '
' +\n '
' +\n _this.message +\n '
' +\n (_this.options.buttonText ?\n ('' +\n _this.options.buttonText +\n '') :\n ''\n ) +\n '
')\n .appendTo(document.body);\n\n // 设置位置\n _this._setPosition('close');\n\n _this.$snackbar\n .reflow()\n .addClass('mdui-snackbar-' + _this.options.position);\n }\n\n /**\n * 设置 Snackbar 的位置\n * @param state\n * @private\n */\n Snackbar.prototype._setPosition = function (state) {\n var _this = this;\n\n var snackbarHeight = _this.$snackbar[0].clientHeight;\n var position = _this.options.position;\n\n var translateX;\n var translateY;\n\n // translateX\n if (position === 'bottom' || position === 'top') {\n translateX = '-50%';\n } else {\n translateX = '0';\n }\n\n // translateY\n if (state === 'open') {\n translateY = '0';\n } else {\n if (position === 'bottom') {\n translateY = snackbarHeight;\n }\n\n if (position === 'top') {\n translateY = -snackbarHeight;\n }\n\n if (position === 'left-top' || position === 'right-top') {\n translateY = -snackbarHeight - 24;\n }\n\n if (position === 'left-bottom' || position === 'right-bottom') {\n translateY = snackbarHeight + 24;\n }\n }\n\n _this.$snackbar.transform('translate(' + translateX + ',' + translateY + 'px)');\n };\n\n /**\n * 打开 Snackbar\n */\n Snackbar.prototype.open = function () {\n var _this = this;\n\n if (!_this.message) {\n return;\n }\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n // 如果当前有正在显示的 Snackbar,则先加入队列,等旧 Snackbar 关闭后再打开\n if (currentInst) {\n queue.queue(queueName, function () {\n _this.open();\n });\n\n return;\n }\n\n currentInst = _this;\n\n // 开始打开\n _this.state = 'opening';\n _this.options.onOpen();\n\n _this._setPosition('open');\n\n _this.$snackbar\n .transitionEnd(function () {\n if (_this.state !== 'opening') {\n return;\n }\n\n _this.state = 'opened';\n _this.options.onOpened();\n\n // 有按钮时绑定事件\n if (_this.options.buttonText) {\n _this.$snackbar\n .find('.mdui-snackbar-action')\n .on('click', function () {\n _this.options.onButtonClick();\n if (_this.options.closeOnButtonClick) {\n _this.close();\n }\n });\n }\n\n // 点击 snackbar 的事件\n _this.$snackbar.on('click', function (e) {\n if (!$(e.target).hasClass('mdui-snackbar-action')) {\n _this.options.onClick();\n }\n });\n\n // 点击 Snackbar 外面的区域关闭\n if (_this.options.closeOnOutsideClick) {\n $document.on(TouchHandler.start, closeOnOutsideClick);\n }\n\n // 超时后自动关闭\n if (_this.options.timeout) {\n _this.timeoutId = setTimeout(function () {\n _this.close();\n }, _this.options.timeout);\n }\n });\n };\n\n /**\n * 关闭 Snackbar\n */\n Snackbar.prototype.close = function () {\n var _this = this;\n\n if (!_this.message) {\n return;\n }\n\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n if (_this.timeoutId) {\n clearTimeout(_this.timeoutId);\n }\n\n if (_this.options.closeOnOutsideClick) {\n $document.off(TouchHandler.start, closeOnOutsideClick);\n }\n\n _this.state = 'closing';\n _this.options.onClose();\n\n _this._setPosition('close');\n\n _this.$snackbar\n .transitionEnd(function () {\n if (_this.state !== 'closing') {\n return;\n }\n\n currentInst = null;\n _this.state = 'closed';\n _this.options.onClosed();\n _this.$snackbar.remove();\n queue.dequeue(queueName);\n });\n };\n\n /**\n * 打开 Snackbar\n * @param message\n * @param opts\n */\n mdui.snackbar = function (message, opts) {\n if (typeof message !== 'string') {\n opts = message;\n message = opts.message;\n }\n\n var inst = new Snackbar(message, opts);\n\n inst.open();\n return inst;\n };\n\n})();\n","/**\n * =============================================================================\n * ************ Bottom navigation 底部导航栏 ************\n * =============================================================================\n */\n\n(function () {\n\n // 切换导航项\n $document.on('click', '.mdui-bottom-nav>a', function () {\n var $this = $(this);\n var $bottomNav = $this.parent();\n var isThis;\n $bottomNav.children('a').each(function (i, item) {\n isThis = $this.is(item);\n if (isThis) {\n componentEvent('change', 'bottomNav', null, $bottomNav, {\n index: i,\n });\n }\n\n $(item)[isThis ? 'addClass' : 'removeClass']('mdui-bottom-nav-active');\n });\n });\n\n // 滚动时隐藏 mdui-bottom-nav-scroll-hide\n mdui.mutation('.mdui-bottom-nav-scroll-hide', function () {\n var $this = $(this);\n var inst = new mdui.Headroom($this, {\n pinnedClass: 'mdui-headroom-pinned-down',\n unpinnedClass: 'mdui-headroom-unpinned-down',\n });\n $this.data('mdui.headroom', inst);\n });\n\n})();\n","/**\n * =============================================================================\n * ************ Expansion panel 可扩展面板 ************\n * =============================================================================\n */\n\nmdui.Panel = (function () {\n\n function Panel(selector, opts) {\n return new CollapsePrivate(selector, opts, 'panel');\n }\n\n return Panel;\n\n})();\n","/**\n * =============================================================================\n * ************ Expansion panel 自定义属性 ************\n * =============================================================================\n */\n\n$(function () {\n mdui.mutation('[mdui-panel]', function () {\n var $target = $(this);\n\n var inst = $target.data('mdui.panel');\n if (!inst) {\n var options = parseOptions($target.attr('mdui-panel'));\n inst = new mdui.Panel($target, options);\n $target.data('mdui.panel', inst);\n }\n });\n});\n","/**\n * =============================================================================\n * ************ Menu 菜单 ************\n * =============================================================================\n */\n\nmdui.Menu = (function () {\n\n /**\n * 默认参数\n */\n var DEFAULT = {\n position: 'auto', // 菜单位置 top、bottom、center、auto\n align: 'auto', // 菜单和触发它的元素的对齐方式 left、right、center、auto\n gutter: 16, // 菜单距离窗口边缘的最小距离,单位 px\n fixed: false, // 是否使菜单固定在窗口,不随滚动条滚动\n covered: 'auto', // 菜单是否覆盖在触发它的元素上,true、false。auto 时简单菜单覆盖,级联菜单不覆盖\n subMenuTrigger: 'hover', // 子菜单的触发方式 hover、click\n subMenuDelay: 200, // 子菜单的触发延时,仅在 submenuTrigger 为 hover 有效\n };\n\n /**\n * 调整主菜单位置\n * @param _this 实例\n */\n var readjust = function (_this) {\n var menuLeft;\n var menuTop;\n\n // 菜单位置和方向\n var position;\n var align;\n\n // window 窗口的宽度和高度\n var windowHeight = $window.height();\n var windowWidth = $window.width();\n\n // 配置参数\n var gutter = _this.options.gutter;\n var isCovered = _this.isCovered;\n var isFixed = _this.options.fixed;\n\n // 动画方向参数\n var transformOriginX;\n var transformOriginY;\n\n // 菜单的原始宽度和高度\n var menuWidth = _this.$menu.width();\n var menuHeight = _this.$menu.height();\n\n var $anchor = _this.$anchor;\n\n // 触发菜单的元素在窗口中的位置\n var anchorTmp = $anchor[0].getBoundingClientRect();\n var anchorTop = anchorTmp.top;\n var anchorLeft = anchorTmp.left;\n var anchorHeight = anchorTmp.height;\n var anchorWidth = anchorTmp.width;\n var anchorBottom = windowHeight - anchorTop - anchorHeight;\n var anchorRight = windowWidth - anchorLeft - anchorWidth;\n\n // 触发元素相对其拥有定位属性的父元素的位置\n var anchorOffsetTop = $anchor[0].offsetTop;\n var anchorOffsetLeft = $anchor[0].offsetLeft;\n\n // ===============================\n // ================= 自动判断菜单位置\n // ===============================\n if (_this.options.position === 'auto') {\n\n // 判断下方是否放得下菜单\n if (anchorBottom + (isCovered ? anchorHeight : 0) > menuHeight + gutter) {\n position = 'bottom';\n }\n\n // 判断上方是否放得下菜单\n else if (anchorTop + (isCovered ? anchorHeight : 0) > menuHeight + gutter) {\n position = 'top';\n }\n\n // 上下都放不下,居中显示\n else {\n position = 'center';\n }\n } else {\n position = _this.options.position;\n }\n\n // ===============================\n // ============== 自动判断菜单对齐方式\n // ===============================\n if (_this.options.align === 'auto') {\n\n // 判断右侧是否放得下菜单\n if (anchorRight + anchorWidth > menuWidth + gutter) {\n align = 'left';\n }\n\n // 判断左侧是否放得下菜单\n else if (anchorLeft + anchorWidth > menuWidth + gutter) {\n align = 'right';\n }\n\n // 左右都放不下,居中显示\n else {\n align = 'center';\n }\n } else {\n align = _this.options.align;\n }\n\n // ===============================\n // ==================== 设置菜单位置\n // ===============================\n if (position === 'bottom') {\n transformOriginY = '0';\n\n menuTop =\n (isCovered ? 0 : anchorHeight) +\n (isFixed ? anchorTop : anchorOffsetTop);\n\n } else if (position === 'top') {\n transformOriginY = '100%';\n\n menuTop =\n (isCovered ? anchorHeight : 0) +\n (isFixed ? (anchorTop - menuHeight) : (anchorOffsetTop - menuHeight));\n\n } else {\n transformOriginY = '50%';\n\n // =====================在窗口中居中\n // 显示的菜单的高度,简单菜单高度不超过窗口高度,若超过了则在菜单内部显示滚动条\n // 级联菜单内部不允许出现滚动条\n var menuHeightTemp = menuHeight;\n\n // 简单菜单比窗口高时,限制菜单高度\n if (!_this.isCascade) {\n if (menuHeight + gutter * 2 > windowHeight) {\n menuHeightTemp = windowHeight - gutter * 2;\n _this.$menu.height(menuHeightTemp);\n }\n }\n\n menuTop =\n (windowHeight - menuHeightTemp) / 2 +\n (isFixed ? 0 : (anchorOffsetTop - anchorTop));\n }\n\n _this.$menu.css('top', menuTop + 'px');\n\n // ===============================\n // ================= 设置菜单对齐方式\n // ===============================\n if (align === 'left') {\n transformOriginX = '0';\n\n menuLeft = isFixed ? anchorLeft : anchorOffsetLeft;\n\n } else if (align === 'right') {\n transformOriginX = '100%';\n\n menuLeft = isFixed ?\n (anchorLeft + anchorWidth - menuWidth) :\n (anchorOffsetLeft + anchorWidth - menuWidth);\n } else {\n transformOriginX = '50%';\n\n //=======================在窗口中居中\n // 显示的菜单的宽度,菜单宽度不能超过窗口宽度\n var menuWidthTemp = menuWidth;\n\n // 菜单比窗口宽,限制菜单宽度\n if (menuWidth + gutter * 2 > windowWidth) {\n menuWidthTemp = windowWidth - gutter * 2;\n _this.$menu.width(menuWidthTemp);\n }\n\n menuLeft =\n (windowWidth - menuWidthTemp) / 2 +\n (isFixed ? 0 : anchorOffsetLeft - anchorLeft);\n }\n\n _this.$menu.css('left', menuLeft + 'px');\n\n // 设置菜单动画方向\n _this.$menu.transformOrigin(transformOriginX + ' ' + transformOriginY);\n };\n\n /**\n * 调整子菜单的位置\n * @param $submenu\n */\n var readjustSubmenu = function ($submenu) {\n var $item = $submenu.parent('.mdui-menu-item');\n\n var submenuTop;\n var submenuLeft;\n\n // 子菜单位置和方向\n var position; // top、bottom\n var align; // left、right\n\n // window 窗口的宽度和高度\n var windowHeight = $window.height();\n var windowWidth = $window.width();\n\n // 动画方向参数\n var transformOriginX;\n var transformOriginY;\n\n // 子菜单的原始宽度和高度\n var submenuWidth = $submenu.width();\n var submenuHeight = $submenu.height();\n\n // 触发子菜单的菜单项的宽度高度\n var itemTmp = $item[0].getBoundingClientRect();\n var itemWidth = itemTmp.width;\n var itemHeight = itemTmp.height;\n var itemLeft = itemTmp.left;\n var itemTop = itemTmp.top;\n\n // ===================================\n // ===================== 判断菜单上下位置\n // ===================================\n\n // 判断下方是否放得下菜单\n if (windowHeight - itemTop > submenuHeight) {\n position = 'bottom';\n }\n\n // 判断上方是否放得下菜单\n else if (itemTop + itemHeight > submenuHeight) {\n position = 'top';\n }\n\n // 默认放在下方\n else {\n position = 'bottom';\n }\n\n // ====================================\n // ====================== 判断菜单左右位置\n // ====================================\n\n // 判断右侧是否放得下菜单\n if (windowWidth - itemLeft - itemWidth > submenuWidth) {\n align = 'left';\n }\n\n // 判断左侧是否放得下菜单\n else if (itemLeft > submenuWidth) {\n align = 'right';\n }\n\n // 默认放在右侧\n else {\n align = 'left';\n }\n\n // ===================================\n // ======================== 设置菜单位置\n // ===================================\n if (position === 'bottom') {\n transformOriginY = '0';\n submenuTop = '0';\n } else if (position === 'top') {\n transformOriginY = '100%';\n submenuTop = -submenuHeight + itemHeight;\n }\n\n $submenu.css('top', submenuTop + 'px');\n\n // ===================================\n // ===================== 设置菜单对齐方式\n // ===================================\n if (align === 'left') {\n transformOriginX = '0';\n submenuLeft = itemWidth;\n } else if (align === 'right') {\n transformOriginX = '100%';\n submenuLeft = -submenuWidth;\n }\n\n $submenu.css('left', submenuLeft + 'px');\n\n // 设置菜单动画方向\n $submenu.transformOrigin(transformOriginX + ' ' + transformOriginY);\n };\n\n /**\n * 打开子菜单\n * @param $submenu\n */\n var openSubMenu = function ($submenu) {\n readjustSubmenu($submenu);\n\n $submenu\n .addClass('mdui-menu-open')\n .parent('.mdui-menu-item')\n .addClass('mdui-menu-item-active');\n };\n\n /**\n * 关闭子菜单,及其嵌套的子菜单\n * @param $submenu\n */\n var closeSubMenu = function ($submenu) {\n // 关闭子菜单\n $submenu\n .removeClass('mdui-menu-open')\n .addClass('mdui-menu-closing')\n .transitionEnd(function () {\n $submenu.removeClass('mdui-menu-closing');\n })\n\n // 移除激活状态的样式\n .parent('.mdui-menu-item')\n .removeClass('mdui-menu-item-active');\n\n // 循环关闭嵌套的子菜单\n $submenu.find('.mdui-menu').each(function () {\n var $subSubmenu = $(this);\n $subSubmenu\n .removeClass('mdui-menu-open')\n .addClass('mdui-menu-closing')\n .transitionEnd(function () {\n $subSubmenu.removeClass('mdui-menu-closing');\n })\n .parent('.mdui-menu-item')\n .removeClass('mdui-menu-item-active');\n });\n };\n\n /**\n * 切换子菜单状态\n * @param $submenu\n */\n var toggleSubMenu = function ($submenu) {\n if ($submenu.hasClass('mdui-menu-open')) {\n closeSubMenu($submenu);\n } else {\n openSubMenu($submenu);\n }\n };\n\n /**\n * 绑定子菜单事件\n * @param inst 实例\n */\n var bindSubMenuEvent = function (inst) {\n // 点击打开子菜单\n inst.$menu.on('click', '.mdui-menu-item', function (e) {\n var $this = $(this);\n var $target = $(e.target);\n\n // 禁用状态菜单不操作\n if ($this.attr('disabled') !== null) {\n return;\n }\n\n // 没有点击在子菜单的菜单项上时,不操作(点在了子菜单的空白区域、或分隔线上)\n if ($target.is('.mdui-menu') || $target.is('.mdui-divider')) {\n return;\n }\n\n // 阻止冒泡,点击菜单项时只在最后一级的 mdui-menu-item 上生效,不向上冒泡\n if (!$target.parents('.mdui-menu-item').eq(0).is($this)) {\n return;\n }\n\n // 当前菜单的子菜单\n var $submenu = $this.children('.mdui-menu');\n\n // 先关闭除当前子菜单外的所有同级子菜单\n $this.parent('.mdui-menu').children('.mdui-menu-item').each(function () {\n var $tmpSubmenu = $(this).children('.mdui-menu');\n if (\n $tmpSubmenu.length &&\n (!$submenu.length || !$tmpSubmenu.is($submenu))\n ) {\n closeSubMenu($tmpSubmenu);\n }\n });\n\n // 切换当前子菜单\n if ($submenu.length) {\n toggleSubMenu($submenu);\n }\n });\n\n if (inst.options.subMenuTrigger === 'hover') {\n // 临时存储 setTimeout 对象\n var timeout;\n\n var timeoutOpen;\n var timeoutClose;\n\n inst.$menu.on('mouseover mouseout', '.mdui-menu-item', function (e) {\n var $this = $(this);\n var eventType = e.type;\n var $relatedTarget = $(e.relatedTarget);\n\n // 禁用状态的菜单不操作\n if ($this.attr('disabled') !== null) {\n return;\n }\n\n // 用 mouseover 模拟 mouseenter\n if (eventType === 'mouseover') {\n if (!$this.is($relatedTarget) && $.contains($this[0], $relatedTarget[0])) {\n return;\n }\n }\n\n // 用 mouseout 模拟 mouseleave\n else if (eventType === 'mouseout') {\n if ($this.is($relatedTarget) || $.contains($this[0], $relatedTarget[0])) {\n return;\n }\n }\n\n // 当前菜单项下的子菜单,未必存在\n var $submenu = $this.children('.mdui-menu');\n\n // 鼠标移入菜单项时,显示菜单项下的子菜单\n if (eventType === 'mouseover') {\n if ($submenu.length) {\n\n // 当前子菜单准备打开时,如果当前子菜单正准备着关闭,不用再关闭了\n var tmpClose = $submenu.data('timeoutClose.mdui.menu');\n if (tmpClose) {\n clearTimeout(tmpClose);\n }\n\n // 如果当前子菜单已经打开,不操作\n if ($submenu.hasClass('mdui-menu-open')) {\n return;\n }\n\n // 当前子菜单准备打开时,其他准备打开的子菜单不用再打开了\n clearTimeout(timeoutOpen);\n\n // 准备打开当前子菜单\n timeout = timeoutOpen = setTimeout(function () {\n openSubMenu($submenu);\n }, inst.options.subMenuDelay);\n\n $submenu.data('timeoutOpen.mdui.menu', timeout);\n }\n }\n\n // 鼠标移出菜单项时,关闭菜单项下的子菜单\n else if (eventType === 'mouseout') {\n if ($submenu.length) {\n\n // 鼠标移出菜单项时,如果当前菜单项下的子菜单正准备打开,不用再打开了\n var tmpOpen = $submenu.data('timeoutOpen.mdui.menu');\n if (tmpOpen) {\n clearTimeout(tmpOpen);\n }\n\n // 准备关闭当前子菜单\n timeout = timeoutClose = setTimeout(function () {\n closeSubMenu($submenu);\n }, inst.options.subMenuDelay);\n\n $submenu.data('timeoutClose.mdui.menu', timeout);\n }\n }\n });\n }\n };\n\n /**\n * 菜单\n * @param anchorSelector 点击该元素触发菜单\n * @param menuSelector 菜单\n * @param opts 配置项\n * @constructor\n */\n function Menu(anchorSelector, menuSelector, opts) {\n var _this = this;\n\n // 触发菜单的元素\n _this.$anchor = $(anchorSelector).eq(0);\n if (!_this.$anchor.length) {\n return;\n }\n\n // 已通过自定义属性实例化过,不再重复实例化\n var oldInst = _this.$anchor.data('mdui.menu');\n if (oldInst) {\n return oldInst;\n }\n\n _this.$menu = $(menuSelector).eq(0);\n\n // 触发菜单的元素 和 菜单必须是同级的元素,否则菜单可能不能定位\n if (!_this.$anchor.siblings(_this.$menu).length) {\n return;\n }\n\n _this.options = $.extend({}, DEFAULT, (opts || {}));\n _this.state = 'closed';\n\n // 是否是级联菜单\n _this.isCascade = _this.$menu.hasClass('mdui-menu-cascade');\n\n // covered 参数处理\n if (_this.options.covered === 'auto') {\n _this.isCovered = !_this.isCascade;\n } else {\n _this.isCovered = _this.options.covered;\n }\n\n // 点击触发菜单切换\n _this.$anchor.on('click', function () {\n _this.toggle();\n });\n\n // 点击菜单外面区域关闭菜单\n $document.on('click touchstart', function (e) {\n var $target = $(e.target);\n if (\n (_this.state === 'opening' || _this.state === 'opened') &&\n !$target.is(_this.$menu) &&\n !$.contains(_this.$menu[0], $target[0]) &&\n !$target.is(_this.$anchor) &&\n !$.contains(_this.$anchor[0], $target[0])\n ) {\n _this.close();\n }\n });\n\n // 点击不含子菜单的菜单条目关闭菜单\n $document.on('click', '.mdui-menu-item', function (e) {\n var $this = $(this);\n if (!$this.find('.mdui-menu').length && $this.attr('disabled') === null) {\n _this.close();\n }\n });\n\n // 绑定点击或鼠标移入含子菜单的条目的事件\n bindSubMenuEvent(_this);\n\n // 窗口大小变化时,重新调整菜单位置\n $window.on('resize', $.throttle(function () {\n readjust(_this);\n }, 100));\n }\n\n /**\n * 切换菜单状态\n */\n Menu.prototype.toggle = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n _this.close();\n } else if (_this.state === 'closing' || _this.state === 'closed') {\n _this.open();\n }\n };\n\n /**\n * 动画结束回调\n * @param inst\n */\n var transitionEnd = function (inst) {\n inst.$menu.removeClass('mdui-menu-closing');\n\n if (inst.state === 'opening') {\n inst.state = 'opened';\n componentEvent('opened', 'menu', inst, inst.$menu);\n }\n\n if (inst.state === 'closing') {\n inst.state = 'closed';\n componentEvent('closed', 'menu', inst, inst.$menu);\n\n // 关闭后,恢复菜单样式到默认状态,并恢复 fixed 定位\n inst.$menu.css({\n top: '',\n left: '',\n width: '',\n position: 'fixed',\n });\n }\n };\n\n /**\n * 打开菜单\n */\n Menu.prototype.open = function () {\n var _this = this;\n\n if (_this.state === 'opening' || _this.state === 'opened') {\n return;\n }\n\n _this.state = 'opening';\n componentEvent('open', 'menu', _this, _this.$menu);\n\n // 调整菜单位置\n readjust(_this);\n\n _this.$menu\n\n // 菜单隐藏状态使用使用 fixed 定位。\n .css('position', _this.options.fixed ? 'fixed' : 'absolute')\n\n // 打开菜单\n .addClass('mdui-menu-open')\n\n // 打开动画完成后\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n /**\n * 关闭菜单\n */\n Menu.prototype.close = function () {\n var _this = this;\n if (_this.state === 'closing' || _this.state === 'closed') {\n return;\n }\n\n _this.state = 'closing';\n componentEvent('close', 'menu', _this, _this.$menu);\n\n // 菜单开始关闭时,关闭所有子菜单\n _this.$menu.find('.mdui-menu').each(function () {\n closeSubMenu($(this));\n });\n\n _this.$menu\n .removeClass('mdui-menu-open')\n .addClass('mdui-menu-closing')\n .transitionEnd(function () {\n transitionEnd(_this);\n });\n };\n\n return Menu;\n})();\n","/**\n * =============================================================================\n * ************ Menu 自定义属性 API ************\n * =============================================================================\n */\n\n$(function () {\n $document.on('click', '[mdui-menu]', function () {\n var $this = $(this);\n\n var inst = $this.data('mdui.menu');\n if (!inst) {\n var options = parseOptions($this.attr('mdui-menu'));\n var menuSelector = options.target;\n delete options.target;\n\n inst = new mdui.Menu($this, menuSelector, options);\n $this.data('mdui.menu', inst);\n\n inst.toggle();\n }\n });\n});\n"]}