{"version":3,"sources":["wrap_start.js","polyfill.js","jq_start.js","function.js","core.js","jq_end.js","data.js","event.js","ajax.js","global.js","jq_extend.js","mutation.js","headroom.js","headroom.data.js","collapse.js","wrap_end.js","collapse.data.js","table.js","ripple.js","textfield.js","slider.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","spinner.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","$","document","undefined","isArrayLike","obj","length","each","i","prop","call","hasOwnProperty","map","elems","value","ret","elem","push","concat","apply","merge","first","second","val","unique","arr","indexOf","isNull","isFunction","fn","isString","isObjectLike","isObject","emptyArray","slice","isArray","Array","documentElement","elementDisplay","JQ","selector","els","tempParent","trim","toCreate","createElement","innerHTML","childNodes","match","querySelectorAll","getElementById","ready","nodeType","prototype","extend","options","arguments","contains","parent","node","param","destructure","key","keyTmp","v","encodeURIComponent","args","join","el","get","index","argument","filter","ele","$selector","not","$excludes","offset","getBoundingClientRect","left","pageXOffset","top","pageYOffset","width","height","offsetParent","css","position","parentOffset","name","nodeName","toLowerCase","show","style","display","getComputedStyle","getPropertyValue","body","appendChild","parentNode","removeChild","defaultDisplay","hide","toggle","hasClass","className","classList","removeAttr","attr","removeAttribute","removeProp","e","eq","last","children","is","_this","$compareWith","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","find","foundElements","childNode","has","$targets","len","siblings","prevAll","add","nextAll","closest","parents","remove","empty","clone","cloneNode","replaceWith","newContent","before","serializeArray","$ele","type","result","elements","disabled","checked","serialize","elm","nameIndex","props","0","1","2","defaults","set","setAttribute","argLength","getAttribute","k","classes","split","j","cls","Width","Height","win","isWindow","doc","DOCUMENT_NODE","isDocument","IEFixValue","isWidth","parseFloat","isNaN","Number","dir","nodes","$nodes","reverse","newChild","newChilds","copyByClone","tempDiv","child","insertBefore","nextSibling","appendTo","prependTo","after","replaceAll","original","dataNS","data","attributes","attribute","replace","u","charAt","toUpperCase","dataKey","removeData","mduiElementDataStorage","eventName","func","forEach","event","handlers","getElementId","handler","toString","sel","getHandlers","removeEventListener","proxy","_elementId","fnFalse","test","readyState","addEventListener","on","one","origCallback","off","elementId","useCapture","callFn","_detail","preventDefault","stopPropagation","proxyfn","_data","target","eName","trigger","evt","MouseEvent","bubbles","cancelable","createEvent","initMouseEvent","CustomEvent","detail","initCustomEvent","dispatchEvent","globalOptions","jsonpID","ajaxEvent","ajaxStart","ajaxSuccess","ajaxError","ajaxComplete","isQueryStringData","method","appendQuery","url","query","ajaxSetup","ajax","triggerEvent","xhr","triggerCallback","result1","result2","a","globals","isCanceled","processData","async","cache","username","password","headers","xhrFields","statusCode","dataType","jsonp","jsonpCallback","now","contentType","timeout","callbacks","eventParams","location","sendData","ArrayBuffer","Blob","Document","FormData","constructor","callbackName","requestUrl","abortTimeout","script","onerror","src","append","XMLHttpRequest","open","setRequestHeader","crossDomain","RegExp","$2","host","xhrTimeout","onload","textStatus","isHttpStatusSuccess","status","responseData","JSON","parse","responseText","err","responseType","response","statusText","onabort","abort","send","params","$document","$window","queue","queueData","queueName","dequeue","shift","TouchHandler","touches","isAllow","allow","register","start","move","end","cancel","unlock","addClass","parseOptions","str","Function","substr","componentEvent","pluginName","inst","fullEventName","jQuery","reflow","clientLeft","transition","duration","webkitTransitionDuration","transitionDuration","transitionEnd","fireCallBack","events","transformOrigin","webkitTransformOrigin","transform","webkitTransform","showOverlay","zIndex","$overlay","level","hideOverlay","force","removeClass","lockScreen","$body","newBodyWidth","unlockScreen","throttle","delay","timer","GUID","guid","s4","floor","random","substring","mutation","apiInit","that","item","$this","m","entries","Headroom","opts","$headroom","oldInst","DEFAULT","tolerance","Object","down","up","_init","initialClass","pinnedClass","unpinnedClass","state","inited","lastScrollY","_attachEvent","_scroll","rafId","currentScrollY","direction","toleranceExceeded","abs","unpin","pin","enable","disable","getState","CollapsePrivate","Collapse","namespace","ns","classpPefix","class_item","class_item_open","class_header","class_body","$collapse","$item","_isOpen","close","accordion","_getItem","parseInt","$content","$tmpItem","scrollHeight","openAll","closeAll","$target","Table","$table","init","checkboxHTML","tag","$thRow","$tdRows","$tdCheckboxs","selectable","selectedRow","_updateThCheckbox","_updateTdCheckbox","_updateNumericCol","$tdRow","$checkbox","$thCheckbox","isCheckedAll","checkbox","row","$th","th","updateTables","Ripple","$ripple","button","tmp","touchStartX","pageX","touchStartY","pageY","center","innerHeight","innerWidth","diameter","pow","translate","$wave","removeTimeout","removeRipple","hidden","hideRipple","hideEvent","moveEvent","getProp","input","$input","reInit","domLoadedEvent","$textField","validity","valid","inputValue","hasExtraSpace","maxlength","inputed","text","focus","updateTextFields","updateValueStyle","$slider","$track","$fill","$thumb","min","isDisabled","isDiscrete","discrete","$thumbText","percent","rangeSelector","updateSliders","Fab","$fab","$btn","$dial","$dialBtns","btn","Select","$selectNative","uniqueID","handleUpdate","$select","gutter","$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","$tab","$tabs","$indicator","activeIndex","hash","tab","_setActive","_setIndicatorPosition","_bindTabEvent","loop","clickEvent","targetId","$activeTab","activeTabOffset","scrollLeft","next","prev","$oldTabs","$newTabs","oldTabsEle","newTabsEle","Drawer","$drawer","overlay","isDesktop","swipeSupport","swipe","setPosition","translateX","closeTransform","transformCSS","cleanPosition","getMaxTranslateX","getTranslateX","currentX","swiping","swipeStartX","onBodyTouchStart","swipeAreaWidth","openNavEventHandler","maybeSwiping","touchmove","onBodyTouchMove","touchend","onBodyTouchEnd","touchcancel","touchX","touchY","dXAbs","dYAbs","changedTouches","translateRatio","swipingState","Dialog","$dialog","closeOnCancel","closeOnConfirm","isLockScreen","currentInst","history","modal","closeOnEsc","destroyOnClosed","readjust","$dialogTitle","$dialogContent","$dialogActions","dialogHeight","hashchangeEvent","overlayClick","destroy","_doOpen","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","Tooltip","$tooltip","oldOpts","html","marginLeft","marginTop","targetProps","targetMargin","tooltipWidth","offsetWidth","tooltipHeight","offsetHeight","targetOffset","margin-left","timeoutId","Snackbar","message","buttonColorStyle","buttonColorClass","buttonColor","$snackbar","buttonText","_setPosition","closeOnButtonClick","closeOnOutsideClick","onButtonClick","translateY","snackbarHeight","clientHeight","snackbar","isThis","$bottomNav","layerHTML","fillHTML","spinner","layer","$spinner","updateSpinners","Panel","Menu","anchorSelector","menuSelector","$anchor","isCascade","covered","isCovered","bindSubMenuEvent","align","fixed","subMenuTrigger","subMenuDelay","menuLeft","transformOriginX","windowWidth","isFixed","anchorTmp","anchorTop","anchorLeft","anchorHeight","anchorWidth","anchorBottom","anchorRight","anchorOffsetTop","offsetTop","anchorOffsetLeft","offsetLeft","menuHeightTemp","menuWidthTemp","openSubMenu","$submenu","submenuTop","submenuLeft","submenuWidth","submenuHeight","itemTmp","itemWidth","itemHeight","itemLeft","itemTop","readjustSubmenu","closeSubMenu","$subSubmenu","$tmpSubmenu","toggleSubMenu","timeoutOpen","timeoutClose","eventType","$relatedTarget","relatedTarget","tmpClose","tmpOpen"],"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 * =============================================================================\n * ************ JavaScript 工具库,语法和 jQuery 类似 ************\n * =============================================================================\n */\n/* jshint ignore:start */\nvar $ = (function (window, document, undefined) {\n 'use strict';\n/* jshint ignore:end */\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","var JQ = function (arr) {\n var _this = this;\n\n for (var i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n\n _this.length = arr.length;\n\n return this;\n};\n\n/**\n * @param selector {String|Function|Node|Window|NodeList|Array|JQ=}\n * @returns {JQ}\n */\nvar $ = function (selector) {\n var arr = [];\n var i = 0;\n\n if (!selector) {\n return new JQ(arr);\n }\n\n if (selector instanceof JQ) {\n return selector;\n }\n\n if (isString(selector)) {\n var els;\n var tempParent;\n selector = selector.trim();\n\n // 创建 HTML 字符串\n if (selector[0] === '<' && selector[selector.length - 1] === '>') {\n // HTML\n var toCreate = 'div';\n if (selector.indexOf(':~]/)) {\n els = [document.getElementById(selector.slice(1))];\n }\n\n // 其他选择器\n else {\n els = document.querySelectorAll(selector);\n }\n\n for (i = 0; i < els.length; i++) {\n if (els[i]) {\n arr.push(els[i]);\n }\n }\n }\n }\n\n // function\n else if (isFunction(selector)) {\n return $(document).ready(selector);\n }\n\n // Node\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n\n // NodeList\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n\n return new JQ(arr);\n};\n\n$.fn = JQ.prototype;\n\n/**\n * 扩展函数和原型属性\n * @param obj\n */\n$.extend = $.fn.extend = function (obj) {\n if (obj === undefined) {\n return this;\n }\n\n var length = arguments.length;\n var prop;\n var i;\n var options;\n\n // $.extend(obj)\n if (length === 1) {\n for (prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n this[prop] = obj[prop];\n }\n }\n\n return this;\n }\n\n // $.extend({}, defaults[, obj])\n for (i = 1; i < length; i++) {\n options = arguments[i];\n for (prop in options) {\n if (options.hasOwnProperty(prop)) {\n obj[prop] = options[prop];\n }\n }\n }\n\n return obj;\n};\n\n$.extend({\n\n /**\n * 遍历对象\n * @param obj {String|Array|Object}\n * @param callback {Function}\n * @returns {Array|Object}\n */\n each: each,\n\n /**\n * 合并两个数组,返回的结果会修改第一个数组的内容\n * @param first {Array}\n * @param second {Array}\n * @returns {Array}\n */\n merge: merge,\n\n /**\n * 删除数组中重复元素\n * @param arr {Array}\n * @returns {Array}\n */\n unique: unique,\n\n /**\n * 通过遍历集合中的节点对象,通过函数返回一个新的数组,null 或 undefined 将被过滤掉。\n * @param elems\n * @param callback\n * @returns {Array}\n */\n map: map,\n\n /**\n * 一个 DOM 节点是否包含另一个 DOM 节点\n * @param parent {Node} 父节点\n * @param node {Node} 子节点\n * @returns {Boolean}\n */\n contains: function (parent, node) {\n if (parent && !node) {\n return 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 (obj) {\n if (!isObjectLike(obj)) {\n return '';\n }\n\n var args = [];\n each(obj, function (key, value) {\n destructure(key, value);\n });\n\n return args.join('&');\n\n function destructure(key, value) {\n var keyTmp;\n\n if (isObjectLike(value)) {\n each(value, function (i, v) {\n if (isArray(value) && !isObjectLike(v)) {\n keyTmp = '';\n } else {\n keyTmp = i;\n }\n\n destructure(key + '[' + keyTmp + ']', v);\n });\n } else {\n if (!isNull(value) && value !== '') {\n keyTmp = '=' + encodeURIComponent(value);\n } else {\n keyTmp = '';\n }\n\n args.push(encodeURIComponent(key) + keyTmp);\n }\n }\n },\n});\n\n$.fn.extend({\n\n /**\n * 遍历对象\n * @param callback {Function}\n * @return {JQ}\n */\n each: function (callback) {\n return each(this, callback);\n },\n\n /**\n * 通过遍历集合中的节点对象,通过函数返回一个新的对象,null 或 undefined 将被过滤掉。\n * @param callback {Function}\n * @returns {JQ}\n */\n map: function (callback) {\n return new JQ(map(this, function (el, i) {\n return callback.call(el, i, el);\n }));\n },\n\n /**\n * 获取指定 DOM 元素,没有 index 参数时,获取所有 DOM 的数组\n * @param index {Number=}\n * @returns {Node|Array}\n */\n get: function (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 argument {start, end}\n * @returns {JQ}\n */\n slice: function (argument) {\n return new JQ(slice.apply(this, arguments));\n },\n\n /**\n * 筛选元素集合\n * @param selector {String|JQ|Node|Function}\n * @returns {JQ}\n */\n filter: function (selector) {\n if (isFunction(selector)) {\n return this.map(function (index, ele) {\n return selector.call(ele, index, ele) ? ele : undefined;\n });\n } else {\n var $selector = $(selector);\n return this.map(function (index, ele) {\n return $selector.index(ele) > -1 ? ele : undefined;\n });\n }\n },\n\n /**\n * 从元素集合中删除指定的元素\n * @param selector {String|Node|JQ|Function}\n * @return {JQ}\n */\n not: function (selector) {\n var $excludes = this.filter(selector);\n return this.map(function (index, ele) {\n return $excludes.index(ele) > -1 ? undefined : ele;\n });\n },\n\n /**\n * 获取元素相对于 document 的偏移\n * @returns {Object}\n */\n offset: function () {\n if (this[0]) {\n var offset = this[0].getBoundingClientRect();\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 () {\n return this.map(function () {\n var offsetParent = this.offsetParent;\n\n while (offsetParent && $(offsetParent).css('position') === 'static') {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || documentElement;\n });\n },\n\n /**\n * 获取元素相对于父元素的偏移\n * @return {Object}\n */\n position: function () {\n var _this = this;\n\n if (!_this[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 (_this.css('position') === 'fixed') {\n offset = _this[0].getBoundingClientRect();\n } else {\n offsetParent = _this.offsetParent();\n offset = _this.offset();\n if (!nodeName(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 - _this.css('marginTop'),\n left: offset.left - parentOffset.left - _this.css('marginLeft'),\n width: offset.width,\n height: offset.height,\n };\n },\n\n /**\n * 显示指定元素\n * @returns {JQ}\n */\n show: function () {\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 () {\n return this.each(function () {\n this.style.display = 'none';\n });\n },\n\n /**\n * 切换元素的显示状态\n * @returns {JQ}\n */\n toggle: function () {\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 (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 (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 (name) {\n return this.each(function () {\n try {\n delete this[name];\n } catch (e) {}\n });\n },\n\n /**\n * 获取当前对象中第n个元素\n * @param index {Number}\n * @returns {JQ}\n */\n eq: function (index) {\n var ret = index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n return new JQ(ret);\n },\n\n /**\n * 获取对象中第一个元素\n * @returns {JQ}\n */\n first: function () {\n return this.eq(0);\n },\n\n /**\n * 获取对象中最后一个元素\n * @returns {JQ}\n */\n last: function () {\n return this.eq(-1);\n },\n\n /**\n * 获取一个元素的位置。\n * 当 ele 参数没有给出时,返回当前元素在兄弟节点中的位置。\n * 有给出了 ele 参数时,返回 ele 元素在当前对象中的位置\n * @param ele {Selector|Node=}\n * @returns {Number}\n */\n index: function (ele) {\n if (!ele) {\n // 获取当前 JQ 对象的第一个元素在同辈元素中的位置\n return this.eq(0).parent().children().get().indexOf(this[0]);\n } else if (isString(ele)) {\n // 返回当前 JQ 对象的第一个元素在指定选择器对应的元素中的位置\n return $(ele).eq(0).parent().children().get().indexOf(this[0]);\n } else {\n // 返回指定元素在当前 JQ 对象中的位置\n return this.get().indexOf(ele);\n }\n },\n\n /**\n * 根据选择器、DOM元素或 JQ 对象来检测匹配元素集合,\n * 如果其中至少有一个元素符合这个给定的表达式就返回true\n * @param selector {String|Node|NodeList|Array|JQ|Window}\n * @returns boolean\n */\n is: function (selector) {\n var _this = this[0];\n\n if (!_this || selector === undefined || selector === null) {\n return false;\n }\n\n var $compareWith;\n var i;\n if (isString(selector)) {\n if (_this === document || _this === window) {\n return false;\n }\n\n var matchesSelector =\n _this.matches ||\n _this.matchesSelector ||\n _this.webkitMatchesSelector ||\n _this.mozMatchesSelector ||\n _this.oMatchesSelector ||\n _this.msMatchesSelector;\n\n return matchesSelector.call(_this, selector);\n } else if (selector === document || selector === window) {\n return _this === selector;\n } else {\n if (selector.nodeType || isArrayLike(selector)) {\n $compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < $compareWith.length; i++) {\n if ($compareWith[i] === _this) {\n return true;\n }\n }\n\n return false;\n }\n\n return false;\n }\n },\n\n /**\n * 根据 CSS 选择器找到后代节点的集合\n * @param selector {String}\n * @returns {JQ}\n */\n find: function (selector) {\n var foundElements = [];\n\n this.each(function (i, _this) {\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 (selector) {\n var children = [];\n this.each(function (i, _this) {\n each(_this.childNodes, function (i, childNode) {\n if (childNode.nodeType !== 1) {\n return true;\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 (selector) {\n var $targets = isString(selector) ? this.find(selector) : $(selector);\n var len = $targets.length;\n return this.filter(function () {\n for (var i = 0; i < len; i++) {\n if ($.contains(this, $targets[i])) {\n return true;\n }\n }\n });\n },\n\n /**\n * 取得同辈元素的集合\n * @param selector {String=}\n * @returns {JQ}\n */\n siblings: function (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 (selector) {\n var _this = this;\n\n if (!_this.is(selector)) {\n _this = _this.parents(selector).eq(0);\n }\n\n return _this;\n },\n\n /**\n * 删除所有匹配的元素\n * @returns {JQ}\n */\n remove: function () {\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 (selector) {\n return new JQ(unique(merge(this.get(), $(selector))));\n },\n\n /**\n * 删除子节点\n * @returns {JQ}\n */\n empty: function () {\n return this.each(function () {\n this.innerHTML = '';\n });\n },\n\n /**\n * 通过深度克隆来复制集合中的所有元素。\n * (通过原生 cloneNode 方法深度克隆来复制集合中的所有元素。此方法不会有数据和事件处理程序复制到新的元素。这点和jquery中利用一个参数来确定是否复制数据和事件处理不相同。)\n * @returns {JQ}\n */\n clone: function () {\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 (newContent) {\n return this.before(newContent).remove();\n },\n\n /**\n * 将表单元素的值组合成键值对数组\n * @returns {Array}\n */\n serializeArray: function () {\n var result = [];\n var $ele;\n var type;\n var ele = this[0];\n\n if (!ele || !ele.elements) {\n return result;\n }\n\n $(slice.call(ele.elements)).each(function () {\n $ele = $(this);\n type = $ele.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: $ele.attr('name'),\n value: $ele.val(),\n });\n }\n });\n\n return result;\n },\n\n /**\n * 将表单元素或对象序列化\n * @returns {String}\n */\n serialize: function () {\n var result = [];\n each(this.serializeArray(), function (i, elm) {\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.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 */\neach(['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 } else {\n // 设置值\n return this.each(function (i, ele) {\n ele[props[nameIndex]] = value;\n });\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 */\neach(['attr', 'prop', 'css'], function (nameIndex, name) {\n var set = function (ele, key, value) {\n if (nameIndex === 0) {\n ele.setAttribute(key, value);\n } else if (nameIndex === 1) {\n ele[key] = value;\n } else {\n ele.style[key] = value;\n }\n };\n\n var get = function (ele, key) {\n if (!ele) {\n return undefined;\n }\n\n var value;\n if (nameIndex === 0) {\n value = ele.getAttribute(key);\n } else if (nameIndex === 1) {\n value = ele[key];\n } else {\n value = window.getComputedStyle(ele, null).getPropertyValue(key);\n }\n\n return value;\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 } else {\n // 设置值\n return this.each(function (i, ele) {\n if (argLength === 2) {\n set(ele, key, value);\n } else {\n each(key, function (k, v) {\n set(ele, k, v);\n });\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 */\neach(['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 return this.each(function (i, ele) {\n each(classes, function (j, cls) {\n ele.classList[name](cls);\n });\n });\n };\n});\n\n/**\n * width - 获取元素的宽度\n * @return {Number}\n */\n/**\n * height - 获取元素的高度\n * @return {Number}\n */\neach({\n Width: 'width',\n Height: 'height',\n}, function (prop, name) {\n $.fn[name] = function (val) {\n if (val === undefined) {\n // 获取\n var ele = this[0];\n\n if (isWindow(ele)) {\n return ele['inner' + prop];\n }\n\n if (isDocument(ele)) {\n return ele.documentElement['scroll' + prop];\n }\n\n var $ele = $(ele);\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 ($ele.css('box-sizing') === 'border-box') {\n IEFixValue =\n parseFloat($ele.css('padding-' + (isWidth ? 'left' : 'top'))) +\n parseFloat($ele.css('padding-' + (isWidth ? 'right' : 'bottom'))) +\n parseFloat($ele.css('border-' + (isWidth ? 'left' : 'top') + '-width')) +\n parseFloat($ele.css('border-' + (isWidth ? 'right' : 'bottom') + '-width'));\n }\n }\n\n return parseFloat($(ele).css(name)) + IEFixValue;\n } else {\n // 设置\n if (!isNaN(Number(val)) && val !== '') {\n val += 'px';\n }\n\n return this.css(name, val);\n }\n };\n});\n\n/**\n * innerWidth - 获取元素的宽度,包含内边距\n * @return {Number}\n */\n/**\n * innerHeight - 获取元素的高度,包含内边距\n * @return {Number}\n */\neach({\n Width: 'width',\n Height: 'height',\n}, function (prop, name) {\n $.fn['inner' + prop] = function () {\n var value = this[name]();\n var $ele = $(this[0]);\n\n if ($ele.css('box-sizing') !== 'border-box') {\n value += parseFloat($ele.css('padding-' + (name === 'width' ? 'left' : 'top')));\n value += parseFloat($ele.css('padding-' + (name === 'width' ? 'right' : 'bottom')));\n }\n\n return value;\n };\n});\n\nvar dir = function (nodes, selector, nameIndex, node) {\n var ret = [];\n var ele;\n nodes.each(function (j, _this) {\n ele = _this[node];\n while (ele) {\n if (nameIndex === 2) {\n // prevUntil\n if (!selector || (selector && $(ele).is(selector))) {\n break;\n }\n\n ret.push(ele);\n } else if (nameIndex === 0) {\n // prev\n if (!selector || (selector && $(ele).is(selector))) {\n ret.push(ele);\n }\n\n break;\n } else {\n // prevAll\n if (!selector || (selector && $(ele).is(selector))) {\n ret.push(ele);\n }\n }\n\n ele = ele[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 */\neach(['', 'All', 'Until'], function (nameIndex, name) {\n $.fn['prev' + name] = function (selector) {\n\n // prevAll、prevUntil 需要把元素的顺序倒序处理,以便和 jQuery 的结果一致\n var $nodes = nameIndex === 0 ? this : $(this.get().reverse());\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 */\neach(['', '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 */\neach(['', 's', 'sUntil'], function (nameIndex, name) {\n $.fn['parent' + name] = function (selector) {\n\n // parents、parentsUntil 需要把元素的顺序反向处理,以便和 jQuery 的结果一致\n var $nodes = nameIndex === 0 ? this : $(this.get().reverse());\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 */\neach(['append', 'prepend'], function (nameIndex, name) {\n $.fn[name] = function (newChild) {\n var newChilds;\n var copyByClone = this.length > 1;\n\n if (isString(newChild)) {\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 */\neach(['insertBefore', 'insertAfter'], function (nameIndex, name) {\n $.fn[name] = function (selector) {\n var $ele = $(selector);\n return this.each(function (i, _this) {\n $ele.each(function (j, ele) {\n ele.parentNode.insertBefore(\n $ele.length === 1 ? _this : _this.cloneNode(true),\n nameIndex === 0 ? ele : ele.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 */\neach({\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","/* jshint ignore:start */\n return $;\n})(window, document);\n/* jshint ignore:end */\n","(function () {\n var dataNS = 'mduiElementDataStorage';\n\n $.extend({\n /**\n * 在指定元素上存储数据,或从指定元素上读取数据\n * @param ele 必须, DOM 元素\n * @param key 必须,键名\n * @param value 可选,值\n */\n data: function (ele, 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 each(ele.attributes, function (i, attribute) {\n var name = attribute.name;\n if (name.indexOf('data-') === 0) {\n var prop = name.slice(5).replace(/-./g, function (u) {\n // 横杠转为驼峰法\n return u.charAt(1).toUpperCase();\n });\n\n result[prop] = attribute.value;\n }\n });\n\n if (ele[dataNS]) {\n each(ele[dataNS], function (k, v) {\n result[k] = v;\n });\n }\n\n return result;\n } else {\n // 获取指定值\n if (ele[dataNS] && (key in ele[dataNS])) {\n return ele[dataNS][key];\n } else {\n var dataKey = ele.getAttribute('data-' + key);\n if (dataKey) {\n return dataKey;\n } else {\n return undefined;\n }\n }\n }\n\n // 设置值\n if (!ele[dataNS]) {\n ele[dataNS] = {};\n }\n\n each(data, function (k, v) {\n ele[dataNS][k] = v;\n });\n },\n\n /**\n * 移除指定元素上存放的数据\n * @param ele 必须,DOM 元素\n * @param key 必须,键名\n */\n removeData: function (ele, key) {\n if (ele[dataNS] && ele[dataNS][key]) {\n ele[dataNS][key] = null;\n delete ele.mduiElementDataStorage[key];\n }\n },\n\n });\n\n $.fn.extend({\n\n /**\n * 在元素上读取或设置数据\n * @param key 必须\n * @param value\n * @returns {*}\n */\n data: function (key, value) {\n if (value === undefined) {\n if (isObjectLike(key)) {\n\n // 同时设置多个值\n return this.each(function (i, ele) {\n $.data(ele, key);\n });\n } else if (this[0]) {\n\n // 获取值\n return $.data(this[0], key);\n } else {\n return undefined;\n }\n } else {\n // 设置值\n return this.each(function (i, ele) {\n $.data(ele, key, value);\n });\n }\n },\n\n /**\n * 移除元素上存储的数据\n * @param key 必须\n * @returns {*}\n */\n removeData: function (key) {\n return this.each(function (i, ele) {\n $.removeData(ele, key);\n });\n },\n\n });\n})();\n","(function () {\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 _elementId = 1;\n\n var fnFalse = function () {\n return false;\n };\n\n $.fn.extend({\n /**\n * DOM 加载完毕后调用的函数\n * @param callback\n * @returns {ready}\n */\n ready: function (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 (eventName, selector, data, callback, one) {\n var _this = 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 _this.on(type, selector, data, fn);\n });\n\n return _this;\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 _this.off(eventName, selector, callback);\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 (eventName, selector, data, callback) {\n var _this = this;\n\n if (!isString(eventName)) {\n each(eventName, function (type, fn) {\n type.split(' ').forEach(function (eName) {\n _this.on(eName, selector, data, fn, 1);\n });\n });\n } else {\n eventName.split(' ').forEach(function (eName) {\n _this.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 (eventName, selector, callback) {\n var _this = 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 _this.off(type, selector, fn);\n });\n\n return _this;\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 _this.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 (eventName, data) {\n if (!isString(eventName)) {\n return;\n }\n\n var isMouseEvent = ['click', 'mousedown', 'mouseup', 'mousemove'].indexOf(eventName) > -1;\n\n var evt;\n\n if (isMouseEvent) {\n // Note: MouseEvent 无法传入 detail 参数\n try {\n evt = new MouseEvent(eventName, {\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = document.createEvent('MouseEvent');\n evt.initMouseEvent(eventName, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n }\n } else {\n try {\n evt = new CustomEvent(eventName, {\n detail: data,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(eventName, true, true, data);\n }\n }\n\n evt._detail = data;\n\n return this.each(function () {\n this.dispatchEvent(evt);\n });\n },\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 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\n var handler = {\n e: event,\n fn: func,\n sel: selector,\n i: handlers[elementId].length,\n };\n\n var callFn = function (e, ele) {\n // 因为鼠标事件模拟事件的 detail 属性是只读的,因此在 e._detail 中存储参数\n var result = func.apply(ele, e._detail === undefined ? [e] : [e].concat(e._detail));\n\n if (result === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n var proxyfn = handler.proxy = function (e) {\n e._data = data;\n\n // 事件代理\n if (selector) {\n $(element).find(selector).get().reverse().forEach(function (ele) {\n if (ele === e.target || $.contains(ele, e.target)) {\n callFn(e, ele);\n }\n });\n }\n\n // 不使用事件代理\n else {\n callFn(e, element);\n }\n };\n\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 /**\n * 为元素赋予一个唯一的ID\n * @param element\n * @returns {number|*}\n */\n function getElementId(element) {\n return element._elementId || (element._elementId = _elementId++);\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) {\n\n return handler &&\n (!eventName || handler.e === eventName) &&\n (!func || handler.fn.toString() === func.toString()) &&\n (!selector || handler.sel === selector);\n });\n }\n\n})();\n","(function () {\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 var isQueryStringData = function (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 var appendQuery = function (url, query) {\n return (url + '&' + query).replace(/[&?]{1,2}/, '?');\n };\n\n $.extend({\n\n /**\n * 为 ajax 请求设置全局配置参数\n * @param options\n */\n ajaxSetup: function (options) {\n $.extend(globalOptions, options || {});\n },\n\n /**\n * 发送 ajax 请求\n * @param options\n */\n ajax: function (options) {\n\n // 配置参数\n var defaults = {\n method: 'GET', // 请求方式\n data: false, // 请求的数据,查询字符串或对象\n processData: true, // 是否把数据转换为查询字符串发送,为 false 时不进行自动转换。\n async: true, // 是否为异步请求\n cache: true, // 是否从缓存中读取,只对 GET/HEAD 请求有效,dataType 为 jsonp 时为 false\n username: '', // HTTP 访问认证的用户名\n password: '', // HTTP 访问认证的密码\n headers: {}, // 一个键值对,随着请求一起发送\n xhrFields: {}, // 设置 XHR 对象\n statusCode: {}, // 一个 HTTP 代码和函数的对象\n dataType: 'text', // 预期服务器返回的数据类型 text、json、jsonp\n jsonp: 'callback', // jsonp 请求的回调函数名称\n jsonpCallback: function () { // (string 或 Function)使用指定的回调函数名代替自动生成的回调函数名\n return 'mduijsonp_' + Date.now() + '_' + (jsonpID += 1);\n },\n\n contentType: 'application/x-www-form-urlencoded', // 发送信息至服务器时内容编码类型\n timeout: 0, // 设置请求超时时间(毫秒)\n global: true, // 是否在 document 上触发全局 ajax 事件\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 // 是否已取消请求\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 */\n function triggerCallback(callback) {\n var a = arguments;\n var result1;\n var result2;\n\n if (callback) {\n // 全局回调\n if (callback in globals) {\n result1 = globals[callback](a[1], a[2], a[3], a[4]);\n }\n\n // 自定义回调\n if (options[callback]) {\n result2 = options[callback](a[1], a[2], a[3], a[4]);\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 = 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;\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;\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 (sendData && !isQueryStringData(method) && options.contentType !== false || options.contentType) {\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 =\n /^([\\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 if (isHttpStatusSuccess) {\n\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 var responseData;\n if (options.dataType === 'json') {\n try {\n eventParams.data = responseData = JSON.parse(xhr.responseText);\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 eventParams.data = responseData =\n xhr.responseType === 'text' || xhr.responseType === '' ?\n xhr.responseText :\n xhr.response;\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","/**\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 * ************ 开放的常用方法 ************\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"," /* 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._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 // 所有行都选中后,选中表头;否则,不选中表头\n _this.$thCheckbox[0].checked = _this.selectedRow === _this.$tdRows.length;\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 // 所有行都选中后,选中表头;否则,不选中表头\n _this.$thCheckbox[0].checked = _this.selectedRow === _this.$tdRows.length;\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 */\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 * ************ 涟漪 ************\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 // 字符长度,确保统计方式和 maxlength 一致\n var inputed = value.length + value.split('\\n').length - 1;\n $textField.find('.mdui-textfield-counter-inputed').text(inputed.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 * 初始化文本框\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 * =============================================================================\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.mutation('.mdui-slider', function () {\n reInit($(this));\n });\n\n /**\n * 重新初始化滑块(强制重新初始化)\n */\n mdui.updateSliders = function () {\n $(arguments.length ? arguments[0] : '.mdui-slider').each(function () {\n reInit($(this));\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 = _this.$selectNative.attr('size');\n\n if (!_this.size) {\n _this.size = _this.$items.length;\n if (_this.size > 8) {\n _this.size = 8;\n }\n }\n\n if (_this.size < 2) {\n _this.size = 2;\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 * @type {string}\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(\n dialogHeight -\n ($dialogTitle.height() || 0) -\n ($dialogActions.height() || 0)\n );\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 var hash = location.hash.substring(1);\n if (hash.indexOf('&mdui-dialog') > -1) {\n hash = hash.replace(/&mdui-dialog/g, '');\n }\n\n // 后退按钮关闭对话框\n location.hash = hash + '&mdui-dialog';\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\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 return mdui.dialog({\n title: title,\n content: content,\n buttons: [\n {\n text: options.cancelText,\n bold: false,\n close: true,\n onClick: function (inst) {\n var value = inst.$dialog.find('.mdui-textfield-input').val();\n onCancel(value, inst);\n },\n },\n {\n text: options.confirmText,\n bold: false,\n close: true,\n onClick: function (inst) {\n var value = inst.$dialog.find('.mdui-textfield-input').val();\n onConfirm(value, inst);\n },\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 * ************ 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 mdui.mutation('.mdui-spinner', function () {\n fillHTML(this);\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\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"]}