{"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","nodeName","ele","name","toLowerCase","isFunction","fn","isString","isObject","isObjectLike","isWindow","win","isDocument","doc","nodeType","DOCUMENT_NODE","defaultDisplay","display","elementDisplay","createElement","body","appendChild","getComputedStyle","getPropertyValue","parentNode","removeChild","emptyArray","slice","isArray","Array","documentElement","JQ","_this","selector","els","tempParent","trim","toCreate","innerHTML","childNodes","match","querySelectorAll","getElementById","ready","prototype","extend","options","arguments","contains","parent","node","param","destructure","key","keyTmp","v","encodeURIComponent","args","join","el","get","index","argument","filter","$selector","not","$excludes","offset","getBoundingClientRect","left","pageXOffset","top","pageYOffset","width","height","offsetParent","css","position","parentOffset","show","style","hide","toggle","hasClass","className","classList","removeAttr","attr","removeAttribute","removeProp","e","eq","last","children","is","$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","getAttribute","argLength","k","classes","split","j","cls","Width","Height","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","elementId","getElementId","handlers","useCapture","forEach","event","handler","sel","callFn","_detail","preventDefault","stopPropagation","proxyfn","proxy","_data","target","addEventListener","getHandlers","removeEventListener","_elementId","toString","fnFalse","test","readyState","on","one","origCallback","off","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","removeRipple","$wave","removeTimeout","translate","Ripple","$ripple","button","tmp","touchStartX","pageX","touchStartY","pageY","center","x","y","innerHeight","innerWidth","diameter","pow","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","readjustMenu","transformOriginY","menuMarginTop","windowHeight","selectHeight","$menuItemFirst","$items","menuItemHeight","menuItemMargin","menuWidth","menuHeight","size","selectTop","heightTemp","selectedIndex","menuMarginTopMax","menuTop","$menu","margin-top","transform-origin","option","textContent","selected","$selected","itemData","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","title","content","buttons","stackedButtons","cssClass","onOpen","onOpened","onClose","onClosed","DEFAULT_BUTTON","bold","onClick","buttonsHTML","HTML","alert","onConfirm","confirmText","confirm","onCancel","cancelText","prompt","label","defaultValue","confirmOnEnter","Tooltip","marginLeft","marginTop","targetProps","targetMargin","tooltipWidth","$tooltip","offsetWidth","tooltipHeight","offsetHeight","targetOffset","margin-left","oldOpts","html","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","readjustSubmenu","$submenu","submenuTop","submenuLeft","submenuWidth","submenuHeight","itemTmp","itemWidth","itemHeight","itemLeft","itemTop","openSubMenu","closeSubMenu","$subSubmenu","toggleSubMenu","$tmpSubmenu","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"]}