{"version":3,"sources":["layui.js","modules/layui.all.js","modules/lay.js","modules/laytpl.js","modules/laypage.js","modules/laydate.js","modules/jquery.js","modules/layer.js","modules/util.js","modules/dropdown.js","modules/slider.js","modules/colorpicker.js","modules/element.js","modules/upload.js","modules/form.js","modules/table.js","modules/treeTable.js","modules/tree.js","modules/transfer.js","modules/carousel.js","modules/rate.js","modules/flow.js","modules/code.js"],"names":["win","jsPath","doc","document","config","modules","status","timeout","event","Layui","this","v","GLOBAL","LAYUI_GLOBAL","getPath","currentScript","src","js","scripts","last","length","i","readyState","dir","substring","lastIndexOf","error","msg","type","console","isOpera","opera","toString","builtin","lay","layer","laydate","laypage","laytpl","form","upload","dropdown","transfer","tree","table","treeTable","element","rate","colorpicker","slider","carousel","flow","util","code","jquery","all","layui.all","EV_REMOVE","prototype","cache","define","deps","factory","use","setApp","app","exports","layui","callback","apps","from","node","url","that","head","getElementsByTagName","item","jQuery","fn","on","each","index","splice","$","onScriptLoad","e","readyRegExp","navigator","platform","test","currentTarget","srcElement","removeChild","poll","onCallback","setTimeout","push","slice","apply","host","match","location","base","replace","createElement","async","charset","version","Date","getTime","appendChild","attachEvent","indexOf","addEventListener","disuse","isArray","getStyle","name","style","currentStyle","getComputedStyle","getPropertyValue","link","href","cssname","id","STAUTS_NAME","debug","rel","media","getElementById","getLinkElem","parseInt","removeAttribute","getAttribute","setAttribute","addcss","firename","modName","img","Image","complete","onload","onerror","options","key","o","clone","extend","router","hash","data","path","search","split","obj","pathname","_index","substr","settings","storage","localStorage","JSON","parse","value","remove","stringify","sessionData","sessionStorage","device","agent","userAgent","toLowerCase","getVersion","label","exp","RegExp","result","os","ie","ActiveXObject","weixin","android","ios","mobile","hint","_typeof","operand","String","Object","call","_isArray","len","callFn","sort","arr","desc","notClone","o1","o2","v1","v2","isNaN","isNum","reverse","stope","thisEvent","stopPropagation","cancelBubble","onevent","events","params","filter","eventName","filterName","_","off","debounce","func","wait","context","args","arguments","clearTimeout","throttle","cooldown","window","selector","Class","elem","querySelectorAll","Array","searchElement","fromIndex","rst","val","constructor","ai","target","digit","num","str","Math","pow","elemName","attr","hasScrollbar","body","scrollHeight","innerHeight","documentElement","clientHeight","getStyleRules","rules","sheet","styleSheet","cssRules","styleText","text","cssText","innerHTML","styleElem","find","append","position","opts","scrollArea","winArea","margin","top","offsetX","offsetY","rect1","clickType","rect","left","clientX","clientY","right","bottom","getBoundingClientRect","elemWidth","offsetWidth","elemHeight","offsetHeight","align","allowBottomOut","offset","SYSTEM_RELOAD","othis","attrName","attrValue","Function","ev","errorText","join","isTopElem","topElems","matched","clipboard","writeText","legacyCopy","opacity","select","execCommand","done","err","then","passiveSupported","defineProperty","get","removeEventListener","touchEventsSupported","touchSwipe","state","onMove","onEnd","targetElem","pointerStart","x","y","pointerEnd","distanceX","distanceY","direction","timeStart","onStart","touches","passive","now","onTouchStart","preventDefault","abs","onTouchMove","onTouchEnd","__lay_touchswipe_cb_","addEvent","eventsCacheName","listener","include","_rawFn","removeEvent","newEvents","detachEvent","onClickOutside","handler","eventType","scopeTarget","scope","ignore","useCapture","capture","el","eventTarget","eventPath","composedPath","undefined","concat","getParents","memo","parentNode","shouldIgnore","targetElements","j","targetEl","addStr","new_str","ii","removeStr","isObject","children","contains","child","addClass","className","removeClass","hasClass","has","css","parseValue","thisKey","thisValue","width","height","removeAttr","html","open","close","tool","escape","inner","source","template","tagExp","__","jss","jsse","tag","start","render","DISABLED","view","elemArr","countText","plate","groups","Number","layout","count","curr","limits","limit","pages","ceil","prev","next","views","page","pager","first","halve","floor","end","max","theme","def","limitTemplet","refresh","skip","skipText","jump","isskip","childs","btn","input","nodeName","keyCode","load","even","isLayui","ready","MOD_NAME","MOD_ID","weekStart","laydate_dir","set","thisModule","inst","content","reload","THIS","LIMIT_YEAR","ELEM_STATIC","ELEM_LIST","ELEM_SELECTED","ELEM_HINT","ELEM_PREV","ELEM_NEXT","ELEM_CONFIRM","ELEM_TIME_TEXT","ELEM_TIME_BTN","ELEM_PREVIEW","ELEM_SHADE","newThat","getThis","init","dateType","formatArr","format","isLeapYear","year","range","isInitValue","min","trigger","show","showBottom","isPreview","btns","lang","calendar","mark","holidays","zIndex","change","autoConfirm","shade","cn","weeks","time","timeTips","startTime","endTime","dateTips","month","tools","confirm","clear","invalidDate","formatError","preview","en","markerOfChineseFestivals","0-1-1","0-2-14","0-3-8","0-3-12","0-4-1","0-5-1","0-5-4","0-6-1","0-9-10","0-10-1","0-12-25","isStatic","date","datetime","eventElem","fullPanel","rangeStr","rangeLinked","autoCalendarModel","startDate","endDate","auto","rangeElem","EXP_IF","EXP_SPLIT","EXP","EXP_IF_ONE","isInput","ymd","hms","day","tDate","newDate","getFullYear","getMonth","getDate","hours","minutes","seconds","thisDate","getHours","getMinutes","getSeconds","elemID","formatToDisplay","setValue","systemDate","themeStr","shortcutBtns","colorTheme","class","elemMain","elemHeader","elemCont","elemTable","divFooter","footer","divShortcut","shortcut","divHeader","headerChild","spanY","spanM","divContent","thead","theadTr","tr","insertRow","th","insertCell","insertBefore","ELEM_MAIN","title","shortcuts","btnSetting","dataset","timeBtn","dateTime","endState","listYM","checkDate","click","main","isPrimaryColor","thisElemDate","thisId","insertAdjacentHTML","changeEvent","renderAdditional","div","hinTimer","ms","getAsYM","Y","M","thisMaxDate","vals","arrDate","minMaxError","checkValid","getEndDate","initDate","startEnd","thisv","parseFloat","EYM","_i","_v","getDateTime","markRender","tdElem","YMD","markers","markText","keys","td","holidaysRender","insertHtml","idx","dayStr","ymdStr2","ymd1","ymd2","ymdStr1","cellRender","dateObj","panelMode","originElem","startOfYear","setFullYear","setHours","endOfYear","startOfMonth","setDate","endOfMonth","addDays","amount","isDisabledYearOrMonth","startDay","endDay","numOfDays","disabledCount","disabledDate","isDisabledDate","rangeType","disabledType","normalizedDate","isDisabledTime","isDisabledItem","disabledTime","compareVal","rangeFn","rangeFnParam","isDisabledDateTime","timestamp","isOut","thisDateTime","startWeek","prevMaxDate","isAlone","tds","elemYM","firstDate","getDay","index_","st","panelYM","list","setBtnStatus","timeParams","stampRange","yearNum","setTimeStatus","showHour","liElem","hideCount","scroll","haveSpan","ul","haveList","isCN","startY","li","lay-ym","ol","childUL","showMinute","showSecond","isShow","ym","closeList","choose","span","scrollTop","olElem","overflowY","touchAction","tips","elemBtn","displayValueCallback","props","getOwnPropertyDescriptor","HTMLInputElement","displayValue","elemPreview","color","thisTime","param","checkPanelDate","panelMonth","startPanel","firstRenderIndex","needFullRender","panelIndex","isChange","dateTimeTemp","renderMode","checkState","panelIdx","active","addSubYear","isYear","isMonth","prevYear","prevMonth","YM","nextMonth","nextYear","header","layYM","layType","tagName","toLocaleLowerCase","showEvent","eventHandler","unbind","run","closeStop","getInst","one","amd","global","module","w","Error","noGlobal","deletedIds","class2type","hasOwn","hasOwnProperty","support","rtrim","rmsPrefix","rdashAlpha","fcamelCase","letter","toUpperCase","isArrayLike","isWindow","toArray","pushStack","elems","ret","merge","prevObject","map","eq","copyIsArray","copy","deep","isFunction","isPlainObject","expando","random","isReady","noop","isNumeric","realStringObj","isEmptyObject","nodeType","ownFirst","globalEval","trim","execScript","camelCase","string","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","proxy","tmp","Symbol","iterator","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","newSelector","newContext","ownerDocument","exec","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","shift","markFunction","assert","addHandle","attrs","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createPositionalPseudo","argument","matchIndexes","parent","defaultView","createComment","getById","getElementsByName","attrId","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","hasCompare","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","not","matcher","unmatched","innerText","elemLang","root","focus","activeElement","hasFocus","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","button","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","matcherIn","matcherOut","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","rparentsprev","charAt","parseHTML","guaranteedUnique","contents","sibling","targets","closest","l","pos","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","readyList","rnotwhite","detach","completed","Callbacks","object","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","disable","lock","fireWith","Deferred","tuples","promise","always","deferred","fail","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","values","notifyWith","resolveWith","readyWait","holdReady","hold","triggerHandler","doScroll","frameElement","doScrollCheck","inlineBlockNeedsLayout","container","zoom","deleteExpando","shrinkWrapBlocksVal","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","internalKey","isNode","toJSON","thisCache","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","defer","shrinkWrapBlocks","pnum","rcssNum","cssExpand","isHidden","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","col","_default","getAll","found","setGlobalEval","refElements","optgroup","tfoot","colgroup","caption","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","types","origFn","t","handleObjIn","special","eventHandle","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","handleObj","namespace","delegateCount","setup","mappedTypes","origCount","teardown","onlyHandlers","ontype","bubbleType","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","isImmediatePropagationStopped","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","metaKey","original","which","charCode","eventDoc","fromElement","pageX","scrollLeft","clientLeft","pageY","clientTop","relatedTarget","toElement","blur","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","fragmentDiv","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","domManip","collection","hasScripts","iNoClone","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","fixCloneNodeIssues","defaultSelected","forceAcceptData","prepend","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","rmargin","rnumnonpx","swap","old","computeStyleTests","divStyle","marginLeft","marginRight","getClientRects","borderCollapse","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","getStyles","curCSS","rposition","addGetHookIf","conditionFn","hookFn","opener","computed","maxWidth","minWidth","rs","rsLeft","runtimeStyle","pixelLeft","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","cssProps","float","origName","isFinite","$1","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","propHooks","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","tick","currentTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","timer","anim","*","tweener","oldfire","dataShow","unqueued","overflow","overflowX","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","rspaces","valHooks","optionSet","nodeHook","boolHook","ruseDefault","getSetInput","rfocusable","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rclickable","rclass","removeProp","tabindex","for","getClass","classes","clazz","finalValue","curValue","toggleClass","stateVal","classNames","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","rhash","requireNonComma","depth","comma","parseXML","DOMParser","parseFromString","loadXML","rts","rheaders","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxConvert","s","response","isSuccess","conv2","current","conv","converters","responseFields","dataFilter","filterHidden","lastModified","etag","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","firstDataType","ct","finalDataType","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","buildParams","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","XMLHttpRequest","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","scriptCharset","oldCallbacks","rjsonp","_load","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","getWindow","animated","setOffset","curCSSTop","curTop","curOffset","curCSSLeft","curElem","curLeft","curPosition","using","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","delegate","undelegate","size","andSelf","layer_dir","removeFocus","beforeEnd","resize","minStackIndex","minStackArr","STATUS_NAME","alert","yes","cancel","btn2","rskin","skin","doms","closeBtn","icon","follow","fixed","setings","creat","pt","SHADE_KEY","0","1","2","3","4","5","6","slideLeft","slideRight","SHADE","MOVE","RECORD_HEIGHT_KEY","move","isOutAnim","minStack","moveType","scrollbar","vessel","conType","times","titype","ismax","maxmin","titleHTML","face","animClass","additFaceClass","btnAlign","layero","elemShade","setAnim","restore","hideOnClose","closeAll","tipsMore","moveElem","shadeo","setScrollbar","background-color","transition","innerWidth","outerWidth","titHeight","outerHeight","btnHeight","setHeight","maxHeight","offsetTop","offsetLeft","layArea","goal","tipsG","guide","autoLeft","tipLeft","where","tipTop","padding-right","_DOC","DATA_NAME","resizeElem","dict","eventMoveElem","eventResizeElem","docEvent","setRig","setBot","X","stX","stY","moveOut","resizing","moveEnd","btnLoading","btnElem","isLoading","openLayer","IE6","btnCallback","btnAsync","loading","promiseLikeResolve","reason","shadeClose","full","reselect","sthis","setTop","record","contentElem","contentRecordHeightElem","restScrollbar","removeProperty","getChildFrame","getFrameIndex","iframeAuto","heg","iframeSrc","elemMin","hasMinLeft","maxminStatus","minLeft","edgeIndex","contentRecordHeight","isfix","executor","closeAnim","WRAP","domsElem","closeLast","layerIndexMax","layerIndexList","isArrayType","prompt","placeholder","formType","maxlength","tab","photos","loop","toolbar","imgIndex","pushData","alt","pid","thumb","imgprev","tabimg","imgnext","errorMsg","keyup","isNumber","getTransform","transforms","rotate","scaleX","touchEndCallback","imgElem","transform","ratio","delta","wheelDelta","detail","zoomElem","threshold","loadi","loadImage","winarea","imgarea","wh","_$","isMobile","_win","propSuffix","deliver","fixbar","elemTopBar","setTopBar","ELEM","$doc","$target","bars","default","$scroll","bar1","bar2","elemBar","lay-type","bgcolor","countdown","clock","countTime","d","h","setTime","timeAgo","onlyDate","stamp","toDateString","years","days","milliseconds","meridiem","getMilliseconds","customMeridiem","hm","yy","yyyy","MM","dd","H","HH","hh","A","mm","ss","SSS","unescape","openWin","specs","toVisibleArea","scrollElem","SCROLL_NAME","OFFSET_NAME","scrollValue","scrollOffset","thisOffset","thisElem","vertical","callbacks","attrSelector","DATANAME","dataCache","_WIN","ELEM_LI","clickOrMousedown","MOD_INDEX","customName","reloadData","STR_ELEM","STR_ITEM_UP","STR_ITEM_DOWN","STR_MENU_TITLE","STR_ITEM_GROUP","STR_ITEM_PARENT","STR_ITEM_CHECKED","STR_ITEM_CHECKED2","STR_MENU_PANEL","STR_MENU_PANEL_L","STR_ELEM_SHADE","STR_GROUP_TITLE","isAllowSpread","isSpreadItem","accordion","rerender","elemView","elemBody","getDefaultView","elemUl","eachItemView","isChild","templet","group","-","viewLi","viewText","elemPanel","TPL_MAIN","delayRemove","prevElem","isClickAllScope","clickScope","elemGroup","spread","prevTriggerElem","prevInstance","prevOnClose","prevContentElem","prevId","normalizedDelay","isMouseEnter","prevElemCallback","isAccordion","needSpread","groupSibs","ELEM_LI_PAR","dataParams","SLIDER_BAR","SLIDER_WRAP","SLIDER_WRAP_BTN","SLIDER_TIPS","SLIDER_INPUT_TXT","ELEM_HOVER","showstep","tipsAlways","precision","precisions","decimalArr","minValue","maxValue","scaleFir","scaleSec","hasRender","elemTemp","number","setSliderTipsTxt","sliderWrapBtnElem","tipsTxt","setTips","calcSliderTipsLeft","sliderWidth","sliderWrap","setSliderTipsLeft","margin-bottom","elemInput","slide","sliderAct","sliderTxt","inputValue","offsetValue","round","arrValue","firLeft","valueTo","secLeft","wrapWidth","selfValue","toFixed","oldLeft","elemMove","sliderBtnElem","up","upCall","oldleft","oldx","reaLeft","inputScale","getInputValue","realValue","ICON_PICKER_DOWN","ICON_PICKER_CLOSE","PICKER_TRIG_SPAN","PICKER_TRIG_I","PICKER_SIDE_SLIDER","PICKER_BASIS","PICKER_ALPHA_BG","PICKER_ALPHA_SLIDER","PICKER_BASIS_CUR","PICKER_INPUT","RGBToHSB","rgb","hsb","r","g","HSBToRGB","t1","t3","t2","HSBToHEX","hex","nr","RGBSTo","rgbs","re","$win","alpha","predefine","colors","elemColorBox","bgstr","background","renderPicker","elemPicker","removePicker","thisElemInd","thisColor","pickerEvents","bindElem","elemPickerInput","backgroundColor","side","basis","alphacolor","alphaslider","_h","_b","_s","_a","pre","z","createMoveElem","needTrigger","needStopPropagation","triggerEvent","oldtop","oldy","maxh","maxw","simulatedEvent","pointer","createEvent","initMouseEvent","screenX","screenY","dispatchEvent","sidetop","basisElem","elemColorBoxSpan","colorValue","attrEvent","SHOW","TITLE","Element","NAV_ELEM","tabAdd","layAttr","tabElem","titElem","barElem","contElem","tabChange","tabAuto","tabDelete","layid","force","tabClick","dom","headerElem","NAV_ITEM","NAV_BAR","NAV_TREE","NAV_CHILD","NAV_MORE","NAV_ANIM","bodyElem","elemA","isJump","unselect","hasId","liThis","MORE","BAR","CLOSE","STOPE","allowclose","isSpread","hideTabMore","tsbTitle","clickThis","NAV_ITEMED","needExpand","parentSibs","collapse","isNone","elemFilter","items","nav","timerMore","timeEnd","NAV_TITLE","bar","itemElem","thisA","breadcrumb","ATTE_SPR","separator","aNode","elemTitle","files","ELEM_FILE","ELEM_FORM","ELEM_IFRAME","ELEM_CHOOSE","UPLOADING","accept","exts","bindAction","field","acceptMime","drag","multiple","cross-domain","data-format-error","check-error","limit-number","limit-size","elemFile","isFile","initIE","elemForm","FileReader","chooseFiles","reader","readAsDataURL","limitSize","getFiles","ajaxSend","successful","failed","allDone","fileLength","total","request","sets","formData","FormData","resetFileState","unified","res","lengthComputable","loaded","iframeSend","iframeBody","forceConvert","convert","thisFile","pushFile","resetFile","filename","newFile","File","getChooseFiles","typeName","images","video","audio","setChooseFile","setChooseText","checkFile","extendInfo","extInfo","ext","sizes","parseSize","FileList","dataTransfer","formatSize","log","HIDE","Form","verify","required","phone","email","identity","autocomplete","getFormElem","itemForm","getValue","nameIndex","fieldElem","init_name","inputs","handleInputNumber","rawValue","noAction","isInit","decimals","controlBtn","increment","decrement","affix","CLASS_WRAP","CLASS_SUFFIX","CLASS_AFFIX","showAffix","renderAffix","affixOptions","elemAffix","elemIcon","hasElemAffix","hasElemSuffix","inputFilter","eye","SHOW_NAME","TIPS","NONE","CREATE_OPTION","PANEL_ELEM_DATA","selects","reElem","titleElem","isSearch","isCreatable","isAppendTo","removeClickOutsideEvent","laySearch","appendTarget","appendPosition","needPlaceholderPatch","showDown","hideDown","followScroll","notOption","dl","dts","initValue","caseSensitive","updatePosition","dlHeight","dds","__ieph","none","posTop","thisDd","ddHeight","setThisDd","prevNext","lastIndex","allDisplayedElem","nextIndex","origin","fuzzyMatchRE","hasEquals","fuzzy","keyword","wordMap","regexPattern","wordArr","c","isCreateOption","thisDds","firstOptionELem","hasTips","createOptionElem","ddElem","optionElem","optionsFirst","contentWrapElem","triggerElem","panelWrapElem","switch","SUBTRA","checks","RE_CLASS","titleTplAttrs","titleTplElem","indeterminate","isSwitch","isPrimary","syncAppearanceOnPropChanged","ICON","radios","ANIM","sameRadios","radioEl","renderItem","itemType","originProps","newValue","validate","intercept","DANGER","vers","verType","thisVer","rule","verst","isForm2Elem","layFilter","verifyElem","$dom","checkName","indexName","numbersName","disabledName","thisTable","setColsWidth","getThisTable","getThisTableConfig","parseTempData","item3","tplData","exportTemplet","LAY_COL","HIDE_V","ELEM_VIEW","ELEM_HEADER","ELEM_BODY","ELEM_FIXR","ELEM_PAGE_VIEW","ELEM_SORT","ELEM_CHECKED","ELEM_EDIT","ELEM_GROUP","ELEM_COL_SPECIAL","ELEM_TOOL_PANEL","ELEM_EXPAND","DISABLED_TRANSITION","DATA_MOVE_NAME","TPL_HEADER","TPL_BODY","eachChildCols","cellMinWidth","cellMaxWidth","MAX_VALUE","editTrigger","defaultToolbar","defaultContextmenu","autoSort","cols","pageName","limitName","statusName","msgName","dataName","totalRowName","countName","pullData","setInit","fullHeightGap","parentDiv","parentHeightGap","customHeightFunc","lay-filter","renderStyle","layTool","layBox","layHeader","layMain","layBody","layFixed","layFixLeft","layFixRight","layTotal","layPage","renderToolbar","renderPagebar","fullSize","initOpts","space","unresize","numbers","getWidth","clientWidth","initChildCols","i1","item1","i2","item2","indexChild","childIndex","colspan","rowspan","colGroup","i22","item22","HAS_PARENT","parentKey","lineStyle","trClassName","cellMaxHeight","iconElem","leftDefaultTemp","elemToolTemp","defaultConfig","toolbarHtml","layEvent","onClick","lis","openPanel","eachCols","fieldTitle","setParentCol","panel","exportFile","print","printWin","thElem","edg","onafterprint","itemIsName","thisItem","pagebarHtml","layPagebar","pagebar","parentTh","parentColspan","arrParentKey","getThisCol","colspan2","nextParentKey","setColsPatch","setGroupWidth","getEndTh","colNums","autoColNums","autoWidth","countWidth","cntrWidth","getAutoWidth","getScrollWidth","back","patchNums","i3","headerWidth","scrollPatch","haveInit","HAS_SET_COLS_PATCH","errorView","elemNone","layNone","syncCheckAll","renderForm","startLimit","initSort","reloadType","renderData","totalRow","parseData","newData","getTrHtml","trsObj","trs","trs_fixed","trs_fixed_r","tds_fixed","tds_fixed_r","LAY_KEY","edit","trAttr","totalRowData","sortKey","pull","scrollPos","tipsIndex","renderTotal","totalNums","dataTotal","TOTAL_NUMS","totalRowDecimals","thisTotalNum","totalRowText","getContent","TOTAL_ROW","patchElem","getColElem","renderFormByElem","checkAllElem","checkStatus","isAll","setRowActive","setRowChecked","makeMap","thisData","existChecked","getChecked","radioCheckedIndex","fixRElem","isCheckAll","isCheckMult","isCheckAllOrMult","dataIndex","checkedSameElem","checkedElem","_field","elemSort","fromEvent","selectorText","headerMain","thIndex","bodyHeight","layMainTable","scrollWidth","outWidth","addPatch","fixHeight","updateRow","ELEM_CELL","row","cell","_BODY","commonMember","oLeft","pLeft","allowResize","ruleWidth","thatTable","setWidth","nowType","clearCacheKey","del","update","fields","setRowEvent","getCol","UNROW","renderGridEdit","editType","ELEM_GRID_DOWN","oldValue","reedit","showGridExpandIcon","elemCell","gridExpand","expandedMode","ELEM_CELL_C","elemCellClose","cellExpandedMode","expandedWidth","cellExpandedWidth","$this","toolFn","errorTips","tdIndex","attrData","tableData","trElem","itemData","tableIns","CHILD_COLS","PARENT_COL_INDEX","arrs","eachArrs","nums","invalidNum","getData","textType","csv","xls","alink","dataTitle","dataMain","fieldsIsHide","isTreeTable","reduce","acc","ignoreExport","download","getOptions","hideCol","thisTreeTable","ELEM_FIXL","TABLE_TREE","LAY_DATA_INDEX","LAY_DATA_INDEX_HISTORY","LAY_PARENT_INDEX","LAY_CHECKBOX_HALF","LAY_EXPAND","LAY_HAS_EXPANDED","LAY_ASYNC_STATUS","LAY_CASCADE","HTML_TAG_RE","ICON_PROPS","updateCache","childrenKey","tableCache","itemDataIndex","updateOptions","thatOptionsTemp","treeOptions","idKey","hasNumberCol","hasChecboxCol","hasRadioCol","scrollTopCache","mod","parseDataThat","retData","isSimpleData","enable","flatToTree","updateStatus","initData","renderType","isRenderData","tableView","isExpandAll","layTableAllChooseElem","renderTreeTable","iconProp","normalizedIcon","cascade","isParent","indent","flexIconClose","flexIconOpen","showIcon","iconClose","iconOpen","iconLeaf","showFlexIconIfNotParent","dblClickExpand","expandAllDefault","rootPid","autoParam","beforeExpand","onExpand","iconStr","pIdKey","idTemp","pidTemp","rootNodes","tableId","flatArr","tempObj","treeToFlat","parentId","parentIndex","flat","dataNew","getTreeNode","getParentNode","getNodeByIndex","treeNode","treeNodeData","getNodeDataByIndex","updateNode","removeNode","expandNode","setChecked","getNodeById","tableDataFlat","dataRet","indexArr","getTableData","isParentKey","debounceFn","expandFlag","sonSign","callbackFlag","tableViewElem","treeTableThat","trData","isToggle","trExpand","retValue","trExpanded","trsElem","flexIconElem","trDataId","updateNodeIcon","scopeEl","isExpand","array","asyncSuccessFn","asyncContentType","asyncDataType","asyncJsonpCallback","asyncHeaders","asyncParseData","asyncResponse","str2","str2Obj","dataLevelNew","asyncSetting","asyncUrl","asyncAutoParam","itemArr","asyncType","childItem","data-index","lay-data-index","data-level","childNodesFlat","formatNumber","inherit","expandAll","isAllAsyncDone","isAllExpanded","trAll","trAllObj","dataItem","dataLevel","nodeIconElem","nodeIcon","level","treeOptionsView","dataExpand","nameKey","htmlTemp","itemCell","trIndex","trDefaultExpand","trMain","trFixedL","trFixedR","statusObj","notCascade","dataUpdated","updateObjParams","rowIndex","tableThat","updateFn","checkNode","newNode","trLevel","newNodeTemp","trNew","_keepParent","delNode","nodeP","delNodesFlat","updateCheckStatus","delNodeDataIndex","i4","item4","trEl","addNodes","newNodes","childKey","childrenNodes","dataAfter","childrenNodesFlat","pageOptions","newNodesHtml","newNodesHtmlObj","trIndexPrev","newNodeIndex","newNodeItem","tableViewElemMAIN","tableViewElemFIXL","tableViewElemFIXR","trIndexNext","scrollIntoViewIfNeeded","includeHalfCheck","checkedData","updateData","setRowCheckedClass","dataP","trsP","isIndeterminate","updateParentCheckStatus","indexP","itemP","checkboxElem","checkedNum","inputElem","isRadio","trDataP","radioElem","collectNeedExpandNodeIndex","needExpandIndex","nodeData","checkAllNodes","reloadAsyncNode","dataId","getNodesByFilter","isSingle","nodesResult","ELEM_SET","ICON_CLICK","ICON_ADD","ICON_SUB","ELEM_ENTRY","ELEM_TEXT","ELEM_PACK","ELEM_SPREAD","ELEM_LINE_SHORT","ELEM_SHOW","ELEM_EXTEND","showCheckbox","showLine","onlyIconControl","defaultNodeName","checkids","editIcon","hasChild","packDiv","entryDiv","checkClick","operate","entry","elemCheckbox","elemText","touchOpen","packCont","iconClick","updateFieldValue","sibls","setCheckbox","setParentsChecked","thisNodeElem","parentNodeElem","parentCheckbox","parentPack","oncheck","getVal","returnObj","textNew","elemDel","pare","siblingTree","parentTree","prevDiv","pack","onsearch","checkId","checkData","eachNodes","index2","cloneItem","checkedId","reInput","ELEM_BOX","ELEM_SEARCH","ELEM_DATA","TPL_BOX","checkAllName","showSearch","searchNone","layData","layBtn","listElem","renderCheckBtn","thisDataElem","allElemCheckbox","listElemCheckbox","haveChecked","isHide","stopNone","noneView","createNoneElem","selectedData","thisElemCheckbox","thisBoxElem","siblingInput","thisList","onchange","elemThis","dblclick","thisListElem","isMatch","ELEM_LEFT","ELEM_RIGHT","ELEM_ARROW","ELEM_IND","arrow","indicator","autoplay","elemItem","prevIndex","addIndex","subIndex","itemsCount","tplArrow","goto","tplInd","elemInd","thisIndex","haveSlide","touchEl","isVertical","distance","ICON_RATE","ICON_RATE_SOLID","ICON_RATE_HALF","ICON_SOLID_HALF","ICON_HALF_RATE","readonly","half","setText","action","setvalue","_ul","wide","liElems","ind","score","itemElemWidth","remainder","isActiveIcon","needSelect","shouldHalfIcon","Flow","isOver","lazyimg","isAuto","moreText","isTop","notDocument","more","mb","_cleanup","over","scrollHeightStart","scrollTopStart","scrollHeightEnd","isLazyimg","elemTop","CONST","ELEM_TAB","ELEM_FULL","ELEM_ITEM","ELEM_LINE","ELEM_LINE_NUM","ELEM_LN_MODE","CDDE_DATA_CLASS","LINE_RAW_WIDTH","about","ln","encode","wordWrap","highlighter","langMarker","codeIndex","mode","rawCode","finalCode","isIframePreview","elemHeaderView","elemToolbar","runPreview","codeElem","createCodeRst","lines","setCodeLayout","elemFixbar","copyElem","reloadCode","obverse","codeRender","createCode","line","codeParse","hasDataClass","onCopy","elemViewHas","elemTabHas","elemPreviewViewHas","FILTER_VALUE","elemTabView","elemPreviewView","classNameFull","classNameRestore","htmlElem","ELEM_SCROLLBAR_HIDE","oi","parameters","toolsEvent","addTools","viso","thisItemBody","srcdoc","previewStyle","elemItemBody","codeStyle","multiLine"],"mappings":"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","file":"layui.js","sourcesContent":["/**\n * Layui\n * Classic modular front-end UI library\n * MIT Licensed\n */\n\n;!function(win){\n \"use strict\";\n\n var doc = win.document;\n var config = {\n modules: {}, // 模块物理路径\n status: {}, // 模块加载状态\n timeout: 10, // 符合规范的模块请求最长等待秒数\n event: {} // 模块自定义事件\n };\n\n var Layui = function(){\n this.v = '2.9.16'; // Layui 版本号\n };\n\n // 识别预先可能定义的指定全局对象\n var GLOBAL = win.LAYUI_GLOBAL || {};\n\n // 获取 layui 所在目录\n var getPath = function(){\n var jsPath = doc.currentScript ? doc.currentScript.src : function(){\n var js = doc.scripts;\n var last = js.length - 1;\n var src;\n for(var i = last; i > 0; i--){\n if(js[i].readyState === 'interactive'){\n src = js[i].src;\n break;\n }\n }\n return src || js[last].src;\n }();\n\n return config.dir = GLOBAL.dir || jsPath.substring(0, jsPath.lastIndexOf('/') + 1);\n }();\n\n // 异常提示\n var error = function(msg, type){\n type = type || 'log';\n win.console && console[type] && console[type]('layui error hint: ' + msg);\n };\n\n var isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]';\n\n // 内置模块\n var modules = config.builtin = {\n lay: 'lay', // 基础 DOM 操作\n layer: 'layer', // 弹层\n laydate: 'laydate', // 日期\n laypage: 'laypage', // 分页\n laytpl: 'laytpl', // 模板引擎\n form: 'form', // 表单集\n upload: 'upload', // 上传\n dropdown: 'dropdown', // 下拉菜单\n transfer: 'transfer', // 穿梭框\n tree: 'tree', // 树结构\n table: 'table', // 表格\n treeTable: 'treeTable', // 树表\n element: 'element', // 常用元素操作\n rate: 'rate', // 评分组件\n colorpicker: 'colorpicker', // 颜色选择器\n slider: 'slider', // 滑块\n carousel: 'carousel', // 轮播\n flow: 'flow', // 流加载\n util: 'util', // 工具块\n code: 'code', // 代码修饰器\n jquery: 'jquery', // DOM 库(第三方)\n\n all: 'all',\n 'layui.all': 'layui.all' // 聚合标识(功能性的,非真实模块)\n };\n\n // 记录基础数据\n Layui.prototype.cache = config;\n\n // 定义模块\n Layui.prototype.define = function(deps, factory){\n var that = this;\n var type = typeof deps === 'function';\n var callback = function(){\n var setApp = function(app, exports){\n layui[app] = exports;\n config.status[app] = true;\n };\n typeof factory === 'function' && factory(function(app, exports){\n setApp(app, exports);\n config.callback[app] = function(){\n factory(setApp);\n }\n });\n return this;\n };\n\n type && (\n factory = deps,\n deps = []\n );\n\n that.use(deps, callback, null, 'define');\n return that;\n };\n\n // 使用特定模块\n Layui.prototype.use = function(apps, callback, exports, from){\n var that = this;\n var dir = config.dir = config.dir ? config.dir : getPath;\n var head = doc.getElementsByTagName('head')[0];\n\n apps = function(){\n if(typeof apps === 'string'){\n return [apps];\n }\n // 当第一个参数为 function 时,则自动加载所有内置模块,且执行的回调即为该 function 参数;\n else if(typeof apps === 'function'){\n callback = apps;\n return ['all'];\n }\n return apps;\n }();\n\n // 如果页面已经存在 jQuery 1.7+ 库且所定义的模块依赖 jQuery,则不加载内部 jquery 模块\n if(win.jQuery && jQuery.fn.on){\n that.each(apps, function(index, item){\n if(item === 'jquery'){\n apps.splice(index, 1);\n }\n });\n layui.jquery = layui.$ = jQuery;\n }\n\n var item = apps[0];\n var timeout = 0;\n\n exports = exports || [];\n\n // 静态资源host\n config.host = config.host || (dir.match(/\\/\\/([\\s\\S]+?)\\//)||['//'+ location.host +'/'])[0];\n\n // 加载完毕\n function onScriptLoad(e, url){\n var readyRegExp = navigator.platform === 'PLaySTATION 3' ? /^complete$/ : /^(complete|loaded)$/\n if (e.type === 'load' || (readyRegExp.test((e.currentTarget || e.srcElement).readyState))) {\n config.modules[item] = url;\n head.removeChild(node);\n (function poll() {\n if(++timeout > config.timeout * 1000 / 4){\n return error(item + ' is not a valid module', 'error');\n }\n config.status[item] ? onCallback() : setTimeout(poll, 4);\n }());\n }\n }\n\n // 回调\n function onCallback(){\n exports.push(layui[item]);\n apps.length > 1 ?\n that.use(apps.slice(1), callback, exports, from)\n : ( typeof callback === 'function' && function(){\n // 保证文档加载完毕再执行回调\n if(layui.jquery && typeof layui.jquery === 'function' && from !== 'define'){\n return layui.jquery(function(){\n callback.apply(layui, exports);\n });\n }\n callback.apply(layui, exports);\n }() );\n }\n\n // 如果引入了聚合板,内置的模块则不必重复加载\n if( apps.length === 0 || (layui['layui.all'] && modules[item]) ){\n return onCallback(), that;\n }\n\n /*\n * 获取加载的模块 URL\n * 如果是内置模块,则按照 dir 参数拼接模块路径\n * 如果是扩展模块,则判断模块路径值是否为 {/} 开头,\n * 如果路径值是 {/} 开头,则模块路径即为后面紧跟的字符。\n * 否则,则按照 base 参数拼接模块路径\n */\n\n var url = ( modules[item] ? (dir + 'modules/')\n : (/^\\{\\/\\}/.test(that.modules[item]) ? '' : (config.base || ''))\n ) + (that.modules[item] || item) + '.js';\n url = url.replace(/^\\{\\/\\}/, '');\n\n // 如果扩展模块(即:非内置模块)对象已经存在,则不必再加载\n if(!config.modules[item] && layui[item]){\n config.modules[item] = url; // 并记录起该扩展模块的 url\n }\n\n // 首次加载模块\n if(!config.modules[item]){\n var node = doc.createElement('script');\n\n node.async = true;\n node.charset = 'utf-8';\n node.src = url + function(){\n var version = config.version === true\n ? (config.v || (new Date()).getTime())\n : (config.version||'');\n return version ? ('?v=' + version) : '';\n }();\n\n head.appendChild(node);\n\n if(node.attachEvent && !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera){\n node.attachEvent('onreadystatechange', function(e){\n onScriptLoad(e, url);\n });\n } else {\n node.addEventListener('load', function(e){\n onScriptLoad(e, url);\n }, false);\n }\n\n config.modules[item] = url;\n } else { // 缓存\n (function poll() {\n if(++timeout > config.timeout * 1000 / 4){\n return error(item + ' is not a valid module', 'error');\n }\n (typeof config.modules[item] === 'string' && config.status[item])\n ? onCallback()\n : setTimeout(poll, 4);\n }());\n }\n\n return that;\n };\n\n // 弃用原有的指定模块,以便重新扩展新的同名模块\n Layui.prototype.disuse = function(apps){\n var that = this;\n apps = that.isArray(apps) ? apps : [apps];\n that.each(apps, function (index, item) {\n if (!config.status[item]) {\n // return error('module ' + item + ' is not exist');\n }\n delete that[item];\n delete modules[item];\n delete that.modules[item];\n delete config.status[item];\n delete config.modules[item];\n });\n return that;\n };\n\n // 获取节点的 style 属性值\n Layui.prototype.getStyle = function(node, name){\n var style = node.currentStyle ? node.currentStyle : win.getComputedStyle(node, null);\n return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name);\n };\n\n // css 外部加载器\n Layui.prototype.link = function(href, fn, cssname){\n var that = this;\n var head = doc.getElementsByTagName('head')[0];\n var link = doc.createElement('link');\n\n if(typeof fn === 'string') cssname = fn;\n\n var app = (cssname || href).replace(/\\.|\\//g, '');\n var id = 'layuicss-'+ app;\n var STAUTS_NAME = 'creating';\n var timeout = 0;\n\n link.href = href + (config.debug ? '?v='+new Date().getTime() : '');\n link.rel = 'stylesheet';\n link.id = id;\n link.media = 'all';\n\n if(!doc.getElementById(id)){\n head.appendChild(link);\n }\n\n if(typeof fn !== 'function') return that;\n\n // 轮询 css 是否加载完毕\n (function poll(status) {\n var delay = 100;\n var getLinkElem = doc.getElementById(id); // 获取动态插入的 link 元素\n\n // 如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范\n if(++timeout > config.timeout * 1000 / delay){\n return error(href + ' timeout');\n }\n\n // css 加载就绪\n if(parseInt(that.getStyle(getLinkElem, 'width')) === 1989){\n // 如果参数来自于初始轮询(即未加载就绪时的),则移除 link 标签状态\n if(status === STAUTS_NAME) getLinkElem.removeAttribute('lay-status');\n // 如果 link 标签的状态仍为「创建中」,则继续进入轮询,直到状态改变,则执行回调\n getLinkElem.getAttribute('lay-status') === STAUTS_NAME ? setTimeout(poll, delay) : fn();\n } else {\n getLinkElem.setAttribute('lay-status', STAUTS_NAME);\n setTimeout(function(){\n poll(STAUTS_NAME);\n }, delay);\n }\n }());\n\n // 轮询css是否加载完毕\n /*\n (function poll() {\n if(++timeout > config.timeout * 1000 / 100){\n return error(href + ' timeout');\n };\n parseInt(that.getStyle(doc.getElementById(id), 'width')) === 1989 ? function(){\n fn();\n }() : setTimeout(poll, 100);\n }());\n */\n\n return that;\n };\n\n // css 内部加载器\n Layui.prototype.addcss = function(firename, fn, cssname){\n return layui.link(config.dir + 'css/' + firename, fn, cssname);\n };\n\n // 存储模块的回调\n config.callback = {};\n\n // 重新执行模块的工厂函数\n Layui.prototype.factory = function(modName){\n if(layui[modName]){\n return typeof config.callback[modName] === 'function'\n ? config.callback[modName]\n : null;\n }\n };\n\n // 图片预加载\n Layui.prototype.img = function(url, callback, error) {\n var img = new Image();\n img.src = url;\n if(img.complete){\n return callback(img);\n }\n img.onload = function(){\n img.onload = null;\n typeof callback === 'function' && callback(img);\n };\n img.onerror = function(e){\n img.onerror = null;\n typeof error === 'function' && error(e);\n };\n };\n\n // 全局配置\n Layui.prototype.config = function(options){\n options = options || {};\n for(var key in options){\n config[key] = options[key];\n }\n return this;\n };\n\n // 记录全部模块\n Layui.prototype.modules = function(){\n var clone = {};\n for(var o in modules){\n clone[o] = modules[o];\n }\n return clone;\n }();\n\n // 拓展模块\n Layui.prototype.extend = function(options){\n var that = this;\n\n // 验证模块是否被占用\n options = options || {};\n for(var o in options){\n if(that[o] || that.modules[o]){\n error(o+ ' Module already exists', 'error');\n } else {\n that.modules[o] = options[o];\n }\n }\n\n return that;\n };\n\n // location.hash 路由解析\n Layui.prototype.router = Layui.prototype.hash = function(hash){\n var that = this;\n var hash = hash || location.hash;\n var data = {\n path: [],\n search: {},\n hash: (hash.match(/[^#](#.*$)/) || [])[1] || ''\n };\n\n if(!/^#\\//.test(hash)) return data; // 禁止非路由规范\n\n hash = hash.replace(/^#\\//, '');\n data.href = '/' + hash;\n hash = hash.replace(/([^#])(#.*$)/, '$1').split('/') || [];\n\n // 提取 Hash 结构\n that.each(hash, function(index, item){\n /^\\w+=/.test(item) ? function(){\n item = item.split('=');\n data.search[item[0]] = item[1];\n }() : data.path.push(item);\n });\n\n return data;\n };\n\n // URL 解析\n Layui.prototype.url = function(href){\n var that = this;\n var data = {\n // 提取 url 路径\n pathname: function(){\n var pathname = href\n ? function(){\n var str = (href.match(/\\.[^.]+?\\/.+/) || [])[0] || '';\n return str.replace(/^[^\\/]+/, '').replace(/\\?.+/, '');\n }()\n : location.pathname;\n return pathname.replace(/^\\//, '').split('/');\n }(),\n\n // 提取 url 参数\n search: function(){\n var obj = {};\n var search = (href\n ? function(){\n var str = (href.match(/\\?.+/) || [])[0] || '';\n return str.replace(/\\#.+/, '');\n }()\n : location.search\n ).replace(/^\\?+/, '').split('&'); // 去除 ?,按 & 分割参数\n\n // 遍历分割后的参数\n that.each(search, function(index, item){\n var _index = item.indexOf('=')\n ,key = function(){ // 提取 key\n if(_index < 0){\n return item.substr(0, item.length);\n } else if(_index === 0){\n return false;\n } else {\n return item.substr(0, _index);\n }\n }();\n // 提取 value\n if(key){\n obj[key] = _index > 0 ? item.substr(_index + 1) : null;\n }\n });\n\n return obj;\n }(),\n\n // 提取 Hash\n hash: that.router(function(){\n return href\n ? ((href.match(/#.+/) || [])[0] || '/')\n : location.hash;\n }())\n };\n\n return data;\n };\n\n // 本地持久存储\n Layui.prototype.data = function(table, settings, storage){\n table = table || 'layui';\n storage = storage || localStorage;\n\n if(!win.JSON || !win.JSON.parse) return;\n\n // 如果 settings 为 null,则删除表\n if(settings === null){\n return delete storage[table];\n }\n\n settings = typeof settings === 'object'\n ? settings\n : {key: settings};\n\n try {\n var data = JSON.parse(storage[table]);\n } catch(e) {\n var data = {};\n }\n\n if('value' in settings) data[settings.key] = settings.value;\n if(settings.remove) delete data[settings.key];\n storage[table] = JSON.stringify(data);\n\n return settings.key ? data[settings.key] : data;\n };\n\n // 本地临时存储\n Layui.prototype.sessionData = function(table, settings){\n return this.data(table, settings, sessionStorage);\n }\n\n // 设备信息\n Layui.prototype.device = function(key){\n var agent = navigator.userAgent.toLowerCase();\n\n // 获取版本号\n var getVersion = function(label){\n var exp = new RegExp(label + '/([^\\\\s\\\\_\\\\-]+)');\n label = (agent.match(exp)||[])[1];\n return label || false;\n };\n\n // 返回结果集\n var result = {\n os: function(){ // 底层操作系统\n if(/windows/.test(agent)){\n return 'windows';\n } else if(/linux/.test(agent)){\n return 'linux';\n } else if(/iphone|ipod|ipad|ios/.test(agent)){\n return 'ios';\n } else if(/mac/.test(agent)){\n return 'mac';\n }\n }(),\n ie: function(){ // ie 版本\n return (!!win.ActiveXObject || \"ActiveXObject\" in win) ? (\n (agent.match(/msie\\s(\\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识\n ) : false;\n }(),\n weixin: getVersion('micromessenger') // 是否微信\n };\n\n // 任意的 key\n if(key && !result[key]){\n result[key] = getVersion(key);\n }\n\n // 移动设备\n result.android = /android/.test(agent);\n result.ios = result.os === 'ios';\n result.mobile = (result.android || result.ios);\n\n return result;\n };\n\n // 提示\n Layui.prototype.hint = function(){\n return {\n error: error\n };\n };\n\n // typeof 类型细分 -> string/number/boolean/undefined/null、object/array/function/…\n Layui.prototype._typeof = Layui.prototype.type = function(operand){\n if(operand === null) return String(operand);\n\n // 细分引用类型\n return (typeof operand === 'object' || typeof operand === 'function') ? function(){\n var type = Object.prototype.toString.call(operand).match(/\\s(.+)\\]$/) || []; // 匹配类型字符\n var classType = 'Function|Array|Date|RegExp|Object|Error|Symbol'; // 常见类型字符\n\n type = type[1] || 'Object';\n\n // 除匹配到的类型外,其他对象均返回 object\n return new RegExp('\\\\b('+ classType + ')\\\\b').test(type)\n ? type.toLowerCase()\n : 'object';\n }() : typeof operand;\n };\n\n // 对象是否具备数组结构(此处为兼容 jQuery 对象)\n Layui.prototype._isArray = Layui.prototype.isArray = function(obj){\n var that = this;\n var len;\n var type = that.type(obj);\n\n if(!obj || (typeof obj !== 'object') || obj === win) return false;\n\n len = 'length' in obj && obj.length; // 兼容 ie\n return type === 'array' || len === 0 || (\n typeof len === 'number' && len > 0 && (len - 1) in obj // 兼容 jQuery 对象\n );\n };\n\n // 遍历\n Layui.prototype.each = function(obj, fn){\n var key;\n var that = this;\n var callFn = function(key, obj){ // 回调\n return fn.call(obj[key], key, obj[key])\n };\n\n if(typeof fn !== 'function') return that;\n obj = obj || [];\n\n // 优先处理数组结构\n if(that.isArray(obj)){\n for(key = 0; key < obj.length; key++){\n if(callFn(key, obj)) break;\n }\n } else {\n for(key in obj){\n if(callFn(key, obj)) break;\n }\n }\n\n return that;\n };\n\n // 将数组中的成员对象按照某个 key 的 value 值进行排序\n Layui.prototype.sort = function(arr, key, desc, notClone){\n var that = this;\n var clone = notClone ? (arr || []) : JSON.parse(\n JSON.stringify(arr || [])\n );\n\n // 若未传入 key,则直接返回原对象\n if(that.type(arr) === 'object' && !key){\n return clone;\n } else if(typeof arr !== 'object'){ // 若 arr 非对象\n return [clone];\n }\n\n // 开始排序\n clone.sort(function(o1, o2){\n var v1 = o1[key];\n var v2 = o2[key];\n\n /*\n * 特殊数据\n * 若比较的成员均非对象\n */\n\n // 若比较的成员均为数字\n if(!isNaN(o1) && !isNaN(o2)) return o1 - o2;\n // 若比较的成员只存在某一个非对象\n if(!isNaN(o1) && isNaN(o2)){\n if(key && typeof o2 === 'object'){\n v1 = o1;\n } else {\n return -1;\n }\n } else if (isNaN(o1) && !isNaN(o2)){\n if(key && typeof o1 === 'object'){\n v2 = o2;\n } else {\n return 1;\n }\n }\n\n /*\n * 正常数据\n * 即成员均为对象,也传入了对比依据: key\n * 若 value 为数字,按「大小」排序;若 value 非数字,则按「字典序」排序\n */\n\n // value 是否为数字\n var isNum = [!isNaN(v1), !isNaN(v2)];\n\n // 若为数字比较\n if(isNum[0] && isNum[1]){\n if(v1 && (!v2 && v2 !== 0)){ // 数字 vs 空\n return 1;\n } else if((!v1 && v1 !== 0) && v2){ // 空 vs 数字\n return -1;\n } else { // 数字 vs 数字\n return v1 - v2;\n }\n }\n\n /**\n * 字典序排序\n */\n\n // 若为非数字比较\n if(!isNum[0] && !isNum[1]){\n // 字典序比较\n if(v1 > v2){\n return 1;\n } else if (v1 < v2) {\n return -1;\n } else {\n return 0;\n }\n }\n\n // 若为混合比较\n if(isNum[0] || !isNum[1]){ // 数字 vs 非数字\n return -1;\n } else if(!isNum[0] || isNum[1]) { // 非数字 vs 数字\n return 1;\n }\n\n });\n\n desc && clone.reverse(); // 倒序\n return clone;\n };\n\n // 阻止事件冒泡\n Layui.prototype.stope = function(thisEvent){\n thisEvent = thisEvent || win.event;\n try { thisEvent.stopPropagation() } catch(e){\n thisEvent.cancelBubble = true;\n }\n };\n\n // 字符常理\n var EV_REMOVE = 'LAYUI-EVENT-REMOVE';\n\n // 自定义模块事件\n Layui.prototype.onevent = function(modName, events, callback){\n if(typeof modName !== 'string'\n || typeof callback !== 'function') return this;\n\n return Layui.event(modName, events, null, callback);\n };\n\n // 执行自定义模块事件\n Layui.prototype.event = Layui.event = function(modName, events, params, fn){\n var that = this;\n var result = null;\n var filter = (events || '').match(/\\((.*)\\)$/)||[]; // 提取事件过滤器字符结构,如:select(xxx)\n var eventName = (modName + '.'+ events).replace(filter[0], ''); // 获取事件名称,如:form.select\n var filterName = filter[1] || ''; // 获取过滤器名称,,如:xxx\n var callback = function(_, item){\n var res = item && item.call(that, params);\n res === false && result === null && (result = false);\n };\n\n // 如果参数传入特定字符,则执行移除事件\n if(params === EV_REMOVE){\n delete (that.cache.event[eventName] || {})[filterName];\n return that;\n }\n\n // 添加事件\n if(fn){\n config.event[eventName] = config.event[eventName] || {};\n\n if (filterName) {\n // 带filter不支持重复事件\n config.event[eventName][filterName] = [fn];\n } else {\n // 不带filter处理的是所有的同类事件,应该支持重复事件\n config.event[eventName][filterName] = config.event[eventName][filterName] || [];\n config.event[eventName][filterName].push(fn);\n }\n return this;\n }\n\n // 执行事件回调\n layui.each(config.event[eventName], function(key, item){\n // 执行当前模块的全部事件\n if(filterName === '{*}'){\n layui.each(item, callback);\n return;\n }\n\n // 执行指定事件\n key === '' && layui.each(item, callback);\n (filterName && key === filterName) && layui.each(item, callback);\n });\n\n return result;\n };\n\n // 新增模块事件\n Layui.prototype.on = function(events, modName, callback){\n var that = this;\n return that.onevent.call(that, modName, events, callback);\n }\n\n // 移除模块事件\n Layui.prototype.off = function(events, modName){\n var that = this;\n return that.event.call(that, modName, events, EV_REMOVE);\n };\n\n // 防抖\n Layui.prototype.debounce = function (func, wait) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n func.apply(context, args);\n }, wait);\n }\n };\n\n // 节流\n Layui.prototype.throttle = function (func, wait) {\n var cooldown = false;\n return function () {\n var context = this;\n var args = arguments;\n if (!cooldown) {\n func.apply(context, args);\n cooldown = true;\n setTimeout(function () {\n cooldown = false;\n }, wait);\n }\n }\n };\n\n // exports layui\n win.layui = new Layui();\n\n}(window); // gulp build: layui-footer\n\n","/**\r\n * 用于打包聚合版,该文件不会存在于构建后的目录 \r\n */\r\n \r\nlayui.define(function(exports){\r\n var cache = layui.cache;\r\n layui.config({\r\n dir: cache.dir.replace(/lay\\/dest\\/$/, '')\r\n });\r\n exports('layui.all', layui.v);\r\n});","\r\n/** lay 基础模块 | MIT Licensed */\r\n\r\n;!function(window){ // gulp build: lay-header\r\n \"use strict\";\r\n\r\n var MOD_NAME = 'lay'; // 模块名\r\n var document = window.document;\r\n\r\n /**\r\n * 元素查找\r\n * @param {string | HTMLElement | JQuery} selector\r\n */\r\n var lay = function(selector){\r\n return new Class(selector);\r\n };\r\n\r\n // 构造器\r\n var Class = function(selector){\r\n var that = this;\r\n var elem = typeof selector === 'object' ? function(){\r\n // 仅适配简单元素对象\r\n return layui.isArray(selector) ? selector : [selector];\r\n }() : (\r\n this.selector = selector,\r\n document.querySelectorAll(selector || null)\r\n );\r\n\r\n lay.each(elem, function(index, item){\r\n that.push(elem[index]);\r\n });\r\n };\r\n\r\n /*\r\n * API 兼容\r\n */\r\n Array.prototype.indexOf = Array.prototype.indexOf || function(searchElement, fromIndex) {\r\n var rst = -1;\r\n fromIndex = fromIndex || 0;\r\n layui.each(this, function(index, val){\r\n if (searchElement === val && index >= fromIndex) {\r\n rst = index;\r\n return !0;\r\n }\r\n });\r\n return rst;\r\n };\r\n\r\n /*\r\n lay 对象操作\r\n */\r\n\r\n Class.fn = Class.prototype = [];\r\n Class.fn.constructor = Class;\r\n\r\n /**\r\n * 将两个或多个对象的内容深度合并到第一个对象中\r\n * @callback ExtendFunc\r\n * @param {*} target - 一个对象\r\n * @param {...*} objectN - 包含额外的属性合并到第一个参数\r\n * @returns {*} 返回合并后的对象\r\n */\r\n /** @type ExtendFunc*/\r\n lay.extend = function(){\r\n var ai = 1;\r\n var length;\r\n var args = arguments;\r\n var clone = function(target, obj){\r\n target = target || (layui.type(obj) === 'array' ? [] : {}); // 目标对象\r\n for(var i in obj){\r\n // 若值为普通对象,则进入递归,继续深度合并\r\n target[i] = (obj[i] && obj[i].constructor === Object)\r\n ? clone(target[i], obj[i])\r\n : obj[i];\r\n }\r\n return target;\r\n };\r\n\r\n args[0] = typeof args[0] === 'object' ? args[0] : {};\r\n length = args.length\r\n\r\n for(; ai < length; ai++){\r\n if(typeof args[ai] === 'object'){\r\n clone(args[0], args[ai]);\r\n }\r\n }\r\n return args[0];\r\n };\r\n\r\n /**\r\n * IE 版本\r\n * @type {string | boolean} - 如果是 IE 返回版本字符串,否则返回 false\r\n */\r\n lay.ie = function(){\r\n var agent = navigator.userAgent.toLowerCase();\r\n return (!!window.ActiveXObject || \"ActiveXObject\" in window) ? (\r\n (agent.match(/msie\\s(\\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识\r\n ) : false;\r\n }();\r\n\r\n\r\n /**\r\n * 获取 layui 常见方法,以便用于组件单独版\r\n */\r\n\r\n lay.layui = layui || {};\r\n lay.getPath = layui.cache.dir; // 获取当前 JS 所在目录\r\n lay.stope = layui.stope; // 中止冒泡\r\n lay.each = function(){ // 遍历\r\n layui.each.apply(layui, arguments);\r\n return this;\r\n };\r\n\r\n\r\n /**\r\n * 数字前置补零\r\n * @param {number | string} num - 原始数字\r\n * @param {number} [length=2] - 数字长度,如果原始数字长度小于 length,则前面补零\r\n * @returns {string} 返回补 0 后的数字\r\n * @example\r\n * ```js\r\n * lay.digit(6, 2); // \"06\"\r\n * lay.digit('7', 3); // \"007\"\r\n * ```\r\n */\r\n lay.digit = function(num, length){\r\n if(!(typeof num === 'string' || typeof num === 'number')) return '';\r\n\r\n var str = '';\r\n num = String(num);\r\n length = length || 2;\r\n for(var i = num.length; i < length; i++){\r\n str += '0';\r\n }\r\n return num < Math.pow(10, length) ? str + num : num;\r\n };\r\n\r\n /**\r\n * 创建元素\r\n * @param {string} elemName - 元素的标签名\r\n * @param {Object.} [attr] - 添加到元素上的属性\r\n * @returns {HTMLElement} 返回创建的 HTML 元素\r\n * @example\r\n * ```js\r\n * lay.elem('div', {id: 'test'}) //
\r\n * ```\r\n */\r\n lay.elem = function(elemName, attr){\r\n var elem = document.createElement(elemName);\r\n lay.each(attr || {}, function(key, value){\r\n elem.setAttribute(key, value);\r\n });\r\n return elem;\r\n };\r\n\r\n /**\r\n * 当前页面是否存在滚动条\r\n * @returns {boolean} 是否存在滚动条\r\n * @example\r\n * ```\r\n * lay.hasScrollbar() // true 或 false\r\n * ```\r\n */\r\n lay.hasScrollbar = function(){\r\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);\r\n };\r\n\r\n /**\r\n * 获取 style rules\r\n * @param {HTMLStyleElement} style - HTMLStyle 元素\r\n * @param {(ruleItem: CSSStyleRule, index: number) => boolean} [callback] - 用来返回 style 元素中的每个 `style rule` 的函数,返回 true 终止遍历\r\n * @returns {CSSRuleList } 返回 `style rules`\r\n * @example\r\n * ```\r\n * \r\n *\r\n * lay.getStyleRules($('#test')[0], function(rule, index){\r\n * if(rule.selectorText === '.lay-card'){\r\n * console.log(index, rule.cssText) // 0 '.lay-card{color: #000}'\r\n * rule.style.color = '#EEE';\r\n * return true; // 终止遍历\r\n * }\r\n * }) // RuleList\r\n * ```\r\n */\r\n lay.getStyleRules = function(style, callback) {\r\n if (!style) return;\r\n\r\n var sheet = style.sheet || style.styleSheet || {};\r\n var rules = sheet.cssRules || sheet.rules;\r\n\r\n if (typeof callback === 'function') {\r\n layui.each(rules, function(i, item){\r\n if (callback(item, i)) return true;\r\n });\r\n }\r\n\r\n return rules;\r\n };\r\n\r\n /**\r\n * 创建 style 样式\r\n * @param {Object} options - 可配置的选项\r\n * @param {string | HTMLElement | JQuery} [options.target] - 目标容器,指定后会将样式追加到目标容器\r\n * @param {string} [options.id] - 样式元素的 id,默认自增\r\n * @param {string} options.text - 样式内容\r\n * @returns {HTMLStyleElement} 返回创建的样式元素\r\n * @example\r\n * ```html\r\n *
\r\n * \r\n * \r\n *
\r\n *\r\n * lay.style({\r\n * target: '#targetEl',\r\n * text: '.card{color: #000}'\r\n * }) // \r\n * ```\r\n */\r\n lay.style = function(options){\r\n options = options || {};\r\n\r\n var style = lay.elem('style');\r\n var styleText = options.text || '';\r\n var target = options.target;\r\n\r\n if (!styleText) return;\r\n\r\n // 添加样式\r\n if ('styleSheet' in style) {\r\n style.setAttribute('type', 'text/css');\r\n style.styleSheet.cssText = styleText;\r\n } else {\r\n style.innerHTML = styleText;\r\n }\r\n\r\n // ID\r\n style.id = 'LAY-STYLE-'+ (options.id || function(index) {\r\n lay.style.index++;\r\n return 'DF-'+ index;\r\n }(lay.style.index || 0));\r\n\r\n // 是否向目标容器中追加 style 元素\r\n if (target) {\r\n var styleElem = lay(target).find('#'+ style.id);\r\n styleElem[0] && styleElem.remove();\r\n lay(target).append(style);\r\n }\r\n\r\n return style;\r\n };\r\n\r\n /**\r\n * 将元素定位到指定目标元素附近\r\n * @param {HTMLElement} target - 目标元素\r\n * @param {HTMLElement} elem - 定位元素\r\n * @param {Object} [opts] - 可配置的选项\r\n * @param {'absolute' | 'fixed'} [opts.position] - 元素的定位类型\r\n * @param {'left' | 'right'} [opts.clickType=\"left\"] - 点击类型,默认为 'left',如果 {@link target} 是 document 或 body 元素,则为 'right'\r\n * @param {'left' | 'right' | 'center'} [opts.align=\"left\"] - 对齐方式\r\n * @param {boolean} [opts.allowBottomOut=false] - 顶部没有足够区域显示时,是否允许底部溢出\r\n * @param {string | number} [opts.margin=5] - 边距\r\n * @param {Event} [opts.e] - 事件对象,仅右键生效\r\n * @param {boolean} [opts.SYSTEM_RELOAD] - 是否重载,用于出现滚动条时重新计算位置\r\n * @param {[offsetX:number, offsetY:number]} [opts.offset] - 相对于触发元素的额外偏移量[x,y]\r\n * @example\r\n * ```js\r\n * \r\n * \r\n *\r\n * // 下拉菜单将被定位到按钮附近\r\n * lay.position(\r\n * $('#targetEl')[0],\r\n * $('#contentEl')[0],\r\n * {\r\n * position: 'fixed',\r\n * align: 'center'\r\n * }\r\n * )\r\n * ```\r\n */\r\n lay.position = function(target, elem, opts){\r\n if(!elem) return;\r\n opts = opts || {};\r\n\r\n // 如果绑定的是 document 或 body 元素,则直接获取鼠标坐标\r\n if(target === document || target === lay('body')[0]){\r\n opts.clickType = 'right';\r\n }\r\n\r\n // 绑定绑定元素的坐标\r\n var rect = opts.clickType === 'right' ? function(){\r\n var e = opts.e || window.event || {};\r\n return {\r\n left: e.clientX,\r\n top: e.clientY,\r\n right: e.clientX,\r\n bottom: e.clientY\r\n }\r\n }() : target.getBoundingClientRect();\r\n var elemWidth = elem.offsetWidth; // 控件的宽度\r\n var elemHeight = elem.offsetHeight; // 控件的高度\r\n\r\n // 滚动条高度\r\n var scrollArea = function(type){\r\n type = type ? 'scrollLeft' : 'scrollTop';\r\n return document.body[type] | document.documentElement[type];\r\n };\r\n\r\n // 窗口宽高\r\n var winArea = function(type){\r\n return document.documentElement[type ? 'clientWidth' : 'clientHeight']\r\n };\r\n var margin = 'margin' in opts ? opts.margin : 5;\r\n var left = rect.left;\r\n var top = rect.bottom;\r\n\r\n // 相对元素居中\r\n if(opts.align === 'center'){\r\n left = left - (elemWidth - target.offsetWidth) / 2;\r\n } else if(opts.align === 'right'){\r\n left = left - elemWidth + target.offsetWidth;\r\n }\r\n\r\n // 判断右侧是否超出边界\r\n if(left + elemWidth + margin > winArea('width')){\r\n left = winArea('width') - elemWidth - margin; // 如果超出右侧,则将面板向右靠齐\r\n }\r\n // 左侧是否超出边界\r\n if(left < margin) left = margin;\r\n\r\n\r\n // 判断底部和顶部是否超出边界\r\n if(rect.bottom + elemHeight + margin > winArea()){ // 底部超出边界\r\n // 优先判断顶部是否有足够区域显示完全,且底部不能超出边界\r\n if(rect.top > elemHeight + margin && rect.top <= winArea() ){\r\n top = rect.top - elemHeight - margin*2; // 顶部有足够的区域显示\r\n } else if(!opts.allowBottomOut){ // 顶部没有足够区域显示时,是否允许底部溢出\r\n top = winArea() - elemHeight - margin*2; // 面板向底部靠齐\r\n if(top < 0) top = 0; // 如果面板底部靠齐时,又溢出窗口顶部,则只能将顶部靠齐\r\n }\r\n }\r\n /*\r\n if(top + elemHeight + margin > winArea()){\r\n // 优先顶部是否有足够区域显示完全\r\n if(rect.top > elemHeight + margin){\r\n top = rect.top - elemHeight - margin*2; // 顶部有足够的区域显示\r\n } else {\r\n // 如果面板是鼠标右键弹出,且顶部没有足够区域显示,则将面板向底部靠齐\r\n if(obj.clickType === 'right'){\r\n top = winArea() - elemHeight - margin*2;\r\n if(top < 0) top = 0; // 不能溢出窗口顶部\r\n } else {\r\n top = margin; // 位置计算逻辑完备性处理\r\n }\r\n }\r\n }\r\n */\r\n\r\n // 定位类型\r\n var position = opts.position;\r\n if(position) elem.style.position = position;\r\n var offsetX = opts.offset ? opts.offset[0] : 0;\r\n var offsetY = opts.offset ? opts.offset[1] : 0;\r\n\r\n // 设置坐标\r\n elem.style.left = left + (position === 'fixed' ? 0 : scrollArea(1)) + offsetX + 'px';\r\n elem.style.top = top + (position === 'fixed' ? 0 : scrollArea()) + offsetY + 'px';\r\n\r\n // 防止页面无滚动条时,又因为弹出面板而出现滚动条导致的坐标计算偏差\r\n if(!lay.hasScrollbar()){\r\n var rect1 = elem.getBoundingClientRect();\r\n // 如果弹出面板的溢出窗口底部,则表示将出现滚动条,此时需要重新计算坐标\r\n if(!opts.SYSTEM_RELOAD && (rect1.bottom + margin) > winArea()){\r\n opts.SYSTEM_RELOAD = true;\r\n setTimeout(function(){\r\n lay.position(target, elem, opts);\r\n }, 50);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 获取元素上的属性配置项\r\n * @param {string | HTMLElement | JQuery} elem - HTML 元素\r\n * @param {{attr: string} | string} [opts=\"lay-options\"] - 可配置的选项,string 类型指定属性名\r\n * @returns {Object.} 返回元素上的属性配置项\r\n * @example\r\n * ```js\r\n *
\r\n *\r\n * var elem = $('#testEl')\r\n * lay.options(elem) // {color:red}\r\n * lay.options(elem[0]) // {color:red}\r\n * lay.options('#testEl') // {color:red}\r\n * lay.options('#testEl', {attr: 'lay-toc'}) // {hot: true}\r\n * lay.options('#testEl', 'lay-toc') // {hot: true}\r\n *\r\n * $('#testEl').attr('lay-toc') // '{hot: true}'\r\n * ```\r\n */\r\n lay.options = function(elem, opts){\r\n opts = typeof opts === 'object' ? opts : {attr: opts};\r\n\r\n if(elem === document) return {};\r\n\r\n var othis = lay(elem);\r\n var attrName = opts.attr || 'lay-options';\r\n var attrValue = othis.attr(attrName);\r\n\r\n try {\r\n /**\r\n * 请注意: 开发者在使用 lay-options=\"{}\" 配置组件选项时,需确保属性值不来自于网页用户,\r\n * 即属性值必须在网页开发者自身的可控范围内,否则请勿在 HTML 标签属性中获取组件选项。\r\n */\r\n return new Function('return '+ (attrValue || '{}'))();\r\n } catch(ev) {\r\n layui.hint().error(opts.errorText || [\r\n attrName + '=\"'+ attrValue + '\"',\r\n '\\n parseerror: '+ ev\r\n ].join('\\n'), 'error');\r\n return {};\r\n }\r\n };\r\n\r\n\r\n /**\r\n * 元素是否属于顶级元素(document 或 body)\r\n * @param {HTMLElement} elem - HTML 元素\r\n * @returns {boolean} 是否属于顶级元素\r\n * @example\r\n * ```js\r\n * lay.isTopElem(document) // true\r\n * ```\r\n */\r\n lay.isTopElem = function(elem){\r\n var topElems = [document, lay('body')[0]]\r\n ,matched = false;\r\n lay.each(topElems, function(index, item){\r\n if(item === elem){\r\n return matched = true\r\n }\r\n });\r\n return matched;\r\n };\r\n\r\n // 剪切板\r\n lay.clipboard = {\r\n /**\r\n * 写入文本\r\n * @param {Object} options - 可配置的选项\r\n * @param {string} options.text - 写入剪贴板的文本\r\n * @param {() => void} [options.done] - 写入成功/完成回调\r\n * @param {(err?: any) => void} [options.error] - 写入失败回调\r\n * @example\r\n * ```js\r\n * lay.clipboard.writeText({\r\n * text: '测试文本',\r\n * done: function(){ layer.msg('copied')},\r\n * error: function(){ layer.msg('error')}\r\n * })\r\n * ```\r\n */\r\n writeText: function(options) {\r\n var text = String(options.text);\r\n\r\n if(navigator && 'clipboard' in navigator){\r\n navigator.clipboard.writeText(text)\r\n .then(options.done, function(){\r\n legacyCopy();\r\n });\r\n }else{\r\n legacyCopy();\r\n }\r\n\r\n function legacyCopy(){\r\n var elem = document.createElement('textarea');\r\n\r\n elem.value = text;\r\n elem.style.position = 'fixed';\r\n elem.style.opacity = '0';\r\n elem.style.top = '0px';\r\n elem.style.left = '0px';\r\n\r\n document.body.appendChild(elem);\r\n elem.select();\r\n\r\n try {\r\n document.execCommand('copy');\r\n typeof options.done === 'function' && options.done();\r\n } catch(err) {\r\n typeof options.error === 'function' && options.error(err);\r\n } finally {\r\n elem.remove ? elem.remove() : document.body.removeChild(elem);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 检测是否支持 Passive Event Listeners\r\n * 引用自 https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n * @type {boolean}\r\n */\r\n lay.passiveSupported = function(){\r\n var passiveSupported = false;\r\n try {\r\n var opts = Object.defineProperty({}, 'passive', {\r\n get: function() {\r\n passiveSupported = true;\r\n }\r\n });\r\n window.addEventListener('test', null, opts);\r\n window.removeEventListener('test', null, opts);\r\n } catch (err) {}\r\n return passiveSupported;\r\n }();\r\n\r\n /**\r\n * 是否支持 touch 事件\r\n */\r\n lay.touchEventsSupported = function(){\r\n return 'ontouchstart' in window;\r\n };\r\n\r\n /**\r\n * @typedef touchSwipeState\r\n * @prop {{x: number,y: number}} pointerStart - 初始坐标\r\n * @prop {{x: number,y: number}} pointerEnd - 结束坐标\r\n * @prop {number} distanceX - X 轴移动距离\r\n * @prop {number} distanceY - Y 轴移动距离\r\n * @prop {'none'|'right'|'left'|'up'|'down'} direction - 滑动方向\r\n * @prop {Date} timeStart 开始时间\r\n */\r\n /**\r\n * @callback touchSwipeCallback\r\n * @param {TouchEvent} e 滑动事件\r\n * @param {touchSwipeState} state 滑动相关的状态\r\n */\r\n /**\r\n * 基于 touch 事件的触摸滑动\r\n * @param {string | HTMLElement | JQuery} elem - HTML 元素\r\n * @param {{onTouchStart?: touchSwipeCallback, onTouchMove?: touchSwipeCallback, onTouchEnd?: touchSwipeCallback}} opts - 配置项\r\n */\r\n lay.touchSwipe = function(elem, opts){\r\n var options = opts\r\n var targetElem = lay(elem)[0];\r\n\r\n if(!targetElem || !lay.touchEventsSupported()) return;\r\n\r\n var state = {\r\n pointerStart: {x:0, y:0},\r\n pointerEnd: {x:0, y:0},\r\n distanceX: 0,\r\n distanceY: 0,\r\n direction:'none', // 'up','down','left','right','none\r\n timeStart: null\r\n }\r\n\r\n var onStart = function(e){\r\n if(e.touches.length !== 1) return;\r\n bindEvents();\r\n // 重置状态\r\n state.timeStart = Date.now();\r\n state.pointerStart.x = state.pointerEnd.x = e.touches[0].clientX;\r\n state.pointerStart.y = state.pointerEnd.y = e.touches[0].clientY;\r\n state.distanceX = state.distanceY = 0;\r\n state.direction = 'none'\r\n\r\n options.onTouchStart && options.onTouchStart(e, state);\r\n }\r\n\r\n var onMove = function(e){\r\n e.preventDefault();\r\n state.pointerEnd.x = e.touches[0].clientX;\r\n state.pointerEnd.y = e.touches[0].clientY;\r\n state.distanceX = state.pointerStart.x - state.pointerEnd.x;\r\n state.distanceY = state.pointerStart.y - state.pointerEnd.y;\r\n if(Math.abs(state.distanceX) > Math.abs(state.distanceY)){\r\n state.direction = state.distanceX > 0 ? 'left' : 'right';\r\n }else{\r\n state.direction = state.distanceY > 0 ? 'up' : 'down';\r\n }\r\n options.onTouchMove && options.onTouchMove(e, state);\r\n }\r\n\r\n var onEnd = function(e){\r\n options.onTouchEnd && options.onTouchEnd(e, state);\r\n unbindEvents();\r\n }\r\n \r\n var bindEvents = function(){\r\n targetElem.addEventListener('touchmove', onMove, lay.passiveSupported ? { passive: false} : false);\r\n targetElem.addEventListener('touchend', onEnd);\r\n targetElem.addEventListener('touchcancel', onEnd);\r\n }\r\n\r\n var unbindEvents = function(){\r\n targetElem.removeEventListener('touchmove', onMove);\r\n targetElem.removeEventListener('touchend', onEnd, lay.passiveSupported ? { passive: false} : false);\r\n targetElem.removeEventListener('touchcancel', onEnd);\r\n }\r\n\r\n // 防止事件重复绑定\r\n if(targetElem.__lay_touchswipe_cb_){\r\n targetElem.removeEventListener('touchstart', targetElem.__lay_touchswipe_cb_);\r\n }\r\n targetElem.__lay_touchswipe_cb_ = onStart;\r\n targetElem.addEventListener('touchstart', onStart);\r\n }\r\n\r\n /** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | AddEventListenerOptions) => any}*/\r\n lay.addEvent = function(){\r\n if(document.addEventListener){\r\n return function(elem, eventName, fn, options){\r\n elem.addEventListener(eventName, fn, options);\r\n }\r\n }else{\r\n return function(elem, eventName, fn){\r\n var prefix = '_lay_on_';\r\n var eventsCacheName = prefix + eventName;\r\n var listener = function(e){\r\n e.target = e.srcElement;\r\n fn.call(elem, e);\r\n }\r\n listener._rawFn = fn;\r\n if(!elem[eventsCacheName]){\r\n elem[eventsCacheName] = [];\r\n }\r\n var include = false;\r\n lay.each(elem[eventsCacheName], function(_, listener){\r\n if(listener._rawFn === fn){\r\n include = true;\r\n return true;\r\n }\r\n })\r\n if(!include){\r\n elem[eventsCacheName].push(listener);\r\n elem.attachEvent('on' + eventName, listener);\r\n }\r\n }\r\n }\r\n }();\r\n\r\n /** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | EventListenerOptions) => any}*/\r\n lay.removeEvent = function(){\r\n if(document.removeEventListener){\r\n return function(elem, eventName, fn, options){\r\n elem.removeEventListener(eventName, fn, options);\r\n }\r\n }else{\r\n return function(elem, eventName, fn){\r\n var prefix = '_lay_on_';\r\n var eventsCacheName = prefix + eventName;\r\n var events = elem[eventsCacheName];\r\n if(layui.isArray(events)){\r\n var newEvents = [];\r\n lay.each(events, function(_, listener){\r\n if(listener._rawFn === fn){\r\n elem.detachEvent('on'+ eventName, listener);\r\n }else{\r\n newEvents.push(listener);\r\n }\r\n })\r\n elem[eventsCacheName] = newEvents;\r\n } \r\n } \r\n }\r\n }();\r\n\r\n /**\r\n * 监听指定元素外部的点击\r\n * @param {HTMLElement} target - 被监听的元素\r\n * @param {(e: Event) => void} handler - 事件触发时执行的函数\r\n * @param {object} [options] - 选项\r\n * @param {string} [options.event=\"pointerdown\"] - 监听的事件类型\r\n * @param {HTMLElement | Window} [options.scope=document] - 监听范围\r\n * @param {Array} [options.ignore] - 忽略监听的元素或选择器字符串\r\n * @param {boolean} [options.capture=true] - 对内部事件侦听器使用捕获阶段\r\n * @returns {() => void} - 返回一个停止事件监听的函数\r\n */\r\n lay.onClickOutside = function(target, handler, options){\r\n options = options || {};\r\n var eventType = options.event || ('onpointerdown' in window ? 'pointerdown' : 'mousedown');\r\n var scopeTarget = options.scope || document;\r\n var ignore = options.ignore || [];\r\n var useCapture = 'capture' in options ? options.capture : true;\r\n\r\n var listener = function(event){\r\n var el = target;\r\n var eventTarget = event.target || event.srcElement;\r\n var eventPath = getEventPath(event);\r\n\r\n if (!el || el === eventTarget || eventPath.indexOf(el) !== -1){\r\n return;\r\n }\r\n if(shouldIgnore(event, eventPath)){\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n function shouldIgnore(event, eventPath){\r\n var eventTarget = event.target || event.srcElement;\r\n for(var i = 0; i < ignore.length; i++){\r\n var target = ignore[i];\r\n if(typeof target === 'string'){\r\n var targetElements = document.querySelectorAll(target);\r\n for(var j = 0; j < targetElements.length; j++){\r\n var targetEl = targetElements[i];\r\n if(targetEl === eventTarget || eventPath.indexOf(targetEl) !== -1){\r\n return true;\r\n }\r\n }\r\n }else{\r\n if(target && (target === eventTarget || eventPath.indexOf(target) !== -1)){\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getEventPath(event){\r\n var path = (event.composedPath && event.composedPath()) || event.path;\r\n var eventTarget = event.target || event.srcElement;\r\n\r\n if (path !== null && path !== undefined){\r\n return path;\r\n }\r\n\r\n function getParents(node, memo){\r\n memo = memo || [];\r\n var parentNode = node.parentNode;\r\n\r\n return parentNode\r\n ? getParents(parentNode, memo.concat([parentNode]))\r\n : memo;\r\n }\r\n\r\n return [eventTarget].concat(getParents(eventTarget));\r\n }\r\n\r\n function bindEventListener(elem, eventName, handler, opts){\r\n elem.addEventListener\r\n ? elem.addEventListener(eventName, handler, opts)\r\n : elem.attachEvent('on' + eventName, handler);\r\n\r\n return function(){\r\n elem.removeEventListener\r\n ? elem.removeEventListener(eventName, handler, opts)\r\n : elem.detachEvent('on' + eventName, handler);\r\n }\r\n }\r\n\r\n return bindEventListener(\r\n scopeTarget, \r\n eventType, \r\n listener, \r\n lay.passiveSupported ? { passive: true, capture: useCapture } : useCapture\r\n );\r\n };\r\n\r\n\r\n /*\r\n * lay 元素操作\r\n */\r\n\r\n\r\n // 追加字符\r\n Class.addStr = function(str, new_str){\r\n str = str.replace(/\\s+/, ' ');\r\n new_str = new_str.replace(/\\s+/, ' ').split(' ');\r\n lay.each(new_str, function(ii, item){\r\n if(!new RegExp('\\\\b'+ item + '\\\\b').test(str)){\r\n str = str + ' ' + item;\r\n }\r\n });\r\n return str.replace(/^\\s|\\s$/, '');\r\n };\r\n\r\n // 移除值\r\n Class.removeStr = function(str, new_str){\r\n str = str.replace(/\\s+/, ' ');\r\n new_str = new_str.replace(/\\s+/, ' ').split(' ');\r\n lay.each(new_str, function(ii, item){\r\n var exp = new RegExp('\\\\b'+ item + '\\\\b')\r\n if(exp.test(str)){\r\n str = str.replace(exp, '');\r\n }\r\n });\r\n return str.replace(/\\s+/, ' ').replace(/^\\s|\\s$/, '');\r\n };\r\n\r\n // 查找子元素\r\n Class.fn.find = function(selector){\r\n var that = this;\r\n var elem = [];\r\n var isObject = typeof selector === 'object';\r\n\r\n this.each(function(i, item){\r\n var children = isObject && item.contains(selector)\r\n ? selector\r\n : item.querySelectorAll(selector || null);\r\n\r\n lay.each(children, function(index, child){\r\n elem.push(child);\r\n });\r\n });\r\n\r\n return lay(elem);\r\n };\r\n\r\n // 元素遍历\r\n Class.fn.each = function(fn){\r\n return lay.each.call(this, this, fn);\r\n };\r\n\r\n // 添加 className\r\n Class.fn.addClass = function(className, type){\r\n return this.each(function(index, item){\r\n item.className = Class[type ? 'removeStr' : 'addStr'](item.className, className)\r\n });\r\n };\r\n\r\n // 移除 className\r\n Class.fn.removeClass = function(className){\r\n return this.addClass(className, true);\r\n };\r\n\r\n // 是否包含 css 类\r\n Class.fn.hasClass = function(className){\r\n var has = false;\r\n this.each(function(index, item){\r\n if(new RegExp('\\\\b'+ className +'\\\\b').test(item.className)){\r\n has = true;\r\n }\r\n });\r\n return has;\r\n };\r\n\r\n // 添加或获取 css style\r\n Class.fn.css = function(key, value){\r\n var that = this;\r\n var parseValue = function(v){\r\n return isNaN(v) ? v : (v +'px');\r\n };\r\n return (typeof key === 'string' && value === undefined) ? function(){\r\n if(that.length > 0) return that[0].style[key];\r\n }() : that.each(function(index, item){\r\n typeof key === 'object' ? lay.each(key, function(thisKey, thisValue){\r\n item.style[thisKey] = parseValue(thisValue);\r\n }) : item.style[key] = parseValue(value);\r\n });\r\n };\r\n\r\n // 添加或获取宽度\r\n Class.fn.width = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].offsetWidth; // 此处还需做兼容\r\n }() : that.each(function(index, item){\r\n that.css('width', value);\r\n });\r\n };\r\n\r\n // 添加或获取高度\r\n Class.fn.height = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].offsetHeight; // 此处还需做兼容\r\n }() : that.each(function(index, item){\r\n that.css('height', value);\r\n });\r\n };\r\n\r\n // 添加或获取属性\r\n Class.fn.attr = function(key, value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].getAttribute(key);\r\n }() : that.each(function(index, item){\r\n item.setAttribute(key, value);\r\n });\r\n };\r\n\r\n // 移除属性\r\n Class.fn.removeAttr = function(key){\r\n return this.each(function(index, item){\r\n item.removeAttribute(key);\r\n });\r\n };\r\n\r\n // 设置或获取 HTML 内容\r\n Class.fn.html = function(html){\r\n var that = this;\r\n return html === undefined ? function(){\r\n if(that.length > 0) return that[0].innerHTML;\r\n }() : this.each(function(index, item){\r\n item.innerHTML = html;\r\n });\r\n };\r\n\r\n // 设置或获取值\r\n Class.fn.val = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].value;\r\n }() : this.each(function(index, item){\r\n item.value = value;\r\n });\r\n };\r\n\r\n // 追加内容\r\n Class.fn.append = function(elem){\r\n return this.each(function(index, item){\r\n typeof elem === 'object'\r\n ? item.appendChild(elem)\r\n : item.innerHTML = item.innerHTML + elem;\r\n });\r\n };\r\n\r\n // 移除内容\r\n Class.fn.remove = function(elem){\r\n return this.each(function(index, item){\r\n elem ? item.removeChild(elem) : item.parentNode.removeChild(item);\r\n });\r\n };\r\n\r\n // 事件绑定\r\n Class.fn.on = function(eventName, fn, options){\r\n return this.each(function(index, item){\r\n lay.addEvent(item, eventName, fn, options)\r\n });\r\n };\r\n\r\n // 解除事件\r\n Class.fn.off = function(eventName, fn, options){\r\n return this.each(function(index, item){\r\n lay.removeEvent(item, eventName, fn, options)\r\n });\r\n };\r\n\r\n // export\r\n window.lay = lay;\r\n\r\n // 输出为 layui 模块\r\n if(window.layui && layui.define){\r\n layui.define(function(exports){\r\n exports(MOD_NAME, lay);\r\n });\r\n }\r\n\r\n}(window, window.document); // gulp build: lay-footer\r\n","/**\r\n * laytpl 轻量模板引擎\r\n */\r\n\r\nlayui.define(function(exports){\r\n \"use strict\";\r\n\r\n // 默认属性\r\n var config = {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n };\r\n\r\n // 模板工具\r\n var tool = {\r\n escape: function(html){\r\n var exp = /[<\"'>]|&(?=#[a-zA-Z0-9]+)/g;\r\n if(html === undefined || html === null) return '';\r\n\r\n html += '';\r\n if(!exp.test(html)) return html;\r\n\r\n return html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')\r\n .replace(//g, '>')\r\n .replace(/'/g, ''').replace(/\"/g, '"');\r\n }\r\n };\r\n\r\n // 内部方法\r\n var inner = {\r\n exp: function(str){\r\n return new RegExp(str, 'g');\r\n },\r\n // 错误提示\r\n error: function(e, source){\r\n var error = 'Laytpl Error: ';\r\n typeof console === 'object' && console.error(error + e + '\\n'+ (source || ''));\r\n return error + e;\r\n }\r\n };\r\n\r\n // constructor\r\n var Class = function(template, options){\r\n var that = this;\r\n that.config = that.config || {};\r\n that.template = template;\r\n\r\n // 简单属性合并\r\n var extend = function(obj){\r\n for(var i in obj){\r\n that.config[i] = obj[i];\r\n }\r\n };\r\n\r\n extend(config);\r\n extend(options);\r\n };\r\n\r\n // 标签正则\r\n Class.prototype.tagExp = function(type, _, __){\r\n var options = this.config;\r\n var types = [\r\n '#([\\\\s\\\\S])+?', // js 语句\r\n '([^{#}])*?' // 普通字段\r\n ][type || 0];\r\n\r\n return inner.exp((_||'') + options.open + types + options.close + (__||''));\r\n };\r\n\r\n // 模版解析\r\n Class.prototype.parse = function(template, data){\r\n var that = this;\r\n var options = that.config;\r\n var source = template;\r\n var jss = inner.exp('^'+ options.open +'#', '');\r\n var jsse = inner.exp(options.close +'$', '');\r\n\r\n // 模板必须为 string 类型\r\n if(typeof template !== 'string') return template;\r\n\r\n // 正则解析\r\n template = template.replace(/\\s+|\\r|\\t|\\n/g, ' ')\r\n .replace(inner.exp(options.open +'#'), options.open +'# ')\r\n .replace(inner.exp(options.close +'}'), '} '+ options.close).replace(/\\\\/g, '\\\\\\\\')\r\n\r\n // 不匹配指定区域的内容\r\n .replace(inner.exp(options.open + '!(.+?)!' + options.close), function(str){\r\n str = str.replace(inner.exp('^'+ options.open + '!'), '')\r\n .replace(inner.exp('!'+ options.close), '')\r\n .replace(inner.exp(options.open + '|' + options.close), function(tag){\r\n return tag.replace(/(.)/g, '\\\\$1')\r\n });\r\n return str\r\n })\r\n\r\n // 匹配 JS 语法\r\n .replace(/(?=\"|')/g, '\\\\').replace(that.tagExp(), function(str){\r\n str = str.replace(jss, '').replace(jsse, '');\r\n return '\";' + str.replace(/\\\\(.)/g, '$1') + ';view+=\"';\r\n })\r\n\r\n // 匹配普通输出语句\r\n .replace(that.tagExp(1), function(str){\r\n var start = '\"+laytpl.escape(';\r\n if(str.replace(/\\s/g, '') === options.open + options.close){\r\n return '';\r\n }\r\n str = str.replace(inner.exp(options.open + '|' + options.close), '');\r\n if(/^=/.test(str)){\r\n str = str.replace(/^=/, '');\r\n } else if(/^-/.test(str)){\r\n str = str.replace(/^-/, '');\r\n start = '\"+(';\r\n }\r\n return start + str.replace(/\\\\(.)/g, '$1') + ')+\"';\r\n });\r\n\r\n template = '\"use strict\";var view = \"' + template + '\";return view;';\r\n\r\n try {\r\n /**\r\n * 请注意: 开发者在使用模板语法时,需确保模板中的 JS 语句不来自于页面用户输入。\r\n * 即模板中的 JS 语句必须在页面开发者自身的可控范围内,否则请避免使用该模板解析。\r\n */\r\n that.cache = template = new Function('d, laytpl', template);\r\n return template(data, tool);\r\n } catch(e) {\r\n delete that.cache;\r\n return inner.error(e, source);\r\n }\r\n };\r\n\r\n // 数据渲染\r\n Class.prototype.render = function(data, callback){\r\n data = data || {};\r\n\r\n var that = this;\r\n var result = that.cache ? that.cache(data, tool) : that.parse(that.template, data);\r\n\r\n // 返回渲染结果\r\n typeof callback === 'function' && callback(result);\r\n return result;\r\n };\r\n\r\n // 创建实例\r\n var laytpl = function(template, options){\r\n return new Class(template, options);\r\n };\r\n\r\n // 配置全局属性\r\n laytpl.config = function(options){\r\n options = options || {};\r\n for(var i in options){\r\n config[i] = options[i];\r\n }\r\n };\r\n\r\n laytpl.v = '2.0.0';\r\n\r\n // export\r\n exports('laytpl', laytpl);\r\n});\r\n","/**\r\n * laypage 分页组件\r\n */\r\n\r\nlayui.define(function(exports){\r\n \"use strict\";\r\n \r\n var doc = document;\r\n var id = 'getElementById';\r\n var tag = 'getElementsByTagName';\r\n \r\n // 字符常量\r\n var MOD_NAME = 'laypage';\r\n var DISABLED = 'layui-disabled';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.config = options || {};\r\n that.config.index = ++laypage.index;\r\n that.render(true);\r\n };\r\n\r\n // 判断传入的容器类型\r\n Class.prototype.type = function(){\r\n var config = this.config;\r\n if(typeof config.elem === 'object'){\r\n return config.elem.length === undefined ? 2 : 3;\r\n }\r\n };\r\n\r\n // 分页视图\r\n Class.prototype.view = function(){\r\n var that = this;\r\n var config = that.config;\r\n\r\n // 连续页码个数\r\n var groups = config.groups = 'groups' in config \r\n ? (Number(config.groups) || 0)\r\n : 5; \r\n \r\n // 排版\r\n config.layout = typeof config.layout === 'object' \r\n ? config.layout \r\n : ['prev', 'page', 'next'];\r\n \r\n config.count = Number(config.count) || 0; // 数据总数\r\n config.curr = Number(config.curr) || 1; // 当前页\r\n\r\n // 每页条数的选择项\r\n config.limits = typeof config.limits === 'object'\r\n ? config.limits\r\n : [10, 20, 30, 40, 50];\r\n\r\n // 默认条数\r\n config.limit = Number(config.limit) || 10;\r\n \r\n // 总页数\r\n config.pages = Math.ceil(config.count/config.limit) || 1;\r\n \r\n // 当前页不能超过总页数\r\n if(config.curr > config.pages){\r\n config.curr = config.pages;\r\n } else if(config.curr < 1) { // 当前分页不能小于 1\r\n config.curr = 1;\r\n }\r\n \r\n // 连续分页个数不能低于 0 且不能大于总页数\r\n if(groups < 0){\r\n groups = 1;\r\n } else if (groups > config.pages){\r\n groups = config.pages;\r\n }\r\n \r\n config.prev = 'prev' in config ? config.prev : '上一页'; // 上一页文本\r\n config.next = 'next' in config ? config.next : '下一页'; // 下一页文本\r\n \r\n // 计算当前组\r\n var index = config.pages > groups \r\n ? Math.ceil( (config.curr + (groups > 1 ? 1 : 0)) / (groups > 0 ? groups : 1) )\r\n : 1;\r\n \r\n // 视图片段\r\n var views = {\r\n // 上一页\r\n prev: function(){\r\n return config.prev \r\n ? ''+ config.prev +''\r\n : '';\r\n }(),\r\n \r\n // 页码\r\n page: function(){\r\n var pager = [];\r\n \r\n // 数据量为0时,不输出页码\r\n if(config.count < 1){\r\n return '';\r\n }\r\n \r\n // 首页\r\n if(index > 1 && config.first !== false && groups !== 0){\r\n pager.push(''+ (config.first || 1) +'');\r\n }\r\n\r\n // 计算当前页码组的起始页\r\n var halve = Math.floor((groups-1)/2) // 页码数等分\r\n var start = index > 1 ? config.curr - halve : 1;\r\n var end = index > 1 ? (function(){\r\n var max = config.curr + (groups - halve - 1);\r\n return max > config.pages ? config.pages : max;\r\n }()) : groups;\r\n \r\n // 防止最后一组出现“不规定”的连续页码数\r\n if(end - start < groups - 1){\r\n start = end - groups + 1;\r\n }\r\n\r\n // 输出左分割符\r\n if(config.first !== false && start > 2){\r\n pager.push('...')\r\n }\r\n \r\n // 输出连续页码\r\n for(; start <= end; start++){\r\n if(start === config.curr){\r\n // 当前页\r\n pager.push(''+ start +'');\r\n } else {\r\n pager.push(''+ start +'');\r\n }\r\n }\r\n \r\n // 输出输出右分隔符 & 末页\r\n if(config.pages > groups && config.pages > end && config.last !== false){\r\n if(end + 1 < config.pages){\r\n pager.push('...');\r\n }\r\n if(groups !== 0){\r\n pager.push(''+ (config.last || config.pages) +'');\r\n }\r\n }\r\n\r\n return pager.join('');\r\n }(),\r\n \r\n // 下一页\r\n next: function(){\r\n return config.next \r\n ? ''+ config.next +''\r\n : '';\r\n }(),\r\n \r\n // 数据总数\r\n count: function(){\r\n var countText = typeof config.countText === 'object' ? config.countText : ['共 ', ' 条'];\r\n return ''+ countText[0] + config.count + countText[1] +''\r\n }(),\r\n \r\n // 每页条数\r\n limit: function(){\r\n var elemArr = ['';\r\n }(),\r\n \r\n // 刷新当前页\r\n refresh: [\r\n '',\r\n '',\r\n ''\r\n ].join(''),\r\n\r\n // 跳页区域\r\n skip: function(){\r\n var skipText = typeof config.skipText === 'object' ? config.skipText : [\r\n '到第',\r\n '页',\r\n '确定'\r\n ];\r\n return [\r\n ''+ skipText[0],\r\n '',\r\n skipText[1]+ '',\r\n ''\r\n ].join('');\r\n }()\r\n };\r\n\r\n return ['
',\r\n function(){\r\n var plate = [];\r\n layui.each(config.layout, function(index, item){\r\n if(views[item]){\r\n plate.push(views[item])\r\n }\r\n });\r\n return plate.join('');\r\n }(),\r\n '
'].join('');\r\n };\r\n\r\n // 跳页的回调\r\n Class.prototype.jump = function(elem, isskip){\r\n if(!elem) return;\r\n\r\n var that = this;\r\n var config = that.config;\r\n var childs = elem.children;\r\n var btn = elem[tag]('button')[0];\r\n var input = elem[tag]('input')[0];\r\n var select = elem[tag]('select')[0];\r\n var skip = function(){\r\n var curr = Number(input.value.replace(/\\s|\\D/g, ''));\r\n if(curr){\r\n config.curr = curr;\r\n that.render();\r\n }\r\n };\r\n \r\n if(isskip) return skip();\r\n \r\n // 页码\r\n for(var i = 0, len = childs.length; i < len; i++){\r\n if(childs[i].nodeName.toLowerCase() === 'a'){\r\n laypage.on(childs[i], 'click', function(){\r\n var curr = Number(this.getAttribute('data-page'));\r\n if(curr < 1 || curr > config.pages) return;\r\n config.curr = curr;\r\n that.render();\r\n });\r\n }\r\n }\r\n \r\n // 条数\r\n if(select){\r\n laypage.on(select, 'change', function(){\r\n var value = this.value;\r\n if(config.curr*value > config.count){\r\n config.curr = Math.ceil(config.count/value);\r\n }\r\n config.limit = value;\r\n that.render();\r\n });\r\n }\r\n \r\n // 确定\r\n if(btn){\r\n laypage.on(btn, 'click', function(){\r\n skip();\r\n });\r\n }\r\n };\r\n \r\n // 输入页数字控制\r\n Class.prototype.skip = function(elem){\r\n if(!elem) return;\r\n\r\n var that = this;\r\n var input = elem[tag]('input')[0];\r\n\r\n if(!input) return;\r\n\r\n // 键盘事件\r\n laypage.on(input, 'keyup', function(e){\r\n var value = this.value;\r\n var keyCode = e.keyCode;\r\n\r\n if(/^(37|38|39|40)$/.test(keyCode)) return;\r\n\r\n if(/\\D/.test(value)){\r\n this.value = value.replace(/\\D/, '');\r\n }\r\n if(keyCode === 13){\r\n that.jump(elem, true)\r\n }\r\n });\r\n };\r\n\r\n // 渲染分页\r\n Class.prototype.render = function(load){\r\n var that = this;\r\n var config = that.config;\r\n var type = that.type();\r\n var view = that.view();\r\n \r\n if(type === 2){\r\n config.elem && (config.elem.innerHTML = view);\r\n } else if(type === 3){\r\n config.elem.html(view);\r\n } else {\r\n if(doc[id](config.elem)){\r\n doc[id](config.elem).innerHTML = view;\r\n }\r\n }\r\n\r\n config.jump && config.jump(config, load);\r\n \r\n var elem = doc[id]('layui-laypage-' + config.index);\r\n that.jump(elem);\r\n \r\n if(config.hash && !load){\r\n location.hash = '!'+ config.hash +'='+ config.curr;\r\n }\r\n \r\n that.skip(elem);\r\n };\r\n \r\n // 外部接口\r\n var laypage = {\r\n // 分页渲染\r\n render: function(options){\r\n var o = new Class(options);\r\n return o.index;\r\n },\r\n index: layui.laypage ? (layui.laypage.index + 10000) : 0,\r\n on: function(elem, even, fn){\r\n elem.attachEvent ? elem.attachEvent('on'+ even, function(e){ // for ie\r\n e.target = e.srcElement;\r\n fn.call(elem, e);\r\n }) : elem.addEventListener(even, fn, false);\r\n return this;\r\n }\r\n }\r\n\r\n exports(MOD_NAME, laypage);\r\n});\r\n","/** laydate 日期与时间控件 | MIT Licensed */ \r\n// @ts-expect-error\r\n;!function(window, document){ // gulp build: laydate-header\r\n \"use strict\";\r\n\r\n var isLayui = window.layui && layui.define;\r\n var ready = {\r\n getPath: window.lay && lay.getPath ? lay.getPath : '',\r\n\r\n // 载入 CSS 依赖\r\n link: function (href, fn, cssname) {\r\n // 未设置路径,则不主动加载 css\r\n if (!laydate.path) return;\r\n\r\n // 加载 css\r\n if (window.lay && lay.layui) {\r\n lay.layui.link(laydate.path + href, fn, cssname);\r\n }\r\n }\r\n };\r\n\r\n // 识别预先可能定义的指定全局对象\r\n var GLOBAL = window.LAYUI_GLOBAL || {};\r\n\r\n // 模块名\r\n var MOD_NAME = 'laydate';\r\n var MOD_ID = 'lay-' + MOD_NAME + '-id'; // 已渲染过的索引标记名\r\n\r\n // 外部调用\r\n var laydate = {\r\n v: '5.6.0', // layDate 版本号\r\n config: {\r\n weekStart: 0 // 默认周日一周的开始\r\n }, // 全局配置项\r\n index: window.laydate && window.laydate.v ? 100000 : 0,\r\n path: GLOBAL.laydate_dir || ready.getPath,\r\n\r\n // 设置全局项\r\n set: function (options) {\r\n var that = this;\r\n that.config = lay.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n // 主体 CSS 等待事件\r\n ready: function (callback) {\r\n var cssname = 'laydate';\r\n var ver = '';\r\n var path = (isLayui ? 'modules/' : '') + 'laydate.css?v=' + laydate.v + ver;\r\n\r\n isLayui ? (\r\n layui['layui.all'] ?\r\n (typeof callback === 'function' && callback()) :\r\n layui.addcss(path, callback, cssname)\r\n ) : ready.link(path, callback, cssname);\r\n\r\n return this;\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return that.inst = {\r\n // 提示框\r\n hint: function(content){\r\n that.hint.call(that, content);\r\n },\r\n // 重载实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n config: that.config\r\n };\r\n };\r\n\r\n // 字符常量\r\n var ELEM = '.layui-laydate';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'laydate-disabled';\r\n var LIMIT_YEAR = [100, 200000];\r\n\r\n var ELEM_STATIC = 'layui-laydate-static';\r\n var ELEM_LIST = 'layui-laydate-list';\r\n var ELEM_SELECTED = 'laydate-selected';\r\n var ELEM_HINT = 'layui-laydate-hint';\r\n var ELEM_DAY_NOW = 'laydate-day-now';\r\n var ELEM_PREV = 'laydate-day-prev';\r\n var ELEM_NEXT = 'laydate-day-next';\r\n var ELEM_FOOTER = 'layui-laydate-footer';\r\n var ELEM_SHORTCUT = 'layui-laydate-shortcut';\r\n var ELEM_NOW = '.laydate-btns-now'\r\n var ELEM_CONFIRM = '.laydate-btns-confirm';\r\n var ELEM_TIME_TEXT = 'laydate-time-text';\r\n var ELEM_TIME_BTN = 'laydate-btns-time';\r\n var ELEM_PREVIEW = 'layui-laydate-preview';\r\n var ELEM_MAIN = 'layui-laydate-main';\r\n var ELEM_SHADE = 'layui-laydate-shade';\r\n\r\n // 组件构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++laydate.index;\r\n that.config = lay.extend({}, that.config, laydate.config, options);\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = lay(options.elem || that.config.elem);\r\n if(elem.length > 1){\r\n lay.each(elem, function(){\r\n laydate.render(lay.extend({}, that.config, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 初始化属性\r\n options = lay.extend(that.config, lay.options(elem[0])); // 继承节点上的属性\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if(elem[0] && elem.attr(MOD_ID)){\r\n var newThat = thisModule.getThis(elem.attr(MOD_ID));\r\n if(!newThat) return;\r\n return newThat.reload(options);\r\n }\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n // 自增索引\r\n options.index = that.index;\r\n\r\n // 初始化\r\n laydate.ready(function(){\r\n that.init();\r\n });\r\n };\r\n\r\n // 日期格式字符\r\n var dateType = 'yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s';\r\n\r\n // 将日期格式字符转换为数组\r\n thisModule.formatArr = function(format){\r\n return (format || '').match(new RegExp(dateType + '|.', 'g')) || []\r\n };\r\n\r\n /*\r\n 组件操作\r\n */\r\n\r\n // 是否闰年\r\n Class.isLeapYear = function(year){\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n type: 'date' //控件类型,支持:year/month/date/time/datetime\r\n ,range: false //是否开启范围选择,即双控件\r\n ,format: 'yyyy-MM-dd' //默认日期格式\r\n ,value: null //默认日期,支持传入new Date(),或者符合format参数设定的日期格式字符\r\n ,isInitValue: true //用于控制是否自动向元素填充初始值(需配合 value 参数使用)\r\n ,min: '1900-1-1' //有效最小日期,年月日必须用“-”分割,时分秒必须用“:”分割。注意:它并不是遵循 format 设定的格式。\r\n ,max: '2099-12-31' //有效最大日期,同上\r\n ,trigger: 'click' //呼出控件的事件\r\n ,show: false //是否直接显示,如果设置 true,则默认直接显示控件\r\n ,showBottom: true //是否显示底部栏\r\n ,isPreview: true //是否显示值预览\r\n ,btns: ['clear', 'now', 'confirm'] //右下角显示的按钮,会按照数组顺序排列\r\n ,lang: 'cn' //语言,只支持cn/en,即中文和英文\r\n ,theme: 'default' //主题\r\n ,position: null //控件定位方式定位, 默认absolute,支持:fixed/absolute/static\r\n ,calendar: false //是否开启公历重要节日,仅支持中文版\r\n ,mark: {} //日期备注,如重要事件或活动标记\r\n ,holidays: null // 标注法定节假日或补假上班\r\n ,zIndex: null //控件层叠顺序\r\n ,done: null //控件选择完毕后的回调,点击清空/现在/确定也均会触发\r\n ,change: null //日期时间改变后的回调\r\n ,autoConfirm: true //是否自动确认(日期|年份|月份选择器非range下是否自动确认)\r\n ,shade: 0\r\n };\r\n\r\n //多语言\r\n Class.prototype.lang = function(){\r\n var that = this\r\n ,options = that.config\r\n ,text = {\r\n cn: {\r\n weeks: ['日', '一', '二', '三', '四', '五', '六']\r\n ,time: ['时', '分', '秒']\r\n ,timeTips: '选择时间'\r\n ,startTime: '开始时间'\r\n ,endTime: '结束时间'\r\n ,dateTips: '返回日期'\r\n ,month: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二']\r\n ,tools: {\r\n confirm: '确定'\r\n ,clear: '清空'\r\n ,now: '现在'\r\n }\r\n ,timeout: '结束时间不能早于开始时间
请重新选择'\r\n ,invalidDate: '不在有效日期或时间范围内'\r\n ,formatError: ['日期格式不合法
必须遵循下述格式:
', '
已为你重置']\r\n ,preview: '当前选中的结果'\r\n }\r\n ,en: {\r\n weeks: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\r\n ,time: ['Hours', 'Minutes', 'Seconds']\r\n ,timeTips: 'Select Time'\r\n ,startTime: 'Start Time'\r\n ,endTime: 'End Time'\r\n ,dateTips: 'Select Date'\r\n ,month: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n ,tools: {\r\n confirm: 'Confirm'\r\n ,clear: 'Clear'\r\n ,now: 'Now'\r\n }\r\n ,timeout: 'End time cannot be less than start Time
Please re-select'\r\n ,invalidDate: 'Invalid date'\r\n ,formatError: ['The date format error
Must be followed:
', '
It has been reset']\r\n ,preview: 'The selected result'\r\n }\r\n };\r\n return text[options.lang] || text['cn'];\r\n };\r\n\r\n Class.prototype.markerOfChineseFestivals = {\r\n '0-1-1': '元旦',\r\n '0-2-14': '情人' ,\r\n '0-3-8': '妇女',\r\n '0-3-12': '植树',\r\n '0-4-1': '愚人',\r\n '0-5-1': '劳动',\r\n '0-5-4': '青年',\r\n '0-6-1': '儿童',\r\n '0-9-10': '教师',\r\n '0-10-1': '国庆',\r\n '0-12-25': '圣诞'\r\n }\r\n\r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = lay.extend({}, that.config, options);\r\n that.init();\r\n };\r\n\r\n //初始准备\r\n Class.prototype.init = function(){\r\n var that = this\r\n ,options = that.config\r\n ,isStatic = options.position === 'static'\r\n ,format = {\r\n year: 'yyyy'\r\n ,month: 'yyyy-MM'\r\n ,date: 'yyyy-MM-dd'\r\n ,time: 'HH:mm:ss'\r\n ,datetime: 'yyyy-MM-dd HH:mm:ss'\r\n };\r\n\r\n options.elem = lay(options.elem);\r\n options.eventElem = lay(options.eventElem);\r\n\r\n if(!options.elem[0]) return;\r\n\r\n layui.type(options.theme) !== 'array' && (options.theme = [options.theme]);\r\n // 设置了全面版模式\r\n if (options.fullPanel) {\r\n if (options.type !== 'datetime' || options.range) {\r\n // 目前只支持datetime的全面版\r\n delete options.fullPanel;\r\n }\r\n }\r\n\r\n //日期范围分隔符\r\n that.rangeStr = options.range ? (\r\n typeof options.range === 'string' ? options.range : '-'\r\n ) : '';\r\n\r\n //日期范围的日历面板是否联动\r\n that.rangeLinked = !!(options.range && options.rangeLinked && (options.type === 'date' || options.type === 'datetime'))\r\n\r\n //切换日历联动方式\r\n that.autoCalendarModel = function () {\r\n var state = that.rangeLinked;\r\n that.rangeLinked = (options.range && (options.type === 'date' || options.type === 'datetime'))\r\n && ((!that.startDate || !that.endDate) || (that.startDate && that.endDate && that.startDate.year === that.endDate.year && that.startDate.month === that.endDate.month));\r\n lay(that.elem)[that.rangeLinked ? 'addClass' : 'removeClass']('layui-laydate-linkage');\r\n return that.rangeLinked != state; // 返回发生了变化\r\n };\r\n\r\n //是否自动切换\r\n that.autoCalendarModel.auto = that.rangeLinked && options.rangeLinked === 'auto';\r\n\r\n //若 range 参数为数组,则表示为开始日期和结束日期的 input 对象\r\n if(layui.type(options.range) === 'array'){\r\n that.rangeElem = [\r\n lay(options.range[0]),\r\n lay(options.range[1])\r\n ];\r\n }\r\n\r\n //若 type 设置非法,则初始化为 date 类型\r\n if(!format[options.type]){\r\n window.console && console.error && console.error('laydate type error:\\''+ options.type + '\\' is not supported')\r\n options.type = 'date';\r\n }\r\n\r\n //根据不同 type,初始化默认 format\r\n if(options.format === format.date){\r\n options.format = format[options.type] || format.date;\r\n }\r\n\r\n //将日期格式转化成数组\r\n that.format = thisModule.formatArr(options.format);\r\n\r\n // 设置了一周的开始是周几,此处做一个控制\r\n if (options.weekStart) {\r\n if (!/^[0-6]$/.test(options.weekStart)) {\r\n var lang = that.lang();\r\n options.weekStart = lang.weeks.indexOf(options.weekStart);\r\n if (options.weekStart === -1) options.weekStart = 0;\r\n }\r\n }\r\n\r\n //生成正则表达式\r\n that.EXP_IF = '';\r\n that.EXP_SPLIT = '';\r\n lay.each(that.format, function(i, item){\r\n var EXP = new RegExp(dateType).test(item)\r\n ? '\\\\d{'+ function(){\r\n if(new RegExp(dateType).test(that.format[i === 0 ? i + 1 : i - 1]||'')){\r\n if(/^yyyy|y$/.test(item)) return 4;\r\n return item.length;\r\n }\r\n if(/^yyyy$/.test(item)) return '1,4';\r\n if(/^y$/.test(item)) return '1,308';\r\n return '1,2';\r\n }() +'}'\r\n : '\\\\' + item;\r\n that.EXP_IF = that.EXP_IF + EXP;\r\n that.EXP_SPLIT = that.EXP_SPLIT + '(' + EXP + ')';\r\n });\r\n //验证日期格式正则\r\n that.EXP_IF_ONE = new RegExp('^'+ that.EXP_IF +'$'); //验证单个日期格式\r\n that.EXP_IF = new RegExp('^'+ (\r\n options.range ?\r\n that.EXP_IF + '\\\\s\\\\'+ that.rangeStr + '\\\\s' + that.EXP_IF\r\n : that.EXP_IF\r\n ) +'$');\r\n that.EXP_SPLIT = new RegExp('^'+ that.EXP_SPLIT +'$', '');\r\n\r\n //如果不是 input|textarea 元素,则默认采用 click 事件\r\n if(!that.isInput(options.elem[0])){\r\n if(options.trigger === 'focus'){\r\n options.trigger = 'click';\r\n }\r\n }\r\n\r\n // 设置唯一 KEY\r\n options.elem.attr('lay-key', that.index);\r\n options.eventElem.attr('lay-key', that.index);\r\n options.elem.attr(MOD_ID, options.id); // 渲染过的标记\r\n\r\n\r\n //获取限制内日期\r\n lay.each(['min', 'max'], function(i, item){\r\n var ymd = [];\r\n var hms = [];\r\n if(typeof options[item] === 'number'){ //如果为数字\r\n var day = options[item]\r\n ,tDate = new Date()\r\n ,time = that.newDate({ //今天的最大毫秒数\r\n year: tDate.getFullYear()\r\n ,month: tDate.getMonth()\r\n ,date: tDate.getDate()\r\n ,hours: i ? 23 : 0\r\n ,minutes: i ? 59 : 0\r\n ,seconds: i ? 59 : 0\r\n }).getTime()\r\n ,STAMP = 86400000 //代表一天的毫秒数\r\n ,thisDate = new Date(\r\n day ? (\r\n day < STAMP ? time + day*STAMP : day //如果数字小于一天的毫秒数,则数字为天数,否则为毫秒数\r\n ) : time\r\n );\r\n ymd = [thisDate.getFullYear(), thisDate.getMonth() + 1, thisDate.getDate()];\r\n hms = [thisDate.getHours(), thisDate.getMinutes(), thisDate.getSeconds()];\r\n } else if(typeof options[item] === 'string') {\r\n ymd = (options[item].match(/\\d+-\\d+-\\d+/) || [''])[0].split('-');\r\n hms = (options[item].match(/\\d+:\\d+:\\d+/) || [''])[0].split(':');\r\n } else if(typeof options[item] === 'object'){\r\n return options[item];\r\n }\r\n options[item] = {\r\n year: ymd[0] | 0 || new Date().getFullYear()\r\n ,month: ymd[1] ? (ymd[1] | 0) - 1 : new Date().getMonth()\r\n ,date: ymd[2] | 0 || new Date().getDate()\r\n ,hours: hms[0] | 0\r\n ,minutes: hms[1] | 0\r\n ,seconds: hms[2] | 0\r\n };\r\n });\r\n\r\n that.elemID = 'layui-laydate'+ options.elem.attr('lay-key');\r\n\r\n if(options.show || isStatic) that.render();\r\n isStatic || that.events();\r\n\r\n // 重定义 input 元素的 get set\r\n if(typeof options.formatToDisplay === 'function'){\r\n if(that.isInput(options.elem[0])){\r\n that.formatToDisplay(options.elem[0], options.formatToDisplay);\r\n } else {\r\n var rangeElem = that.rangeElem;\r\n if(rangeElem){\r\n that.formatToDisplay(rangeElem[0][0], options.formatToDisplay);\r\n that.formatToDisplay(rangeElem[1][0], options.formatToDisplay);\r\n }\r\n }\r\n }\r\n\r\n //默认赋值\r\n if(options.value && options.isInitValue){\r\n if(layui.type(options.value) === 'date'){\r\n that.setValue(that.parse(0, that.systemDate(options.value)));\r\n } else {\r\n that.setValue(options.value);\r\n }\r\n }\r\n };\r\n\r\n //控件主体渲染\r\n Class.prototype.render = function(){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,isStatic = options.position === 'static'\r\n\r\n //主面板\r\n ,elem = that.elem = lay.elem('div', {\r\n id: that.elemID\r\n ,\"class\": [\r\n 'layui-laydate'\r\n ,options.range ? ' layui-laydate-range' : ''\r\n ,that.rangeLinked ? ' layui-laydate-linkage' : ''\r\n ,isStatic ? (' '+ ELEM_STATIC) : ''\r\n ,options.fullPanel ? ' laydate-theme-fullpanel' : '' // 全面版\r\n // ,options.theme && options.theme !== 'default' && !/^#/.test(options.theme) ? (' laydate-theme-' + options.theme) : ''\r\n ,(function () {\r\n var themeStr = '';\r\n lay.each(options.theme, function (index, theme) {\r\n if (theme !== 'default' && !/^#/.test(theme)) {\r\n themeStr += ' laydate-theme-' + theme;\r\n }\r\n })\r\n return themeStr;\r\n })()\r\n ].join('')\r\n })\r\n\r\n //主区域\r\n ,elemMain = that.elemMain = []\r\n ,elemHeader = that.elemHeader = []\r\n ,elemCont = that.elemCont = []\r\n ,elemTable = that.table = []\r\n\r\n //底部区域\r\n ,divFooter = that.footer = lay.elem('div', {\r\n \"class\": ELEM_FOOTER\r\n })\r\n\r\n //快捷栏\r\n ,divShortcut = that.shortcut = lay.elem('ul', {\r\n \"class\": ELEM_SHORTCUT\r\n });\r\n\r\n if(options.zIndex) elem.style.zIndex = options.zIndex;\r\n\r\n //单双日历区域\r\n lay.each(new Array(2), function(i){\r\n if(!options.range && i > 0){\r\n return true;\r\n }\r\n\r\n //头部区域\r\n var divHeader = lay.elem('div', {\r\n \"class\": 'layui-laydate-header'\r\n })\r\n\r\n //左右切换\r\n ,headerChild = [function(){ //上一年\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-prev-y'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //上一月\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-prev-m'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //年月选择\r\n var elem = lay.elem('div', {\r\n \"class\": 'laydate-set-ym'\r\n }), spanY = lay.elem('span'), spanM = lay.elem('span');\r\n elem.appendChild(spanY);\r\n elem.appendChild(spanM);\r\n return elem;\r\n }(), function(){ //下一月\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-next-m'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //下一年\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-next-y'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }()]\r\n\r\n //日历内容区域\r\n ,divContent = lay.elem('div', {\r\n \"class\": 'layui-laydate-content'\r\n })\r\n ,table = lay.elem('table')\r\n ,thead = lay.elem('thead'), theadTr = lay.elem('tr');\r\n\r\n //生成年月选择\r\n lay.each(headerChild, function(i, item){\r\n divHeader.appendChild(item);\r\n });\r\n\r\n //生成表格\r\n thead.appendChild(theadTr);\r\n lay.each(new Array(6), function(i){ //表体\r\n var tr = table.insertRow(0);\r\n lay.each(new Array(7), function(j){\r\n if(i === 0){\r\n var th = lay.elem('th');\r\n th.innerHTML = lang.weeks[(j + options.weekStart) % 7];\r\n theadTr.appendChild(th);\r\n }\r\n tr.insertCell(j);\r\n });\r\n });\r\n table.insertBefore(thead, table.children[0]); //表头\r\n divContent.appendChild(table);\r\n\r\n elemMain[i] = lay.elem('div', {\r\n \"class\": ELEM_MAIN + ' laydate-main-list-'+ i\r\n });\r\n\r\n elemMain[i].appendChild(divHeader);\r\n elemMain[i].appendChild(divContent);\r\n\r\n elemHeader.push(headerChild);\r\n elemCont.push(divContent);\r\n elemTable.push(table);\r\n });\r\n\r\n //生成底部栏\r\n lay(divFooter).html(function(){\r\n var html = [], btns = [];\r\n if(options.type === 'datetime'){\r\n html.push(''+ lang.timeTips +'');\r\n }\r\n if(!(!options.range && options.type === 'datetime') || options.fullPanel){\r\n html.push('')\r\n }\r\n\r\n lay.each(options.btns, function(i, item){\r\n var title = lang.tools[item] || 'btn';\r\n if(options.range && item === 'now') return;\r\n if(isStatic && item === 'clear') title = options.lang === 'cn' ? '重置' : 'Reset';\r\n btns.push(''+ title +'');\r\n });\r\n html.push('');\r\n return html.join('');\r\n }());\r\n\r\n // 生成快捷键栏\r\n if (options.shortcuts) {\r\n elem.appendChild(divShortcut);\r\n lay(divShortcut).html(function () {\r\n var shortcutBtns = [];\r\n lay.each(options.shortcuts, function (i, item) {\r\n shortcutBtns.push('
  • '+item.text+'
  • ')\r\n })\r\n return shortcutBtns.join('');\r\n }()).find('li').on('click', function (event) {\r\n var btnSetting = options.shortcuts[this.dataset['index']] || {};\r\n var value = (typeof btnSetting.value === 'function'\r\n ? btnSetting.value()\r\n : btnSetting.value) || [];\r\n if (!layui.isArray(value)) {\r\n value = [value];\r\n }\r\n var type = options.type;\r\n lay.each(value, function (i, item) {\r\n var dateTime = [options.dateTime, that.endDate][i];\r\n if (type === 'time' && layui.type(item) !== 'date') {\r\n if (that.EXP_IF.test(item)) {\r\n item = (item.match(that.EXP_SPLIT) || []).slice(1);\r\n lay.extend(dateTime, {hours: item[0] | 0, minutes: item[2] | 0, seconds: item[4] | 0})\r\n }\r\n } else {\r\n lay.extend(dateTime, that.systemDate(layui.type(item) === 'date' ? item : new Date(item)))\r\n }\r\n\r\n if (type === 'time' || type === 'datetime') {\r\n that[['startTime', 'endTime'][i]] = {\r\n hours: dateTime.hours,\r\n minutes: dateTime.minutes,\r\n seconds: dateTime.seconds,\r\n }\r\n }\r\n if (i === 0) { // 第一个值作为startDate\r\n that.startDate = lay.extend({}, dateTime);\r\n } else {\r\n that.endState = true;\r\n }\r\n if (type === 'year' || type === 'month' || type === 'time') {\r\n that.listYM[i] = [dateTime.year, dateTime.month + 1];\r\n } else if (i) {\r\n that.autoCalendarModel.auto && that.autoCalendarModel();\r\n }\r\n });\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n\r\n var timeBtn = lay(that.footer).find('.'+ ELEM_TIME_BTN).removeClass(DISABLED);\r\n timeBtn && timeBtn.attr('lay-type') === 'date' && timeBtn[0].click();\r\n that.done(null, 'change');\r\n\r\n lay(this).addClass(THIS);\r\n\r\n // 自动确认\r\n if(options.position !== 'static'){\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n /*\r\n if (options.position !== 'static' && !options.range && options.autoConfirm) {\r\n if (type === 'date') {\r\n that.choose(lay(elem).find('td.layui-this'))\r\n } else if (type === 'year' || type === 'month') {\r\n if(lay(elemMain[0]).find('.' + ELEM_MAIN + ' li.' + THIS + ':not(.laydate-disabled)')[0]) {\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n }\r\n }\r\n */\r\n })\r\n }\r\n\r\n //插入到主区域\r\n lay.each(elemMain, function(i, main){\r\n elem.appendChild(main);\r\n });\r\n options.showBottom && elem.appendChild(divFooter);\r\n\r\n // 生成自定义主题\r\n var style = lay.elem('style');\r\n var styleText = [];\r\n var colorTheme;\r\n var isPrimaryColor = true;\r\n lay.each(options.theme, function (index, theme) {\r\n // 主色\r\n if(isPrimaryColor && /^#/.test(theme)){\r\n colorTheme = true;\r\n isPrimaryColor = false;\r\n styleText.push([\r\n '#{{id}} .layui-laydate-header{background-color:{{theme}};}',\r\n '#{{id}} li.layui-this,#{{id}} td.layui-this>div{background-color:{{theme}} !important;}',\r\n options.theme.indexOf('circle') !== -1 ? '' : '#{{id}} .layui-this{background-color:{{theme}} !important;}',\r\n '#{{id}} .laydate-day-now{color:{{theme}} !important;}',\r\n '#{{id}} .laydate-day-now:after{border-color:{{theme}} !important;}'\r\n ].join('').replace(/{{id}}/g, that.elemID).replace(/{{theme}}/g, theme));\r\n return;\r\n }\r\n // 第二个自定义颜色作为辅色\r\n if(!isPrimaryColor && /^#/.test(theme)){\r\n styleText.push([\r\n '#{{id}} .laydate-selected>div{background-color:{{theme}} !important;}',\r\n '#{{id}} .laydate-selected:hover>div{background-color:{{theme}} !important;}'\r\n ].join('').replace(/{{id}}/g, that.elemID).replace(/{{theme}}/g, theme));\r\n }\r\n });\r\n //快捷栏样式\r\n if (options.shortcuts && options.range) {\r\n styleText.push('#{{id}}.layui-laydate-range{width: 628px;}'.replace(/{{id}}/g, that.elemID))\r\n }\r\n if (styleText.length) {\r\n styleText = styleText.join('');\r\n if('styleSheet' in style){\r\n style.setAttribute('type', 'text/css');\r\n style.styleSheet.cssText = styleText;\r\n } else {\r\n style.innerHTML = styleText;\r\n }\r\n\r\n colorTheme && lay(elem).addClass('laydate-theme-molv');\r\n elem.appendChild(style);\r\n }\r\n\r\n //移除上一个控件\r\n that.remove(Class.thisElemDate);\r\n\r\n //记录当前执行的实例索引\r\n laydate.thisId = options.id;\r\n\r\n //如果是静态定位,则插入到指定的容器中,否则,插入到body\r\n isStatic ? options.elem.append(elem) : (\r\n document.body.appendChild(elem)\r\n ,that.position() //定位\r\n );\r\n\r\n var shade = options.shade ? ('
    ') : '';\r\n elem.insertAdjacentHTML('beforebegin', shade);\r\n\r\n that.checkDate().calendar(null, 0, 'init'); //初始校验\r\n that.changeEvent(); //日期切换\r\n\r\n Class.thisElemDate = that.elemID;\r\n\r\n that.renderAdditional()\r\n typeof options.ready === 'function' && options.ready(lay.extend({}, options.dateTime, {\r\n month: options.dateTime.month + 1\r\n }));\r\n\r\n that.preview();\r\n };\r\n\r\n //控件移除\r\n Class.prototype.remove = function(prev){\r\n var that = this\r\n ,options = that.config\r\n ,elem = lay('#'+ (prev || that.elemID));\r\n if(!elem[0]) return that;\r\n\r\n if(!elem.hasClass(ELEM_STATIC)){\r\n that.checkDate(function(){\r\n elem.remove();\r\n //delete options.dateTime;\r\n delete that.startDate;\r\n delete that.endDate;\r\n delete that.endState;\r\n delete that.startTime;\r\n delete that.endTime;\r\n delete laydate.thisId;\r\n typeof options.close === 'function' && options.close(that);\r\n });\r\n }\r\n lay('.' + ELEM_SHADE).remove();\r\n return that;\r\n };\r\n\r\n //定位算法\r\n Class.prototype.position = function(){\r\n var that = this\r\n ,options = that.config;\r\n lay.position(options.elem[0], that.elem, {\r\n position: options.position\r\n });\r\n return that;\r\n };\r\n\r\n // 提示\r\n Class.prototype.hint = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n var div = lay.elem('div', {\r\n \"class\": ELEM_HINT\r\n });\r\n\r\n if(!that.elem) return;\r\n\r\n // 兼容旧版参数\r\n if(typeof opts === 'object'){\r\n opts = opts || {};\r\n } else {\r\n opts = {\r\n content: opts\r\n }\r\n }\r\n\r\n div.innerHTML = opts.content || '';\r\n lay(that.elem).find('.'+ ELEM_HINT).remove();\r\n that.elem.appendChild(div);\r\n\r\n clearTimeout(that.hinTimer);\r\n that.hinTimer = setTimeout(function(){\r\n lay(that.elem).find('.'+ ELEM_HINT).remove();\r\n }, 'ms' in opts ? opts.ms : 3000);\r\n };\r\n\r\n //获取递增/减后的年月\r\n Class.prototype.getAsYM = function(Y, M, type){\r\n type ? M-- : M++;\r\n if(M < 0){\r\n M = 11;\r\n Y--;\r\n }\r\n if(M > 11){\r\n M = 0;\r\n Y++;\r\n }\r\n return [Y, M];\r\n };\r\n\r\n //系统日期\r\n Class.prototype.systemDate = function(newDate){\r\n var thisDate = newDate || new Date();\r\n return {\r\n year: thisDate.getFullYear() //年\r\n ,month: thisDate.getMonth() //月\r\n ,date: thisDate.getDate() //日\r\n ,hours: newDate ? newDate.getHours() : 0 //时\r\n ,minutes: newDate ? newDate.getMinutes() : 0 //分\r\n ,seconds: newDate ? newDate.getSeconds() : 0 //秒\r\n }\r\n };\r\n\r\n //日期校验\r\n Class.prototype.checkDate = function(fn){\r\n var that = this\r\n ,thisDate = new Date()\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,dateTime = options.dateTime = options.dateTime || that.systemDate()\r\n ,thisMaxDate, error\r\n\r\n ,elem = options.elem[0]\r\n ,valType = that.isInput(elem) ? 'val' : 'html'\r\n ,value = function(){\r\n //如果传入了开始和结束日期的 input 对象,则将其拼接为日期范围字符\r\n if(that.rangeElem){\r\n var vals = [that.rangeElem[0].val(), that.rangeElem[1].val()];\r\n\r\n if(vals[0] && vals[1]){\r\n return vals.join(' ' + that.rangeStr + ' ');\r\n }\r\n }\r\n return that.isInput(elem)\r\n ? elem.value\r\n : (options.position === 'static' ? '' : lay(elem).attr('lay-date'));\r\n }()\r\n\r\n //校验日期有效数字\r\n ,checkValid = function(dateTime){\r\n if (!dateTime) {\r\n return;\r\n }\r\n if(dateTime.year > LIMIT_YEAR[1]) dateTime.year = LIMIT_YEAR[1], error = true; //不能超过20万年\r\n if(dateTime.month > 11) dateTime.month = 11, error = true;\r\n if(dateTime.seconds > 59) dateTime.seconds = 0, dateTime.minutes++, error = true;\r\n if(dateTime.minutes > 59) dateTime.minutes = 0, dateTime.hours++, error = true;\r\n if(dateTime.hours > 23) dateTime.hours = 0, error = true;\r\n\r\n //计算当前月的最后一天\r\n thisMaxDate = laydate.getEndDate(dateTime.month + 1, dateTime.year);\r\n if(dateTime.date > thisMaxDate) dateTime.date = thisMaxDate, error = true;\r\n }\r\n\r\n //获得初始化日期值\r\n ,initDate = function(dateTime, value, index){\r\n var startEnd = ['startTime', 'endTime'];\r\n value = (value.match(that.EXP_SPLIT) || []).slice(1);\r\n index = index || 0;\r\n\r\n if(options.range){\r\n that[startEnd[index]] = that[startEnd[index]] || {};\r\n }\r\n lay.each(that.format, function(i, item){\r\n var thisv = parseFloat(value[i]);\r\n if(value[i].length < item.length) error = true;\r\n if(/yyyy|y/.test(item)){ //年\r\n if(thisv < LIMIT_YEAR[0]) thisv = LIMIT_YEAR[0], error = true; //年不能低于100年\r\n dateTime.year = thisv;\r\n } else if(/MM|M/.test(item)){ //月\r\n if(thisv < 1) thisv = 1, error = true;\r\n dateTime.month = thisv - 1;\r\n } else if(/dd|d/.test(item)){ //日\r\n if(thisv < 1) thisv = 1, error = true;\r\n dateTime.date = thisv;\r\n } else if(/HH|H/.test(item)){ //时\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 23) thisv = 23, error = true;\r\n dateTime.hours = thisv;\r\n options.range && (that[startEnd[index]].hours = thisv);\r\n } else if(/mm|m/.test(item)){ //分\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 59) thisv = 59, error = true;\r\n dateTime.minutes = thisv;\r\n options.range && (that[startEnd[index]].minutes = thisv);\r\n } else if(/ss|s/.test(item)){ //秒\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 59) thisv = 59, error = true;\r\n dateTime.seconds = thisv;\r\n options.range && (that[startEnd[index]].seconds = thisv);\r\n }\r\n });\r\n checkValid(dateTime);\r\n };\r\n\r\n if(fn === 'limit') {\r\n if (options.range) {\r\n checkValid(that.rangeLinked ? that.startDate : dateTime); // 校验开始时间\r\n that.endDate && checkValid(that.endDate); // 校验结束时间\r\n } else {\r\n checkValid(dateTime);\r\n }\r\n return that;\r\n }\r\n\r\n value = value || options.value;\r\n if(typeof value === 'string'){\r\n value = value.replace(/\\s+/g, ' ').replace(/^\\s|\\s$/g, '');\r\n }\r\n\r\n //如果开启范围,则计算结束日期\r\n var getEndDate = function(){\r\n if(options.range){\r\n that.endDate = that.endDate || lay.extend({}, options.dateTime, function(){\r\n var obj = {}\r\n ,dateTime = options.dateTime\r\n ,EYM = that.getAsYM(dateTime.year, dateTime.month);\r\n\r\n //初始右侧面板的年月\r\n if(options.type === 'year'){\r\n obj.year = dateTime.year + 1;\r\n } else if(options.type !== 'time'){\r\n obj.year = EYM[0];\r\n obj.month = EYM[1];\r\n }\r\n\r\n //初始右侧面板的时间\r\n if(options.type === 'datetime' || options.type === 'time'){\r\n obj.hours = 23;\r\n obj.minutes = obj.seconds = 59;\r\n }\r\n\r\n return obj;\r\n }());\r\n }\r\n };\r\n getEndDate();\r\n\r\n if(typeof value === 'string' && value){\r\n if(that.EXP_IF.test(value)){ //校验日期格式\r\n if(options.range){\r\n value = value.split(' '+ that.rangeStr +' ');\r\n lay.each([options.dateTime, that.endDate], function(i, item){\r\n initDate(item, value[i], i);\r\n });\r\n } else {\r\n initDate(dateTime, value);\r\n }\r\n } else {\r\n //格式不合法\r\n that.hint(lang.formatError[0] + (\r\n options.range ? (options.format + ' '+ that.rangeStr +' ' + options.format) : options.format\r\n ) + lang.formatError[1]);\r\n error = true;\r\n }\r\n } else if(value && layui.type(value) === 'date'){ //若值为日期对象\r\n options.dateTime = that.systemDate(value);\r\n } else {\r\n //重置开始日期\r\n options.dateTime = that.systemDate();\r\n delete that.startTime;\r\n\r\n //重置结束日期\r\n delete that.endDate; //删除原有的结束日期\r\n getEndDate(); //并重新获得新的结束日期\r\n delete that.endTime;\r\n }\r\n\r\n //从日期范围表单中获取初始值\r\n (function(){\r\n if(that.rangeElem){\r\n var vals = [that.rangeElem[0].val(), that.rangeElem[1].val()]\r\n ,arrDate = [options.dateTime, that.endDate];\r\n lay.each(vals, function(_i, _v){\r\n if(that.EXP_IF_ONE.test(_v)){ //校验日期格式\r\n initDate(arrDate[_i], _v, _i);\r\n }\r\n });\r\n }\r\n })();\r\n\r\n // 校验日期有效数字\r\n checkValid(dateTime);\r\n if(options.range) checkValid(that.endDate);\r\n\r\n // 如果初始值格式错误,则纠正初始值\r\n if(error && value){\r\n that.setValue(\r\n options.range ? (that.endDate ? that.parse() : '') : that.parse()\r\n );\r\n }\r\n\r\n //如果当前日期不在设定的最大小日期区间,则自动纠正在可选区域\r\n //校验主面板是否在可选日期区间\r\n var minMaxError;\r\n if(that.getDateTime(dateTime) > that.getDateTime(options.max)){ //若超出最大日期\r\n dateTime = options.dateTime = lay.extend({}, options.max);\r\n minMaxError = true;\r\n } else if(that.getDateTime(dateTime) < that.getDateTime(options.min)){ //若少于最小日期\r\n dateTime = options.dateTime = lay.extend({}, options.min);\r\n minMaxError = true;\r\n }\r\n\r\n //校验右侧面板是否在可选日期区间\r\n if(options.range){\r\n if(that.getDateTime(that.endDate) < that.getDateTime(options.min) || that.getDateTime(that.endDate) > that.getDateTime(options.max)){\r\n that.endDate = lay.extend({}, options.max);\r\n minMaxError = true;\r\n }\r\n // 有时间范围的情况下初始化startTime和endTime\r\n that.startTime = {\r\n hours: options.dateTime.hours,\r\n minutes: options.dateTime.minutes,\r\n seconds: options.dateTime.seconds,\r\n }\r\n that.endTime = {\r\n hours: that.endDate.hours,\r\n minutes: that.endDate.minutes,\r\n seconds: that.endDate.seconds,\r\n }\r\n // 如果是年月范围,将对应的日期统一成当月的1日进行比较,避免出现同一个月但是开始日期大于结束日期的情况\r\n if (options.type === 'month') {\r\n options.dateTime.date = 1;\r\n that.endDate.date = 1;\r\n }\r\n }\r\n\r\n // 初始值不在最大最小范围内\r\n if(minMaxError && value){\r\n that.setValue(that.parse());\r\n that.hint('value ' + lang.invalidDate + lang.formatError[1]);\r\n }\r\n\r\n // 初始赋值 startDate,endState\r\n that.startDate = that.startDate || value && lay.extend({}, options.dateTime); // 有默认值才初始化startDate\r\n that.autoCalendarModel.auto && that.autoCalendarModel();\r\n that.endState = !options.range || !that.rangeLinked || !!(that.startDate && that.endDate); // 初始化选中范围状态\r\n\r\n fn && fn();\r\n return that;\r\n };\r\n\r\n /**\r\n * 渲染备注\r\n * @param {JQuery} tdElem td 元素\r\n * @param {[number, number, number]} YMD 年月日\r\n * @param {object | string} markers 备注信息\r\n */\r\n Class.prototype.markRender = function(tdElem, YMD, markers){\r\n var markText;\r\n\r\n if(typeof markers === 'object'){\r\n lay.each(markers || {}, function(key, title){\r\n var keys = key.split('-');\r\n if((keys[0] == YMD[0] || keys[0] == 0) //每年的每月\r\n && (keys[1] == YMD[1] || keys[1] == 0) //每月的每日\r\n && keys[2] == YMD[2]){ //特定日\r\n markText = title || YMD[2];\r\n }\r\n });\r\n }else if(typeof markers === 'string'){\r\n markText = markers || YMD[2];\r\n }\r\n\r\n markText && tdElem.find('div').html(''+ markText +'');\r\n }\r\n\r\n /**\r\n * 公历重要日期与自定义备注\r\n * @param {JQuery} td \r\n * @param {[number, number, number]} YMD \r\n * @returns Class\r\n */\r\n Class.prototype.mark = function(td, YMD){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var render = function(markers){\r\n that.markRender(td, YMD, markers);\r\n }\r\n\r\n if(options.calendar && options.lang === 'cn'){\r\n render(that.markerOfChineseFestivals);\r\n } \r\n\r\n if(typeof options.mark === 'function'){\r\n options.mark({year: YMD[0], month: YMD[1], date: YMD[2]}, render);\r\n }else if(typeof options.mark === 'object'){\r\n render(options.mark);\r\n }\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 渲染法定节假日或补假上班标记\r\n * @param {JQuery} tdElem td 元素\r\n * @param {[number, number, number]} YMD 年月日\r\n * @param {[Array, Array] | string} markers 标记信息\r\n */\r\n Class.prototype.holidaysRender = function(tdElem, YMD, markers){\r\n var type = ['holidays', 'workdays'];\r\n\r\n var isEquals = function(ymdStr1, ymdStr2){\r\n var ymd1 = ymdStr1.split('-');\r\n var ymd2 = ymdStr2.split('-');\r\n\r\n lay.each(ymd1, function(i,v){\r\n ymd1[i] = parseInt(v, 10);\r\n })\r\n lay.each(ymd2, function(i,v){\r\n ymd2[i] = parseInt(v, 10);\r\n })\r\n \r\n return ymd1.join('-') === ymd2.join('-');\r\n }\r\n\r\n var insertHtml = function(el, type, text){\r\n el.find('div').html([\r\n '',\r\n text,\r\n ''\r\n ].join(''));\r\n }\r\n \r\n if(layui.type(markers) === 'array'){\r\n lay.each(markers, function(idx, item) {\r\n lay.each(item, function(i, dayStr) {\r\n if(isEquals(dayStr, tdElem.attr('lay-ymd'))){\r\n insertHtml(tdElem, type[idx], YMD[2])\r\n }\r\n });\r\n });\r\n }else if(typeof markers === 'string'){\r\n if(type.indexOf(markers) !== -1){\r\n insertHtml(tdElem, markers, YMD[2])\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 标注法定节假日或补假上班\r\n * @param {JQuery} td \r\n * @param {[number, number, number]} YMD \r\n * @returns Class\r\n */\r\n Class.prototype.holidays = function(td, YMD) {\r\n var that = this;\r\n var options = that.config;\r\n\r\n var render = function(markers){\r\n that.holidaysRender(td, YMD, markers);\r\n }\r\n\r\n if(typeof options.holidays === 'function'){\r\n options.holidays({year: YMD[0], month: YMD[1], date: YMD[2]}, render);\r\n }else if(layui.type(options.holidays) === 'array'){\r\n render(options.holidays);\r\n }\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 自定义单元格\r\n * @param {HTMLElement|Array} el - 单元格元素\r\n * @param {{year:number, month:number, date:number}} dateObj - 当前单元格对应的日期信息\r\n * @param {'year' | 'month' | 'date'} panelMode - 面板模式\r\n * @returns \r\n */\r\n Class.prototype.cellRender = function(el, dateObj, panelMode){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(typeof options.cellRender === 'function'){\r\n var render = function(content){\r\n if(typeof content === 'string'){\r\n lay(el).html(content);\r\n }else if(typeof content === 'object'){\r\n lay(el).html('').append(lay(content)[0]);\r\n }\r\n }\r\n options.cellRender(dateObj, render, {originElem: el, type: panelMode})\r\n }\r\n\r\n return that;\r\n }\r\n\r\n /**\r\n * 给定年份的开始日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.startOfYear = function(date){\r\n var newDate = new Date(date);\r\n newDate.setFullYear(newDate.getFullYear(), 0, 1);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定年份的结束日期\r\n * @param {Date} date\r\n */\r\n Class.prototype.endOfYear = function(date){\r\n var newDate = new Date(date);\r\n var year = newDate.getFullYear();\r\n newDate.setFullYear(year + 1, 0, 0);\r\n newDate.setHours(23, 59, 59, 999);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定月份的开始日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.startOfMonth = function(date){\r\n var newDate = new Date(date);\r\n newDate.setDate(1);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定月份的结束日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.endOfMonth = function(date){\r\n var newDate = new Date(date);\r\n var month = newDate.getMonth();\r\n newDate.setFullYear(newDate.getFullYear(), month + 1, 0);\r\n newDate.setHours(23, 59, 59, 999);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 将指定的天数添加到给定日期\r\n * @param {Date} date 要更改的日期\r\n * @param {number} amount 天数\r\n */\r\n Class.prototype.addDays = function(date, amount){\r\n var newDate = new Date(date);\r\n if(!amount) return newDate;\r\n newDate.setDate(newDate.getDate() + amount);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 不可选取的年或月。年或月中的所有日期都禁用时,才判定为不可选取。\r\n * @param {Date} date 要检测的年或月\r\n * @param {'year' | 'month'} type 面板类型\r\n * @param {'start' | 'end'} position 面板位置\r\n */\r\n Class.prototype.isDisabledYearOrMonth = function(date, type, position){\r\n var that = this;\r\n var options = that.config;\r\n var millisecondsInDay = 24 * 60 * 60 * 1000;\r\n\r\n var startDay = type === 'year' ? that.startOfYear(date) : that.startOfMonth(date);\r\n var endDay = type === 'year' ? that.endOfYear(date) : that.endOfMonth(date);\r\n var numOfDays = Math.floor((endDay.getTime() - startDay.getTime()) / millisecondsInDay) + 1;\r\n var disabledCount = 0;\r\n \r\n for(var i = 0; i < numOfDays; i++){\r\n var day = that.addDays(startDay, i);\r\n if(options.disabledDate.call(options, day, position)){\r\n disabledCount++;\r\n }\r\n }\r\n\r\n return disabledCount === numOfDays;\r\n }\r\n\r\n /**\r\n * @typedef limitOptions\r\n * @prop {JQuery} [elem] - 检测的元素, 例如面板中年月日时分秒元素,“现在”,“确认” 按钮等\r\n * @prop {number} [index] - 元素集合中,当前检测元素的索引,years:0,month:0,date:0-41,hms:0\r\n * @prop {['hours', 'minutes', 'seconds'] | ['hours', 'minutes'] | ['hours']} [time] - 是否比较时分秒\r\n * @prop {'year'|'month'|string} [type] - 面板类型?\r\n * @prop {0 | 1} [rangeType] - 面板索引, 0 表示 start, 1 表示 end\r\n * @prop {Partial<{year:number,month: number,date:number,hours:number,minutes:number,seconds:number}>} [date] - 检测的日期时间对象\r\n * @prop {'date' | 'time' | 'datetime'} disabledType - 禁用类型,按钮应使用 datetime\r\n */\r\n /**\r\n * 不可选取的日期\r\n * @param {number} date 当前检测的日期的时间戳\r\n * @param {limitOptions} opts\r\n * @returns {boolean}\r\n */\r\n Class.prototype.isDisabledDate = function(date, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var position = options.range ? (opts.rangeType === 0 ? 'start' : 'end') : 'start';\r\n \r\n if(!options.disabledDate) return false;\r\n if(options.type === 'time') return false;\r\n if(!(opts.disabledType === 'date' || opts.disabledType === 'datetime')) return false;\r\n\r\n // 不需要时分秒\r\n var normalizedDate = new Date(date);\r\n normalizedDate.setHours(0, 0, 0, 0);\r\n \r\n return opts.type === 'year' || opts.type === 'month'\r\n ? that.isDisabledYearOrMonth(normalizedDate, opts.type, position)\r\n : options.disabledDate.call(options, normalizedDate, position);\r\n }\r\n\r\n /**\r\n * 不可选取的时间\r\n * @param {number} date 当前检测的日期的时间戳\r\n * @param {limitOptions} opts\r\n * @returns {boolean}\r\n */\r\n Class.prototype.isDisabledTime = function(date, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var position = options.range ? (opts.rangeType === 0 ? 'start' : 'end') : 'start';\r\n \r\n if(!options.disabledTime) return false;\r\n if(!(options.type === \"time\" || options.type === \"datetime\")) return false;\r\n if(!(opts.disabledType === 'time' || opts.disabledType === 'datetime')) return false;\r\n\r\n var isDisabledItem = function(compareVal, rangeFn, rangeFnParam){\r\n return function(){\r\n return (typeof rangeFn === 'function' && rangeFn.apply(options, rangeFnParam) || []).indexOf(compareVal) !== -1;\r\n } \r\n }\r\n\r\n var dateObj = that.systemDate(new Date(date));\r\n var disabledTime = options.disabledTime.call(options, that.newDate(dateObj), position) || {};\r\n\r\n // 面板中的时分秒 HTML 元素需要分别检测是否禁用\r\n // 按钮检测任意一项是否禁用即可\r\n return opts.disabledType === 'datetime'\r\n ? isDisabledItem(dateObj.hours, disabledTime.hours)()\r\n || isDisabledItem(dateObj.minutes, disabledTime.minutes, [dateObj.hours])()\r\n || isDisabledItem(dateObj.seconds, disabledTime.seconds, [dateObj.hours, dateObj.minutes])()\r\n : [isDisabledItem(dateObj.hours, disabledTime.hours),\r\n isDisabledItem(dateObj.minutes, disabledTime.minutes, [dateObj.hours]),\r\n isDisabledItem(dateObj.seconds, disabledTime.seconds, [dateObj.hours, dateObj.minutes])][opts.time.length - 1]();\r\n }\r\n\r\n /**\r\n * 不可选取的日期时间\r\n * @param {number} timestamp 当前检测的日期的时间戳\r\n * @param {limitOptions} opts \r\n * @returns \r\n */\r\n Class.prototype.isDisabledDateTime = function(timestamp, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n\r\n return that.isDisabledDate(timestamp, opts) || that.isDisabledTime(timestamp, opts);\r\n }\r\n\r\n\r\n /**\r\n * 无效日期范围的标记\r\n * @param {limitOptions} opts \r\n * \r\n */\r\n Class.prototype.limit = function(opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var timestamp = {}\r\n var dateTime = opts.index > (opts.time ? 0 : 41) ? that.endDate : options.dateTime;\r\n var isOut;\r\n\r\n lay.each({\r\n now: lay.extend({}, dateTime, opts.date || {})\r\n ,min: options.min\r\n ,max: options.max\r\n }, function(key, item){\r\n timestamp[key] = that.newDate(lay.extend({\r\n year: item.year\r\n ,month: opts.type === 'year' ? 0 : item.month // 年份的时候只比较年\r\n ,date: (opts.type === 'year' || opts.type === 'month') ? 1 : item.date // 年月只比较年月不与最大最小比日期\r\n }, function(){\r\n var hms = {};\r\n lay.each(opts.time, function(i, keys){\r\n hms[keys] = item[keys];\r\n });\r\n return hms;\r\n }())).getTime(); //time:是否比较时分秒\r\n });\r\n\r\n isOut = timestamp.now < timestamp.min || timestamp.now > timestamp.max || that.isDisabledDateTime(timestamp.now, opts);\r\n opts.elem && opts.elem[isOut ? 'addClass' : 'removeClass'](DISABLED);\r\n\r\n return isOut;\r\n };\r\n\r\n //当前日期对象\r\n Class.prototype.thisDateTime = function(index){\r\n var that = this\r\n ,options = that.config;\r\n return index ? that.endDate: options.dateTime;\r\n };\r\n\r\n //日历表\r\n Class.prototype.calendar = function(value, index, type){\r\n index = index ? 1 : 0;\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = value || that.thisDateTime(index)\r\n ,thisDate = new Date(), startWeek, prevMaxDate, thisMaxDate\r\n ,lang = that.lang()\r\n\r\n ,isAlone = options.type !== 'date' && options.type !== 'datetime'\r\n ,tds = lay(that.table[index]).find('td')\r\n ,elemYM = lay(that.elemHeader[index][2]).find('span');\r\n\r\n if(dateTime.year < LIMIT_YEAR[0]) dateTime.year = LIMIT_YEAR[0], that.hint(lang.invalidDate);\r\n if(dateTime.year > LIMIT_YEAR[1]) dateTime.year = LIMIT_YEAR[1], that.hint(lang.invalidDate);\r\n\r\n //记录初始值\r\n if(!that.firstDate){\r\n that.firstDate = lay.extend({}, dateTime);\r\n }\r\n\r\n //计算当前月第一天的星期\r\n thisDate.setFullYear(dateTime.year, dateTime.month, 1);\r\n startWeek = (thisDate.getDay() + (7 - options.weekStart)) % 7;\r\n\r\n prevMaxDate = laydate.getEndDate(dateTime.month || 12, dateTime.year); //计算上个月的最后一天\r\n thisMaxDate = laydate.getEndDate(dateTime.month + 1, dateTime.year); //计算当前月的最后一天\r\n\r\n //赋值日\r\n lay.each(tds, function(index_, item){\r\n var YMD = [dateTime.year, dateTime.month], st;\r\n item = lay(item);\r\n item.removeAttr(\"class\");\r\n if(index_ < startWeek){\r\n st = prevMaxDate - startWeek + index_;\r\n item.addClass('laydate-day-prev');\r\n YMD = that.getAsYM(dateTime.year, dateTime.month, 'sub');\r\n } else if(index_ >= startWeek && index_ < thisMaxDate + startWeek){\r\n st = index_ - startWeek;\r\n if (!that.rangeLinked) {\r\n st + 1 === dateTime.date && item.addClass(THIS);\r\n }\r\n } else {\r\n st = index_ - thisMaxDate - startWeek;\r\n item.addClass('laydate-day-next');\r\n YMD = that.getAsYM(dateTime.year, dateTime.month);\r\n }\r\n YMD[1]++;\r\n YMD[2] = st + 1;\r\n item.attr('lay-ymd', YMD.join('-')).html('
    ' + YMD[2] + '
    ');\r\n that.mark(item, YMD).holidays(item, YMD).limit({\r\n elem: item,\r\n date: {\r\n year: YMD[0],\r\n month: YMD[1] - 1,\r\n date: YMD[2]\r\n },\r\n index: index_,\r\n rangeType: index,\r\n disabledType: 'date' // 日面板,检测当前日期是否禁用\r\n });\r\n that.cellRender(item, {year: YMD[0], month: YMD[1], date: YMD[2]}, 'date');\r\n });\r\n\r\n //同步头部年月\r\n lay(elemYM[0]).attr('lay-ym', dateTime.year + '-' + (dateTime.month + 1));\r\n lay(elemYM[1]).attr('lay-ym', dateTime.year + '-' + (dateTime.month + 1));\r\n if(!that.panelYM) that.panelYM = {};\r\n that.panelYM[index] = {year: dateTime.year, month: dateTime.month};\r\n\r\n if(options.lang === 'cn'){\r\n lay(elemYM[0]).attr('lay-type', 'year').html(dateTime.year + ' 年')\r\n lay(elemYM[1]).attr('lay-type', 'month').html((dateTime.month + 1) + ' 月');\r\n } else {\r\n lay(elemYM[0]).attr('lay-type', 'month').html(lang.month[dateTime.month]);\r\n lay(elemYM[1]).attr('lay-type', 'year').html(dateTime.year);\r\n }\r\n\r\n //初始默认选择器\r\n if(isAlone){ //年、月等独立选择器\r\n if(options.range){\r\n if(value || type !== 'init'){ // 判断是否需要显示年月时间列表\r\n that.listYM = [\r\n [(that.startDate || options.dateTime).year, (that.startDate || options.dateTime).month + 1]\r\n ,[that.endDate.year, that.endDate.month + 1]\r\n ];\r\n that.list(options.type, 0).list(options.type, 1);\r\n\r\n //同步按钮可点状态\r\n options.type === 'time' ? that.setBtnStatus('时间'\r\n ,lay.extend({}, that.systemDate(), that.startTime)\r\n ,lay.extend({}, that.systemDate(), that.endTime)\r\n ) : that.setBtnStatus(true);\r\n }\r\n } else {\r\n that.listYM = [[dateTime.year, dateTime.month + 1]];\r\n that.list(options.type, 0);\r\n }\r\n }\r\n\r\n //初始赋值双日历\r\n if(options.range && type === 'init'){\r\n //执行渲染第二个日历\r\n if (that.rangeLinked) {\r\n var EYM = that.getAsYM(dateTime.year, dateTime.month, index ? 'sub' : null)\r\n that.calendar(lay.extend({}, dateTime, {\r\n year: EYM[0]\r\n ,month: EYM[1]\r\n }), 1 - index); // 渲染另外一个\r\n } else {\r\n that.calendar(null, 1 - index);\r\n }\r\n }\r\n\r\n // 通过检测当前有效日期,来设定底部按钮状态\r\n if(!options.range){\r\n var timeParams = ['hours', 'minutes', 'seconds'];\r\n\r\n // 现在按钮\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_NOW),\r\n date: that.systemDate(/^(datetime|time)$/.test(options.type) ? new Date() : null),\r\n index: 0,\r\n time: timeParams,\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n // 确认按钮\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n index: 0,\r\n time: timeParams,\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n }\r\n\r\n //同步按钮可点状态\r\n that.setBtnStatus();\r\n\r\n // 重置快捷栏选中状态\r\n lay(that.shortcut).find('li.' + THIS).removeClass(THIS);\r\n\r\n //标记选择范围\r\n if(options.range && !isAlone && type !== 'init') that.stampRange();\r\n\r\n return that;\r\n };\r\n\r\n //生成年月时分秒列表\r\n Class.prototype.list = function(type, index){\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = that.rangeLinked ? options.dateTime : [options.dateTime, that.endDate][index]\r\n ,lang = that.lang()\r\n ,isAlone = options.range && options.type !== 'date' && options.type !== 'datetime' //独立范围选择器\r\n\r\n ,ul = lay.elem('ul', {\r\n \"class\": ELEM_LIST + ' ' + ({\r\n year: 'laydate-year-list'\r\n ,month: 'laydate-month-list'\r\n ,time: 'laydate-time-list'\r\n })[type]\r\n })\r\n ,elemHeader = that.elemHeader[index]\r\n ,elemYM = lay(elemHeader[2]).find('span')\r\n ,elemCont = that.elemCont[index || 0]\r\n ,haveList = lay(elemCont).find('.'+ ELEM_LIST)[0]\r\n ,isCN = options.lang === 'cn'\r\n ,text = isCN ? '年' : ''\r\n\r\n ,listYM = that.listYM[index] || {}\r\n ,hms = ['hours', 'minutes', 'seconds']\r\n ,startEnd = ['startTime', 'endTime'][index];\r\n\r\n if(listYM[0] < 1) listYM[0] = 1;\r\n\r\n //生成年列表\r\n if(type === 'year'){\r\n var yearNum, startY = yearNum = listYM[0] - 7;\r\n if(startY < 1) startY = yearNum = 1;\r\n lay.each(new Array(15), function(i){\r\n var li = lay.elem('li', {\r\n 'lay-ym': yearNum\r\n })\r\n ,ymd = {\r\n year: yearNum\r\n ,month: 0\r\n ,date: 1\r\n };\r\n\r\n yearNum == listYM[0] && lay(li).addClass(THIS);\r\n li.innerHTML = yearNum + text;\r\n ul.appendChild(li);\r\n\r\n /*\r\n if(yearNum < that.firstDate.year){\r\n ymd.month = options.min.month;\r\n ymd.date = options.min.date;\r\n } else if(yearNum >= that.firstDate.year){\r\n ymd.month = options.max.month;\r\n ymd.date = options.max.date;\r\n }\r\n */\r\n\r\n that.limit({\r\n elem: lay(li),\r\n date: ymd,\r\n index: index,\r\n type: type,\r\n rangeType: index,\r\n disabledType: 'date' // 年面板,检测当前年份中的所有日期是否禁用\r\n });\r\n that.cellRender(li, {year: yearNum, month: 1, date: 1}, 'year');\r\n yearNum++;\r\n });\r\n\r\n lay(elemYM[isCN ? 0 : 1]).attr('lay-ym', (yearNum - 8) + '-' + listYM[1])\r\n .html((startY + text) + ' - ' + (yearNum - 1 + text));\r\n }\r\n\r\n //生成月列表\r\n else if(type === 'month'){\r\n lay.each(new Array(12), function(i){\r\n var li = lay.elem('li', {\r\n 'lay-ym': i\r\n })\r\n ,ymd = {\r\n year: listYM[0]\r\n ,month: i\r\n ,date: 1\r\n };\r\n\r\n i + 1 == listYM[1] && lay(li).addClass(THIS);\r\n li.innerHTML = lang.month[i] + (isCN ? '月' : '');\r\n ul.appendChild(li);\r\n\r\n /*\r\n if(listYM[0] < that.firstDate.year){\r\n ymd.date = options.min.date;\r\n } else if(listYM[0] >= that.firstDate.year){\r\n ymd.date = options.max.date;\r\n }\r\n */\r\n\r\n that.limit({\r\n elem: lay(li),\r\n date: ymd,\r\n index: index,\r\n type: type,\r\n rangeType: index,\r\n disabledType: 'date' // 月面板,检测当前月份中的所有日期是否禁用\r\n });\r\n that.cellRender(li, {year: listYM[0], month: i + 1, date: 1}, 'month');\r\n });\r\n\r\n lay(elemYM[isCN ? 0 : 1]).attr('lay-ym', listYM[0] + '-' + listYM[1])\r\n .html(listYM[0] + text);\r\n }\r\n\r\n //生成时间列表\r\n else if(type === 'time'){\r\n //检测时分秒状态是否在有效日期时间范围内\r\n var setTimeStatus = function(){\r\n lay(ul).find('ol').each(function(i, ol){\r\n lay(ol).find('li').each(function(ii, li){\r\n that.limit({\r\n elem: lay(li),\r\n date: [{\r\n hours: ii\r\n }, {\r\n hours: that[startEnd].hours\r\n ,minutes: ii\r\n }, {\r\n hours: that[startEnd].hours\r\n ,minutes: that[startEnd].minutes\r\n ,seconds: ii\r\n }][i],\r\n index: index,\r\n rangeType: index,\r\n disabledType: 'time', // 时间面板,分别检测时分秒列表是否禁用\r\n time: [\r\n ['hours'],\r\n ['hours', 'minutes'],\r\n ['hours', 'minutes', 'seconds']\r\n ][i]\r\n });\r\n });\r\n });\r\n if(!options.range){\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n date: that[startEnd],\r\n index: 0,\r\n time: ['hours', 'minutes', 'seconds'],\r\n disabledType: 'datetime' // 确认按钮,检测时分秒列表任意一项是否禁用\r\n });\r\n }\r\n };\r\n\r\n var setTimeListVisibility = function(){\r\n var showHour = options.format.indexOf('H') !== -1;\r\n var showMinute = options.format.indexOf('m') !== -1;\r\n var showSecond = options.format.indexOf('s') !== -1;\r\n var liElem = ul.children;\r\n var hideCount = 0;\r\n\r\n lay.each([showHour, showMinute, showSecond], function(i, isShow){\r\n if(!isShow){\r\n liElem[i].className += ' layui-hide';\r\n hideCount++;\r\n }\r\n })\r\n ul.className += (' laydate-time-list-hide-' + hideCount);\r\n }\r\n\r\n //初始化时间对象\r\n if(options.range){\r\n if(!that[startEnd]){\r\n that[startEnd] = startEnd === 'startTime' ? dateTime : that.endDate;\r\n }\r\n } else {\r\n that[startEnd] = dateTime;\r\n }\r\n\r\n //生成时分秒\r\n lay.each([24, 60, 60], function(i, item){\r\n var li = lay.elem('li'), childUL = ['

    '+ lang.time[i] +'

      '];\r\n lay.each(new Array(item), function(ii){\r\n childUL.push(''+ lay.digit(ii, 2) +'');\r\n });\r\n li.innerHTML = childUL.join('') + '
    ';\r\n ul.appendChild(li);\r\n });\r\n setTimeStatus();\r\n setTimeListVisibility();\r\n }\r\n\r\n //插入容器\r\n if(haveList) elemCont.removeChild(haveList);\r\n elemCont.appendChild(ul);\r\n\r\n //年月面板 - 选择事件\r\n if(type === 'year' || type === 'month'){\r\n //显示切换箭头\r\n lay(that.elemMain[index]).addClass('laydate-ym-show');\r\n\r\n //选中\r\n lay(ul).find('li').on('click', function(){\r\n var ym = lay(this).attr('lay-ym') | 0;\r\n if(lay(this).hasClass(DISABLED)) return;\r\n if (that.rangeLinked) {\r\n lay.extend(dateTime, {\r\n year: type === 'year' ? ym : listYM[0]\r\n ,month: type === 'year' ? listYM[1] - 1 : ym\r\n });\r\n } else {\r\n dateTime[type] = ym;\r\n }\r\n\r\n //当为年选择器或者年月选择器\r\n var isYearOrMonth = options.type === 'year' || options.type === 'month';\r\n if(isYearOrMonth){\r\n lay(ul).find('.'+ THIS).removeClass(THIS);\r\n lay(this).addClass(THIS);\r\n\r\n //如果为年月选择器,点击了年列表,则切换到月选择器\r\n if(options.type === 'month' && type === 'year'){\r\n that.listYM[index][0] = ym;\r\n isAlone && ((index ? that.endDate : dateTime).year = ym);\r\n that.list('month', index);\r\n }\r\n } else {\r\n that.checkDate('limit').calendar(dateTime, index, 'init'); // 重新渲染一下两个面板\r\n that.closeList();\r\n }\r\n\r\n that.setBtnStatus(); //同步按钮可点状态\r\n\r\n //若为月选择器,只有当选择月份时才自动关闭;\r\n //若为年选择器,选择年份即自动关闭\r\n //且在范围未开启时\r\n if(!options.range && options.autoConfirm){\r\n if((options.type === 'month' && type === 'month') || (options.type === 'year' && type === 'year')){\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n }\r\n\r\n (that.autoCalendarModel.auto && !that.rangeLinked) ? that.choose(lay(elemCont).find('td.layui-this'), index) : (that.endState && that.done(null, 'change'));\r\n lay(that.footer).find('.'+ ELEM_TIME_BTN).removeClass(DISABLED);\r\n });\r\n } else { //时间选择面板 - 选择事件\r\n var span = lay.elem('span', {\r\n \"class\": ELEM_TIME_TEXT\r\n })\r\n\r\n //滚动条定位\r\n ,scroll = function(){\r\n lay(ul).find('ol').each(function(i){\r\n var ol = this\r\n ,li = lay(ol).find('li')\r\n ol.scrollTop = 30*(that[startEnd][hms[i]] - 2);\r\n if(ol.scrollTop <= 0){\r\n li.each(function(ii, item){\r\n if(!lay(this).hasClass(DISABLED)){\r\n ol.scrollTop = 30*(ii - 2);\r\n return true;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n ,haveSpan = lay(elemHeader[2]).find('.'+ ELEM_TIME_TEXT);\r\n\r\n scroll();\r\n span.innerHTML = options.range ? [lang.startTime,lang.endTime][index] : lang.timeTips;\r\n lay(that.elemMain[index]).addClass('laydate-time-show');\r\n\r\n if(haveSpan[0]) haveSpan.remove();\r\n elemHeader[2].appendChild(span);\r\n\r\n var olElem = lay(ul).find('ol');\r\n olElem.each(function(i){\r\n var ol = this;\r\n //选择时分秒\r\n lay(ol).find('li').on('click', function(){\r\n var value = this.innerHTML | 0;\r\n if(lay(this).hasClass(DISABLED)) return;\r\n\r\n if(options.range){\r\n that[startEnd][hms[i]] = value;\r\n } else {\r\n dateTime[hms[i]] = value;\r\n }\r\n lay(ol).find('.'+ THIS).removeClass(THIS);\r\n lay(this).addClass(THIS);\r\n\r\n setTimeStatus();\r\n scroll();\r\n (that.endDate || options.type === 'time' || options.type === 'datetime') && that.done(null, 'change');\r\n\r\n //同步按钮可点状态\r\n that.setBtnStatus();\r\n });\r\n });\r\n\r\n if(layui.device().mobile){\r\n olElem.css({\r\n overflowY: 'auto',\r\n touchAction: 'pan-y'\r\n })\r\n }\r\n }\r\n\r\n return that;\r\n };\r\n\r\n //记录列表切换后的年月\r\n Class.prototype.listYM = [];\r\n\r\n //关闭列表\r\n Class.prototype.closeList = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n lay.each(that.elemCont, function(index, item){\r\n lay(this).find('.'+ ELEM_LIST).remove();\r\n lay(that.elemMain[index]).removeClass('laydate-ym-show laydate-time-show');\r\n });\r\n lay(that.elem).find('.'+ ELEM_TIME_TEXT).remove();\r\n };\r\n\r\n //检测结束日期是否超出开始日期\r\n Class.prototype.setBtnStatus = function(tips, start, end){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,isOut\r\n ,elemBtn = lay(that.footer).find(ELEM_CONFIRM)\r\n ,timeParams = options.type === 'datetime' || options.type === 'time' ? ['hours', 'minutes', 'seconds'] : undefined;\r\n if(options.range){\r\n start = start || (that.rangeLinked ? that.startDate : options.dateTime);\r\n end = end || that.endDate;\r\n isOut = !that.endState || that.newDate(start).getTime() > that.newDate(end).getTime();\r\n\r\n //如果不在有效日期内,直接禁用按钮,否则比较开始和结束日期\r\n (that.limit({\r\n date: start,\r\n disabledType: 'datetime', // 按钮,检测日期和时间\r\n time: timeParams,\r\n rangeType: 0\r\n }) || that.limit({\r\n date: end,\r\n disabledType: 'datetime', // 按钮,检测日期和时间\r\n time: timeParams,\r\n rangeType: 1\r\n }))\r\n ? elemBtn.addClass(DISABLED)\r\n : elemBtn[isOut ? 'addClass' : 'removeClass'](DISABLED);\r\n\r\n //是否异常提示\r\n if(tips && isOut) that.hint(\r\n typeof tips === 'string' ? lang.timeout.replace(/日期/g, tips) : lang.timeout\r\n );\r\n }\r\n };\r\n\r\n // 转义为规定格式的日期字符\r\n Class.prototype.parse = function(state, date) {\r\n var that = this;\r\n var options = that.config;\r\n var startDate = (that.rangeLinked ? that.startDate : options.dateTime)\r\n var dateTime = date || (\r\n state == 'end' ? lay.extend({}, that.endDate, that.endTime) : (\r\n options.range\r\n ? lay.extend({}, startDate || options.dateTime, that.startTime)\r\n : options.dateTime\r\n )\r\n );\r\n var format = laydate.parse(dateTime, that.format, 1);\r\n\r\n // 返回日期范围字符\r\n if (options.range && state === undefined) {\r\n return format + ' '+ that.rangeStr +' ' + that.parse('end');\r\n }\r\n\r\n return format;\r\n };\r\n\r\n //创建指定日期时间对象\r\n Class.prototype.newDate = function(dateTime){\r\n dateTime = dateTime || {};\r\n return new Date(\r\n dateTime.year || 1\r\n ,dateTime.month || 0\r\n ,dateTime.date || 1\r\n ,dateTime.hours || 0\r\n ,dateTime.minutes || 0\r\n ,dateTime.seconds || 0\r\n );\r\n };\r\n\r\n // 获得指定日期时间对象的毫秒数\r\n Class.prototype.getDateTime = function(obj){\r\n return this.newDate(obj).getTime();\r\n }\r\n\r\n /**\r\n * 格式化输入框显示值\r\n * @param {HTMLInputElement} elem HTML input 元素\r\n * @param {(value: string) => string} displayValueCallback \r\n */\r\n Class.prototype.formatToDisplay = function (elem, displayValueCallback) {\r\n var that = this;\r\n var props = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value');\r\n \r\n Object.defineProperty(\r\n elem,\r\n 'value',\r\n lay.extend({}, props, {\r\n get: function () {\r\n return this.getAttribute('lay-date');\r\n },\r\n set: function (value) {\r\n props.set.call(this, displayValueCallback.call(that, value));\r\n this.setAttribute('lay-date', value);\r\n },\r\n })\r\n );\r\n };\r\n\r\n //赋值\r\n Class.prototype.setValue = function(value){\r\n var that = this\r\n ,options = that.config\r\n ,elem = options.elem[0];\r\n\r\n //静态展现则不作默认赋值\r\n if(options.position === 'static') return that;\r\n\r\n value = value || '';\r\n\r\n //绑定的元素是否为 input\r\n if(that.isInput(elem)){\r\n lay(elem).val(value);\r\n } else {\r\n //如果 range 传入了开始和结束的 input 对象,则分别对其赋值\r\n var rangeElem = that.rangeElem;\r\n if(rangeElem){\r\n if(layui.type(value) !== 'array'){\r\n value = value.split(' '+ that.rangeStr +' ');\r\n }\r\n rangeElem[0].val(value[0] || '');\r\n rangeElem[1].val(value[1] || '');\r\n } else {\r\n if(lay(elem).find('*').length === 0){\r\n var displayValue = typeof options.formatToDisplay === 'function' ? options.formatToDisplay(value) : value;\r\n lay(elem).html(displayValue);\r\n }\r\n lay(elem).attr('lay-date', value);\r\n }\r\n }\r\n\r\n return that;\r\n };\r\n\r\n //预览\r\n Class.prototype.preview = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n if(!options.isPreview) return;\r\n\r\n var elemPreview = lay(that.elem).find('.'+ ELEM_PREVIEW)\r\n ,value = options.range ? ((that.rangeLinked ? that.endState : that.endDate) ? that.parse() : '') : that.parse();\r\n\r\n // 显示预览\r\n elemPreview.html(value);\r\n\r\n // 预览颜色渐变\r\n var oldValue = elemPreview.html();\r\n oldValue && (elemPreview.css({\r\n 'color': '#16b777'\r\n }),\r\n setTimeout(function(){\r\n elemPreview.css({\r\n 'color': '#777'\r\n });\r\n }, 300));\r\n };\r\n\r\n // 附加的渲染处理,在 ready 和 change 的时候调用\r\n Class.prototype.renderAdditional = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 处理全面板\r\n if (options.fullPanel) {\r\n that.list('time', 0);\r\n }\r\n };\r\n\r\n // 标记范围内的日期\r\n Class.prototype.stampRange = function(){\r\n var that = this\r\n ,options = that.config\r\n ,startTime = that.rangeLinked ? that.startDate : options.dateTime, endTime\r\n ,tds = lay(that.elem).find('td');\r\n\r\n if(options.range && !that.endState) lay(that.footer).find(ELEM_CONFIRM).addClass(DISABLED);\r\n // if(!that.endState) return;\r\n\r\n startTime = startTime && that.newDate({\r\n year: startTime.year\r\n ,month: startTime.month\r\n ,date: startTime.date\r\n }).getTime();\r\n\r\n endTime = that.endState && that.endDate && that.newDate({\r\n year: that.endDate.year\r\n ,month: that.endDate.month\r\n ,date: that.endDate.date\r\n }).getTime();\r\n\r\n // if(startTime > endTime) return that.hint(TIPS_OUT);\r\n\r\n lay.each(tds, function(i, item){\r\n var ymd = lay(item).attr('lay-ymd').split('-');\r\n var thisTime = that.newDate({\r\n year: ymd[0]\r\n ,month: ymd[1] - 1\r\n ,date: ymd[2]\r\n }).getTime();\r\n\r\n // 标记当天\r\n if(options.rangeLinked && !that.startDate){\r\n if(thisTime === that.newDate(that.systemDate()).getTime()){\r\n lay(item).addClass(\r\n lay(item).hasClass(ELEM_PREV) || lay(item).hasClass(ELEM_NEXT)\r\n ? ''\r\n : ELEM_DAY_NOW\r\n );\r\n }\r\n }\r\n\r\n /*\r\n * 标注区间\r\n */\r\n\r\n lay(item).removeClass(ELEM_SELECTED + ' ' + THIS);\r\n\r\n if(thisTime === startTime || thisTime === endTime){\r\n (that.rangeLinked || (!that.rangeLinked && (i < 42 ? thisTime === startTime : thisTime === endTime))) &&\r\n lay(item).addClass(\r\n lay(item).hasClass(ELEM_PREV) || lay(item).hasClass(ELEM_NEXT)\r\n ? ELEM_SELECTED\r\n : THIS\r\n );\r\n }\r\n if(thisTime > startTime && thisTime < endTime){\r\n lay(item).addClass(ELEM_SELECTED);\r\n }\r\n });\r\n };\r\n\r\n // 执行 done/change 回调\r\n Class.prototype.done = function(param, type){\r\n var that = this;\r\n var options = that.config;\r\n var start = lay.extend({},\r\n lay.extend(that.rangeLinked ? that.startDate : options.dateTime, that.startTime)\r\n );\r\n var end = lay.extend({}, lay.extend(that.endDate, that.endTime));\r\n\r\n lay.each([start, end], function(i, item){\r\n if(!('month' in item)) return;\r\n lay.extend(item, {\r\n month: item.month + 1\r\n });\r\n });\r\n\r\n that.preview();\r\n\r\n param = param || [that.parse(), start, end];\r\n type === 'change' && that.renderAdditional();\r\n typeof options[type || 'done'] === 'function' && options[type || 'done'].apply(options, param);\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 判断日期是否存在面板,用于处理日期范围选择的一些边缘情况\r\n * @param {object} datetime 日期时间对象\r\n * @param {number} index - 面板索引\r\n * @returns \r\n */\r\n Class.prototype.checkPanelDate = function(datetime, index){\r\n var that = this;\r\n var options = that.config;\r\n // 年月范围选择不需要处理\r\n if(options.type !== 'date' && options.type !== 'datetime') return;\r\n\r\n var startPanel = index === 0;\r\n var month = datetime.month + 1; // 点击的日期所在月份\r\n var panelMonth = that.panelYM[index].month + 1; // 当前面板头部月份\r\n\r\n // 边缘日期的处理\r\n var firstRenderIndex = that.endState\r\n // 二次点击(一般为结束日期)任意一侧面板时:\r\n // 1. 左侧面板中,点击的月份属于下一个月时,应渲染右侧面板而不是左侧面板;\r\n // 2. 左侧面板中,点击的月份属于上一个月时,应将两个面板都重新渲染(等效点击 prevMonth);\r\n // 3. 右侧面板同理。\r\n ? function() {\r\n return (startPanel && month > panelMonth) || (!startPanel && month < panelMonth)\r\n ? 1 - index\r\n : index;\r\n }()\r\n // 初次点击(一般为开始日期)任意一侧面板时:\r\n // 1. 让该面板自行切换,以保持日期的「选中状态」在该侧;\r\n // 2. 另一侧面板则根据点击的面板进行响应式切换,以保持左右面板始终为连续月份。\r\n : index;\r\n\r\n // 为简化实现,只要点击的月份不等于当前面板顶部显示的月份时,就重新渲染两侧面板\r\n return {\r\n needFullRender: month !== panelMonth,\r\n index: firstRenderIndex\r\n }\r\n }\r\n \r\n //选择日期\r\n Class.prototype.choose = function(td, index){\r\n if(td.hasClass(DISABLED)) return;\r\n\r\n var that = this\r\n ,options = that.config\r\n ,panelIndex = index; // 记录点击的是哪一个面板的\r\n\r\n if (that.rangeLinked) {\r\n if (that.endState || !that.startDate) {\r\n // 重新选择或者第一次选择\r\n index = 0;\r\n that.endState = false;\r\n } else {\r\n index = 1;\r\n that.endState = true;\r\n }\r\n }\r\n\r\n var dateTime = that.thisDateTime(index)\r\n\r\n ,tds = lay(that.elem).find('td')\r\n ,YMD = td.attr('lay-ymd').split('-');\r\n\r\n YMD = {\r\n year: YMD[0] | 0\r\n ,month: (YMD[1] | 0) - 1\r\n ,date: YMD[2] | 0\r\n };\r\n\r\n lay.extend(dateTime, YMD); //同步 dateTime\r\n\r\n //范围选择\r\n if(options.range){\r\n //补充时分秒\r\n lay.each(['startTime', 'endTime'], function(i, item){\r\n that[item] = that[item] || {\r\n hours: i ? 23: 0\r\n ,minutes: i ? 59: 0\r\n ,seconds: i ? 59: 0\r\n };\r\n if (index === i) {\r\n // 判断选择之后的是否在范围内,超出则需要调整时分秒\r\n if (that.getDateTime(lay.extend({}, dateTime, that[item])) < that.getDateTime(options.min)) {\r\n that[item] = {\r\n hours: options.min.hours\r\n ,minutes: options.min.minutes\r\n ,seconds: options.min.seconds\r\n };\r\n lay.extend(dateTime, that[item]);\r\n } else if (that.getDateTime(lay.extend({}, dateTime, that[item])) > that.getDateTime(options.max)) {\r\n that[item] = {\r\n hours: options.max.hours\r\n ,minutes: options.max.minutes\r\n ,seconds: options.max.seconds\r\n };\r\n lay.extend(dateTime, that[item]);\r\n }\r\n }\r\n });\r\n if (!index) {\r\n that.startDate = lay.extend({}, dateTime); // 同步startDate\r\n }\r\n // 校验另外一个日期是否在有效的范围内\r\n // 此处为范围选择的日期面板点击选中处理,所以 disabledType 为 date\r\n if (that.endState && !that.limit({date: that.rangeLinked ? that.startDate : that.thisDateTime(1 - index), disabledType:'date'})) {\r\n // 根据选择之后判断是否需要切换模式\r\n var isChange;\r\n if (that.endState && that.autoCalendarModel.auto) {\r\n isChange = that.autoCalendarModel();\r\n }\r\n // 判断是否反选\r\n var needSwapDate = (isChange || that.rangeLinked && that.endState) && that.newDate(that.startDate) > that.newDate(that.endDate);\r\n if (needSwapDate){\r\n var isSameDate = that.startDate.year === that.endDate.year && that.startDate.month === that.endDate.month && that.startDate.date === that.endDate.date;\r\n var startDate;\r\n // 如果是同一天并且出现了反选证明是时分秒出现开始时间大于结束时间的现象\r\n if(isSameDate){\r\n startDate = that.startTime;\r\n that.startTime = that.endTime;\r\n that.endTime = startDate;\r\n }\r\n // 当出现反向选择时(即“后点击”的日期比“先点击”的日期小),重新提取区间\r\n startDate = that.startDate;\r\n that.startDate = lay.extend({}, that.endDate, that.startTime);\r\n options.dateTime = lay.extend({}, that.startDate);\r\n that.endDate = lay.extend({}, startDate, that.endTime);\r\n }\r\n isChange && (options.dateTime = lay.extend({}, that.startDate));\r\n }\r\n if (that.rangeLinked) {\r\n // 处理日期范围选择的一些边缘情况\r\n var checkState = that.checkPanelDate(dateTime, panelIndex);\r\n var dateTimeTemp = lay.extend({}, dateTime);\r\n var renderMode = (isChange || (checkState && checkState.needFullRender)) ? 'init' : null;\r\n var panelIdx = checkState ? checkState.index : panelIndex;\r\n that.calendar(dateTimeTemp, panelIdx, renderMode);\r\n } else {\r\n that.calendar(null, index, isChange ? 'init' : null);\r\n }\r\n that.endState && that.done(null, 'change');\r\n } else if(options.position === 'static'){ //直接嵌套的选中\r\n that.calendar().done().done(null, 'change'); //同时执行 done 和 change 回调\r\n } else if(options.type === 'date'){\r\n options.autoConfirm ? that.setValue(that.parse()).done().remove() : that.calendar().done(null, 'change');\r\n } else if(options.type === 'datetime'){\r\n that.calendar().done(null, 'change');\r\n }\r\n };\r\n\r\n //底部按钮\r\n Class.prototype.tool = function(btn, type){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,dateTime = options.dateTime\r\n ,isStatic = options.position === 'static'\r\n ,active = {\r\n //选择时间\r\n datetime: function(){\r\n if(lay(btn).hasClass(DISABLED)) return;\r\n that.list('time', 0);\r\n options.range && that.list('time', 1);\r\n lay(btn).attr('lay-type', 'date').html(that.lang().dateTips);\r\n }\r\n\r\n //选择日期\r\n ,date: function(){\r\n that.closeList();\r\n lay(btn).attr('lay-type', 'datetime').html(that.lang().timeTips);\r\n }\r\n\r\n //清空、重置\r\n ,clear: function(){\r\n isStatic && (\r\n lay.extend(dateTime, that.firstDate)\r\n ,that.calendar()\r\n )\r\n options.range && (\r\n delete options.dateTime\r\n ,delete that.endDate\r\n ,delete that.startTime\r\n ,delete that.endTime\r\n );\r\n that.setValue('');\r\n that.done(null, 'onClear').done(['', {}, {}]).remove();\r\n }\r\n\r\n // 现在\r\n ,now: function(){\r\n var thisDate = new Date();\r\n\r\n // 当前系统时间未在 min/max 范围内,则不可点击\r\n if(lay(btn).hasClass(DISABLED)){\r\n return that.hint(lang.tools.now +', '+ lang.invalidDate);\r\n }\r\n\r\n lay.extend(dateTime, that.systemDate(), {\r\n hours: thisDate.getHours()\r\n ,minutes: thisDate.getMinutes()\r\n ,seconds: thisDate.getSeconds()\r\n });\r\n\r\n that.setValue(that.parse());\r\n isStatic && that.calendar();\r\n that.done(null, 'onNow').done().remove();\r\n }\r\n\r\n //确定\r\n ,confirm: function(){\r\n if(options.range){\r\n if(lay(btn).hasClass(DISABLED)){\r\n var isTimeout = options.type === 'time'\r\n ? that.startTime && that.endTime && that.newDate(that.startTime) > that.newDate(that.endTime)\r\n : that.startDate && that.endDate && that.newDate(lay.extend({},that.startDate, that.startTime || {})) > that.newDate(lay.extend({},that.endDate, that.endTime || {}));\r\n\r\n return isTimeout \r\n ? that.hint(options.type === 'time' ? lang.timeout.replace(/日期/g, '时间') : lang.timeout)\r\n : that.hint(lang.invalidDate);\r\n }\r\n } else {\r\n if(lay(btn).hasClass(DISABLED)) return that.hint(lang.invalidDate);\r\n }\r\n\r\n that.setValue(that.parse());\r\n that.done(null, 'onConfirm').done().remove();\r\n }\r\n };\r\n active[type] && active[type]();\r\n };\r\n\r\n //统一切换处理\r\n Class.prototype.change = function(index){\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = that.thisDateTime(index)\r\n ,isAlone = options.range && (options.type === 'year' || options.type === 'month')\r\n\r\n ,elemCont = that.elemCont[index || 0]\r\n ,listYM = that.listYM[index]\r\n ,addSubYear = function(type){\r\n var isYear = lay(elemCont).find('.laydate-year-list')[0]\r\n ,isMonth = lay(elemCont).find('.laydate-month-list')[0];\r\n\r\n //切换年列表\r\n if(isYear){\r\n listYM[0] = type ? listYM[0] - 15 : listYM[0] + 15;\r\n that.list('year', index);\r\n }\r\n\r\n if(isMonth){ //切换月面板中的年\r\n type ? listYM[0]-- : listYM[0]++;\r\n that.list('month', index);\r\n }\r\n\r\n if(isYear || isMonth){\r\n lay.extend(dateTime, {\r\n year: listYM[0]\r\n });\r\n if(isAlone) dateTime.year = listYM[0];\r\n options.range || that.done(null, 'change');\r\n options.range || that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n date: {\r\n year: listYM[0]\r\n },\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n }\r\n\r\n that.setBtnStatus();\r\n return isYear || isMonth;\r\n };\r\n\r\n return {\r\n prevYear: function(){\r\n if(addSubYear('sub')) return;\r\n if (that.rangeLinked) {\r\n options.dateTime.year--;\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n } else {\r\n dateTime.year--;\r\n that.checkDate('limit').calendar(null, index);\r\n // 面板自动切换的模式下重新判定是否发生模式转换等细节处理\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,prevMonth: function(){\r\n // rangeLinked 模式非实时选择日期,不需要同步 options.dateTime,应根据面板显示日期切换\r\n if(that.rangeLinked){\r\n var panelYM = that.panelYM[0];\r\n var YM = that.getAsYM(panelYM.year, panelYM.month, 'sub');\r\n var dateTimeTemp = lay.extend({}, options.dateTime, that.panelYM[0], {year: YM[0], month: YM[1]});\r\n that.checkDate('limit').calendar(dateTimeTemp, null, 'init');\r\n }else{\r\n var YM = that.getAsYM(dateTime.year, dateTime.month, 'sub');\r\n lay.extend(dateTime, {\r\n year: YM[0]\r\n ,month: YM[1]\r\n });\r\n\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,nextMonth: function(){\r\n if(that.rangeLinked){\r\n var panelYM = that.panelYM[0];\r\n var YM = that.getAsYM(panelYM.year, panelYM.month);\r\n var dateTimeTemp = lay.extend({}, options.dateTime, that.panelYM[0], {year: YM[0],month: YM[1]});\r\n that.checkDate('limit').calendar(dateTimeTemp, null, 'init');\r\n }else{\r\n var YM = that.getAsYM(dateTime.year, dateTime.month);\r\n lay.extend(dateTime, {\r\n year: YM[0]\r\n ,month: YM[1]\r\n });\r\n \r\n that.checkDate('limit').calendar(null, null, 'init');\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,nextYear: function(){\r\n if(addSubYear()) return;\r\n if (that.rangeLinked) {\r\n options.dateTime.year++;\r\n that.checkDate('limit').calendar(null, 0, 'init');\r\n } else {\r\n dateTime.year++;\r\n that.checkDate('limit').calendar(null, index);\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n };\r\n };\r\n\r\n //日期切换事件\r\n Class.prototype.changeEvent = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n //日期选择事件\r\n lay(that.elem).on('click', function(e){\r\n lay.stope(e);\r\n }).on('mousedown', function(e){\r\n lay.stope(e);\r\n });\r\n\r\n //年月切换\r\n lay.each(that.elemHeader, function(i, header){\r\n //上一年\r\n lay(header[0]).on('click', function(e){\r\n that.change(i).prevYear();\r\n });\r\n\r\n //上一月\r\n lay(header[1]).on('click', function(e){\r\n that.change(i).prevMonth();\r\n });\r\n\r\n //选择年月\r\n lay(header[2]).find('span').on('click', function(e){\r\n var othis = lay(this)\r\n ,layYM = othis.attr('lay-ym')\r\n ,layType = othis.attr('lay-type');\r\n\r\n if(!layYM) return;\r\n\r\n layYM = layYM.split('-');\r\n\r\n that.listYM[i] = [layYM[0] | 0, layYM[1] | 0];\r\n that.list(layType, i);\r\n lay(that.footer).find('.'+ ELEM_TIME_BTN).addClass(DISABLED);\r\n });\r\n\r\n //下一月\r\n lay(header[3]).on('click', function(e){\r\n that.change(i).nextMonth();\r\n });\r\n\r\n //下一年\r\n lay(header[4]).on('click', function(e){\r\n that.change(i).nextYear();\r\n });\r\n });\r\n\r\n //点击日期\r\n lay.each(that.table, function(i, table){\r\n var tds = lay(table).find('td');\r\n tds.on('click', function(){\r\n that.choose(lay(this), i);\r\n });\r\n });\r\n\r\n //点击底部按钮\r\n lay(that.footer).find('span').on('click', function(){\r\n var type = lay(this).attr('lay-type');\r\n that.tool(this, type);\r\n });\r\n };\r\n\r\n //是否输入框\r\n Class.prototype.isInput = function(elem){\r\n return /input|textarea/.test(elem.tagName.toLocaleLowerCase()) || /INPUT|TEXTAREA/.test(elem.tagName);\r\n };\r\n\r\n //绑定的元素事件处理\r\n Class.prototype.events = function(){\r\n var that = this\r\n var options = that.config\r\n\r\n if(!options.elem[0] || options.elem[0].eventHandler) return;\r\n\r\n var showEvent = function(){\r\n // 已经打开的面板避免重新渲染\r\n if(laydate.thisId === options.id) return;\r\n that.render();\r\n };\r\n\r\n //绑定呼出控件事件\r\n options.elem.on(options.trigger, showEvent);\r\n options.elem[0].eventHandler = true;\r\n options.eventElem.on(options.trigger, showEvent);\r\n\r\n // 元素解绑\r\n that.unbind = function () {\r\n that.remove();\r\n options.elem.off(options.trigger, showEvent);\r\n options.elem.removeAttr('lay-key');\r\n options.elem.removeAttr(MOD_ID);\r\n options.elem[0].eventHandler = false;\r\n options.eventElem.off(options.trigger, showEvent);\r\n options.eventElem.removeAttr('lay-key');\r\n delete thisModule.that[options.id];\r\n };\r\n };\r\n\r\n //记录所有实例\r\n thisModule.that = {}; //记录所有实例对象\r\n\r\n //获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that && isLayui) layui.hint().error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n\r\n // 初始执行\r\n ready.run = function(lay){\r\n // 绑定关闭控件事件\r\n lay(document).on('mousedown', function(e){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n var options = that.config;\r\n\r\n if(\r\n e.target === options.elem[0] ||\r\n e.target === options.eventElem[0] ||\r\n e.target === lay(options.closeStop)[0] ||\r\n (options.elem[0] && options.elem[0].contains(e.target))\r\n ) return;\r\n\r\n that.remove();\r\n\r\n }).on('keydown', function(e){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n // 回车触发确认\r\n if(that.config.position === 'static') return;\r\n if(e.keyCode === 13){\r\n if(lay('#'+ that.elemID)[0] && that.elemID === Class.thisElemDate){\r\n e.preventDefault();\r\n lay(that.footer).find(ELEM_CONFIRM)[0].click();\r\n }\r\n }\r\n });\r\n\r\n //自适应定位\r\n lay(window).on('resize', function(){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n if(!that.elem || !lay(ELEM)[0]){\r\n return false;\r\n }\r\n\r\n that.position();\r\n });\r\n };\r\n\r\n // 渲染 - 核心接口\r\n laydate.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n // 重载\r\n laydate.reload = function (id, options) {\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.reload(options);\r\n };\r\n\r\n // 获取对应 ID 的实例\r\n laydate.getInst = function (id) {\r\n var that = thisModule.getThis(id);\r\n if(that){\r\n return that.inst;\r\n }\r\n };\r\n\r\n // 面板提示\r\n laydate.hint = function(id, opts){\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.hint(opts);\r\n };\r\n\r\n // 解绑实例\r\n laydate.unbind = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.unbind();\r\n };\r\n\r\n // 关闭日期面板\r\n laydate.close = function(id){\r\n var that = thisModule.getThis(id || laydate.thisId);\r\n if(!that) return;\r\n return that.remove();\r\n };\r\n\r\n // 将指定对象转化为日期值\r\n laydate.parse = function(dateTime, format, one){\r\n dateTime = dateTime || {};\r\n\r\n //如果 format 是字符型,则转换为数组格式\r\n if(typeof format === 'string'){\r\n format = thisModule.formatArr(format);\r\n }\r\n\r\n format = (format || []).concat();\r\n\r\n //转义为规定格式\r\n lay.each(format, function(i, item){\r\n if(/yyyy|y/.test(item)){ //年\r\n format[i] = lay.digit(dateTime.year, item.length);\r\n } else if(/MM|M/.test(item)){ //月\r\n format[i] = lay.digit(dateTime.month + (one || 0), item.length);\r\n } else if(/dd|d/.test(item)){ //日\r\n format[i] = lay.digit(dateTime.date, item.length);\r\n } else if(/HH|H/.test(item)){ //时\r\n format[i] = lay.digit(dateTime.hours, item.length);\r\n } else if(/mm|m/.test(item)){ //分\r\n format[i] = lay.digit(dateTime.minutes, item.length);\r\n } else if(/ss|s/.test(item)){ //秒\r\n format[i] = lay.digit(dateTime.seconds, item.length);\r\n }\r\n });\r\n\r\n return format.join('');\r\n };\r\n\r\n // 得到某月的最后一天\r\n laydate.getEndDate = function(month, year){\r\n var thisDate = new Date();\r\n //设置日期为下个月的第一天\r\n thisDate.setFullYear(\r\n year || thisDate.getFullYear()\r\n ,month || (thisDate.getMonth() + 1)\r\n ,1);\r\n //减去一天,得到当前月最后一天\r\n return new Date(thisDate.getTime() - 1000*60*60*24).getDate();\r\n };\r\n\r\n //加载方式\r\n isLayui ? (\r\n laydate.ready()\r\n ,layui.define('lay', function(exports){ //layui 加载\r\n laydate.path = layui.cache.dir;\r\n ready.run(lay);\r\n exports(MOD_NAME, laydate);\r\n })\r\n ) : (\r\n (typeof define === 'function' && define.amd) ? define(function(){ //requirejs 加载\r\n ready.run(lay);\r\n return laydate;\r\n }) : function(){ //普通 script 标签加载\r\n laydate.ready();\r\n ready.run(window.lay);\r\n window.laydate = laydate;\r\n }()\r\n );\r\n\r\n}(window, window.document);\r\n","/*!\r\n * jQuery JavaScript Library v1.12.4\r\n * http://jquery.com/\r\n *\r\n * Includes Sizzle.js\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2016-05-20T17:17Z\r\n */\r\n\r\n(function( global, factory ) {\r\n\r\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\r\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\r\n\t\t// is present, execute the factory and get jQuery.\r\n\t\t// For environments that do not have a `window` with a `document`\r\n\t\t// (such as Node.js), expose a factory as module.exports.\r\n\t\t// This accentuates the need for the creation of a real `window`.\r\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\r\n\t\t// See ticket #14549 for more info.\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory( global, true ) :\r\n\t\t\tfunction( w ) {\r\n\t\t\t\tif ( !w.document ) {\r\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\r\n\t\t\t\t}\r\n\t\t\t\treturn factory( w );\r\n\t\t\t};\r\n\t} else {\r\n\t\tfactory( global );\r\n\t}\r\n\r\n// Pass this if window is not defined yet\r\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\r\n\r\n// Support: Firefox 18+\r\n// Can't be in strict mode, several libs including ASP.NET trace\r\n// the stack via arguments.caller.callee and Firefox dies if\r\n// you try to trace through \"use strict\" call chains. (#13335)\r\n//\"use strict\";\r\nvar deletedIds = [];\r\n\r\nvar document = window.document;\r\n\r\nvar slice = deletedIds.slice;\r\n\r\nvar concat = deletedIds.concat;\r\n\r\nvar push = deletedIds.push;\r\n\r\nvar indexOf = deletedIds.indexOf;\r\n\r\nvar class2type = {};\r\n\r\nvar toString = class2type.toString;\r\n\r\nvar hasOwn = class2type.hasOwnProperty;\r\n\r\nvar support = {};\r\n\r\n\r\n\r\nvar\r\n\tversion = \"1.12.4\",\r\n\r\n\t// Define a local copy of jQuery\r\n\tjQuery = function( selector, context ) {\r\n\r\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\r\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\r\n\t\treturn new jQuery.fn.init( selector, context );\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\t// Make sure we trim BOM and NBSP\r\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\r\n\r\n\t// Matches dashed string for camelizing\r\n\trmsPrefix = /^-ms-/,\r\n\trdashAlpha = /-([\\da-z])/gi,\r\n\r\n\t// Used by jQuery.camelCase as callback to replace()\r\n\tfcamelCase = function( all, letter ) {\r\n\t\treturn letter.toUpperCase();\r\n\t};\r\n\r\njQuery.fn = jQuery.prototype = {\r\n\r\n\t// The current version of jQuery being used\r\n\tjquery: version,\r\n\r\n\tconstructor: jQuery,\r\n\r\n\t// Start with an empty selector\r\n\tselector: \"\",\r\n\r\n\t// The default length of a jQuery object is 0\r\n\tlength: 0,\r\n\r\n\ttoArray: function() {\r\n\t\treturn slice.call( this );\r\n\t},\r\n\r\n\t// Get the Nth element in the matched element set OR\r\n\t// Get the whole matched element set as a clean array\r\n\tget: function( num ) {\r\n\t\treturn num != null ?\r\n\r\n\t\t\t// Return just the one element from the set\r\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\r\n\r\n\t\t\t// Return all the elements in a clean array\r\n\t\t\tslice.call( this );\r\n\t},\r\n\r\n\t// Take an array of elements and push it onto the stack\r\n\t// (returning the new matched element set)\r\n\tpushStack: function( elems ) {\r\n\r\n\t\t// Build a new jQuery matched element set\r\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\r\n\r\n\t\t// Add the old object onto the stack (as a reference)\r\n\t\tret.prevObject = this;\r\n\t\tret.context = this.context;\r\n\r\n\t\t// Return the newly-formed element set\r\n\t\treturn ret;\r\n\t},\r\n\r\n\t// Execute a callback for every element in the matched set.\r\n\teach: function( callback ) {\r\n\t\treturn jQuery.each( this, callback );\r\n\t},\r\n\r\n\tmap: function( callback ) {\r\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\r\n\t\t\treturn callback.call( elem, i, elem );\r\n\t\t} ) );\r\n\t},\r\n\r\n\tslice: function() {\r\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\r\n\t},\r\n\r\n\tfirst: function() {\r\n\t\treturn this.eq( 0 );\r\n\t},\r\n\r\n\tlast: function() {\r\n\t\treturn this.eq( -1 );\r\n\t},\r\n\r\n\teq: function( i ) {\r\n\t\tvar len = this.length,\r\n\t\t\tj = +i + ( i < 0 ? len : 0 );\r\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\r\n\t},\r\n\r\n\tend: function() {\r\n\t\treturn this.prevObject || this.constructor();\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t// Behaves like an Array's method, not like a jQuery method.\r\n\tpush: push,\r\n\tsort: deletedIds.sort,\r\n\tsplice: deletedIds.splice\r\n};\r\n\r\njQuery.extend = jQuery.fn.extend = function() {\r\n\tvar src, copyIsArray, copy, name, options, clone,\r\n\t\ttarget = arguments[ 0 ] || {},\r\n\t\ti = 1,\r\n\t\tlength = arguments.length,\r\n\t\tdeep = false;\r\n\r\n\t// Handle a deep copy situation\r\n\tif ( typeof target === \"boolean\" ) {\r\n\t\tdeep = target;\r\n\r\n\t\t// skip the boolean and the target\r\n\t\ttarget = arguments[ i ] || {};\r\n\t\ti++;\r\n\t}\r\n\r\n\t// Handle case when target is a string or something (possible in deep copy)\r\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\r\n\t\ttarget = {};\r\n\t}\r\n\r\n\t// extend jQuery itself if only one argument is passed\r\n\tif ( i === length ) {\r\n\t\ttarget = this;\r\n\t\ti--;\r\n\t}\r\n\r\n\tfor ( ; i < length; i++ ) {\r\n\r\n\t\t// Only deal with non-null/undefined values\r\n\t\tif ( ( options = arguments[ i ] ) != null ) {\r\n\r\n\t\t\t// Extend the base object\r\n\t\t\tfor ( name in options ) {\r\n\t\t\t\tsrc = target[ name ];\r\n\t\t\t\tcopy = options[ name ];\r\n\r\n\t\t\t\t// Prevent never-ending loop\r\n\t\t\t\tif ( target === copy ) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Recurse if we're merging plain objects or arrays\r\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\r\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\r\n\r\n\t\t\t\t\tif ( copyIsArray ) {\r\n\t\t\t\t\t\tcopyIsArray = false;\r\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Never move original objects, clone them\r\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\r\n\r\n\t\t\t\t// Don't bring in undefined values\r\n\t\t\t\t} else if ( copy !== undefined ) {\r\n\t\t\t\t\ttarget[ name ] = copy;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the modified object\r\n\treturn target;\r\n};\r\n\r\njQuery.extend( {\r\n\r\n\t// Unique for each copy of jQuery on the page\r\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\r\n\r\n\t// Assume jQuery is ready without the ready module\r\n\tisReady: true,\r\n\r\n\terror: function( msg ) {\r\n\t\tthrow new Error( msg );\r\n\t},\r\n\r\n\tnoop: function() {},\r\n\r\n\t// See test/unit/core.js for details concerning isFunction.\r\n\t// Since version 1.3, DOM methods and functions like alert\r\n\t// aren't supported. They return false on IE (#2968).\r\n\tisFunction: function( obj ) {\r\n\t\treturn jQuery.type( obj ) === \"function\";\r\n\t},\r\n\r\n\tisArray: Array.isArray || function( obj ) {\r\n\t\treturn jQuery.type( obj ) === \"array\";\r\n\t},\r\n\r\n\tisWindow: function( obj ) {\r\n\t\t/* jshint eqeqeq: false */\r\n\t\treturn obj != null && obj == obj.window;\r\n\t},\r\n\r\n\tisNumeric: function( obj ) {\r\n\r\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\r\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\r\n\t\t// subtraction forces infinities to NaN\r\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\r\n\t\tvar realStringObj = obj && obj.toString();\r\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\r\n\t},\r\n\r\n\tisEmptyObject: function( obj ) {\r\n\t\tvar name;\r\n\t\tfor ( name in obj ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tisPlainObject: function( obj ) {\r\n\t\tvar key;\r\n\r\n\t\t// Must be an Object.\r\n\t\t// Because of IE, we also have to check the presence of the constructor property.\r\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\r\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\r\n\t\t\t// Not own constructor property must be Object\r\n\t\t\tif ( obj.constructor &&\r\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\r\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch ( e ) {\r\n\r\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Handle iteration over inherited properties before own properties.\r\n\t\tif ( !support.ownFirst ) {\r\n\t\t\tfor ( key in obj ) {\r\n\t\t\t\treturn hasOwn.call( obj, key );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Own properties are enumerated firstly, so to speed up,\r\n\t\t// if last one is own, then all properties are own.\r\n\t\tfor ( key in obj ) {}\r\n\r\n\t\treturn key === undefined || hasOwn.call( obj, key );\r\n\t},\r\n\r\n\ttype: function( obj ) {\r\n\t\tif ( obj == null ) {\r\n\t\t\treturn obj + \"\";\r\n\t\t}\r\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\r\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\r\n\t\t\ttypeof obj;\r\n\t},\r\n\r\n\t// Workarounds based on findings by Jim Driscoll\r\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\r\n\tglobalEval: function( data ) {\r\n\t\tif ( data && jQuery.trim( data ) ) {\r\n\r\n\t\t\t// We use execScript on Internet Explorer\r\n\t\t\t// We use an anonymous function so that context is window\r\n\t\t\t// rather than jQuery in Firefox\r\n\t\t\t( window.execScript || function( data ) {\r\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\r\n\t\t\t} )( data );\r\n\t\t}\r\n\t},\r\n\r\n\t// Convert dashed to camelCase; used by the css and data modules\r\n\t// Microsoft forgot to hump their vendor prefix (#9572)\r\n\tcamelCase: function( string ) {\r\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\r\n\t},\r\n\r\n\tnodeName: function( elem, name ) {\r\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\r\n\t},\r\n\r\n\teach: function( obj, callback ) {\r\n\t\tvar length, i = 0;\r\n\r\n\t\tif ( isArrayLike( obj ) ) {\r\n\t\t\tlength = obj.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor ( i in obj ) {\r\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\ttrim: function( text ) {\r\n\t\treturn text == null ?\r\n\t\t\t\"\" :\r\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\r\n\t},\r\n\r\n\t// results is for internal usage only\r\n\tmakeArray: function( arr, results ) {\r\n\t\tvar ret = results || [];\r\n\r\n\t\tif ( arr != null ) {\r\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\r\n\t\t\t\tjQuery.merge( ret,\r\n\t\t\t\t\ttypeof arr === \"string\" ?\r\n\t\t\t\t\t[ arr ] : arr\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tpush.call( ret, arr );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\tinArray: function( elem, arr, i ) {\r\n\t\tvar len;\r\n\r\n\t\tif ( arr ) {\r\n\t\t\tif ( indexOf ) {\r\n\t\t\t\treturn indexOf.call( arr, elem, i );\r\n\t\t\t}\r\n\r\n\t\t\tlen = arr.length;\r\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\r\n\t\t\t\t// Skip accessing in sparse arrays\r\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tmerge: function( first, second ) {\r\n\t\tvar len = +second.length,\r\n\t\t\tj = 0,\r\n\t\t\ti = first.length;\r\n\r\n\t\twhile ( j < len ) {\r\n\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\r\n\t\tif ( len !== len ) {\r\n\t\t\twhile ( second[ j ] !== undefined ) {\r\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfirst.length = i;\r\n\r\n\t\treturn first;\r\n\t},\r\n\r\n\tgrep: function( elems, callback, invert ) {\r\n\t\tvar callbackInverse,\r\n\t\t\tmatches = [],\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tcallbackExpect = !invert;\r\n\r\n\t\t// Go through the array, only saving the items\r\n\t\t// that pass the validator function\r\n\t\tfor ( ; i < length; i++ ) {\r\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\r\n\t\t\tif ( callbackInverse !== callbackExpect ) {\r\n\t\t\t\tmatches.push( elems[ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn matches;\r\n\t},\r\n\r\n\t// arg is for internal usage only\r\n\tmap: function( elems, callback, arg ) {\r\n\t\tvar length, value,\r\n\t\t\ti = 0,\r\n\t\t\tret = [];\r\n\r\n\t\t// Go through the array, translating each of the items to their new values\r\n\t\tif ( isArrayLike( elems ) ) {\r\n\t\t\tlength = elems.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Go through every key on the object,\r\n\t\t} else {\r\n\t\t\tfor ( i in elems ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\treturn concat.apply( [], ret );\r\n\t},\r\n\r\n\t// A global GUID counter for objects\r\n\tguid: 1,\r\n\r\n\t// Bind a function to a context, optionally partially applying any\r\n\t// arguments.\r\n\tproxy: function( fn, context ) {\r\n\t\tvar args, proxy, tmp;\r\n\r\n\t\tif ( typeof context === \"string\" ) {\r\n\t\t\ttmp = fn[ context ];\r\n\t\t\tcontext = fn;\r\n\t\t\tfn = tmp;\r\n\t\t}\r\n\r\n\t\t// Quick check to determine if target is callable, in the spec\r\n\t\t// this throws a TypeError, but we will just return undefined.\r\n\t\tif ( !jQuery.isFunction( fn ) ) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Simulated bind\r\n\t\targs = slice.call( arguments, 2 );\r\n\t\tproxy = function() {\r\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\r\n\t\t};\r\n\r\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\r\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\r\n\r\n\t\treturn proxy;\r\n\t},\r\n\r\n\tnow: function() {\r\n\t\treturn +( new Date() );\r\n\t},\r\n\r\n\t// jQuery.support is not used in Core but other projects attach their\r\n\t// properties to it so it needs to exist.\r\n\tsupport: support\r\n} );\r\n\r\n// JSHint would error on this code due to the Symbol not being defined in ES5.\r\n// Defining this global in .jshintrc would create a danger of using the global\r\n// unguarded in another place, it seems safer to just disable JSHint for these\r\n// three lines.\r\n/* jshint ignore: start */\r\nif ( typeof Symbol === \"function\" ) {\r\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\r\n}\r\n/* jshint ignore: end */\r\n\r\n// Populate the class2type map\r\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\r\nfunction( i, name ) {\r\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\r\n} );\r\n\r\nfunction isArrayLike( obj ) {\r\n\r\n\t// Support: iOS 8.2 (not reproducible in simulator)\r\n\t// `in` check used to prevent JIT error (gh-2145)\r\n\t// hasOwn isn't used here due to false negatives\r\n\t// regarding Nodelist length in IE\r\n\tvar length = !!obj && \"length\" in obj && obj.length,\r\n\t\ttype = jQuery.type( obj );\r\n\r\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn type === \"array\" || length === 0 ||\r\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\r\n}\r\nvar Sizzle =\r\n/*!\r\n * Sizzle CSS Selector Engine v2.2.1\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2015-10-17\r\n */\r\n(function( window ) {\r\n\r\nvar i,\r\n\tsupport,\r\n\tExpr,\r\n\tgetText,\r\n\tisXML,\r\n\ttokenize,\r\n\tcompile,\r\n\tselect,\r\n\toutermostContext,\r\n\tsortInput,\r\n\thasDuplicate,\r\n\r\n\t// Local document vars\r\n\tsetDocument,\r\n\tdocument,\r\n\tdocElem,\r\n\tdocumentIsHTML,\r\n\trbuggyQSA,\r\n\trbuggyMatches,\r\n\tmatches,\r\n\tcontains,\r\n\r\n\t// Instance-specific data\r\n\texpando = \"sizzle\" + 1 * new Date(),\r\n\tpreferredDoc = window.document,\r\n\tdirruns = 0,\r\n\tdone = 0,\r\n\tclassCache = createCache(),\r\n\ttokenCache = createCache(),\r\n\tcompilerCache = createCache(),\r\n\tsortOrder = function( a, b ) {\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// General-purpose constants\r\n\tMAX_NEGATIVE = 1 << 31,\r\n\r\n\t// Instance methods\r\n\thasOwn = ({}).hasOwnProperty,\r\n\tarr = [],\r\n\tpop = arr.pop,\r\n\tpush_native = arr.push,\r\n\tpush = arr.push,\r\n\tslice = arr.slice,\r\n\t// Use a stripped-down indexOf as it's faster than native\r\n\t// http://jsperf.com/thor-indexof-vs-for/5\r\n\tindexOf = function( list, elem ) {\r\n\t\tvar i = 0,\r\n\t\t\tlen = list.length;\r\n\t\tfor ( ; i < len; i++ ) {\r\n\t\t\tif ( list[i] === elem ) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\r\n\r\n\t// Regular expressions\r\n\r\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\r\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\r\n\r\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\r\n\r\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\r\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\r\n\t\t// Operator (capture 2)\r\n\t\t\"*([*^$|!~]?=)\" + whitespace +\r\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\r\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\r\n\t\t\"*\\\\]\",\r\n\r\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\r\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\r\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\r\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\r\n\t\t// 2. simple (capture 6)\r\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\r\n\t\t// 3. anything else (capture 2)\r\n\t\t\".*\" +\r\n\t\t\")\\\\)|)\",\r\n\r\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\r\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\r\n\r\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\r\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\r\n\r\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\r\n\r\n\trpseudo = new RegExp( pseudos ),\r\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\r\n\r\n\tmatchExpr = {\r\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\r\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\r\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\r\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\r\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\r\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\r\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\r\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\r\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\r\n\t\t// For use in libraries implementing .is()\r\n\t\t// We use this for POS matching in `select`\r\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\r\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\r\n\t},\r\n\r\n\trinputs = /^(?:input|select|textarea|button)$/i,\r\n\trheader = /^h\\d$/i,\r\n\r\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\r\n\r\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\r\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\r\n\r\n\trsibling = /[+~]/,\r\n\trescape = /'|\\\\/g,\r\n\r\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\r\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\r\n\tfunescape = function( _, escaped, escapedWhitespace ) {\r\n\t\tvar high = \"0x\" + escaped - 0x10000;\r\n\t\t// NaN means non-codepoint\r\n\t\t// Support: Firefox<24\r\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\r\n\t\treturn high !== high || escapedWhitespace ?\r\n\t\t\tescaped :\r\n\t\t\thigh < 0 ?\r\n\t\t\t\t// BMP codepoint\r\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\r\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\r\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\r\n\t},\r\n\r\n\t// Used for iframes\r\n\t// See setDocument()\r\n\t// Removing the function wrapper causes a \"Permission Denied\"\r\n\t// error in IE\r\n\tunloadHandler = function() {\r\n\t\tsetDocument();\r\n\t};\r\n\r\n// Optimize for push.apply( _, NodeList )\r\ntry {\r\n\tpush.apply(\r\n\t\t(arr = slice.call( preferredDoc.childNodes )),\r\n\t\tpreferredDoc.childNodes\r\n\t);\r\n\t// Support: Android<4.0\r\n\t// Detect silently failing push.apply\r\n\tarr[ preferredDoc.childNodes.length ].nodeType;\r\n} catch ( e ) {\r\n\tpush = { apply: arr.length ?\r\n\r\n\t\t// Leverage slice if possible\r\n\t\tfunction( target, els ) {\r\n\t\t\tpush_native.apply( target, slice.call(els) );\r\n\t\t} :\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Otherwise append directly\r\n\t\tfunction( target, els ) {\r\n\t\t\tvar j = target.length,\r\n\t\t\t\ti = 0;\r\n\t\t\t// Can't trust NodeList.length\r\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\r\n\t\t\ttarget.length = j - 1;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction Sizzle( selector, context, results, seed ) {\r\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\r\n\t\tnewContext = context && context.ownerDocument,\r\n\r\n\t\t// nodeType defaults to 9, since context defaults to document\r\n\t\tnodeType = context ? context.nodeType : 9;\r\n\r\n\tresults = results || [];\r\n\r\n\t// Return early from calls with invalid selector or context\r\n\tif ( typeof selector !== \"string\" || !selector ||\r\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\r\n\tif ( !seed ) {\r\n\r\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\r\n\t\t\tsetDocument( context );\r\n\t\t}\r\n\t\tcontext = context || document;\r\n\r\n\t\tif ( documentIsHTML ) {\r\n\r\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\r\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\r\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\r\n\r\n\t\t\t\t// ID selector\r\n\t\t\t\tif ( (m = match[1]) ) {\r\n\r\n\t\t\t\t\t// Document context\r\n\t\t\t\t\tif ( nodeType === 9 ) {\r\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\r\n\r\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\r\n\t\t\t\t\t\t\t// TODO: identify versions\r\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\r\n\t\t\t\t\t\t\tif ( elem.id === m ) {\r\n\t\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Element context\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\r\n\t\t\t\t\t\t// TODO: identify versions\r\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\r\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\r\n\t\t\t\t\t\t\tcontains( context, elem ) &&\r\n\t\t\t\t\t\t\telem.id === m ) {\r\n\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Type selector\r\n\t\t\t\t} else if ( match[2] ) {\r\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\r\n\t\t\t\t\treturn results;\r\n\r\n\t\t\t\t// Class selector\r\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\r\n\t\t\t\t\tcontext.getElementsByClassName ) {\r\n\r\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\r\n\t\t\t\t\treturn results;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Take advantage of querySelectorAll\r\n\t\t\tif ( support.qsa &&\r\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\r\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r\n\r\n\t\t\t\tif ( nodeType !== 1 ) {\r\n\t\t\t\t\tnewContext = context;\r\n\t\t\t\t\tnewSelector = selector;\r\n\r\n\t\t\t\t// qSA looks outside Element context, which is not what we want\r\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\r\n\t\t\t\t// Support: IE <=8\r\n\t\t\t\t// Exclude object elements\r\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\r\n\r\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\r\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\r\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prefix every selector in the list\r\n\t\t\t\t\tgroups = tokenize( selector );\r\n\t\t\t\t\ti = groups.length;\r\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewSelector = groups.join( \",\" );\r\n\r\n\t\t\t\t\t// Expand context for sibling selectors\r\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\r\n\t\t\t\t\t\tcontext;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( newSelector ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tpush.apply( results,\r\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t} catch ( qsaError ) {\r\n\t\t\t\t\t} finally {\r\n\t\t\t\t\t\tif ( nid === expando ) {\r\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// All others\r\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\r\n}\r\n\r\n/**\r\n * Create key-value caches of limited size\r\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\r\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\r\n *\tdeleting the oldest entry\r\n */\r\nfunction createCache() {\r\n\tvar keys = [];\r\n\r\n\tfunction cache( key, value ) {\r\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\r\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\r\n\t\t\t// Only keep the most recent entries\r\n\t\t\tdelete cache[ keys.shift() ];\r\n\t\t}\r\n\t\treturn (cache[ key + \" \" ] = value);\r\n\t}\r\n\treturn cache;\r\n}\r\n\r\n/**\r\n * Mark a function for special use by Sizzle\r\n * @param {Function} fn The function to mark\r\n */\r\nfunction markFunction( fn ) {\r\n\tfn[ expando ] = true;\r\n\treturn fn;\r\n}\r\n\r\n/**\r\n * Support testing using an element\r\n * @param {Function} fn Passed the created div and expects a boolean result\r\n */\r\nfunction assert( fn ) {\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\ttry {\r\n\t\treturn !!fn( div );\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t} finally {\r\n\t\t// Remove from its parent by default\r\n\t\tif ( div.parentNode ) {\r\n\t\t\tdiv.parentNode.removeChild( div );\r\n\t\t}\r\n\t\t// release memory in IE\r\n\t\tdiv = null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Adds the same handler for all of the specified attrs\r\n * @param {String} attrs Pipe-separated list of attributes\r\n * @param {Function} handler The method that will be applied\r\n */\r\nfunction addHandle( attrs, handler ) {\r\n\tvar arr = attrs.split(\"|\"),\r\n\t\ti = arr.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tExpr.attrHandle[ arr[i] ] = handler;\r\n\t}\r\n}\r\n\r\n/**\r\n * Checks document order of two siblings\r\n * @param {Element} a\r\n * @param {Element} b\r\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\r\n */\r\nfunction siblingCheck( a, b ) {\r\n\tvar cur = b && a,\r\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\r\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\r\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\r\n\r\n\t// Use IE sourceIndex if available on both nodes\r\n\tif ( diff ) {\r\n\t\treturn diff;\r\n\t}\r\n\r\n\t// Check if b follows a\r\n\tif ( cur ) {\r\n\t\twhile ( (cur = cur.nextSibling) ) {\r\n\t\t\tif ( cur === b ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn a ? 1 : -1;\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for input types\r\n * @param {String} type\r\n */\r\nfunction createInputPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn name === \"input\" && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for buttons\r\n * @param {String} type\r\n */\r\nfunction createButtonPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for positionals\r\n * @param {Function} fn\r\n */\r\nfunction createPositionalPseudo( fn ) {\r\n\treturn markFunction(function( argument ) {\r\n\t\targument = +argument;\r\n\t\treturn markFunction(function( seed, matches ) {\r\n\t\t\tvar j,\r\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\r\n\t\t\t\ti = matchIndexes.length;\r\n\r\n\t\t\t// Match elements found at the specified indexes\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\r\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Checks a node for validity as a Sizzle context\r\n * @param {Element|Object=} context\r\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\r\n */\r\nfunction testContext( context ) {\r\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\r\n}\r\n\r\n// Expose support vars for convenience\r\nsupport = Sizzle.support = {};\r\n\r\n/**\r\n * Detects XML nodes\r\n * @param {Element|Object} elem An element or a document\r\n * @returns {Boolean} True iff elem is a non-HTML XML node\r\n */\r\nisXML = Sizzle.isXML = function( elem ) {\r\n\t// documentElement is verified for cases where it doesn't yet exist\r\n\t// (such as loading iframes in IE - #4833)\r\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\r\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\r\n};\r\n\r\n/**\r\n * Sets document-related variables once based on the current document\r\n * @param {Element|Object} [doc] An element or document object to use to set the document\r\n * @returns {Object} Returns the current document\r\n */\r\nsetDocument = Sizzle.setDocument = function( node ) {\r\n\tvar hasCompare, parent,\r\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\r\n\r\n\t// Return early if doc is invalid or already selected\r\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\r\n\t\treturn document;\r\n\t}\r\n\r\n\t// Update global variables\r\n\tdocument = doc;\r\n\tdocElem = document.documentElement;\r\n\tdocumentIsHTML = !isXML( document );\r\n\r\n\t// Support: IE 9-11, Edge\r\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\r\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\r\n\t\t// Support: IE 11\r\n\t\tif ( parent.addEventListener ) {\r\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\r\n\r\n\t\t// Support: IE 9 - 10 only\r\n\t\t} else if ( parent.attachEvent ) {\r\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\r\n\t\t}\r\n\t}\r\n\r\n\t/* Attributes\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Support: IE<8\r\n\t// Verify that getAttribute really returns attributes and not properties\r\n\t// (excepting IE8 booleans)\r\n\tsupport.attributes = assert(function( div ) {\r\n\t\tdiv.className = \"i\";\r\n\t\treturn !div.getAttribute(\"className\");\r\n\t});\r\n\r\n\t/* getElement(s)By*\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Check if getElementsByTagName(\"*\") returns only elements\r\n\tsupport.getElementsByTagName = assert(function( div ) {\r\n\t\tdiv.appendChild( document.createComment(\"\") );\r\n\t\treturn !div.getElementsByTagName(\"*\").length;\r\n\t});\r\n\r\n\t// Support: IE<9\r\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\r\n\r\n\t// Support: IE<10\r\n\t// Check if getElementById returns elements by name\r\n\t// The broken getElementById methods don't pick up programatically-set names,\r\n\t// so use a roundabout getElementsByName test\r\n\tsupport.getById = assert(function( div ) {\r\n\t\tdocElem.appendChild( div ).id = expando;\r\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\r\n\t});\r\n\r\n\t// ID find and filter\r\n\tif ( support.getById ) {\r\n\t\tExpr.find[\"ID\"] = function( id, context ) {\r\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\r\n\t\t\t\tvar m = context.getElementById( id );\r\n\t\t\t\treturn m ? [ m ] : [];\r\n\t\t\t}\r\n\t\t};\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t} else {\r\n\t\t// Support: IE6/7\r\n\t\t// getElementById is not reliable as a find shortcut\r\n\t\tdelete Expr.find[\"ID\"];\r\n\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\r\n\t\t\t\t\telem.getAttributeNode(\"id\");\r\n\t\t\t\treturn node && node.value === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n\r\n\t// Tag\r\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\r\n\t\tfunction( tag, context ) {\r\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\r\n\t\t\t\treturn context.getElementsByTagName( tag );\r\n\r\n\t\t\t// DocumentFragment nodes don't have gEBTN\r\n\t\t\t} else if ( support.qsa ) {\r\n\t\t\t\treturn context.querySelectorAll( tag );\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\tfunction( tag, context ) {\r\n\t\t\tvar elem,\r\n\t\t\t\ttmp = [],\r\n\t\t\t\ti = 0,\r\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\r\n\t\t\t\tresults = context.getElementsByTagName( tag );\r\n\r\n\t\t\t// Filter out possible comments\r\n\t\t\tif ( tag === \"*\" ) {\r\n\t\t\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\ttmp.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn tmp;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t};\r\n\r\n\t// Class\r\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\r\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\r\n\t\t\treturn context.getElementsByClassName( className );\r\n\t\t}\r\n\t};\r\n\r\n\t/* QSA/matchesSelector\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// QSA and matchesSelector support\r\n\r\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r\n\trbuggyMatches = [];\r\n\r\n\t// qSa(:focus) reports false when true (Chrome 21)\r\n\t// We allow this because of a bug in IE8/9 that throws an error\r\n\t// whenever `document.activeElement` is accessed on an iframe\r\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\r\n\t// See http://bugs.jquery.com/ticket/13378\r\n\trbuggyQSA = [];\r\n\r\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\r\n\t\t// Build QSA regex\r\n\t\t// Regex strategy adopted from Diego Perini\r\n\t\tassert(function( div ) {\r\n\t\t\t// Select is set to empty string on purpose\r\n\t\t\t// This is to test IE's treatment of not explicitly\r\n\t\t\t// setting a boolean content attribute,\r\n\t\t\t// since its presence should be enough\r\n\t\t\t// http://bugs.jquery.com/ticket/12359\r\n\t\t\tdocElem.appendChild( div ).innerHTML = \"\" +\r\n\t\t\t\t\"\";\r\n\r\n\t\t\t// Support: IE8, Opera 11-12.16\r\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\r\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\r\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\r\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\r\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\r\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\"~=\");\r\n\t\t\t}\r\n\r\n\t\t\t// Webkit/Opera - :checked should return selected option elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\r\n\t\t\t\trbuggyQSA.push(\":checked\");\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Safari 8+, iOS 8+\r\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\r\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\r\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Support: Windows 8 Native Apps\r\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\r\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Enforce case-sensitivity of name attribute\r\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\r\n\t\t\t}\r\n\r\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\r\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\r\n\t\t\tdiv.querySelectorAll(\"*,:x\");\r\n\t\t\trbuggyQSA.push(\",.*:\");\r\n\t\t});\r\n\t}\r\n\r\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\r\n\t\tdocElem.webkitMatchesSelector ||\r\n\t\tdocElem.mozMatchesSelector ||\r\n\t\tdocElem.oMatchesSelector ||\r\n\t\tdocElem.msMatchesSelector) )) ) {\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Check to see if it's possible to do matchesSelector\r\n\t\t\t// on a disconnected node (IE 9)\r\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\r\n\r\n\t\t\t// This should fail with an exception\r\n\t\t\t// Gecko does not error, returns false instead\r\n\t\t\tmatches.call( div, \"[s!='']:x\" );\r\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\r\n\t\t});\r\n\t}\r\n\r\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\r\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\r\n\r\n\t/* Contains\r\n\t---------------------------------------------------------------------- */\r\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\r\n\r\n\t// Element contains another\r\n\t// Purposefully self-exclusive\r\n\t// As in, an element does not contain itself\r\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\r\n\t\tfunction( a, b ) {\r\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\r\n\t\t\t\tbup = b && b.parentNode;\r\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\r\n\t\t\t\tadown.contains ?\r\n\t\t\t\t\tadown.contains( bup ) :\r\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\r\n\t\t\t));\r\n\t\t} :\r\n\t\tfunction( a, b ) {\r\n\t\t\tif ( b ) {\r\n\t\t\t\twhile ( (b = b.parentNode) ) {\r\n\t\t\t\t\tif ( b === a ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t/* Sorting\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Document order sorting\r\n\tsortOrder = hasCompare ?\r\n\tfunction( a, b ) {\r\n\r\n\t\t// Flag for duplicate removal\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Sort on method existence if only one input has compareDocumentPosition\r\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\r\n\t\tif ( compare ) {\r\n\t\t\treturn compare;\r\n\t\t}\r\n\r\n\t\t// Calculate position if both inputs belong to the same document\r\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\r\n\t\t\ta.compareDocumentPosition( b ) :\r\n\r\n\t\t\t// Otherwise we know they are disconnected\r\n\t\t\t1;\r\n\r\n\t\t// Disconnected nodes\r\n\t\tif ( compare & 1 ||\r\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\r\n\r\n\t\t\t// Choose the first element that is related to our preferred document\r\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Maintain original order\r\n\t\t\treturn sortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\t\t}\r\n\r\n\t\treturn compare & 4 ? -1 : 1;\r\n\t} :\r\n\tfunction( a, b ) {\r\n\t\t// Exit early if the nodes are identical\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\taup = a.parentNode,\r\n\t\t\tbup = b.parentNode,\r\n\t\t\tap = [ a ],\r\n\t\t\tbp = [ b ];\r\n\r\n\t\t// Parentless nodes are either documents or disconnected\r\n\t\tif ( !aup || !bup ) {\r\n\t\t\treturn a === document ? -1 :\r\n\t\t\t\tb === document ? 1 :\r\n\t\t\t\taup ? -1 :\r\n\t\t\t\tbup ? 1 :\r\n\t\t\t\tsortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\r\n\t\t// If the nodes are siblings, we can do a quick check\r\n\t\t} else if ( aup === bup ) {\r\n\t\t\treturn siblingCheck( a, b );\r\n\t\t}\r\n\r\n\t\t// Otherwise we need full lists of their ancestors for comparison\r\n\t\tcur = a;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tap.unshift( cur );\r\n\t\t}\r\n\t\tcur = b;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tbp.unshift( cur );\r\n\t\t}\r\n\r\n\t\t// Walk down the tree looking for a discrepancy\r\n\t\twhile ( ap[i] === bp[i] ) {\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\treturn i ?\r\n\t\t\t// Do a sibling check if the nodes have a common ancestor\r\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\r\n\r\n\t\t\t// Otherwise nodes in our document sort first\r\n\t\t\tap[i] === preferredDoc ? -1 :\r\n\t\t\tbp[i] === preferredDoc ? 1 :\r\n\t\t\t0;\r\n\t};\r\n\r\n\treturn document;\r\n};\r\n\r\nSizzle.matches = function( expr, elements ) {\r\n\treturn Sizzle( expr, null, null, elements );\r\n};\r\n\r\nSizzle.matchesSelector = function( elem, expr ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\t// Make sure that attribute selectors are quoted\r\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\r\n\r\n\tif ( support.matchesSelector && documentIsHTML &&\r\n\t\t!compilerCache[ expr + \" \" ] &&\r\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\r\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\r\n\r\n\t\ttry {\r\n\t\t\tvar ret = matches.call( elem, expr );\r\n\r\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\r\n\t\t\tif ( ret || support.disconnectedMatch ||\r\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\r\n\t\t\t\t\t// fragment in IE 9\r\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t} catch (e) {}\r\n\t}\r\n\r\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\r\n};\r\n\r\nSizzle.contains = function( context, elem ) {\r\n\t// Set document vars if needed\r\n\tif ( ( context.ownerDocument || context ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\treturn contains( context, elem );\r\n};\r\n\r\nSizzle.attr = function( elem, name ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\r\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\r\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\r\n\t\t\tfn( elem, name, !documentIsHTML ) :\r\n\t\t\tundefined;\r\n\r\n\treturn val !== undefined ?\r\n\t\tval :\r\n\t\tsupport.attributes || !documentIsHTML ?\r\n\t\t\telem.getAttribute( name ) :\r\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\r\n\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n};\r\n\r\nSizzle.error = function( msg ) {\r\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\r\n};\r\n\r\n/**\r\n * Document sorting and removing duplicates\r\n * @param {ArrayLike} results\r\n */\r\nSizzle.uniqueSort = function( results ) {\r\n\tvar elem,\r\n\t\tduplicates = [],\r\n\t\tj = 0,\r\n\t\ti = 0;\r\n\r\n\t// Unless we *know* we can detect duplicates, assume their presence\r\n\thasDuplicate = !support.detectDuplicates;\r\n\tsortInput = !support.sortStable && results.slice( 0 );\r\n\tresults.sort( sortOrder );\r\n\r\n\tif ( hasDuplicate ) {\r\n\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\tif ( elem === results[ i ] ) {\r\n\t\t\t\tj = duplicates.push( i );\r\n\t\t\t}\r\n\t\t}\r\n\t\twhile ( j-- ) {\r\n\t\t\tresults.splice( duplicates[ j ], 1 );\r\n\t\t}\r\n\t}\r\n\r\n\t// Clear input after sorting to release objects\r\n\t// See https://github.com/jquery/sizzle/pull/225\r\n\tsortInput = null;\r\n\r\n\treturn results;\r\n};\r\n\r\n/**\r\n * Utility function for retrieving the text value of an array of DOM nodes\r\n * @param {Array|Element} elem\r\n */\r\ngetText = Sizzle.getText = function( elem ) {\r\n\tvar node,\r\n\t\tret = \"\",\r\n\t\ti = 0,\r\n\t\tnodeType = elem.nodeType;\r\n\r\n\tif ( !nodeType ) {\r\n\t\t// If no nodeType, this is expected to be an array\r\n\t\twhile ( (node = elem[i++]) ) {\r\n\t\t\t// Do not traverse comment nodes\r\n\t\t\tret += getText( node );\r\n\t\t}\r\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r\n\t\t// Use textContent for elements\r\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\r\n\t\tif ( typeof elem.textContent === \"string\" ) {\r\n\t\t\treturn elem.textContent;\r\n\t\t} else {\r\n\t\t\t// Traverse its children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tret += getText( elem );\r\n\t\t\t}\r\n\t\t}\r\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\r\n\t\treturn elem.nodeValue;\r\n\t}\r\n\t// Do not include comment or processing instruction nodes\r\n\r\n\treturn ret;\r\n};\r\n\r\nExpr = Sizzle.selectors = {\r\n\r\n\t// Can be adjusted by the user\r\n\tcacheLength: 50,\r\n\r\n\tcreatePseudo: markFunction,\r\n\r\n\tmatch: matchExpr,\r\n\r\n\tattrHandle: {},\r\n\r\n\tfind: {},\r\n\r\n\trelative: {\r\n\t\t\">\": { dir: \"parentNode\", first: true },\r\n\t\t\" \": { dir: \"parentNode\" },\r\n\t\t\"+\": { dir: \"previousSibling\", first: true },\r\n\t\t\"~\": { dir: \"previousSibling\" }\r\n\t},\r\n\r\n\tpreFilter: {\r\n\t\t\"ATTR\": function( match ) {\r\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\r\n\r\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\r\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\r\n\r\n\t\t\tif ( match[2] === \"~=\" ) {\r\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\r\n\t\t\t}\r\n\r\n\t\t\treturn match.slice( 0, 4 );\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( match ) {\r\n\t\t\t/* matches from matchExpr[\"CHILD\"]\r\n\t\t\t\t1 type (only|nth|...)\r\n\t\t\t\t2 what (child|of-type)\r\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\r\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\r\n\t\t\t\t5 sign of xn-component\r\n\t\t\t\t6 x of xn-component\r\n\t\t\t\t7 sign of y-component\r\n\t\t\t\t8 y of y-component\r\n\t\t\t*/\r\n\t\t\tmatch[1] = match[1].toLowerCase();\r\n\r\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\r\n\t\t\t\t// nth-* requires argument\r\n\t\t\t\tif ( !match[3] ) {\r\n\t\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\r\n\t\t\t\t// remember that false/true cast respectively to 0/1\r\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\r\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\r\n\r\n\t\t\t// other types prohibit arguments\r\n\t\t\t} else if ( match[3] ) {\r\n\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t}\r\n\r\n\t\t\treturn match;\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( match ) {\r\n\t\t\tvar excess,\r\n\t\t\t\tunquoted = !match[6] && match[2];\r\n\r\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// Accept quoted arguments as-is\r\n\t\t\tif ( match[3] ) {\r\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\r\n\r\n\t\t\t// Strip excess characters from unquoted arguments\r\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\r\n\t\t\t\t// Get excess from tokenize (recursively)\r\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\r\n\t\t\t\t// advance to the next closing parenthesis\r\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\r\n\r\n\t\t\t\t// excess is a negative index\r\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\r\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\r\n\t\t\t}\r\n\r\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\r\n\t\t\treturn match.slice( 0, 3 );\r\n\t\t}\r\n\t},\r\n\r\n\tfilter: {\r\n\r\n\t\t\"TAG\": function( nodeNameSelector ) {\r\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn nodeNameSelector === \"*\" ?\r\n\t\t\t\tfunction() { return true; } :\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CLASS\": function( className ) {\r\n\t\t\tvar pattern = classCache[ className + \" \" ];\r\n\r\n\t\t\treturn pattern ||\r\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\r\n\t\t\t\tclassCache( className, function( elem ) {\r\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\r\n\t\t\t\t});\r\n\t\t},\r\n\r\n\t\t\"ATTR\": function( name, operator, check ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar result = Sizzle.attr( elem, name );\r\n\r\n\t\t\t\tif ( result == null ) {\r\n\t\t\t\t\treturn operator === \"!=\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( !operator ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult += \"\";\r\n\r\n\t\t\t\treturn operator === \"=\" ? result === check :\r\n\t\t\t\t\toperator === \"!=\" ? result !== check :\r\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\r\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\r\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\r\n\t\t\t\t\tfalse;\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\r\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\r\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\r\n\t\t\t\tofType = what === \"of-type\";\r\n\r\n\t\t\treturn first === 1 && last === 0 ?\r\n\r\n\t\t\t\t// Shortcut for :nth-*(n)\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn !!elem.parentNode;\r\n\t\t\t\t} :\r\n\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\r\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\r\n\t\t\t\t\t\tparent = elem.parentNode,\r\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\r\n\t\t\t\t\t\tuseCache = !xml && !ofType,\r\n\t\t\t\t\t\tdiff = false;\r\n\r\n\t\t\t\t\tif ( parent ) {\r\n\r\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\r\n\t\t\t\t\t\tif ( simple ) {\r\n\t\t\t\t\t\t\twhile ( dir ) {\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\r\n\t\t\t\t\t\t\t\t\tif ( ofType ?\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\r\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\r\n\r\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\r\n\t\t\t\t\t\tif ( forward && useCache ) {\r\n\r\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\r\n\r\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\r\n\t\t\t\t\t\t\tnode = parent;\r\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\r\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\r\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\r\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\r\n\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\r\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\r\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\r\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Use previously-cached element index if available\r\n\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\r\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\r\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// xml :nth-child(...)\r\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\r\n\t\t\t\t\t\t\tif ( diff === false ) {\r\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\r\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\r\n\t\t\t\t\t\t\t\t\t\t++diff ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\r\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\r\n\t\t\t\t\t\tdiff -= last;\r\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( pseudo, argument ) {\r\n\t\t\t// pseudo-class names are case-insensitive\r\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\r\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r\n\t\t\t// Remember that setFilters inherits from pseudos\r\n\t\t\tvar args,\r\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\r\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\r\n\r\n\t\t\t// The user may use createPseudo to indicate that\r\n\t\t\t// arguments are needed to create the filter function\r\n\t\t\t// just as Sizzle does\r\n\t\t\tif ( fn[ expando ] ) {\r\n\t\t\t\treturn fn( argument );\r\n\t\t\t}\r\n\r\n\t\t\t// But maintain support for old signatures\r\n\t\t\tif ( fn.length > 1 ) {\r\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\r\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\r\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\r\n\t\t\t\t\t\tvar idx,\r\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\r\n\t\t\t\t\t\t\ti = matched.length;\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\r\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\t\treturn fn( elem, 0, args );\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn fn;\r\n\t\t}\r\n\t},\r\n\r\n\tpseudos: {\r\n\t\t// Potentially complex pseudos\r\n\t\t\"not\": markFunction(function( selector ) {\r\n\t\t\t// Trim the selector passed to compile\r\n\t\t\t// to avoid treating leading and trailing\r\n\t\t\t// spaces as combinators\r\n\t\t\tvar input = [],\r\n\t\t\t\tresults = [],\r\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\r\n\r\n\t\t\treturn matcher[ expando ] ?\r\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\r\n\t\t\t\t\tvar elem,\r\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\r\n\t\t\t\t\t\ti = seed.length;\r\n\r\n\t\t\t\t\t// Match elements unmatched by `matcher`\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}) :\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tinput[0] = elem;\r\n\t\t\t\t\tmatcher( input, null, xml, results );\r\n\t\t\t\t\t// Don't keep the element (issue #299)\r\n\t\t\t\t\tinput[0] = null;\r\n\t\t\t\t\treturn !results.pop();\r\n\t\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"has\": markFunction(function( selector ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"contains\": markFunction(function( text ) {\r\n\t\t\ttext = text.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// \"Whether an element is represented by a :lang() selector\r\n\t\t// is based solely on the element's language value\r\n\t\t// being equal to the identifier C,\r\n\t\t// or beginning with the identifier C immediately followed by \"-\".\r\n\t\t// The matching of C against the element's language value is performed case-insensitively.\r\n\t\t// The identifier C does not have to be a valid language name.\"\r\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\r\n\t\t\"lang\": markFunction( function( lang ) {\r\n\t\t\t// lang value must be a valid identifier\r\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\r\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\r\n\t\t\t}\r\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar elemLang;\r\n\t\t\t\tdo {\r\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\r\n\t\t\t\t\t\telem.lang :\r\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\r\n\r\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\r\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// Miscellaneous\r\n\t\t\"target\": function( elem ) {\r\n\t\t\tvar hash = window.location && window.location.hash;\r\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\r\n\t\t},\r\n\r\n\t\t\"root\": function( elem ) {\r\n\t\t\treturn elem === docElem;\r\n\t\t},\r\n\r\n\t\t\"focus\": function( elem ) {\r\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\r\n\t\t},\r\n\r\n\t\t// Boolean properties\r\n\t\t\"enabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === false;\r\n\t\t},\r\n\r\n\t\t\"disabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === true;\r\n\t\t},\r\n\r\n\t\t\"checked\": function( elem ) {\r\n\t\t\t// In CSS3, :checked should return both checked and selected elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\r\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\r\n\t\t},\r\n\r\n\t\t\"selected\": function( elem ) {\r\n\t\t\t// Accessing this property makes selected-by-default\r\n\t\t\t// options in Safari work properly\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\telem.parentNode.selectedIndex;\r\n\t\t\t}\r\n\r\n\t\t\treturn elem.selected === true;\r\n\t\t},\r\n\r\n\t\t// Contents\r\n\t\t\"empty\": function( elem ) {\r\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\r\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\r\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\r\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tif ( elem.nodeType < 6 ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t\"parent\": function( elem ) {\r\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\r\n\t\t},\r\n\r\n\t\t// Element/input types\r\n\t\t\"header\": function( elem ) {\r\n\t\t\treturn rheader.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"input\": function( elem ) {\r\n\t\t\treturn rinputs.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"button\": function( elem ) {\r\n\t\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\r\n\t\t},\r\n\r\n\t\t\"text\": function( elem ) {\r\n\t\t\tvar attr;\r\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\r\n\t\t\t\telem.type === \"text\" &&\r\n\r\n\t\t\t\t// Support: IE<8\r\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\r\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\r\n\t\t},\r\n\r\n\t\t// Position-in-collection\r\n\t\t\"first\": createPositionalPseudo(function() {\r\n\t\t\treturn [ 0 ];\r\n\t\t}),\r\n\r\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\treturn [ length - 1 ];\r\n\t\t}),\r\n\r\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\r\n\t\t}),\r\n\r\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 0;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 1;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; --i >= 0; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; ++i < length; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t})\r\n\t}\r\n};\r\n\r\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\r\n\r\n// Add button/input type pseudos\r\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\r\n\tExpr.pseudos[ i ] = createInputPseudo( i );\r\n}\r\nfor ( i in { submit: true, reset: true } ) {\r\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\r\n}\r\n\r\n// Easy API for creating new setFilters\r\nfunction setFilters() {}\r\nsetFilters.prototype = Expr.filters = Expr.pseudos;\r\nExpr.setFilters = new setFilters();\r\n\r\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\r\n\tvar matched, match, tokens, type,\r\n\t\tsoFar, groups, preFilters,\r\n\t\tcached = tokenCache[ selector + \" \" ];\r\n\r\n\tif ( cached ) {\r\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\r\n\t}\r\n\r\n\tsoFar = selector;\r\n\tgroups = [];\r\n\tpreFilters = Expr.preFilter;\r\n\r\n\twhile ( soFar ) {\r\n\r\n\t\t// Comma and first run\r\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\r\n\t\t\tif ( match ) {\r\n\t\t\t\t// Don't consume trailing commas as valid\r\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\r\n\t\t\t}\r\n\t\t\tgroups.push( (tokens = []) );\r\n\t\t}\r\n\r\n\t\tmatched = false;\r\n\r\n\t\t// Combinators\r\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\r\n\t\t\tmatched = match.shift();\r\n\t\t\ttokens.push({\r\n\t\t\t\tvalue: matched,\r\n\t\t\t\t// Cast descendant combinators to space\r\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\r\n\t\t\t});\r\n\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t}\r\n\r\n\t\t// Filters\r\n\t\tfor ( type in Expr.filter ) {\r\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\r\n\t\t\t\tmatched = match.shift();\r\n\t\t\t\ttokens.push({\r\n\t\t\t\t\tvalue: matched,\r\n\t\t\t\t\ttype: type,\r\n\t\t\t\t\tmatches: match\r\n\t\t\t\t});\r\n\t\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( !matched ) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the length of the invalid excess\r\n\t// if we're just parsing\r\n\t// Otherwise, throw an error or return tokens\r\n\treturn parseOnly ?\r\n\t\tsoFar.length :\r\n\t\tsoFar ?\r\n\t\t\tSizzle.error( selector ) :\r\n\t\t\t// Cache the tokens\r\n\t\t\ttokenCache( selector, groups ).slice( 0 );\r\n};\r\n\r\nfunction toSelector( tokens ) {\r\n\tvar i = 0,\r\n\t\tlen = tokens.length,\r\n\t\tselector = \"\";\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tselector += tokens[i].value;\r\n\t}\r\n\treturn selector;\r\n}\r\n\r\nfunction addCombinator( matcher, combinator, base ) {\r\n\tvar dir = combinator.dir,\r\n\t\tcheckNonElements = base && dir === \"parentNode\",\r\n\t\tdoneName = done++;\r\n\r\n\treturn combinator.first ?\r\n\t\t// Check against closest ancestor/preceding element\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\treturn matcher( elem, context, xml );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\t// Check against all ancestor/preceding elements\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar oldCache, uniqueCache, outerCache,\r\n\t\t\t\tnewCache = [ dirruns, doneName ];\r\n\r\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\r\n\t\t\tif ( xml ) {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\r\n\r\n\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\r\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\r\n\r\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\r\n\r\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\r\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n}\r\n\r\nfunction elementMatcher( matchers ) {\r\n\treturn matchers.length > 1 ?\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar i = matchers.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} :\r\n\t\tmatchers[0];\r\n}\r\n\r\nfunction multipleContexts( selector, contexts, results ) {\r\n\tvar i = 0,\r\n\t\tlen = contexts.length;\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tSizzle( selector, contexts[i], results );\r\n\t}\r\n\treturn results;\r\n}\r\n\r\nfunction condense( unmatched, map, filter, context, xml ) {\r\n\tvar elem,\r\n\t\tnewUnmatched = [],\r\n\t\ti = 0,\r\n\t\tlen = unmatched.length,\r\n\t\tmapped = map != null;\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\r\n\t\t\t\tnewUnmatched.push( elem );\r\n\t\t\t\tif ( mapped ) {\r\n\t\t\t\t\tmap.push( i );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn newUnmatched;\r\n}\r\n\r\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\r\n\tif ( postFilter && !postFilter[ expando ] ) {\r\n\t\tpostFilter = setMatcher( postFilter );\r\n\t}\r\n\tif ( postFinder && !postFinder[ expando ] ) {\r\n\t\tpostFinder = setMatcher( postFinder, postSelector );\r\n\t}\r\n\treturn markFunction(function( seed, results, context, xml ) {\r\n\t\tvar temp, i, elem,\r\n\t\t\tpreMap = [],\r\n\t\t\tpostMap = [],\r\n\t\t\tpreexisting = results.length,\r\n\r\n\t\t\t// Get initial elements from seed or context\r\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\r\n\r\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\r\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\r\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\r\n\t\t\t\telems,\r\n\r\n\t\t\tmatcherOut = matcher ?\r\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\r\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\r\n\r\n\t\t\t\t\t// ...intermediate processing is necessary\r\n\t\t\t\t\t[] :\r\n\r\n\t\t\t\t\t// ...otherwise use results directly\r\n\t\t\t\t\tresults :\r\n\t\t\t\tmatcherIn;\r\n\r\n\t\t// Find primary matches\r\n\t\tif ( matcher ) {\r\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\r\n\t\t}\r\n\r\n\t\t// Apply postFilter\r\n\t\tif ( postFilter ) {\r\n\t\t\ttemp = condense( matcherOut, postMap );\r\n\t\t\tpostFilter( temp, [], context, xml );\r\n\r\n\t\t\t// Un-match failing elements by moving them back to matcherIn\r\n\t\t\ti = temp.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( (elem = temp[i]) ) {\r\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( seed ) {\r\n\t\t\tif ( postFinder || preFilter ) {\r\n\t\t\t\tif ( postFinder ) {\r\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\r\n\t\t\t\t\ttemp = [];\r\n\t\t\t\t\ti = matcherOut.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\r\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\r\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\r\n\t\t\t\ti = matcherOut.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\r\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\r\n\r\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Add elements to results, through postFinder if defined\r\n\t\t} else {\r\n\t\t\tmatcherOut = condense(\r\n\t\t\t\tmatcherOut === results ?\r\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\r\n\t\t\t\t\tmatcherOut\r\n\t\t\t);\r\n\t\t\tif ( postFinder ) {\r\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\r\n\t\t\t} else {\r\n\t\t\t\tpush.apply( results, matcherOut );\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction matcherFromTokens( tokens ) {\r\n\tvar checkContext, matcher, j,\r\n\t\tlen = tokens.length,\r\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\r\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\r\n\t\ti = leadingRelative ? 1 : 0,\r\n\r\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\r\n\t\tmatchContext = addCombinator( function( elem ) {\r\n\t\t\treturn elem === checkContext;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchAnyContext = addCombinator( function( elem ) {\r\n\t\t\treturn indexOf( checkContext, elem ) > -1;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchers = [ function( elem, context, xml ) {\r\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\r\n\t\t\t\t(checkContext = context).nodeType ?\r\n\t\t\t\t\tmatchContext( elem, context, xml ) :\r\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\r\n\t\t\t// Avoid hanging onto element (issue #299)\r\n\t\t\tcheckContext = null;\r\n\t\t\treturn ret;\r\n\t\t} ];\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\r\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\r\n\t\t} else {\r\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\r\n\r\n\t\t\t// Return special upon seeing a positional matcher\r\n\t\t\tif ( matcher[ expando ] ) {\r\n\t\t\t\t// Find the next relative operator (if any) for proper handling\r\n\t\t\t\tj = ++i;\r\n\t\t\t\tfor ( ; j < len; j++ ) {\r\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn setMatcher(\r\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\r\n\t\t\t\t\ti > 1 && toSelector(\r\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\r\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\r\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\r\n\t\t\t\t\tmatcher,\r\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\r\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\r\n\t\t\t\t\tj < len && toSelector( tokens )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tmatchers.push( matcher );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elementMatcher( matchers );\r\n}\r\n\r\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\r\n\tvar bySet = setMatchers.length > 0,\r\n\t\tbyElement = elementMatchers.length > 0,\r\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\r\n\t\t\tvar elem, j, matcher,\r\n\t\t\t\tmatchedCount = 0,\r\n\t\t\t\ti = \"0\",\r\n\t\t\t\tunmatched = seed && [],\r\n\t\t\t\tsetMatched = [],\r\n\t\t\t\tcontextBackup = outermostContext,\r\n\t\t\t\t// We must always have either seed elements or outermost context\r\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\r\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\r\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\r\n\t\t\t\tlen = elems.length;\r\n\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\toutermostContext = context === document || context || outermost;\r\n\t\t\t}\r\n\r\n\t\t\t// Add elements passing elementMatchers directly to results\r\n\t\t\t// Support: IE<9, Safari\r\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\r\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\r\n\t\t\t\tif ( byElement && elem ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\r\n\t\t\t\t\t\tsetDocument( elem );\r\n\t\t\t\t\t\txml = !documentIsHTML;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( outermost ) {\r\n\t\t\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Track unmatched elements for set filters\r\n\t\t\t\tif ( bySet ) {\r\n\t\t\t\t\t// They will have gone through all possible matchers\r\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\r\n\t\t\t\t\t\tmatchedCount--;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Lengthen the array for every element, matched or not\r\n\t\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t\tunmatched.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\r\n\t\t\t// makes the latter nonnegative.\r\n\t\t\tmatchedCount += i;\r\n\r\n\t\t\t// Apply set filters to unmatched elements\r\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\r\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\r\n\t\t\t// no element matchers and no seed.\r\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\r\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\r\n\t\t\t// numerically zero.\r\n\t\t\tif ( bySet && i !== matchedCount ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\r\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\r\n\t\t\t\t\tif ( matchedCount > 0 ) {\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\r\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\r\n\t\t\t\t\tsetMatched = condense( setMatched );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add matches to results\r\n\t\t\t\tpush.apply( results, setMatched );\r\n\r\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\r\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\r\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\r\n\r\n\t\t\t\t\tSizzle.uniqueSort( results );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Override manipulation of globals by nested matchers\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\toutermostContext = contextBackup;\r\n\t\t\t}\r\n\r\n\t\t\treturn unmatched;\r\n\t\t};\r\n\r\n\treturn bySet ?\r\n\t\tmarkFunction( superMatcher ) :\r\n\t\tsuperMatcher;\r\n}\r\n\r\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\r\n\tvar i,\r\n\t\tsetMatchers = [],\r\n\t\telementMatchers = [],\r\n\t\tcached = compilerCache[ selector + \" \" ];\r\n\r\n\tif ( !cached ) {\r\n\t\t// Generate a function of recursive functions that can be used to check each element\r\n\t\tif ( !match ) {\r\n\t\t\tmatch = tokenize( selector );\r\n\t\t}\r\n\t\ti = match.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tcached = matcherFromTokens( match[i] );\r\n\t\t\tif ( cached[ expando ] ) {\r\n\t\t\t\tsetMatchers.push( cached );\r\n\t\t\t} else {\r\n\t\t\t\telementMatchers.push( cached );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Cache the compiled function\r\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\r\n\r\n\t\t// Save selector and tokenization\r\n\t\tcached.selector = selector;\r\n\t}\r\n\treturn cached;\r\n};\r\n\r\n/**\r\n * A low-level selection function that works with Sizzle's compiled\r\n * selector functions\r\n * @param {String|Function} selector A selector or a pre-compiled\r\n * selector function built with Sizzle.compile\r\n * @param {Element} context\r\n * @param {Array} [results]\r\n * @param {Array} [seed] A set of elements to match against\r\n */\r\nselect = Sizzle.select = function( selector, context, results, seed ) {\r\n\tvar i, tokens, token, type, find,\r\n\t\tcompiled = typeof selector === \"function\" && selector,\r\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\r\n\r\n\tresults = results || [];\r\n\r\n\t// Try to minimize operations if there is only one selector in the list and no seed\r\n\t// (the latter of which guarantees us context)\r\n\tif ( match.length === 1 ) {\r\n\r\n\t\t// Reduce context if the leading compound selector is an ID\r\n\t\ttokens = match[0] = match[0].slice( 0 );\r\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\r\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\r\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\r\n\r\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\r\n\t\t\tif ( !context ) {\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\r\n\t\t\t} else if ( compiled ) {\r\n\t\t\t\tcontext = context.parentNode;\r\n\t\t\t}\r\n\r\n\t\t\tselector = selector.slice( tokens.shift().value.length );\r\n\t\t}\r\n\r\n\t\t// Fetch a seed set for right-to-left matching\r\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\ttoken = tokens[i];\r\n\r\n\t\t\t// Abort if we hit a combinator\r\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( (find = Expr.find[ type ]) ) {\r\n\t\t\t\t// Search, expanding context for leading sibling combinators\r\n\t\t\t\tif ( (seed = find(\r\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\r\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\r\n\t\t\t\t)) ) {\r\n\r\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\r\n\t\t\t\t\ttokens.splice( i, 1 );\r\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\r\n\t\t\t\t\tif ( !selector ) {\r\n\t\t\t\t\t\tpush.apply( results, seed );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Compile and execute a filtering function if one is not provided\r\n\t// Provide `match` to avoid retokenization if we modified the selector above\r\n\t( compiled || compile( selector, match ) )(\r\n\t\tseed,\r\n\t\tcontext,\r\n\t\t!documentIsHTML,\r\n\t\tresults,\r\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\r\n\t);\r\n\treturn results;\r\n};\r\n\r\n// One-time assignments\r\n\r\n// Sort stability\r\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\r\n\r\n// Support: Chrome 14-35+\r\n// Always assume duplicates if they aren't passed to the comparison function\r\nsupport.detectDuplicates = !!hasDuplicate;\r\n\r\n// Initialize against the default document\r\nsetDocument();\r\n\r\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\r\n// Detached nodes confoundingly follow *each other*\r\nsupport.sortDetached = assert(function( div1 ) {\r\n\t// Should return 1, but returns 4 (following)\r\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\r\n});\r\n\r\n// Support: IE<8\r\n// Prevent attribute/property \"interpolation\"\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !assert(function( div ) {\r\n\tdiv.innerHTML = \"\";\r\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\r\n}) ) {\r\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use defaultValue in place of getAttribute(\"value\")\r\nif ( !support.attributes || !assert(function( div ) {\r\n\tdiv.innerHTML = \"\";\r\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\r\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\r\n}) ) {\r\n\taddHandle( \"value\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\r\n\t\t\treturn elem.defaultValue;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use getAttributeNode to fetch booleans when getAttribute lies\r\nif ( !assert(function( div ) {\r\n\treturn div.getAttribute(\"disabled\") == null;\r\n}) ) {\r\n\taddHandle( booleans, function( elem, name, isXML ) {\r\n\t\tvar val;\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\r\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\r\n\t\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n\t\t}\r\n\t});\r\n}\r\n\r\nreturn Sizzle;\r\n\r\n})( window );\r\n\r\n\r\n\r\njQuery.find = Sizzle;\r\njQuery.expr = Sizzle.selectors;\r\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\r\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\r\njQuery.text = Sizzle.getText;\r\njQuery.isXMLDoc = Sizzle.isXML;\r\njQuery.contains = Sizzle.contains;\r\n\r\n\r\n\r\nvar dir = function( elem, dir, until ) {\r\n\tvar matched = [],\r\n\t\ttruncate = until !== undefined;\r\n\r\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\r\n\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tmatched.push( elem );\r\n\t\t}\r\n\t}\r\n\treturn matched;\r\n};\r\n\r\n\r\nvar siblings = function( n, elem ) {\r\n\tvar matched = [];\r\n\r\n\tfor ( ; n; n = n.nextSibling ) {\r\n\t\tif ( n.nodeType === 1 && n !== elem ) {\r\n\t\t\tmatched.push( n );\r\n\t\t}\r\n\t}\r\n\r\n\treturn matched;\r\n};\r\n\r\n\r\nvar rneedsContext = jQuery.expr.match.needsContext;\r\n\r\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\r\n\r\n\r\n\r\nvar risSimple = /^.[^:#\\[\\.,]*$/;\r\n\r\n// Implement the identical functionality for filter and not\r\nfunction winnow( elements, qualifier, not ) {\r\n\tif ( jQuery.isFunction( qualifier ) ) {\r\n\t\treturn jQuery.grep( elements, function( elem, i ) {\r\n\t\t\t/* jshint -W018 */\r\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\r\n\t\t} );\r\n\r\n\t}\r\n\r\n\tif ( qualifier.nodeType ) {\r\n\t\treturn jQuery.grep( elements, function( elem ) {\r\n\t\t\treturn ( elem === qualifier ) !== not;\r\n\t\t} );\r\n\r\n\t}\r\n\r\n\tif ( typeof qualifier === \"string\" ) {\r\n\t\tif ( risSimple.test( qualifier ) ) {\r\n\t\t\treturn jQuery.filter( qualifier, elements, not );\r\n\t\t}\r\n\r\n\t\tqualifier = jQuery.filter( qualifier, elements );\r\n\t}\r\n\r\n\treturn jQuery.grep( elements, function( elem ) {\r\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\r\n\t} );\r\n}\r\n\r\njQuery.filter = function( expr, elems, not ) {\r\n\tvar elem = elems[ 0 ];\r\n\r\n\tif ( not ) {\r\n\t\texpr = \":not(\" + expr + \")\";\r\n\t}\r\n\r\n\treturn elems.length === 1 && elem.nodeType === 1 ?\r\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\r\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\r\n\t\t\treturn elem.nodeType === 1;\r\n\t\t} ) );\r\n};\r\n\r\njQuery.fn.extend( {\r\n\tfind: function( selector ) {\r\n\t\tvar i,\r\n\t\t\tret = [],\r\n\t\t\tself = this,\r\n\t\t\tlen = self.length;\r\n\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\r\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} ) );\r\n\t\t}\r\n\r\n\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\tjQuery.find( selector, self[ i ], ret );\r\n\t\t}\r\n\r\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\r\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\r\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\r\n\t\treturn ret;\r\n\t},\r\n\tfilter: function( selector ) {\r\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\r\n\t},\r\n\tnot: function( selector ) {\r\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\r\n\t},\r\n\tis: function( selector ) {\r\n\t\treturn !!winnow(\r\n\t\t\tthis,\r\n\r\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\r\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\r\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\r\n\t\t\t\tjQuery( selector ) :\r\n\t\t\t\tselector || [],\r\n\t\t\tfalse\r\n\t\t).length;\r\n\t}\r\n} );\r\n\r\n\r\n// Initialize a jQuery object\r\n\r\n\r\n// A central reference to the root jQuery(document)\r\nvar rootjQuery,\r\n\r\n\t// A simple way to check for HTML strings\r\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\r\n\t// Strict HTML recognition (#11290: must start with <)\r\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\r\n\r\n\tinit = jQuery.fn.init = function( selector, context, root ) {\r\n\t\tvar match, elem;\r\n\r\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\r\n\t\tif ( !selector ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// init accepts an alternate rootjQuery\r\n\t\t// so migrate can support jQuery.sub (gh-2101)\r\n\t\troot = root || rootjQuery;\r\n\r\n\t\t// Handle HTML strings\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\r\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\r\n\t\t\t\tselector.length >= 3 ) {\r\n\r\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\r\n\t\t\t\tmatch = [ null, selector, null ];\r\n\r\n\t\t\t} else {\r\n\t\t\t\tmatch = rquickExpr.exec( selector );\r\n\t\t\t}\r\n\r\n\t\t\t// Match html or make sure no context is specified for #id\r\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\r\n\r\n\t\t\t\t// HANDLE: $(html) -> $(array)\r\n\t\t\t\tif ( match[ 1 ] ) {\r\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\r\n\r\n\t\t\t\t\t// scripts is true for back-compat\r\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\r\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\r\n\t\t\t\t\t\tmatch[ 1 ],\r\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t) );\r\n\r\n\t\t\t\t\t// HANDLE: $(html, props)\r\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\r\n\t\t\t\t\t\tfor ( match in context ) {\r\n\r\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\r\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\r\n\r\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t// HANDLE: $(#id)\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\r\n\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\r\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\r\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\r\n\t\t\t\t\t\tthis.length = 1;\r\n\t\t\t\t\t\tthis[ 0 ] = elem;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.context = document;\r\n\t\t\t\t\tthis.selector = selector;\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\r\n\t\t\t// HANDLE: $(expr, $(...))\r\n\t\t\t} else if ( !context || context.jquery ) {\r\n\t\t\t\treturn ( context || root ).find( selector );\r\n\r\n\t\t\t// HANDLE: $(expr, context)\r\n\t\t\t// (which is just equivalent to: $(context).find(expr)\r\n\t\t\t} else {\r\n\t\t\t\treturn this.constructor( context ).find( selector );\r\n\t\t\t}\r\n\r\n\t\t// HANDLE: $(DOMElement)\r\n\t\t} else if ( selector.nodeType ) {\r\n\t\t\tthis.context = this[ 0 ] = selector;\r\n\t\t\tthis.length = 1;\r\n\t\t\treturn this;\r\n\r\n\t\t// HANDLE: $(function)\r\n\t\t// Shortcut for document ready\r\n\t\t} else if ( jQuery.isFunction( selector ) ) {\r\n\t\t\treturn typeof root.ready !== \"undefined\" ?\r\n\t\t\t\troot.ready( selector ) :\r\n\r\n\t\t\t\t// Execute immediately if ready is not present\r\n\t\t\t\tselector( jQuery );\r\n\t\t}\r\n\r\n\t\tif ( selector.selector !== undefined ) {\r\n\t\t\tthis.selector = selector.selector;\r\n\t\t\tthis.context = selector.context;\r\n\t\t}\r\n\r\n\t\treturn jQuery.makeArray( selector, this );\r\n\t};\r\n\r\n// Give the init function the jQuery prototype for later instantiation\r\ninit.prototype = jQuery.fn;\r\n\r\n// Initialize central reference\r\nrootjQuery = jQuery( document );\r\n\r\n\r\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\r\n\r\n\t// methods guaranteed to produce a unique set when starting from a unique set\r\n\tguaranteedUnique = {\r\n\t\tchildren: true,\r\n\t\tcontents: true,\r\n\t\tnext: true,\r\n\t\tprev: true\r\n\t};\r\n\r\njQuery.fn.extend( {\r\n\thas: function( target ) {\r\n\t\tvar i,\r\n\t\t\ttargets = jQuery( target, this ),\r\n\t\t\tlen = targets.length;\r\n\r\n\t\treturn this.filter( function() {\r\n\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tclosest: function( selectors, context ) {\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tmatched = [],\r\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\r\n\t\t\t\tjQuery( selectors, context || this.context ) :\r\n\t\t\t\t0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\r\n\r\n\t\t\t\t// Always skip document fragments\r\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\r\n\t\t\t\t\tpos.index( cur ) > -1 :\r\n\r\n\t\t\t\t\t// Don't pass non-elements to Sizzle\r\n\t\t\t\t\tcur.nodeType === 1 &&\r\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\r\n\r\n\t\t\t\t\tmatched.push( cur );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\r\n\t},\r\n\r\n\t// Determine the position of an element within\r\n\t// the matched set of elements\r\n\tindex: function( elem ) {\r\n\r\n\t\t// No argument, return index in parent\r\n\t\tif ( !elem ) {\r\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\r\n\t\t}\r\n\r\n\t\t// index in selector\r\n\t\tif ( typeof elem === \"string\" ) {\r\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\r\n\t\t}\r\n\r\n\t\t// Locate the position of the desired element\r\n\t\treturn jQuery.inArray(\r\n\r\n\t\t\t// If it receives a jQuery object, the first element is used\r\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\r\n\t},\r\n\r\n\tadd: function( selector, context ) {\r\n\t\treturn this.pushStack(\r\n\t\t\tjQuery.uniqueSort(\r\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\r\n\t\t\t)\r\n\t\t);\r\n\t},\r\n\r\n\taddBack: function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t}\r\n} );\r\n\r\nfunction sibling( cur, dir ) {\r\n\tdo {\r\n\t\tcur = cur[ dir ];\r\n\t} while ( cur && cur.nodeType !== 1 );\r\n\r\n\treturn cur;\r\n}\r\n\r\njQuery.each( {\r\n\tparent: function( elem ) {\r\n\t\tvar parent = elem.parentNode;\r\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\r\n\t},\r\n\tparents: function( elem ) {\r\n\t\treturn dir( elem, \"parentNode\" );\r\n\t},\r\n\tparentsUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"parentNode\", until );\r\n\t},\r\n\tnext: function( elem ) {\r\n\t\treturn sibling( elem, \"nextSibling\" );\r\n\t},\r\n\tprev: function( elem ) {\r\n\t\treturn sibling( elem, \"previousSibling\" );\r\n\t},\r\n\tnextAll: function( elem ) {\r\n\t\treturn dir( elem, \"nextSibling\" );\r\n\t},\r\n\tprevAll: function( elem ) {\r\n\t\treturn dir( elem, \"previousSibling\" );\r\n\t},\r\n\tnextUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"nextSibling\", until );\r\n\t},\r\n\tprevUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"previousSibling\", until );\r\n\t},\r\n\tsiblings: function( elem ) {\r\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\r\n\t},\r\n\tchildren: function( elem ) {\r\n\t\treturn siblings( elem.firstChild );\r\n\t},\r\n\tcontents: function( elem ) {\r\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\r\n\t\t\telem.contentDocument || elem.contentWindow.document :\r\n\t\t\tjQuery.merge( [], elem.childNodes );\r\n\t}\r\n}, function( name, fn ) {\r\n\tjQuery.fn[ name ] = function( until, selector ) {\r\n\t\tvar ret = jQuery.map( this, fn, until );\r\n\r\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\r\n\t\t\tselector = until;\r\n\t\t}\r\n\r\n\t\tif ( selector && typeof selector === \"string\" ) {\r\n\t\t\tret = jQuery.filter( selector, ret );\r\n\t\t}\r\n\r\n\t\tif ( this.length > 1 ) {\r\n\r\n\t\t\t// Remove duplicates\r\n\t\t\tif ( !guaranteedUnique[ name ] ) {\r\n\t\t\t\tret = jQuery.uniqueSort( ret );\r\n\t\t\t}\r\n\r\n\t\t\t// Reverse order for parents* and prev-derivatives\r\n\t\t\tif ( rparentsprev.test( name ) ) {\r\n\t\t\t\tret = ret.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n} );\r\nvar rnotwhite = ( /\\S+/g );\r\n\r\n\r\n\r\n// Convert String-formatted options into Object-formatted ones\r\nfunction createOptions( options ) {\r\n\tvar object = {};\r\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\r\n\t\tobject[ flag ] = true;\r\n\t} );\r\n\treturn object;\r\n}\r\n\r\n/*\r\n * Create a callback list using the following parameters:\r\n *\r\n *\toptions: an optional list of space-separated options that will change how\r\n *\t\t\tthe callback list behaves or a more traditional option object\r\n *\r\n * By default a callback list will act like an event callback list and can be\r\n * \"fired\" multiple times.\r\n *\r\n * Possible options:\r\n *\r\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\r\n *\r\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\r\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\r\n *\t\t\t\t\tvalues (like a Deferred)\r\n *\r\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\r\n *\r\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\r\n *\r\n */\r\njQuery.Callbacks = function( options ) {\r\n\r\n\t// Convert options from String-formatted to Object-formatted if needed\r\n\t// (we check in cache first)\r\n\toptions = typeof options === \"string\" ?\r\n\t\tcreateOptions( options ) :\r\n\t\tjQuery.extend( {}, options );\r\n\r\n\tvar // Flag to know if list is currently firing\r\n\t\tfiring,\r\n\r\n\t\t// Last fire value for non-forgettable lists\r\n\t\tmemory,\r\n\r\n\t\t// Flag to know if list was already fired\r\n\t\tfired,\r\n\r\n\t\t// Flag to prevent firing\r\n\t\tlocked,\r\n\r\n\t\t// Actual callback list\r\n\t\tlist = [],\r\n\r\n\t\t// Queue of execution data for repeatable lists\r\n\t\tqueue = [],\r\n\r\n\t\t// Index of currently firing callback (modified by add/remove as needed)\r\n\t\tfiringIndex = -1,\r\n\r\n\t\t// Fire callbacks\r\n\t\tfire = function() {\r\n\r\n\t\t\t// Enforce single-firing\r\n\t\t\tlocked = options.once;\r\n\r\n\t\t\t// Execute callbacks for all pending executions,\r\n\t\t\t// respecting firingIndex overrides and runtime changes\r\n\t\t\tfired = firing = true;\r\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\r\n\t\t\t\tmemory = queue.shift();\r\n\t\t\t\twhile ( ++firingIndex < list.length ) {\r\n\r\n\t\t\t\t\t// Run callback and check for early termination\r\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\r\n\t\t\t\t\t\toptions.stopOnFalse ) {\r\n\r\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\r\n\t\t\t\t\t\tfiringIndex = list.length;\r\n\t\t\t\t\t\tmemory = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Forget the data if we're done with it\r\n\t\t\tif ( !options.memory ) {\r\n\t\t\t\tmemory = false;\r\n\t\t\t}\r\n\r\n\t\t\tfiring = false;\r\n\r\n\t\t\t// Clean up if we're done firing for good\r\n\t\t\tif ( locked ) {\r\n\r\n\t\t\t\t// Keep an empty list if we have data for future add calls\r\n\t\t\t\tif ( memory ) {\r\n\t\t\t\t\tlist = [];\r\n\r\n\t\t\t\t// Otherwise, this object is spent\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Actual Callbacks object\r\n\t\tself = {\r\n\r\n\t\t\t// Add a callback or a collection of callbacks to the list\r\n\t\t\tadd: function() {\r\n\t\t\t\tif ( list ) {\r\n\r\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\r\n\t\t\t\t\tif ( memory && !firing ) {\r\n\t\t\t\t\t\tfiringIndex = list.length - 1;\r\n\t\t\t\t\t\tqueue.push( memory );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t( function add( args ) {\r\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\r\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\r\n\t\t\t\t\t\t\t\t\tlist.push( arg );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\r\n\r\n\t\t\t\t\t\t\t\t// Inspect recursively\r\n\t\t\t\t\t\t\t\tadd( arg );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t} )( arguments );\r\n\r\n\t\t\t\t\tif ( memory && !firing ) {\r\n\t\t\t\t\t\tfire();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Remove a callback from the list\r\n\t\t\tremove: function() {\r\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\r\n\t\t\t\t\tvar index;\r\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\r\n\t\t\t\t\t\tlist.splice( index, 1 );\r\n\r\n\t\t\t\t\t\t// Handle firing indexes\r\n\t\t\t\t\t\tif ( index <= firingIndex ) {\r\n\t\t\t\t\t\t\tfiringIndex--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Check if a given callback is in the list.\r\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\r\n\t\t\thas: function( fn ) {\r\n\t\t\t\treturn fn ?\r\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\r\n\t\t\t\t\tlist.length > 0;\r\n\t\t\t},\r\n\r\n\t\t\t// Remove all callbacks from the list\r\n\t\t\tempty: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\tlist = [];\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Disable .fire and .add\r\n\t\t\t// Abort any current/pending executions\r\n\t\t\t// Clear all callbacks and values\r\n\t\t\tdisable: function() {\r\n\t\t\t\tlocked = queue = [];\r\n\t\t\t\tlist = memory = \"\";\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tdisabled: function() {\r\n\t\t\t\treturn !list;\r\n\t\t\t},\r\n\r\n\t\t\t// Disable .fire\r\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\r\n\t\t\t// Abort any pending executions\r\n\t\t\tlock: function() {\r\n\t\t\t\tlocked = true;\r\n\t\t\t\tif ( !memory ) {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tlocked: function() {\r\n\t\t\t\treturn !!locked;\r\n\t\t\t},\r\n\r\n\t\t\t// Call all callbacks with the given context and arguments\r\n\t\t\tfireWith: function( context, args ) {\r\n\t\t\t\tif ( !locked ) {\r\n\t\t\t\t\targs = args || [];\r\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\r\n\t\t\t\t\tqueue.push( args );\r\n\t\t\t\t\tif ( !firing ) {\r\n\t\t\t\t\t\tfire();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Call all the callbacks with the given arguments\r\n\t\t\tfire: function() {\r\n\t\t\t\tself.fireWith( this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// To know if the callbacks have already been called at least once\r\n\t\t\tfired: function() {\r\n\t\t\t\treturn !!fired;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn self;\r\n};\r\n\r\n\r\njQuery.extend( {\r\n\r\n\tDeferred: function( func ) {\r\n\t\tvar tuples = [\r\n\r\n\t\t\t\t// action, add listener, listener list, final state\r\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\r\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\r\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\r\n\t\t\t],\r\n\t\t\tstate = \"pending\",\r\n\t\t\tpromise = {\r\n\t\t\t\tstate: function() {\r\n\t\t\t\t\treturn state;\r\n\t\t\t\t},\r\n\t\t\t\talways: function() {\r\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\r\n\t\t\t\t\tvar fns = arguments;\r\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\r\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\r\n\r\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\r\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\r\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\r\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\r\n\t\t\t\t\t\t\t\t\treturned.promise()\r\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\r\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\r\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\r\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\r\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t\tfns = null;\r\n\t\t\t\t\t} ).promise();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Get a promise for this deferred\r\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\r\n\t\t\t\tpromise: function( obj ) {\r\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdeferred = {};\r\n\r\n\t\t// Keep pipe for back-compat\r\n\t\tpromise.pipe = promise.then;\r\n\r\n\t\t// Add list-specific methods\r\n\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\tvar list = tuple[ 2 ],\r\n\t\t\t\tstateString = tuple[ 3 ];\r\n\r\n\t\t\t// promise[ done | fail | progress ] = list.add\r\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\r\n\r\n\t\t\t// Handle state\r\n\t\t\tif ( stateString ) {\r\n\t\t\t\tlist.add( function() {\r\n\r\n\t\t\t\t\t// state = [ resolved | rejected ]\r\n\t\t\t\t\tstate = stateString;\r\n\r\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\r\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\r\n\t\t\t}\r\n\r\n\t\t\t// deferred[ resolve | reject | notify ]\r\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\r\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t};\r\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\r\n\t\t} );\r\n\r\n\t\t// Make the deferred a promise\r\n\t\tpromise.promise( deferred );\r\n\r\n\t\t// Call given func if any\r\n\t\tif ( func ) {\r\n\t\t\tfunc.call( deferred, deferred );\r\n\t\t}\r\n\r\n\t\t// All done!\r\n\t\treturn deferred;\r\n\t},\r\n\r\n\t// Deferred helper\r\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\r\n\t\tvar i = 0,\r\n\t\t\tresolveValues = slice.call( arguments ),\r\n\t\t\tlength = resolveValues.length,\r\n\r\n\t\t\t// the count of uncompleted subordinates\r\n\t\t\tremaining = length !== 1 ||\r\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\r\n\r\n\t\t\t// the master Deferred.\r\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\r\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\r\n\r\n\t\t\t// Update function for both resolve and progress values\r\n\t\t\tupdateFunc = function( i, contexts, values ) {\r\n\t\t\t\treturn function( value ) {\r\n\t\t\t\t\tcontexts[ i ] = this;\r\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\r\n\t\t\t\t\tif ( values === progressValues ) {\r\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\r\n\r\n\t\t\t\t\t} else if ( !( --remaining ) ) {\r\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tprogressValues, progressContexts, resolveContexts;\r\n\r\n\t\t// add listeners to Deferred subordinates; treat others as resolved\r\n\t\tif ( length > 1 ) {\r\n\t\t\tprogressValues = new Array( length );\r\n\t\t\tprogressContexts = new Array( length );\r\n\t\t\tresolveContexts = new Array( length );\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\r\n\t\t\t\t\tresolveValues[ i ].promise()\r\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\r\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\r\n\t\t\t\t\t\t.fail( deferred.reject );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t--remaining;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if we're not waiting on anything, resolve the master\r\n\t\tif ( !remaining ) {\r\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\r\n\t\t}\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n} );\r\n\r\n\r\n// The deferred used on DOM ready\r\nvar readyList;\r\n\r\njQuery.fn.ready = function( fn ) {\r\n\r\n\t// Add the callback\r\n\tjQuery.ready.promise().done( fn );\r\n\r\n\treturn this;\r\n};\r\n\r\njQuery.extend( {\r\n\r\n\t// Is the DOM ready to be used? Set to true once it occurs.\r\n\tisReady: false,\r\n\r\n\t// A counter to track how many items to wait for before\r\n\t// the ready event fires. See #6781\r\n\treadyWait: 1,\r\n\r\n\t// Hold (or release) the ready event\r\n\tholdReady: function( hold ) {\r\n\t\tif ( hold ) {\r\n\t\t\tjQuery.readyWait++;\r\n\t\t} else {\r\n\t\t\tjQuery.ready( true );\r\n\t\t}\r\n\t},\r\n\r\n\t// Handle when the DOM is ready\r\n\tready: function( wait ) {\r\n\r\n\t\t// Abort if there are pending holds or we're already ready\r\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Remember that the DOM is ready\r\n\t\tjQuery.isReady = true;\r\n\r\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\r\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If there are functions bound, to execute\r\n\t\treadyList.resolveWith( document, [ jQuery ] );\r\n\r\n\t\t// Trigger any bound ready events\r\n\t\tif ( jQuery.fn.triggerHandler ) {\r\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\r\n\t\t\tjQuery( document ).off( \"ready\" );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n/**\r\n * Clean-up method for dom ready events\r\n */\r\nfunction detach() {\r\n\tif ( document.addEventListener ) {\r\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\r\n\t\twindow.removeEventListener( \"load\", completed );\r\n\r\n\t} else {\r\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\r\n\t\twindow.detachEvent( \"onload\", completed );\r\n\t}\r\n}\r\n\r\n/**\r\n * The ready event handler and self cleanup method\r\n */\r\nfunction completed() {\r\n\r\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\r\n\tif ( document.addEventListener ||\r\n\t\twindow.event.type === \"load\" ||\r\n\t\tdocument.readyState === \"complete\" ) {\r\n\r\n\t\tdetach();\r\n\t\tjQuery.ready();\r\n\t}\r\n}\r\n\r\njQuery.ready.promise = function( obj ) {\r\n\tif ( !readyList ) {\r\n\r\n\t\treadyList = jQuery.Deferred();\r\n\r\n\t\t// Catch cases where $(document).ready() is called\r\n\t\t// after the browser event has already occurred.\r\n\t\t// Support: IE6-10\r\n\t\t// Older IE sometimes signals \"interactive\" too soon\r\n\t\tif ( document.readyState === \"complete\" ||\r\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\r\n\r\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\r\n\t\t\twindow.setTimeout( jQuery.ready );\r\n\r\n\t\t// Standards-based browsers support DOMContentLoaded\r\n\t\t} else if ( document.addEventListener ) {\r\n\r\n\t\t\t// Use the handy event callback\r\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.addEventListener( \"load\", completed );\r\n\r\n\t\t// If IE event model is used\r\n\t\t} else {\r\n\r\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\r\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.attachEvent( \"onload\", completed );\r\n\r\n\t\t\t// If IE and not a frame\r\n\t\t\t// continually check to see if the document is ready\r\n\t\t\tvar top = false;\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\r\n\t\t\t} catch ( e ) {}\r\n\r\n\t\t\tif ( top && top.doScroll ) {\r\n\t\t\t\t( function doScrollCheck() {\r\n\t\t\t\t\tif ( !jQuery.isReady ) {\r\n\r\n\t\t\t\t\t\ttry {\r\n\r\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\r\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\r\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\r\n\t\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// detach all dom ready events\r\n\t\t\t\t\t\tdetach();\r\n\r\n\t\t\t\t\t\t// and execute any waiting functions\r\n\t\t\t\t\t\tjQuery.ready();\r\n\t\t\t\t\t}\r\n\t\t\t\t} )();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn readyList.promise( obj );\r\n};\r\n\r\n// Kick off the DOM ready check even if the user does not\r\njQuery.ready.promise();\r\n\r\n\r\n\r\n\r\n// Support: IE<9\r\n// Iteration over object's inherited properties before its own\r\nvar i;\r\nfor ( i in jQuery( support ) ) {\r\n\tbreak;\r\n}\r\nsupport.ownFirst = i === \"0\";\r\n\r\n// Note: most support tests are defined in their respective modules.\r\n// false until the test is run\r\nsupport.inlineBlockNeedsLayout = false;\r\n\r\n// Execute ASAP in case we need to set body.style.zoom\r\njQuery( function() {\r\n\r\n\t// Minified: var a,b,c,d\r\n\tvar val, div, body, container;\r\n\r\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\tif ( !body || !body.style ) {\r\n\r\n\t\t// Return for frameset docs that don't have a body\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tcontainer = document.createElement( \"div\" );\r\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\tbody.appendChild( container ).appendChild( div );\r\n\r\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\r\n\r\n\t\t// Support: IE<8\r\n\t\t// Check if natively block-level elements act like inline-block\r\n\t\t// elements when setting their display to 'inline' and giving\r\n\t\t// them layout\r\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\r\n\r\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\r\n\t\tif ( val ) {\r\n\r\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\r\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\r\n\t\t\t// Support: IE<8\r\n\t\t\tbody.style.zoom = 1;\r\n\t\t}\r\n\t}\r\n\r\n\tbody.removeChild( container );\r\n} );\r\n\r\n\r\n( function() {\r\n\tvar div = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9\r\n\tsupport.deleteExpando = true;\r\n\ttry {\r\n\t\tdelete div.test;\r\n\t} catch ( e ) {\r\n\t\tsupport.deleteExpando = false;\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n} )();\r\nvar acceptData = function( elem ) {\r\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\r\n\t\tnodeType = +elem.nodeType || 1;\r\n\r\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\r\n\treturn nodeType !== 1 && nodeType !== 9 ?\r\n\t\tfalse :\r\n\r\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\r\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\r\n};\r\n\r\n\r\n\r\n\r\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\r\n\trmultiDash = /([A-Z])/g;\r\n\r\nfunction dataAttr( elem, key, data ) {\r\n\r\n\t// If nothing was found internally, try to fetch any\r\n\t// data from the HTML5 data-* attribute\r\n\tif ( data === undefined && elem.nodeType === 1 ) {\r\n\r\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\r\n\r\n\t\tdata = elem.getAttribute( name );\r\n\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\ttry {\r\n\t\t\t\tdata = data === \"true\" ? true :\r\n\t\t\t\t\tdata === \"false\" ? false :\r\n\t\t\t\t\tdata === \"null\" ? null :\r\n\r\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\r\n\t\t\t\t\t+data + \"\" === data ? +data :\r\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\r\n\t\t\t\t\tdata;\r\n\t\t\t} catch ( e ) {}\r\n\r\n\t\t\t// Make sure we set the data so it isn't changed later\r\n\t\t\tjQuery.data( elem, key, data );\r\n\r\n\t\t} else {\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\n// checks a cache object for emptiness\r\nfunction isEmptyDataObject( obj ) {\r\n\tvar name;\r\n\tfor ( name in obj ) {\r\n\r\n\t\t// if the public data object is empty, the private is still empty\r\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( name !== \"toJSON\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\r\n\tif ( !acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar ret, thisCache,\r\n\t\tinternalKey = jQuery.expando,\r\n\r\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\r\n\t\t// can't GC object references properly across the DOM-JS boundary\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\r\n\t\t// attached directly to the object so GC can occur automatically\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\r\n\t\t// Only defining an ID for JS objects if its cache already exists allows\r\n\t\t// the code to shortcut on the same path as a DOM node with no cache\r\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\r\n\r\n\t// Avoid doing any more work than we need to when trying to get data on an\r\n\t// object that has no data at all\r\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\r\n\t\tdata === undefined && typeof name === \"string\" ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( !id ) {\r\n\r\n\t\t// Only DOM nodes need a new unique ID for each element since their data\r\n\t\t// ends up in the global cache\r\n\t\tif ( isNode ) {\r\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\r\n\t\t} else {\r\n\t\t\tid = internalKey;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !cache[ id ] ) {\r\n\r\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\r\n\t\t// is serialized using JSON.stringify\r\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\r\n\t}\r\n\r\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\r\n\t// shallow copied over onto the existing cache\r\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\r\n\t\tif ( pvt ) {\r\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\r\n\t\t} else {\r\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\r\n\t\t}\r\n\t}\r\n\r\n\tthisCache = cache[ id ];\r\n\r\n\t// jQuery data() is stored in a separate object inside the object's internal data\r\n\t// cache in order to avoid key collisions between internal data and user-defined\r\n\t// data.\r\n\tif ( !pvt ) {\r\n\t\tif ( !thisCache.data ) {\r\n\t\t\tthisCache.data = {};\r\n\t\t}\r\n\r\n\t\tthisCache = thisCache.data;\r\n\t}\r\n\r\n\tif ( data !== undefined ) {\r\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\r\n\t}\r\n\r\n\t// Check for both converted-to-camel and non-converted data property names\r\n\t// If a data property was specified\r\n\tif ( typeof name === \"string\" ) {\r\n\r\n\t\t// First Try to find as-is property data\r\n\t\tret = thisCache[ name ];\r\n\r\n\t\t// Test for null|undefined property data\r\n\t\tif ( ret == null ) {\r\n\r\n\t\t\t// Try to find the camelCased property\r\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\r\n\t\t}\r\n\t} else {\r\n\t\tret = thisCache;\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\nfunction internalRemoveData( elem, name, pvt ) {\r\n\tif ( !acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar thisCache, i,\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// See jQuery.data for more information\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\r\n\r\n\t// If there is already no cache entry for this object, there is no\r\n\t// purpose in continuing\r\n\tif ( !cache[ id ] ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( name ) {\r\n\r\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\r\n\r\n\t\tif ( thisCache ) {\r\n\r\n\t\t\t// Support array or space separated string names for data keys\r\n\t\t\tif ( !jQuery.isArray( name ) ) {\r\n\r\n\t\t\t\t// try the string as a key before any manipulation\r\n\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\tname = [ name ];\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\r\n\t\t\t\t\tname = jQuery.camelCase( name );\r\n\t\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\t\tname = [ name ];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tname = name.split( \" \" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// If \"name\" is an array of keys...\r\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\r\n\t\t\t\t// keys will be converted to camelCase.\r\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\r\n\t\t\t\t// both plain key and camelCase key. #12786\r\n\t\t\t\t// This will only penalize the array argument path.\r\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\r\n\t\t\t}\r\n\r\n\t\t\ti = name.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tdelete thisCache[ name[ i ] ];\r\n\t\t\t}\r\n\r\n\t\t\t// If there is no data left in the cache, we want to continue\r\n\t\t\t// and let the cache object itself get destroyed\r\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// See jQuery.data for more information\r\n\tif ( !pvt ) {\r\n\t\tdelete cache[ id ].data;\r\n\r\n\t\t// Don't destroy the parent cache unless the internal data object\r\n\t\t// had been the only thing left in it\r\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// Destroy the cache\r\n\tif ( isNode ) {\r\n\t\tjQuery.cleanData( [ elem ], true );\r\n\r\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\r\n\t/* jshint eqeqeq: false */\r\n\t} else if ( support.deleteExpando || cache != cache.window ) {\r\n\t\t/* jshint eqeqeq: true */\r\n\t\tdelete cache[ id ];\r\n\r\n\t// When all else fails, undefined\r\n\t} else {\r\n\t\tcache[ id ] = undefined;\r\n\t}\r\n}\r\n\r\njQuery.extend( {\r\n\tcache: {},\r\n\r\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\r\n\t// throw uncatchable exceptions if you attempt to set expando properties\r\n\tnoData: {\r\n\t\t\"applet \": true,\r\n\t\t\"embed \": true,\r\n\r\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\r\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\r\n\t},\r\n\r\n\thasData: function( elem ) {\r\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\r\n\t\treturn !!elem && !isEmptyDataObject( elem );\r\n\t},\r\n\r\n\tdata: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data );\r\n\t},\r\n\r\n\tremoveData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name );\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t_data: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data, true );\r\n\t},\r\n\r\n\t_removeData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name, true );\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\tdata: function( key, value ) {\r\n\t\tvar i, name, data,\r\n\t\t\telem = this[ 0 ],\r\n\t\t\tattrs = elem && elem.attributes;\r\n\r\n\t\t// Special expections of .data basically thwart jQuery.access,\r\n\t\t// so implement the relevant behavior ourselves\r\n\r\n\t\t// Gets all values\r\n\t\tif ( key === undefined ) {\r\n\t\t\tif ( this.length ) {\r\n\t\t\t\tdata = jQuery.data( elem );\r\n\r\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\r\n\t\t\t\t\ti = attrs.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\r\n\t\t\t\t\t\t// Support: IE11+\r\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\r\n\t\t\t\t\t\tif ( attrs[ i ] ) {\r\n\t\t\t\t\t\t\tname = attrs[ i ].name;\r\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\r\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\r\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\t// Sets multiple values\r\n\t\tif ( typeof key === \"object\" ) {\r\n\t\t\treturn this.each( function() {\r\n\t\t\t\tjQuery.data( this, key );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\treturn arguments.length > 1 ?\r\n\r\n\t\t\t// Sets one value\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tjQuery.data( this, key, value );\r\n\t\t\t} ) :\r\n\r\n\t\t\t// Gets one value\r\n\t\t\t// Try to fetch any internally stored data first\r\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\r\n\t},\r\n\r\n\tremoveData: function( key ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.removeData( this, key );\r\n\t\t} );\r\n\t}\r\n} );\r\n\r\n\r\njQuery.extend( {\r\n\tqueue: function( elem, type, data ) {\r\n\t\tvar queue;\r\n\r\n\t\tif ( elem ) {\r\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\r\n\t\t\tqueue = jQuery._data( elem, type );\r\n\r\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\r\n\t\t\tif ( data ) {\r\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\r\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tqueue.push( data );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn queue || [];\r\n\t\t}\r\n\t},\r\n\r\n\tdequeue: function( elem, type ) {\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\tvar queue = jQuery.queue( elem, type ),\r\n\t\t\tstartLength = queue.length,\r\n\t\t\tfn = queue.shift(),\r\n\t\t\thooks = jQuery._queueHooks( elem, type ),\r\n\t\t\tnext = function() {\r\n\t\t\t\tjQuery.dequeue( elem, type );\r\n\t\t\t};\r\n\r\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\r\n\t\tif ( fn === \"inprogress\" ) {\r\n\t\t\tfn = queue.shift();\r\n\t\t\tstartLength--;\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\r\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\r\n\t\t\t// automatically dequeued\r\n\t\t\tif ( type === \"fx\" ) {\r\n\t\t\t\tqueue.unshift( \"inprogress\" );\r\n\t\t\t}\r\n\r\n\t\t\t// clear up the last queue stop function\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tfn.call( elem, next, hooks );\r\n\t\t}\r\n\r\n\t\tif ( !startLength && hooks ) {\r\n\t\t\thooks.empty.fire();\r\n\t\t}\r\n\t},\r\n\r\n\t// not intended for public consumption - generates a queueHooks object,\r\n\t// or returns the current one\r\n\t_queueHooks: function( elem, type ) {\r\n\t\tvar key = type + \"queueHooks\";\r\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\r\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\r\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\r\n\t\t\t\tjQuery._removeData( elem, key );\r\n\t\t\t} )\r\n\t\t} );\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\tqueue: function( type, data ) {\r\n\t\tvar setter = 2;\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tdata = type;\r\n\t\t\ttype = \"fx\";\r\n\t\t\tsetter--;\r\n\t\t}\r\n\r\n\t\tif ( arguments.length < setter ) {\r\n\t\t\treturn jQuery.queue( this[ 0 ], type );\r\n\t\t}\r\n\r\n\t\treturn data === undefined ?\r\n\t\t\tthis :\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\r\n\r\n\t\t\t\t// ensure a hooks for this queue\r\n\t\t\t\tjQuery._queueHooks( this, type );\r\n\r\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\r\n\t\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t},\r\n\tdequeue: function( type ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.dequeue( this, type );\r\n\t\t} );\r\n\t},\r\n\tclearQueue: function( type ) {\r\n\t\treturn this.queue( type || \"fx\", [] );\r\n\t},\r\n\r\n\t// Get a promise resolved when queues of a certain type\r\n\t// are emptied (fx is the type by default)\r\n\tpromise: function( type, obj ) {\r\n\t\tvar tmp,\r\n\t\t\tcount = 1,\r\n\t\t\tdefer = jQuery.Deferred(),\r\n\t\t\telements = this,\r\n\t\t\ti = this.length,\r\n\t\t\tresolve = function() {\r\n\t\t\t\tif ( !( --count ) ) {\r\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tobj = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\twhile ( i-- ) {\r\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\r\n\t\t\tif ( tmp && tmp.empty ) {\r\n\t\t\t\tcount++;\r\n\t\t\t\ttmp.empty.add( resolve );\r\n\t\t\t}\r\n\t\t}\r\n\t\tresolve();\r\n\t\treturn defer.promise( obj );\r\n\t}\r\n} );\r\n\r\n\r\n( function() {\r\n\tvar shrinkWrapBlocksVal;\r\n\r\n\tsupport.shrinkWrapBlocks = function() {\r\n\t\tif ( shrinkWrapBlocksVal != null ) {\r\n\t\t\treturn shrinkWrapBlocksVal;\r\n\t\t}\r\n\r\n\t\t// Will be changed later if needed.\r\n\t\tshrinkWrapBlocksVal = false;\r\n\r\n\t\t// Minified: var b,c,d\r\n\t\tvar div, body, container;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\t// Support: IE6\r\n\t\t// Check if elements with layout shrink-wrap their children\r\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\r\n\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border\r\n\t\t\tdiv.style.cssText =\r\n\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\r\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\r\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\r\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\r\n\t\treturn shrinkWrapBlocksVal;\r\n\t};\r\n\r\n} )();\r\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\r\n\r\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\r\n\r\n\r\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\r\n\r\nvar isHidden = function( elem, el ) {\r\n\r\n\t\t// isHidden might be called from jQuery#filter function;\r\n\t\t// in that case, element will be second argument\r\n\t\telem = el || elem;\r\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\r\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\r\n\t};\r\n\r\n\r\n\r\nfunction adjustCSS( elem, prop, valueParts, tween ) {\r\n\tvar adjusted,\r\n\t\tscale = 1,\r\n\t\tmaxIterations = 20,\r\n\t\tcurrentValue = tween ?\r\n\t\t\tfunction() { return tween.cur(); } :\r\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\r\n\t\tinitial = currentValue(),\r\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\r\n\r\n\t\t// Starting value computation is required for potential unit mismatches\r\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\r\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\r\n\r\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\r\n\r\n\t\t// Trust units reported by jQuery.css\r\n\t\tunit = unit || initialInUnit[ 3 ];\r\n\r\n\t\t// Make sure we update the tween properties later on\r\n\t\tvalueParts = valueParts || [];\r\n\r\n\t\t// Iteratively approximate from a nonzero starting point\r\n\t\tinitialInUnit = +initial || 1;\r\n\r\n\t\tdo {\r\n\r\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\r\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\r\n\t\t\tscale = scale || \".5\";\r\n\r\n\t\t\t// Adjust and apply\r\n\t\t\tinitialInUnit = initialInUnit / scale;\r\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\r\n\r\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\r\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\r\n\t\t} while (\r\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\r\n\t\t);\r\n\t}\r\n\r\n\tif ( valueParts ) {\r\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\r\n\r\n\t\t// Apply relative offset (+=/-=) if specified\r\n\t\tadjusted = valueParts[ 1 ] ?\r\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\r\n\t\t\t+valueParts[ 2 ];\r\n\t\tif ( tween ) {\r\n\t\t\ttween.unit = unit;\r\n\t\t\ttween.start = initialInUnit;\r\n\t\t\ttween.end = adjusted;\r\n\t\t}\r\n\t}\r\n\treturn adjusted;\r\n}\r\n\r\n\r\n// Multifunctional method to get and set values of a collection\r\n// The value/s can optionally be executed if it's a function\r\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\r\n\tvar i = 0,\r\n\t\tlength = elems.length,\r\n\t\tbulk = key == null;\r\n\r\n\t// Sets many values\r\n\tif ( jQuery.type( key ) === \"object\" ) {\r\n\t\tchainable = true;\r\n\t\tfor ( i in key ) {\r\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\r\n\t\t}\r\n\r\n\t// Sets one value\r\n\t} else if ( value !== undefined ) {\r\n\t\tchainable = true;\r\n\r\n\t\tif ( !jQuery.isFunction( value ) ) {\r\n\t\t\traw = true;\r\n\t\t}\r\n\r\n\t\tif ( bulk ) {\r\n\r\n\t\t\t// Bulk operations run against the entire set\r\n\t\t\tif ( raw ) {\r\n\t\t\t\tfn.call( elems, value );\r\n\t\t\t\tfn = null;\r\n\r\n\t\t\t// ...except when executing function values\r\n\t\t\t} else {\r\n\t\t\t\tbulk = fn;\r\n\t\t\t\tfn = function( elem, key, value ) {\r\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tfn(\r\n\t\t\t\t\telems[ i ],\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn chainable ?\r\n\t\telems :\r\n\r\n\t\t// Gets\r\n\t\tbulk ?\r\n\t\t\tfn.call( elems ) :\r\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\r\n};\r\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\r\n\r\nvar rtagName = ( /<([\\w:-]+)/ );\r\n\r\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\r\n\r\nvar rleadingWhitespace = ( /^\\s+/ );\r\n\r\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\r\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\r\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\r\n\r\n\r\n\r\nfunction createSafeFragment( document ) {\r\n\tvar list = nodeNames.split( \"|\" ),\r\n\t\tsafeFrag = document.createDocumentFragment();\r\n\r\n\tif ( safeFrag.createElement ) {\r\n\t\twhile ( list.length ) {\r\n\t\t\tsafeFrag.createElement(\r\n\t\t\t\tlist.pop()\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\treturn safeFrag;\r\n}\r\n\r\n\r\n( function() {\r\n\tvar div = document.createElement( \"div\" ),\r\n\t\tfragment = document.createDocumentFragment(),\r\n\t\tinput = document.createElement( \"input\" );\r\n\r\n\t// Setup\r\n\tdiv.innerHTML = \"
    a\";\r\n\r\n\t// IE strips leading whitespace when .innerHTML is used\r\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\r\n\r\n\t// Make sure that tbody elements aren't automatically inserted\r\n\t// IE will insert them into empty tables\r\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\r\n\r\n\t// Make sure that link elements get serialized correctly by innerHTML\r\n\t// This requires a wrapper element in IE\r\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\r\n\r\n\t// Makes sure cloning an html5 element does not cause problems\r\n\t// Where outerHTML is undefined, this still works\r\n\tsupport.html5Clone =\r\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav>\";\r\n\r\n\t// Check if a disconnected checkbox will retain its checked\r\n\t// value of true after appended to the DOM (IE6/7)\r\n\tinput.type = \"checkbox\";\r\n\tinput.checked = true;\r\n\tfragment.appendChild( input );\r\n\tsupport.appendChecked = input.checked;\r\n\r\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\r\n\t// Support: IE6-IE11+\r\n\tdiv.innerHTML = \"\";\r\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\r\n\r\n\t// #11217 - WebKit loses check when the name is after the checked attribute\r\n\tfragment.appendChild( div );\r\n\r\n\t// Support: Windows Web Apps (WWA)\r\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\r\n\tinput = document.createElement( \"input\" );\r\n\tinput.setAttribute( \"type\", \"radio\" );\r\n\tinput.setAttribute( \"checked\", \"checked\" );\r\n\tinput.setAttribute( \"name\", \"t\" );\r\n\r\n\tdiv.appendChild( input );\r\n\r\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\r\n\t// old WebKit doesn't clone checked state correctly in fragments\r\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\r\n\r\n\t// Support: IE<9\r\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\r\n\tsupport.noCloneEvent = !!div.addEventListener;\r\n\r\n\t// Support: IE<9\r\n\t// Since attributes and properties are the same in IE,\r\n\t// cleanData must set properties to undefined rather than use removeAttribute\r\n\tdiv[ jQuery.expando ] = 1;\r\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\r\n} )();\r\n\r\n\r\n// We have to close these tags to support XHTML (#13200)\r\nvar wrapMap = {\r\n\toption: [ 1, \"\" ],\r\n\tlegend: [ 1, \"
    \", \"
    \" ],\r\n\tarea: [ 1, \"\", \"\" ],\r\n\r\n\t// Support: IE8\r\n\tparam: [ 1, \"\", \"\" ],\r\n\tthead: [ 1, \"\", \"
    \" ],\r\n\ttr: [ 2, \"\", \"
    \" ],\r\n\tcol: [ 2, \"\", \"
    \" ],\r\n\ttd: [ 3, \"\", \"
    \" ],\r\n\r\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\r\n\t// unless wrapped in a div with non-breaking characters in front of it.\r\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X
    \", \"
    \" ]\r\n};\r\n\r\n// Support: IE8-IE9\r\nwrapMap.optgroup = wrapMap.option;\r\n\r\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\r\nwrapMap.th = wrapMap.td;\r\n\r\n\r\nfunction getAll( context, tag ) {\r\n\tvar elems, elem,\r\n\t\ti = 0,\r\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\r\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\r\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\r\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\r\n\t\t\t\tundefined;\r\n\r\n\tif ( !found ) {\r\n\t\tfor ( found = [], elems = context.childNodes || context;\r\n\t\t\t( elem = elems[ i ] ) != null;\r\n\t\t\ti++\r\n\t\t) {\r\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\r\n\t\t\t\tfound.push( elem );\r\n\t\t\t} else {\r\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\r\n\t\tjQuery.merge( [ context ], found ) :\r\n\t\tfound;\r\n}\r\n\r\n\r\n// Mark scripts as having already been evaluated\r\nfunction setGlobalEval( elems, refElements ) {\r\n\tvar elem,\r\n\t\ti = 0;\r\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\r\n\t\tjQuery._data(\r\n\t\t\telem,\r\n\t\t\t\"globalEval\",\r\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\nvar rhtml = /<|&#?\\w+;/,\r\n\trtbody = / from table fragments\r\n\t\t\t\tif ( !support.tbody ) {\r\n\r\n\t\t\t\t\t// String was a , *may* have spurious \r\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\ttmp.firstChild :\r\n\r\n\t\t\t\t\t\t// String was a bare or \r\n\t\t\t\t\t\twrap[ 1 ] === \"
    \" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\ttmp :\r\n\t\t\t\t\t\t\t0;\r\n\r\n\t\t\t\t\tj = elem && elem.childNodes.length;\r\n\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\r\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\r\n\r\n\t\t\t\t\t\t\telem.removeChild( tbody );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\r\n\r\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\r\n\t\t\t\ttmp.textContent = \"\";\r\n\r\n\t\t\t\t// Fix #12392 for oldIE\r\n\t\t\t\twhile ( tmp.firstChild ) {\r\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Remember the top-level container for proper cleanup\r\n\t\t\t\ttmp = safe.lastChild;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Fix #11356: Clear elements from fragment\r\n\tif ( tmp ) {\r\n\t\tsafe.removeChild( tmp );\r\n\t}\r\n\r\n\t// Reset defaultChecked for any radios and checkboxes\r\n\t// about to be appended to the DOM in IE 6/7 (#8060)\r\n\tif ( !support.appendChecked ) {\r\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\r\n\t}\r\n\r\n\ti = 0;\r\n\twhile ( ( elem = nodes[ i++ ] ) ) {\r\n\r\n\t\t// Skip elements already in the context collection (trac-4087)\r\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\r\n\t\t\tif ( ignored ) {\r\n\t\t\t\tignored.push( elem );\r\n\t\t\t}\r\n\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\t// Append to fragment\r\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tif ( contains ) {\r\n\t\t\tsetGlobalEval( tmp );\r\n\t\t}\r\n\r\n\t\t// Capture executables\r\n\t\tif ( scripts ) {\r\n\t\t\tj = 0;\r\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\r\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\r\n\t\t\t\t\tscripts.push( elem );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttmp = null;\r\n\r\n\treturn safe;\r\n}\r\n\r\n\r\n( function() {\r\n\tvar i, eventName,\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\r\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\r\n\t\teventName = \"on\" + i;\r\n\r\n\t\tif ( !( support[ i ] = eventName in window ) ) {\r\n\r\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\r\n\t\t\tdiv.setAttribute( eventName, \"t\" );\r\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n} )();\r\n\r\n\r\nvar rformElems = /^(?:input|select|textarea)$/i,\r\n\trkeyEvent = /^key/,\r\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\r\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\r\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\r\n\r\nfunction returnTrue() {\r\n\treturn true;\r\n}\r\n\r\nfunction returnFalse() {\r\n\treturn false;\r\n}\r\n\r\n// Support: IE9\r\n// See #13393 for more info\r\nfunction safeActiveElement() {\r\n\ttry {\r\n\t\treturn document.activeElement;\r\n\t} catch ( err ) { }\r\n}\r\n\r\nfunction on( elem, types, selector, data, fn, one ) {\r\n\tvar origFn, type;\r\n\r\n\t// Types can be a map of types/handlers\r\n\tif ( typeof types === \"object\" ) {\r\n\r\n\t\t// ( types-Object, selector, data )\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\r\n\t\t\t// ( types-Object, data )\r\n\t\t\tdata = data || selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tfor ( type in types ) {\r\n\t\t\ton( elem, type, selector, data, types[ type ], one );\r\n\t\t}\r\n\t\treturn elem;\r\n\t}\r\n\r\n\tif ( data == null && fn == null ) {\r\n\r\n\t\t// ( types, fn )\r\n\t\tfn = selector;\r\n\t\tdata = selector = undefined;\r\n\t} else if ( fn == null ) {\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\r\n\t\t\t// ( types, selector, fn )\r\n\t\t\tfn = data;\r\n\t\t\tdata = undefined;\r\n\t\t} else {\r\n\r\n\t\t\t// ( types, data, fn )\r\n\t\t\tfn = data;\r\n\t\t\tdata = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t}\r\n\tif ( fn === false ) {\r\n\t\tfn = returnFalse;\r\n\t} else if ( !fn ) {\r\n\t\treturn elem;\r\n\t}\r\n\r\n\tif ( one === 1 ) {\r\n\t\torigFn = fn;\r\n\t\tfn = function( event ) {\r\n\r\n\t\t\t// Can use an empty set, since event contains the info\r\n\t\t\tjQuery().off( event );\r\n\t\t\treturn origFn.apply( this, arguments );\r\n\t\t};\r\n\r\n\t\t// Use same guid so caller can remove using origFn\r\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\r\n\t}\r\n\treturn elem.each( function() {\r\n\t\tjQuery.event.add( this, types, fn, data, selector );\r\n\t} );\r\n}\r\n\r\n/*\r\n * Helper functions for managing events -- not part of the public interface.\r\n * Props to Dean Edwards' addEvent library for many of the ideas.\r\n */\r\njQuery.event = {\r\n\r\n\tglobal: {},\r\n\r\n\tadd: function( elem, types, handler, data, selector ) {\r\n\t\tvar tmp, events, t, handleObjIn,\r\n\t\t\tspecial, eventHandle, handleObj,\r\n\t\t\thandlers, type, namespaces, origType,\r\n\t\t\telemData = jQuery._data( elem );\r\n\r\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\r\n\t\tif ( !elemData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Caller can pass in an object of custom data in lieu of the handler\r\n\t\tif ( handler.handler ) {\r\n\t\t\thandleObjIn = handler;\r\n\t\t\thandler = handleObjIn.handler;\r\n\t\t\tselector = handleObjIn.selector;\r\n\t\t}\r\n\r\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\r\n\t\tif ( !handler.guid ) {\r\n\t\t\thandler.guid = jQuery.guid++;\r\n\t\t}\r\n\r\n\t\t// Init the element's event structure and main handler, if this is the first\r\n\t\tif ( !( events = elemData.events ) ) {\r\n\t\t\tevents = elemData.events = {};\r\n\t\t}\r\n\t\tif ( !( eventHandle = elemData.handle ) ) {\r\n\t\t\teventHandle = elemData.handle = function( e ) {\r\n\r\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\r\n\t\t\t\t// when an event is called after a page has unloaded\r\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\r\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\r\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t};\r\n\r\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\r\n\t\t\t// with IE non-native events\r\n\t\t\teventHandle.elem = elem;\r\n\t\t}\r\n\r\n\t\t// Handle multiple events separated by a space\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\r\n\t\t\ttype = origType = tmp[ 1 ];\r\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// If event changes its type, use the special event handlers for the changed type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// If selector defined, determine special event api type, otherwise given type\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\r\n\t\t\t// Update special based on newly reset type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// handleObj is passed to all event handlers\r\n\t\t\thandleObj = jQuery.extend( {\r\n\t\t\t\ttype: type,\r\n\t\t\t\torigType: origType,\r\n\t\t\t\tdata: data,\r\n\t\t\t\thandler: handler,\r\n\t\t\t\tguid: handler.guid,\r\n\t\t\t\tselector: selector,\r\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\r\n\t\t\t\tnamespace: namespaces.join( \".\" )\r\n\t\t\t}, handleObjIn );\r\n\r\n\t\t\t// Init the event handler queue if we're the first\r\n\t\t\tif ( !( handlers = events[ type ] ) ) {\r\n\t\t\t\thandlers = events[ type ] = [];\r\n\t\t\t\thandlers.delegateCount = 0;\r\n\r\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\r\n\t\t\t\tif ( !special.setup ||\r\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\r\n\r\n\t\t\t\t\t// Bind the global event handler to the element\r\n\t\t\t\t\tif ( elem.addEventListener ) {\r\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\r\n\r\n\t\t\t\t\t} else if ( elem.attachEvent ) {\r\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( special.add ) {\r\n\t\t\t\tspecial.add.call( elem, handleObj );\r\n\r\n\t\t\t\tif ( !handleObj.handler.guid ) {\r\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Add to the element's handler list, delegates in front\r\n\t\t\tif ( selector ) {\r\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\r\n\t\t\t} else {\r\n\t\t\t\thandlers.push( handleObj );\r\n\t\t\t}\r\n\r\n\t\t\t// Keep track of which events have ever been used, for event optimization\r\n\t\t\tjQuery.event.global[ type ] = true;\r\n\t\t}\r\n\r\n\t\t// Nullify elem to prevent memory leaks in IE\r\n\t\telem = null;\r\n\t},\r\n\r\n\t// Detach an event or set of events from an element\r\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\r\n\t\tvar j, handleObj, tmp,\r\n\t\t\torigCount, t, events,\r\n\t\t\tspecial, handlers, type,\r\n\t\t\tnamespaces, origType,\r\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\r\n\r\n\t\tif ( !elemData || !( events = elemData.events ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Once for each type.namespace in types; type may be omitted\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\r\n\t\t\ttype = origType = tmp[ 1 ];\r\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tfor ( type in events ) {\r\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\r\n\t\t\t\t}\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\t\t\thandlers = events[ type ] || [];\r\n\t\t\ttmp = tmp[ 2 ] &&\r\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\r\n\r\n\t\t\t// Remove matching events\r\n\t\t\torigCount = j = handlers.length;\r\n\t\t\twhile ( j-- ) {\r\n\t\t\t\thandleObj = handlers[ j ];\r\n\r\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\r\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\r\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\r\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\r\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\r\n\t\t\t\t\thandlers.splice( j, 1 );\r\n\r\n\t\t\t\t\tif ( handleObj.selector ) {\r\n\t\t\t\t\t\thandlers.delegateCount--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( special.remove ) {\r\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\r\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\r\n\t\t\tif ( origCount && !handlers.length ) {\r\n\t\t\t\tif ( !special.teardown ||\r\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\r\n\r\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete events[ type ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove the expando if it's no longer used\r\n\t\tif ( jQuery.isEmptyObject( events ) ) {\r\n\t\t\tdelete elemData.handle;\r\n\r\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\r\n\t\t\t// so use it instead of delete\r\n\t\t\tjQuery._removeData( elem, \"events\" );\r\n\t\t}\r\n\t},\r\n\r\n\ttrigger: function( event, data, elem, onlyHandlers ) {\r\n\t\tvar handle, ontype, cur,\r\n\t\t\tbubbleType, special, tmp, i,\r\n\t\t\teventPath = [ elem || document ],\r\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\r\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\r\n\r\n\t\tcur = tmp = elem = elem || document;\r\n\r\n\t\t// Don't do events on text and comment nodes\r\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\r\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\r\n\r\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\r\n\t\t\tnamespaces = type.split( \".\" );\r\n\t\t\ttype = namespaces.shift();\r\n\t\t\tnamespaces.sort();\r\n\t\t}\r\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\r\n\r\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\r\n\t\tevent = event[ jQuery.expando ] ?\r\n\t\t\tevent :\r\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\r\n\r\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\r\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\r\n\t\tevent.namespace = namespaces.join( \".\" );\r\n\t\tevent.rnamespace = event.namespace ?\r\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\r\n\t\t\tnull;\r\n\r\n\t\t// Clean up the event in case it is being reused\r\n\t\tevent.result = undefined;\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = elem;\r\n\t\t}\r\n\r\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\r\n\t\tdata = data == null ?\r\n\t\t\t[ event ] :\r\n\t\t\tjQuery.makeArray( data, [ event ] );\r\n\r\n\t\t// Allow special events to draw outside the lines\r\n\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\r\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\r\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\tbubbleType = special.delegateType || type;\r\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\r\n\t\t\t\tcur = cur.parentNode;\r\n\t\t\t}\r\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\r\n\t\t\t\teventPath.push( cur );\r\n\t\t\t\ttmp = cur;\r\n\t\t\t}\r\n\r\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\r\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\r\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fire handlers on the event path\r\n\t\ti = 0;\r\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\r\n\r\n\t\t\tevent.type = i > 1 ?\r\n\t\t\t\tbubbleType :\r\n\t\t\t\tspecial.bindType || type;\r\n\r\n\t\t\t// jQuery handler\r\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\r\n\t\t\t\tjQuery._data( cur, \"handle\" );\r\n\r\n\t\t\tif ( handle ) {\r\n\t\t\t\thandle.apply( cur, data );\r\n\t\t\t}\r\n\r\n\t\t\t// Native handler\r\n\t\t\thandle = ontype && cur[ ontype ];\r\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\r\n\t\t\t\tevent.result = handle.apply( cur, data );\r\n\t\t\t\tif ( event.result === false ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.type = type;\r\n\r\n\t\t// If nobody prevented the default action, do it now\r\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\r\n\r\n\t\t\tif (\r\n\t\t\t\t( !special._default ||\r\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\r\n\t\t\t\t) && acceptData( elem )\r\n\t\t\t) {\r\n\r\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\r\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\r\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\r\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\r\n\t\t\t\t\ttmp = elem[ ontype ];\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\r\n\t\t\t\t\tjQuery.event.triggered = type;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\telem[ type ]();\r\n\t\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\r\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery.event.triggered = undefined;\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\tdispatch: function( event ) {\r\n\r\n\t\t// Make a writable jQuery.Event from the native event object\r\n\t\tevent = jQuery.event.fix( event );\r\n\r\n\t\tvar i, j, ret, matched, handleObj,\r\n\t\t\thandlerQueue = [],\r\n\t\t\targs = slice.call( arguments ),\r\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\r\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\r\n\r\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\r\n\t\targs[ 0 ] = event;\r\n\t\tevent.delegateTarget = this;\r\n\r\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\r\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine handlers\r\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\r\n\r\n\t\t// Run delegates first; they may want to stop propagation beneath us\r\n\t\ti = 0;\r\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\r\n\t\t\tevent.currentTarget = matched.elem;\r\n\r\n\t\t\tj = 0;\r\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\r\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\r\n\r\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\r\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\r\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\r\n\r\n\t\t\t\t\tevent.handleObj = handleObj;\r\n\t\t\t\t\tevent.data = handleObj.data;\r\n\r\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\r\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\r\n\r\n\t\t\t\t\tif ( ret !== undefined ) {\r\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Call the postDispatch hook for the mapped type\r\n\t\tif ( special.postDispatch ) {\r\n\t\t\tspecial.postDispatch.call( this, event );\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\thandlers: function( event, handlers ) {\r\n\t\tvar i, matches, sel, handleObj,\r\n\t\t\thandlerQueue = [],\r\n\t\t\tdelegateCount = handlers.delegateCount,\r\n\t\t\tcur = event.target;\r\n\r\n\t\t// Support (at least): Chrome, IE9\r\n\t\t// Find delegate handlers\r\n\t\t// Black-hole SVG instance trees (#13180)\r\n\t\t//\r\n\t\t// Support: Firefox<=42+\r\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\r\n\t\tif ( delegateCount && cur.nodeType &&\r\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\r\n\r\n\t\t\t/* jshint eqeqeq: false */\r\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\r\n\t\t\t\t/* jshint eqeqeq: true */\r\n\r\n\t\t\t\t// Don't check non-elements (#13208)\r\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\r\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\r\n\t\t\t\t\tmatches = [];\r\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\r\n\t\t\t\t\t\thandleObj = handlers[ i ];\r\n\r\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\r\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\r\n\r\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\r\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\r\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\r\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( matches[ sel ] ) {\r\n\t\t\t\t\t\t\tmatches.push( handleObj );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( matches.length ) {\r\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add the remaining (directly-bound) handlers\r\n\t\tif ( delegateCount < handlers.length ) {\r\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\r\n\t\t}\r\n\r\n\t\treturn handlerQueue;\r\n\t},\r\n\r\n\tfix: function( event ) {\r\n\t\tif ( event[ jQuery.expando ] ) {\r\n\t\t\treturn event;\r\n\t\t}\r\n\r\n\t\t// Create a writable copy of the event object and normalize some properties\r\n\t\tvar i, prop, copy,\r\n\t\t\ttype = event.type,\r\n\t\t\toriginalEvent = event,\r\n\t\t\tfixHook = this.fixHooks[ type ];\r\n\r\n\t\tif ( !fixHook ) {\r\n\t\t\tthis.fixHooks[ type ] = fixHook =\r\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\r\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\r\n\t\t\t\t{};\r\n\t\t}\r\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\r\n\r\n\t\tevent = new jQuery.Event( originalEvent );\r\n\r\n\t\ti = copy.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tprop = copy[ i ];\r\n\t\t\tevent[ prop ] = originalEvent[ prop ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Fix target property (#1925)\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = originalEvent.srcElement || document;\r\n\t\t}\r\n\r\n\t\t// Support: Safari 6-8+\r\n\t\t// Target should not be a text node (#504, #13143)\r\n\t\tif ( event.target.nodeType === 3 ) {\r\n\t\t\tevent.target = event.target.parentNode;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\r\n\t\tevent.metaKey = !!event.metaKey;\r\n\r\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\r\n\t},\r\n\r\n\t// Includes some event props shared by KeyEvent and MouseEvent\r\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\r\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\r\n\r\n\tfixHooks: {},\r\n\r\n\tkeyHooks: {\r\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\r\n\t\tfilter: function( event, original ) {\r\n\r\n\t\t\t// Add which for key events\r\n\t\t\tif ( event.which == null ) {\r\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tmouseHooks: {\r\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\r\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\r\n\t\tfilter: function( event, original ) {\r\n\t\t\tvar body, eventDoc, doc,\r\n\t\t\t\tbutton = original.button,\r\n\t\t\t\tfromElement = original.fromElement;\r\n\r\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\r\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\r\n\t\t\t\teventDoc = event.target.ownerDocument || document;\r\n\t\t\t\tdoc = eventDoc.documentElement;\r\n\t\t\t\tbody = eventDoc.body;\r\n\r\n\t\t\t\tevent.pageX = original.clientX +\r\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\r\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\r\n\t\t\t\tevent.pageY = original.clientY +\r\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\r\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\r\n\t\t\t}\r\n\r\n\t\t\t// Add relatedTarget, if necessary\r\n\t\t\tif ( !event.relatedTarget && fromElement ) {\r\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\r\n\t\t\t\t\toriginal.toElement :\r\n\t\t\t\t\tfromElement;\r\n\t\t\t}\r\n\r\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\r\n\t\t\t// Note: button is not normalized, so don't use it\r\n\t\t\tif ( !event.which && button !== undefined ) {\r\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tspecial: {\r\n\t\tload: {\r\n\r\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\r\n\t\t\tnoBubble: true\r\n\t\t},\r\n\t\tfocus: {\r\n\r\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\r\n\t\t\t\t\t\t// let .trigger() run the handlers\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusin\"\r\n\t\t},\r\n\t\tblur: {\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusout\"\r\n\t\t},\r\n\t\tclick: {\r\n\r\n\t\t\t// For checkbox, fire native event so checked state will be right\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\r\n\t\t\t\t\tthis.click();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\r\n\t\t\t_default: function( event ) {\r\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbeforeunload: {\r\n\t\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t\t// Support: Firefox 20+\r\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\r\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\r\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Piggyback on a donor event to simulate a different one\r\n\tsimulate: function( type, elem, event ) {\r\n\t\tvar e = jQuery.extend(\r\n\t\t\tnew jQuery.Event(),\r\n\t\t\tevent,\r\n\t\t\t{\r\n\t\t\t\ttype: type,\r\n\t\t\t\tisSimulated: true\r\n\r\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\r\n\t\t\t\t// would not be triggered on donor event, since in our own\r\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\r\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\r\n\t\t\t\t//\r\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\r\n\t\t\t\t// since `originalEvent` should point to the original event for the\r\n\t\t\t\t// constancy with other events and for more focused logic\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tjQuery.event.trigger( e, null, elem );\r\n\r\n\t\tif ( e.isDefaultPrevented() ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.removeEvent = document.removeEventListener ?\r\n\tfunction( elem, type, handle ) {\r\n\r\n\t\t// This \"if\" is needed for plain objects\r\n\t\tif ( elem.removeEventListener ) {\r\n\t\t\telem.removeEventListener( type, handle );\r\n\t\t}\r\n\t} :\r\n\tfunction( elem, type, handle ) {\r\n\t\tvar name = \"on\" + type;\r\n\r\n\t\tif ( elem.detachEvent ) {\r\n\r\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\r\n\t\t\t// detachEvent needed property on element, by name of that event,\r\n\t\t\t// to properly expose it to GC\r\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\r\n\t\t\t\telem[ name ] = null;\r\n\t\t\t}\r\n\r\n\t\t\telem.detachEvent( name, handle );\r\n\t\t}\r\n\t};\r\n\r\njQuery.Event = function( src, props ) {\r\n\r\n\t// Allow instantiation without the 'new' keyword\r\n\tif ( !( this instanceof jQuery.Event ) ) {\r\n\t\treturn new jQuery.Event( src, props );\r\n\t}\r\n\r\n\t// Event object\r\n\tif ( src && src.type ) {\r\n\t\tthis.originalEvent = src;\r\n\t\tthis.type = src.type;\r\n\r\n\t\t// Events bubbling up the document may have been marked as prevented\r\n\t\t// by a handler lower down the tree; reflect the correct value.\r\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\r\n\t\t\t\tsrc.defaultPrevented === undefined &&\r\n\r\n\t\t\t\t// Support: IE < 9, Android < 4.0\r\n\t\t\t\tsrc.returnValue === false ?\r\n\t\t\treturnTrue :\r\n\t\t\treturnFalse;\r\n\r\n\t// Event type\r\n\t} else {\r\n\t\tthis.type = src;\r\n\t}\r\n\r\n\t// Put explicitly provided properties onto the event object\r\n\tif ( props ) {\r\n\t\tjQuery.extend( this, props );\r\n\t}\r\n\r\n\t// Create a timestamp if incoming event doesn't have one\r\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\r\n\r\n\t// Mark it as fixed\r\n\tthis[ jQuery.expando ] = true;\r\n};\r\n\r\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\r\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\r\njQuery.Event.prototype = {\r\n\tconstructor: jQuery.Event,\r\n\tisDefaultPrevented: returnFalse,\r\n\tisPropagationStopped: returnFalse,\r\n\tisImmediatePropagationStopped: returnFalse,\r\n\r\n\tpreventDefault: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isDefaultPrevented = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If preventDefault exists, run it on the original event\r\n\t\tif ( e.preventDefault ) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t// Support: IE\r\n\t\t// Otherwise set the returnValue property of the original event to false\r\n\t\t} else {\r\n\t\t\te.returnValue = false;\r\n\t\t}\r\n\t},\r\n\tstopPropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isPropagationStopped = returnTrue;\r\n\r\n\t\tif ( !e || this.isSimulated ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If stopPropagation exists, run it on the original event\r\n\t\tif ( e.stopPropagation ) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// Set the cancelBubble property of the original event to true\r\n\t\te.cancelBubble = true;\r\n\t},\r\n\tstopImmediatePropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isImmediatePropagationStopped = returnTrue;\r\n\r\n\t\tif ( e && e.stopImmediatePropagation ) {\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\r\n\t\tthis.stopPropagation();\r\n\t}\r\n};\r\n\r\n// Create mouseenter/leave events using mouseover/out and event-time checks\r\n// so that event delegation works in jQuery.\r\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\r\n//\r\n// Support: Safari 7 only\r\n// Safari sends mouseenter too often; see:\r\n// https://code.google.com/p/chromium/issues/detail?id=470258\r\n// for the description of the bug (it existed in older Chrome versions as well).\r\njQuery.each( {\r\n\tmouseenter: \"mouseover\",\r\n\tmouseleave: \"mouseout\",\r\n\tpointerenter: \"pointerover\",\r\n\tpointerleave: \"pointerout\"\r\n}, function( orig, fix ) {\r\n\tjQuery.event.special[ orig ] = {\r\n\t\tdelegateType: fix,\r\n\t\tbindType: fix,\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar ret,\r\n\t\t\t\ttarget = this,\r\n\t\t\t\trelated = event.relatedTarget,\r\n\t\t\t\thandleObj = event.handleObj;\r\n\r\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\r\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\r\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\r\n\t\t\t\tevent.type = handleObj.origType;\r\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\r\n\t\t\t\tevent.type = fix;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\t};\r\n} );\r\n\r\n// IE submit delegation\r\nif ( !support.submit ) {\r\n\r\n\tjQuery.event.special.submit = {\r\n\t\tsetup: function() {\r\n\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\r\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\r\n\r\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\r\n\t\t\t\tvar elem = e.target,\r\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\r\n\r\n\t\t\t\t\t\t// Support: IE <=8\r\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\r\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\r\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\r\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\r\n\t\t\t\t\t\tundefined;\r\n\r\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\r\n\t\t\t\t\t\tevent._submitBubble = true;\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\t// return undefined since we don't need an event listener\r\n\t\t},\r\n\r\n\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t// If form was submitted by the user, bubble the event up the tree\r\n\t\t\tif ( event._submitBubble ) {\r\n\t\t\t\tdelete event._submitBubble;\r\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\r\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\r\n\t\t\tjQuery.event.remove( this, \"._submit\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE change delegation and checkbox/radio fix\r\nif ( !support.change ) {\r\n\r\n\tjQuery.event.special.change = {\r\n\r\n\t\tsetup: function() {\r\n\r\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\r\n\r\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\r\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\r\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\r\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\r\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\r\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\r\n\t\t\t\t\t\t\tthis._justChanged = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tthis._justChanged = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\r\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\r\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\r\n\t\t\t\tvar elem = e.target;\r\n\r\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar elem = event.target;\r\n\r\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\r\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\r\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\r\n\r\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\tjQuery.event.remove( this, \"._change\" );\r\n\r\n\t\t\treturn !rformElems.test( this.nodeName );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Support: Firefox\r\n// Firefox doesn't have focus(in | out) events\r\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\r\n//\r\n// Support: Chrome, Safari\r\n// focus(in | out) events fire after focus & blur events,\r\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\r\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\r\nif ( !support.focusin ) {\r\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\r\n\r\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\r\n\t\tvar handler = function( event ) {\r\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\r\n\t\t};\r\n\r\n\t\tjQuery.event.special[ fix ] = {\r\n\t\t\tsetup: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\r\n\t\t\t\t}\r\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\r\n\t\t\t},\r\n\t\t\tteardown: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\r\n\t\t\t\t\tjQuery._removeData( doc, fix );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t} );\r\n}\r\n\r\njQuery.fn.extend( {\r\n\r\n\ton: function( types, selector, data, fn ) {\r\n\t\treturn on( this, types, selector, data, fn );\r\n\t},\r\n\tone: function( types, selector, data, fn ) {\r\n\t\treturn on( this, types, selector, data, fn, 1 );\r\n\t},\r\n\toff: function( types, selector, fn ) {\r\n\t\tvar handleObj, type;\r\n\t\tif ( types && types.preventDefault && types.handleObj ) {\r\n\r\n\t\t\t// ( event ) dispatched jQuery.Event\r\n\t\t\thandleObj = types.handleObj;\r\n\t\t\tjQuery( types.delegateTarget ).off(\r\n\t\t\t\thandleObj.namespace ?\r\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\r\n\t\t\t\t\thandleObj.origType,\r\n\t\t\t\thandleObj.selector,\r\n\t\t\t\thandleObj.handler\r\n\t\t\t);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( typeof types === \"object\" ) {\r\n\r\n\t\t\t// ( types-object [, selector] )\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.off( type, selector, types[ type ] );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( selector === false || typeof selector === \"function\" ) {\r\n\r\n\t\t\t// ( types [, fn] )\r\n\t\t\tfn = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t}\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.remove( this, types, fn, selector );\r\n\t\t} );\r\n\t},\r\n\r\n\ttrigger: function( type, data ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.trigger( type, data, this );\r\n\t\t} );\r\n\t},\r\n\ttriggerHandler: function( type, data ) {\r\n\t\tvar elem = this[ 0 ];\r\n\t\tif ( elem ) {\r\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n\r\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\r\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\r\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\r\n\r\n\t// Support: IE 10-11, Edge 10240+\r\n\t// In IE/Edge using regex groups here causes severe slowdowns.\r\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\r\n\trnoInnerhtml = /\\s*$/g,\r\n\tsafeFragment = createSafeFragment( document ),\r\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\r\n\r\n// Support: IE<8\r\n// Manipulating tables requires a tbody\r\nfunction manipulationTarget( elem, content ) {\r\n\treturn jQuery.nodeName( elem, \"table\" ) &&\r\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\r\n\r\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\r\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\r\n\t\telem;\r\n}\r\n\r\n// Replace/restore the type attribute of script elements for safe DOM manipulation\r\nfunction disableScript( elem ) {\r\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\r\n\treturn elem;\r\n}\r\nfunction restoreScript( elem ) {\r\n\tvar match = rscriptTypeMasked.exec( elem.type );\r\n\tif ( match ) {\r\n\t\telem.type = match[ 1 ];\r\n\t} else {\r\n\t\telem.removeAttribute( \"type\" );\r\n\t}\r\n\treturn elem;\r\n}\r\n\r\nfunction cloneCopyEvent( src, dest ) {\r\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar type, i, l,\r\n\t\toldData = jQuery._data( src ),\r\n\t\tcurData = jQuery._data( dest, oldData ),\r\n\t\tevents = oldData.events;\r\n\r\n\tif ( events ) {\r\n\t\tdelete curData.handle;\r\n\t\tcurData.events = {};\r\n\r\n\t\tfor ( type in events ) {\r\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\r\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// make the cloned public data object a copy from the original\r\n\tif ( curData.data ) {\r\n\t\tcurData.data = jQuery.extend( {}, curData.data );\r\n\t}\r\n}\r\n\r\nfunction fixCloneNodeIssues( src, dest ) {\r\n\tvar nodeName, e, data;\r\n\r\n\t// We do not need to do anything for non-Elements\r\n\tif ( dest.nodeType !== 1 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tnodeName = dest.nodeName.toLowerCase();\r\n\r\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\r\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\r\n\t\tdata = jQuery._data( dest );\r\n\r\n\t\tfor ( e in data.events ) {\r\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\r\n\t\t}\r\n\r\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\r\n\t\tdest.removeAttribute( jQuery.expando );\r\n\t}\r\n\r\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\r\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\r\n\t\tdisableScript( dest ).text = src.text;\r\n\t\trestoreScript( dest );\r\n\r\n\t// IE6-10 improperly clones children of object elements using classid.\r\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\r\n\t} else if ( nodeName === \"object\" ) {\r\n\t\tif ( dest.parentNode ) {\r\n\t\t\tdest.outerHTML = src.outerHTML;\r\n\t\t}\r\n\r\n\t\t// This path appears unavoidable for IE9. When cloning an object\r\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\r\n\t\t// If the src has innerHTML and the destination does not,\r\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\r\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\r\n\t\t\tdest.innerHTML = src.innerHTML;\r\n\t\t}\r\n\r\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\r\n\r\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\r\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\r\n\t\t// a checked appearance if the defaultChecked value isn't also set\r\n\r\n\t\tdest.defaultChecked = dest.checked = src.checked;\r\n\r\n\t\t// IE6-7 get confused and end up setting the value of a cloned\r\n\t\t// checkbox/radio button to an empty string instead of \"on\"\r\n\t\tif ( dest.value !== src.value ) {\r\n\t\t\tdest.value = src.value;\r\n\t\t}\r\n\r\n\t// IE6-8 fails to return the selected option to the default selected\r\n\t// state when cloning options\r\n\t} else if ( nodeName === \"option\" ) {\r\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\r\n\r\n\t// IE6-8 fails to set the defaultValue to the correct value when\r\n\t// cloning other types of input fields\r\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\r\n\t\tdest.defaultValue = src.defaultValue;\r\n\t}\r\n}\r\n\r\nfunction domManip( collection, args, callback, ignored ) {\r\n\r\n\t// Flatten any nested arrays\r\n\targs = concat.apply( [], args );\r\n\r\n\tvar first, node, hasScripts,\r\n\t\tscripts, doc, fragment,\r\n\t\ti = 0,\r\n\t\tl = collection.length,\r\n\t\tiNoClone = l - 1,\r\n\t\tvalue = args[ 0 ],\r\n\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t// We can't cloneNode fragments that contain checked, in WebKit\r\n\tif ( isFunction ||\r\n\t\t\t( l > 1 && typeof value === \"string\" &&\r\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\r\n\t\treturn collection.each( function( index ) {\r\n\t\t\tvar self = collection.eq( index );\r\n\t\t\tif ( isFunction ) {\r\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\r\n\t\t\t}\r\n\t\t\tdomManip( self, args, callback, ignored );\r\n\t\t} );\r\n\t}\r\n\r\n\tif ( l ) {\r\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\r\n\t\tfirst = fragment.firstChild;\r\n\r\n\t\tif ( fragment.childNodes.length === 1 ) {\r\n\t\t\tfragment = first;\r\n\t\t}\r\n\r\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\r\n\t\tif ( first || ignored ) {\r\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\r\n\t\t\thasScripts = scripts.length;\r\n\r\n\t\t\t// Use the original fragment for the last item\r\n\t\t\t// instead of the first because it can end up\r\n\t\t\t// being emptied incorrectly in certain situations (#8070).\r\n\t\t\tfor ( ; i < l; i++ ) {\r\n\t\t\t\tnode = fragment;\r\n\r\n\t\t\t\tif ( i !== iNoClone ) {\r\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\r\n\r\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\r\n\t\t\t\t\tif ( hasScripts ) {\r\n\r\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\r\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\r\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcallback.call( collection[ i ], node, i );\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasScripts ) {\r\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\r\n\r\n\t\t\t\t// Reenable scripts\r\n\t\t\t\tjQuery.map( scripts, restoreScript );\r\n\r\n\t\t\t\t// Evaluate executable scripts on first document insertion\r\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\r\n\t\t\t\t\tnode = scripts[ i ];\r\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\r\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\r\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\r\n\r\n\t\t\t\t\t\tif ( node.src ) {\r\n\r\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\r\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\r\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tjQuery.globalEval(\r\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\r\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Fix #11809: Avoid leaking memory\r\n\t\t\tfragment = first = null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn collection;\r\n}\r\n\r\nfunction remove( elem, selector, keepData ) {\r\n\tvar node,\r\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\r\n\t\ti = 0;\r\n\r\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\r\n\r\n\t\tif ( !keepData && node.nodeType === 1 ) {\r\n\t\t\tjQuery.cleanData( getAll( node ) );\r\n\t\t}\r\n\r\n\t\tif ( node.parentNode ) {\r\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\r\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\r\n\t\t\t}\r\n\t\t\tnode.parentNode.removeChild( node );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elem;\r\n}\r\n\r\njQuery.extend( {\r\n\thtmlPrefilter: function( html ) {\r\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\r\n\t},\r\n\r\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\r\n\t\tvar destElements, node, clone, i, srcElements,\r\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\r\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\r\n\r\n\t\t\tclone = elem.cloneNode( true );\r\n\r\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\r\n\t\t} else {\r\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\r\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\r\n\t\t}\r\n\r\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\r\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\r\n\r\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\r\n\t\t\tdestElements = getAll( clone );\r\n\t\t\tsrcElements = getAll( elem );\r\n\r\n\t\t\t// Fix all IE cloning issues\r\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\r\n\r\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\r\n\t\t\t\tif ( destElements[ i ] ) {\r\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Copy the events from the original to the clone\r\n\t\tif ( dataAndEvents ) {\r\n\t\t\tif ( deepDataAndEvents ) {\r\n\t\t\t\tsrcElements = srcElements || getAll( elem );\r\n\t\t\t\tdestElements = destElements || getAll( clone );\r\n\r\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\r\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcloneCopyEvent( elem, clone );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tdestElements = getAll( clone, \"script\" );\r\n\t\tif ( destElements.length > 0 ) {\r\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\r\n\t\t}\r\n\r\n\t\tdestElements = srcElements = node = null;\r\n\r\n\t\t// Return the cloned set\r\n\t\treturn clone;\r\n\t},\r\n\r\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\r\n\t\tvar elem, type, id, data,\r\n\t\t\ti = 0,\r\n\t\t\tinternalKey = jQuery.expando,\r\n\t\t\tcache = jQuery.cache,\r\n\t\t\tattributes = support.attributes,\r\n\t\t\tspecial = jQuery.event.special;\r\n\r\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\r\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\r\n\r\n\t\t\t\tid = elem[ internalKey ];\r\n\t\t\t\tdata = id && cache[ id ];\r\n\r\n\t\t\t\tif ( data ) {\r\n\t\t\t\t\tif ( data.events ) {\r\n\t\t\t\t\t\tfor ( type in data.events ) {\r\n\t\t\t\t\t\t\tif ( special[ type ] ) {\r\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\r\n\r\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\r\n\t\t\t\t\tif ( cache[ id ] ) {\r\n\r\n\t\t\t\t\t\tdelete cache[ id ];\r\n\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\r\n\t\t\t\t\t\t// IE creates expando attributes along with the property\r\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\r\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\r\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\r\n\r\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\r\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\r\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdeletedIds.push( id );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\r\n\t// Keep domManip exposed until 3.0 (gh-2225)\r\n\tdomManip: domManip,\r\n\r\n\tdetach: function( selector ) {\r\n\t\treturn remove( this, selector, true );\r\n\t},\r\n\r\n\tremove: function( selector ) {\r\n\t\treturn remove( this, selector );\r\n\t},\r\n\r\n\ttext: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\treturn value === undefined ?\r\n\t\t\t\tjQuery.text( this ) :\r\n\t\t\t\tthis.empty().append(\r\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\r\n\t\t\t\t);\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\tappend: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.appendChild( elem );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tprepend: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tbefore: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tafter: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tempty: function() {\r\n\t\tvar elem,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\r\n\r\n\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Remove any remaining nodes\r\n\t\t\twhile ( elem.firstChild ) {\r\n\t\t\t\telem.removeChild( elem.firstChild );\r\n\t\t\t}\r\n\r\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\r\n\t\t\t// Support: IE<9\r\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\r\n\t\t\t\telem.options.length = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\r\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\r\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\r\n\r\n\t\treturn this.map( function() {\r\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\r\n\t\t} );\r\n\t},\r\n\r\n\thtml: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\tvar elem = this[ 0 ] || {},\r\n\t\t\t\ti = 0,\r\n\t\t\t\tl = this.length;\r\n\r\n\t\t\tif ( value === undefined ) {\r\n\t\t\t\treturn elem.nodeType === 1 ?\r\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t}\r\n\r\n\t\t\t// See if we can take a shortcut and just use innerHTML\r\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\r\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\r\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\r\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\r\n\r\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfor ( ; i < l; i++ ) {\r\n\r\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\t\t\t\telem = this[ i ] || {};\r\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t\t\t\t\telem.innerHTML = value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telem = 0;\r\n\r\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\r\n\t\t\t\t} catch ( e ) {}\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem ) {\r\n\t\t\t\tthis.empty().append( value );\r\n\t\t\t}\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\treplaceWith: function() {\r\n\t\tvar ignored = [];\r\n\r\n\t\t// Make the changes, replacing each non-ignored context element with the new content\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tvar parent = this.parentNode;\r\n\r\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( this ) );\r\n\t\t\t\tif ( parent ) {\r\n\t\t\t\t\tparent.replaceChild( elem, this );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Force callback invocation\r\n\t\t}, ignored );\r\n\t}\r\n} );\r\n\r\njQuery.each( {\r\n\tappendTo: \"append\",\r\n\tprependTo: \"prepend\",\r\n\tinsertBefore: \"before\",\r\n\tinsertAfter: \"after\",\r\n\treplaceAll: \"replaceWith\"\r\n}, function( name, original ) {\r\n\tjQuery.fn[ name ] = function( selector ) {\r\n\t\tvar elems,\r\n\t\t\ti = 0,\r\n\t\t\tret = [],\r\n\t\t\tinsert = jQuery( selector ),\r\n\t\t\tlast = insert.length - 1;\r\n\r\n\t\tfor ( ; i <= last; i++ ) {\r\n\t\t\telems = i === last ? this : this.clone( true );\r\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\r\n\r\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\r\n\t\t\tpush.apply( ret, elems.get() );\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n} );\r\n\r\n\r\nvar iframe,\r\n\telemdisplay = {\r\n\r\n\t\t// Support: Firefox\r\n\t\t// We have to pre-define these values for FF (#10227)\r\n\t\tHTML: \"block\",\r\n\t\tBODY: \"block\"\r\n\t};\r\n\r\n/**\r\n * Retrieve the actual display of a element\r\n * @param {String} name nodeName of the element\r\n * @param {Object} doc Document object\r\n */\r\n\r\n// Called only from within defaultDisplay\r\nfunction actualDisplay( name, doc ) {\r\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\r\n\r\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\r\n\r\n\t// We don't have any data stored on the element,\r\n\t// so use \"detach\" method as fast way to get rid of the element\r\n\telem.detach();\r\n\r\n\treturn display;\r\n}\r\n\r\n/**\r\n * Try to determine the default display value of an element\r\n * @param {String} nodeName\r\n */\r\nfunction defaultDisplay( nodeName ) {\r\n\tvar doc = document,\r\n\t\tdisplay = elemdisplay[ nodeName ];\r\n\r\n\tif ( !display ) {\r\n\t\tdisplay = actualDisplay( nodeName, doc );\r\n\r\n\t\t// If the simple way fails, read from inside an iframe\r\n\t\tif ( display === \"none\" || !display ) {\r\n\r\n\t\t\t// Use the already-created iframe if possible\r\n\t\t\tiframe = ( iframe || jQuery( \"';\r\n break;\r\n case 3:\r\n delete config.title;\r\n delete config.closeBtn;\r\n config.icon === -1 && (config.icon === 0);\r\n layer.closeAll('loading');\r\n break;\r\n case 4:\r\n conType || (config.content = [config.content, 'body']);\r\n config.follow = config.content[1];\r\n config.content = config.content[0] + '';\r\n delete config.title;\r\n config.tips = typeof config.tips === 'object' ? config.tips : [config.tips, true];\r\n config.tipsMore || layer.closeAll('tips');\r\n break;\r\n }\r\n \r\n // 建立容器\r\n that.vessel(conType, function(html, titleHTML, moveElem){\r\n body.append(html[0]);\r\n conType ? function(){\r\n (config.type == 2 || config.type == 4) ? function(){\r\n $('body').append(html[1]);\r\n }() : function(){\r\n if(!content.parents('.'+doms[0])[0]){\r\n content.data('display', content.css('display')).show().addClass('layui-layer-wrap').wrap(html[1]);\r\n $('#'+ doms[0] + times).find('.'+doms[5]).before(titleHTML);\r\n }\r\n }();\r\n }() : body.append(html[1]);\r\n $('#'+ doms.MOVE)[0] || body.append(ready.moveElem = moveElem);\r\n \r\n that.layero = $('#'+ doms[0] + times);\r\n that.shadeo = $('#'+ doms.SHADE + times);\r\n \r\n config.scrollbar || ready.setScrollbar(times);\r\n }).auto(times);\r\n \r\n // 遮罩\r\n that.shadeo.css({\r\n 'background-color': config.shade[1] || '#000'\r\n ,'opacity': config.shade[0] || config.shade\r\n ,'transition': config.shade[2] || ''\r\n });\r\n that.shadeo.data(SHADE_KEY, config.shade[0] || config.shade);\r\n\r\n config.type == 2 && layer.ie == 6 && that.layero.find('iframe').attr('src', content[0]);\r\n\r\n // 坐标自适应浏览器窗口尺寸\r\n config.type == 4 ? that.tips() : function(){\r\n that.offset()\r\n // 首次弹出时,若 css 尚未加载,则等待 css 加载完毕后,重新设定尺寸\r\n parseInt(ready.getStyle(document.getElementById(doms.MOVE), 'z-index')) || function(){\r\n that.layero.css('visibility', 'hidden');\r\n layer.ready(function(){\r\n that.offset();\r\n that.layero.css('visibility', 'visible');\r\n });\r\n }();\r\n }();\r\n \r\n // 若是固定定位,则跟随 resize 事件来自适应坐标\r\n if(config.fixed){\r\n if(!ready.events.resize[that.index]){\r\n ready.events.resize[that.index] = function(){\r\n that.resize();\r\n };\r\n // 此处 resize 事件不会一直叠加,当关闭弹层时会移除该事件\r\n win.on('resize', ready.events.resize[that.index]);\r\n }\r\n }\r\n \r\n config.time <= 0 || setTimeout(function(){\r\n layer.close(that.index);\r\n }, config.time);\r\n that.move().callback();\r\n setAnim(that.layero);\r\n \r\n // 记录配置信息\r\n that.layero.data('config', config);\r\n};\r\n\r\n// 当前实例的 resize 事件\r\nClass.pt.resize = function(){\r\n var that = this;\r\n var config = that.config;\r\n \r\n that.offset();\r\n (/^\\d+%$/.test(config.area[0]) || /^\\d+%$/.test(config.area[1])) && that.auto(that.index);\r\n config.type == 4 && that.tips();\r\n};\r\n\r\n// 自适应\r\nClass.pt.auto = function(index){\r\n var that = this, config = that.config, layero = $('#'+ doms[0] + index);\r\n \r\n if(config.area[0] === '' && config.maxWidth > 0){\r\n // 适配 ie7\r\n if(layer.ie && layer.ie < 8 && config.btn){\r\n layero.width(layero.innerWidth());\r\n }\r\n layero.outerWidth() > config.maxWidth && layero.width(config.maxWidth);\r\n }\r\n \r\n var area = [layero.innerWidth(), layero.innerHeight()];\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n var setHeight = function(elem){\r\n elem = layero.find(elem);\r\n elem.height(area[1] - titHeight - btnHeight - 2*(parseFloat(elem.css('padding-top'))|0));\r\n };\r\n\r\n switch(config.type){\r\n case 2: \r\n setHeight('iframe');\r\n break;\r\n default:\r\n if(config.area[1] === ''){\r\n if(config.maxHeight > 0 && layero.outerHeight() > config.maxHeight){\r\n area[1] = config.maxHeight;\r\n setHeight('.'+doms[5]);\r\n } else if(config.fixed && area[1] >= win.height()){\r\n area[1] = win.height();\r\n setHeight('.'+doms[5]);\r\n }\r\n } else {\r\n setHeight('.'+doms[5]);\r\n }\r\n break;\r\n }\r\n \r\n return that;\r\n};\r\n\r\n// 计算坐标\r\nClass.pt.offset = function(){\r\n var that = this, config = that.config, layero = that.layero;\r\n var area = [layero.outerWidth(), layero.outerHeight()];\r\n var type = typeof config.offset === 'object';\r\n that.offsetTop = (win.height() - area[1])/2;\r\n that.offsetLeft = (win.width() - area[0])/2;\r\n \r\n if(type){\r\n that.offsetTop = config.offset[0];\r\n that.offsetLeft = config.offset[1]||that.offsetLeft;\r\n } else if(config.offset !== 'auto'){\r\n \r\n if(config.offset === 't'){ // 上\r\n that.offsetTop = 0;\r\n } else if(config.offset === 'r'){ // 右\r\n that.offsetLeft = win.width() - area[0];\r\n } else if(config.offset === 'b'){ // 下\r\n that.offsetTop = win.height() - area[1];\r\n } else if(config.offset === 'l'){ // 左\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'lt'){ // 左上\r\n that.offsetTop = 0;\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'lb'){ // 左下\r\n that.offsetTop = win.height() - area[1];\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'rt'){ // 右上\r\n that.offsetTop = 0;\r\n that.offsetLeft = win.width() - area[0];\r\n } else if(config.offset === 'rb'){ // 右下\r\n that.offsetTop = win.height() - area[1];\r\n that.offsetLeft = win.width() - area[0];\r\n } else {\r\n that.offsetTop = config.offset;\r\n }\r\n \r\n }\r\n \r\n if(!config.fixed){\r\n that.offsetTop = /%$/.test(that.offsetTop) ? \r\n win.height()*parseFloat(that.offsetTop)/100\r\n : parseFloat(that.offsetTop);\r\n that.offsetLeft = /%$/.test(that.offsetLeft) ? \r\n win.width()*parseFloat(that.offsetLeft)/100\r\n : parseFloat(that.offsetLeft);\r\n that.offsetTop += win.scrollTop();\r\n that.offsetLeft += win.scrollLeft();\r\n }\r\n \r\n // 最小化窗口时的自适应\r\n if(layero.data('maxminStatus') === 'min'){\r\n that.offsetTop = win.height() - (layero.find(doms[1]).outerHeight() || 0);\r\n that.offsetLeft = layero.css('left');\r\n }\r\n\r\n // 设置坐标\r\n layero.css({\r\n top: that.offsetTop, \r\n left: that.offsetLeft\r\n });\r\n};\r\n\r\n// Tips\r\nClass.pt.tips = function(){\r\n var that = this, config = that.config, layero = that.layero;\r\n var layArea = [layero.outerWidth(), layero.outerHeight()], follow = $(config.follow);\r\n if(!follow[0]) follow = $('body');\r\n var goal = {\r\n width: follow.outerWidth(),\r\n height: follow.outerHeight(),\r\n top: follow.offset().top,\r\n left: follow.offset().left\r\n }, tipsG = layero.find('.layui-layer-TipsG');\r\n \r\n var guide = config.tips[0];\r\n config.tips[1] || tipsG.remove();\r\n \r\n goal.autoLeft = function(){\r\n if(goal.left + layArea[0] - win.width() > 0){\r\n goal.tipLeft = goal.left + goal.width - layArea[0];\r\n tipsG.css({right: 12, left: 'auto'});\r\n } else {\r\n goal.tipLeft = goal.left;\r\n }\r\n };\r\n \r\n // 辨别 tips 的方位\r\n // 21 为箭头大小 8*2 + 箭头相对父元素的top偏移 5\r\n goal.where = [function(){ // 上 \r\n goal.autoLeft();\r\n goal.tipTop = goal.top - layArea[1] - 10;\r\n tipsG.removeClass('layui-layer-TipsB').addClass('layui-layer-TipsT').css('border-right-color', config.tips[1]);\r\n }, function(){ // 右\r\n goal.tipLeft = goal.left + goal.width + 10;\r\n goal.tipTop = goal.top - (goal.height * 0.75 < 21 ? 21 - goal.height * 0.5 : 0);\r\n goal.tipTop = Math.max(goal.tipTop, 0);\r\n tipsG.removeClass('layui-layer-TipsL').addClass('layui-layer-TipsR').css('border-bottom-color', config.tips[1]); \r\n }, function(){ // 下\r\n goal.autoLeft();\r\n goal.tipTop = goal.top + goal.height + 10;\r\n tipsG.removeClass('layui-layer-TipsT').addClass('layui-layer-TipsB').css('border-right-color', config.tips[1]);\r\n }, function(){ // 左\r\n goal.tipLeft = goal.left - layArea[0] - 10;\r\n goal.tipTop = goal.top - (goal.height * 0.75 < 21 ? 21 - goal.height * 0.5 : 0);\r\n goal.tipTop = Math.max(goal.tipTop, 0);\r\n tipsG.removeClass('layui-layer-TipsR').addClass('layui-layer-TipsL').css('border-bottom-color', config.tips[1]);\r\n }];\r\n goal.where[guide-1]();\r\n \r\n /* 8*2为小三角形占据的空间 */\r\n if(guide === 1){\r\n goal.top - (win.scrollTop() + layArea[1] + 8*2) < 0 && goal.where[2]();\r\n } else if(guide === 2){\r\n win.width() - (goal.left + goal.width + layArea[0] + 8*2) > 0 || goal.where[3]()\r\n } else if(guide === 3){\r\n (goal.top - win.scrollTop() + goal.height + layArea[1] + 8*2) - win.height() > 0 && goal.where[0]();\r\n } else if(guide === 4){\r\n layArea[0] + 8*2 - goal.left > 0 && goal.where[1]()\r\n }\r\n\r\n layero.find('.'+doms[5]).css({\r\n 'background-color': config.tips[1], \r\n 'padding-right': (config.closeBtn ? '30px' : '')\r\n });\r\n layero.css({\r\n left: goal.tipLeft - (config.fixed ? win.scrollLeft() : 0), \r\n top: goal.tipTop - (config.fixed ? win.scrollTop() : 0)\r\n });\r\n}\r\n\r\n// 拖拽层\r\nClass.pt.move = function(){\r\n var that = this;\r\n var config = that.config;\r\n var _DOC = $(document);\r\n var layero = that.layero;\r\n var DATA_NAME = ['LAY_MOVE_DICT', 'LAY_RESIZE_DICT'];\r\n var moveElem = layero.find(config.move);\r\n var resizeElem = layero.find('.layui-layer-resize');\r\n \r\n // 给指定元素添加拖动光标\r\n if(config.move) moveElem.css('cursor', 'move');\r\n \r\n // 按下拖动元素\r\n moveElem.on('mousedown', function(e){\r\n if (e.button) {return;} // 不是左键不处理\r\n var othis = $(this);\r\n var dict = {};\r\n \r\n if(config.move){\r\n dict.layero = layero;\r\n dict.config = config;\r\n dict.offset = [\r\n e.clientX - parseFloat(layero.css('left')),\r\n e.clientY - parseFloat(layero.css('top'))\r\n ];\r\n \r\n othis.data(DATA_NAME[0], dict);\r\n ready.eventMoveElem = othis;\r\n ready.moveElem.css('cursor', 'move').show();\r\n }\r\n \r\n e.preventDefault();\r\n });\r\n \r\n // 按下右下角拉伸\r\n resizeElem.on('mousedown', function(e){\r\n var othis = $(this);\r\n var dict = {};\r\n \r\n if(config.resize){\r\n dict.layero = layero;\r\n dict.config = config;\r\n dict.offset = [e.clientX, e.clientY];\r\n dict.index = that.index;\r\n dict.area = [\r\n layero.outerWidth()\r\n ,layero.outerHeight()\r\n ];\r\n \r\n othis.data(DATA_NAME[1], dict);\r\n ready.eventResizeElem = othis;\r\n ready.moveElem.css('cursor', 'se-resize').show();\r\n }\r\n \r\n e.preventDefault();\r\n });\r\n \r\n // 拖动元素,避免多次调用实例造成事件叠加\r\n if(ready.docEvent) return that;\r\n _DOC.on('mousemove', function(e){\r\n // 拖拽移动\r\n if(ready.eventMoveElem){\r\n var dict = ready.eventMoveElem.data(DATA_NAME[0]) || {}\r\n ,layero = dict.layero\r\n ,config = dict.config;\r\n \r\n var X = e.clientX - dict.offset[0];\r\n var Y = e.clientY - dict.offset[1];\r\n var fixed = layero.css('position') === 'fixed';\r\n \r\n e.preventDefault();\r\n \r\n dict.stX = fixed ? 0 : win.scrollLeft();\r\n dict.stY = fixed ? 0 : win.scrollTop();\r\n\r\n // 控制元素不被拖出窗口外\r\n if(!config.moveOut){\r\n var setRig = win.width() - layero.outerWidth() + dict.stX;\r\n var setBot = win.height() - layero.outerHeight() + dict.stY; \r\n X < dict.stX && (X = dict.stX);\r\n X > setRig && (X = setRig); \r\n Y < dict.stY && (Y = dict.stY);\r\n Y > setBot && (Y = setBot);\r\n }\r\n \r\n // 拖动时跟随鼠标位置\r\n layero.css({\r\n left: X,\r\n top: Y\r\n });\r\n }\r\n \r\n // Resize\r\n if(ready.eventResizeElem){\r\n var dict = ready.eventResizeElem.data(DATA_NAME[1]) || {};\r\n var config = dict.config;\r\n \r\n var X = e.clientX - dict.offset[0];\r\n var Y = e.clientY - dict.offset[1];\r\n \r\n e.preventDefault();\r\n \r\n // 拉伸宽高\r\n layer.style(dict.index, {\r\n width: dict.area[0] + X\r\n ,height: dict.area[1] + Y\r\n });\r\n \r\n config.resizing && config.resizing(dict.layero);\r\n }\r\n }).on('mouseup', function(e){\r\n if(ready.eventMoveElem){\r\n var dict = ready.eventMoveElem.data(DATA_NAME[0]) || {};\r\n var config = dict.config;\r\n \r\n ready.eventMoveElem.removeData(DATA_NAME[0]);\r\n delete ready.eventMoveElem;\r\n ready.moveElem.hide();\r\n config.moveEnd && config.moveEnd(dict.layero);\r\n }\r\n if(ready.eventResizeElem){\r\n ready.eventResizeElem.removeData(DATA_NAME[1]);\r\n delete ready.eventResizeElem;\r\n ready.moveElem.hide();\r\n }\r\n });\r\n \r\n ready.docEvent = true; // 已给 document 执行全局事件\r\n return that;\r\n};\r\n\r\nClass.pt.btnLoading = function(btnElem, isLoading){\r\n if(isLoading){\r\n var loadingTpl = '';\r\n if(btnElem.find('.layui-layer-btn-loading-icon')[0]) return;\r\n btnElem.addClass('layui-layer-btn-is-loading').attr({disabled: ''}).prepend(loadingTpl);\r\n }else{\r\n btnElem.removeClass('layui-layer-btn-is-loading').removeAttr('disabled').find('.layui-layer-btn-loading-icon').remove();\r\n }\r\n}\r\n\r\nClass.pt.callback = function(){\r\n var that = this, layero = that.layero, config = that.config;\r\n that.openLayer();\r\n if(config.success){\r\n if(config.type == 2){\r\n layero.find('iframe').on('load', function(){\r\n config.success(layero, that.index, that);\r\n });\r\n } else {\r\n config.success(layero, that.index, that);\r\n }\r\n }\r\n layer.ie == 6 && that.IE6(layero);\r\n \r\n // 按钮\r\n layero.find('.'+ doms[6]).children('a').on('click', function(){\r\n var btnElem = $(this);\r\n var index = btnElem.index();\r\n if(btnElem.attr('disabled')) return;\r\n\r\n // 若为异步按钮\r\n if(config.btnAsync){\r\n var btnCallback = index === 0 ? (config.yes || config['btn1']) : config['btn'+(index+1)];\r\n that.loading = function(isLoading){\r\n that.btnLoading(btnElem, isLoading);\r\n }\r\n\r\n if(btnCallback){\r\n ready.promiseLikeResolve(btnCallback.call(config, that.index, layero, that))\r\n .then(function(result){\r\n if(result !== false){\r\n layer.close(that.index)\r\n }\r\n }, function(reason){\r\n reason !== undefined && window.console && window.console.error('layer error hint: ' + reason);\r\n });\r\n }else{\r\n layer.close(that.index);\r\n }\r\n } else { // 普通按钮\r\n if(index === 0){\r\n if(config.yes){\r\n config.yes(that.index, layero, that);\r\n } else if(config['btn1']){\r\n config['btn1'](that.index, layero, that);\r\n } else {\r\n layer.close(that.index);\r\n }\r\n } else {\r\n var close = config['btn'+(index+1)] && config['btn'+(index+1)](that.index, layero, that);\r\n close === false || layer.close(that.index);\r\n }\r\n }\r\n });\r\n \r\n // 取消\r\n function cancel(){\r\n var close = config.cancel && config.cancel(that.index, layero, that);\r\n close === false || layer.close(that.index);\r\n }\r\n \r\n // 右上角关闭回调\r\n layero.find('.'+ doms[7]).on('click', cancel);\r\n \r\n // 点遮罩关闭\r\n if(config.shadeClose){\r\n that.shadeo.on('click', function(){\r\n layer.close(that.index);\r\n });\r\n } \r\n \r\n // 最小化\r\n layero.find('.layui-layer-min').on('click', function(){\r\n var min = config.min && config.min(layero, that.index, that);\r\n min === false || layer.min(that.index, config);\r\n });\r\n \r\n // 全屏/还原\r\n layero.find('.layui-layer-max').on('click', function(){\r\n if($(this).hasClass('layui-layer-maxmin')){\r\n layer.restore(that.index);\r\n config.restore && config.restore(layero, that.index, that);\r\n } else {\r\n layer.full(that.index, config);\r\n setTimeout(function(){\r\n config.full && config.full(layero, that.index, that);\r\n }, 100);\r\n }\r\n });\r\n\r\n config.end && (ready.end[that.index] = config.end);\r\n config.beforeEnd && (ready.beforeEnd[that.index] = $.proxy(config.beforeEnd, config, layero, that.index, that));\r\n};\r\n\r\n// for ie6 恢复 select\r\nready.reselect = function(){\r\n $.each($('select'), function(index , value){\r\n var sthis = $(this);\r\n if(!sthis.parents('.'+doms[0])[0]){\r\n (sthis.attr('layer') == 1 && $('.'+doms[0]).length < 1) && sthis.removeAttr('layer').show(); \r\n }\r\n sthis = null;\r\n });\r\n}; \r\n\r\nClass.pt.IE6 = function(layero){\r\n // 隐藏select\r\n $('select').each(function(index , value){\r\n var sthis = $(this);\r\n if(!sthis.parents('.'+doms[0])[0]){\r\n sthis.css('display') === 'none' || sthis.attr({'layer' : '1'}).hide();\r\n }\r\n sthis = null;\r\n });\r\n};\r\n\r\n// 需依赖原型的对外方法\r\nClass.pt.openLayer = function(){\r\n var that = this;\r\n \r\n // 置顶当前窗口\r\n layer.zIndex = that.config.zIndex;\r\n layer.setTop = function(layero){\r\n var setZindex = function(){\r\n layer.zIndex++;\r\n layero.css('z-index', layer.zIndex + 1);\r\n };\r\n layer.zIndex = parseInt(layero[0].style.zIndex);\r\n layero.on('mousedown', setZindex);\r\n return layer.zIndex;\r\n };\r\n};\r\n\r\n// 记录宽高坐标,用于还原\r\nready.record = function(layero){\r\n if(!layero[0]) return window.console && console.error('index error');\r\n var type = layero.attr('type');\r\n var contentElem = layero.find('.layui-layer-content');\r\n var contentRecordHeightElem = type === ready.type[2] ? contentElem.children('iframe') : contentElem;\r\n var area = [\r\n layero[0].style.width || ready.getStyle(layero[0], 'width'),\r\n layero[0].style.height || ready.getStyle(layero[0], 'height'),\r\n layero.position().top, \r\n layero.position().left + parseFloat(layero.css('margin-left'))\r\n ];\r\n layero.find('.layui-layer-max').addClass('layui-layer-maxmin');\r\n layero.attr({area: area});\r\n contentElem.data(RECORD_HEIGHT_KEY, ready.getStyle(contentRecordHeightElem[0], 'height'));\r\n};\r\n\r\n// 设置页面滚动条\r\nready.setScrollbar = function(index){\r\n doms.html.css('overflow', 'hidden').attr('layer-full', index);\r\n};\r\n\r\n// 恢复页面滚动条\r\nready.restScrollbar = function(index){\r\n if(doms.html.attr('layer-full') == index){\r\n doms.html[0].style[doms.html[0].style.removeProperty \r\n ? 'removeProperty' \r\n : 'removeAttribute']('overflow');\r\n doms.html.removeAttr('layer-full');\r\n }\r\n};\r\n\r\n// 类似 Promise.resolve\r\nready.promiseLikeResolve = function(value){\r\n var deferred = $.Deferred();\r\n\r\n if(value && typeof value.then === 'function'){\r\n value.then(deferred.resolve, deferred.reject);\r\n }else{\r\n deferred.resolve(value);\r\n }\r\n return deferred.promise();\r\n}\r\n\r\n/** 内置成员 */\r\n\r\nwindow.layer = layer;\r\n\r\n// 获取子 iframe 的 DOM\r\nlayer.getChildFrame = function(selector, index){\r\n index = index || $('.'+doms[4]).attr('times');\r\n return $('#'+ doms[0] + index).find('iframe').contents().find(selector); \r\n};\r\n\r\n// 得到当前 iframe 层的索引,子 iframe 时使用\r\nlayer.getFrameIndex = function(name){\r\n return $('#'+ name).parents('.'+doms[4]).attr('times');\r\n};\r\n\r\n// iframe 层自适应宽高\r\nlayer.iframeAuto = function(index){\r\n if(!index) return;\r\n var heg = layer.getChildFrame('html', index).outerHeight();\r\n var layero = $('#'+ doms[0] + index);\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n layero.css({height: heg + titHeight + btnHeight});\r\n layero.find('iframe').css({height: heg});\r\n};\r\n\r\n// 重置 iframe url\r\nlayer.iframeSrc = function(index, url){\r\n $('#'+ doms[0] + index).find('iframe').attr('src', url);\r\n};\r\n\r\n// 设定层的样式\r\nlayer.style = function(index, options, limit){\r\n var layero = $('#'+ doms[0] + index);\r\n var contentElem = layero.find('.layui-layer-content');\r\n var type = layero.attr('type');\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n var minLeft = layero.attr('minLeft');\r\n \r\n // loading 和 tips 层不允许更改\r\n if(type === ready.type[3] || type === ready.type[4]){\r\n return;\r\n }\r\n \r\n if(!limit){\r\n if(parseFloat(options.width) <= 260){\r\n options.width = 260;\r\n }\r\n \r\n if(parseFloat(options.height) - titHeight - btnHeight <= 64){\r\n options.height = 64 + titHeight + btnHeight;\r\n }\r\n }\r\n layero.css(options);\r\n btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n \r\n if(type === ready.type[2]){\r\n layero.find('iframe').css({\r\n height: (typeof options.height === 'number' ? options.height : layero.height()) - titHeight - btnHeight\r\n });\r\n } else {\r\n contentElem.css({\r\n height: (typeof options.height === 'number' ? options.height : layero.height()) - titHeight - btnHeight\r\n - parseFloat(contentElem.css('padding-top'))\r\n - parseFloat(contentElem.css('padding-bottom'))\r\n })\r\n }\r\n};\r\n\r\n// 最小化\r\nlayer.min = function(index, options){\r\n var layero = $('#'+ doms[0] + index);\r\n var maxminStatus = layero.data('maxminStatus');\r\n\r\n if(maxminStatus === 'min') return; // 当前的状态是否已经是最小化\r\n if(maxminStatus === 'max') layer.restore(index); // 若当前为最大化,则先还原后再最小化\r\n\r\n layero.data('maxminStatus', 'min');\r\n options = options || layero.data('config') || {};\r\n\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n var elemMin = layero.find('.layui-layer-min');\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var minLeft = layero.attr('minLeft'); // 最小化时的横坐标\r\n var hasMinLeft = typeof minLeft === 'string'; // 是否已经赋值过最小化坐标\r\n var left = hasMinLeft ? minLeft : (181*ready.minStackIndex)+'px';\r\n var position = layero.css('position');\r\n var minWidth = 180; // 最小化时的宽度\r\n var settings = {\r\n width: minWidth\r\n ,height: titHeight\r\n ,position: 'fixed'\r\n ,overflow: 'hidden'\r\n };\r\n\r\n ready.record(layero); // 记录当前尺寸、坐标,用于还原\r\n\r\n // 简易最小化补位\r\n if(ready.minStackArr.length > 0){\r\n left = ready.minStackArr[0];\r\n ready.minStackArr.shift();\r\n }\r\n\r\n // left 是否超出边界\r\n if(parseFloat(left) + minWidth > win.width()){\r\n left = win.width() - minWidth - function(){\r\n ready.minStackArr.edgeIndex = ready.minStackArr.edgeIndex || 0;\r\n return ready.minStackArr.edgeIndex += 3;\r\n }();\r\n if(left < 0) left = 0;\r\n }\r\n \r\n // 是否堆叠在左下角\r\n if(options.minStack){\r\n settings.left = left;\r\n settings.top = win.height() - titHeight;\r\n hasMinLeft || ready.minStackIndex++; // 若未赋值过最小化坐标,则最小化操作索引自增\r\n layero.attr('minLeft', left);\r\n }\r\n \r\n layero.attr('position', position);\r\n layer.style(index, settings, true);\r\n\r\n elemMin.hide();\r\n layero.attr('type') === 'page' && layero.find(doms[4]).hide();\r\n ready.restScrollbar(index);\r\n\r\n // 隐藏遮罩\r\n shadeo.hide();\r\n};\r\n\r\n// 还原\r\nlayer.restore = function(index){\r\n var layero = $('#'+ doms[0] + index);\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n var contentElem = layero.find('.layui-layer-content');\r\n var area = layero.attr('area').split(',');\r\n var type = layero.attr('type');\r\n var options = layero.data('config') || {};\r\n var contentRecordHeight = contentElem.data(RECORD_HEIGHT_KEY);\r\n\r\n layero.removeData('maxminStatus'); // 移除最大最小状态\r\n \r\n // 恢复原来尺寸\r\n layer.style(index, {\r\n width: area[0], // 数值或百分比\r\n height: area[1],\r\n top: parseFloat(area[2]),\r\n left: parseFloat(area[3]),\r\n position: layero.attr('position'),\r\n overflow: 'visible'\r\n }, true);\r\n \r\n layero.find('.layui-layer-max').removeClass('layui-layer-maxmin');\r\n layero.find('.layui-layer-min').show();\r\n type === 'page' && layero.find(doms[4]).show();\r\n\r\n // 恢复页面滚动条弹层打开时的状态\r\n options.scrollbar ? ready.restScrollbar(index) : ready.setScrollbar(index);\r\n\r\n // #1604\r\n if(contentRecordHeight !== undefined){\r\n contentElem.removeData(RECORD_HEIGHT_KEY);\r\n var contentRecordHeightElem = type === ready.type[2] ? contentElem.children('iframe') : contentElem;\r\n contentRecordHeightElem.css({height: contentRecordHeight});\r\n }\r\n \r\n // 恢复遮罩\r\n shadeo.show();\r\n // ready.events.resize[index](); // ?\r\n};\r\n\r\n// 全屏(最大化)\r\nlayer.full = function(index){\r\n var layero = $('#'+ doms[0] + index);\r\n var maxminStatus = layero.data('maxminStatus');\r\n\r\n if(maxminStatus === 'max') return // 检查当前的状态是否已经是最大化\r\n if(maxminStatus === 'min') layer.restore(index); // 若当前为最小化,则先还原后再最大化\r\n\r\n layero.data('maxminStatus', 'max');\r\n ready.record(layero); // 记录当前尺寸、坐标\r\n\r\n if(!doms.html.attr('layer-full')){\r\n ready.setScrollbar(index);\r\n }\r\n\r\n setTimeout(function(){\r\n var isfix = layero.css('position') === 'fixed';\r\n layer.style(index, {\r\n top: isfix ? 0 : win.scrollTop(),\r\n left: isfix ? 0 : win.scrollLeft(),\r\n width: '100%',\r\n height: '100%'\r\n }, true);\r\n layero.find('.layui-layer-min').hide();\r\n }, 100);\r\n};\r\n\r\n// 改变 title\r\nlayer.title = function(name, index){\r\n var title = $('#'+ doms[0] + (index || layer.index)).find(doms[1]);\r\n title.html(name);\r\n};\r\n\r\n// 关闭 layer 总方法\r\nlayer.close = function(index, callback){\r\n var layero = function(){\r\n var closest = $('.'+ doms[0]).children('#'+ index).closest('.'+ doms[0]);\r\n return closest[0] ? (\r\n index = closest.attr('times'),\r\n closest\r\n ) : $('#'+ doms[0] + index)\r\n }();\r\n var type = layero.attr('type');\r\n var options = layero.data('config') || {};\r\n var hideOnClose = options.id && options.hideOnClose; // 是否关闭时移除弹层容器\r\n\r\n if(!layero[0]) return;\r\n\r\n var executor = function(){\r\n // 关闭动画\r\n var closeAnim = ({\r\n slideDown: 'layer-anim-slide-down-out',\r\n slideLeft: 'layer-anim-slide-left-out',\r\n slideUp: 'layer-anim-slide-up-out',\r\n slideRight: 'layer-anim-slide-right-out'\r\n })[options.anim] || 'layer-anim-close';\r\n \r\n // 移除主容器\r\n var remove = function(){\r\n var WRAP = 'layui-layer-wrap';\r\n \r\n // 是否关闭时隐藏弹层容器\r\n if(hideOnClose){\r\n layero.removeClass('layer-anim '+ closeAnim);\r\n return layero.hide();\r\n }\r\n \r\n // 是否为页面捕获层\r\n if(type === ready.type[1] && layero.attr('conType') === 'object'){\r\n layero.children(':not(.'+ doms[5] +')').remove();\r\n var wrap = layero.find('.'+WRAP);\r\n for(var i = 0; i < 2; i++){\r\n wrap.unwrap();\r\n }\r\n wrap.css('display', wrap.data('display')).removeClass(WRAP);\r\n } else {\r\n // 低版本 IE 回收 iframe\r\n if(type === ready.type[2]){\r\n try {\r\n var iframe = $('#'+ doms[4] + index)[0];\r\n iframe.contentWindow.document.write('');\r\n iframe.contentWindow.close();\r\n layero.find('.'+doms[5])[0].removeChild(iframe);\r\n } catch(e){}\r\n }\r\n layero[0].innerHTML = '';\r\n layero.remove();\r\n }\r\n \r\n typeof ready.end[index] === 'function' && ready.end[index]();\r\n delete ready.end[index];\r\n typeof callback === 'function' && callback();\r\n \r\n // 移除 reisze 事件\r\n if(ready.events.resize[index]){\r\n win.off('resize', ready.events.resize[index]);\r\n delete ready.events.resize[index];\r\n }\r\n };\r\n // 移除遮罩\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n if((layer.ie && layer.ie < 10) || !options.isOutAnim){\r\n shadeo[hideOnClose ? 'hide' : 'remove']();\r\n }else{\r\n shadeo.css({opacity: 0});\r\n setTimeout(function(){\r\n shadeo[hideOnClose ? 'hide' : 'remove']();\r\n }, 350);\r\n }\r\n \r\n // 是否允许关闭动画\r\n if(options.isOutAnim){\r\n layero.addClass('layer-anim '+ closeAnim);\r\n }\r\n \r\n layer.ie == 6 && ready.reselect();\r\n ready.restScrollbar(index); \r\n \r\n // 记住被关闭层的最小化堆叠坐标\r\n if(typeof layero.attr('minLeft') === 'string'){\r\n ready.minStackIndex--;\r\n ready.minStackArr.push(layero.attr('minLeft'));\r\n }\r\n \r\n if((layer.ie && layer.ie < 10) || !options.isOutAnim){\r\n remove()\r\n } else {\r\n setTimeout(function(){\r\n remove();\r\n }, 200);\r\n }\r\n }\r\n\r\n if(!hideOnClose && typeof ready.beforeEnd[index] === 'function'){\r\n ready.promiseLikeResolve(ready.beforeEnd[index]())\r\n .then(function(result){\r\n if(result !== false){\r\n delete ready.beforeEnd[index];\r\n executor();\r\n }\r\n }, function(reason){\r\n reason !== undefined && window.console && window.console.error('layer error hint: ' + reason);\r\n });\r\n }else{\r\n delete ready.beforeEnd[index];\r\n executor();\r\n }\r\n};\r\n\r\n// 关闭所有层\r\nlayer.closeAll = function(type, callback){\r\n if(typeof type === 'function'){\r\n callback = type;\r\n type = null;\r\n }\r\n var domsElem = $('.'+doms[0]);\r\n $.each(domsElem, function(_index){\r\n var othis = $(this);\r\n var is = type ? (othis.attr('type') === type) : 1;\r\n is && layer.close(othis.attr('times'), _index === domsElem.length - 1 ? callback : null);\r\n is = null;\r\n });\r\n if(domsElem.length === 0) typeof callback === 'function' && callback();\r\n};\r\n\r\n// 根据弹层类型关闭最近打开的层\r\nlayer.closeLast = function(type, callback){\r\n var layerIndexList = [];\r\n var isArrayType = $.isArray(type);\r\n $(typeof type === 'string' ? '.layui-layer-' + type : '.layui-layer').each(function(i, el){\r\n var layero = $(el);\r\n var shouldSkip = (isArrayType && type.indexOf(layero.attr('type')) === -1) || layero.css('display') === 'none';\r\n if(shouldSkip) return true;\r\n layerIndexList.push(Number(layero.attr('times')));\r\n });\r\n if(layerIndexList.length > 0){\r\n var layerIndexMax = Math.max.apply(null, layerIndexList);\r\n layer.close(layerIndexMax, callback);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * 拓展模块,layui 开始合并在一起\r\n */\r\n\r\n\r\nvar cache = layer.cache || {};\r\nvar skin = function(type){\r\n return (cache.skin ? (' ' + cache.skin + ' ' + cache.skin + '-'+type) : '');\r\n}; \r\n \r\n// 仿系统 prompt\r\nlayer.prompt = function(options, yes){\r\n var style = '', placeholder = '';\r\n options = options || {};\r\n \r\n if(typeof options === 'function') yes = options;\r\n \r\n if(options.area){\r\n var area = options.area;\r\n style = 'style=\"width: '+ area[0] +'; height: '+ area[1] + ';\"';\r\n delete options.area;\r\n }\r\n if (options.placeholder) {\r\n placeholder = ' placeholder=\"' + options.placeholder + '\"';\r\n }\r\n var prompt, content = options.formType == 2 ? '' : function () {\r\n return '';\r\n }();\r\n \r\n var success = options.success;\r\n delete options.success;\r\n \r\n return layer.open($.extend({\r\n type: 1,\r\n btn: ['确定','取消'],\r\n content: content,\r\n skin: 'layui-layer-prompt' + skin('prompt'),\r\n maxWidth: win.width(),\r\n success: function(layero){\r\n prompt = layero.find('.layui-layer-input');\r\n prompt.val(options.value || '').focus();\r\n typeof success === 'function' && success(layero);\r\n },\r\n resize: false,\r\n yes: function(index){\r\n var value = prompt.val();\r\n if(value.length > (options.maxlength||500)) {\r\n layer.tips('最多输入'+ (options.maxlength || 500) +'个字符', prompt, {tips: 1});\r\n } else {\r\n yes && yes(value, index, prompt);\r\n }\r\n }\r\n }, options));\r\n};\r\n\r\n// tab 层\r\nlayer.tab = function(options){\r\n options = options || {};\r\n \r\n var tab = options.tab || {};\r\n var THIS = 'layui-this';\r\n var success = options.success;\r\n \r\n delete options.success;\r\n \r\n return layer.open($.extend({\r\n type: 1,\r\n skin: 'layui-layer-tab' + skin('tab'),\r\n resize: false,\r\n title: function(){\r\n var len = tab.length, ii = 1, str = '';\r\n if(len > 0){\r\n str = ''+ tab[0].title +'';\r\n for(; ii < len; ii++){\r\n str += ''+ tab[ii].title +'';\r\n }\r\n }\r\n return str;\r\n }(),\r\n content: '
      '+ function(){\r\n var len = tab.length, ii = 1, str = '';\r\n if(len > 0){\r\n str = '
    • '+ (tab[0].content || 'no content') +'
    • ';\r\n for(; ii < len; ii++){\r\n str += '
    • '+ (tab[ii].content || 'no content') +'
    • ';\r\n }\r\n }\r\n return str;\r\n }() +'
    ',\r\n success: function(layero){\r\n var btn = layero.find('.layui-layer-title').children();\r\n var main = layero.find('.layui-layer-tabmain').children();\r\n btn.on('mousedown', function(e){\r\n e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\r\n var othis = $(this), index = othis.index();\r\n othis.addClass(THIS).siblings().removeClass(THIS);\r\n main.eq(index).show().siblings().hide();\r\n typeof options.change === 'function' && options.change(index);\r\n });\r\n typeof success === 'function' && success(layero);\r\n }\r\n }, options));\r\n};\r\n\r\n// 图片层\r\nlayer.photos = function(options, loop, key){\r\n var dict = {};\r\n\r\n // 默认属性\r\n options = $.extend(true, {\r\n toolbar: true,\r\n footer: true\r\n }, options);\r\n\r\n if(!options.photos) return;\r\n \r\n // 若 photos 并非选择器或 jQuery 对象,则为普通 object\r\n var isObject = !(typeof options.photos === 'string' || options.photos instanceof $);\r\n var photos = isObject ? options.photos : {};\r\n var data = photos.data || [];\r\n var start = photos.start || 0;\r\n var success = options.success;\r\n \r\n dict.imgIndex = (start|0) + 1;\r\n options.img = options.img || 'img';\r\n delete options.success;\r\n \r\n // 若 options.photos 不是一个对象\r\n if(!isObject){ // 页面直接获取\r\n var parent = $(options.photos), pushData = function(){\r\n data = [];\r\n parent.find(options.img).each(function(index){\r\n var othis = $(this);\r\n othis.attr('layer-index', index);\r\n data.push({\r\n alt: othis.attr('alt'),\r\n pid: othis.attr('layer-pid'),\r\n src: othis.attr('lay-src') || othis.attr('layer-src') || othis.attr('src'),\r\n thumb: othis.attr('src')\r\n });\r\n });\r\n };\r\n \r\n pushData();\r\n \r\n if (data.length === 0) return;\r\n \r\n loop || parent.on('click', options.img, function(){\r\n pushData();\r\n var othis = $(this), index = othis.attr('layer-index'); \r\n layer.photos($.extend(options, {\r\n photos: {\r\n start: index,\r\n data: data,\r\n tab: options.tab\r\n },\r\n full: options.full\r\n }), true);\r\n });\r\n \r\n // 不直接弹出\r\n if (!loop) return;\r\n } else if (data.length === 0){\r\n return layer.msg('没有图片');\r\n }\r\n \r\n // 上一张\r\n dict.imgprev = function(key){\r\n dict.imgIndex--;\r\n if(dict.imgIndex < 1){\r\n dict.imgIndex = data.length;\r\n }\r\n dict.tabimg(key);\r\n };\r\n \r\n // 下一张\r\n dict.imgnext = function(key,errorMsg){\r\n dict.imgIndex++;\r\n if(dict.imgIndex > data.length){\r\n dict.imgIndex = 1;\r\n if (errorMsg) {return}\r\n }\r\n dict.tabimg(key)\r\n };\r\n \r\n // 方向键\r\n dict.keyup = function(event){\r\n if(!dict.end){\r\n var code = event.keyCode;\r\n event.preventDefault();\r\n if(code === 37){\r\n dict.imgprev(true);\r\n } else if(code === 39) {\r\n dict.imgnext(true);\r\n } else if(code === 27) {\r\n layer.close(dict.index);\r\n }\r\n }\r\n }\r\n \r\n // 切换\r\n dict.tabimg = function(key){\r\n if(data.length <= 1) return;\r\n photos.start = dict.imgIndex - 1;\r\n layer.close(dict.index);\r\n return layer.photos(options, true, key);\r\n }\r\n\r\n dict.isNumber = function (n) {\r\n return typeof n === 'number' && !isNaN(n);\r\n }\r\n\r\n dict.image = {};\r\n\r\n dict.getTransform = function(opts){\r\n var transforms = [];\r\n var rotate = opts.rotate;\r\n var scaleX = opts.scaleX;\r\n var scale = opts.scale;\r\n\r\n if (dict.isNumber(rotate) && rotate !== 0) {\r\n transforms.push('rotate(' + rotate + 'deg)');\r\n }\r\n\r\n if (dict.isNumber(scaleX) && scaleX !== 1) {\r\n transforms.push('scaleX(' + scaleX + ')');\r\n }\r\n\r\n if (dict.isNumber(scale)) {\r\n transforms.push('scale(' + scale + ')');\r\n }\r\n\r\n return transforms.length ? transforms.join(' ') : 'none';\r\n }\r\n \r\n // 一些动作\r\n dict.event = function(layero, index, that){\r\n // 上一张\r\n dict.main.find('.layui-layer-photos-prev').on('click', function(event){\r\n event.preventDefault();\r\n dict.imgprev(true);\r\n }); \r\n \r\n // 下一张\r\n dict.main.find('.layui-layer-photos-next').on('click', function(event){\r\n event.preventDefault();\r\n dict.imgnext(true);\r\n });\r\n \r\n $(document).on('keyup', dict.keyup);\r\n\r\n // 头部工具栏事件\r\n layero.off('click').on('click','*[toolbar-event]', function () {\r\n var othis = $(this);\r\n var event = othis.attr('toolbar-event');\r\n switch (event) {\r\n case 'rotate':\r\n dict.image.rotate = ((dict.image.rotate || 0) + Number(othis.attr('data-option'))) % 360;\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'scalex':\r\n dict.image.scaleX = dict.image.scaleX === -1 ? 1 : -1;\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'zoom':\r\n var ratio = Number(othis.attr('data-option'));\r\n dict.image.scale = (dict.image.scale || 1) + ratio;\r\n // 缩小状态最小值\r\n if (ratio < 0 && dict.image.scale < 0 - ratio) {\r\n dict.image.scale = 0 - ratio;\r\n }\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'reset':\r\n dict.image.scaleX = 1;\r\n dict.image.scale = 1;\r\n dict.image.rotate = 0;\r\n dict.imgElem.css({\r\n transform: 'none'\r\n });\r\n break;\r\n case 'close':\r\n layer.close(index);\r\n break;\r\n }\r\n that.offset();\r\n that.auto(index);\r\n });\r\n \r\n // 鼠标滚轮缩放图片事件\r\n dict.main.on('mousewheel DOMMouseScroll', function(e) {\r\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail;\r\n var zoomElem = dict.main.find('[toolbar-event=\"zoom\"]');\r\n if (delta > 0) {\r\n zoomElem.eq(0).trigger('click');\r\n } else {\r\n zoomElem.eq(1).trigger('click');\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n // 滑动切换图片事件,仅限 layui 中 \r\n if(window.layui || window.lay){\r\n var lay = window.layui.lay || window.lay;\r\n var touchEndCallback = function(e, state){\r\n var duration = Date.now() - state.timeStart;\r\n var speed = state.distanceX / duration;\r\n var threshold = win.width() / 3;\r\n var shouldSwipe = Math.abs(speed) > 0.25 || Math.abs(state.distanceX) > threshold;\r\n if(!shouldSwipe) return;\r\n if(state.direction === 'left'){\r\n dict.imgnext(true);\r\n }else if(state.direction === 'right'){\r\n dict.imgprev(true);\r\n }\r\n }\r\n\r\n $.each([that.shadeo, dict.main], function(i, elem){\r\n lay.touchSwipe(elem, {\r\n onTouchEnd: touchEndCallback\r\n })\r\n })\r\n }\r\n };\r\n \r\n // 图片预加载\r\n function loadImage(url, callback, error) { \r\n var img = new Image();\r\n img.src = url; \r\n if(img.complete){\r\n return callback(img);\r\n }\r\n img.onload = function(){\r\n img.onload = null;\r\n callback(img);\r\n };\r\n img.onerror = function(e){\r\n img.onerror = null;\r\n error(e);\r\n }; \r\n }\r\n \r\n dict.loadi = layer.load(1, {\r\n shade: 'shade' in options ? false : [0.9, undefined, 'unset'],\r\n scrollbar: false\r\n });\r\n\r\n loadImage(data[start].src, function(img){\r\n layer.close(dict.loadi);\r\n \r\n var alt = data[start].alt || '';\r\n\r\n // 切换图片时不出现动画\r\n if(key) options.anim = -1;\r\n \r\n // 弹出图片层\r\n dict.index = layer.open($.extend({\r\n type: 1,\r\n id: 'layui-layer-photos',\r\n area: function(){\r\n var imgarea = [img.width, img.height];\r\n var winarea = [$(window).width() - 100, $(window).height() - 100];\r\n \r\n // 若实际图片的宽或者高比 屏幕大(那么进行缩放)\r\n if(!options.full && (imgarea[0]>winarea[0]||imgarea[1]>winarea[1])){\r\n var wh = [imgarea[0]/winarea[0],imgarea[1]/winarea[1]];// 取宽度缩放比例、高度缩放比例\r\n if(wh[0] > wh[1]){// 取缩放比例最大的进行缩放\r\n imgarea[0] = imgarea[0]/wh[0];\r\n imgarea[1] = imgarea[1]/wh[0];\r\n } else if(wh[0] < wh[1]){\r\n imgarea[0] = imgarea[0]/wh[1];\r\n imgarea[1] = imgarea[1]/wh[1];\r\n }\r\n }\r\n\r\n return [imgarea[0]+'px', imgarea[1]+'px']; \r\n }(),\r\n title: false,\r\n shade: [0.9, undefined, 'unset'],\r\n shadeClose: true,\r\n closeBtn: false,\r\n move: '.layer-layer-photos-main img',\r\n moveType: 1,\r\n scrollbar: false,\r\n moveOut: true,\r\n anim: 5,\r\n isOutAnim: false,\r\n skin: 'layui-layer-photos' + skin('photos'),\r\n content: '
    '\r\n + '\"'+'\r\n + function(){\r\n var arr = ['
    '];\r\n\r\n // 左右箭头翻页\r\n if (data.length > 1) {\r\n arr.push(['
    ',\r\n '',\r\n '',\r\n '
    '].join(''));\r\n }\r\n\r\n // 头部工具栏\r\n if (options.toolbar) {\r\n arr.push([\r\n '
    ',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '
    '\r\n ].join(''));\r\n }\r\n\r\n // 底部栏\r\n if (options.footer) {\r\n arr.push(['
    ',\r\n '

    '+ alt +'

    ',\r\n ''+ dict.imgIndex +' / '+ data.length +'',\r\n '查看原图',\r\n '
    '].join(''));\r\n }\r\n\r\n arr.push('
    ');\r\n return arr.join('');\r\n }()\r\n +'
    ',\r\n success: function(layero, index, that){\r\n dict.main = layero.find('.layer-layer-photos-main');\r\n dict.footer = layero.find('.layui-layer-photos-footer');\r\n dict.imgElem = dict.main.children('img');\r\n dict.event(layero, index, that);\r\n options.tab && options.tab(data[start], layero);\r\n typeof success === 'function' && success(layero);\r\n }, end: function(){\r\n dict.end = true;\r\n $(document).off('keyup', dict.keyup);\r\n }\r\n }, options));\r\n }, function(){\r\n layer.close(dict.loadi);\r\n layer.msg('当前图片地址异常,
    是否继续查看下一张?', {\r\n time: 30000, \r\n btn: ['下一张', '不看了'], \r\n yes: function(){\r\n data.length > 1 && dict.imgnext(true,true);\r\n }\r\n });\r\n });\r\n};\r\n\r\n// 主入口\r\nready.run = function(_$){\r\n $ = _$;\r\n win = $(window);\r\n \r\n // 移动端兼容性处理\r\n // https://gitee.com/layui/layui/issues/I81WGC\r\n // https://github.com/jquery/jquery/issues/1729\r\n var agent = navigator.userAgent.toLowerCase();\r\n var isMobile = /android|iphone|ipod|ipad|ios/.test(agent)\r\n var _win = $(window);\r\n if(isMobile){\r\n $.each({Height: \"height\", Width: \"width\"}, function(propSuffix, funcName){\r\n var propName = 'inner' + propSuffix;\r\n win[funcName] = function(){\r\n return propName in window \r\n ? window[propName]\r\n : _win[funcName]()\r\n }\r\n })\r\n }\r\n doms.html = $('html');\r\n layer.open = function(deliver){\r\n var o = new Class(deliver);\r\n return o.index;\r\n };\r\n};\r\n\r\n// 加载方式\r\nwindow.layui && layui.define ? (\r\n layer.ready(),\r\n layui.define(['jquery','lay'], function(exports){ // layui\r\n layer.path = layui.cache.dir;\r\n ready.run(layui.$);\r\n\r\n // export api\r\n window.layer = layer;\r\n exports('layer', layer);\r\n })\r\n) : (\r\n (typeof define === 'function' && define.amd) ? define(['jquery'], function(){ // requirejs\r\n ready.run(window.jQuery);\r\n return layer;\r\n }) : function(){ // 普通 script 标签引入\r\n layer.ready();\r\n ready.run(window.jQuery);\r\n }()\r\n);\r\n\r\n}(window);\r\n","/**\n * util 工具组件\n */\n\nlayui.define('jquery', function(exports){\n \"use strict\";\n\n var $ = layui.$;\n var hint = layui.hint();\n\n // 外部接口\n var util = {\n // 固定块\n fixbar: function(options){\n var ELEM = 'layui-fixbar';\n var $doc = $(document);\n\n // 默认可选项\n options = $.extend(true, {\n target: 'body', // fixbar 的插入目标选择器\n bars: [], // bar 信息\n \"default\": true, // 是否显示默认 bar\n margin: 160, // 出现 top bar 的滚动条高度临界值\n duration: 320 // top bar 等动画时长(毫秒)\n }, options);\n\n // 目标元素对象\n var $target = $(options.target);\n\n // 滚动条所在元素对象\n var $scroll = options.scroll\n ? $(options.scroll)\n : $(options.target === 'body' ? $doc : $target)\n\n // 是否提供默认图标\n if(options['default']){\n // 兼容旧版本的一些属性\n if(options.bar1){\n options.bars.push({\n type: 'bar1',\n icon: 'layui-icon-chat'\n });\n }\n if(options.bar2){\n options.bars.push({\n type: 'bar2',\n icon: 'layui-icon-help'\n });\n }\n // 默认 top bar\n options.bars.push({\n type: 'top',\n icon: 'layui-icon-top'\n });\n }\n\n var elem = $('
      ').addClass(ELEM);\n var elemTopBar;\n\n // 遍历生成 bars 节点\n layui.each(options.bars, function(i, item){\n var elemBar = $('
    • ');\n\n // 设置 bar 相关属性\n elemBar.addClass(item.icon).attr({\n 'lay-type': item.type,\n 'style': item.style || (options.bgcolor ? 'background-color: '+ options.bgcolor : '')\n }).html(item.content);\n\n // bar 点击事件\n elemBar.on('click', function(){\n var type = $(this).attr('lay-type');\n if(type === 'top'){\n (\n options.target === 'body'\n ? $('html,body')\n : $scroll\n ).animate({\n scrollTop : 0\n }, options.duration);\n }\n typeof options.click === 'function' && options.click.call(this, type);\n });\n\n // 自定义任意事件\n if(layui.type(options.on) === 'object'){\n layui.each(options.on, function(eventName, callback){\n elemBar.on(eventName, function(){\n var type = $(this).attr('lay-type');\n typeof callback === 'function' && callback.call(this, type);\n });\n })\n }\n\n // 获得 top bar 节点\n if(item.type === 'top'){\n elemBar.addClass('layui-fixbar-top');\n elemTopBar = elemBar;\n }\n\n elem.append(elemBar); // 插入 bar 节点\n });\n\n // 若目标元素已存在 fixbar,则移除旧的节点\n $target.find('.'+ ELEM).remove();\n\n // 向目标元素插入 fixbar 节点\n typeof options.css === 'object' && elem.css(options.css);\n $target.append(elem);\n\n // top bar 的显示隐藏\n if(elemTopBar){\n var lock;\n var setTopBar = (function setTopBar(){\n var top = $scroll.scrollTop();\n if(top >= options.margin){\n lock || (elemTopBar.show(), lock = 1);\n } else {\n lock && (elemTopBar.hide(), lock = 0);\n }\n return setTopBar;\n })();\n }\n\n // 根据 scrollbar 设置 fixbar 相关状态\n var timer;\n $scroll.on('scroll', function(){\n if(!setTopBar) return;\n clearTimeout(timer);\n timer = setTimeout(function(){\n setTopBar();\n }, 100);\n });\n },\n\n // 倒计时\n countdown: function(options){\n var that = this;\n\n // 默认可选项\n options = $.extend(true, {\n date: new Date(),\n now: new Date()\n }, options);\n\n // 兼容旧版参数\n var args = arguments;\n if(args.length > 1){\n options.date = new Date(args[0]);\n options.now = new Date(args[1]);\n options.clock = args[2];\n }\n\n // 实例对象\n var inst = {\n options: options,\n clear: function(){ // 清除计时器\n clearTimeout(inst.timer);\n },\n reload: function(opts){ // 重置倒计时\n this.clear();\n $.extend(true, this.options, {\n now: new Date()\n }, opts);\n count();\n }\n };\n\n typeof options.ready === 'function' && options.ready();\n\n // 计算倒计时\n var count = (function fn(){\n var date = new Date(options.date);\n var now = new Date(options.now);\n var countTime = function(time){\n return time > 0 ? time : 0;\n }(date.getTime() - now.getTime());\n var result = {\n d: Math.floor(countTime/(1000*60*60*24)), // 天\n h: Math.floor(countTime/(1000*60*60)) % 24, // 时\n m: Math.floor(countTime/(1000*60)) % 60, // 分\n s: Math.floor(countTime/1000) % 60 // 秒\n };\n var next = function(){\n now.setTime(now.getTime() + 1000);\n options.now = now;\n count();\n };\n\n // 兼容旧版返回值\n if(args.length > 1) result = [result.d,result.h,result.m,result.s]\n\n // 计时 - 以秒间隔\n inst.timer = setTimeout(next, 1000);\n typeof options.clock === 'function' && options.clock(result, inst);\n\n // 计时完成\n if(countTime <= 0){\n clearTimeout(inst.timer);\n typeof options.done === 'function' && options.done(result, inst);\n }\n\n return fn;\n })();\n\n return inst;\n },\n\n // 某个时间在当前时间的多久前\n timeAgo: function(time, onlyDate){\n var that = this;\n var arr = [[], []];\n var stamp = new Date().getTime() - new Date(time).getTime();\n\n // 返回具体日期\n if(stamp > 1000*60*60*24*31){\n stamp = new Date(time);\n arr[0][0] = that.digit(stamp.getFullYear(), 4);\n arr[0][1] = that.digit(stamp.getMonth() + 1);\n arr[0][2] = that.digit(stamp.getDate());\n\n // 是否输出时间\n if(!onlyDate){\n arr[1][0] = that.digit(stamp.getHours());\n arr[1][1] = that.digit(stamp.getMinutes());\n arr[1][2] = that.digit(stamp.getSeconds());\n }\n return arr[0].join('-') + ' ' + arr[1].join(':');\n }\n\n // 30 天以内,返回「多久前」\n if(stamp >= 1000*60*60*24){\n return ((stamp/1000/60/60/24)|0) + ' 天前';\n } else if(stamp >= 1000*60*60){\n return ((stamp/1000/60/60)|0) + ' 小时前';\n } else if(stamp >= 1000*60*3){ // 3 分钟以内为:刚刚\n return ((stamp/1000/60)|0) + ' 分钟前';\n } else if(stamp < 0){\n return '未来';\n } else {\n return '刚刚';\n }\n },\n\n // 数字前置补零\n digit: function(num, length){\n var str = '';\n num = String(num);\n length = length || 2;\n for(var i = num.length; i < length; i++){\n str += '0';\n }\n return num < Math.pow(10, length) ? str + (num|0) : num;\n },\n\n // 转化为日期格式字符\n toDateString: function(time, format, options){\n // 若 null 或空字符,则返回空字符\n if(time === null || time === '') return '';\n\n // 引用自 dayjs\n // https://github.com/iamkun/dayjs/blob/v1.11.9/src/constant.js#L30\n var REGEX_FORMAT = /\\[([^\\]]+)]|y{1,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|SSS/g;\n var that = this;\n var date = new Date(function(){\n if(!time) return;\n return isNaN(time) ? time : (typeof time === 'string' ? parseInt(time) : time)\n }() || new Date())\n\n if(!date.getDate()) return hint.error('Invalid millisecond for \"util.toDateString(millisecond)\"'), '';\n\n var years = date.getFullYear();\n var month = date.getMonth();\n var days = date.getDate();\n var hours = date.getHours();\n var minutes = date.getMinutes();\n var seconds = date.getSeconds();\n var milliseconds = date.getMilliseconds();\n\n var defaultMeridiem = function(hours, minutes){\n var hm = hours * 100 + minutes;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1100) {\n return '上午';\n } else if (hm < 1300) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n }\n return '晚上';\n };\n\n var meridiem = (options && options.customMeridiem) || defaultMeridiem;\n\n var matches = {\n yy: function(){return String(years).slice(-2);},\n yyyy: function(){return that.digit(years, 4);},\n M: function(){return String(month + 1);},\n MM: function(){return that.digit(month + 1);},\n d: function(){return String(days);},\n dd: function(){return that.digit(days);},\n H: function(){return String(hours);},\n HH: function(){return that.digit(hours);},\n h: function(){return String(hours % 12 || 12);},\n hh: function(){return that.digit(hours % 12 || 12);},\n A: function(){return meridiem(hours, minutes);},\n m: function(){return String(minutes);},\n mm: function(){return that.digit(minutes);},\n s: function(){return String(seconds);},\n ss: function(){return that.digit(seconds);},\n SSS: function(){return that.digit(milliseconds, 3);}\n }\n\n format = format || 'yyyy-MM-dd HH:mm:ss';\n\n return format.replace(REGEX_FORMAT, function(match, $1) {\n return $1 || (matches[match] && matches[match]()) || match;\n });\n },\n\n // 转义 html\n escape: function(html){\n var exp = /[<\"'>]|&(?=#[a-zA-Z0-9]+)/g;\n if(html === undefined || html === null) return '';\n\n html += '';\n if(!exp.test(html)) return html;\n\n return html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''').replace(/\"/g, '"');\n },\n\n // 还原转义的 html\n unescape: function(html){\n if(html === undefined || html === null) html = '';\n html += '';\n\n return html.replace(/\\&/g, '&')\n .replace(/\\</g, '<').replace(/\\>/g, '>')\n .replace(/\\'/g, '\\'').replace(/\\"/g, '\"');\n },\n\n // 打开新窗口\n openWin: function(options){\n var win;\n options = options || {};\n win = options.window || window.open((options.url || ''), options.target, options.specs);\n if(options.url) return;\n win.document.open('text/html', 'replace');\n win.document.write(options.content || '');\n win.document.close();\n },\n\n // 让指定的元素保持在可视区域\n toVisibleArea: function(options){\n options = $.extend({\n margin: 160, // 触发动作的边界值\n duration: 200, // 动画持续毫秒数\n type: 'y' // 触发方向,x 水平、y 垂直\n }, options);\n\n if(!options.scrollElem[0] || !options.thisElem[0]) return;\n\n var scrollElem = options.scrollElem // 滚动元素\n var thisElem = options.thisElem // 目标元素\n var vertical = options.type === 'y' // 是否垂直方向\n var SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' // 滚动方法\n var OFFSET_NAME = vertical ? 'top' : 'left' // 坐标方式\n var scrollValue = scrollElem[SCROLL_NAME]() // 当前滚动距离\n var size = scrollElem[vertical ? 'height' : 'width']() // 滚动元素的尺寸\n var scrollOffset = scrollElem.offset()[OFFSET_NAME] // 滚动元素所处位置\n var thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffset // 目标元素当前的所在位置\n var obj = {};\n\n // 边界满足条件\n if(thisOffset > size - options.margin || thisOffset < options.margin){\n obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue\n scrollElem.animate(obj, options.duration);\n }\n },\n\n /**\n * 批量事件\n * @param {string} [attr=\"lay-on\"] - 触发事件的元素属性名\n * @param {Object.} events - 事件集合\n * @param {Object} [options] - 参数的更多选项\n * @param {(string|HTMLElement|JQuery)} [options.elem=\"body\"] - 触发事件的委托元素\n * @param {string} [options.trigger=\"click\"] - 事件触发的方式\n * @returns {Object} 返回当前 events 参数设置的事件集合\n */\n on: function(attr, events, options) {\n // 若参数一为 object 类型,则为事件集,且省略 attr\n if (typeof attr === 'object') {\n options = events || {};\n events = attr;\n attr = options.attr || 'lay-on'; // 默认属性名\n }\n\n // 更多选项\n options = $.extend({\n elem: 'body',\n trigger: 'click'\n }, typeof options === 'object' ? options : {\n trigger: options // 兼容旧版\n });\n\n var elem = options.elem = $(options.elem);\n var attrSelector = '['+ attr +']';\n var DATANAME = 'UTIL_ON_DATA'; // 缓存在委托元素上的 data-* 属性名\n\n if (!elem[0]) return; // 若委托元素不存在\n\n // 初始化 data 默认值,以委托元素为存储单元\n if (!elem.data(DATANAME)) {\n elem.data(DATANAME, {\n events: {},\n callbacks: {}\n });\n }\n\n // 读取 data 缓存\n var dataCache = elem.data(DATANAME);\n var callbacks = dataCache.callbacks;\n\n // 根据 attr 记录事件集合\n events = dataCache.events[attr] = $.extend(true, dataCache.events[attr], events);\n\n // 清除事件委托,避免重复绑定\n elem.off(options.trigger, attrSelector, callbacks[attr]);\n\n // 绑定事件委托\n elem.on(\n options.trigger,\n attrSelector,\n callbacks[attr] = function(e) {\n var othis = $(this);\n var key = othis.attr(attr);\n typeof events[key] === 'function' && events[key].call(this, othis, e);\n }\n );\n\n return events;\n }\n };\n\n // 兼容旧版\n util.event = util.on;\n\n // 输出接口\n exports('util', util);\n});\n","/**\r\n * dropdown \r\n * 下拉菜单组件\r\n */\r\n\r\nlayui.define(['jquery', 'laytpl', 'lay', 'util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var laytpl = layui.laytpl;\r\n var util = layui.util;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n var clickOrMousedown = (device.mobile ? 'touchstart' : 'mousedown');\r\n \r\n // 模块名\r\n var MOD_NAME = 'dropdown';\r\n var MOD_INDEX = 'layui_'+ MOD_NAME +'_index'; // 模块索引名\r\n var MOD_ID = 'lay-' + MOD_NAME + '-id';\r\n\r\n // 外部接口\r\n var dropdown = {\r\n config: {\r\n customName: { // 自定义 data 字段名\r\n id: 'id',\r\n title: 'title',\r\n children: 'child'\r\n }\r\n },\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n reloadData: function(options){\r\n dropdown.reloadData(id, options);\r\n },\r\n close: function () {\r\n that.remove()\r\n },\r\n open: function () {\r\n that.render()\r\n }\r\n }\r\n };\r\n\r\n // 字符常量\r\n var STR_ELEM = 'layui-dropdown';\r\n var STR_HIDE = 'layui-hide';\r\n var STR_DISABLED = 'layui-disabled';\r\n var STR_NONE = 'layui-none';\r\n var STR_ITEM_UP = 'layui-menu-item-up';\r\n var STR_ITEM_DOWN = 'layui-menu-item-down';\r\n var STR_MENU_TITLE = 'layui-menu-body-title';\r\n var STR_ITEM_GROUP = 'layui-menu-item-group';\r\n var STR_ITEM_PARENT = 'layui-menu-item-parent';\r\n var STR_ITEM_DIV = 'layui-menu-item-divider';\r\n var STR_ITEM_CHECKED = 'layui-menu-item-checked';\r\n var STR_ITEM_CHECKED2 = 'layui-menu-item-checked2';\r\n var STR_MENU_PANEL = 'layui-menu-body-panel';\r\n var STR_MENU_PANEL_L = 'layui-menu-body-panel-left';\r\n var STR_ELEM_SHADE = 'layui-dropdown-shade';\r\n \r\n var STR_GROUP_TITLE = '.'+ STR_ITEM_GROUP + '>.'+ STR_MENU_TITLE;\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++dropdown.index;\r\n that.config = $.extend({}, that.config, dropdown.config, options);\r\n that.init();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n trigger: 'click', // 事件类型\r\n content: '', // 自定义菜单内容\r\n className: '', // 自定义样式类名\r\n style: '', // 设置面板 style 属性\r\n show: false, // 是否初始即显示菜单面板\r\n isAllowSpread: true, // 是否允许菜单组展开收缩\r\n isSpreadItem: true, // 是否初始展开子菜单\r\n data: [], // 菜单数据结构\r\n delay: [200, 300], // 延时显示或隐藏的毫秒数,若为 number 类型,则表示显示和隐藏的延迟时间相同,trigger 为 hover 时才生效\r\n shade: 0, // 遮罩\r\n accordion: false // 手风琴效果,仅菜单组生效。基础菜单需要在容器上追加 'lay-accordion' 属性。\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options, type){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.init(true, type);\r\n };\r\n\r\n // 初始化准备\r\n Class.prototype.init = function(rerender, type){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n dropdown.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if(!rerender && elem[0] && elem.attr(MOD_ID)){\r\n var newThat = thisModule.getThis(elem.attr(MOD_ID));\r\n if(!newThat) return;\r\n\r\n return newThat.reload(options, type);\r\n }\r\n\r\n options.elem = $(options.elem);\r\n \r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n elem.attr(MOD_ID, options.id);\r\n\r\n // 初始化自定义字段名\r\n options.customName = $.extend({}, dropdown.config.customName, options.customName);\r\n\r\n if(options.show || (type === 'reloadData' && that.elemView && $('body').find(that.elemView.get(0)).length)) that.render(rerender, type); //初始即显示或者面板弹出之后执行了刷新数据\r\n that.events(); // 事件\r\n };\r\n \r\n // 渲染\r\n Class.prototype.render = function(rerender, type){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var elemBody = $('body');\r\n \r\n // 默认菜单内容\r\n var getDefaultView = function(){\r\n var elemUl = $('
        ');\r\n if(options.data.length > 0 ){\r\n eachItemView(elemUl, options.data)\r\n } else {\r\n elemUl.html('
      • 暂无数据
      • ');\r\n }\r\n return elemUl;\r\n };\r\n \r\n // 遍历菜单项\r\n var eachItemView = function(views, data){\r\n // var views = [];\r\n\r\n layui.each(data, function(index, item){\r\n // 是否存在子级\r\n var isChild = item[customName.children] && item[customName.children].length > 0;\r\n var isSpreadItem = ('isSpreadItem' in item) ? item.isSpreadItem : options.isSpreadItem\r\n var title = function(title){\r\n var templet = item.templet || options.templet;\r\n if(templet){\r\n title = typeof templet === 'function' \r\n ? templet(item)\r\n : laytpl(templet).render(item);\r\n }\r\n return title;\r\n }(util.escape(item[customName.title]));\r\n \r\n // 初始类型\r\n var type = function(){\r\n if(isChild){\r\n item.type = item.type || 'parent';\r\n }\r\n if(item.type){\r\n return ({\r\n group: 'group'\r\n ,parent: 'parent'\r\n ,'-': '-'\r\n })[item.type] || 'parent';\r\n }\r\n return '';\r\n }();\r\n\r\n if(type !== '-' && (!item[customName.title] && !item[customName.id] && !isChild)) return;\r\n \r\n //列表元素\r\n var viewLi = $([''\r\n \r\n //标题区\r\n ,function(){\r\n //是否超文本\r\n var viewText = ('href' in item) ? (\r\n ''+ title +''\r\n ) : title;\r\n \r\n //是否存在子级\r\n if(isChild){\r\n return '
        '+ viewText + function(){\r\n if(type === 'parent'){\r\n return '';\r\n } else if(type === 'group' && options.isAllowSpread){\r\n return '';\r\n } else {\r\n return '';\r\n }\r\n }() +'
        '\r\n \r\n }\r\n return '
        '+ viewText +'
        ';\r\n }()\r\n ,''].join(''));\r\n \r\n viewLi.data('item', item);\r\n \r\n //子级区\r\n if(isChild){\r\n var elemPanel = $('
        ');\r\n var elemUl = $('
          ');\r\n\r\n if(type === 'parent'){\r\n elemPanel.append(eachItemView(elemUl, item[customName.children]));\r\n viewLi.append(elemPanel);\r\n } else {\r\n viewLi.append(eachItemView(elemUl, item[customName.children]));\r\n }\r\n }\r\n\r\n views.append(viewLi);\r\n });\r\n return views;\r\n };\r\n \r\n // 主模板\r\n var TPL_MAIN = ['
          '\r\n ,'
          '].join('');\r\n \r\n // 如果是右键事件,则每次触发事件时,将允许重新渲染\r\n if(options.trigger === 'contextmenu' || lay.isTopElem(options.elem[0])) rerender = true;\r\n \r\n // 判断是否已经打开了下拉菜单面板\r\n if(!rerender && options.elem.data(MOD_INDEX +'_opened')) return;\r\n\r\n // 记录模板对象\r\n that.elemView = $('.' + STR_ELEM + '[' + MOD_ID + '=\"' + options.id + '\"]');\r\n if (type === 'reloadData' && that.elemView.length) {\r\n that.elemView.html(options.content || getDefaultView());\r\n } else {\r\n that.elemView = $(TPL_MAIN);\r\n that.elemView.append(options.content || getDefaultView());\r\n\r\n // 初始化某些属性\r\n if(options.className) that.elemView.addClass(options.className);\r\n if(options.style) that.elemView.attr('style', options.style);\r\n\r\n // 记录当前执行的实例索引\r\n dropdown.thisId = options.id;\r\n\r\n // 插入视图\r\n that.remove(); // 移除非当前绑定元素的面板\r\n elemBody.append(that.elemView);\r\n options.elem.data(MOD_INDEX +'_opened', true);\r\n\r\n // 遮罩\r\n var shade = options.shade ? ('
          ') : '';\r\n that.elemView.before(shade);\r\n\r\n // 如果是鼠标移入事件,则鼠标移出时自动关闭\r\n if(options.trigger === 'mouseenter'){\r\n that.elemView.on('mouseenter', function(){\r\n clearTimeout(thisModule.timer);\r\n }).on('mouseleave', function(){\r\n that.delayRemove();\r\n });\r\n }\r\n }\r\n\r\n // 坐标定位\r\n that.position();\r\n thisModule.prevElem = that.elemView; // 记录当前打开的元素,以便在下次关闭\r\n thisModule.prevElem.data('prevElem', options.elem); // 将当前绑定的元素,记录在打开元素的 data 对象中\r\n \r\n // 阻止全局事件\r\n that.elemView.find('.layui-menu').on(clickOrMousedown, function(e){\r\n layui.stope(e);\r\n });\r\n\r\n // 触发菜单列表事件\r\n that.elemView.find('.layui-menu li').on('click', function(e){\r\n var othis = $(this);\r\n var data = othis.data('item') || {};\r\n var isChild = data[customName.children] && data[customName.children].length > 0;\r\n var isClickAllScope = options.clickScope === 'all'; // 是否所有父子菜单均触发点击事件\r\n\r\n if(data.disabled) return; // 菜单项禁用状态\r\n \r\n // 普通菜单项点击后的回调及关闭面板\r\n if((!isChild || isClickAllScope) && data.type !== '-'){\r\n var ret = typeof options.click === 'function' \r\n ? options.click(data, othis) \r\n : null;\r\n \r\n ret === false || (isChild || that.remove());\r\n layui.stope(e);\r\n }\r\n });\r\n \r\n // 触发菜单组展开收缩\r\n that.elemView.find(STR_GROUP_TITLE).on('click', function(e){\r\n var othis = $(this);\r\n var elemGroup = othis.parent();\r\n var data = elemGroup.data('item') || {};\r\n \r\n if(data.type === 'group' && options.isAllowSpread){\r\n thisModule.spread(elemGroup, options.accordion);\r\n }\r\n });\r\n\r\n // 组件打开完毕的事件\r\n typeof options.ready === 'function' && options.ready(\r\n that.elemView, \r\n options.elem\r\n );\r\n };\r\n \r\n // 位置定位\r\n Class.prototype.position = function(obj){\r\n var that = this;\r\n var options = that.config;\r\n \r\n lay.position(options.elem[0], that.elemView[0], {\r\n position: options.position,\r\n e: that.e,\r\n clickType: options.trigger === 'contextmenu' ? 'right' : null,\r\n align: options.align || null\r\n });\r\n };\r\n \r\n // 删除视图\r\n Class.prototype.remove = function(){\r\n var that = this;\r\n var options = that.config;\r\n var prevContentElem = thisModule.prevElem;\r\n \r\n // 若存在已打开的面板元素,则移除\r\n if(prevContentElem){\r\n var prevId = prevContentElem.attr(MOD_ID);\r\n var prevTriggerElem = prevContentElem.data('prevElem');\r\n var prevInstance = thisModule.getThis(prevId);\r\n var prevOnClose = prevInstance.config.close;\r\n \r\n prevTriggerElem && prevTriggerElem.data(MOD_INDEX +'_opened', false);\r\n prevContentElem.remove();\r\n delete thisModule.prevElem;\r\n typeof prevOnClose === 'function' && prevOnClose.call(prevInstance.config, prevTriggerElem);\r\n }\r\n lay('.' + STR_ELEM_SHADE).remove();\r\n };\r\n\r\n Class.prototype.normalizedDelay = function(){\r\n var that = this;\r\n var options = that.config;\r\n var delay = [].concat(options.delay);\r\n \r\n return {\r\n show: delay[0],\r\n hide: delay[1] !== undefined ? delay[1] : delay[0] \r\n }\r\n }\r\n \r\n // 延迟删除视图\r\n Class.prototype.delayRemove = function(){\r\n var that = this;\r\n var options = that.config;\r\n clearTimeout(thisModule.timer);\r\n\r\n thisModule.timer = setTimeout(function(){\r\n that.remove();\r\n }, that.normalizedDelay().hide);\r\n };\r\n \r\n // 事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 若传入 hover,则解析为 mouseenter\r\n if(options.trigger === 'hover') options.trigger = 'mouseenter';\r\n\r\n // 解除上一个事件\r\n if(that.prevElem) that.prevElem.off(options.trigger, that.prevElemCallback);\r\n\r\n // 是否鼠标移入时触发\r\n var isMouseEnter = options.trigger === 'mouseenter';\r\n \r\n // 记录被绑定的元素及回调\r\n that.prevElem = options.elem;\r\n that.prevElemCallback = function(e){\r\n clearTimeout(thisModule.timer);\r\n that.e = e;\r\n\r\n // 若为鼠标移入事件,则延迟触发\r\n isMouseEnter ? (\r\n thisModule.timer = setTimeout(function(){\r\n that.render();\r\n }, that.normalizedDelay().show)\r\n ) : that.render();\r\n \r\n e.preventDefault();\r\n };\r\n\r\n // 触发元素事件\r\n options.elem.on(options.trigger, that.prevElemCallback);\r\n \r\n // 如果是鼠标移入事件\r\n if (isMouseEnter) {\r\n // 执行鼠标移出事件\r\n options.elem.on('mouseleave', function(){\r\n that.delayRemove();\r\n });\r\n }\r\n };\r\n \r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n \r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n // 设置菜单组展开和收缩状态\r\n thisModule.spread = function(othis, isAccordion){\r\n var contentElem = othis.children('ul');\r\n var needSpread = othis.hasClass(STR_ITEM_UP);\r\n var ANIM_MS = 200;\r\n\r\n // 动画执行完成后的操作\r\n var complete = function() {\r\n $(this).css({'display': ''}); // 剔除临时 style,以适配外部样式的状态重置;\r\n };\r\n\r\n // 动画是否正在执行\r\n if (contentElem.is(':animated')) return;\r\n\r\n // 展开\r\n if (needSpread) {\r\n othis.removeClass(STR_ITEM_UP).addClass(STR_ITEM_DOWN);\r\n contentElem.hide().stop().slideDown(ANIM_MS, complete);\r\n } else { // 收缩\r\n contentElem.stop().slideUp(ANIM_MS, complete);\r\n othis.removeClass(STR_ITEM_DOWN).addClass(STR_ITEM_UP);\r\n }\r\n\r\n // 手风琴\r\n if (needSpread && isAccordion) {\r\n var groupSibs = othis.siblings('.' + STR_ITEM_DOWN);\r\n groupSibs.children('ul').stop().slideUp(ANIM_MS, complete);\r\n groupSibs.removeClass(STR_ITEM_DOWN).addClass(STR_ITEM_UP);\r\n }\r\n };\r\n \r\n // 全局事件\r\n (function(){\r\n var _WIN = $(window);\r\n var _DOC = $(document);\r\n \r\n // 自适应定位\r\n _WIN.on('resize', function(){\r\n if(!dropdown.thisId) return;\r\n var that = thisModule.getThis(dropdown.thisId);\r\n if(!that) return;\r\n \r\n if((that.elemView && !that.elemView[0]) || !$('.'+ STR_ELEM)[0]){\r\n return false;\r\n }\r\n \r\n var options = that.config;\r\n \r\n if(options.trigger === 'contextmenu'){\r\n that.remove();\r\n } else {\r\n that.position();\r\n }\r\n });\r\n \r\n \r\n \r\n // 点击任意处关闭\r\n _DOC.on(clickOrMousedown, function(e){\r\n if(!dropdown.thisId) return;\r\n var that = thisModule.getThis(dropdown.thisId)\r\n if(!that) return;\r\n \r\n var options = that.config;\r\n \r\n // 若触发的是绑定的元素,或者属于绑定元素的子元素,则不关闭\r\n // 满足条件:当前绑定的元素不是 body document,或者不是鼠标右键事件\r\n if(!(lay.isTopElem(options.elem[0]) || options.trigger === 'contextmenu')){\r\n if(\r\n e.target === options.elem[0] || \r\n options.elem.find(e.target)[0] ||\r\n (that.elemView && e.target === that.elemView[0]) ||\r\n (that.elemView && that.elemView.find(e.target)[0])\r\n ) return;\r\n }\r\n \r\n that.remove();\r\n });\r\n \r\n // 基础菜单的静态元素事件\r\n var ELEM_LI = '.layui-menu:not(.layui-dropdown-menu) li';\r\n _DOC.on('click', ELEM_LI, function(e){\r\n var othis = $(this);\r\n var parent = othis.parents('.layui-menu').eq(0);\r\n var isChild = othis.hasClass(STR_ITEM_GROUP) || othis.hasClass(STR_ITEM_PARENT);\r\n var filter = parent.attr('lay-filter') || parent.attr('id');\r\n var options = lay.options(this);\r\n \r\n // 非触发元素\r\n if(othis.hasClass(STR_ITEM_DIV)) return;\r\n\r\n // 非菜单组\r\n if(!isChild){\r\n // 选中\r\n parent.find('.'+ STR_ITEM_CHECKED).removeClass(STR_ITEM_CHECKED); // 清除选中样式\r\n parent.find('.'+ STR_ITEM_CHECKED2).removeClass(STR_ITEM_CHECKED2); // 清除父级菜单选中样式\r\n othis.addClass(STR_ITEM_CHECKED); //添加选中样式\r\n othis.parents('.'+ STR_ITEM_PARENT).addClass(STR_ITEM_CHECKED2); // 添加父级菜单选中样式\r\n\r\n options.title = options.title || $.trim(othis.children('.'+ STR_MENU_TITLE).text());\r\n \r\n // 触发事件\r\n layui.event.call(this, MOD_NAME, 'click('+ filter +')', options);\r\n }\r\n });\r\n \r\n // 基础菜单的展开收缩事件\r\n _DOC.on('click', (ELEM_LI + STR_GROUP_TITLE), function(e){\r\n var othis = $(this);\r\n var elemGroup = othis.parents('.'+ STR_ITEM_GROUP +':eq(0)');\r\n var options = lay.options(elemGroup[0]);\r\n var isAccordion = typeof othis.parents('.layui-menu').eq(0).attr('lay-accordion') === 'string';\r\n\r\n if(('isAllowSpread' in options) ? options.isAllowSpread : true){\r\n thisModule.spread(elemGroup, isAccordion);\r\n }\r\n });\r\n \r\n // 判断子级菜单是否超出屏幕\r\n var ELEM_LI_PAR = '.layui-menu .'+ STR_ITEM_PARENT\r\n _DOC.on('mouseenter', ELEM_LI_PAR, function(e){\r\n var othis = $(this);\r\n var elemPanel = othis.find('.'+ STR_MENU_PANEL);\r\n\r\n if(!elemPanel[0]) return;\r\n var rect = elemPanel[0].getBoundingClientRect();\r\n \r\n // 是否超出右侧屏幕\r\n if(rect.right > _WIN.width()){\r\n elemPanel.addClass(STR_MENU_PANEL_L);\r\n // 不允许超出左侧屏幕\r\n rect = elemPanel[0].getBoundingClientRect();\r\n if(rect.left < 0){\r\n elemPanel.removeClass(STR_MENU_PANEL_L);\r\n }\r\n }\r\n \r\n // 是否超出底部屏幕\r\n if(rect.bottom > _WIN.height()){\r\n elemPanel.eq(0).css('margin-top', -(rect.bottom - _WIN.height() + 5));\r\n }\r\n }).on('mouseleave', ELEM_LI_PAR, function(e){\r\n var othis = $(this)\r\n var elemPanel = othis.children('.'+ STR_MENU_PANEL);\r\n \r\n elemPanel.removeClass(STR_MENU_PANEL_L);\r\n elemPanel.css('margin-top', 0);\r\n });\r\n \r\n })();\r\n\r\n // 关闭面板\r\n dropdown.close = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n \r\n that.remove();\r\n return thisModule.call(that);\r\n };\r\n\r\n // 打开面板\r\n dropdown.open = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n \r\n that.render();\r\n return thisModule.call(that);\r\n }\r\n \r\n // 重载实例\r\n dropdown.reload = function(id, options, type){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n\r\n that.reload(options, type);\r\n return thisModule.call(that);\r\n };\r\n\r\n // 仅重载数据\r\n dropdown.reloadData = function(){\r\n var args = $.extend([], arguments);\r\n args[2] = 'reloadData';\r\n\r\n // 重载时,与数据相关的参数\r\n var dataParams = new RegExp('^('+ [\r\n 'data', 'templet', 'content'\r\n ].join('|') + ')$');\r\n\r\n // 过滤与数据无关的参数\r\n layui.each(args[1], function (key, value) {\r\n if(!dataParams.test(key)){\r\n delete args[1][key];\r\n }\r\n });\r\n\r\n return dropdown.reload.apply(null, args);\r\n };\r\n\r\n // 核心入口\r\n dropdown.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, dropdown);\r\n});\r\n","/**\r\n * slider 滑块组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'], function(exports){\r\n 'use strict';\r\n\r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n\r\n // 外部接口\r\n var slider = {\r\n config: {},\r\n index: layui.slider ? (layui.slider.index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisSlider = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n return {\r\n setValue: function(value, index){ // 设置值\r\n value = value > options.max ? options.max : value;\r\n value = value < options.min ? options.min : value;\r\n options.value = value;\r\n return that.slide('set', value, index || 0);\r\n },\r\n config: options\r\n }\r\n };\r\n\r\n // 字符常量\r\n var MOD_NAME = 'slider';\r\n var DISABLED = 'layui-disabled';\r\n var ELEM_VIEW = 'layui-slider';\r\n var SLIDER_BAR = 'layui-slider-bar';\r\n var SLIDER_WRAP = 'layui-slider-wrap';\r\n var SLIDER_WRAP_BTN = 'layui-slider-wrap-btn';\r\n var SLIDER_TIPS = 'layui-slider-tips';\r\n var SLIDER_INPUT = 'layui-slider-input';\r\n var SLIDER_INPUT_TXT = 'layui-slider-input-txt';\r\n var SLIDER_INPUT_BTN = 'layui-slider-input-btn';\r\n var ELEM_HOVER = 'layui-slider-hover';\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++slider.index;\r\n that.config = $.extend({}, that.config, slider.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n type: 'default', //滑块类型,垂直:vertical\r\n min: 0, //最小值\r\n max: 100, //最大值,默认100\r\n value: 0, //初始值,默认为0\r\n step: 1, //间隔值\r\n showstep: false, //间隔点开启\r\n tips: true, //文字提示,开启\r\n tipsAlways: false, //文字提示,始终开启\r\n input: false, //输入框,关闭\r\n range: false, //范围选择,与输入框不能同时开启,默认关闭\r\n height: 200, //配合 type:\"vertical\" 使用,默认200px\r\n disabled: false, //滑块禁用,默认关闭\r\n theme: '#16baaa' //主题颜色\r\n };\r\n\r\n // 数值精度\r\n Class.prototype.precision = function(){\r\n var that = this;\r\n var options = that.config;\r\n var precisions = $.map([options.min, options.max, options.step], function(v, i){\r\n var decimalArr = String(v).split('.');\r\n return decimalArr[1] ? decimalArr[1].length : 0;\r\n })\r\n return Math.max.apply(null, precisions);\r\n }\r\n\r\n //滑块渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n slider.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n //间隔值不能小于等于 0\r\n if(options.step <= 0) options.step = 1;\r\n\r\n //最大值不能小于最小值\r\n if(options.max < options.min) options.max = options.min + options.step;\r\n\r\n\r\n\r\n //判断是否开启双滑块\r\n if(options.range){\r\n options.value = typeof(options.value) == 'object' ? options.value : [options.min, options.value];\r\n var minValue = Math.min(options.value[0], options.value[1])\r\n ,maxValue = Math.max(options.value[0], options.value[1]);\r\n options.value[0] = Math.max(minValue,options.min);\r\n options.value[1] = Math.max(maxValue,options.min);\r\n options.value[0] = Math.min(options.value[0],options.max);\r\n options.value[1] = Math.min(options.value[1],options.max);\r\n\r\n var scaleFir = (options.value[0] - options.min) / (options.max - options.min) * 100;\r\n var scaleSec = (options.value[1] - options.min) / (options.max - options.min) * 100;\r\n var scale = scaleSec - scaleFir + '%';\r\n scaleFir = scaleFir + '%';\r\n scaleSec = scaleSec + '%';\r\n } else {\r\n //如果初始值是一个数组,则获取数组的最小值\r\n if(typeof options.value == 'object'){\r\n options.value = Math.min.apply(null, options.value);\r\n }\r\n\r\n //初始值不能小于最小值且不能大于最大值\r\n if(options.value < options.min) options.value = options.min;\r\n if(options.value > options.max) options.value = options.max;\r\n\r\n var scale = (options.value - options.min) / (options.max - options.min) * 100 + '%';\r\n }\r\n\r\n\r\n //如果禁用,颜色为统一的灰色\r\n var theme = options.disabled ? '#c2c2c2' : options.theme;\r\n\r\n //滑块\r\n var temp = '
          '+ (options.tips ? '
          ' : '') +\r\n '
          ' +\r\n '
          '+ (options.range ? '
          ' : '') +'
          ';\r\n\r\n var othis = $(options.elem);\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n //生成替代元素\r\n hasRender[0] && hasRender.remove(); //如果已经渲染,则Rerender\r\n that.elemTemp = $(temp);\r\n\r\n //把数据缓存到滑块上\r\n if(options.range){\r\n that.elemTemp.find('.' + SLIDER_WRAP).eq(0).data('value', options.value[0]);\r\n that.elemTemp.find('.' + SLIDER_WRAP).eq(1).data('value', options.value[1]);\r\n }else{\r\n that.elemTemp.find('.' + SLIDER_WRAP).data('value', options.value);\r\n }\r\n\r\n //插入替代元素\r\n othis.html(that.elemTemp);\r\n\r\n //垂直滑块\r\n if(options.type === 'vertical'){\r\n that.elemTemp.height(options.height + 'px');\r\n }\r\n\r\n //显示间断点\r\n if(options.showstep){\r\n var number = (options.max - options.min) / options.step, item = '';\r\n for(var i = 1; i < number + 1; i++) {\r\n var step = i * 100 / number;\r\n if(step < 100){\r\n item += '
          '\r\n }\r\n }\r\n that.elemTemp.append(item);\r\n }\r\n\r\n //插入输入框\r\n if(options.input && !options.range){\r\n var elemInput = $('
          ');\r\n othis.css(\"position\",\"relative\");\r\n othis.append(elemInput);\r\n othis.find('.' + SLIDER_INPUT_TXT).children('input').val(options.value);\r\n if(options.type === 'vertical'){\r\n elemInput.css({\r\n left: 0\r\n ,top: -48\r\n });\r\n } else {\r\n that.elemTemp.css(\"margin-right\", elemInput.outerWidth() + 15);\r\n }\r\n }\r\n\r\n //给未禁止的滑块滑动事件\r\n if(!options.disabled){\r\n that.slide();\r\n }else{\r\n that.elemTemp.addClass(DISABLED);\r\n that.elemTemp.find('.' + SLIDER_WRAP_BTN).addClass(DISABLED);\r\n }\r\n\r\n /**\r\n * @description 设置提示文本内容\r\n * @param {Element} sliderWrapBtnElem 提示文本节点元素\r\n */\r\n function setSliderTipsTxt(sliderWrapBtnElem) {\r\n var value = sliderWrapBtnElem.parent().data('value');\r\n var tipsTxt = options.setTips ? options.setTips(value) : value;\r\n that.elemTemp.find('.' + SLIDER_TIPS).html(tipsTxt);\r\n }\r\n\r\n /**\r\n * @description 计算提示文本元素的 position left\r\n * @param {Element} sliderWrapBtnElem 提示文本节点元素\r\n */\r\n function calcSliderTipsLeft(sliderWrapBtnElem){\r\n var sliderWidth = options.type === 'vertical' ? options.height : that.elemTemp[0].offsetWidth;\r\n var sliderWrap = that.elemTemp.find('.' + SLIDER_WRAP);\r\n var tipsLeft = options.type === 'vertical' ? (sliderWidth - sliderWrapBtnElem.parent()[0].offsetTop - sliderWrap.height()) : sliderWrapBtnElem.parent()[0].offsetLeft;\r\n var left = tipsLeft / sliderWidth * 100;\r\n return left\r\n }\r\n\r\n /**\r\n * @description 设置提示文本元素的 position left\r\n * @param {number} left 要设置的 left 的大小\r\n */\r\n function setSliderTipsLeft(left) {\r\n if(options.type === 'vertical'){\r\n that.elemTemp.find('.' + SLIDER_TIPS).css({\r\n \"bottom\": left + '%',\r\n \"margin-bottom\": \"20px\",\r\n \"display\": \"inline-block\"\r\n });\r\n } else {\r\n that.elemTemp.find('.' + SLIDER_TIPS).css({\r\n \"left\": left + '%',\r\n \"display\": \"inline-block\"\r\n });\r\n }\r\n }\r\n\r\n //判断是否要始终显示提示文本\r\n if(options.tips){\r\n if(options.tipsAlways){\r\n var sliderWrapBtnElem = that.elemTemp.find('.' + SLIDER_WRAP_BTN);\r\n setSliderTipsTxt(sliderWrapBtnElem)\r\n var left = calcSliderTipsLeft(sliderWrapBtnElem);\r\n setSliderTipsLeft(left)\r\n }else{\r\n //划过滑块显示数值\r\n var timer;\r\n that.elemTemp.find('.' + SLIDER_WRAP_BTN).on('mouseover', function(){\r\n setSliderTipsTxt($(this))\r\n var left = calcSliderTipsLeft($(this));\r\n clearTimeout(timer);\r\n timer = setTimeout(function(){\r\n setSliderTipsLeft(left)\r\n }, 300);\r\n }).on('mouseout', function(){\r\n clearTimeout(timer);\r\n if(!options.tipsAlways){\r\n that.elemTemp.find('.' + SLIDER_TIPS).css(\"display\", \"none\");\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n //滑块滑动\r\n Class.prototype.slide = function(setValue, value, i){\r\n var that = this;\r\n var options = that.config;\r\n var sliderAct = that.elemTemp;\r\n var sliderWidth = function(){\r\n return options.type === 'vertical' ? options.height : sliderAct[0].offsetWidth\r\n };\r\n var sliderWrap = sliderAct.find('.' + SLIDER_WRAP);\r\n var sliderTxt = sliderAct.next('.' + SLIDER_INPUT);\r\n var inputValue = sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val();\r\n var step = 100 / ((options.max - options.min) / options.step);\r\n var precision = that.precision();\r\n var change = function(offsetValue, index, from){\r\n if(Math.ceil(offsetValue) * step > 100){\r\n offsetValue = Math.ceil(offsetValue) * step\r\n }else{\r\n offsetValue = Math.round(offsetValue) * step\r\n }\r\n offsetValue = offsetValue > 100 ? 100: offsetValue;\r\n offsetValue = offsetValue < 0 ? 0: offsetValue;\r\n sliderWrap.eq(index).css((options.type === 'vertical' ?'bottom':'left'), offsetValue + '%');\r\n var firLeft = valueTo(sliderWrap[0].offsetLeft);\r\n var secLeft = options.range ? valueTo(sliderWrap[1].offsetLeft) : 0;\r\n if(options.type === 'vertical'){\r\n sliderAct.find('.' + SLIDER_TIPS).css({\"bottom\":offsetValue + '%', \"margin-bottom\":\"20px\"});\r\n firLeft = valueTo(sliderWidth() - sliderWrap[0].offsetTop - sliderWrap.height());\r\n secLeft = options.range ? valueTo(sliderWidth() - sliderWrap[1].offsetTop - sliderWrap.height()) : 0;\r\n }else{\r\n sliderAct.find('.' + SLIDER_TIPS).css(\"left\",offsetValue + '%');\r\n }\r\n firLeft = firLeft > 100 ? 100: firLeft;\r\n secLeft = secLeft > 100 ? 100: secLeft;\r\n var minLeft = Math.min(firLeft, secLeft)\r\n ,wrapWidth = Math.abs(firLeft - secLeft);\r\n if(options.type === 'vertical'){\r\n sliderAct.find('.' + SLIDER_BAR).css({\"height\":wrapWidth + '%', \"bottom\":minLeft + '%'});\r\n }else{\r\n sliderAct.find('.' + SLIDER_BAR).css({\"width\":wrapWidth + '%', \"left\":minLeft + '%'});\r\n }\r\n var selfValue = options.min + (options.max - options.min) * offsetValue / 100;\r\n selfValue = Number(parseFloat(selfValue).toFixed(precision));\r\n inputValue = selfValue;\r\n sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val(inputValue);\r\n sliderWrap.eq(index).data('value', selfValue);\r\n sliderAct.find('.' + SLIDER_TIPS).html(options.setTips ? options.setTips(selfValue) : selfValue);\r\n\r\n //如果开启范围选择,则返回数组值\r\n if(options.range){\r\n var arrValue = [\r\n sliderWrap.eq(0).data('value'),\r\n sliderWrap.eq(1).data('value')\r\n ];\r\n if(arrValue[0] > arrValue[1]) arrValue.reverse(); //如果前面的圆点超过了后面的圆点值,则调换顺序\r\n }\r\n\r\n that.value = options.range ? arrValue : selfValue; // 最新值\r\n options.change && options.change(that.value); // change 回调\r\n\r\n // 值完成选中的事件\r\n if(from === 'done') options.done && options.done(that.value);\r\n };\r\n var valueTo = function(value){\r\n var oldLeft = value / sliderWidth() * 100 / step;\r\n var left = Math.round(oldLeft) * step;\r\n if(value == sliderWidth()){\r\n left = Math.ceil(oldLeft) * step;\r\n }\r\n return left;\r\n };\r\n\r\n //拖拽元素\r\n var elemMove = $(['
          sliderWidth())left = sliderWidth();\r\n var reaLeft = left / sliderWidth() * 100 / step;\r\n change(reaLeft, index);\r\n othis.addClass(ELEM_HOVER);\r\n sliderAct.find('.' + SLIDER_TIPS).show();\r\n e.preventDefault();\r\n };\r\n\r\n var up = function(delay){\r\n othis.removeClass(ELEM_HOVER);\r\n if(!options.tipsAlways){\r\n setTimeout(function(){\r\n sliderAct.find('.' + SLIDER_TIPS).hide();\r\n }, delay);\r\n }\r\n };\r\n\r\n createMoveElem(othis, move, up)\r\n });\r\n });\r\n\r\n // 点击滑块\r\n sliderAct.on('click', function(e){\r\n var main = $('.' + SLIDER_WRAP_BTN);\r\n var othis = $(this);\r\n if(!main.is(event.target) && main.has(event.target).length === 0 && main.length){\r\n var index;\r\n var offset = options.type === 'vertical'\r\n ? (sliderWidth() - e.clientY + othis.offset().top - $(window).scrollTop())\r\n :(e.clientX - othis.offset().left - $(window).scrollLeft());\r\n\r\n if(offset < 0)offset = 0;\r\n if(offset > sliderWidth()) offset = sliderWidth();\r\n var reaLeft = offset / sliderWidth() * 100 / step;\r\n if(options.range){\r\n if(options.type === 'vertical'){\r\n index = Math.abs(offset - parseInt($(sliderWrap[0]).css('bottom'))) > Math.abs(offset - parseInt($(sliderWrap[1]).css('bottom'))) ? 1 : 0;\r\n } else {\r\n index = Math.abs(offset - sliderWrap[0].offsetLeft) > Math.abs(offset - sliderWrap[1].offsetLeft) ? 1 : 0;\r\n }\r\n } else {\r\n index = 0;\r\n }\r\n change(reaLeft, index, 'done');\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n //点击加减输入框\r\n sliderTxt.children('.' + SLIDER_INPUT_BTN).children('i').each(function(index){\r\n $(this).on('click', function(){\r\n inputValue = sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val();\r\n if(index == 1){ //减\r\n inputValue = inputValue - options.step < options.min\r\n ? options.min\r\n : Number(inputValue) - options.step;\r\n }else{\r\n inputValue = Number(inputValue) + options.step > options.max\r\n ? options.max\r\n : Number(inputValue) + options.step;\r\n }\r\n var inputScale = (inputValue - options.min) / (options.max - options.min) * 100 / step;\r\n change(inputScale, 0, 'done');\r\n });\r\n });\r\n\r\n //获取输入框值\r\n var getInputValue = function(){\r\n var realValue = this.value;\r\n realValue = isNaN(realValue) ? 0 : realValue;\r\n realValue = realValue < options.min ? options.min : realValue;\r\n realValue = realValue > options.max ? options.max : realValue;\r\n this.value = realValue;\r\n var inputScale = (realValue - options.min) / (options.max - options.min) * 100 / step;\r\n change(inputScale, 0, 'done');\r\n };\r\n sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').on('keydown', function(e){\r\n if(e.keyCode === 13){\r\n e.preventDefault();\r\n getInputValue.call(this);\r\n }\r\n }).on('change', getInputValue);\r\n };\r\n\r\n //事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n };\r\n\r\n //核心入口\r\n slider.render = function(options){\r\n var inst = new Class(options);\r\n return thisSlider.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, slider);\r\n})\r\n","/**\r\n * colorpicker \r\n * 颜色选择组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n var clickOrMousedown = (device.mobile ? 'click' : 'mousedown');\r\n\r\n //外部接口\r\n var colorpicker = {\r\n config: {}\r\n ,index: layui.colorpicker ? (layui.colorpicker.index + 10000) : 0\r\n\r\n //设置全局项\r\n ,set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n }\r\n \r\n //事件\r\n ,on: function(events, callback){\r\n return layui.onevent.call(this, 'colorpicker', events, callback);\r\n }\r\n };\r\n \r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n config: options\r\n };\r\n }\r\n\r\n //字符常量\r\n ,MOD_NAME = 'colorpicker', SHOW = 'layui-show', THIS = 'layui-this', ELEM = 'layui-colorpicker'\r\n \r\n ,ELEM_MAIN = '.layui-colorpicker-main', ICON_PICKER_DOWN = 'layui-icon-down', ICON_PICKER_CLOSE = 'layui-icon-close'\r\n ,PICKER_TRIG_SPAN = 'layui-colorpicker-trigger-span', PICKER_TRIG_I = 'layui-colorpicker-trigger-i', PICKER_SIDE = 'layui-colorpicker-side', PICKER_SIDE_SLIDER = 'layui-colorpicker-side-slider'\r\n ,PICKER_BASIS = 'layui-colorpicker-basis', PICKER_ALPHA_BG = 'layui-colorpicker-alpha-bgcolor', PICKER_ALPHA_SLIDER = 'layui-colorpicker-alpha-slider', PICKER_BASIS_CUR = 'layui-colorpicker-basis-cursor', PICKER_INPUT = 'layui-colorpicker-main-input'\r\n\r\n //RGB转HSB\r\n ,RGBToHSB = function(rgb){\r\n var hsb = {h:0, s:0, b:0};\r\n var min = Math.min(rgb.r, rgb.g, rgb.b);\r\n var max = Math.max(rgb.r, rgb.g, rgb.b);\r\n var delta = max - min;\r\n hsb.b = max;\r\n hsb.s = max !== 0 ? 255*delta/max : 0;\r\n if(hsb.s !== 0){\r\n if(rgb.r == max){ // 因 rgb 中返回的数字为 string 类型\r\n hsb.h = (rgb.g - rgb.b) / delta;\r\n }else if(rgb.g == max){\r\n hsb.h = 2 + (rgb.b - rgb.r) / delta;\r\n }else{\r\n hsb.h = 4 + (rgb.r - rgb.g) / delta;\r\n }\r\n }else{\r\n hsb.h = -1;\r\n }\r\n if(max === min){\r\n hsb.h = 0;\r\n }\r\n hsb.h *= 60;\r\n if(hsb.h < 0) {\r\n hsb.h += 360;\r\n }\r\n hsb.s *= 100/255;\r\n hsb.b *= 100/255;\r\n return hsb; \r\n }\r\n\r\n //HEX转HSB\r\n ,HEXToHSB = function(hex){\r\n hex = hex.indexOf('#') > -1 ? hex.substring(1) : hex;\r\n if(hex.length === 3){\r\n var num = hex.split(\"\");\r\n hex = num[0]+num[0]+num[1]+num[1]+num[2]+num[2]\r\n }\r\n hex = parseInt(hex, 16);\r\n var rgb = {r:hex >> 16, g:(hex & 0x00FF00) >> 8, b:(hex & 0x0000FF)};\r\n return RGBToHSB(rgb);\r\n }\r\n\r\n //HSB转RGB\r\n ,HSBToRGB = function(hsb){\r\n var rgb = {};\r\n var h = hsb.h;\r\n var s = hsb.s*255/100;\r\n var b = hsb.b*255/100;\r\n if(s === 0){\r\n rgb.r = rgb.g = rgb.b = b;\r\n }else{\r\n var t1 = b;\r\n var t2 = (255 - s) * b /255;\r\n var t3 = (t1 - t2) * (h % 60) /60;\r\n if(h === 360) h = 0;\r\n if(h < 60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3}\r\n else if(h < 120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3}\r\n else if(h < 180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3}\r\n else if(h < 240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3}\r\n else if(h < 300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3}\r\n else if(h < 360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3}\r\n else {rgb.r=0; rgb.g=0; rgb.b=0}\r\n }\r\n return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};\r\n }\r\n\r\n //HSB转HEX\r\n ,HSBToHEX = function(hsb){\r\n var rgb = HSBToRGB(hsb);\r\n var hex = [\r\n rgb.r.toString(16)\r\n ,rgb.g.toString(16)\r\n ,rgb.b.toString(16)\r\n ];\r\n $.each(hex, function(nr, val){\r\n if(val.length === 1){\r\n hex[nr] = '0' + val;\r\n }\r\n });\r\n return hex.join('');\r\n }\r\n\r\n //转化成所需rgb格式\r\n ,RGBSTo = function(rgbs){\r\n var regexp = /[0-9]{1,3}/g;\r\n var re = rgbs.match(regexp) || [];\r\n return {r:re[0], g:re[1], b:re[2]};\r\n }\r\n \r\n ,$win = $(window)\r\n ,$doc = $(document)\r\n \r\n //构造器\r\n ,Class = function(options){\r\n var that = this;\r\n that.index = ++colorpicker.index;\r\n that.config = $.extend({}, that.config, colorpicker.config, options);\r\n that.render();\r\n };\r\n\r\n //默认配置\r\n Class.prototype.config = {\r\n color: '' //默认颜色,默认没有\r\n ,size: null //选择器大小\r\n ,alpha: false //是否开启透明度\r\n ,format: 'hex' //颜色显示/输入格式,可选 rgb,hex\r\n ,predefine: false //预定义颜色是否开启\r\n ,colors: [ //默认预定义颜色列表\r\n '#16baaa', '#16b777', '#1E9FFF', '#FF5722', '#FFB800', '#01AAED', '#999', '#c00', '#ff8c00','#ffd700'\r\n ,'#90ee90', '#00ced1', '#1e90ff', '#c71585', 'rgb(0, 186, 189)', 'rgb(255, 120, 0)', 'rgb(250, 212, 0)', '#393D49', 'rgba(0,0,0,.5)', 'rgba(255, 69, 0, 0.68)', 'rgba(144, 240, 144, 0.5)', 'rgba(31, 147, 255, 0.73)'\r\n ]\r\n };\r\n\r\n //初始颜色选择框\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n colorpicker.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n \r\n //颜色选择框对象\r\n var elemColorBox = $(['
          '\r\n ,''\r\n ,' 3){ //需要优化\r\n if(!(options.alpha && options.format == 'rgb')){\r\n bgstr = '#' + HSBToHEX(RGBToHSB(RGBSTo(options.color)))\r\n }\r\n }\r\n \r\n return 'background: '+ bgstr;\r\n }\r\n \r\n return bgstr;\r\n }() +'\">'\r\n ,''\r\n ,''\r\n ,''\r\n ,'
          '].join(''))\r\n\r\n //初始化颜色选择框\r\n elem = options.elem = $(options.elem);\r\n options.size && elemColorBox.addClass('layui-colorpicker-'+ options.size); //初始化颜色选择框尺寸\r\n \r\n // 插入颜色选择框\r\n elem.addClass('layui-inline').html(\r\n that.elemColorBox = elemColorBox\r\n );\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n \r\n // 获取背景色值\r\n that.color = that.elemColorBox.find('.'+ PICKER_TRIG_SPAN)[0].style.background;\r\n \r\n // 相关事件\r\n that.events();\r\n };\r\n\r\n //渲染颜色选择器\r\n Class.prototype.renderPicker = function(){\r\n var that = this\r\n ,options = that.config\r\n ,elemColorBox = that.elemColorBox[0]\r\n \r\n //颜色选择器对象\r\n ,elemPicker = that.elemPicker = $(['
          '\r\n //颜色面板\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n \r\n //透明度条块\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n ,'
          '\r\n \r\n //预设颜色列表\r\n ,function(){\r\n if(options.predefine){\r\n var list = ['
          '];\r\n layui.each(options.colors, function(i, v){\r\n list.push(['
          3 \r\n ? ' layui-colorpicker-pre-isalpha' \r\n : '') +'\">'\r\n ,'
          '\r\n ,'
          '].join(''));\r\n });\r\n list.push('
          ');\r\n return list.join('');\r\n } else {\r\n return '';\r\n }\r\n }()\r\n \r\n //底部表单元素区域\r\n ,'
          '\r\n ,'
          '\r\n ,''\r\n ,'
          '\r\n ,'
          '\r\n ,''\r\n ,''\r\n ,''\r\n ,'
          '].join(''))\r\n \r\n ,elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)[0];\r\n \r\n //如果当前点击的颜色盒子已经存在选择器,则关闭\r\n if($(ELEM_MAIN)[0] && $(ELEM_MAIN).data('index') == that.index){\r\n that.removePicker(Class.thisElemInd);\r\n } else { //插入颜色选择器\r\n that.removePicker(Class.thisElemInd); \r\n $('body').append(elemPicker);\r\n }\r\n\r\n // 记录当前执行的实例索引\r\n colorpicker.thisId = options.id;\r\n \r\n Class.thisElemInd = that.index; //记录最新打开的选择器索引\r\n Class.thisColor = elemColorBox.style.background //记录最新打开的选择器颜色选中值\r\n \r\n that.position();\r\n that.pickerEvents();\r\n };\r\n\r\n //颜色选择器移除\r\n Class.prototype.removePicker = function(index){\r\n var that = this;\r\n var options = that.config;\r\n var elem = $('#layui-colorpicker'+ (index || that.index));\r\n\r\n if(elem[0]){\r\n elem.remove();\r\n delete colorpicker.thisId;\r\n\r\n // 面板关闭后的回调\r\n typeof options.close === 'function' && options.close(that.color);\r\n }\r\n\r\n return that;\r\n };\r\n \r\n //定位算法\r\n Class.prototype.position = function(){\r\n var that = this\r\n ,options = that.config;\r\n lay.position(that.bindElem || that.elemColorBox[0], that.elemPicker[0], {\r\n position: options.position\r\n ,align: 'center'\r\n });\r\n return that;\r\n };\r\n\r\n //颜色选择器赋值\r\n Class.prototype.val = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,elemColorBox = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)\r\n ,elemPickerInput = that.elemPicker.find('.' + PICKER_INPUT)\r\n ,e = elemColorBox[0]\r\n ,bgcolor = e.style.backgroundColor;\r\n\r\n //判断是否有背景颜色\r\n if(bgcolor){\r\n \r\n //转化成hsb格式\r\n var hsb = RGBToHSB(RGBSTo(bgcolor))\r\n ,type = elemColorBox.attr('lay-type');\r\n \r\n //同步滑块的位置及颜色选择器的选择\r\n that.select(hsb.h, hsb.s, hsb.b);\r\n \r\n // 若格式要求为rgb\r\n if(type === 'torgb'){\r\n elemPickerInput.find('input').val(bgcolor);\r\n } else if(type === 'rgba'){ // 若格式要求为 rgba\r\n var rgb = RGBSTo(bgcolor);\r\n \r\n // 若开启透明度而没有设置,则给默认值\r\n if((bgcolor.match(/[0-9]{1,3}/g) || []).length === 3){\r\n elemPickerInput.find('input').val('rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 1)');\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", 280);\r\n } else {\r\n elemPickerInput.find('input').val(bgcolor);\r\n var left = bgcolor.slice(bgcolor.lastIndexOf(\",\") + 1, bgcolor.length - 1) * 280;\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", left);\r\n }\r\n \r\n // 设置 span 背景色\r\n that.elemPicker.find('.'+ PICKER_ALPHA_BG)[0].style.background = 'linear-gradient(to right, rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 0), rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +'))'; \r\n } else {\r\n elemPickerInput.find('input').val('#'+ HSBToHEX(hsb));\r\n }\r\n } else {\r\n // 若没有背景颜色则默认到最初始的状态\r\n that.select(0,100,100);\r\n elemPickerInput.find('input').val(\"\");\r\n that.elemPicker.find('.'+ PICKER_ALPHA_BG)[0].style.background = '';\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", 280);\r\n }\r\n };\r\n\r\n //颜色选择器滑动 / 点击\r\n Class.prototype.side = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,span = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)\r\n ,type = span.attr('lay-type')\r\n\r\n ,side = that.elemPicker.find('.' + PICKER_SIDE)\r\n ,slider = that.elemPicker.find('.' + PICKER_SIDE_SLIDER)\r\n ,basis = that.elemPicker.find('.' + PICKER_BASIS)\r\n ,choose = that.elemPicker.find('.' + PICKER_BASIS_CUR)\r\n ,alphacolor = that.elemPicker.find('.' + PICKER_ALPHA_BG)\r\n ,alphaslider = that.elemPicker.find('.' + PICKER_ALPHA_SLIDER)\r\n \r\n ,_h = slider[0].offsetTop/180*360\r\n ,_b = 100 - (choose[0].offsetTop + 3)/180*100\r\n ,_s = (choose[0].offsetLeft + 3)/260*100\r\n ,_a = Math.round(alphaslider[0].offsetLeft/280*100)/100 \r\n \r\n ,i = that.elemColorBox.find('.' + PICKER_TRIG_I)\r\n ,pre = that.elemPicker.find('.layui-colorpicker-pre').children('div')\r\n\r\n ,change = function(x,y,z,a){\r\n that.select(x, y, z);\r\n var rgb = HSBToRGB({h:x, s:y, b:z});\r\n var color = HSBToHEX({h:x, s:y, b:z});\r\n var elemInput = that.elemPicker.find('.' + PICKER_INPUT).find('input');\r\n\r\n i.addClass(ICON_PICKER_DOWN).removeClass(ICON_PICKER_CLOSE);\r\n span[0].style.background = 'rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +')';\r\n\r\n if(type === 'torgb'){\r\n elemInput.val('rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +')');\r\n } else if(type === 'rgba'){\r\n var left = a * 280;\r\n alphaslider.css(\"left\", left);\r\n elemInput.val('rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', '+ a +')');\r\n span[0].style.background = 'rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', '+ a +')';\r\n alphacolor[0].style.background = 'linear-gradient(to right, rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 0), rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +'))'\r\n } else {\r\n elemInput.val('#'+ color);\r\n }\r\n \r\n //回调更改的颜色\r\n options.change && options.change($.trim(that.elemPicker.find('.' + PICKER_INPUT).find('input').val()));\r\n }\r\n\r\n //拖拽元素\r\n ,elemMove = $(['
          '].join(''))\r\n ,createMoveElem = function(call){\r\n $('#LAY-colorpicker-moving')[0] || $('body').append(elemMove);\r\n elemMove.on('mousemove', call);\r\n elemMove.on('mouseup', function(){\r\n elemMove.remove();\r\n }).on('mouseleave', function(){\r\n elemMove.remove();\r\n });\r\n };\r\n // 移动端滑动模拟事件中\r\n // 1. 不触发游标上绑定的事件,以提高性能,使滑动更流畅\r\n // 2. 游标上的事件需要冒泡到颜色拾取区域,用来模拟拖动游标的效果\r\n var needTrigger = true;\r\n var needStopPropagation = true;\r\n\r\n //右侧主色选择\r\n slider.on('mousedown', function(e, triggerEvent){\r\n var oldtop = this.offsetTop;\r\n var oldy = e.clientY === undefined ? triggerEvent.clientY : e.clientY;\r\n var move = function(e){\r\n var top = oldtop + (e.clientY - oldy)\r\n ,maxh = side[0].offsetHeight;\r\n if(top < 0)top = 0;\r\n if(top > maxh)top = maxh;\r\n var h = top/180*360;\r\n _h = h;\r\n change(h, _s, _b, _a);\r\n e.preventDefault();\r\n };\r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n \r\n side.on('mousedown', function(e){\r\n var top = e.clientY - $(this).offset().top + $win.scrollTop();\r\n if(top < 0)top = 0;\r\n if(top > this.offsetHeight) top = this.offsetHeight; \r\n var h = top/180*360;\r\n _h = h;\r\n change(h, _s, _b, _a); \r\n e.preventDefault();\r\n needTrigger && slider.trigger('mousedown', e);\r\n });\r\n \r\n //中间小圆点颜色选择\r\n choose.on('mousedown', function(e, triggerEvent){\r\n var oldtop = this.offsetTop;\r\n var oldleft = this.offsetLeft;\r\n var oldy = e.clientY === undefined ? triggerEvent.clientY : e.clientY;\r\n var oldx = e.clientX === undefined ? triggerEvent.clientX : e.clientX;\r\n var move = function(e){\r\n var top = oldtop + (e.clientY - oldy)\r\n ,left = oldleft + (e.clientX - oldx)\r\n ,maxh = basis[0].offsetHeight\r\n ,maxw = basis[0].offsetWidth;\r\n if(top < 0)top = 0;\r\n if(top > maxh)top = maxh;\r\n if(left < 0)left = 0;\r\n if(left > maxw)left = maxw;\r\n var s = left/260*100\r\n ,b = 100 - top/180*100;\r\n _b = b;\r\n _s = s;\r\n change(_h, s, b, _a); \r\n e.preventDefault();\r\n };\r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n \r\n basis.on('mousedown', function(e){\r\n var top = e.clientY - $(this).offset().top + $win.scrollTop()\r\n ,left = e.clientX - $(this).offset().left + $win.scrollLeft()\r\n if(top < 0)top = 0;\r\n if(top > this.offsetHeight)top = this.offsetHeight;\r\n if(left < 0)left = 0;\r\n if(left > this.offsetWidth)left = this.offsetWidth;\r\n var s = left/260*100\r\n ,b = 100 - top/180*100;\r\n _b = b;\r\n _s = s;\r\n change(_h, s, b, _a); \r\n layui.stope(e);\r\n e.preventDefault();\r\n needTrigger && choose.trigger('mousedown', e);\r\n });\r\n \r\n //底部透明度选择\r\n alphaslider.on('mousedown', function(e, triggerEvent){\r\n var oldleft = this.offsetLeft;\r\n var oldx = e.clientX === undefined ? triggerEvent.clientX : e.clientX;\r\n var move = function(e){\r\n var left = oldleft + (e.clientX - oldx)\r\n ,maxw = alphacolor[0].offsetWidth;\r\n if(left < 0)left = 0;\r\n if(left > maxw)left = maxw;\r\n var a = Math.round(left /280*100) /100;\r\n _a = a;\r\n change(_h, _s, _b, a); \r\n e.preventDefault();\r\n };\r\n \r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n alphacolor.on('mousedown', function(e){\r\n var left = e.clientX - $(this).offset().left\r\n if(left < 0)left = 0;\r\n if(left > this.offsetWidth)left = this.offsetWidth;\r\n var a = Math.round(left /280*100) /100;\r\n _a = a;\r\n change(_h, _s, _b, a); \r\n e.preventDefault();\r\n needTrigger && alphaslider.trigger('mousedown', e);\r\n });\r\n \r\n //预定义颜色选择\r\n pre.each(function(){\r\n $(this).on('click', function(){\r\n $(this).parent('.layui-colorpicker-pre').addClass('selected').siblings().removeClass('selected');\r\n var color = this.style.backgroundColor\r\n ,hsb = RGBToHSB(RGBSTo(color))\r\n ,a = color.slice(color.lastIndexOf(\",\") + 1, color.length - 1),left;\r\n _h = hsb.h;\r\n _s = hsb.s;\r\n _b = hsb.b;\r\n if((color.match(/[0-9]{1,3}/g) || []).length === 3) a = 1;\r\n _a = a;\r\n left = a * 280;\r\n change(hsb.h, hsb.s, hsb.b, a);\r\n })\r\n });\r\n\r\n if(!lay.touchEventsSupported()) return;\r\n // 触摸事件模拟\r\n layui.each([\r\n {elem: side, eventType: 'mousedown'},\r\n {elem: alphacolor, eventType: 'mousedown'},\r\n {elem: basis, eventType: 'mousedown'}\r\n ], function(i, obj){\r\n lay.touchSwipe(obj.elem, {\r\n onTouchStart: function(){\r\n needTrigger = false;\r\n needStopPropagation = false;\r\n },\r\n onTouchMove: function(e){\r\n touchHandler(e, obj.eventType)\r\n },\r\n onTouchEnd: function(){\r\n elemMove.remove();\r\n needTrigger = true;\r\n needStopPropagation = true;\r\n }\r\n })\r\n })\r\n\r\n function touchHandler(event, eventType) {\r\n var pointer = event.touches[0];\r\n var simulatedEvent = document.createEvent(\"MouseEvent\");\r\n\r\n simulatedEvent.initMouseEvent(eventType, \r\n true, true, window, 1, \r\n pointer.screenX, pointer.screenY,pointer.clientX, pointer.clientY, \r\n false, false, false, false, 0, null\r\n );\r\n pointer.target.dispatchEvent(simulatedEvent);\r\n }\r\n };\r\n\r\n //颜色选择器hsb转换\r\n Class.prototype.select = function(h, s, b, type){\r\n var that = this;\r\n var options = that.config;\r\n var hex = HSBToHEX({h:h, s:100, b:100});\r\n var color = HSBToHEX({h:h, s:s, b:b});\r\n var sidetop = h/360*180;\r\n var top = 180 - b/100*180;\r\n var left = s/100*260;\r\n var basisElem = that.elemPicker.find('.' + PICKER_BASIS)[0];\r\n \r\n that.elemPicker.find('.' + PICKER_SIDE_SLIDER).css(\"top\", sidetop); //滑块的top\r\n basisElem.style.background = '#' + hex; //颜色选择器的背景\r\n \r\n //选择器的top left\r\n that.elemPicker.find('.' + PICKER_BASIS_CUR).css({\r\n \"top\": top / basisElem.offsetHeight * 100 + '%',\r\n \"left\": left / basisElem.offsetWidth * 100 + '%' \r\n });\r\n \r\n // if(type === 'change') return;\r\n\r\n // 选中的颜色\r\n // that.elemPicker.find('.' + PICKER_INPUT).find('input').val('#'+ color);\r\n };\r\n \r\n Class.prototype.pickerEvents = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN) //颜色盒子\r\n ,elemPickerInput = that.elemPicker.find('.' + PICKER_INPUT + ' input') //颜色选择器表单\r\n \r\n ,pickerEvents = {\r\n //清空\r\n clear: function(othis){\r\n elemColorBoxSpan[0].style.background ='';\r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_DOWN).addClass(ICON_PICKER_CLOSE);\r\n that.color = '';\r\n \r\n options.done && options.done('');\r\n that.removePicker();\r\n }\r\n \r\n //确认\r\n ,confirm: function(othis, change){\r\n var value = $.trim(elemPickerInput.val())\r\n ,colorValue\r\n ,hsb;\r\n \r\n if(value.indexOf(',') > -1){\r\n hsb = RGBToHSB(RGBSTo(value));\r\n that.select(hsb.h, hsb.s, hsb.b);\r\n elemColorBoxSpan[0].style.background = (colorValue = '#' + HSBToHEX(hsb)); \r\n \r\n if((value.match(/[0-9]{1,3}/g) || []).length > 3 && elemColorBoxSpan.attr('lay-type') === 'rgba'){\r\n var left = value.slice(value.lastIndexOf(\",\") + 1, value.length - 1) * 280;\r\n that.elemPicker.find('.' + PICKER_ALPHA_SLIDER).css(\"left\", left);\r\n elemColorBoxSpan[0].style.background = value;\r\n colorValue = value;\r\n }\r\n } else {\r\n hsb = HEXToHSB(value);\r\n elemColorBoxSpan[0].style.background = (colorValue = '#' + HSBToHEX(hsb)); \r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_CLOSE).addClass(ICON_PICKER_DOWN);\r\n }\r\n \r\n if(change === 'change'){\r\n that.select(hsb.h, hsb.s, hsb.b, change);\r\n options.change && options.change(colorValue);\r\n return;\r\n }\r\n that.color = value;\r\n \r\n options.done && options.done(value);\r\n that.removePicker(); \r\n }\r\n };\r\n \r\n //选择器面板点击事件\r\n that.elemPicker.on('click', '*[colorpicker-events]', function(){\r\n var othis = $(this)\r\n ,attrEvent = othis.attr('colorpicker-events');\r\n pickerEvents[attrEvent] && pickerEvents[attrEvent].call(this, othis);\r\n });\r\n \r\n //输入框事件\r\n elemPickerInput.on('keyup', function(e){\r\n var othis = $(this);\r\n pickerEvents.confirm.call(this, othis, e.keyCode === 13 ? null : 'change');\r\n });\r\n }\r\n\r\n // 颜色选择器输入\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 弹出颜色选择器\r\n that.elemColorBox.on('click' , function(){\r\n that.renderPicker();\r\n if($(ELEM_MAIN)[0]){\r\n that.val();\r\n that.side();\r\n }\r\n });\r\n };\r\n\r\n //全局事件\r\n (function(){\r\n //绑定关闭控件事件\r\n $doc.on(clickOrMousedown, function(e){\r\n if(!colorpicker.thisId) return;\r\n var that = thisModule.getThis(colorpicker.thisId);\r\n if(!that) return;\r\n\r\n var options = that.config;\r\n var elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN);\r\n\r\n //如果点击的元素是颜色框\r\n if($(e.target).hasClass(ELEM) \r\n || $(e.target).parents('.'+ELEM)[0]\r\n ) return; \r\n \r\n //如果点击的元素是选择器\r\n if($(e.target).hasClass(ELEM_MAIN.replace(/\\./g, '')) \r\n || $(e.target).parents(ELEM_MAIN)[0]\r\n ) return; \r\n \r\n if(!that.elemPicker) return;\r\n \r\n if(that.color){\r\n var hsb = RGBToHSB(RGBSTo(that.color));\r\n that.select(hsb.h, hsb.s, hsb.b); \r\n } else {\r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_DOWN).addClass(ICON_PICKER_CLOSE);\r\n }\r\n elemColorBoxSpan[0].style.background = that.color || '';\r\n \r\n // 取消选择的回调\r\n typeof options.cancel === 'function' && options.cancel(that.color);\r\n\r\n // 移除面板\r\n that.removePicker();\r\n });\r\n\r\n //自适应定位\r\n $win.on('resize', function(){\r\n if(!colorpicker.thisId) return;\r\n var that = thisModule.getThis(colorpicker.thisId);\r\n if(!that) return;\r\n\r\n if(!that.elemPicker || !$(ELEM_MAIN)[0]){\r\n return false;\r\n }\r\n that.position();\r\n });\r\n })();\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n \r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n //核心入口\r\n colorpicker.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n \r\n exports(MOD_NAME, colorpicker);\r\n});\r\n","/**\r\n * element\r\n * 常用元素操作组件\r\n */\r\n \r\nlayui.define('jquery', function(exports){\r\n 'use strict';\r\n \r\n var $ = layui.$;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n \r\n var MOD_NAME = 'element';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var TITLE = '.layui-tab-title';\r\n \r\n var Element = function(){\r\n this.config = {};\r\n };\r\n \r\n // 全局设置\r\n Element.prototype.set = function(options){\r\n var that = this;\r\n $.extend(true, that.config, options);\r\n return that;\r\n };\r\n \r\n // 表单事件\r\n Element.prototype.on = function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n };\r\n \r\n // 外部 Tab 新增\r\n Element.prototype.tabAdd = function(filter, options){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var barElem = titElem.children('.layui-tab-bar');\r\n var contElem = tabElem.children('.layui-tab-content');\r\n var li = ' 0) layAttr.unshift(''); //向前插,预留空格\r\n return layAttr.join(' ');\r\n }() +'>'+ (options.title || 'unnaming') +'';\r\n \r\n barElem[0] ? barElem.before(li) : titElem.append(li);\r\n contElem.append('
          '+ (options.content || '') +'
          ');\r\n // call.hideTabMore(true);\r\n // 是否添加即切换\r\n options.change && this.tabChange(filter, options.id);\r\n titElem.data('LAY_TAB_CHANGE', options.change);\r\n call.tabAuto(options.change ? 'change' : null);\r\n return this;\r\n };\r\n \r\n // 外部 Tab 删除\r\n Element.prototype.tabDelete = function(filter, layid){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var liElem = titElem.find('>li[lay-id=\"'+ layid +'\"]');\r\n call.tabDelete(null, liElem);\r\n return this;\r\n };\r\n \r\n /**\r\n * 外部 Tab 切换\r\n * @param {string} filter - 标签主容器 lay-filter 值\r\n * @param {string} layid - 标签头 lay-id 值\r\n * @param {boolean} force - 是否强制切换\r\n * @returns {this}\r\n */\r\n Element.prototype.tabChange = function(filter, layid, force){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var liElem = titElem.find('>li[lay-id=\"'+ layid +'\"]');\r\n\r\n call.tabClick.call(liElem[0], {\r\n liElem: liElem,\r\n force: force\r\n });\r\n return this;\r\n };\r\n \r\n // 自定义 Tab 选项卡\r\n Element.prototype.tab = function(options){\r\n options = options || {};\r\n dom.on('click', options.headerElem, function(e){\r\n var index = $(options.headerElem).index($(this));\r\n call.tabClick.call(this, {\r\n index: index,\r\n options: options\r\n });\r\n });\r\n };\r\n \r\n \r\n // 动态改变进度条\r\n Element.prototype.progress = function(filter, percent){\r\n var ELEM = 'layui-progress';\r\n var elem = $('.'+ ELEM +'[lay-filter='+ filter +']');\r\n var elemBar = elem.find('.'+ ELEM +'-bar');\r\n var text = elemBar.find('.'+ ELEM +'-text');\r\n\r\n elemBar.css('width', function(){\r\n return /^.+\\/.+$/.test(percent) \r\n ? (new Function('return '+ percent)() * 100) + '%'\r\n : percent;\r\n }).attr('lay-percent', percent);\r\n text.text(percent);\r\n return this;\r\n };\r\n \r\n var NAV_ELEM = '.layui-nav';\r\n var NAV_ITEM = 'layui-nav-item';\r\n var NAV_BAR = 'layui-nav-bar';\r\n var NAV_TREE = 'layui-nav-tree';\r\n var NAV_CHILD = 'layui-nav-child';\r\n var NAV_CHILD_C = 'layui-nav-child-c';\r\n var NAV_MORE = 'layui-nav-more';\r\n var NAV_DOWN = 'layui-icon-down';\r\n var NAV_ANIM = 'layui-anim layui-anim-upbit';\r\n \r\n // 基础事件体\r\n var call = {\r\n // Tab 点击\r\n tabClick: function(obj){\r\n obj = obj || {};\r\n var options = obj.options || {};\r\n var othis = obj.liElem || $(this);\r\n var parents = options.headerElem \r\n ? othis.parent() \r\n : othis.parents('.layui-tab').eq(0);\r\n var item = options.bodyElem \r\n ? $(options.bodyElem) \r\n : parents.children('.layui-tab-content').children('.layui-tab-item');\r\n var elemA = othis.find('a');\r\n var isJump = elemA.attr('href') !== 'javascript:;' && elemA.attr('target') === '_blank'; // 是否存在跳转\r\n var unselect = typeof othis.attr('lay-unselect') === 'string'; // 是否禁用选中\r\n var filter = parents.attr('lay-filter');\r\n var hasId = othis.attr('lay-id');\r\n\r\n // 下标\r\n var index = 'index' in obj \r\n ? obj.index \r\n : othis.parent().children('li').index(othis);\r\n\r\n // 若非强制切换,则根据 tabBeforeChange 事件的返回结果决定是否切换\r\n if (!obj.force) {\r\n var liThis = othis.siblings('.' + THIS);\r\n var shouldChange = layui.event.call(this, MOD_NAME, 'tabBeforeChange('+ filter +')', {\r\n elem: parents,\r\n from: {\r\n index: othis.parent().children('li').index(liThis),\r\n id: liThis.attr('lay-id')\r\n },\r\n to: {\r\n index: index,\r\n id: hasId\r\n },\r\n });\r\n if(shouldChange === false) return;\r\n }\r\n \r\n // 执行切换\r\n if(!(isJump || unselect)){\r\n othis.addClass(THIS).siblings().removeClass(THIS);\r\n if(hasId){\r\n var contentElem = item.filter('[lay-id=\"' + hasId + '\"]');\r\n contentElem = contentElem.length ? contentElem : item.eq(index);\r\n contentElem.addClass(SHOW).siblings().removeClass(SHOW);\r\n }else{\r\n item.eq(index).addClass(SHOW).siblings().removeClass(SHOW);\r\n }\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'tab('+ filter +')', {\r\n elem: parents,\r\n index: index,\r\n id: hasId\r\n });\r\n }\r\n \r\n // Tab 删除\r\n ,tabDelete: function(e, othis){\r\n var li = othis || $(this).parent();\r\n var index = li.parent().children('li').index(li);\r\n var tabElem = li.closest('.layui-tab');\r\n var item = tabElem.children('.layui-tab-content').children('.layui-tab-item');\r\n var filter = tabElem.attr('lay-filter');\r\n var hasId = li.attr('lay-id');\r\n\r\n var shouldClose = layui.event.call(li[0], MOD_NAME, 'tabBeforeDelete('+ filter +')', {\r\n elem: tabElem,\r\n index: index,\r\n id: hasId\r\n });\r\n if(shouldClose === false) return;\r\n \r\n if(li.hasClass(THIS)){\r\n if (li.next()[0] && li.next().is('li')){\r\n call.tabClick.call(li.next()[0], {\r\n index: index + 1\r\n });\r\n } else if (li.prev()[0] && li.prev().is('li')){\r\n call.tabClick.call(li.prev()[0], null, index - 1);\r\n }\r\n }\r\n \r\n li.remove();\r\n if(hasId){\r\n var contentElem = item.filter('[lay-id=\"' + hasId + '\"]');\r\n contentElem = contentElem.length ? contentElem : item.eq(index)\r\n contentElem.remove()\r\n }else{\r\n item.eq(index).remove();\r\n }\r\n setTimeout(function(){\r\n call.tabAuto();\r\n }, 50);\r\n \r\n layui.event.call(this, MOD_NAME, 'tabDelete('+ filter +')', {\r\n elem: tabElem,\r\n index: index,\r\n id: hasId\r\n });\r\n }\r\n \r\n // Tab 自适应\r\n ,tabAuto: function(spread, elem){\r\n var SCROLL = 'layui-tab-scroll';\r\n var MORE = 'layui-tab-more';\r\n var BAR = 'layui-tab-bar';\r\n var CLOSE = 'layui-tab-close';\r\n var that = this;\r\n var targetElem = elem || $('.layui-tab');\r\n \r\n targetElem.each(function(){\r\n var othis = $(this);\r\n var title = othis.children('.layui-tab-title');\r\n var item = othis.children('.layui-tab-content').children('.layui-tab-item');\r\n var STOPE = 'lay-stope=\"tabmore\"';\r\n var span = $('');\r\n\r\n if(that === window && device.ie != 8){\r\n // call.hideTabMore(true)\r\n }\r\n \r\n // 开启关闭图标\r\n var allowclose = othis.attr('lay-allowclose');\r\n if(allowclose && allowclose !== 'false'){\r\n title.find('li').each(function(){\r\n var li = $(this);\r\n if(!li.find('.'+CLOSE)[0] && li.attr('lay-allowclose') !== 'false'){\r\n var close = $('');\r\n close.on('click', call.tabDelete);\r\n li.append(close);\r\n }\r\n });\r\n }\r\n \r\n if(typeof othis.attr('lay-unauto') === 'string') return;\r\n \r\n // 响应式\r\n if(\r\n title.prop('scrollWidth') > title.outerWidth() + 1 || (\r\n title.find('li').length && title.height() > function(height){\r\n return height + height/2;\r\n }(title.find('li').eq(0).height())\r\n )\r\n ){\r\n // 若执行是来自于切换,则自动展开\r\n (\r\n spread === 'change' && title.data('LAY_TAB_CHANGE')\r\n ) && title.addClass(MORE);\r\n \r\n if(title.find('.'+BAR)[0]) return;\r\n title.append(span);\r\n othis.attr('overflow', '');\r\n\r\n // 展开图标事件\r\n span.on('click', function(e){\r\n var isSpread = title.hasClass(MORE);\r\n title[isSpread ? 'removeClass' : 'addClass'](MORE);\r\n });\r\n } else {\r\n title.find('.'+ BAR).remove();\r\n othis.removeAttr('overflow');\r\n }\r\n });\r\n }\r\n // 隐藏更多 Tab\r\n ,hideTabMore: function(e){\r\n var tsbTitle = $('.layui-tab-title');\r\n if(e === true || $(e.target).attr('lay-stope') !== 'tabmore'){\r\n tsbTitle.removeClass('layui-tab-more');\r\n tsbTitle.find('.layui-tab-bar').attr('title','');\r\n }\r\n }\r\n \r\n //点击一级菜单\r\n /*\r\n ,clickThis: function(){\r\n var othis = $(this), parents = othis.parents(NAV_ELEM)\r\n ,filter = parents.attr('lay-filter')\r\n ,elemA = othis.find('a')\r\n ,unselect = typeof othis.attr('lay-unselect') === 'string';\r\n\r\n if(othis.find('.'+NAV_CHILD)[0]) return;\r\n \r\n if(!(elemA.attr('href') !== 'javascript:;' && elemA.attr('target') === '_blank') && !unselect){\r\n parents.find('.'+THIS).removeClass(THIS);\r\n othis.addClass(THIS);\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'nav('+ filter +')', othis);\r\n }\r\n )\r\n */\r\n \r\n // 点击菜单 - a 标签触发\r\n ,clickThis: function() {\r\n var othis = $(this);\r\n var parents = othis.closest(NAV_ELEM);\r\n var filter = parents.attr('lay-filter');\r\n var parent = othis.parent() ;\r\n var child = othis.siblings('.'+ NAV_CHILD);\r\n var unselect = typeof parent.attr('lay-unselect') === 'string'; // 是否禁用选中\r\n \r\n // 满足点击选中的条件\r\n if (!(othis.attr('href') !== 'javascript:;' && othis.attr('target') === '_blank') && !unselect) {\r\n if (!child[0]) {\r\n parents.find('.'+ THIS).removeClass(THIS);\r\n parent.addClass(THIS);\r\n }\r\n }\r\n \r\n // 若为垂直菜单\r\n if (parents.hasClass(NAV_TREE)) {\r\n var NAV_ITEMED = NAV_ITEM + 'ed'; // 用于标注展开状态\r\n var needExpand = !parent.hasClass(NAV_ITEMED); // 是否执行展开\r\n var ANIM_MS = 200; // 动画过渡毫秒数\r\n\r\n // 动画执行完成后的操作\r\n var complete = function() {\r\n $(this).css({\r\n \"display\": \"\" // 剔除动画生成的 style display,以适配外部样式的状态重置\r\n });\r\n // 避免导航滑块错位\r\n parents.children('.'+ NAV_BAR).css({\r\n opacity: 0\r\n })\r\n };\r\n\r\n // 是否正处于动画中的状态\r\n if (child.is(':animated')) return;\r\n\r\n // 剔除可能存在的 CSS3 动画类\r\n child.removeClass(NAV_ANIM);\r\n\r\n // 若有子菜单,则对其执行展开或收缩\r\n if (child[0]) {\r\n if (needExpand) {\r\n // 先执行 slideDown 动画,再标注展开状态样式,避免元素 `block` 状态导致动画无效\r\n child.slideDown(ANIM_MS, complete);\r\n parent.addClass(NAV_ITEMED);\r\n } else {\r\n // 先取消展开状态样式,再将元素临时显示,避免 `none` 状态导致 slideUp 动画无效\r\n parent.removeClass(NAV_ITEMED);\r\n child.show().slideUp(ANIM_MS, complete);\r\n }\r\n\r\n // 手风琴 --- 收缩兄弟展开项\r\n if (typeof parents.attr('lay-accordion') === 'string' || parents.attr('lay-shrink') === 'all') {\r\n var parentSibs = parent.siblings('.'+ NAV_ITEMED);\r\n parentSibs.removeClass(NAV_ITEMED);\r\n parentSibs.children('.'+ NAV_CHILD).show().stop().slideUp(ANIM_MS, complete);\r\n }\r\n }\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'nav('+ filter +')', othis);\r\n }\r\n \r\n // 折叠面板\r\n ,collapse: function(){\r\n var othis = $(this);\r\n var icon = othis.find('.layui-colla-icon');\r\n var elemCont = othis.siblings('.layui-colla-content');\r\n var parents = othis.parents('.layui-collapse').eq(0);\r\n var filter = parents.attr('lay-filter');\r\n var isNone = elemCont.css('display') === 'none';\r\n \r\n // 是否手风琴\r\n if(typeof parents.attr('lay-accordion') === 'string'){\r\n var show = parents.children('.layui-colla-item').children('.'+SHOW);\r\n show.siblings('.layui-colla-title').children('.layui-colla-icon').html('');\r\n show.removeClass(SHOW);\r\n }\r\n \r\n elemCont[isNone ? 'addClass' : 'removeClass'](SHOW);\r\n icon.html(isNone ? '' : '');\r\n \r\n layui.event.call(this, MOD_NAME, 'collapse('+ filter +')', {\r\n title: othis\r\n ,content: elemCont\r\n ,show: isNone\r\n });\r\n }\r\n };\r\n \r\n // 初始化元素操作\r\n Element.prototype.init = function(type, filter){\r\n var that = this, elemFilter = function(){\r\n return (typeof filter === 'string' && filter) ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }(), items = {\r\n \r\n // Tab 选项卡\r\n tab: function(elem){\r\n call.tabAuto.call({}, elem);\r\n }\r\n \r\n // 导航菜单\r\n ,nav: function(elem){\r\n var TIME = 200;\r\n var timer = {};\r\n var timerMore = {};\r\n var timeEnd = {};\r\n var NAV_TITLE = 'layui-nav-title';\r\n \r\n // 滑块跟随\r\n var follow = function(bar, nav, index) {\r\n var othis = $(this);\r\n var child = othis.find('.'+NAV_CHILD);\r\n\r\n // 是否垂直导航菜单\r\n if (nav.hasClass(NAV_TREE)) {\r\n // 无子菜单时跟随\r\n if (!child[0]) {\r\n var thisA = othis.children('.'+ NAV_TITLE);\r\n bar.css({\r\n top: othis.offset().top - nav.offset().top,\r\n height: (thisA[0] ? thisA : othis).outerHeight(),\r\n opacity: 1\r\n });\r\n }\r\n } else {\r\n child.addClass(NAV_ANIM);\r\n \r\n // 若居中对齐\r\n if (child.hasClass(NAV_CHILD_C)) {\r\n child.css({\r\n left: -(child.outerWidth() - othis.width()) / 2\r\n });\r\n }\r\n \r\n // 滑块定位\r\n if (child[0]) { // 若有子菜单,则滑块消失\r\n bar.css({\r\n left: bar.position().left + bar.width() / 2,\r\n width: 0,\r\n opacity: 0\r\n });\r\n } else { // bar 跟随\r\n bar.css({\r\n left: othis.position().left + parseFloat(othis.css('marginLeft')),\r\n top: othis.position().top + othis.height() - bar.height()\r\n });\r\n }\r\n \r\n // 渐显滑块并适配宽度\r\n timer[index] = setTimeout(function() {\r\n bar.css({\r\n width: child[0] ? 0 : othis.width(),\r\n opacity: child[0] ? 0 : 1\r\n });\r\n }, device.ie && device.ie < 10 ? 0 : TIME);\r\n \r\n // 显示子菜单\r\n clearTimeout(timeEnd[index]);\r\n if (child.css('display') === 'block') {\r\n clearTimeout(timerMore[index]);\r\n }\r\n timerMore[index] = setTimeout(function(){\r\n child.addClass(SHOW);\r\n othis.find('.'+NAV_MORE).addClass(NAV_MORE+'d');\r\n }, 300);\r\n }\r\n };\r\n \r\n // 遍历导航\r\n var targetElem = elem || $(NAV_ELEM + elemFilter);\r\n targetElem.each(function(index) {\r\n var othis = $(this);\r\n var bar = $('');\r\n var itemElem = othis.find('.'+NAV_ITEM);\r\n \r\n // hover 滑动效果\r\n if (!othis.find('.'+NAV_BAR)[0]) {\r\n othis.append(bar);\r\n ( othis.hasClass(NAV_TREE)\r\n ? itemElem.find('dd,>.'+ NAV_TITLE) \r\n : itemElem\r\n ).on('mouseenter', function() {\r\n follow.call(this, bar, othis, index);\r\n }).on('mouseleave', function() { // 鼠标移出\r\n // 是否为垂直导航\r\n if (othis.hasClass(NAV_TREE)) {\r\n bar.css({\r\n height: 0,\r\n opacity: 0\r\n });\r\n } else {\r\n // 隐藏子菜单\r\n clearTimeout(timerMore[index]);\r\n timerMore[index] = setTimeout(function(){\r\n othis.find('.'+ NAV_CHILD).removeClass(SHOW);\r\n othis.find('.'+ NAV_MORE).removeClass(NAV_MORE +'d');\r\n }, 300);\r\n }\r\n });\r\n\r\n // 鼠标离开当前菜单时\r\n othis.on('mouseleave', function() {\r\n clearTimeout(timer[index])\r\n timeEnd[index] = setTimeout(function() {\r\n if (!othis.hasClass(NAV_TREE)) {\r\n bar.css({\r\n width: 0,\r\n left: bar.position().left + bar.width() / 2,\r\n opacity: 0\r\n });\r\n }\r\n }, TIME);\r\n });\r\n }\r\n \r\n // 展开子菜单\r\n itemElem.find('a').each(function() {\r\n var thisA = $(this);\r\n var parent = thisA.parent();\r\n var child = thisA.siblings('.'+ NAV_CHILD);\r\n \r\n // 输出小箭头\r\n if (child[0] && !thisA.children('.'+ NAV_MORE)[0]) {\r\n thisA.append('');\r\n }\r\n \r\n thisA.off('click', call.clickThis).on('click', call.clickThis); // 点击菜单\r\n });\r\n });\r\n }\r\n \r\n //面包屑\r\n ,breadcrumb: function(elem){\r\n var ELEM = '.layui-breadcrumb';\r\n var targetElem = elem || $(ELEM + elemFilter);\r\n\r\n targetElem.each(function(){\r\n var othis = $(this)\r\n ,ATTE_SPR = 'lay-separator'\r\n ,separator = othis.attr(ATTE_SPR) || '/'\r\n ,aNode = othis.find('a');\r\n if(aNode.next('span['+ ATTE_SPR +']')[0]) return;\r\n aNode.each(function(index){\r\n if(index === aNode.length - 1) return;\r\n $(this).after(''+ separator +'');\r\n });\r\n othis.css('visibility', 'visible');\r\n });\r\n }\r\n \r\n //进度条\r\n ,progress: function(elem){\r\n var ELEM = 'layui-progress';\r\n var targetElem = elem || $('.' + ELEM + elemFilter);\r\n\r\n targetElem.each(function(){\r\n var othis = $(this)\r\n ,elemBar = othis.find('.layui-progress-bar')\r\n ,percent = elemBar.attr('lay-percent');\r\n\r\n elemBar.css('width', function(){\r\n return /^.+\\/.+$/.test(percent) \r\n ? (new Function('return '+ percent)() * 100) + '%'\r\n : percent;\r\n });\r\n \r\n if(othis.attr('lay-showpercent')){\r\n setTimeout(function(){\r\n elemBar.html(''+ percent +'');\r\n },350);\r\n }\r\n });\r\n }\r\n \r\n //折叠面板\r\n ,collapse: function(elem){\r\n var ELEM = 'layui-collapse';\r\n var targetElem = elem || $('.' + ELEM + elemFilter);\r\n \r\n targetElem.each(function(){\r\n var elemItem = $(this).find('.layui-colla-item')\r\n elemItem.each(function(){\r\n var othis = $(this)\r\n ,elemTitle = othis.find('.layui-colla-title')\r\n ,elemCont = othis.find('.layui-colla-content')\r\n ,isNone = elemCont.css('display') === 'none';\r\n \r\n //初始状态\r\n elemTitle.find('.layui-colla-icon').remove();\r\n elemTitle.append(''+ (isNone ? '' : '') +'');\r\n\r\n //点击标题\r\n elemTitle.off('click', call.collapse).on('click', call.collapse);\r\n }); \r\n \r\n });\r\n }\r\n };\r\n\r\n if(type && typeof filter === 'object' && filter instanceof $){\r\n var targetElem = filter;\r\n return items[type](targetElem);\r\n }\r\n\r\n return items[type] ? items[type]() : layui.each(items, function(index, item){\r\n item();\r\n });\r\n };\r\n \r\n Element.prototype.render = Element.prototype.init;\r\n\r\n var element = new Element();\r\n var dom = $(document);\r\n \r\n $(function(){\r\n element.render();\r\n });\r\n\r\n dom.on('click', '.layui-tab-title li', call.tabClick); // Tab 切换\r\n // dom.on('click', call.hideTabMore); // 隐藏展开的 Tab\r\n $(window).on('resize', call.tabAuto); // 自适应\r\n \r\n exports(MOD_NAME, element);\r\n});\r\n\r\n","/**\r\n * upload\r\n * 上传组件\r\n */\r\n \r\nlayui.define(['lay', 'layer'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n var layer = layui.layer;\r\n var device = layui.device();\r\n\r\n // 模块名\r\n var MOD_NAME = 'upload';\r\n var MOD_INDEX = 'layui_'+ MOD_NAME +'_index'; // 模块索引名\r\n\r\n // 外部接口\r\n var upload = {\r\n config: {}, // 全局配置项\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0, // 索引\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n \r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n upload: function(files){\r\n that.upload.call(that, files);\r\n },\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n config: that.config\r\n }\r\n };\r\n \r\n // 字符常量\r\n var ELEM = 'layui-upload';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled';\r\n \r\n var ELEM_FILE = 'layui-upload-file';\r\n var ELEM_FORM = 'layui-upload-form';\r\n var ELEM_IFRAME = 'layui-upload-iframe';\r\n var ELEM_CHOOSE = 'layui-upload-choose';\r\n var ELEM_DRAG = 'layui-upload-drag';\r\n var UPLOADING = 'UPLOADING';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++upload.index;\r\n that.config = $.extend({}, that.config, upload.config, options);\r\n that.render();\r\n };\r\n \r\n // 默认配置\r\n Class.prototype.config = {\r\n accept: 'images', // 允许上传的文件类型:images/file/video/audio\r\n exts: '', // 允许上传的文件后缀名\r\n auto: true, // 是否选完文件后自动上传\r\n bindAction: '', // 手动上传触发的元素\r\n url: '', // 上传地址\r\n force: '', // 强制规定返回的数据格式,目前只支持是否强制 json\r\n field: 'file', // 文件字段名\r\n acceptMime: '', // 筛选出的文件类型,默认为所有文件\r\n method: 'post', // 请求上传的 http 类型\r\n data: {}, // 请求上传的额外参数\r\n drag: true, // 是否允许拖拽上传\r\n size: 0, // 文件限制大小,默认不限制\r\n number: 0, // 允许同时上传的文件数,默认不限制\r\n multiple: false, // 是否允许多文件上传,不支持 ie8-9\r\n text: { // 自定义提示文本\r\n \"cross-domain\": \"Cross-domain requests are not supported\", // 跨域\r\n \"data-format-error\": \"Please return JSON data format\", // 数据格式错误\r\n \"check-error\": \"\", // 文件格式校验失败\r\n \"error\": \"\", // 上传失败\r\n \"limit-number\": null, // 限制 number 属性的提示 --- function\r\n \"limit-size\": null // 限制 size 属性的提示 --- function\r\n }\r\n };\r\n\r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.render(true);\r\n };\r\n \r\n // 初始渲染\r\n Class.prototype.render = function(rerender){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if (elem.length > 1) {\r\n layui.each(elem, function() {\r\n upload.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0], {\r\n attr: elem.attr('lay-data') ? 'lay-data' : null // 兼容旧版的 lay-data 属性\r\n }));\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if (!rerender && elem[0] && elem.data(MOD_INDEX)) {\r\n var newThat = thisModule.getThis(elem.data(MOD_INDEX));\r\n if(!newThat) return;\r\n\r\n return newThat.reload(options);\r\n }\r\n\r\n options.elem = $(options.elem);\r\n options.bindAction = $(options.bindAction);\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n that.file();\r\n that.events();\r\n };\r\n \r\n //追加文件域\r\n Class.prototype.file = function(){\r\n var that = this;\r\n var options = that.config;\r\n var elemFile = that.elemFile = $([\r\n ''\r\n ].join(''));\r\n var next = options.elem.next();\r\n \r\n if(next.hasClass(ELEM_FILE) || next.hasClass(ELEM_FORM)){\r\n next.remove();\r\n }\r\n \r\n //包裹ie8/9容器\r\n if(device.ie && device.ie < 10){\r\n options.elem.wrap('
          ');\r\n }\r\n \r\n that.isFile() ? (\r\n that.elemFile = options.elem,\r\n options.field = options.elem[0].name\r\n ) : options.elem.after(elemFile);\r\n \r\n //初始化ie8/9的Form域\r\n if(device.ie && device.ie < 10){\r\n that.initIE();\r\n }\r\n };\r\n \r\n //ie8-9初始化\r\n Class.prototype.initIE = function(){\r\n var that = this;\r\n var options = that.config;\r\n var iframe = $('');\r\n var elemForm = $(['
          '\r\n ,''].join(''));\r\n \r\n //插入iframe \r\n $('#'+ ELEM_IFRAME)[0] || $('body').append(iframe);\r\n\r\n //包裹文件域\r\n if(!options.elem.next().hasClass(ELEM_FORM)){\r\n that.elemFile.wrap(elemForm); \r\n \r\n //追加额外的参数\r\n options.elem.next('.'+ ELEM_FORM).append(function(){\r\n var arr = [];\r\n layui.each(options.data, function(key, value){\r\n value = typeof value === 'function' ? value() : value;\r\n arr.push('')\r\n });\r\n return arr.join('');\r\n }());\r\n }\r\n };\r\n \r\n //异常提示\r\n Class.prototype.msg = function(content){\r\n return layer.msg(content, {\r\n icon: 2,\r\n shift: 6\r\n });\r\n };\r\n \r\n //判断绑定元素是否为文件域本身\r\n Class.prototype.isFile = function(){\r\n var elem = this.config.elem[0];\r\n if(!elem) return;\r\n return elem.tagName.toLocaleLowerCase() === 'input' && elem.type === 'file'\r\n }\r\n \r\n //预读图片信息\r\n Class.prototype.preview = function(callback){\r\n var that = this;\r\n if(window.FileReader){\r\n layui.each(that.chooseFiles, function(index, file){\r\n var reader = new FileReader();\r\n reader.readAsDataURL(file); \r\n reader.onload = function(){\r\n callback && callback(index, file, this.result);\r\n }\r\n });\r\n }\r\n };\r\n \r\n // 执行上传\r\n Class.prototype.upload = function(files, type){\r\n var that = this;\r\n var options = that.config;\r\n var text = options.text || {};\r\n var elemFile = that.elemFile[0];\r\n\r\n // 获取文件队列\r\n var getFiles = function(){\r\n return files || that.files || that.chooseFiles || elemFile.files;\r\n };\r\n \r\n // 高级浏览器处理方式,支持跨域\r\n var ajaxSend = function(){\r\n var successful = 0;\r\n var failed = 0;\r\n var items = getFiles();\r\n\r\n // 多文件全部上传完毕的回调\r\n var allDone = function(){\r\n if(options.multiple && successful + failed === that.fileLength){\r\n typeof options.allDone === 'function' && options.allDone({\r\n total: that.fileLength,\r\n successful: successful,\r\n failed: failed\r\n });\r\n }\r\n };\r\n\r\n // 发送请求\r\n var request = function(sets){\r\n var formData = new FormData();\r\n\r\n // 恢复文件状态\r\n var resetFileState = function(file) {\r\n if (sets.unified) {\r\n layui.each(items, function(index, file){\r\n delete file[UPLOADING];\r\n });\r\n } else {\r\n delete file[UPLOADING];\r\n }\r\n };\r\n\r\n // 追加额外的参数\r\n layui.each(options.data, function(key, value){\r\n value = typeof value === 'function' \r\n ? sets.unified ? value() : value(sets.index, sets.file)\r\n : value;\r\n formData.append(key, value);\r\n });\r\n\r\n /*\r\n * 添加 file 到表单域\r\n */\r\n\r\n // 是否统一上传\r\n if (sets.unified) {\r\n layui.each(items, function(index, file){\r\n if (file[UPLOADING]) return;\r\n file[UPLOADING] = true; // 上传中的标记\r\n formData.append(options.field, file);\r\n });\r\n } else { // 逐一上传\r\n if (sets.file[UPLOADING]) return;\r\n formData.append(options.field, sets.file);\r\n sets.file[UPLOADING] = true; // 上传中的标记\r\n }\r\n\r\n // ajax 参数\r\n var opts = {\r\n url: options.url,\r\n type: 'post', // 统一采用 post 上传\r\n data: formData,\r\n dataType: options.dataType || 'json',\r\n contentType: false,\r\n processData: false,\r\n headers: options.headers || {},\r\n success: function(res){ // 成功回调\r\n options.unified ? (successful += that.fileLength) : successful++;\r\n done(sets.index, res);\r\n allDone(sets.index);\r\n resetFileState(sets.file);\r\n },\r\n error: function(e){ // 异常回调\r\n options.unified ? (failed += that.fileLength) : failed++;\r\n that.msg(text['error'] || [\r\n 'Upload failed, please try again.',\r\n 'status: '+ (e.status || '') +' - '+ (e.statusText || 'error')\r\n ].join('
          '));\r\n error(sets.index, e.responseText, e);\r\n allDone(sets.index);\r\n resetFileState(sets.file);\r\n }\r\n };\r\n\r\n // 进度条\r\n if(typeof options.progress === 'function'){\r\n opts.xhr = function(){\r\n var xhr = $.ajaxSettings.xhr();\r\n // 上传进度\r\n xhr.upload.addEventListener(\"progress\", function (obj) {\r\n if(obj.lengthComputable){\r\n var percent = Math.floor((obj.loaded/obj.total)* 100); // 百分比\r\n options.progress(percent, (options.item ? options.item[0] : options.elem[0]) , obj, sets.index);\r\n }\r\n });\r\n return xhr;\r\n }\r\n }\r\n $.ajax(opts);\r\n };\r\n\r\n // 多文件是否一起上传\r\n if(options.unified){\r\n request({\r\n unified: true,\r\n index: 0\r\n });\r\n } else {\r\n layui.each(items, function(index, file){\r\n request({\r\n index: index,\r\n file: file\r\n });\r\n });\r\n }\r\n };\r\n \r\n // 低版本 IE 处理方式,不支持跨域\r\n var iframeSend = function(){\r\n var iframe = $('#'+ ELEM_IFRAME);\r\n \r\n that.elemFile.parent().submit();\r\n\r\n // 获取响应信息\r\n clearInterval(Class.timer);\r\n Class.timer = setInterval(function() {\r\n var res, iframeBody = iframe.contents().find('body');\r\n try {\r\n res = iframeBody.text();\r\n } catch(e) {\r\n that.msg(text['cross-domain']); \r\n clearInterval(Class.timer);\r\n error();\r\n }\r\n if(res){\r\n clearInterval(Class.timer);\r\n iframeBody.html('');\r\n done(0, res);\r\n }\r\n }, 30); \r\n };\r\n\r\n // 强制返回的数据格式\r\n var forceConvert = function(src) {\r\n if(options.force === 'json'){\r\n if(typeof src !== 'object'){\r\n try {\r\n return {\r\n status: \"CONVERTED\",\r\n data: JSON.parse(src)\r\n };\r\n } catch(e){\r\n that.msg(text['data-format-error']);\r\n return {\r\n status: \"FORMAT_ERROR\",\r\n data: {}\r\n };\r\n }\r\n }\r\n }\r\n return { status: \"DO_NOTHING\", data: {} }\r\n }\r\n\r\n // 统一回调\r\n var done = function(index, res){\r\n that.elemFile.next('.'+ ELEM_CHOOSE).remove();\r\n elemFile.value = '';\r\n \r\n var convert = forceConvert(res);\r\n\r\n switch(convert.status) {\r\n case \"CONVERTED\":\r\n res = convert.data;\r\n break;\r\n case \"FORMAT_ERROR\":\r\n return;\r\n }\r\n \r\n typeof options.done === 'function' && options.done(res, index || 0, function(files){\r\n that.upload(files);\r\n });\r\n };\r\n \r\n // 统一网络异常回调\r\n var error = function(index, res, xhr){\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n\r\n var convert = forceConvert(res);\r\n\r\n switch(convert.status) {\r\n case \"CONVERTED\":\r\n res = convert.data;\r\n break;\r\n case \"FORMAT_ERROR\":\r\n return;\r\n }\r\n\r\n typeof options.error === 'function' && options.error(index || 0, function(files){\r\n that.upload(files);\r\n }, res, xhr);\r\n };\r\n \r\n var check;\r\n var exts = options.exts;\r\n var value = function(){\r\n var arr = [];\r\n layui.each(files || that.chooseFiles, function(i, item){\r\n arr.push(item.name);\r\n });\r\n return arr;\r\n }();\r\n \r\n // 回调函数返回的参数\r\n var args = {\r\n // 预览\r\n preview: function(callback){\r\n that.preview(callback);\r\n },\r\n // 上传\r\n upload: function(index, file){\r\n var thisFile = {};\r\n thisFile[index] = file;\r\n that.upload(thisFile);\r\n },\r\n // 追加文件到队列\r\n pushFile: function(){\r\n that.files = that.files || {};\r\n layui.each(that.chooseFiles, function(index, item){\r\n that.files[index] = item;\r\n });\r\n return that.files;\r\n },\r\n // 重置文件\r\n resetFile: function(index, file, filename){\r\n var newFile = new File([file], filename);\r\n that.files = that.files || {};\r\n that.files[index] = newFile;\r\n },\r\n // 获取本次选取的文件\r\n getChooseFiles: function(){\r\n return that.chooseFiles;\r\n }\r\n };\r\n \r\n // 提交上传\r\n var send = function(){\r\n var ready = function(){\r\n // IE 兼容处理\r\n if(device.ie){\r\n return device.ie > 9 ? ajaxSend() : iframeSend();\r\n }\r\n ajaxSend();\r\n }\r\n // 上传前的回调 - 如果回调函数明确返回 false 或 Promise.reject,则停止上传\r\n if(typeof options.before === 'function'){\r\n upload.util.promiseLikeResolve(options.before(args))\r\n .then(function(result){\r\n if(result !== false){\r\n ready();\r\n } else {\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n }\r\n }, function(error){\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n error !== undefined && layui.hint().error(error);\r\n })\r\n }else{\r\n ready();\r\n }\r\n };\r\n \r\n // 文件类型名称\r\n var typeName = ({\r\n file: '文件',\r\n images: '图片',\r\n video: '视频',\r\n audio: '音频'\r\n })[options.accept] || '文件';\r\n\r\n // 校验文件格式\r\n value = value.length === 0 \r\n ? ((elemFile.value.match(/[^\\/\\\\]+\\..+/g)||[]) || '')\r\n : value;\r\n \r\n // 若文件域值为空\r\n if (value.length === 0) return;\r\n \r\n // 根据文件类型校验\r\n switch(options.accept){\r\n case 'file': // 一般文件\r\n layui.each(value, function(i, item){\r\n if(exts && !RegExp('.\\\\.('+ exts +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n case 'video': // 视频文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'avi|mp4|wma|rmvb|rm|flash|3gp|flv') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n case 'audio': // 音频文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'mp3|wav|mid') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n default: // 图片文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'jpg|png|gif|bmp|jpeg|svg|webp') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n }\r\n \r\n // 校验失败提示\r\n if(check){\r\n that.msg(text['check-error'] || ('选择的'+ typeName +'中包含不支持的格式'));\r\n return elemFile.value = '';\r\n }\r\n\r\n // 选择文件的回调 \r\n if(type === 'choose' || options.auto){\r\n options.choose && options.choose(args);\r\n if(type === 'choose'){\r\n return;\r\n }\r\n }\r\n \r\n // 检验文件数量\r\n that.fileLength = function(){\r\n var length = 0;\r\n var items = getFiles();\r\n layui.each(items, function(){\r\n length++;\r\n });\r\n return length;\r\n }();\r\n \r\n if(options.number && that.fileLength > options.number){\r\n return that.msg(typeof text['limit-number'] === 'function' \r\n ? text['limit-number'](options, that.fileLength) \r\n : (\r\n '同时最多只能上传: '+ options.number + ' 个文件'\r\n +'
          您当前已经选择了: '+ that.fileLength +' 个文件'\r\n ));\r\n }\r\n \r\n // 检验文件大小\r\n if(options.size > 0 && !(device.ie && device.ie < 10)){\r\n var limitSize;\r\n \r\n layui.each(getFiles(), function(index, file){\r\n if(file.size > 1024*options.size){\r\n var size = options.size/1024;\r\n size = size >= 1 ? (size.toFixed(2) + 'MB') : options.size + 'KB'\r\n elemFile.value = '';\r\n limitSize = size;\r\n }\r\n });\r\n if(limitSize) return that.msg(typeof text['limit-size'] === 'function' \r\n ? text['limit-size'](options, limitSize) \r\n : '文件大小不能超过 '+ limitSize);\r\n }\r\n\r\n send();\r\n };\r\n \r\n //事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 设置当前选择的文件队列\r\n var setChooseFile = function(files){\r\n that.chooseFiles = {};\r\n layui.each(files, function(i, item){\r\n var time = new Date().getTime();\r\n that.chooseFiles[time + '-' + i] = item;\r\n });\r\n };\r\n \r\n // 设置选择的文本\r\n var setChooseText = function(files, filename){\r\n var elemFile = that.elemFile;\r\n var item = options.item ? options.item : options.elem;\r\n var value = files.length > 1 \r\n ? files.length + '个文件' \r\n : ((files[0] || {}).name || (elemFile[0].value.match(/[^\\/\\\\]+\\..+/g)||[]) || '');\r\n \r\n if(elemFile.next().hasClass(ELEM_CHOOSE)){\r\n elemFile.next().remove();\r\n }\r\n that.upload(null, 'choose');\r\n if(that.isFile() || options.choose) return;\r\n elemFile.after(''+ value +'');\r\n };\r\n\r\n /**\r\n * 判断文件是否加入排队\r\n * @param {File} file\r\n * @return {boolean}\r\n */\r\n var checkFile = function (file) {\r\n var result = true;\r\n layui.each(that.files, function (index, item) {\r\n result = !(item.name === file.name);\r\n if(!result) return true;\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 扩展文件信息\r\n * @template {File | FileList} T\r\n * @param {T} obj\r\n * @return {T}\r\n */\r\n var extendInfo = function (obj) {\r\n\r\n var extInfo = function (file) {\r\n //文件扩展名\r\n file.ext = file.name.substr(file.name.lastIndexOf('.') + 1).toLowerCase();\r\n // 文件大小\r\n file.sizes = upload.util.parseSize(file.size);\r\n // 可以继续扩展\r\n }\r\n\r\n //FileList对象\r\n if (obj instanceof FileList) {\r\n layui.each(obj, function (index, item) {\r\n extInfo(item);\r\n });\r\n } else {\r\n extInfo(obj);\r\n }\r\n\r\n return obj;\r\n }\r\n \r\n /**\r\n * 检查获取文件\r\n * @param {FileList} files\r\n * @return {Array|FileList}\r\n */\r\n var getFiles = function (files) {\r\n files = files || [];\r\n if (!files.length) return [];\r\n if (!that.files) return extendInfo(files);\r\n var result = [];\r\n layui.each(files, function (index, item) {\r\n if (checkFile(item)) {\r\n result.push(extendInfo(item));\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n // 点击上传容器\r\n options.elem.off('upload.start').on('upload.start', function(){\r\n var othis = $(this);\r\n\r\n that.config.item = othis;\r\n that.elemFile[0].click();\r\n });\r\n \r\n // 拖拽上传\r\n if(!(device.ie && device.ie < 10)){\r\n options.elem.off('upload.over').on('upload.over', function(){\r\n var othis = $(this)\r\n othis.attr('lay-over', '');\r\n })\r\n .off('upload.leave').on('upload.leave', function(){\r\n var othis = $(this)\r\n othis.removeAttr('lay-over');\r\n })\r\n .off('upload.drop').on('upload.drop', function(e, param){\r\n var othis = $(this);\r\n var files = getFiles(param.originalEvent.dataTransfer.files);\r\n \r\n othis.removeAttr('lay-over');\r\n setChooseFile(files);\r\n\r\n options.auto ? that.upload() : setChooseText(files); // 是否自动触发上传\r\n });\r\n }\r\n \r\n // 文件选择\r\n that.elemFile.on('change', function(){\r\n var files = getFiles(this.files);\r\n\r\n if(files.length === 0) return;\r\n\r\n setChooseFile(files);\r\n\r\n options.auto ? that.upload() : setChooseText(files); // 是否自动触发上传\r\n });\r\n \r\n // 手动触发上传\r\n options.bindAction.off('upload.action').on('upload.action', function(){\r\n that.upload();\r\n });\r\n\r\n\r\n // 防止事件重复绑定\r\n if(options.elem.data(MOD_INDEX)) return;\r\n\r\n\r\n // 目标元素 click 事件\r\n options.elem.on('click', function(){\r\n if(that.isFile()) return;\r\n $(this).trigger('upload.start');\r\n });\r\n \r\n // 目标元素 drop 事件\r\n if(options.drag){\r\n options.elem.on('dragover', function(e){\r\n e.preventDefault();\r\n $(this).trigger('upload.over');\r\n }).on('dragleave', function(e){\r\n $(this).trigger('upload.leave');\r\n }).on('drop', function(e){\r\n e.preventDefault();\r\n $(this).trigger('upload.drop', e);\r\n });\r\n }\r\n \r\n // 手动上传时触发上传的元素 click 事件\r\n options.bindAction.on('click', function(){\r\n $(this).trigger('upload.action');\r\n });\r\n \r\n // 绑定元素索引\r\n options.elem.data(MOD_INDEX, options.id);\r\n };\r\n\r\n /**\r\n * 上传组件辅助方法\r\n */\r\n upload.util = {\r\n /**\r\n * 文件大小处理\r\n * @param {number | string} size -文件大小\r\n * @param {number} [precision] - 数值精度\r\n * @return {string}\r\n */\r\n parseSize: function (size, precision) {\r\n precision = precision || 2;\r\n if (null == size || !size) {\r\n return '0';\r\n }\r\n var unitArr = [\"Bytes\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"];\r\n var index;\r\n var formatSize = typeof size === 'string' ? parseFloat(size) : size;\r\n index = Math.floor(Math.log(formatSize) / Math.log(1024));\r\n size = formatSize / Math.pow(1024, index);\r\n size = size % 1 === 0 ? size : parseFloat(size.toFixed(precision));//保留的小数位数\r\n return size + unitArr[index];\r\n },\r\n /**\r\n * 将给定的值转换为一个 JQueryDeferred 对象\r\n */\r\n promiseLikeResolve:function(value){\r\n var deferred = $.Deferred();\r\n\r\n if(value && typeof value.then === 'function'){\r\n value.then(deferred.resolve, deferred.reject);\r\n }else{\r\n deferred.resolve(value);\r\n }\r\n return deferred.promise();\r\n }\r\n }\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n\r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n // 核心入口 \r\n upload.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n \r\n exports(MOD_NAME, upload);\r\n});\r\n\r\n","/**\r\n * form 表单组件\r\n */\r\n \r\nlayui.define(['lay', 'layer', 'util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var layer = layui.layer;\r\n var util = layui.util;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n \r\n var MOD_NAME = 'form';\r\n var ELEM = '.layui-form';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled';\r\n var OUT_OF_RANGE = 'layui-input-number-out-of-range';\r\n \r\n var Form = function(){\r\n this.config = {\r\n // 内置的验证规则\r\n verify: {\r\n required: function(value) {\r\n if (!/[\\S]+/.test(value)) {\r\n return '必填项不能为空';\r\n }\r\n },\r\n phone: function(value) {\r\n var EXP = /^1\\d{10}$/;\r\n if (value && !EXP.test(value)) {\r\n return '手机号格式不正确';\r\n }\r\n },\r\n email: function(value) {\r\n var EXP = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\r\n if (value && !EXP.test(value)) {\r\n return '邮箱格式不正确';\r\n }\r\n },\r\n url: function(value) {\r\n var EXP = /^(#|(http(s?)):\\/\\/|\\/\\/)[^\\s]+\\.[^\\s]+$/;\r\n if (value && !EXP.test(value)) {\r\n return '链接格式不正确';\r\n }\r\n },\r\n number: function(value){\r\n if (value && isNaN(value)) {\r\n return '只能填写数字';\r\n }\r\n },\r\n date: function(value){\r\n var EXP = /^(\\d{4})[-\\/](\\d{1}|0\\d{1}|1[0-2])([-\\/](\\d{1}|0\\d{1}|[1-2][0-9]|3[0-1]))*$/;\r\n if (value && !EXP.test(value)) {\r\n return '日期格式不正确';\r\n }\r\n },\r\n identity: function(value) {\r\n var EXP = /(^\\d{15}$)|(^\\d{17}(x|X|\\d)$)/;\r\n if (value && !EXP.test(value)) {\r\n return '身份证号格式不正确';\r\n }\r\n }\r\n },\r\n autocomplete: null // 全局 autocomplete 状态。 null 表示不干预\r\n };\r\n };\r\n \r\n // 全局设置\r\n Form.prototype.set = function(options){\r\n var that = this;\r\n $.extend(true, that.config, options);\r\n return that;\r\n };\r\n \r\n // 验证规则设定\r\n Form.prototype.verify = function(settings){\r\n var that = this;\r\n $.extend(true, that.config.verify, settings);\r\n return that;\r\n };\r\n\r\n // 获取指定表单对象\r\n Form.prototype.getFormElem = function(filter){\r\n return $(ELEM + function(){\r\n return filter ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }());\r\n };\r\n \r\n // 表单事件\r\n Form.prototype.on = function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n };\r\n \r\n // 赋值/取值\r\n Form.prototype.val = function(filter, object){\r\n var that = this\r\n ,formElem = that.getFormElem(filter);\r\n \r\n // 遍历\r\n formElem.each(function(index, item){\r\n var itemForm = $(this);\r\n \r\n // 赋值\r\n layui.each(object, function(key, value){\r\n var itemElem = itemForm.find('[name=\"'+ key +'\"]')\r\n ,type;\r\n \r\n // 如果对应的表单不存在,则不执行\r\n if(!itemElem[0]) return;\r\n type = itemElem[0].type;\r\n \r\n // 如果为复选框\r\n if(type === 'checkbox'){\r\n itemElem[0].checked = value;\r\n } else if(type === 'radio') { // 如果为单选框\r\n itemElem.each(function(){\r\n this.checked = this.value == value + '';\r\n });\r\n } else { // 其它类型的表单\r\n itemElem.val(value);\r\n }\r\n });\r\n });\r\n \r\n form.render(null, filter);\r\n \r\n // 返回值\r\n return that.getValue(filter);\r\n };\r\n \r\n // 取值\r\n Form.prototype.getValue = function(filter, itemForm){\r\n itemForm = itemForm || this.getFormElem(filter);\r\n \r\n var nameIndex = {} // 数组 name 索引\r\n ,field = {}\r\n ,fieldElem = itemForm.find('input,select,textarea') // 获取所有表单域\r\n \r\n layui.each(fieldElem, function(_, item){ \r\n var othis = $(this)\r\n ,init_name; // 初始 name\r\n \r\n item.name = (item.name || '').replace(/^\\s*|\\s*&/, '');\r\n if(!item.name) return;\r\n \r\n // 用于支持数组 name\r\n if(/^.*\\[\\]$/.test(item.name)){\r\n var key = item.name.match(/^(.*)\\[\\]$/g)[0];\r\n nameIndex[key] = nameIndex[key] | 0;\r\n init_name = item.name.replace(/^(.*)\\[\\]$/, '$1['+ (nameIndex[key]++) +']');\r\n }\r\n \r\n if(/^(checkbox|radio)$/.test(item.type) && !item.checked) return; // 复选框和单选框未选中,不记录字段 \r\n field[init_name || item.name] = item.value;\r\n });\r\n \r\n return field;\r\n };\r\n \r\n // 表单控件渲染\r\n Form.prototype.render = function(type, filter){\r\n var that = this;\r\n var options = that.config;\r\n var elemForm = $(ELEM + function(){\r\n return filter ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }());\r\n var items = {\r\n // 输入框\r\n input: function(elem){\r\n var inputs = elem || elemForm.find('input,textarea');\r\n\r\n // 初始化全局的 autocomplete\r\n options.autocomplete && inputs.attr('autocomplete', options.autocomplete);\r\n\r\n var handleInputNumber = function(elem, eventType){\r\n var that = this;\r\n var rawValue = elem.val();\r\n var value = Number(rawValue);\r\n var step = Number(elem.attr('step')) || 1; // 加减的数字间隔\r\n var min = Number(elem.attr('min'));\r\n var max = Number(elem.attr('max'));\r\n var precision = Number(elem.attr('lay-precision'));\r\n var noAction = eventType !== 'click' && rawValue === ''; // 初始渲染和失焦时空值不作处理\r\n var isInit = eventType === 'init';\r\n\r\n if(isNaN(value)) return; // 若非数字,则不作处理\r\n\r\n if(eventType === 'click'){\r\n var isDecrement = !!$(that).index() // 0: icon-up, 1: icon-down\r\n value = isDecrement ? value - step : value + step;\r\n }\r\n\r\n // 获取小数点后位数\r\n var decimals = function(step){\r\n var decimals = (step.toString().match(/\\.(\\d+$)/) || [])[1] || '';\r\n return decimals.length;\r\n };\r\n\r\n precision = precision >= 0 ? precision : Math.max(decimals(step), decimals(rawValue));\r\n\r\n // 赋值\r\n if (!noAction) {\r\n // 初始渲染时只处理数字精度\r\n if (!isInit) {\r\n if(value <= min) value = min;\r\n if(value >= max) value = max;\r\n }\r\n // 若 `lay-precision` 为 0, 则表示只保留整数\r\n if (precision === 0) {\r\n value = parseInt(value);\r\n } else if(precision > 0) { // 小数位精度\r\n value = value.toFixed(precision);\r\n }\r\n elem.val(value);\r\n }\r\n\r\n // 超出范围的样式\r\n var outOfRange = value < min || value > max;\r\n elem[outOfRange && !noAction ? 'addClass' : 'removeClass'](OUT_OF_RANGE);\r\n\r\n if(isInit) return;\r\n\r\n // 更新按钮状态\r\n var controlBtn = {\r\n increment: elem.next().find('.layui-icon-up'),\r\n decrement: elem.next().find('.layui-icon-down')\r\n }\r\n controlBtn.increment[(value >= max && !noAction) ? 'addClass' : 'removeClass'](DISABLED)\r\n controlBtn.decrement[(value <= min && !noAction) ? 'addClass' : 'removeClass'](DISABLED)\r\n }\r\n\r\n // 初始化输入框动态点缀\r\n elemForm.find('input[lay-affix],textarea[lay-affix]').each(function(){\r\n var othis = $(this);\r\n var affix = othis.attr('lay-affix');\r\n var CLASS_WRAP = 'layui-input-wrap';\r\n var CLASS_SUFFIX = 'layui-input-suffix';\r\n var CLASS_AFFIX = 'layui-input-affix';\r\n var disabled = othis.is('[disabled]') || othis.is('[readonly]');\r\n\r\n // 根据是否空值来显示或隐藏元素\r\n var showAffix = function(elem, value){\r\n elem = $(elem);\r\n if(!elem[0]) return;\r\n elem[$.trim(value) ? 'removeClass' : 'addClass'](HIDE);\r\n };\r\n\r\n // 渲染动态点缀内容\r\n var renderAffix = function(opts){\r\n opts = $.extend({}, (affixOptions[affix] || {\r\n value: affix\r\n }), opts, lay.options(othis[0]));\r\n var elemAffix = $('
          ');\r\n var value = layui.isArray(opts.value) ? opts.value : [opts.value];\r\n var elemIcon = $(function(){\r\n var arr = [];\r\n layui.each(value, function(i, item){\r\n arr.push('');\r\n });\r\n return arr.join('');\r\n }());\r\n \r\n elemAffix.append(elemIcon); // 插入图标元素\r\n\r\n // 追加 className\r\n if(opts.split) elemAffix.addClass('layui-input-split');\r\n if(opts.className) elemAffix.addClass(opts.className);\r\n\r\n // 移除旧的元素\r\n var hasElemAffix = othis.next('.'+ CLASS_AFFIX);\r\n if(hasElemAffix[0]) hasElemAffix.remove();\r\n\r\n // 是否在规定的容器中\r\n if(!othis.parent().hasClass(CLASS_WRAP)){\r\n othis.wrap('
          ');\r\n }\r\n\r\n // 是否已经存在后缀元素\r\n var hasElemSuffix = othis.next('.'+ CLASS_SUFFIX);\r\n if(hasElemSuffix[0]){\r\n hasElemAffix = hasElemSuffix.find('.'+ CLASS_AFFIX);\r\n if(hasElemAffix[0]) hasElemAffix.remove();\r\n\r\n hasElemSuffix.prepend(elemAffix);\r\n\r\n othis.css('padding-right', function(){\r\n var paddingRight = othis.closest('.layui-input-group')[0] \r\n ? 0 \r\n : hasElemSuffix.outerWidth();\r\n return paddingRight + elemAffix.outerWidth()\r\n });\r\n } else {\r\n elemAffix.addClass(CLASS_SUFFIX);\r\n othis.after(elemAffix);\r\n }\r\n\r\n opts.show === 'auto' && showAffix(elemAffix, othis.val());\r\n \r\n typeof opts.init === 'function' && opts.init.call(this, othis, opts);\r\n \r\n // 输入事件\r\n othis.on('input propertychange', function(){\r\n var value = this.value;\r\n opts.show === 'auto' && showAffix(elemAffix, value);\r\n });\r\n\r\n // 失去焦点事件\r\n othis.on('blur', function(){\r\n typeof opts.blur === 'function' && opts.blur.call(this, othis, opts);\r\n });\r\n \r\n // 点击动态后缀事件\r\n elemIcon.on('click', function(){\r\n var inputFilter = othis.attr('lay-filter');\r\n if($(this).hasClass(DISABLED)) return;\r\n \r\n typeof opts.click === 'function' && opts.click.call(this, othis, opts);\r\n \r\n // 对外事件\r\n layui.event.call(this, MOD_NAME, 'input-affix('+ inputFilter +')', {\r\n elem: othis[0],\r\n affix: affix,\r\n options: opts\r\n });\r\n });\r\n };\r\n \r\n // 动态点缀配置项\r\n var affixOptions = {\r\n eye: { // 密码显隐\r\n value: 'eye-invisible',\r\n click: function(elem, opts){ // 事件\r\n var SHOW_NAME = 'LAY_FORM_INPUT_AFFIX_SHOW';\r\n var isShow = elem.data(SHOW_NAME);\r\n \r\n elem.attr('type', isShow ? 'password' : 'text').data(SHOW_NAME, !isShow);\r\n\r\n renderAffix({\r\n value: isShow ? 'eye-invisible' : 'eye'\r\n });\r\n }\r\n },\r\n clear: { // 内容清除\r\n value: 'clear',\r\n click: function(elem){\r\n elem.val('').focus();\r\n showAffix($(this).parent(), null);\r\n },\r\n show: 'auto', // 根据输入框值是否存在来显示或隐藏点缀图标\r\n disabled: disabled // 跟随输入框禁用状态\r\n },\r\n number: { // 数字输入框\r\n value: ['up', 'down'],\r\n split: true,\r\n className: 'layui-input-number',\r\n disabled: othis.is('[disabled]'), // 跟随输入框禁用状态\r\n init: function(elem){\r\n handleInputNumber.call(this, elem, 'init')\r\n },\r\n click: function(elem){\r\n handleInputNumber.call(this, elem, 'click')\r\n },\r\n blur: function(elem){\r\n handleInputNumber.call(this, elem, 'blur')\r\n },\r\n }\r\n };\r\n \r\n renderAffix();\r\n });\r\n }\r\n \r\n // 下拉选择框\r\n ,select: function(elem){\r\n var TIPS = '请选择';\r\n var CLASS = 'layui-form-select';\r\n var TITLE = 'layui-select-title';\r\n var NONE = 'layui-select-none';\r\n var CREATE_OPTION = 'layui-select-create-option';\r\n var PANEL_WRAP = 'layui-select-panel-wrap'\r\n var PANEL_ELEM_DATA = 'layui-select-panel-elem-data';\r\n var selects = elem || elemForm.find('select');\r\n\r\n // 各种事件\r\n var events = function(reElem, titleElem, disabled, isSearch, isCreatable, isAppendTo){\r\n var select = $(this);\r\n var title = titleElem;\r\n var input = title.find('input');\r\n var dl = reElem.find('dl');\r\n var dds = dl.children('dd');\r\n var dts = dl.children('dt'); // select 分组dt元素\r\n var index = this.selectedIndex; // 当前选中的索引\r\n var initValue = '';\r\n var removeClickOutsideEvent;\r\n \r\n if(disabled) return;\r\n\r\n /**\r\n * 搜索项 \r\n * @typedef searchOption\r\n * @prop {boolean} [caseSensitive=false] 是否区分大小写\r\n * @prop {boolean} [fuzzy=false] 是否开启模糊匹配,开启后将会忽略模式出现在字符串中的位置。\r\n */\r\n /** @type {searchOption} */\r\n var laySearch = select.attr('lay-search') === 'cs' ? {caseSensitive:true} : lay.options(select, {attr:'lay-search'});\r\n // 目前只支持 body\r\n var appendTarget = select.attr('lay-append-to') || 'body';\r\n var appendPosition = select.attr('lay-append-position');\r\n\r\n // #1449\r\n // IE10 和 11 中,带有占位符的 input 元素获得/失去焦点时,会触发 input 事件\r\n // 当鼠标按下时,根据 input 元素上的 __ieph 标识忽略 input 事件\r\n var needPlaceholderPatch = !!(lay.ie && (lay.ie === '10' || lay.ie === '11') && input.attr('placeholder'));\r\n \r\n // 展开下拉\r\n var showDown = function(){\r\n if(isAppendTo){\r\n // 如果追加面板元素后出现滚动条,触发元素宽度可能会有变化,所以先追加面板元素\r\n reElem.appendTo(appendTarget).css({width: title.width() + 'px'});\r\n\r\n var updatePosition = function(){\r\n lay.position(title[0], reElem[0], {\r\n position: appendPosition,\r\n allowBottomOut: true,\r\n offset: [0, 5]\r\n });\r\n }\r\n\r\n updatePosition();\r\n $(window).on('resize.lay_select_resize', updatePosition);\r\n }\r\n var top = reElem.offset().top + reElem.outerHeight() + 5 - $win.scrollTop();\r\n var dlHeight = dl.outerHeight();\r\n var dds = dl.children('dd');\r\n \r\n index = select[0].selectedIndex; // 获取最新的 selectedIndex\r\n title.parent().addClass(CLASS+'ed');\r\n dds.removeClass(HIDE);\r\n dts.removeClass(HIDE);\r\n\r\n // 初始选中样式\r\n dds.removeClass(THIS);\r\n index >= 0 && dds.eq(index).addClass(THIS);\r\n\r\n // 上下定位识别\r\n if(top + dlHeight > $win.height() && top >= dlHeight){\r\n reElem.addClass(CLASS + 'up');\r\n }\r\n\r\n followScroll();\r\n\r\n if(needPlaceholderPatch){\r\n dl.off('mousedown.lay_select_ieph').on('mousedown.lay_select_ieph', function(){\r\n input[0].__ieph = true;\r\n setTimeout(function(){\r\n input[0].__ieph = false;\r\n }, 60)\r\n });\r\n }\r\n\r\n removeClickOutsideEvent = lay.onClickOutside(\r\n isAppendTo ? reElem[0] : dl[0],\r\n function(){\r\n hideDown();\r\n initValue && input.val(initValue);\r\n },\r\n {ignore: title}\r\n );\r\n };\r\n \r\n // 隐藏下拉\r\n var hideDown = function(choose){\r\n title.parent().removeClass(CLASS+'ed ' + CLASS+'up');\r\n input.blur();\r\n isCreatable && dl.children('.' + CREATE_OPTION).remove();\r\n removeClickOutsideEvent && removeClickOutsideEvent();\r\n if(isAppendTo){\r\n reElem.detach();\r\n $(window).off('resize.lay_select_resize');\r\n }\r\n \r\n if(choose) return;\r\n \r\n notOption(input.val(), function(none){\r\n var selectedIndex = select[0].selectedIndex;\r\n \r\n // 未查询到相关值\r\n if(none){\r\n initValue = $(select[0].options[selectedIndex]).html(); // 重新获得初始选中值\r\n \r\n // 如果是第一项,且文本值等于 placeholder,则清空初始值\r\n if(selectedIndex === 0 && initValue === input.attr('placeholder')){\r\n initValue = '';\r\n }\r\n\r\n // 如果有选中值,则将输入框纠正为该值。否则清空输入框\r\n input.val(initValue || '');\r\n }\r\n });\r\n };\r\n \r\n // 定位下拉滚动条\r\n var followScroll = function(){ \r\n var thisDd = dl.children('dd.'+ THIS);\r\n \r\n if(!thisDd[0]) return;\r\n \r\n var posTop = thisDd.position().top;\r\n var dlHeight = dl.height();\r\n var ddHeight = thisDd.height();\r\n \r\n // 若选中元素在滚动条不可见底部\r\n if(posTop > dlHeight){\r\n dl.scrollTop(posTop + dl.scrollTop() - dlHeight + ddHeight - 5);\r\n }\r\n \r\n // 若选择元素在滚动条不可见顶部\r\n if(posTop < 0){\r\n dl.scrollTop(posTop + dl.scrollTop() - 5);\r\n }\r\n };\r\n \r\n // 点击标题区域\r\n title.on('click', function(e){\r\n title.parent().hasClass(CLASS+'ed') ? (\r\n hideDown()\r\n ) : (\r\n showDown()\r\n );\r\n dl.find('.'+NONE).remove();\r\n }); \r\n \r\n // 点击箭头获取焦点\r\n title.find('.layui-edge').on('click', function(){\r\n input.focus();\r\n });\r\n \r\n // select 中 input 键盘事件\r\n input.on('keyup', function(e){ // 键盘松开\r\n var keyCode = e.keyCode;\r\n \r\n // Tab键展开\r\n if(keyCode === 9){\r\n showDown();\r\n }\r\n }).on('keydown', function(e){ // 键盘按下\r\n var keyCode = e.keyCode;\r\n\r\n // Tab键隐藏\r\n if(keyCode === 9){\r\n hideDown();\r\n }\r\n \r\n // 标注 dd 的选中状态\r\n var setThisDd = function(prevNext){\r\n e.preventDefault();\r\n var allDisplayedElem = dl.children('dd:not(.'+ HIDE +',.'+ DISABLED +')');\r\n if(!allDisplayedElem.length) return;\r\n var firstIndex = 0;\r\n var lastIndex = allDisplayedElem.length - 1;\r\n var selectedIndex = -1;\r\n\r\n layui.each(allDisplayedElem, function(index, el){\r\n if($(el).hasClass(THIS)){\r\n selectedIndex = index;\r\n return true;\r\n }\r\n })\r\n \r\n var nextIndex = prevNext === 'prev'\r\n ? (selectedIndex - 1 < firstIndex ? lastIndex : selectedIndex - 1)\r\n : (selectedIndex + 1 > lastIndex ? firstIndex : selectedIndex + 1)\r\n\r\n var selectedElem = allDisplayedElem.eq(nextIndex);\r\n selectedElem.addClass(THIS).siblings().removeClass(THIS); // 标注样式\r\n followScroll(); // 定位滚动条\r\n };\r\n \r\n if(keyCode === 38) setThisDd('prev'); // Up 键\r\n if(keyCode === 40) setThisDd('next'); // Down 键\r\n \r\n // Enter 键\r\n if(keyCode === 13){ \r\n e.preventDefault();\r\n dl.children('dd.'+THIS).trigger('click');\r\n }\r\n }).on('paste', function(){\r\n showDown();\r\n });\r\n \r\n // 检测值是否不属于 select 项\r\n var notOption = function(value, callback, origin){\r\n var num = 0;\r\n var dds = dl.children('dd');\r\n var hasEquals = false;\r\n var rawValue = value;\r\n var fuzzyMatchRE;\r\n if(!laySearch.caseSensitive){\r\n value = value.toLowerCase();\r\n }\r\n if(laySearch.fuzzy){\r\n fuzzyMatchRE = fuzzyMatchRegExp(value, laySearch.caseSensitive);\r\n }\r\n layui.each(dds, function(){\r\n var othis = $(this);\r\n var text = othis.text();\r\n var isCreateOption = isCreatable && othis.hasClass(CREATE_OPTION);\r\n\r\n // 需要区分大小写\r\n if(isCreatable && !isCreateOption && text === rawValue){\r\n hasEquals = true;\r\n }\r\n\r\n // 是否区分大小写\r\n if(!laySearch.caseSensitive){\r\n text = text.toLowerCase();\r\n }\r\n \r\n // 匹配\r\n var not = laySearch.fuzzy ? !fuzzyMatchRE.test(text) : text.indexOf(value) === -1;\r\n \r\n if(value === '' || (origin === 'blur') ? value !== text : not) num++;\r\n origin === 'keyup' && othis[(isCreatable ? (not && !isCreateOption) : not) ? 'addClass' : 'removeClass'](HIDE);\r\n });\r\n // 处理 select 分组元素\r\n origin === 'keyup' && layui.each(dts, function(){\r\n var othis = $(this);\r\n var thisDds = othis.nextUntil('dt').filter('dd'); // 当前分组下的dd元素\r\n if(isCreatable) thisDds = thisDds.not('.' + CREATE_OPTION);\r\n var allHide = thisDds.length == thisDds.filter('.' + HIDE).length; // 当前分组下所有dd元素都隐藏了\r\n othis[allHide ? 'addClass' : 'removeClass'](HIDE);\r\n });\r\n var none = num === dds.length;\r\n return callback(none, hasEquals), none;\r\n };\r\n \r\n // 搜索匹配\r\n var search = function(e){\r\n var value = this.value, keyCode = e.keyCode;\r\n \r\n if(keyCode === 9 || keyCode === 13 \r\n || keyCode === 37 || keyCode === 38 \r\n || keyCode === 39 || keyCode === 40\r\n ){\r\n return false;\r\n }\r\n \r\n if(needPlaceholderPatch && e.target.__ieph){\r\n e.target.__ieph = false;\r\n return false;\r\n }\r\n \r\n notOption(value, function(none, hasEquals){\r\n if(isCreatable){\r\n if(hasEquals){\r\n dl.children('.' + CREATE_OPTION).remove();\r\n }else{\r\n var createOptionElem = dl.children('.' + CREATE_OPTION);\r\n if(createOptionElem[0]){\r\n createOptionElem.attr('lay-value', value).html(util.escape(value));\r\n }else{\r\n // 临时显示在顶部\r\n var ddElem = $('
          ').addClass(CREATE_OPTION).attr('lay-value', value).html(util.escape(value));\r\n var firstOptionELem = dl.children().eq(0);\r\n var hasTips = firstOptionELem.hasClass('layui-select-tips');\r\n firstOptionELem[hasTips ? 'after' : 'before'](ddElem);\r\n }\r\n }\r\n }else{\r\n if(none){\r\n dl.find('.'+NONE)[0] || dl.append('

          无匹配项

          ');\r\n } else {\r\n dl.find('.'+NONE).remove();\r\n }\r\n }\r\n }, 'keyup');\r\n \r\n // 当搜索值清空时\r\n if(value === ''){\r\n // 取消选中项\r\n select.val('');\r\n dl.find('.'+ THIS).removeClass(THIS);\r\n (select[0].options[0] || {}).value || dl.children('dd:eq(0)').addClass(THIS);\r\n dl.find('.'+ NONE).remove();\r\n isCreatable && dl.children('.' + CREATE_OPTION).remove();\r\n }\r\n \r\n followScroll(); // 定位滚动条\r\n };\r\n \r\n if(isSearch){\r\n input.on('input propertychange', layui.debounce(search, 50)).on('blur', function(e){\r\n var selectedIndex = select[0].selectedIndex;\r\n \r\n initValue = $(select[0].options[selectedIndex]).text(); // 重新获得初始选中值\r\n \r\n // 如果是第一项,且文本值等于 placeholder,则清空初始值\r\n if(selectedIndex === 0 && initValue === input.attr('placeholder')){\r\n initValue = '';\r\n }\r\n \r\n setTimeout(function(){\r\n notOption(input.val(), function(none){\r\n initValue || input.val(''); // none && !initValue\r\n }, 'blur');\r\n }, 200);\r\n });\r\n }\r\n\r\n // 选择\r\n dl.on('click', 'dd', function(){\r\n var othis = $(this), value = othis.attr('lay-value');\r\n var filter = select.attr('lay-filter'); // 获取过滤器\r\n \r\n if(othis.hasClass(DISABLED)) return false;\r\n \r\n if(othis.hasClass('layui-select-tips')){\r\n input.val('');\r\n } else {\r\n input.val(othis.text());\r\n othis.addClass(THIS);\r\n }\r\n\r\n // 将新增的 option 元素添加到末尾\r\n if(isCreatable && othis.hasClass(CREATE_OPTION)){\r\n dl.append(othis.removeClass(CREATE_OPTION));\r\n var optionElem = $('
        '\r\n ,''\r\n ,'{{# layui.each(d.data.cols, function(i1, item1){ }}'\r\n ,''\r\n ,'{{# layui.each(item1, function(i2, item2){ }}'\r\n ,'{{# if(item2.fixed && item2.fixed !== \"right\"){ left = true; } }}'\r\n ,'{{# if(item2.fixed === \"right\"){ right = true; } }}'\r\n ,function(){\r\n if(options.fixed && options.fixed !== 'right'){\r\n return '{{# if(item2.fixed && item2.fixed !== \"right\"){ }}';\r\n }\r\n if(options.fixed === 'right'){\r\n return '{{# if(item2.fixed === \"right\"){ }}';\r\n }\r\n return '';\r\n }()\r\n ,'{{# var isSort = !(item2.colGroup) && item2.sort; }}'\r\n ,''\r\n ,(options.fixed ? '{{# }; }}' : '')\r\n ,'{{# }); }}'\r\n ,''\r\n ,'{{# }); }}'\r\n ,''\r\n ,'
        \\' + item2.title + \\'\\').text() }}\"{{# } }}>'\r\n ,'
        '\r\n ,'{{# if(item2.type === \"checkbox\"){ }}' //复选框\r\n ,''\r\n ,'{{# } else { }}'\r\n ,'{{-item2.title||\"\"}}'\r\n ,'{{# if(isSort){ }}'\r\n ,''\r\n ,'{{# } }}'\r\n ,'{{# } }}'\r\n ,'
        '\r\n ,'
        '].join('');\r\n };\r\n\r\n // tbody 区域模板\r\n var TPL_BODY = [''\r\n ,''\r\n ,'
        '].join('');\r\n\r\n // 主模板\r\n var TPL_MAIN = [\r\n ,'{{# if(d.data.toolbar){ }}'\r\n ,'
        '\r\n ,'
        '\r\n ,'
        '\r\n ,'
        '\r\n ,'{{# } }}'\r\n\r\n ,'
        '\r\n ,'{{# if(d.data.loading){ }}'\r\n ,'
        '\r\n ,'
        '\r\n ,'{{# if(typeof d.data.loading === \"string\"){ }}'\r\n ,'{{- d.data.loading}}'\r\n ,'{{# } else{ }}'\r\n ,''\r\n ,'{{# } }}'\r\n ,'
        '\r\n ,'
        '\r\n ,'{{# } }}'\r\n\r\n ,'{{# var left, right; }}'\r\n ,'
        '\r\n ,TPL_HEADER()\r\n ,'
        '\r\n ,'
        '\r\n ,TPL_BODY\r\n ,'
        '\r\n\r\n ,'{{# if(left){ }}'\r\n ,'
        '\r\n ,'
        '\r\n ,TPL_HEADER({fixed: true})\r\n ,'
        '\r\n ,'
        '\r\n ,TPL_BODY\r\n ,'
        '\r\n ,'
        '\r\n ,'{{# }; }}'\r\n\r\n ,'{{# if(right){ }}'\r\n ,'
        '\r\n ,'
        '\r\n ,TPL_HEADER({fixed: 'right'})\r\n ,'
        '\r\n ,'
        '\r\n ,'
        '\r\n ,TPL_BODY\r\n ,'
        '\r\n ,'
        '\r\n ,'{{# }; }}'\r\n ,'
        '\r\n\r\n ,'{{# if(d.data.totalRow){ }}'\r\n ,'
        '\r\n ,''\r\n ,''\r\n , '
        Total
        '\r\n ,'
        '\r\n ,'{{# } }}'\r\n\r\n ,'
        '\r\n ,'
        '\r\n ,'
        '\r\n ].join('');\r\n\r\n var _WIN = $(window);\r\n var _DOC = $(document);\r\n\r\n // constructor\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++table.index;\r\n that.config = $.extend({}, that.config, table.config, options);\r\n that.render();\r\n };\r\n\r\n // 初始默认配置\r\n Class.prototype.config = {\r\n limit: 10, // 每页显示的数量\r\n loading: true, // 请求数据时,是否显示 loading\r\n escape: true, // 是否开启 HTML 编码功能,即转义 html 原文\r\n cellMinWidth: 60, // 所有单元格默认最小宽度\r\n cellMaxWidth: Number.MAX_VALUE, // 所有单元格默认最大宽度\r\n editTrigger: 'click', // 单元格编辑的事件触发方式\r\n defaultToolbar: ['filter', 'exports', 'print'], // 工具栏右侧图标\r\n defaultContextmenu: true, // 显示默认上下文菜单\r\n autoSort: true, // 是否前端自动排序。如果否,则需自主排序(通常为服务端处理好排序)\r\n text: {\r\n none: '无数据'\r\n },\r\n cols: []\r\n };\r\n\r\n // 表格渲染\r\n Class.prototype.render = function(type){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.elem = $(options.elem);\r\n options.where = options.where || {};\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n var id = options.id = 'id' in options ? options.id : (\r\n options.elem.attr('id') || that.index\r\n );\r\n\r\n thisTable.that[id] = that; // 记录当前实例对象\r\n thisTable.config[id] = options; // 记录当前实例配置项\r\n\r\n //请求参数的自定义格式\r\n options.request = $.extend({\r\n pageName: 'page',\r\n limitName: 'limit'\r\n }, options.request)\r\n\r\n // 响应数据的自定义格式\r\n options.response = $.extend({\r\n statusName: 'code', //规定数据状态的字段名称\r\n statusCode: 0, //规定成功的状态码\r\n msgName: 'msg', //规定状态信息的字段名称\r\n dataName: 'data', //规定数据总数的字段名称\r\n totalRowName: 'totalRow', //规定数据统计的字段名称\r\n countName: 'count'\r\n }, options.response);\r\n\r\n //如果 page 传入 laypage 对象\r\n if(options.page !== null && typeof options.page === 'object'){\r\n options.limit = options.page.limit || options.limit;\r\n options.limits = options.page.limits || options.limits;\r\n that.page = options.page.curr = options.page.curr || 1;\r\n delete options.page.elem;\r\n delete options.page.jump;\r\n }\r\n\r\n if(!options.elem[0]) return that;\r\n\r\n // 若元素未设 lay-filter 属性,则取实例 id 值\r\n if(!options.elem.attr('lay-filter')){\r\n options.elem.attr('lay-filter', options.id);\r\n }\r\n\r\n // 仅重载数据\r\n if(type === 'reloadData'){\r\n // 请求数据\r\n return that.pullData(that.page, {\r\n type: 'reloadData'\r\n });\r\n }\r\n\r\n // 初始化索引\r\n options.index = that.index;\r\n that.key = options.id || options.index;\r\n\r\n // 初始化一些其他参数\r\n that.setInit();\r\n\r\n // 高度铺满:full-差距值\r\n if(options.height && /^full-.+$/.test(options.height)){\r\n that.fullHeightGap = options.height.split('-')[1];\r\n options.height = _WIN.height() - (parseFloat(that.fullHeightGap) || 0);\r\n } else if (options.height && /^#\\w+\\S*-.+$/.test(options.height)) {\r\n var parentDiv = options.height.split(\"-\");\r\n that.parentHeightGap = parentDiv.pop();\r\n that.parentDiv = parentDiv.join(\"-\");\r\n options.height = $(that.parentDiv).height() - (parseFloat(that.parentHeightGap) || 0);\r\n } else if (typeof options.height === \"function\"){\r\n that.customHeightFunc = options.height;\r\n options.height = that.customHeightFunc();\r\n }\r\n\r\n // 开始插入替代元素\r\n var othis = options.elem;\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n\r\n // 主容器\r\n var reElem = that.elem = $('
        ');\r\n\r\n // 添加 className\r\n reElem.addClass(function(){\r\n var arr = [\r\n ELEM_VIEW,\r\n ELEM_VIEW +'-'+ that.index,\r\n 'layui-form',\r\n 'layui-border-box'\r\n ];\r\n if(options.className) arr.push(options.className);\r\n return arr.join(' ');\r\n }()).attr(function(){\r\n var obj = {\r\n 'lay-filter': 'LAY-TABLE-FORM-DF-'+ that.index,\r\n 'style': function(){\r\n var arr = [];\r\n if(options.width) arr.push('width:'+ options.width + 'px;');\r\n // if(options.height) arr.push('height:'+ options.height + 'px;');\r\n return arr.join('')\r\n }()\r\n }\r\n obj[MOD_ID] = options.id;\r\n return obj;\r\n }()).html(laytpl(TPL_MAIN, {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n }).render({\r\n data: options,\r\n index: that.index //索引\r\n }));\r\n\r\n // 初始化样式\r\n that.renderStyle();\r\n\r\n // 生成替代元素\r\n hasRender[0] && hasRender.remove(); // 如果已经渲染,则 Rerender\r\n othis.after(reElem);\r\n\r\n // 各级容器\r\n that.layTool = reElem.find(ELEM_TOOL);\r\n that.layBox = reElem.find(ELEM_BOX);\r\n that.layHeader = reElem.find(ELEM_HEADER);\r\n that.layMain = reElem.find(ELEM_MAIN);\r\n that.layBody = reElem.find(ELEM_BODY);\r\n that.layFixed = reElem.find(ELEM_FIXED);\r\n that.layFixLeft = reElem.find(ELEM_FIXL);\r\n that.layFixRight = reElem.find(ELEM_FIXR);\r\n that.layTotal = reElem.find(ELEM_TOTAL);\r\n that.layPage = reElem.find(ELEM_PAGE);\r\n\r\n // 初始化头部工具栏\r\n that.renderToolbar();\r\n\r\n // 初始化底部分页栏\r\n that.renderPagebar();\r\n\r\n // 让表格平铺\r\n that.fullSize();\r\n\r\n that.pullData(that.page); // 请求数据\r\n that.events(); // 事件\r\n };\r\n\r\n // 根据列类型,定制化参数\r\n Class.prototype.initOpts = function(item){\r\n var that = this\r\n var options = that.config;\r\n var initWidth = {\r\n checkbox: 50,\r\n radio: 50,\r\n space: 30,\r\n numbers: 60\r\n };\r\n\r\n // 让 type 参数兼容旧版本\r\n if(item.checkbox) item.type = \"checkbox\";\r\n if(item.space) item.type = \"space\";\r\n if(!item.type) item.type = \"normal\";\r\n\r\n if(item.type !== \"normal\"){\r\n item.unresize = true;\r\n item.width = item.width || initWidth[item.type];\r\n }\r\n };\r\n\r\n //初始化一些参数\r\n Class.prototype.setInit = function(type){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.clientWidth = options.width || function(){ //获取容器宽度\r\n //如果父元素宽度为0(一般为隐藏元素),则继续查找上层元素,直到找到真实宽度为止\r\n var getWidth = function(parent){\r\n var width, isNone;\r\n parent = parent || options.elem.parent()\r\n width = parent.width();\r\n try {\r\n isNone = parent.css('display') === 'none';\r\n } catch(e){}\r\n if(parent[0] && (!width || isNone)) return getWidth(parent.parent());\r\n return width;\r\n };\r\n return getWidth();\r\n }();\r\n\r\n if(type === 'width') return options.clientWidth;\r\n // 初始化高度配置,如果设置了最高高度,以最高高度形式为准\r\n options.height = options.maxHeight || options.height;\r\n\r\n // 初始化 css 参数\r\n if(options.css && options.css.indexOf(ELEM_VIEW) === -1){\r\n var css = options.css.split('}');\r\n layui.each(css, function(index, value){\r\n if(value){\r\n css[index] = '.'+ ELEM_VIEW + '-'+ that.index + ' ' + value;\r\n }\r\n });\r\n options.css = css.join('}');\r\n }\r\n\r\n // 封装对 col 的配置处理\r\n var initChildCols = function (i1, item1, i2, item2) {\r\n //如果列参数为空,则移除\r\n if (!item2) {\r\n item1.splice(i2, 1);\r\n return;\r\n }\r\n\r\n item2.key = [options.index, i1, i2].join('-');\r\n item2.colspan = item2.colspan || 0;\r\n item2.rowspan = item2.rowspan || 0;\r\n\r\n //根据列类型,定制化参数\r\n that.initOpts(item2);\r\n\r\n //设置列的父列索引\r\n //如果是组合列,则捕获对应的子列\r\n var indexChild = i1 + (parseInt(item2.rowspan) || 1);\r\n if (indexChild < options.cols.length) { // 只要不是最后一层都会有子列\r\n item2.colGroup = true;\r\n var childIndex = 0;\r\n layui.each(options.cols[indexChild], function (i22, item22) {\r\n //如果子列已经被标注为{HAS_PARENT},或者子列累计 colspan 数等于父列定义的 colspan,则跳出当前子列循环\r\n if (item22.HAS_PARENT || (childIndex >= 1 && childIndex == (item2.colspan || 1))) return;\r\n\r\n item22.HAS_PARENT = true;\r\n item22.parentKey = [options.index, i1, i2].join('-') // i1 + '-' + i2;\r\n childIndex = childIndex + parseInt(item22.colspan > 1 ? item22.colspan : 1);\r\n initChildCols(indexChild, options.cols[indexChild], i22, item22);\r\n });\r\n } else {\r\n item2.colGroup = false;\r\n }\r\n item2.hide = item2.hide && !item2.colGroup || false; // 初始化中中间节点的hide信息不做处理,否则会出错,如果需要必须将其子节点也都同步成hide\r\n };\r\n\r\n // 初始化列参数\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n if (i1) {\r\n delete item2.HAS_PARENT; // 去掉临时的计数排除标识,避免有新字段插入的时候重新计算被跳过导致下标出错的问题\r\n } else {\r\n initChildCols(i1, item1, i2, item2); // 只解析顶层节点由递归完成解析\r\n }\r\n });\r\n });\r\n\r\n };\r\n\r\n // 初始化样式\r\n Class.prototype.renderStyle = function() {\r\n var that = this;\r\n var options = that.config;\r\n var index = that.index;\r\n var text = [];\r\n\r\n // 单元格宽度\r\n layui.each(options.cols, function(i1, item1) {\r\n layui.each(item1, function(i2, item2) {\r\n var key = [index, i1, i2].join('-');\r\n var val = ['width: ', (item2.width || options.cellMinWidth), 'px'].join('');\r\n text.push('.laytable-cell-'+ key +'{'+ val +'}');\r\n });\r\n });\r\n\r\n // 自定义行样式\r\n (function (lineStyle) {\r\n if (!lineStyle) return;\r\n var trClassName = '.layui-table-view-'+ index +' .layui-table-body .layui-table tr';\r\n var rules = lineStyle.split(';');\r\n var cellMaxHeight = 'none';\r\n\r\n // 计算单元格最大高度\r\n layui.each(rules, function(i, rule) {\r\n rule = rule.split(':');\r\n if (rule[0] === 'height') {\r\n var val = parseFloat(rule[1]);\r\n if (!isNaN(val)) cellMaxHeight = (val - 1) + 'px';\r\n return true;\r\n }\r\n });\r\n\r\n // 多行相关样式\r\n layui.each([\r\n '{'+ lineStyle +'}',\r\n '.layui-table-cell{height: auto; max-height: '+ cellMaxHeight +'; white-space: normal; text-overflow: clip;}',\r\n '> td:hover > .layui-table-cell{overflow: auto;}'\r\n ].concat(\r\n device.ie ? [\r\n '.layui-table-edit{height: '+ cellMaxHeight +';}',\r\n 'td[data-edit]:hover:after{height: '+ cellMaxHeight +';}'\r\n ] : []\r\n ), function(i, val) {\r\n val && text.push(trClassName + ' ' + val);\r\n });\r\n })(options.lineStyle);\r\n\r\n // 自定义 css 属性\r\n if (options.css) text.push(options.css);\r\n\r\n // 生成 style\r\n lay.style({\r\n target: that.elem[0],\r\n text: text.join(''),\r\n id: 'DF-table-'+ index\r\n });\r\n };\r\n\r\n // 初始头部工具栏\r\n Class.prototype.renderToolbar = function(){\r\n var that = this;\r\n var options = that.config;\r\n var filter = options.elem.attr('lay-filter');\r\n\r\n // 添加工具栏左侧模板\r\n var leftDefaultTemp = [\r\n '
        ',\r\n '
        ',\r\n '
        '\r\n ].join('');\r\n var elemToolTemp = that.layTool.find('.layui-table-tool-temp');\r\n\r\n if(options.toolbar === 'default'){\r\n elemToolTemp.html(leftDefaultTemp);\r\n } else if(typeof options.toolbar === 'string'){\r\n var toolbarHtml = $(options.toolbar).html() || '';\r\n toolbarHtml && elemToolTemp.html(\r\n laytpl(toolbarHtml).render(options)\r\n );\r\n }\r\n\r\n // 头部工具栏右上角默认工具\r\n var defaultConfig = {\r\n filter: {\r\n title: '筛选列',\r\n layEvent: 'LAYTABLE_COLS',\r\n icon: 'layui-icon-cols',\r\n onClick: function(obj) {\r\n var options = obj.config;\r\n var openPanel = obj.openPanel;\r\n\r\n openPanel({\r\n list: function(){\r\n var lis = [];\r\n that.eachCols(function(i, item){\r\n if(item.field && item.type == 'normal'){\r\n lis.push('
      • ' + (item.fieldTitle || item.title || item.field) + '').text()) +'\" lay-filter=\"LAY_TABLE_TOOL_COLS\">
      • ');\r\n }\r\n });\r\n return lis.join('');\r\n }(),\r\n done: function() {\r\n form.on('checkbox(LAY_TABLE_TOOL_COLS)', function(obj){\r\n var othis = $(obj.elem);\r\n var checked = this.checked;\r\n var key = othis.data('key');\r\n var col = that.col(key);\r\n var hide = col.hide;\r\n var parentKey = othis.data('parentkey');\r\n\r\n if(!col.key) return;\r\n\r\n // 同步勾选列的 hide 值和隐藏样式\r\n col.hide = !checked;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n checked ? 'removeClass' : 'addClass'\r\n ](HIDE);\r\n\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n if(hide != col.hide){\r\n that.setParentCol(!checked, parentKey);\r\n }\r\n\r\n // 重新适配尺寸\r\n that.resize();\r\n\r\n // 列筛选(显示或隐藏)后的事件\r\n layui.event.call(this, MOD_NAME, 'colToggled('+ filter +')', {\r\n col: col,\r\n config: options\r\n });\r\n });\r\n }\r\n });\r\n }\r\n },\r\n exports: {\r\n title: '导出',\r\n layEvent: 'LAYTABLE_EXPORT',\r\n icon: 'layui-icon-export',\r\n onClick: function(obj) { // 自带导出\r\n var data = obj.data;\r\n var options = obj.config;\r\n var openPanel = obj.openPanel;\r\n var elem = obj.elem;\r\n\r\n if (!data.length) return layer.tips('当前表格无数据', elem, {tips: 3});\r\n if(device.ie){\r\n layer.tips('导出功能不支持 IE,请用 Chrome 等高级浏览器导出', elem, {\r\n tips: 3\r\n });\r\n } else {\r\n openPanel({\r\n list: function(){\r\n return [\r\n '
      • 导出 CSV 文件
      • '\r\n ].join('')\r\n }(),\r\n done: function(panel, list){\r\n list.on('click', function(){\r\n var type = $(this).data('type')\r\n table.exportFile.call(that, options.id, null, type);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n },\r\n print: {\r\n title: '打印',\r\n layEvent: 'LAYTABLE_PRINT',\r\n icon: 'layui-icon-print',\r\n onClick: function(obj) {\r\n var data = obj.data;\r\n var options = obj.config;\r\n var elem = obj.elem;\r\n\r\n if (!data.length) return layer.tips('当前表格无数据', elem, {tips: 3});\r\n var printWin = window.open('about:blank', '_blank');\r\n var style = [''].join('')\r\n var html = $(that.layHeader.html()); // 输出表头\r\n\r\n html.append(that.layMain.find('table').html()); // 输出表体\r\n html.append(that.layTotal.find('table').html()) // 输出合计行\r\n\r\n html.find('th.layui-table-patch').remove(); // 移除补丁\r\n // 移除表头特殊列\r\n html.find('thead>tr>th.'+ ELEM_COL_SPECIAL).filter(function(i, thElem){\r\n return !$(thElem).children('.'+ ELEM_GROUP).length; // 父级表头除外\r\n }).remove();\r\n html.find('tbody>tr>td.'+ ELEM_COL_SPECIAL).remove(); // 移除表体特殊列\r\n\r\n printWin.document.write(style + html.prop('outerHTML'));\r\n printWin.document.close();\r\n\r\n if(layui.device('edg').edg){\r\n printWin.onafterprint = printWin.close;\r\n printWin.print();\r\n }else{\r\n printWin.print();\r\n printWin.close();\r\n }\r\n }\r\n }\r\n };\r\n\r\n // 若开启 defaultToolbar\r\n if (typeof options.defaultToolbar === 'object') {\r\n var iconElem = [];\r\n options.defaultToolbar = $.map(options.defaultToolbar, function(item, i) {\r\n var itemIsName = typeof item === 'string';\r\n var thisItem = itemIsName ? defaultConfig[item] : item;\r\n if (thisItem) {\r\n // 根据 name 匹配默认工具并合并\r\n if (thisItem.name && defaultConfig[thisItem.name]) {\r\n thisItem = $.extend({}, defaultConfig[thisItem.name], thisItem);\r\n }\r\n // 初始化默认工具 name\r\n if (!thisItem.name && itemIsName) {\r\n thisItem.name = item;\r\n }\r\n // 图标列表\r\n iconElem.push(\r\n '
        '\r\n +''\r\n +'
        '\r\n );\r\n }\r\n return thisItem;\r\n });\r\n that.layTool.find('.layui-table-tool-self').html(iconElem.join(''));\r\n }\r\n };\r\n\r\n // 分页栏\r\n Class.prototype.renderPagebar = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var layPagebar = that.layPagebar = $('
        ');\r\n\r\n // 开启分页栏自定义模板\r\n if(options.pagebar){\r\n var pagebarHtml = $(options.pagebar).html() || '';\r\n pagebarHtml && layPagebar.append(laytpl(pagebarHtml).render(options));\r\n that.layPage.append(layPagebar);\r\n }\r\n };\r\n\r\n // 同步表头父列的相关值\r\n Class.prototype.setParentCol = function(hide, parentKey){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var parentTh = that.layHeader.find('th[data-key=\"'+ parentKey +'\"]'); // 获取父列元素\r\n var parentColspan = parseInt(parentTh.attr('colspan')) || 0;\r\n\r\n if(parentTh[0]){\r\n var arrParentKey = parentKey.split('-');\r\n var getThisCol = options.cols[arrParentKey[1]][arrParentKey[2]];\r\n\r\n hide ? parentColspan-- : parentColspan++;\r\n\r\n parentTh.attr('colspan', parentColspan);\r\n parentTh[parentColspan ? 'removeClass' : 'addClass'](HIDE); // 如果子列显示,父列必然需要显示\r\n\r\n getThisCol.colspan2 = parentColspan; // 更新实际的 colspan 数\r\n getThisCol.hide = parentColspan < 1; // 同步 hide 参数\r\n\r\n // 递归,继续往上查询是否有父列\r\n var nextParentKey = parentTh.data('parentkey');\r\n nextParentKey && that.setParentCol(hide, nextParentKey);\r\n }\r\n };\r\n\r\n // 多级表头补丁\r\n Class.prototype.setColsPatch = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 同步表头父列的相关值\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n if(item2.hide){\r\n that.setParentCol(item2.hide, item2.parentKey);\r\n }\r\n });\r\n });\r\n };\r\n\r\n // 设置组合表头的最大宽度\r\n Class.prototype.setGroupWidth = function(th){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(options.cols.length <= 1) return;\r\n\r\n // 获取表头组合\r\n var groups = that.layHeader.find((\r\n // 根据当前活动的表头 parentkey 属性查找其组合表头\r\n th ? ('th[data-key='+ th.data('parentkey') +']>') : ''\r\n ) + '.' + ELEM_GROUP); // 若无指向当前活动表头,则自下而上获取所有组合表头\r\n\r\n groups.css('width', 0);\r\n layui.each(groups.get().reverse(), function(){\r\n var othis = $(this);\r\n var key = othis.parent().data('key');\r\n var maxWidth = 0;\r\n\r\n that.layHeader.eq(0).find('th[data-parentkey='+ key +']').width(function(i, width){\r\n var oTh = $(this);\r\n if(oTh.hasClass(HIDE)) return;\r\n width > 0 && (maxWidth += width);\r\n });\r\n\r\n // 给组合表头赋值最大宽度\r\n if(maxWidth) othis.css('max-width', maxWidth - 1);\r\n\r\n // 若当前活动的组合表头仍存在上级,则继续向上设置\r\n if(th && othis.parent().data('parentkey')){\r\n that.setGroupWidth(othis.parent());\r\n }\r\n });\r\n groups.css('width', 'auto');\r\n };\r\n\r\n // 动态分配列宽\r\n Class.prototype.setColsWidth = function(){\r\n var that = this;\r\n var options = that.config;\r\n var colNums = 0; // 列个数\r\n var autoColNums = 0; // 自动列宽的列个数\r\n var autoWidth = 0; // 自动列分配的宽度\r\n var countWidth = 0; // 所有列总宽度和\r\n var cntrWidth = that.setInit('width');\r\n\r\n // 统计列个数\r\n that.eachCols(function(i, item){\r\n item.hide || colNums++;\r\n });\r\n\r\n // 减去边框差和滚动条宽\r\n cntrWidth = cntrWidth - function(){\r\n return (options.skin === 'line' || options.skin === 'nob') ? 2 : colNums + 1;\r\n }() - that.getScrollWidth(that.layMain[0]) - 1;\r\n\r\n // 计算自动分配的宽度\r\n var getAutoWidth = function(back){\r\n // 遍历所有列\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n var width = 0;\r\n var minWidth = item2.minWidth || options.cellMinWidth; // 最小宽度\r\n var maxWidth = item2.maxWidth || options.cellMaxWidth; // 最大宽度\r\n\r\n if(!item2){\r\n item1.splice(i2, 1);\r\n return;\r\n }\r\n\r\n if(item2.colGroup || item2.hide) return;\r\n\r\n if(!back){\r\n width = item2.width || 0;\r\n if(/\\d+%$/.test(width)){ // 列宽为百分比\r\n width = Math.floor((parseFloat(width) / 100) * cntrWidth);\r\n width < minWidth && (width = minWidth);\r\n width > maxWidth && (width = maxWidth);\r\n } else if(!width){ // 列宽未填写\r\n item2.width = width = 0;\r\n autoColNums++;\r\n } else if(item2.type === 'normal'){\r\n // 若 width 小于 minWidth, 则将 width 值自动设为 minWidth 的值\r\n width < minWidth && (item2.width = width = minWidth);\r\n // 若 width 大于 maxWidth, 则将 width 值自动设为 maxWidth 的值\r\n width > maxWidth && (item2.width = width = maxWidth);\r\n }\r\n } else if(autoWidth && autoWidth < minWidth){\r\n autoColNums--;\r\n width = minWidth;\r\n } else if(autoWidth && autoWidth > maxWidth){\r\n autoColNums--;\r\n width = maxWidth;\r\n }\r\n\r\n if(item2.hide) width = 0;\r\n countWidth = countWidth + width;\r\n });\r\n });\r\n\r\n // 如果未填充满,则将剩余宽度平分\r\n (cntrWidth > countWidth && autoColNums > 0) && (\r\n autoWidth = (cntrWidth - countWidth) / autoColNums\r\n );\r\n }\r\n\r\n getAutoWidth();\r\n getAutoWidth(true); // 重新检测分配的宽度是否低于最小列宽\r\n\r\n // 记录自动列数\r\n that.autoColNums = autoColNums = autoColNums > 0 ? autoColNums : 0;\r\n\r\n // 设置列宽\r\n that.eachCols(function(i3, item3){\r\n var minWidth = item3.minWidth || options.cellMinWidth;\r\n var maxWidth = item3.maxWidth || options.cellMaxWidth;\r\n\r\n if(item3.colGroup || item3.hide) return;\r\n\r\n // 给未分配宽的列平均分配宽\r\n if(item3.width === 0){\r\n that.cssRules(item3.key, function(item){\r\n item.style.width = Math.floor(function(){\r\n if(autoWidth < minWidth) return minWidth;\r\n if(autoWidth > maxWidth) return maxWidth;\r\n return autoWidth;\r\n }()) + 'px';\r\n });\r\n }\r\n\r\n // 给设定百分比的列分配列宽\r\n else if(/\\d+%$/.test(item3.width)){\r\n that.cssRules(item3.key, function(item){\r\n var width = Math.floor((parseFloat(item3.width) / 100) * cntrWidth);\r\n width < minWidth && (width = minWidth);\r\n width > maxWidth && (width = maxWidth);\r\n item.style.width = width + 'px';\r\n });\r\n }\r\n\r\n // 给拥有普通 width 值的列分配最新列宽\r\n else {\r\n that.cssRules(item3.key, function(item){\r\n item.style.width = item3.width + 'px';\r\n });\r\n }\r\n });\r\n\r\n // 填补 Math.floor 造成的数差\r\n var patchNums = that.layMain.width() - that.getScrollWidth(that.layMain[0])\r\n - that.layMain.children('table').outerWidth();\r\n\r\n if(that.autoColNums > 0 && patchNums >= -colNums && patchNums <= colNums){\r\n var getEndTh = function(th){\r\n var field;\r\n th = th || that.layHeader.eq(0).find('thead > tr:first-child > th:last-child')\r\n field = th.data('field');\r\n if(!field && th.prev()[0]){\r\n return getEndTh(th.prev())\r\n }\r\n return th;\r\n };\r\n var th = getEndTh();\r\n var key = th.data('key');\r\n\r\n that.cssRules(key, function(item){\r\n var width = item.style.width || th.outerWidth();\r\n item.style.width = (parseFloat(width) + patchNums) + 'px';\r\n\r\n // 二次校验,如果仍然出现横向滚动条(通常是 1px 的误差导致)\r\n if(that.layMain.height() - that.layMain.prop('clientHeight') > 0){\r\n item.style.width = (parseFloat(item.style.width) - 1) + 'px';\r\n }\r\n });\r\n }\r\n\r\n that.setGroupWidth();\r\n\r\n // 如果表格内容为空(无数据 或 请求异常)\r\n if (that.layMain.find('tbody').is(\":empty\")) {\r\n // 将表格宽度设置为跟表头一样的宽度,使之可以出现底部滚动条,以便滚动查看所有字段\r\n var headerWidth = that.layHeader.first().children('table').width()\r\n that.layMain.find('table').width(headerWidth);\r\n } else {\r\n that.layMain.find('table').width('auto');\r\n }\r\n\r\n };\r\n\r\n // 重置表格尺寸/结构\r\n Class.prototype.resize = function(){\r\n var that = this;\r\n\r\n if (!that.layMain) return;\r\n\r\n that.fullSize(); // 让表格铺满\r\n that.setColsWidth(); // 自适应列宽\r\n that.scrollPatch(); // 滚动条补丁\r\n };\r\n\r\n // 表格重载\r\n Class.prototype.reload = function(options, deep, type){\r\n var that = this;\r\n\r\n options = options || {};\r\n delete that.haveInit;\r\n\r\n // 防止数组深度合并\r\n layui.each(options, function(key, item){\r\n if(layui.type(item) === 'array') delete that.config[key];\r\n });\r\n\r\n // 对参数进行深度或浅扩展\r\n that.config = $.extend(deep, {}, that.config, options);\r\n if (type !== 'reloadData') {\r\n layui.each(that.config.cols, function (i1, item1) {\r\n layui.each(item1, function (i2, item2) {\r\n delete item2.colspan2;\r\n })\r\n })\r\n delete that.config.HAS_SET_COLS_PATCH;\r\n }\r\n // 执行渲染\r\n that.render(type);\r\n };\r\n\r\n // 异常提示\r\n Class.prototype.errorView = function(html){\r\n var that = this\r\n ,elemNone = that.layMain.find('.'+ NONE)\r\n ,layNone = $('
        '+ (html || 'Error') +'
        ');\r\n\r\n if(elemNone[0]){\r\n that.layNone.remove();\r\n elemNone.remove();\r\n }\r\n\r\n that.layFixed.addClass(HIDE);\r\n that.layMain.find('tbody').html('');\r\n\r\n that.layMain.append(that.layNone = layNone);\r\n\r\n // 异常情况下对 page 和 total 的内容处理\r\n that.layTotal.addClass(HIDE_V);\r\n that.layPage.find(ELEM_PAGE_VIEW).addClass(HIDE_V);\r\n\r\n table.cache[that.key] = []; //格式化缓存数据\r\n\r\n that.syncCheckAll();\r\n that.renderForm();\r\n that.setColsWidth();\r\n that.loading(false);\r\n };\r\n\r\n // 初始页码\r\n Class.prototype.page = 1;\r\n\r\n // 获得数据\r\n Class.prototype.pullData = function(curr, opts){\r\n var that = this;\r\n var options = that.config;\r\n // 同步表头父列的相关值\r\n options.HAS_SET_COLS_PATCH || that.setColsPatch();\r\n options.HAS_SET_COLS_PATCH = true;\r\n var request = options.request;\r\n var response = options.response;\r\n var res;\r\n var sort = function(){\r\n if(typeof options.initSort === 'object'){\r\n that.sort({\r\n field: options.initSort.field,\r\n type: options.initSort.type,\r\n reloadType: opts.type\r\n });\r\n }\r\n };\r\n var done = function(res, origin){\r\n that.setColsWidth();\r\n that.loading(false);\r\n typeof options.done === 'function' && options.done(\r\n res, curr, res[response.countName], origin\r\n );\r\n };\r\n\r\n opts = opts || {};\r\n\r\n // 数据拉取前的回调\r\n typeof options.before === 'function' && options.before(\r\n options\r\n );\r\n that.startTime = new Date().getTime(); // 渲染开始时间\r\n\r\n if (opts.renderData) { // 将 cache 信息重新渲染\r\n res = {};\r\n res[response.dataName] = table.cache[that.key];\r\n res[response.countName] = options.url ? (layui.type(options.page) === 'object' ? options.page.count : res[response.dataName].length) : options.data.length;\r\n\r\n // 记录合计行数据\r\n if(typeof options.totalRow === 'object'){\r\n res[response.totalRowName] = $.extend({}, that.totalRow);\r\n }\r\n\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: res[response.countName],\r\n type: opts.type,\r\n sort: true\r\n }), done(res, 'renderData');\r\n } else if(options.url){ // Ajax请求\r\n var params = {};\r\n // 当 page 开启,默认自动传递 page、limit 参数\r\n if(options.page){\r\n params[request.pageName] = curr;\r\n params[request.limitName] = options.limit;\r\n }\r\n\r\n // 参数\r\n var data = $.extend(params, options.where);\r\n if(options.contentType && options.contentType.indexOf(\"application/json\") == 0){ // 提交 json 格式\r\n data = JSON.stringify(data);\r\n }\r\n\r\n that.loading(true);\r\n\r\n $.ajax({\r\n type: options.method || 'get',\r\n url: options.url,\r\n contentType: options.contentType,\r\n data: data,\r\n dataType: options.dataType || 'json',\r\n jsonpCallback: options.jsonpCallback,\r\n headers: options.headers || {},\r\n complete: typeof options.complete === 'function' ? options.complete : undefined,\r\n success: function(res){\r\n // 若有数据解析的回调,则获得其返回的数据\r\n if(typeof options.parseData === 'function'){\r\n res = options.parseData(res) || res;\r\n }\r\n // 检查数据格式是否符合规范\r\n if(res[response.statusName] != response.statusCode){\r\n that.errorView(\r\n res[response.msgName] ||\r\n ('返回的数据不符合规范,正确的成功状态码应为:\"'+ response.statusName +'\": '+ response.statusCode)\r\n );\r\n } else {\r\n that.totalRow = res[response.totalRowName];\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: res[response.countName],\r\n type: opts.type\r\n }), sort();\r\n\r\n // 耗时(接口请求+视图渲染)\r\n options.time = (new Date().getTime() - that.startTime) + ' ms';\r\n }\r\n done(res, opts.type);\r\n },\r\n error: function(e, msg){\r\n that.errorView('请求异常,错误提示:'+ msg);\r\n typeof options.error === 'function' && options.error(e, msg);\r\n }\r\n });\r\n } else if(layui.type(options.data) === 'array'){ //已知数据\r\n res = {};\r\n var startLimit = curr*options.limit - options.limit;\r\n var newData = options.data.concat();\r\n\r\n res[response.dataName] = options.page\r\n ? newData.splice(startLimit, options.limit)\r\n : newData;\r\n res[response.countName] = options.data.length;\r\n\r\n // 记录合计行数据\r\n if(typeof options.totalRow === 'object'){\r\n res[response.totalRowName] = $.extend({}, options.totalRow);\r\n }\r\n that.totalRow = res[response.totalRowName];\r\n\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: res[response.countName],\r\n type: opts.type\r\n }), sort();\r\n\r\n done(res, opts.type);\r\n }\r\n };\r\n\r\n // 遍历表头\r\n Class.prototype.eachCols = function(callback){\r\n var that = this;\r\n table.eachCols(null, callback, that.config.cols);\r\n return that;\r\n };\r\n\r\n // 获取表头参数项\r\n Class.prototype.col = function(key){\r\n try {\r\n key = key.split('-');\r\n return this.config.cols[key[1]][key[2]] || {};\r\n } catch(e){\r\n hint.error(e);\r\n return {};\r\n }\r\n };\r\n\r\n Class.prototype.getTrHtml = function(data, sort, curr, trsObj) {\r\n var that = this;\r\n var options = that.config;\r\n var trs = trsObj && trsObj.trs || [];\r\n var trs_fixed = trsObj && trsObj.trs_fixed || [];\r\n var trs_fixed_r = trsObj && trsObj.trs_fixed_r || [];\r\n curr = curr || 1\r\n\r\n layui.each(data, function(i1, item1){\r\n var tds = [];\r\n var tds_fixed = [];\r\n var tds_fixed_r = [];\r\n var numbers = i1 + options.limit*(curr - 1) + 1; // 序号\r\n\r\n // 数组值是否为 object,如果不是,则自动转为 object\r\n if(typeof item1 !== 'object'){\r\n data[i1] = item1 = {LAY_KEY: item1};\r\n try {\r\n table.cache[that.key][i1] = item1;\r\n } catch(e) {}\r\n }\r\n\r\n //若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])\r\n if(layui.type(item1) === 'array' && item1.length === 0) return;\r\n\r\n // 加入序号保留字段\r\n item1[table.config.numbersName] = numbers;\r\n\r\n // 记录下标索引,用于恢复排序\r\n if(!sort) item1[table.config.indexName] = i1;\r\n\r\n // 遍历表头\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3;\r\n var key = item3.key;\r\n var content = item1[field];\r\n\r\n if(content === undefined || content === null) content = '';\r\n if(item3.colGroup) return;\r\n\r\n // td 内容\r\n var td = [''\r\n ,'
        '\r\n + function(){\r\n var tplData = $.extend(true, {\r\n LAY_COL: item3\r\n }, item1);\r\n var checkName = table.config.checkName;\r\n var disabledName = table.config.disabledName;\r\n\r\n // 渲染不同风格的列\r\n switch(item3.type){\r\n case 'checkbox': // 复选\r\n return '';\r\n //break;\r\n case 'radio': // 单选\r\n return '';\r\n //break;\r\n case 'numbers':\r\n return numbers;\r\n //break;\r\n }\r\n\r\n //解析工具列模板\r\n if(item3.toolbar){\r\n return laytpl($(item3.toolbar).html()||'').render(tplData);\r\n }\r\n return parseTempData.call(that, {\r\n item3: item3\r\n ,content: content\r\n ,tplData: tplData\r\n });\r\n }()\r\n ,'
        '].join('');\r\n\r\n tds.push(td);\r\n if(item3.fixed && item3.fixed !== 'right') tds_fixed.push(td);\r\n if(item3.fixed === 'right') tds_fixed_r.push(td);\r\n });\r\n\r\n // 添加 tr 属性\r\n var trAttr = function(){\r\n var arr = ['data-index=\"'+ i1 +'\"'];\r\n if(item1[table.config.checkName]) arr.push('class=\"'+ ELEM_CHECKED +'\"');\r\n return arr.join(' ');\r\n }();\r\n\r\n trs.push(''+ tds.join('') + '');\r\n trs_fixed.push(''+ tds_fixed.join('') + '');\r\n trs_fixed_r.push(''+ tds_fixed_r.join('') + '');\r\n });\r\n\r\n return {\r\n trs: trs,\r\n trs_fixed: trs_fixed,\r\n trs_fixed_r: trs_fixed_r\r\n }\r\n }\r\n\r\n // 返回行节点代码\r\n table.getTrHtml = function (id, data) {\r\n var that = getThisTable(id);\r\n return that.getTrHtml(data, null, that.page);\r\n }\r\n\r\n // 数据渲染\r\n Class.prototype.renderData = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var res = opts.res;\r\n var curr = opts.curr;\r\n var count = that.count = opts.count;\r\n var sort = opts.sort;\r\n\r\n var data = res[options.response.dataName] || []; //列表数据\r\n var totalRowData = res[options.response.totalRowName]; //合计行数据\r\n var trs = [];\r\n var trs_fixed = [];\r\n var trs_fixed_r = [];\r\n\r\n // 渲染视图\r\n var render = function(){ // 后续性能提升的重点\r\n if(!sort && that.sortKey){\r\n return that.sort({\r\n field: that.sortKey.field,\r\n type: that.sortKey.sort,\r\n pull: true,\r\n reloadType: opts.type\r\n });\r\n }\r\n that.getTrHtml(data, sort, curr, {\r\n trs: trs,\r\n trs_fixed: trs_fixed,\r\n trs_fixed_r: trs_fixed_r\r\n });\r\n\r\n // 容器的滚动条位置\r\n if(!(options.scrollPos === 'fixed' && opts.type === 'reloadData')){\r\n that.layBody.scrollTop(0);\r\n }\r\n if(options.scrollPos === 'reset'){\r\n that.layBody.scrollLeft(0);\r\n }\r\n\r\n that.layMain.find('.'+ NONE).remove();\r\n that.layMain.find('tbody').html(trs.join(''));\r\n that.layFixLeft.find('tbody').html(trs_fixed.join(''));\r\n that.layFixRight.find('tbody').html(trs_fixed_r.join(''));\r\n\r\n // 渲染表单\r\n that.syncCheckAll();\r\n that.renderForm();\r\n\r\n // 因为 page 参数有可能发生变化 先重新铺满\r\n that.fullSize();\r\n\r\n // 滚动条补丁\r\n that.haveInit ? that.scrollPatch() : setTimeout(function(){\r\n that.scrollPatch();\r\n }, 50);\r\n that.haveInit = true;\r\n\r\n layer.close(that.tipsIndex);\r\n };\r\n\r\n table.cache[that.key] = data; //记录数据\r\n\r\n //显示隐藏合计栏\r\n that.layTotal[data.length == 0 ? 'addClass' : 'removeClass'](HIDE_V);\r\n\r\n //显示隐藏分页栏\r\n that.layPage[(options.page || options.pagebar) ? 'removeClass' : 'addClass'](HIDE);\r\n that.layPage.find(ELEM_PAGE_VIEW)[\r\n (!options.page || count == 0 || (data.length === 0 && curr == 1))\r\n ? 'addClass'\r\n : 'removeClass'\r\n ](HIDE_V);\r\n\r\n //如果无数据\r\n if(data.length === 0){\r\n return that.errorView(options.text.none);\r\n } else {\r\n that.layFixLeft.removeClass(HIDE);\r\n }\r\n\r\n //如果执行初始排序\r\n if(sort){\r\n return render();\r\n }\r\n\r\n //正常初始化数据渲染\r\n render(); //渲染数据\r\n that.renderTotal(data, totalRowData); //数据合计\r\n that.layTotal && that.layTotal.removeClass(HIDE);\r\n\r\n //同步分页状态\r\n if(options.page){\r\n options.page = $.extend({\r\n elem: 'layui-table-page' + options.index,\r\n count: count,\r\n limit: options.limit,\r\n limits: options.limits || [10,20,30,40,50,60,70,80,90],\r\n groups: 3,\r\n layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'],\r\n prev: '',\r\n next: '',\r\n jump: function(obj, first){\r\n if(!first){\r\n //分页本身并非需要做以下更新,下面参数的同步,主要是因为其它处理统一用到了它们\r\n //而并非用的是 options.page 中的参数(以确保分页未开启的情况仍能正常使用)\r\n that.page = obj.curr; //更新页码\r\n options.limit = obj.limit; //更新每页条数\r\n\r\n that.pullData(obj.curr);\r\n }\r\n }\r\n }, options.page);\r\n options.page.count = count; //更新总条数\r\n laypage.render(options.page);\r\n }\r\n };\r\n\r\n // 重新渲染数据\r\n table.renderData = function (id) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n that.pullData(that.page, {\r\n renderData: true,\r\n type: 'reloadData'\r\n });\r\n }\r\n\r\n // 数据合计行\r\n Class.prototype.renderTotal = function(data, totalRowData){\r\n var that = this;\r\n var options = that.config;\r\n var totalNums = {};\r\n\r\n if(!options.totalRow) return;\r\n\r\n layui.each(data, function(i1, item1){\r\n // 若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])\r\n if(layui.type(item1) === 'array' && item1.length === 0) return;\r\n\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3\r\n ,content = item1[field];\r\n\r\n if(item3.totalRow){\r\n totalNums[field] = (totalNums[field] || 0) + (parseFloat(content) || 0);\r\n }\r\n });\r\n });\r\n\r\n that.dataTotal = []; // 记录合计行结果\r\n\r\n var tds = [];\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3;\r\n\r\n // 合计数据的特定字段\r\n var TOTAL_NUMS = totalRowData && totalRowData[item3.field];\r\n\r\n // 合计数据的小数点位数处理\r\n var decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2;\r\n var thisTotalNum = totalNums[field]\r\n ? parseFloat(totalNums[field] || 0).toFixed(decimals)\r\n : '';\r\n\r\n // td 显示内容\r\n var content = function(){\r\n var text = item3.totalRowText || '';\r\n var tplData = {\r\n LAY_COL: item3\r\n };\r\n\r\n tplData[field] = thisTotalNum;\r\n\r\n // 获取自动计算的合并内容\r\n var getContent = item3.totalRow ? (parseTempData.call(that, {\r\n item3: item3,\r\n content: thisTotalNum,\r\n tplData: tplData\r\n }) || text) : text;\r\n\r\n // 如果直接传入了合计行数据,则不输出自动计算的结果\r\n return TOTAL_NUMS || getContent;\r\n }();\r\n\r\n // 合计原始结果\r\n var total = TOTAL_NUMS || thisTotalNum || '';\r\n item3.field && that.dataTotal.push({\r\n field: item3.field,\r\n total: $('
        '+ content +'
        ').text()\r\n });\r\n\r\n // td 容器\r\n var td = ['',\r\n '
        ' + function(){\r\n var totalRow = item3.totalRow || options.totalRow;\r\n\r\n // 如果 totalRow 参数为字符类型,则解析为自定义模版\r\n if(typeof totalRow === 'string'){\r\n return laytpl(totalRow).render($.extend({\r\n TOTAL_NUMS: TOTAL_NUMS || totalNums[field],\r\n TOTAL_ROW: totalRowData || {},\r\n LAY_COL: item3\r\n }, item3));\r\n }\r\n return content;\r\n }(),\r\n '
        '].join('');\r\n\r\n tds.push(td);\r\n });\r\n\r\n var patchElem = that.layTotal.find('.layui-table-patch'); // 可能存在滚动条补丁\r\n that.layTotal.find('tbody').html('' + tds.join('') + (patchElem.length ? patchElem.get(0).outerHTML : '') + '');\r\n };\r\n\r\n //找到对应的列元素\r\n Class.prototype.getColElem = function(parent, key){\r\n var that = this;\r\n //var options = that.config;\r\n return parent.eq(0).find('.laytable-cell-'+ key + ':eq(0)');\r\n };\r\n\r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n var that = this;\r\n var options = that.config;\r\n var filter = that.elem.attr('lay-filter');\r\n form.render(type, filter);\r\n };\r\n\r\n // 定向渲染表单\r\n Class.prototype.renderFormByElem = function(elem){\r\n layui.each(['input', 'select'], function(i, formType){\r\n form.render(elem.find(formType));\r\n })\r\n };\r\n\r\n // 同步全选按钮状态\r\n Class.prototype.syncCheckAll = function(){\r\n var that = this;\r\n var options = that.config;\r\n var checkAllElem = that.layHeader.find('input[name=\"layTableCheckbox\"]');\r\n var syncColsCheck = function(checked){\r\n that.eachCols(function(i, item){\r\n if(item.type === 'checkbox'){\r\n item[options.checkName] = checked;\r\n }\r\n });\r\n return checked;\r\n };\r\n var checkStatus = table.checkStatus(that.key);\r\n\r\n if(!checkAllElem[0]) return;\r\n\r\n // 选中状态\r\n syncColsCheck(checkStatus.isAll);\r\n checkAllElem.prop({\r\n checked: checkStatus.isAll,\r\n indeterminate: !checkStatus.isAll && checkStatus.data.length // 半选\r\n });\r\n };\r\n\r\n // 标记当前活动行背景色\r\n Class.prototype.setRowActive = function(index, className, removeClass){\r\n var that = this;\r\n var options = that.config;\r\n var tr = that.layBody.find('tr[data-index=\"'+ index +'\"]');\r\n className = className || 'layui-table-click';\r\n\r\n if(removeClass) return tr.removeClass(className);\r\n\r\n tr.addClass(className);\r\n tr.siblings('tr').removeClass(className);\r\n };\r\n\r\n // 设置行选中状态\r\n Class.prototype.setRowChecked = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n var isCheckAll = opts.index === 'all'; // 是否操作全部\r\n var isCheckMult = layui.type(opts.index) === 'array'; // 是否操作多个\r\n var isCheckAllOrMult = isCheckAll || isCheckMult; // 是否全选或多选\r\n\r\n // 全选或多选时\r\n if (isCheckAllOrMult) {\r\n that.layBox.addClass(DISABLED_TRANSITION); // 减少回流\r\n if (opts.type === 'radio') return; // radio 不允许全选或多选\r\n }\r\n\r\n if(isCheckMult){\r\n var makeMap = {}\r\n layui.each(opts.index, function(i,v){\r\n makeMap[v] = true;\r\n })\r\n opts.index = makeMap;\r\n }\r\n\r\n // 匹配行元素\r\n var tbody = that.layBody.children('.layui-table').children('tbody');\r\n var selector = isCheckAllOrMult ? 'tr' : 'tr[data-index=\"'+ opts.index +'\"]';\r\n var tr = function(tr) {\r\n return isCheckAll ? tr : tr.filter(isCheckMult ? function() {\r\n var dataIndex = $(this).data('index');\r\n return opts.index[dataIndex];\r\n } : '[data-index=\"'+ opts.index +'\"]');\r\n }(tbody.children(selector));\r\n\r\n // 默认属性\r\n opts = $.extend({\r\n type: 'checkbox' // 选中方式\r\n }, opts);\r\n\r\n // 同步数据选中属性值\r\n var thisData = table.cache[that.key];\r\n var existChecked = 'checked' in opts;\r\n\r\n // 若为单选框,则单向选中;若为复选框,则切换选中。\r\n var getChecked = function(value){\r\n return opts.type === 'radio' ? true : (existChecked ? opts.checked : !value)\r\n };\r\n\r\n var radioCheckedIndex;\r\n\r\n // 给匹配行设置选中状态\r\n tr.each(function() {\r\n var el = $(this);\r\n var i = el.attr('data-index');\r\n var item = thisData[i];\r\n\r\n if (!i) return; // 此时 el 通常为静态表格嵌套时的原始模板\r\n\r\n // 绕过空项和禁用项\r\n if (layui.type(item) === 'array' || item[options.disabledName]) {\r\n return;\r\n }\r\n\r\n // 标记数据选中状态\r\n var checked = item[options.checkName] = getChecked(el.hasClass(ELEM_CHECKED));\r\n\r\n // 标记当前行背景色\r\n el.toggleClass(ELEM_CHECKED, !!checked);\r\n\r\n // 若为 radio 类型,则取消其他行选中背景色\r\n if (opts.type === 'radio') {\r\n radioCheckedIndex = i;\r\n el.siblings().removeClass(ELEM_CHECKED);\r\n }\r\n });\r\n\r\n // 若为 radio 类型,移除其他行数据选中状态\r\n if (radioCheckedIndex) {\r\n layui.each(thisData, function(i, item) {\r\n if (Number(radioCheckedIndex) !== Number(i)) {\r\n delete item[options.checkName];\r\n }\r\n });\r\n }\r\n\r\n // 若存在复选框或单选框,则标注选中状态样式\r\n var td = tr.children('td').children('.layui-table-cell');\r\n var checkedElem = td.children('input[lay-type=\"'+ ({\r\n radio: 'layTableRadio',\r\n checkbox: 'layTableCheckbox'\r\n }[opts.type] || 'checkbox') +'\"]:not(:disabled)');\r\n var checkedSameElem = checkedElem.last();\r\n var fixRElem = checkedSameElem.closest(ELEM_FIXR);\r\n\r\n ( opts.type === 'radio' && fixRElem.hasClass(HIDE)\r\n ? checkedElem.first()\r\n : checkedElem ).prop('checked', getChecked(checkedSameElem.prop('checked')));\r\n\r\n that.syncCheckAll();\r\n\r\n if(isCheckAllOrMult){\r\n setTimeout(function(){\r\n that.layBox.removeClass(DISABLED_TRANSITION);\r\n },100)\r\n }\r\n };\r\n\r\n // 数据排序\r\n Class.prototype.sort = function(opts){ // field, type, pull, fromEvent\r\n var that = this;\r\n var field;\r\n var res = {};\r\n var options = that.config;\r\n var filter = options.elem.attr('lay-filter');\r\n var data = table.cache[that.key], thisData;\r\n\r\n opts = opts || {};\r\n\r\n // 字段匹配\r\n if(typeof opts.field === 'string'){\r\n field = opts.field;\r\n that.layHeader.find('th').each(function(i, item){\r\n var othis = $(this);\r\n var _field = othis.data('field');\r\n if(_field === opts.field){\r\n opts.field = othis;\r\n field = _field;\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n try {\r\n field = field || opts.field.data('field');\r\n var key = opts.field.data('key');\r\n\r\n // 如果欲执行的排序已在状态中,则不执行渲染\r\n if(that.sortKey && !opts.pull){\r\n if(field === that.sortKey.field && opts.type === that.sortKey.sort){\r\n return;\r\n }\r\n }\r\n\r\n var elemSort = that.layHeader.find('th .laytable-cell-'+ key).find(ELEM_SORT);\r\n that.layHeader.find('th').find(ELEM_SORT).removeAttr('lay-sort'); // 清除其它标题排序状态\r\n elemSort.attr('lay-sort', opts.type || null);\r\n that.layFixed.find('th')\r\n } catch(e){\r\n hint.error('Table modules: sort field \\''+ field +'\\' not matched');\r\n }\r\n\r\n // 记录排序索引和类型\r\n that.sortKey = {\r\n field: field,\r\n sort: opts.type\r\n };\r\n\r\n // 默认为前端自动排序。如果否,则需自主排序(通常为服务端处理好排序)\r\n if(options.autoSort){\r\n if(opts.type === 'asc'){ //升序\r\n thisData = layui.sort(data, field, null, true);\r\n } else if(opts.type === 'desc'){ //降序\r\n thisData = layui.sort(data, field, true, true);\r\n } else { // 清除排序\r\n thisData = layui.sort(data, table.config.indexName, null, true);\r\n delete that.sortKey;\r\n delete options.initSort;\r\n }\r\n }\r\n\r\n res[options.response.dataName] = thisData || data;\r\n\r\n // 重载数据\r\n that.renderData({\r\n res: res,\r\n curr: that.page,\r\n count: that.count,\r\n sort: true,\r\n type: opts.reloadType\r\n });\r\n\r\n // 排序是否来自于点击表头事件触发\r\n if(opts.fromEvent){\r\n options.initSort = {\r\n field: field,\r\n type: opts.type\r\n };\r\n layui.event.call(opts.field, MOD_NAME, 'sort('+ filter +')', $.extend({\r\n config: options\r\n }, options.initSort));\r\n }\r\n };\r\n\r\n // 请求 loading\r\n Class.prototype.loading = function(show){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(options.loading){\r\n that.layBox.find(ELEM_INIT).toggleClass(HIDE_V, !show); \r\n }\r\n };\r\n\r\n // 获取对应单元格的 cssRules\r\n Class.prototype.cssRules = function(key, callback){\r\n var that = this;\r\n var style = that.elem.children('style')[0];\r\n\r\n lay.getStyleRules(style, function(item){\r\n if (item.selectorText === ('.laytable-cell-'+ key)) {\r\n callback(item);\r\n return true;\r\n }\r\n });\r\n };\r\n\r\n // 让表格铺满\r\n Class.prototype.fullSize = function(){\r\n var that = this;\r\n var options = that.config;\r\n var height = options.height;\r\n var bodyHeight;\r\n var MIN_HEIGHT = 135;\r\n\r\n if(that.fullHeightGap){\r\n height = _WIN.height() - that.fullHeightGap;\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n // that.elem.css('height', height);\r\n } else if (that.parentDiv && that.parentHeightGap) {\r\n height = $(that.parentDiv).height() - that.parentHeightGap;\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n // that.elem.css(\"height\", height);\r\n } else if (that.customHeightFunc) {\r\n height = that.customHeightFunc();\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n }\r\n\r\n // 如果多级表头,则填补表头高度\r\n if(options.cols.length > 1){\r\n // 补全高度\r\n var th = that.layFixed.find(ELEM_HEADER).find('th');\r\n // 固定列表头同步跟本体 th 一致高度\r\n var headerMain = that.layHeader.first();\r\n layui.each(th, function (thIndex, thElem) {\r\n thElem = $(thElem);\r\n thElem.height(headerMain.find('th[data-key=\"' + thElem.attr('data-key') + '\"]').height() + 'px');\r\n })\r\n }\r\n\r\n if(!height) return;\r\n\r\n // 减去列头区域的高度 --- 此处的数字常量是为了防止容器处在隐藏区域无法获得高度的问题,只对默认尺寸表格做支持\r\n bodyHeight = parseFloat(height) - (that.layHeader.outerHeight() || 39)\r\n\r\n // 减去工具栏的高度\r\n if(options.toolbar){\r\n bodyHeight -= (that.layTool.outerHeight() || 51);\r\n }\r\n\r\n // 减去统计栏的高度\r\n if(options.totalRow){\r\n bodyHeight -= (that.layTotal.outerHeight() || 40);\r\n }\r\n\r\n // 减去分页栏的高度\r\n if(options.page || options.pagebar){\r\n bodyHeight -= (that.layPage.outerHeight() || 43);\r\n }\r\n\r\n if (options.maxHeight) {\r\n layui.each({elem: height, layMain: bodyHeight}, function (elemName, elemHeight) {\r\n that[elemName].css({\r\n height: 'auto',\r\n maxHeight: elemHeight + 'px'\r\n });\r\n });\r\n } else {\r\n that.layMain.outerHeight(bodyHeight);\r\n }\r\n };\r\n\r\n //获取滚动条宽度\r\n Class.prototype.getScrollWidth = function(elem){\r\n var width;\r\n if(elem){\r\n width = elem.offsetWidth - elem.clientWidth;\r\n } else {\r\n elem = document.createElement('div');\r\n elem.style.width = '100px';\r\n elem.style.height = '100px';\r\n elem.style.overflowY = 'scroll';\r\n\r\n document.body.appendChild(elem);\r\n width = elem.offsetWidth - elem.clientWidth;\r\n document.body.removeChild(elem);\r\n }\r\n return width;\r\n };\r\n\r\n // 滚动条补丁\r\n Class.prototype.scrollPatch = function(){\r\n var that = this;\r\n var layMainTable = that.layMain.children('table');\r\n var scrollWidth = that.layMain.width() - that.layMain.prop('clientWidth'); // 纵向滚动条宽度\r\n var scrollHeight = that.layMain.height() - that.layMain.prop('clientHeight'); // 横向滚动条高度\r\n var getScrollWidth = that.getScrollWidth(that.layMain[0]); // 获取主容器滚动条宽度,如果有的话\r\n var outWidth = layMainTable.outerWidth() - that.layMain.width(); // 表格内容器的超出宽度\r\n\r\n // 添加补丁\r\n var addPatch = function(elem){\r\n if(scrollWidth && scrollHeight){\r\n elem = elem.eq(0);\r\n if(!elem.find('.layui-table-patch')[0]){\r\n var patchElem = $('
        '); // 补丁元素\r\n patchElem.find('div').css({\r\n width: scrollWidth\r\n });\r\n elem.find('tr').append(patchElem);\r\n }\r\n } else {\r\n elem.find('.layui-table-patch').remove();\r\n }\r\n };\r\n\r\n addPatch(that.layHeader);\r\n addPatch(that.layTotal);\r\n\r\n // 固定列区域高度\r\n var mainHeight = that.layMain.height();\r\n var fixHeight = mainHeight - scrollHeight;\r\n\r\n that.layFixed.find(ELEM_BODY).css(\r\n 'height',\r\n layMainTable.height() >= fixHeight ? fixHeight : 'auto'\r\n ).scrollTop(that.layMain.scrollTop()); // 固定列滚动条高度\r\n\r\n // 表格宽度小于容器宽度时,隐藏固定列\r\n that.layFixRight[\r\n (table.cache[that.key] && table.cache[that.key].length) && outWidth > 0\r\n ? 'removeClass'\r\n : 'addClass'\r\n ](HIDE);\r\n\r\n // 操作栏\r\n that.layFixRight.css('right', scrollWidth - 1);\r\n };\r\n\r\n /**\r\n * @typedef updateRowOptions\r\n * @prop {number} index - 行索引\r\n * @prop {Object.} data - 行数据\r\n * @prop {boolean | ((field, index) => boolean)} [related] - 更新其他包含自定义模板且可能有所关联的列视图\r\n */\r\n /**\r\n * 更新指定行\r\n * @param {updateRowOptions | updateRowOptions[]} opts \r\n * @param {(field: string, value: any) => void} [callback] - 更新每个字段时的回调函数\r\n */\r\n Class.prototype.updateRow = function(opts, callback){\r\n var that = this;\r\n var ELEM_CELL = '.layui-table-cell';\r\n var opts = layui.type(opts) === 'array' ? opts : [opts];\r\n var dataCache = table.cache[that.key] || [];\r\n\r\n var update = function(opt){\r\n var index = opt.index;\r\n var row = opt.data;\r\n var related = opt.related;\r\n\r\n var data = dataCache[index] || {};\r\n var tr = that.layBody.find('tr[data-index=\"' + index + '\"]');\r\n\r\n // 更新缓存中的数据\r\n layui.each(row, function (key, value) {\r\n data[key] = value;\r\n callback && callback(key, value);\r\n });\r\n\r\n // 更新单元格\r\n that.eachCols(function (i, item3) {\r\n var field = String(item3.field || i);\r\n var shouldUpdate = field in row || ((typeof related === 'function' ? related(field, i) : related) && (item3.templet || item3.toolbar));\r\n if(shouldUpdate){\r\n var td = tr.children('td[data-field=\"' + field + '\"]');\r\n var cell = td.children(ELEM_CELL);\r\n var content = data[item3.field];\r\n cell.html(parseTempData.call(that, {\r\n item3: item3,\r\n content: content,\r\n tplData: $.extend({\r\n LAY_COL: item3,\r\n }, data)\r\n }));\r\n td.data(\"content\", content);\r\n that.renderFormByElem(cell);\r\n }\r\n });\r\n }\r\n\r\n layui.each(opts, function(i, opt){\r\n update(opt);\r\n });\r\n };\r\n\r\n /**\r\n * 更新指定行\r\n * @param {string} id - table ID\r\n * @param {updateRowOptions | updateRowOptions[]} options \r\n */\r\n table.updateRow = function (id, options){\r\n var that = getThisTable(id);\r\n return that.updateRow(options);\r\n }\r\n\r\n // 事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var filter = options.elem.attr('lay-filter');\r\n var th = that.layHeader.find('th');\r\n var ELEM_CELL = '.layui-table-cell';\r\n\r\n var _BODY = $('body');\r\n var dict = {};\r\n\r\n // 头部工具栏操作事件\r\n that.layTool.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n var data = table.cache[options.id];\r\n\r\n // 弹出工具下拉面板\r\n var openPanel = function(sets) {\r\n var list = $(sets.list);\r\n var panel = $('
          ');\r\n\r\n panel.html(list);\r\n\r\n // 限制最大高度\r\n if(options.height){\r\n panel.css('max-height', options.height - (that.layTool.outerHeight() || 50));\r\n }\r\n\r\n // 插入元素\r\n othis.find('.' + ELEM_TOOL_PANEL)[0] || othis.append(panel);\r\n that.renderForm();\r\n\r\n panel.on('click', function(e){\r\n layui.stope(e);\r\n });\r\n\r\n sets.done && sets.done(panel, list)\r\n };\r\n\r\n layui.stope(e);\r\n _DOC.trigger('table.tool.panel.remove');\r\n layer.close(that.tipsIndex);\r\n\r\n // 头部工具栏右侧图标\r\n layui.each(options.defaultToolbar, function(index, item) {\r\n if (item.layEvent === events) {\r\n typeof item.onClick === 'function' && item.onClick({\r\n data: data,\r\n config: options,\r\n openPanel: openPanel,\r\n elem: othis\r\n });\r\n return true;\r\n }\r\n });\r\n\r\n // table toolbar 事件\r\n layui.event.call(this, MOD_NAME, 'toolbar('+ filter +')', $.extend({\r\n event: events,\r\n config: options\r\n },{}));\r\n });\r\n\r\n // 表头自定义元素事件\r\n that.layHeader.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n var th = othis.closest('th');\r\n var key = th.data('key');\r\n var col = that.col(key);\r\n\r\n layui.event.call(this, MOD_NAME, 'colTool('+ filter +')', $.extend({\r\n event: events,\r\n config: options,\r\n col: col\r\n },{}));\r\n });\r\n\r\n // 分页栏操作事件\r\n that.layPagebar.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n\r\n layui.event.call(this, MOD_NAME, 'pagebar('+ filter +')', $.extend({\r\n event: events,\r\n config: options\r\n },{}));\r\n });\r\n\r\n // 拖拽调整宽度\r\n th.on('mousemove', function(e){\r\n var othis = $(this);\r\n var oLeft = othis.offset().left;\r\n var pLeft = e.clientX - oLeft;\r\n if(othis.data('unresize') || thisTable.eventMoveElem){\r\n return;\r\n }\r\n dict.allowResize = othis.width() - pLeft <= 10; //是否处于拖拽允许区域\r\n _BODY.css('cursor', (dict.allowResize ? 'col-resize' : ''));\r\n }).on('mouseleave', function(){\r\n var othis = $(this);\r\n if(thisTable.eventMoveElem) return;\r\n dict.allowResize = false;\r\n _BODY.css('cursor', '');\r\n }).on('mousedown', function(e){\r\n var othis = $(this);\r\n if(dict.allowResize){\r\n var key = othis.data('key');\r\n e.preventDefault();\r\n dict.offset = [e.clientX, e.clientY]; //记录初始坐标\r\n\r\n that.cssRules(key, function(item){\r\n var width = item.style.width || othis.outerWidth();\r\n dict.rule = item;\r\n dict.ruleWidth = parseFloat(width);\r\n dict.minWidth = othis.data('minwidth') || options.cellMinWidth;\r\n dict.maxWidth = othis.data('maxwidth') || options.cellMaxWidth;\r\n });\r\n\r\n // 临时记录当前拖拽信息\r\n othis.data(DATA_MOVE_NAME, dict);\r\n thisTable.eventMoveElem = othis;\r\n }\r\n });\r\n\r\n // 拖拽中\r\n if(!thisTable.docEvent){\r\n _DOC.on('mousemove', function(e){\r\n if(thisTable.eventMoveElem){\r\n var dict = thisTable.eventMoveElem.data(DATA_MOVE_NAME) || {};\r\n\r\n thisTable.eventMoveElem.data('resizing', 1);\r\n e.preventDefault();\r\n\r\n if(dict.rule){\r\n var setWidth = dict.ruleWidth + e.clientX - dict.offset[0];\r\n var id = thisTable.eventMoveElem.closest('.' + ELEM_VIEW).attr(MOD_ID);\r\n var thatTable = getThisTable(id);\r\n\r\n if(!thatTable) return;\r\n\r\n if(setWidth < dict.minWidth) setWidth = dict.minWidth;\r\n if(setWidth > dict.maxWidth) setWidth = dict.maxWidth;\r\n\r\n dict.rule.style.width = setWidth + 'px';\r\n thatTable.setGroupWidth(thisTable.eventMoveElem);\r\n layer.close(that.tipsIndex);\r\n }\r\n }\r\n }).on('mouseup', function(e){\r\n if(thisTable.eventMoveElem){\r\n var th = thisTable.eventMoveElem; // 当前触发拖拽的 th 元素\r\n var id = th.closest('.' + ELEM_VIEW).attr(MOD_ID);\r\n var thatTable = getThisTable(id);\r\n\r\n if(!thatTable) return;\r\n\r\n var key = th.data('key');\r\n var col = thatTable.col(key);\r\n var filter = thatTable.config.elem.attr('lay-filter');\r\n\r\n // 重置过度信息\r\n dict = {};\r\n _BODY.css('cursor', '');\r\n thatTable.scrollPatch();\r\n\r\n // 清除当前拖拽信息\r\n th.removeData(DATA_MOVE_NAME);\r\n delete thisTable.eventMoveElem;\r\n\r\n // 列拖拽宽度后的事件\r\n thatTable.cssRules(key, function(item){\r\n col.width = parseFloat(item.style.width);\r\n layui.event.call(th[0], MOD_NAME, 'colResized('+ filter +')', {\r\n col: col,\r\n config: thatTable.config\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n // 已给 document 执行全局事件,避免重复绑定\r\n thisTable.docEvent = true;\r\n\r\n\r\n // 排序\r\n th.on('click', function(e){\r\n var othis = $(this);\r\n var elemSort = othis.find(ELEM_SORT);\r\n var nowType = elemSort.attr('lay-sort');\r\n var type;\r\n\r\n // 排序不触发的条件\r\n if(!elemSort[0] || othis.data('resizing') === 1){\r\n return othis.removeData('resizing');\r\n }\r\n\r\n if(nowType === 'asc'){\r\n type = 'desc';\r\n } else if(nowType === 'desc'){\r\n type = null;\r\n } else {\r\n type = 'asc';\r\n }\r\n that.sort({\r\n field: othis,\r\n type: type,\r\n fromEvent: true\r\n });\r\n }).find(ELEM_SORT+' .layui-edge ').on('click', function(e){\r\n var othis = $(this);\r\n var index = othis.index();\r\n var field = othis.parents('th').eq(0).data('field');\r\n layui.stope(e);\r\n if(index === 0){\r\n that.sort({\r\n field: field,\r\n type: 'asc',\r\n fromEvent: true\r\n });\r\n } else {\r\n that.sort({\r\n field: field,\r\n type: 'desc',\r\n fromEvent: true\r\n });\r\n }\r\n });\r\n\r\n //数据行中的事件返回的公共对象成员\r\n var commonMember = that.commonMember = function(sets){\r\n var othis = $(this);\r\n var index = othis.parents('tr').eq(0).data('index');\r\n var tr = that.layBody.find('tr[data-index=\"'+ index +'\"]');\r\n var data = table.cache[that.key] || [];\r\n\r\n data = data[index] || {};\r\n\r\n // 事件返回的公共成员\r\n var obj = {\r\n tr: tr, // 行元素\r\n config: options,\r\n data: table.clearCacheKey(data), // 当前行数据\r\n dataCache: data, // 当前行缓存中的数据\r\n index: index,\r\n del: function(){ // 删除行数据\r\n table.cache[that.key][index] = [];\r\n tr.remove();\r\n that.scrollPatch();\r\n },\r\n update: function(fields, related){ // 修改行数据\r\n fields = fields || {};\r\n that.updateRow({\r\n index: index,\r\n data: fields,\r\n related: related\r\n }, function(key, value){\r\n obj.data[key] = value;\r\n });\r\n },\r\n // 设置行选中状态\r\n setRowChecked: function(opts){\r\n that.setRowChecked($.extend({\r\n index: index\r\n }, opts));\r\n }\r\n // 获取当前列\r\n };\r\n\r\n return $.extend(obj, sets);\r\n };\r\n\r\n // 复选框选择(替代元素的 click 事件)\r\n that.elem.on('click', 'input[name=\"layTableCheckbox\"]+', function(e){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var checkbox = othis.prev();\r\n var children = that.layBody.find('input[name=\"layTableCheckbox\"]');\r\n var index = checkbox.parents('tr').eq(0).data('index');\r\n var checked = checkbox[0].checked;\r\n var isAll = checkbox.attr('lay-filter') === 'layTableAllChoose';\r\n\r\n if(checkbox[0].disabled) return;\r\n\r\n // 全选\r\n if(isAll){\r\n that.setRowChecked({\r\n index: 'all',\r\n checked: checked\r\n });\r\n } else {\r\n that.setRowChecked({\r\n index: index,\r\n checked: checked\r\n });\r\n }\r\n\r\n layui.stope(e);\r\n\r\n // 事件\r\n layui.event.call(\r\n checkbox[0],\r\n MOD_NAME, 'checkbox('+ filter +')',\r\n commonMember.call(checkbox[0], {\r\n checked: checked,\r\n type: isAll ? 'all' : 'one',\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n });\r\n\r\n // 单选框选择\r\n that.elem.on('click', 'input[lay-type=\"layTableRadio\"]+', function(e){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var radio = othis.prev();\r\n var checked = radio[0].checked;\r\n var index = radio.parents('tr').eq(0).data('index');\r\n\r\n layui.stope(e);\r\n if(radio[0].disabled) return false;\r\n\r\n // 标注选中样式\r\n that.setRowChecked({\r\n type: 'radio',\r\n index: index\r\n });\r\n\r\n // 事件\r\n layui.event.call(\r\n radio[0],\r\n MOD_NAME, 'radio('+ filter +')',\r\n commonMember.call(radio[0], {\r\n checked: checked,\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n });\r\n\r\n // 行事件\r\n that.layBody.on('mouseenter', 'tr', function(){ // 鼠标移入行\r\n var othis = $(this);\r\n var index = othis.index();\r\n if(othis.data('off')) return; // 不触发事件\r\n that.layBody.find('tr:eq('+ index +')').addClass(ELEM_HOVER)\r\n }).on('mouseleave', 'tr', function(){ // 鼠标移出行\r\n var othis = $(this);\r\n var index = othis.index();\r\n if(othis.data('off')) return; // 不触发事件\r\n that.layBody.find('tr:eq('+ index +')').removeClass(ELEM_HOVER)\r\n }).on('click', 'tr', function(e){ // 单击行\r\n setRowEvent.call(this, 'row', e);\r\n }).on('dblclick', 'tr', function(e){ // 双击行\r\n setRowEvent.call(this, 'rowDouble', e);\r\n }).on('contextmenu', 'tr', function(e){ // 菜单\r\n if (!options.defaultContextmenu) e.preventDefault();\r\n setRowEvent.call(this, 'rowContextmenu', e);\r\n });\r\n\r\n // 创建行单击、双击、菜单事件\r\n var setRowEvent = function(eventType, e){\r\n var othis = $(this);\r\n if(othis.data('off')) return; // 不触发事件\r\n\r\n // 不触发「行单/双击事件」的子元素\r\n if (eventType !== 'rowContextmenu') {\r\n var UNROW = [\r\n '.layui-form-checkbox',\r\n '.layui-form-switch',\r\n '.layui-form-radio',\r\n '[lay-unrow]'\r\n ].join(',');\r\n\r\n if($(e.target).is(UNROW) || $(e.target).closest(UNROW)[0]){\r\n return;\r\n }\r\n }\r\n\r\n layui.event.call(\r\n this,\r\n MOD_NAME, eventType + '('+ filter +')',\r\n commonMember.call(othis.children('td')[0], {\r\n e: e\r\n })\r\n );\r\n };\r\n\r\n // 渲染单元格编辑状态\r\n var renderGridEdit = function(othis, e){\r\n othis = $(othis);\r\n\r\n if(othis.data('off')) return; // 不触发事件\r\n\r\n var field = othis.data('field');\r\n var key = othis.data('key');\r\n var col = that.col(key);\r\n var index = othis.closest('tr').data('index');\r\n var data = table.cache[that.key][index];\r\n var elemCell = othis.children(ELEM_CELL);\r\n\r\n // 是否开启编辑\r\n // 若 edit 传入函数,则根据函数的返回结果判断是否开启编辑\r\n var editType = typeof col.edit === 'function'\r\n ? col.edit(data)\r\n : col.edit;\r\n\r\n // 显示编辑表单\r\n if(editType){\r\n var input = $(function(){\r\n var inputElem = '';\r\n if(editType === 'textarea') {\r\n inputElem = '';\r\n }\r\n return inputElem;\r\n }());\r\n input[0].value = function(val) {\r\n return (val === undefined || val === null) ? '' : val;\r\n }(othis.data('content') || data[field]);\r\n othis.find('.'+ELEM_EDIT)[0] || othis.append(input);\r\n input.focus();\r\n e && layui.stope(e);\r\n }\r\n };\r\n\r\n // 单元格编辑 - 输入框内容被改变的事件\r\n that.layBody.on('change', '.'+ ELEM_EDIT, function(){\r\n var othis = $(this);\r\n var td = othis.parent();\r\n var value = this.value;\r\n var field = othis.parent().data('field');\r\n var index = othis.closest('tr').data('index');\r\n var data = table.cache[that.key][index];\r\n\r\n //事件回调的参数对象\r\n var params = commonMember.call(td[0], {\r\n value: value,\r\n field: field,\r\n oldValue: data[field], // 编辑前的值\r\n td: td,\r\n reedit: function(){ // 重新编辑\r\n setTimeout(function(){\r\n // 重新渲染为编辑状态\r\n renderGridEdit(params.td);\r\n\r\n // 将字段缓存的值恢复到编辑之前的值\r\n var obj = {};\r\n obj[field] = params.oldValue;\r\n params.update(obj);\r\n });\r\n },\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n });\r\n\r\n // 更新缓存中的值\r\n var obj = {}; //变更的键值\r\n obj[field] = value;\r\n params.update(obj);\r\n\r\n // 执行 API 编辑事件\r\n layui.event.call(td[0], MOD_NAME, 'edit('+ filter +')', params);\r\n }).on('blur', '.'+ ELEM_EDIT, function(){ // 单元格编辑 - 恢复非编辑状态事件\r\n $(this).remove(); // 移除编辑状态\r\n });\r\n\r\n // 表格主体单元格触发编辑的事件\r\n that.layBody.on(options.editTrigger, 'td', function(e){\r\n renderGridEdit(this, e);\r\n }).on('mouseenter', 'td', function(){\r\n showGridExpandIcon.call(this)\r\n }).on('mouseleave', 'td', function(){\r\n showGridExpandIcon.call(this, 'hide');\r\n });\r\n\r\n // 表格合计栏单元格 hover 显示展开图标\r\n that.layTotal.on('mouseenter', 'td', function(){\r\n showGridExpandIcon.call(this)\r\n }).on('mouseleave', 'td', function(){\r\n showGridExpandIcon.call(this, 'hide');\r\n });\r\n\r\n // 显示单元格展开图标\r\n var ELEM_GRID = 'layui-table-grid';\r\n var ELEM_GRID_DOWN = 'layui-table-grid-down';\r\n var ELEM_GRID_PANEL = 'layui-table-grid-panel';\r\n var showGridExpandIcon = function(hide){\r\n var othis = $(this);\r\n var elemCell = othis.children(ELEM_CELL);\r\n\r\n if(othis.data('off')) return; // 不触发事件\r\n if(othis.parent().hasClass(ELEM_EXPAND)) return; // 是否已为展开状态\r\n\r\n if(hide){\r\n othis.find('.layui-table-grid-down').remove();\r\n } else if((\r\n elemCell.prop('scrollWidth') > elemCell.prop('clientWidth') ||\r\n elemCell.find(\"br\").length > 0\r\n ) && !options.lineStyle){\r\n if(elemCell.find('.'+ ELEM_GRID_DOWN)[0]) return;\r\n othis.append('
          ');\r\n }\r\n };\r\n // 展开单元格内容\r\n var gridExpand = function(e, expandedMode){\r\n var othis = $(this);\r\n var td = othis.parent();\r\n var key = td.data('key');\r\n var col = that.col(key);\r\n var index = td.parent().data('index');\r\n var elemCell = td.children(ELEM_CELL);\r\n var ELEM_CELL_C = 'layui-table-cell-c';\r\n var elemCellClose = $('');\r\n\r\n expandedMode = expandedMode || col.expandedMode || options.cellExpandedMode;\r\n\r\n // 展开风格\r\n if (expandedMode === 'tips') { // TIPS 展开风格\r\n that.tipsIndex = layer.tips([\r\n '
          ',\r\n elemCell.html(),\r\n '
          ',\r\n ''\r\n ].join(''), elemCell[0], {\r\n tips: [3, ''],\r\n time: -1,\r\n anim: -1,\r\n maxWidth: (device.ios || device.android) ? 300 : that.elem.width()/2,\r\n isOutAnim: false,\r\n skin: 'layui-table-tips',\r\n success: function(layero, index){\r\n layero.find('.layui-table-tips-c').on('click', function(){\r\n layer.close(index);\r\n });\r\n }\r\n });\r\n } else { // 多行展开风格\r\n // 恢复其他已经展开的单元格\r\n that.elem.find('.'+ ELEM_CELL_C).trigger('click');\r\n\r\n // 设置当前单元格展开宽度\r\n that.cssRules(key, function(item){\r\n var width = item.style.width;\r\n var expandedWidth = col.expandedWidth || options.cellExpandedWidth;\r\n\r\n // 展开后的宽度不能小于当前宽度\r\n if(expandedWidth < parseFloat(width)) expandedWidth = parseFloat(width);\r\n\r\n elemCellClose.data('cell-width', width);\r\n item.style.width = expandedWidth + 'px';\r\n\r\n setTimeout(function(){\r\n that.scrollPatch(); // 滚动条补丁\r\n });\r\n });\r\n\r\n // 设置当前单元格展开样式\r\n that.setRowActive(index, ELEM_EXPAND);\r\n\r\n // 插入关闭按钮\r\n if(!elemCell.next('.'+ ELEM_CELL_C)[0]){\r\n elemCell.after(elemCellClose);\r\n }\r\n\r\n // 关闭展开状态\r\n elemCellClose.on('click', function(){\r\n var $this = $(this);\r\n that.setRowActive(index, [ELEM_EXPAND, ELEM_HOVER].join(' '), true); // 移除单元格展开样式\r\n that.cssRules(key, function(item){\r\n item.style.width = $this.data('cell-width'); // 恢复单元格展开前的宽度\r\n setTimeout(function(){\r\n that.resize(); // 滚动条补丁\r\n });\r\n });\r\n $this.remove();\r\n // 重置单元格滚动条位置\r\n elemCell.scrollTop(0);\r\n elemCell.scrollLeft(0); \r\n });\r\n }\r\n\r\n othis.remove();\r\n layui.stope(e);\r\n };\r\n\r\n // 表格主体单元格展开事件\r\n that.layBody.on('click', '.'+ ELEM_GRID_DOWN, function(e){\r\n gridExpand.call(this, e);\r\n });\r\n // 表格合计栏单元格展开事件\r\n that.layTotal.on('click', '.'+ ELEM_GRID_DOWN, function(e){\r\n gridExpand.call(this, e, 'tips'); // 强制采用 tips 风格\r\n });\r\n\r\n // 行工具条操作事件\r\n var toolFn = function(type){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var index = othis.parents('tr').eq(0).data('index');\r\n // 标记当前活动行\r\n that.setRowActive(index);\r\n\r\n // 执行事件\r\n layui.event.call(\r\n this,\r\n MOD_NAME,\r\n (type || 'tool') + '('+ filter +')',\r\n commonMember.call(this, {\r\n event: othis.attr('lay-event'),\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n };\r\n\r\n // 行工具条单击事件\r\n that.layBody.on('click', '*[lay-event]', function(e){\r\n toolFn.call(this);\r\n layui.stope(e);\r\n }).on('dblclick', '*[lay-event]', function(e){ //行工具条双击事件\r\n toolFn.call(this, 'toolDouble');\r\n layui.stope(e);\r\n });\r\n\r\n // 同步滚动条\r\n that.layMain.on('scroll', function(){\r\n var othis = $(this);\r\n var scrollLeft = othis.scrollLeft();\r\n var scrollTop = othis.scrollTop();\r\n\r\n that.layHeader.scrollLeft(scrollLeft);\r\n that.layTotal.scrollLeft(scrollLeft);\r\n that.layFixed.find(ELEM_BODY).scrollTop(scrollTop);\r\n\r\n layer.close(that.tipsIndex);\r\n });\r\n\r\n // 固定列滚轮事件 - 临时兼容方案\r\n that.layFixed.find(ELEM_BODY).on('mousewheel DOMMouseScroll', function(e) {\r\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail;\r\n var scrollTop = that.layMain.scrollTop();\r\n var step = 30;\r\n\r\n e.preventDefault();\r\n that.layMain.scrollTop(scrollTop + (delta > 0 ? -step : step));\r\n });\r\n\r\n };\r\n\r\n // 全局事件\r\n (function(){\r\n // 自适应尺寸\r\n _WIN.on('resize', function(){\r\n layui.each(thisTable.that, function(){\r\n this.resize();\r\n });\r\n });\r\n\r\n // 全局点击\r\n _DOC.on('click', function(){\r\n _DOC.trigger('table.remove.tool.panel');\r\n });\r\n\r\n // 工具面板移除事件\r\n _DOC.on('table.remove.tool.panel', function(){\r\n $('.' + ELEM_TOOL_PANEL).remove();\r\n });\r\n })();\r\n\r\n // 初始化\r\n table.init = function(filter, settings){\r\n settings = settings || {};\r\n var that = this;\r\n var inst = null;\r\n var elemTable = typeof filter === 'object' ? filter : (\r\n typeof filter === 'string'\r\n ? $('table[lay-filter=\"'+ filter +'\"]')\r\n : $(ELEM + '[lay-data], '+ ELEM + '[lay-options]')\r\n );\r\n var errorTips = 'Table element property lay-data configuration item has a syntax error: ';\r\n\r\n //遍历数据表格\r\n elemTable.each(function(){\r\n var othis = $(this);\r\n var attrData = othis.attr('lay-data');\r\n var tableData = lay.options(this, {\r\n attr: attrData ? 'lay-data' : null,\r\n errorText: errorTips + (attrData || othis.attr('lay-options'))\r\n });\r\n\r\n var options = $.extend({\r\n elem: this\r\n ,cols: []\r\n ,data: []\r\n ,skin: othis.attr('lay-skin') //风格\r\n ,size: othis.attr('lay-size') //尺寸\r\n ,even: typeof othis.attr('lay-even') === 'string' //偶数行背景\r\n }, table.config, settings, tableData);\r\n\r\n filter && othis.hide();\r\n\r\n //获取表头数据\r\n othis.find('thead>tr').each(function(i){\r\n options.cols[i] = [];\r\n $(this).children().each(function(ii){\r\n var th = $(this);\r\n var attrData = th.attr('lay-data');\r\n var itemData = lay.options(this, {\r\n attr: attrData ? 'lay-data' : null,\r\n errorText: errorTips + (attrData || th.attr('lay-options'))\r\n });\r\n\r\n var row = $.extend({\r\n title: th.text()\r\n ,colspan: parseInt(th.attr('colspan')) || 1 //列单元格\r\n ,rowspan: parseInt(th.attr('rowspan')) || 1 //行单元格\r\n }, itemData);\r\n\r\n options.cols[i].push(row);\r\n });\r\n });\r\n\r\n //缓存静态表体数据\r\n var trElem = othis.find('tbody>tr');\r\n\r\n //执行渲染\r\n var tableIns = table.render(options);\r\n\r\n //获取表体数据\r\n if (trElem.length && !settings.data && !tableIns.config.url) {\r\n var tdIndex = 0;\r\n table.eachCols(tableIns.config.id, function (i3, item3) {\r\n trElem.each(function(i1){\r\n options.data[i1] = options.data[i1] || {};\r\n var tr = $(this);\r\n var field = item3.field;\r\n options.data[i1][field] = tr.children('td').eq(tdIndex).html();\r\n });\r\n tdIndex++;\r\n })\r\n\r\n tableIns.reloadData({\r\n data: options.data\r\n });\r\n }\r\n });\r\n\r\n return that;\r\n };\r\n\r\n //记录所有实例\r\n thisTable.that = {}; //记录所有实例对象\r\n thisTable.config = {}; //记录所有实例配置项\r\n\r\n var eachChildCols = function (index, cols, i1, item2) {\r\n //如果是组合列,则捕获对应的子列\r\n if (item2.colGroup) {\r\n var childIndex = 0;\r\n index++;\r\n item2.CHILD_COLS = [];\r\n // 找到它的子列所在cols的下标\r\n var i2 = i1 + (parseInt(item2.rowspan) || 1);\r\n layui.each(cols[i2], function (i22, item22) {\r\n if (item22.parentKey) { // 如果字段信息中包含了parentKey和key信息\r\n if (item22.parentKey === item2.key) {\r\n item22.PARENT_COL_INDEX = index;\r\n item2.CHILD_COLS.push(item22);\r\n eachChildCols(index, cols, i2, item22);\r\n }\r\n } else {\r\n // 没有key信息以colspan数量所谓判断标准\r\n //如果子列已经被标注为{PARENT_COL_INDEX},或者子列累计 colspan 数等于父列定义的 colspan,则跳出当前子列循环\r\n if (item22.PARENT_COL_INDEX || (childIndex >= 1 && childIndex == (item2.colspan || 1))) return;\r\n item22.PARENT_COL_INDEX = index;\r\n item2.CHILD_COLS.push(item22);\r\n childIndex = childIndex + (parseInt(item22.colspan > 1 ? item22.colspan : 1));\r\n eachChildCols(index, cols, i2, item22);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // 遍历表头\r\n table.eachCols = function(id, callback, cols){\r\n var config = thisTable.config[id] || {};\r\n var arrs = [], index = 0;\r\n\r\n cols = $.extend(true, [], cols || config.cols);\r\n\r\n //重新整理表头结构\r\n layui.each(cols, function(i1, item1){\r\n if (i1) return true; // 只需遍历第一层\r\n layui.each(item1, function(i2, item2){\r\n eachChildCols(index, cols, i1, item2);\r\n if(item2.PARENT_COL_INDEX) return; //如果是子列,则不进行追加,因为已经存储在父列中\r\n arrs.push(item2)\r\n });\r\n });\r\n\r\n //重新遍历列,如果有子列,则进入递归\r\n var eachArrs = function(obj){\r\n layui.each(obj || arrs, function(i, item){\r\n if(item.CHILD_COLS) return eachArrs(item.CHILD_COLS);\r\n typeof callback === 'function' && callback(i, item);\r\n });\r\n };\r\n\r\n eachArrs();\r\n };\r\n\r\n // 获取表格选中状态\r\n table.checkStatus = function(id){\r\n var nums = 0;\r\n var invalidNum = 0;\r\n var arr = [];\r\n var data = table.cache[id] || [];\r\n\r\n //计算全选个数\r\n layui.each(data, function(i, item){\r\n if(layui.type(item) === 'array' || item[table.config.disabledName]){\r\n invalidNum++; // 无效数据,或已删除的\r\n return;\r\n }\r\n if(item[table.config.checkName]){\r\n nums++;\r\n if(!item[table.config.disabledName]){\r\n arr.push(table.clearCacheKey(item));\r\n }\r\n }\r\n });\r\n return {\r\n data: arr, // 选中的数据\r\n isAll: data.length ? (nums === (data.length - invalidNum)) : false // 是否全选\r\n };\r\n };\r\n\r\n // 设置行选中状态\r\n table.setRowChecked = function(id, opts){\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n that.setRowChecked(opts);\r\n };\r\n\r\n // 获取表格当前页的所有行数据\r\n table.getData = function(id){\r\n var arr = [];\r\n var data = table.cache[id] || [];\r\n layui.each(data, function(i, item){\r\n if(layui.type(item) === 'array'){\r\n return;\r\n }\r\n arr.push(table.clearCacheKey(item));\r\n });\r\n return arr;\r\n };\r\n\r\n // 重置表格尺寸结构\r\n table.resize = function(id){\r\n // 若指定表格唯一 id,则只执行该 id 对应的表格实例\r\n if(id){\r\n var config = getThisTableConfig(id); // 获取当前实例配置项\r\n if(!config) return;\r\n\r\n getThisTable(id).resize();\r\n\r\n } else { // 否则重置所有表格实例尺寸\r\n layui.each(thisTable.that, function(){\r\n this.resize();\r\n });\r\n }\r\n };\r\n\r\n // 表格导出\r\n table.exportFile = function(id, data, opts){\r\n data = data || table.clearCacheKey(table.cache[id]);\r\n opts = typeof opts === 'object' ? opts : function(){\r\n var obj = {};\r\n opts && (obj.type = opts);\r\n return obj;\r\n }();\r\n\r\n var type = opts.type || 'csv';\r\n var thatTable = thisTable.that[id];\r\n var config = thisTable.config[id] || {};\r\n var textType = ({\r\n csv: 'text/csv',\r\n xls: 'application/vnd.ms-excel'\r\n })[type];\r\n var alink = document.createElement(\"a\");\r\n\r\n if(device.ie) return hint.error('IE_NOT_SUPPORT_EXPORTS');\r\n\r\n // 处理 treeTable 数据\r\n var isTreeTable = config.tree && config.tree.view;\r\n if (isTreeTable) {\r\n try {\r\n data = $.extend(true, [], table.cache[id]);\r\n data = (function fn(data) {\r\n return data.reduce(function (acc, obj){\r\n var children = obj.children || [];\r\n delete obj.children;\r\n return acc.concat(obj, fn(children));\r\n }, []);\r\n })(Array.from(data));\r\n } catch (e) {}\r\n }\r\n\r\n alink.href = 'data:'+ textType +';charset=utf-8,\\ufeff'+ encodeURIComponent(function(){\r\n var dataTitle = [];\r\n var dataMain = [];\r\n var dataTotal = [];\r\n var fieldsIsHide = {};\r\n\r\n // 表头和表体\r\n layui.each(data, function(i1, item1){\r\n var vals = [];\r\n if(typeof id === 'object'){ // 若 id 参数直接为表头数据\r\n layui.each(id, function(i, item){\r\n i1 == 0 && dataTitle.push(item || '');\r\n });\r\n layui.each(layui.isArray(item1) ? $.extend([], item1) : table.clearCacheKey(item1), function(i2, item2){\r\n vals.push('\"'+ (item2 || '') +'\"');\r\n });\r\n } else {\r\n table.eachCols(id, function(i3, item3){\r\n if(item3.ignoreExport === false || item3.field && item3.type == 'normal'){\r\n // 不导出隐藏列,除非设置 ignoreExport 强制导出\r\n if (\r\n (item3.hide && item3.ignoreExport !== false) ||\r\n item3.ignoreExport === true // 忽略导出\r\n ) {\r\n if(i1 == 0) fieldsIsHide[item3.field] = true; // 记录隐藏列\r\n return;\r\n }\r\n\r\n var content = item1[item3.field];\r\n if(content === undefined || content === null) content = '';\r\n\r\n i1 == 0 && dataTitle.push(item3.fieldTitle || item3.title || item3.field || '');\r\n\r\n // 解析内容\r\n content = parseTempData.call(thatTable, {\r\n item3: item3,\r\n content: content,\r\n tplData: item1,\r\n text: 'text',\r\n obj: {\r\n td: function(field){\r\n if (isTreeTable) i1 = item1['LAY_DATA_INDEX']; // 兼容 treeTable 索引\r\n var td = thatTable.layBody.find('tr[data-index=\"'+ i1 +'\"]>td');\r\n return td.filter('[data-field=\"'+ field +'\"]');\r\n }\r\n }\r\n });\r\n\r\n // 异常处理\r\n content = content.replace(/\"/g, '\"\"'); // 避免内容存在「双引号」导致异常分隔\r\n // content += '\\t'; // 加「水平制表符」 避免内容被转换格式\r\n content = '\"'+ content +'\"'; // 避免内容存在「逗号」导致异常分隔\r\n\r\n // 插入内容\r\n vals.push(content);\r\n }else if(item3.field && item3.type !== 'normal'){\r\n // https://gitee.com/layui/layui/issues/I8PHCR\r\n if(i1 == 0) fieldsIsHide[item3.field] = true;\r\n }\r\n });\r\n }\r\n dataMain.push(vals.join(','));\r\n });\r\n\r\n // 表合计\r\n thatTable && layui.each(thatTable.dataTotal, function(i, o){\r\n fieldsIsHide[o.field] || dataTotal.push('\"' + (o.total || '') + '\"');\r\n });\r\n\r\n return dataTitle.join(',') + '\\r\\n' + dataMain.join('\\r\\n') + '\\r\\n' + dataTotal.join(',');\r\n }());\r\n\r\n alink.download = (opts.title || config.title || 'table_'+ (config.index || '')) + '.' + type;\r\n document.body.appendChild(alink);\r\n alink.click();\r\n document.body.removeChild(alink);\r\n };\r\n\r\n // 获取表格配置信息\r\n table.getOptions = function (id) {\r\n return getThisTableConfig(id);\r\n }\r\n\r\n // 显示或隐藏列\r\n table.hideCol = function (id, cols) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (layui.type(cols) === 'boolean') {\r\n // 显示全部或者隐藏全部\r\n that.eachCols(function (i2, item2) {\r\n var key = item2.key;\r\n var col = that.col(key);\r\n var parentKey = item2.parentKey;\r\n // 同步勾选列的 hide 值和隐藏样式\r\n if (col.hide != cols) {\r\n var hide = col.hide = cols;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n hide ? 'addClass' : 'removeClass'\r\n ](HIDE);\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n that.setParentCol(hide, parentKey);\r\n }\r\n })\r\n } else {\r\n cols = layui.isArray(cols) ? cols : [cols];\r\n layui.each(cols, function (i1, item1) {\r\n that.eachCols(function (i2, item2) {\r\n if (item1.field === item2.field) {\r\n var key = item2.key;\r\n var col = that.col(key);\r\n var parentKey = item2.parentKey;\r\n // 同步勾选列的 hide 值和隐藏样式\r\n if ('hide' in item1 && col.hide != item1.hide) {\r\n var hide = col.hide = !!item1.hide;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n hide ? 'addClass' : 'removeClass'\r\n ](HIDE);\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n that.setParentCol(hide, parentKey);\r\n }\r\n }\r\n })\r\n });\r\n }\r\n $('.' + ELEM_TOOL_PANEL).remove(); // 关闭字段筛选面板如果打开的话\r\n // 重新适配尺寸\r\n that.resize();\r\n }\r\n\r\n // 重载\r\n table.reload = function(id, options, deep, type){\r\n var config = getThisTableConfig(id); //获取当前实例配置项\r\n if(!config) return;\r\n\r\n var that = getThisTable(id);\r\n that.reload(options, deep, type);\r\n\r\n return thisTable.call(that);\r\n };\r\n\r\n // 仅重载数据\r\n table.reloadData = function(){\r\n var args = $.extend([], arguments);\r\n args[3] = 'reloadData';\r\n\r\n // 重载时,影响整个结构的参数,不适合更新的参数\r\n var dataParams = new RegExp('^('+ [\r\n 'elem', 'id', 'cols', 'width', 'height', 'maxHeight',\r\n 'toolbar', 'defaultToolbar',\r\n 'className', 'css', 'pagebar'\r\n ].join('|') + ')$');\r\n\r\n // 过滤与数据无关的参数\r\n layui.each(args[1], function (key, value) {\r\n if(dataParams.test(key)){\r\n delete args[1][key];\r\n }\r\n });\r\n\r\n return table.reload.apply(null, args);\r\n };\r\n\r\n // 核心入口\r\n table.render = function(options){\r\n var inst = new Class(options);\r\n return thisTable.call(inst);\r\n };\r\n\r\n // 清除临时 Key\r\n table.clearCacheKey = function(data){\r\n data = $.extend({}, data);\r\n delete data[table.config.checkName];\r\n delete data[table.config.indexName];\r\n delete data[table.config.numbersName];\r\n delete data[table.config.disabledName];\r\n return data;\r\n };\r\n\r\n // 自动完成渲染\r\n $(function(){\r\n table.init();\r\n });\r\n\r\n exports(MOD_NAME, table);\r\n});\r\n","/**\r\n * layui.treeTable\r\n * 树表组件\r\n */\r\n\r\nlayui.define(['table'], function (exports) {\r\n \"use strict\";\r\n\r\n var $ = layui.$;\r\n var form = layui.form;\r\n var table = layui.table;\r\n var hint = layui.hint();\r\n\r\n // api\r\n var treeTable = {\r\n config: {},\r\n // 事件\r\n on: table.on,\r\n // 遍历字段\r\n eachCols: table.eachCols,\r\n index: table.index,\r\n set: function (options) {\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n resize: table.resize,\r\n getOptions: table.getOptions,\r\n hideCol: table.hideCol,\r\n renderData: table.renderData\r\n };\r\n\r\n // 操作当前实例\r\n var thisTreeTable = function () {\r\n var that = this;\r\n var options = that.config\r\n var id = options.id || options.index;\r\n\r\n return {\r\n config: options,\r\n reload: function (options, deep) {\r\n that.reload.call(that, options, deep);\r\n },\r\n reloadData: function (options, deep) {\r\n treeTable.reloadData(id, options, deep);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取当前实例\r\n * @param {string} id 表格id\r\n * @returns {Class}\r\n */\r\n var getThisTable = function (id) {\r\n var that = thisTreeTable.that[id];\r\n if (!that) hint.error(id ? ('The treeTable instance with ID \\'' + id + '\\' not found') : 'ID argument required');\r\n return that || null;\r\n }\r\n\r\n // 字符\r\n var MOD_NAME = 'treeTable';\r\n var MOD_ID = 'lay-table-id';\r\n var HIDE = 'layui-hide';\r\n\r\n var ELEM_VIEW = '.layui-table-view';\r\n var ELEM_TREE = '.layui-table-tree';\r\n var ELEM_TOOL = '.layui-table-tool';\r\n var ELEM_BOX = '.layui-table-box';\r\n var ELEM_HEADER = '.layui-table-header';\r\n var ELEM_BODY = '.layui-table-body';\r\n var ELEM_MAIN = '.layui-table-main';\r\n var ELEM_FIXED = '.layui-table-fixed';\r\n var ELEM_FIXL = '.layui-table-fixed-l';\r\n var ELEM_FIXR = '.layui-table-fixed-r';\r\n var ELEM_CHECKED = 'layui-table-checked';\r\n\r\n var TABLE_TREE = 'layui-table-tree';\r\n var LAY_DATA_INDEX = 'LAY_DATA_INDEX';\r\n var LAY_DATA_INDEX_HISTORY = 'LAY_DATA_INDEX_HISTORY';\r\n var LAY_PARENT_INDEX = 'LAY_PARENT_INDEX';\r\n var LAY_CHECKBOX_HALF = 'LAY_CHECKBOX_HALF';\r\n var LAY_EXPAND = 'LAY_EXPAND';\r\n var LAY_HAS_EXPANDED = 'LAY_HAS_EXPANDED';\r\n var LAY_ASYNC_STATUS = 'LAY_ASYNC_STATUS';\r\n var LAY_CASCADE = ['all', 'parent', 'children', 'none'];\r\n var HTML_TAG_RE = /<[^>]+?>/;\r\n var ICON_PROPS = ['flexIconClose', 'flexIconOpen', 'iconClose', 'iconOpen', 'iconLeaf', 'icon']\r\n\r\n /**\r\n * 构造器\r\n * @class\r\n */\r\n var Class = function (options) {\r\n var that = this;\r\n that.index = ++treeTable.index;\r\n that.config = $.extend(true, {}, that.config, treeTable.config, options);\r\n // 处理一些属性\r\n that.init();\r\n that.render();\r\n };\r\n\r\n var updateCache = function (id, childrenKey, data) {\r\n var tableCache = table.cache[id];\r\n layui.each(data || tableCache, function (index, item) {\r\n var itemDataIndex = item[LAY_DATA_INDEX] || '';\r\n if (itemDataIndex.indexOf('-') !== -1) {\r\n tableCache[itemDataIndex] = item;\r\n }\r\n item[childrenKey] && updateCache(id, childrenKey, item[childrenKey]);\r\n })\r\n }\r\n\r\n var updateOptions = function (id, options, reload) {\r\n var that = getThisTable(id);\r\n reload === 'reloadData' || (that.status = { // 用于记录一些状态信息\r\n expand: {} // 折叠状态\r\n });\r\n var thatOptionsTemp = $.extend(true, {}, that.getOptions(), options);\r\n var treeOptions = thatOptionsTemp.tree;\r\n var childrenKey = treeOptions.customName.children;\r\n var idKey = treeOptions.customName.id;\r\n // 处理属性\r\n delete options.hasNumberCol;\r\n delete options.hasChecboxCol;\r\n delete options.hasRadioCol;\r\n table.eachCols(null, function (i1, item1) {\r\n if (item1.type === 'numbers') {\r\n options.hasNumberCol = true;\r\n } else if (item1.type === 'checkbox') {\r\n options.hasChecboxCol = true;\r\n } else if (item1.type === 'radio') {\r\n options.hasRadioCol = true;\r\n }\r\n }, thatOptionsTemp.cols)\r\n\r\n var parseData = options.parseData;\r\n var done = options.done;\r\n\r\n // treeTable重载数据时,会先加载显示顶层节点,然后根据重载数据前的子节点展开状态,展开相应的子节点,\r\n // 那么如果重载数据前有滚动条滚动在某个位子,重新加载时顶层节点如果比较少,只显示顶层节点时没有滚动条的情况下,\r\n // 自动展开子节点后,滚动条就会显示在顶部,无法保持在重载数据之前的位置。\r\n // 处理保持滚动条的问题,重载数据前记录滚动条的位置\r\n if(reload === 'reloadData' && thatOptionsTemp.scrollPos === 'fixed'){\r\n that.scrollTopCache = that.config.elem.next().find(ELEM_BODY).scrollTop();\r\n }\r\n\r\n if (thatOptionsTemp.url) {\r\n // 异步加载的时候需要处理parseData进行转换\r\n if (!reload || (reload && parseData && !parseData.mod)) {\r\n options.parseData = function () {\r\n var parseDataThat = this;\r\n var args = arguments;\r\n var retData = args[0];\r\n if (layui.type(parseData) === 'function') {\r\n retData = parseData.apply(parseDataThat, args) || args[0];\r\n }\r\n var dataName = parseDataThat.response.dataName;\r\n // 处理 isSimpleData\r\n if (treeOptions.data.isSimpleData && !treeOptions.async.enable) { // 异步加载和 isSimpleData 不应该一起使用\r\n retData[dataName] = that.flatToTree(retData[dataName]);\r\n }\r\n // 处理节点状态\r\n updateStatus(retData[dataName], function (item) {\r\n item[LAY_EXPAND] = LAY_EXPAND in item ? item[LAY_EXPAND] : (item[idKey] !== undefined && that.status.expand[item[idKey]])\r\n }, childrenKey);\r\n\r\n if (parseDataThat.autoSort && parseDataThat.initSort && parseDataThat.initSort.type) {\r\n layui.sort(retData[dataName], parseDataThat.initSort.field, parseDataThat.initSort.type === 'desc', true)\r\n }\r\n\r\n that.initData(retData[dataName]);\r\n\r\n return retData;\r\n }\r\n options.parseData.mod = true\r\n }\r\n } else {\r\n if(options.data !== undefined){\r\n options.data = options.data || [];\r\n // 处理 isSimpleData\r\n if (treeOptions.data.isSimpleData) {\r\n options.data = that.flatToTree(options.data);\r\n }\r\n that.initData(options.data);\r\n }\r\n }\r\n\r\n if (!reload || (reload && done && !done.mod)) {\r\n options.done = function () {\r\n var args = arguments;\r\n var doneThat = this;\r\n // undefined: 初始 render 或 reload,两者本质没有区别可以不做区分\r\n // 'reloadData': 重载数据\r\n // 'renderData': 重新渲染数据\r\n var renderType = args[3];\r\n var isRenderData = renderType === 'renderData';\r\n if (!isRenderData) {\r\n delete that.isExpandAll;\r\n }\r\n\r\n var tableView = this.elem.next();\r\n that.updateStatus(null, {\r\n LAY_HAS_EXPANDED: false // 去除已经打开过的状态\r\n });\r\n // 更新cache中的内容 将子节点也存到cache中\r\n updateCache(id, childrenKey);\r\n // 更新全选框的状态\r\n var layTableAllChooseElem = tableView.find('[name=\"layTableCheckbox\"][lay-filter=\"layTableAllChoose\"]');\r\n if (layTableAllChooseElem.length) {\r\n var checkStatus = treeTable.checkStatus(id);\r\n layTableAllChooseElem.prop({\r\n checked: checkStatus.isAll && checkStatus.data.length,\r\n indeterminate: !checkStatus.isAll && checkStatus.data.length\r\n })\r\n }\r\n if (!isRenderData && thatOptionsTemp.autoSort && thatOptionsTemp.initSort && thatOptionsTemp.initSort.type) {\r\n treeTable.sort(id);\r\n }\r\n\r\n that.renderTreeTable(tableView);\r\n\r\n // 恢复滚动条位置\r\n if(renderType === 'reloadData' && doneThat.scrollPos === 'fixed'){\r\n tableView.find(ELEM_BODY).scrollTop(that.scrollTopCache);\r\n }\r\n\r\n if (layui.type(done) === 'function') {\r\n return done.apply(doneThat, args);\r\n }\r\n }\r\n options.done.mod = true;\r\n }\r\n\r\n // 处理图标\r\n if(options && options.tree && options.tree.view){\r\n layui.each(ICON_PROPS, function(i, iconProp){\r\n if(options.tree.view[iconProp] !== undefined){\r\n options.tree.view[iconProp] = that.normalizedIcon(options.tree.view[iconProp]);\r\n }\r\n })\r\n }\r\n }\r\n\r\n Class.prototype.init = function () {\r\n var that = this;\r\n var options = that.config;\r\n var cascade = options.tree.data.cascade;\r\n if (LAY_CASCADE.indexOf(cascade) === -1) {\r\n options.tree.data.cascade = 'all'; // 超出范围的都重置为全联动\r\n }\r\n\r\n // 先初始一个空的表格以便拿到对应的表格实例信息\r\n var tableIns = table.render($.extend({}, options, {\r\n data: [],\r\n url: '',\r\n done: null\r\n }))\r\n var id = tableIns.config.id;\r\n thisTreeTable.that[id] = that; // 记录当前实例对象\r\n that.tableIns = tableIns;\r\n\r\n updateOptions(id, options);\r\n }\r\n\r\n // 初始默认配置\r\n Class.prototype.config = {\r\n tree: {\r\n customName: {\r\n children: \"children\", // 节点数据中保存子节点数据的属性名称\r\n isParent: \"isParent\", // 节点数据保存节点是否为父节点的属性名称\r\n name: \"name\", // 节点数据保存节点名称的属性名称\r\n id: \"id\", // 唯一标识的属性名称\r\n pid: \"parentId\", // 父节点唯一标识的属性名称\r\n icon: \"icon\" // 图标的属性名称\r\n },\r\n view: {\r\n indent: 14, // 层级缩进量\r\n flexIconClose: '', // 关闭时候的折叠图标\r\n flexIconOpen: '', // 打开时候的折叠图标\r\n showIcon: true, // 是否显示图标(节点类型图标)\r\n icon: '', // 节点图标,如果设置了这个属性或者数据中有这个字段信息,不管打开还是关闭都以这个图标的值为准\r\n iconClose: '', // 关闭时候的图标\r\n iconOpen: '', // 打开时候的图标\r\n iconLeaf: '', // 叶子节点的图标\r\n showFlexIconIfNotParent: false, // 当节点不是父节点的时候是否显示折叠图标\r\n dblClickExpand: true, // 双击节点时,是否自动展开父节点的标识\r\n expandAllDefault: false // 默认展开所有节点\r\n },\r\n data: {\r\n isSimpleData: false, // 是否简单数据模式\r\n rootPid: null, // 根节点的父 ID 值\r\n cascade: 'all' // 级联方式 默认全部级联:all 可选 级联父 parent 级联子 children\r\n },\r\n async: {\r\n enable: false, // 是否开启异步加载模式,只有开启的时候其他参数才起作用\r\n url: '', // 异步加载的接口,可以根据需要设置与顶层接口不同的接口,如果相同可以不设置该参数\r\n type: null, // 请求的接口类型,设置可缺省同上\r\n contentType: null, // 提交参数的数据类型,设置可缺省同上\r\n headers: null, // 设置可缺省同上\r\n where: null, // 设置可缺省同上\r\n autoParam: [] // 自动参数\r\n },\r\n callback: {\r\n beforeExpand: null, // 展开前的回调 return false 可以阻止展开的动作\r\n onExpand: null // 展开之后的回调\r\n }\r\n },\r\n };\r\n\r\n Class.prototype.normalizedIcon = function(iconStr){\r\n return iconStr\r\n ? HTML_TAG_RE.test(iconStr) ? iconStr : ''\r\n : ''\r\n }\r\n\r\n Class.prototype.getOptions = function () {\r\n var that = this;\r\n if (that.tableIns) {\r\n return table.getOptions(that.tableIns.config.id); // 获取表格的实时配置信息\r\n } else {\r\n return that.config;\r\n }\r\n };\r\n\r\n function flatToTree(flatArr, idKey, pIdKey, childrenKey, rootPid) {\r\n idKey = idKey || 'id';\r\n pIdKey = pIdKey || 'parentId';\r\n childrenKey = childrenKey || 'children';\r\n // 创建一个空的 map 对象,用于保存所有的节点\r\n var map = {};\r\n var rootNodes = [];\r\n\r\n var idTemp = '';\r\n var pidTemp = '';\r\n layui.each(flatArr, function(index, item){\r\n idTemp = idKey + item[idKey];\r\n pidTemp = idKey + item[pIdKey];\r\n\r\n // 将节点存入 map 对象\r\n if(!map[idTemp]){\r\n map[idTemp] = {};\r\n map[idTemp][childrenKey] = [];\r\n }\r\n\r\n // 合并节点\r\n var tempObj = {};\r\n tempObj[childrenKey] = map[idTemp][childrenKey];\r\n map[idTemp] = $.extend({}, item, tempObj);\r\n\r\n var isRootNode = (rootPid ? map[idTemp][pIdKey] === rootPid : !map[idTemp][pIdKey]);\r\n if(isRootNode){\r\n rootNodes.push(map[idTemp]);\r\n }else{\r\n if(!map[pidTemp]){\r\n map[pidTemp] = {};\r\n map[pidTemp][childrenKey] = [];\r\n }\r\n map[pidTemp][childrenKey].push(map[idTemp]);\r\n }\r\n });\r\n\r\n return rootNodes;\r\n }\r\n\r\n Class.prototype.flatToTree = function (tableData) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var tableId = options.id;\r\n\r\n tableData = tableData || table.cache[tableId];\r\n\r\n return flatToTree(tableData, customName.id, customName.pid, customName.children, treeOptions.data.rootPid)\r\n }\r\n\r\n Class.prototype.treeToFlat = function (tableData, parentId, parentIndex) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var childrenKey = customName.children;\r\n var pIdKey = customName.pid;\r\n\r\n var flat = [];\r\n layui.each(tableData, function (i1, item1) {\r\n var dataIndex = (parentIndex ? parentIndex + '-' : '') + i1;\r\n var dataNew = $.extend({}, item1);\r\n dataNew[pIdKey] = item1[pIdKey] || parentId;\r\n flat.push(dataNew);\r\n flat = flat.concat(that.treeToFlat(item1[childrenKey], item1[customName.id], dataIndex));\r\n });\r\n\r\n return flat;\r\n }\r\n\r\n // 通过当前行数据返回 treeNode 信息\r\n Class.prototype.getTreeNode = function (data) {\r\n var that = this;\r\n if (!data) {\r\n return hint.error('找不到节点数据');\r\n }\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var customName = treeOptions.customName;\r\n\r\n // 带上一些常用的方法\r\n return {\r\n data: data,\r\n dataIndex: data[LAY_DATA_INDEX],\r\n getParentNode: function () {\r\n return that.getNodeByIndex(data[LAY_PARENT_INDEX])\r\n },\r\n };\r\n }\r\n\r\n // 通过 index 返回节点信息\r\n Class.prototype.getNodeByIndex = function (index) {\r\n var that = this;\r\n var treeNodeData = that.getNodeDataByIndex(index);\r\n if (!treeNodeData) {\r\n return hint.error('找不到节点数据');\r\n }\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var parentKey = customName.parent;\r\n var tableId = options.id;\r\n\r\n var treeNode = {\r\n data: treeNodeData,\r\n dataIndex: treeNodeData[LAY_DATA_INDEX],\r\n getParentNode: function () {\r\n return that.getNodeByIndex(treeNodeData[LAY_PARENT_INDEX])\r\n },\r\n update: function (data) {\r\n return treeTable.updateNode(tableId, index, data)\r\n },\r\n remove: function () {\r\n return treeTable.removeNode(tableId, index)\r\n },\r\n expand: function (opts) {\r\n return treeTable.expandNode(tableId, $.extend({}, opts, {\r\n index: index\r\n }))\r\n },\r\n setChecked: function (opts) {\r\n return treeTable.setRowChecked(tableId, $.extend({}, opts, {\r\n index: index\r\n }))\r\n }\r\n };\r\n\r\n treeNode.dataIndex = index;\r\n return treeNode;\r\n }\r\n\r\n // 通过 id 获取节点信息\r\n Class.prototype.getNodeById = function (id) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var idKey = customName.id;\r\n\r\n // 通过 id 拿到数据的 dataIndex\r\n var dataIndex = '';\r\n var tableDataFlat = treeTable.getData(options.id, true);\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[idKey] === id) {\r\n dataIndex = item1[LAY_DATA_INDEX];\r\n return true;\r\n }\r\n })\r\n if (!dataIndex) {\r\n return;\r\n }\r\n\r\n // 用 index\r\n return that.getNodeByIndex(dataIndex);\r\n }\r\n\r\n // 通过 index 获取节点数据\r\n Class.prototype.getNodeDataByIndex = function (index, clone, newValue) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableCache = table.cache[tableId];\r\n\r\n // 获取当前行中的数据\r\n var dataCache = tableCache[index];\r\n\r\n // 若非删除操作,则返回合并后的数据\r\n if (newValue !== 'delete' && dataCache) {\r\n $.extend(dataCache, newValue);\r\n return clone ? $.extend({}, dataCache) : dataCache;\r\n }\r\n\r\n // 删除操作\r\n var dataRet = tableCache;\r\n var indexArr = String(index).split('-');\r\n\r\n // if (options.url || indexArr.length > 1) tableCache = null // 只有在删除根节点的时候才需要处理\r\n\r\n // 根据 index 进行数据处理\r\n for (var i = 0, childrenKey = treeOptions.customName.children; i < indexArr.length; i++) {\r\n if (newValue && i === indexArr.length - 1) {\r\n if (newValue === 'delete') { // 删除并返回当前数据\r\n // 同步 cache --- 此段代码注释缘由:data 属性模式造成数据重复执行 splice (@Gitee: #I7Z0A/I82E2S)\r\n /*if (tableCache) {\r\n layui.each(tableCache, function (i1, item1) {\r\n if (item1[LAY_DATA_INDEX] === index) {\r\n tableCache.splice(i1, 1);\r\n return true;\r\n }\r\n })\r\n }*/\r\n return (i ? dataRet[childrenKey] : dataRet).splice(indexArr[i], 1)[0];\r\n } else { // 更新值\r\n $.extend((i ? dataRet[childrenKey] : dataRet)[indexArr[i]], newValue);\r\n }\r\n }\r\n dataRet = i ? dataRet[childrenKey][indexArr[i]] : dataRet[indexArr[i]];\r\n }\r\n return clone ? $.extend({}, dataRet) : dataRet;\r\n }\r\n\r\n treeTable.getNodeDataByIndex = function (id, index) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n return that.getNodeDataByIndex(index, true);\r\n }\r\n\r\n // 判断是否是父节点\r\n var checkIsParent = function (data, isParentKey, childrenKey) {\r\n isParentKey = isParentKey || 'isParent';\r\n childrenKey = childrenKey || 'children';\r\n layui.each(data, function (i1, item1) {\r\n if (!(isParentKey in item1)) {\r\n item1[isParentKey] = !!(item1[childrenKey] && item1[childrenKey].length);\r\n checkIsParent(item1[childrenKey]);\r\n }\r\n })\r\n }\r\n\r\n Class.prototype.initData = function (data, parentIndex) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n\r\n data = data || that.getTableData();\r\n\r\n var customName = treeOptions.customName;\r\n var isParentKey = customName.isParent;\r\n var childrenKey = customName.children;\r\n\r\n var update = function(data, parentIndex){\r\n layui.each(data, function (i1, item1) {\r\n if (!(isParentKey in item1)) {\r\n item1[isParentKey] = !!(item1[childrenKey] && item1[childrenKey].length);\r\n }\r\n item1[LAY_DATA_INDEX_HISTORY] = item1[LAY_DATA_INDEX];\r\n item1[LAY_PARENT_INDEX] = parentIndex = parentIndex || '';\r\n var dataIndex = item1[LAY_DATA_INDEX] = (parentIndex ? parentIndex + '-' : '') + i1;\r\n update(item1[childrenKey] || [], dataIndex);\r\n });\r\n }\r\n\r\n update(data, parentIndex);\r\n\r\n updateCache(tableId, childrenKey, data);\r\n\r\n return data;\r\n }\r\n\r\n // 与 tableId 有关带防抖的方法\r\n var debounceFn = (function () {\r\n var fn = {};\r\n return function (tableId, func, wait) {\r\n if (!fn[tableId]) {\r\n fn[tableId] = layui.debounce(func, wait);\r\n }\r\n return fn[tableId];\r\n }\r\n })()\r\n\r\n // 优化参数,添加一个 getNodeByIndex 方法 只传 表格id 和行 dataIndex 分几步优化 todo\r\n var expandNode = function (treeNode, expandFlag, sonSign, focus, callbackFlag) {\r\n // treeNode // 需要展开的节点\r\n var trElem = treeNode.trElem;\r\n var tableViewElem = treeNode.tableViewElem || trElem.closest(ELEM_VIEW);\r\n var tableId = treeNode.tableId || tableViewElem.attr(MOD_ID);\r\n var options = treeNode.options || table.getOptions(tableId);\r\n var dataIndex = treeNode.dataIndex || trElem.attr('lay-data-index'); // 可能出现多层\r\n var treeTableThat = getThisTable(tableId);\r\n\r\n var treeOptions = options.tree || {};\r\n var customName = treeOptions.customName || {};\r\n var isParentKey = customName.isParent;\r\n\r\n var trData = treeTableThat.getNodeDataByIndex(dataIndex);\r\n\r\n // 后续调优:对已经展开的节点进行展开和已经关闭的节点进行关闭应该做优化减少不必要的代码执行 todo\r\n var isToggle = layui.type(expandFlag) !== 'boolean';\r\n var trExpand = isToggle ? !trData[LAY_EXPAND] : expandFlag;\r\n var retValue = trData[isParentKey] ? trExpand : null;\r\n\r\n if (callbackFlag && trExpand != trData[LAY_EXPAND] && (!trData[LAY_ASYNC_STATUS] || trData[LAY_ASYNC_STATUS] === 'local')) {\r\n var beforeExpand = treeOptions.callback.beforeExpand;\r\n if (layui.type(beforeExpand) === 'function') {\r\n if (beforeExpand(tableId, trData, expandFlag) === false) {\r\n return retValue;\r\n }\r\n }\r\n }\r\n\r\n var trExpanded = trData[LAY_HAS_EXPANDED]; // 展开过,包括异步加载\r\n\r\n // 找到表格中的同类节点(需要找到lay-data-index一致的所有行)\r\n var trsElem = tableViewElem.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n var flexIconElem = trsElem.find('.layui-table-tree-flexIcon');\r\n treeTableThat.updateNodeIcon({\r\n scopeEl: trsElem,\r\n isExpand: trExpand,\r\n isParent: trData[isParentKey]\r\n });\r\n trData[LAY_EXPAND] = trExpand;\r\n var trDataId = trData[customName.id];\r\n trDataId !== undefined && (treeTableThat.status.expand[trDataId] = trExpand);\r\n if (retValue === null) {\r\n return retValue;\r\n }\r\n\r\n var childNodes = trData[customName.children] || [];\r\n // 处理子节点展示与否\r\n if (trExpand) {\r\n // 展开\r\n if (trExpanded) { // 已经展开过\r\n if (!childNodes.length) return ;//异步如果子节点没有数据情况下双点行展开所有已展开的节点问题解决\r\n trsElem.nextAll(childNodes.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).removeClass(HIDE);\r\n layui.each(childNodes, function (i1, item1) {\r\n if (!item1[isParentKey]) {\r\n return;\r\n }\r\n\r\n if (sonSign && !isToggle && !item1[LAY_EXPAND]) { // 非状态切换的情况下\r\n // 级联展开子节点\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n } else if (item1[LAY_EXPAND]) { // 初始化级联展开\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, true);\r\n }\r\n });\r\n } else {\r\n var asyncSetting = treeOptions.async || {};\r\n var asyncUrl = asyncSetting.url || options.url;\r\n if (asyncSetting.enable && trData[isParentKey] && !trData[LAY_ASYNC_STATUS]) {\r\n trData[LAY_ASYNC_STATUS] = 'loading';\r\n flexIconElem.html('');\r\n\r\n // 异步获取子节点数据成功之后处理方法\r\n var asyncSuccessFn = function (data) {\r\n trData[LAY_ASYNC_STATUS] = 'success';\r\n trData[customName.children] = data;\r\n treeTableThat.initData(trData[customName.children], trData[LAY_DATA_INDEX])\r\n expandNode(treeNode, true, isToggle ? false : sonSign, focus, callbackFlag);\r\n }\r\n\r\n var format = asyncSetting.format; // 自定义数据返回方法\r\n if (layui.type(format) === 'function') {\r\n format(trData, options, asyncSuccessFn);\r\n return retValue;\r\n }\r\n\r\n var params = {};\r\n // 参数\r\n var data = $.extend(params, asyncSetting.where || options.where);\r\n var asyncAutoParam = asyncSetting.autoParam;\r\n layui.each(asyncAutoParam, function (index, item) {\r\n var itemStr = item;\r\n var itemArr = item.split('=');\r\n data[itemArr[0].trim()] = trData[(itemArr[1] || itemArr[0]).trim()]\r\n })\r\n\r\n var asyncContentType = asyncSetting.contentType || options.contentType;\r\n if (asyncContentType && asyncContentType.indexOf(\"application/json\") == 0) { // 提交 json 格式\r\n data = JSON.stringify(data);\r\n }\r\n var asyncType = asyncSetting.method || options.method;\r\n var asyncDataType = asyncSetting.dataType || options.dataType;\r\n var asyncJsonpCallback = asyncSetting.jsonpCallback || options.jsonpCallback;\r\n var asyncHeaders = asyncSetting.headers || options.headers;\r\n var asyncParseData = asyncSetting.parseData || options.parseData;\r\n var asyncResponse = asyncSetting.response || options.response;\r\n\r\n $.ajax({\r\n type: asyncType || 'get',\r\n url: asyncUrl,\r\n contentType: asyncContentType,\r\n data: data,\r\n dataType: asyncDataType || 'json',\r\n jsonpCallback: asyncJsonpCallback,\r\n headers: asyncHeaders || {},\r\n success: function (res) {\r\n // 若有数据解析的回调,则获得其返回的数据\r\n if (typeof asyncParseData === 'function') {\r\n res = asyncParseData.call(options, res) || res;\r\n }\r\n // 检查数据格式是否符合规范\r\n if (res[asyncResponse.statusName] != asyncResponse.statusCode) {\r\n trData[LAY_ASYNC_STATUS] = 'error';\r\n // 异常处理 todo\r\n flexIconElem.html('');\r\n // 事件\r\n } else {\r\n // 正常返回\r\n asyncSuccessFn(res[asyncResponse.dataName]);\r\n }\r\n },\r\n error: function (e, msg) {\r\n trData[LAY_ASYNC_STATUS] = 'error';\r\n // 异常处理 todo\r\n typeof options.error === 'function' && options.error(e, msg);\r\n }\r\n });\r\n return retValue;\r\n }\r\n trExpanded = trData[LAY_HAS_EXPANDED] = true;\r\n if (childNodes.length) {\r\n // 判断是否需要排序\r\n if (options.initSort && (!options.url || options.autoSort)) {\r\n var initSort = options.initSort;\r\n if (initSort.type) {\r\n layui.sort(childNodes, initSort.field, initSort.type === 'desc', true);\r\n } else {\r\n // 恢复默认\r\n layui.sort(childNodes, table.config.indexName, null, true);\r\n }\r\n }\r\n treeTableThat.initData(trData[customName.children], trData[LAY_DATA_INDEX]);\r\n // 将数据通过模板得出节点的html代码\r\n var str2 = table.getTrHtml(tableId, childNodes, null, null, dataIndex);\r\n\r\n var str2Obj = {\r\n trs: $(str2.trs.join('')),\r\n trs_fixed: $(str2.trs_fixed.join('')),\r\n trs_fixed_r: $(str2.trs_fixed_r.join(''))\r\n }\r\n var dataLevel = dataIndex.split('-').length - 1;\r\n var dataLevelNew = (dataLevel || 0) + 1;\r\n layui.each(childNodes, function (childIndex, childItem) {\r\n str2Obj.trs.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n\r\n str2Obj.trs_fixed.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n\r\n str2Obj.trs_fixed_r.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n })\r\n\r\n tableViewElem.find(ELEM_MAIN).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs);\r\n tableViewElem.find(ELEM_FIXL).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs_fixed);\r\n tableViewElem.find(ELEM_FIXR).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs_fixed_r);\r\n\r\n // 初始化新增的节点中的内容\r\n treeTableThat.renderTreeTable(str2Obj.trs, dataLevelNew);\r\n\r\n if (sonSign && !isToggle) { // 非状态切换的情况下\r\n // 级联展开/关闭子节点\r\n layui.each(childNodes, function (i1, item1) {\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n })\r\n }\r\n }\r\n }\r\n } else {\r\n treeTableThat.isExpandAll = false;\r\n // 关闭\r\n if (sonSign && !isToggle) { // 非状态切换的情况下\r\n layui.each(childNodes, function (i1, item1) {\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n });\r\n tableViewElem.find(childNodes.map(function (value, index, array) { // 只隐藏直接子节点,其他由递归的处理\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).addClass(HIDE);\r\n } else {\r\n var childNodesFlat = treeTableThat.treeToFlat(childNodes, trData[customName.id], dataIndex);\r\n tableViewElem.find(childNodesFlat.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).addClass(HIDE);\r\n }\r\n }\r\n\r\n\r\n debounceFn('resize-' + tableId, function () {\r\n treeTable.resize(tableId);\r\n }, 0)();\r\n\r\n if (callbackFlag && trData[LAY_ASYNC_STATUS] !== 'loading') {\r\n var onExpand = treeOptions.callback.onExpand;\r\n layui.type(onExpand) === 'function' && onExpand(tableId, trData, trExpand);\r\n }\r\n\r\n return retValue;\r\n }\r\n\r\n /**\r\n * 展开或关闭一个节点\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {Number|String} opts.index 展开行的数据下标\r\n * @param {Boolean} [opts.expandFlag] 展开、关闭、切换\r\n * @param {Boolean} [opts.inherit] 是否级联子节点\r\n * @param {Boolean} [opts.callbackFlag] 是否触发事件\r\n * @return [{Boolean}] 状态结果\r\n * */\r\n treeTable.expandNode = function (id, opts) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n opts = opts || {};\r\n\r\n var index = opts.index;\r\n var expandFlag = opts.expandFlag;\r\n var sonSign = opts.inherit;\r\n var callbackFlag = opts.callbackFlag;\r\n\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n return expandNode({\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + index + '\"]').first()\r\n }, expandFlag, sonSign, null, callbackFlag)\r\n };\r\n\r\n /**\r\n * 展开或关闭全部节点\r\n * @param {String} id 树表id\r\n * @param {Boolean} expandFlag 展开或关闭\r\n * */\r\n treeTable.expandAll = function (id, expandFlag) {\r\n if (layui.type(expandFlag) !== 'boolean') {\r\n return hint.error('expandAll 的展开状态参数只接收true/false')\r\n }\r\n\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n that.isExpandAll = expandFlag;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableView = options.elem.next();\r\n var isParentKey = treeOptions.customName.isParent;\r\n var idKey = treeOptions.customName.id;\r\n var showFlexIconIfNotParent = treeOptions.view.showFlexIconIfNotParent;\r\n\r\n if (!expandFlag) {\r\n // 关闭所有\r\n // 将所有已经打开的节点的状态设置为关闭,\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = false;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = false);\r\n }\r\n }) // 只处理当前页,如果需要处理全部表格,需要用treeTable.updateStatus\r\n // 隐藏所有非顶层的节点\r\n tableView.find('.layui-table-box tbody tr[data-level!=\"0\"]').addClass(HIDE);\r\n\r\n tableView.find('.layui-table-tree-flexIcon').html(treeOptions.view.flexIconClose);\r\n treeOptions.view.showIcon && tableView\r\n .find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)')\r\n .html(treeOptions.view.iconClose);\r\n } else {\r\n var tableDataFlat = treeTable.getData(id, true);\r\n // 展开所有\r\n // 存在异步加载\r\n if (treeOptions.async.enable) {\r\n // 判断是否有未加载过的节点\r\n var isAllAsyncDone = true;\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[isParentKey] && !item1[LAY_ASYNC_STATUS]) {\r\n isAllAsyncDone = false;\r\n return true;\r\n }\r\n })\r\n // 有未加载过的节点\r\n if (!isAllAsyncDone) {\r\n // 逐个展开\r\n layui.each(treeTable.getData(id), function (i1, item1) {\r\n treeTable.expandNode(id, {\r\n index: item1[LAY_DATA_INDEX],\r\n expandFlag: true,\r\n inherit: true\r\n })\r\n })\r\n return;\r\n }\r\n }\r\n\r\n // 先判断是否全部打开过了\r\n var isAllExpanded = true;\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[isParentKey] && !item1[LAY_HAS_EXPANDED]) {\r\n isAllExpanded = false;\r\n return true;\r\n }\r\n })\r\n // 如果全部节点已经都打开过,就可以简单处理跟隐藏所有节点反操作\r\n if (isAllExpanded) {\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = true;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = true);\r\n }\r\n });\r\n // 显示所有子节点\r\n tableView.find('tbody tr[data-level!=\"0\"]').removeClass(HIDE);\r\n // 处理节点的图标\r\n tableView.find('.layui-table-tree-flexIcon').html(treeOptions.view.flexIconOpen);\r\n treeOptions.view.showIcon && tableView\r\n .find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)')\r\n .html(treeOptions.view.iconOpen);\r\n } else {\r\n // 如果有未打开过的父节点,将 tr 内容全部重新生成\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = true;\r\n d[LAY_HAS_EXPANDED] = true;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = true);\r\n }\r\n });\r\n if (options.initSort && options.initSort.type && options.autoSort) {\r\n return treeTable.sort(id);\r\n }\r\n var trAll = table.getTrHtml(id, tableDataFlat);\r\n\r\n var trAllObj = {\r\n trs: $(trAll.trs.join('')),\r\n trs_fixed: $(trAll.trs_fixed.join('')),\r\n trs_fixed_r: $(trAll.trs_fixed_r.join(''))\r\n }\r\n var props;\r\n layui.each(tableDataFlat, function (dataIndex, dataItem) {\r\n var dataLevel = dataItem[LAY_DATA_INDEX].split('-').length - 1;\r\n props = {\r\n 'data-index': dataItem[LAY_DATA_INDEX],\r\n 'lay-data-index': dataItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevel\r\n };\r\n trAllObj.trs.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n trAllObj.trs_fixed.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n trAllObj.trs_fixed_r.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n })\r\n layui.each(['main', 'fixed-l', 'fixed-r'], function (i, item) {\r\n tableView.find('.layui-table-' + item + ' tbody').html(trAllObj[['trs', 'trs_fixed', 'trs_fixed_r'][i]]);\r\n });\r\n that.renderTreeTable(tableView, 0, false);\r\n }\r\n }\r\n treeTable.resize(id);\r\n }\r\n\r\n /**\r\n * @typedef updateNodeIconOptions\r\n * @prop {JQuery} scopeEl - tr 元素\r\n * @prop {boolean} isExpand - 是否是展开图标\r\n * @prop {boolean} isParent - 是否是父节点图标\r\n */\r\n /**\r\n * 更新节点图标\r\n * @param {updateNodeIconOptions} opts\r\n */\r\n Class.prototype.updateNodeIcon = function(opts){\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree || {};\r\n var scopeEl = opts.scopeEl;\r\n var isExpand = opts.isExpand;\r\n var isParent = opts.isParent;\r\n\r\n // 处理折叠按钮图标\r\n var flexIconElem = scopeEl.find('.layui-table-tree-flexIcon');\r\n\r\n flexIconElem\r\n .css('visibility', isParent || treeOptions.view.showFlexIconIfNotParent ? 'visible' : 'hidden')\r\n .html(isExpand ? treeOptions.view.flexIconOpen : treeOptions.view.flexIconClose);\r\n // 处理节点图标\r\n if(treeOptions.view.showIcon){\r\n var nodeIconElem = scopeEl.find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom)');\r\n var nodeIcon = isParent \r\n ? (isExpand ? treeOptions.view.iconOpen : treeOptions.view.iconClose)\r\n : treeOptions.view.iconLeaf;\r\n\r\n nodeIconElem\r\n .toggleClass('layui-table-tree-iconLeaf', !isParent)\r\n .html(nodeIcon);\r\n }\r\n }\r\n\r\n Class.prototype.renderTreeTable = function (tableView, level, sonSign) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n !tableViewElem.hasClass(TABLE_TREE) && tableViewElem.addClass(TABLE_TREE);\r\n var tableId = options.id;\r\n var treeOptions = options.tree || {};\r\n var treeOptionsData = treeOptions.data || {};\r\n var treeOptionsView = treeOptions.view || {};\r\n var customName = treeOptions.customName || {};\r\n var isParentKey = customName.isParent;\r\n var tableFilterId = tableViewElem.attr('lay-filter');\r\n var treeTableThat = that;\r\n // var tableData = treeTableThat.getTableData();\r\n\r\n level = level || 0;\r\n\r\n if (!level) {\r\n // 初始化的表格里面没有level信息,可以作为顶层节点的判断\r\n tableViewElem.find('.layui-table-body tr:not([data-level])').attr('data-level', level);\r\n layui.each(table.cache[tableId], function (dataIndex, dataItem) {\r\n tableViewElem.find('.layui-table-main tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n tableViewElem.find('.layui-table-fixed-l tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n tableViewElem.find('.layui-table-fixed-r tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n })\r\n }\r\n\r\n var dataExpand = null; // 记录需要展开的数据\r\n var nameKey = customName.name;\r\n var indent = treeOptionsView.indent || 14;\r\n layui.each(tableView.find('td[data-field=\"' + nameKey + '\"]'), function (index, item) {\r\n item = $(item);\r\n var trElem = item.closest('tr');\r\n var itemCell = item.children('.layui-table-cell');\r\n if (itemCell.hasClass('layui-table-tree-item')) {\r\n return;\r\n }\r\n var trIndex = trElem.attr('lay-data-index');\r\n if (!trIndex) { // 排除在统计行中的节点\r\n return;\r\n }\r\n trElem = tableViewElem.find('tr[lay-data-index=\"' + trIndex + '\"]');\r\n var trData = treeTableThat.getNodeDataByIndex(trIndex);\r\n\r\n if (trData[LAY_EXPAND] && trData[isParentKey]) {\r\n // 需要展开\r\n dataExpand = dataExpand || {};\r\n dataExpand[trIndex] = true;\r\n }\r\n if (trData[LAY_CHECKBOX_HALF]) {\r\n trElem.find('input[type=\"checkbox\"][name=\"layTableCheckbox\"]').prop('indeterminate', true);\r\n }\r\n\r\n var htmlTemp = itemCell.html();\r\n itemCell = trElem.find('td[data-field=\"' + nameKey + '\"]>div.layui-table-cell');\r\n itemCell.addClass('layui-table-tree-item');\r\n var flexIconElem = itemCell\r\n .html(['
          ',\r\n trData[LAY_EXPAND] ? treeOptionsView.flexIconOpen : treeOptionsView.flexIconClose, // 折叠图标\r\n '
          ',\r\n treeOptionsView.showIcon ? '
          ' +\r\n (that.normalizedIcon(trData[customName.icon]) || treeOptionsView.icon ||\r\n (trData[isParentKey] ?\r\n (trData[LAY_EXPAND] ? treeOptionsView.iconOpen : treeOptionsView.iconClose) :\r\n treeOptionsView.iconLeaf) ||\r\n '') + '
          ' : '', // 区分父子节点\r\n htmlTemp].join('')) // 图标要可定制\r\n .find('.layui-table-tree-flexIcon');\r\n\r\n // 添加展开按钮的事件\r\n flexIconElem.on('click', function (event) {\r\n layui.stope(event);\r\n // 处理数据\r\n // var trElem = item.closest('tr');\r\n expandNode({trElem: trElem}, null, null, null, true);\r\n });\r\n });\r\n\r\n if (!level && treeOptions.view.expandAllDefault && that.isExpandAll === undefined) {\r\n return treeTable.expandAll(tableId, true); // 默认展开全部\r\n }\r\n\r\n // 当前层的数据看看是否需要展开\r\n if (sonSign !== false && dataExpand) {\r\n layui.each(dataExpand, function (index, item) {\r\n var trDefaultExpand = tableViewElem.find('tr[lay-data-index=\"' + index + '\"]');\r\n trDefaultExpand.find('.layui-table-tree-flexIcon').html(treeOptionsView.flexIconOpen);\r\n expandNode({trElem: trDefaultExpand.first()}, true);\r\n });\r\n // #1463 expandNode 中已经展开过的节点不会重新渲染\r\n debounceFn('renderTreeTable2-' + tableId, function () {\r\n form.render($('.layui-table-tree[' + MOD_ID + '=\"' + tableId + '\"]'));\r\n }, 0)();\r\n } else {\r\n debounceFn('renderTreeTable-' + tableId, function () {\r\n options.hasNumberCol && formatNumber(that);\r\n form.render($('.layui-table-tree[' + MOD_ID + '=\"' + tableId + '\"]'));\r\n }, 0)();\r\n }\r\n }\r\n\r\n var formatNumber = function (that) {\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n\r\n var num = 0;\r\n var trMain = tableViewElem.find('.layui-table-main tbody tr');\r\n var trFixedL = tableViewElem.find('.layui-table-fixed-l tbody tr');\r\n var trFixedR = tableViewElem.find('.layui-table-fixed-r tbody tr');\r\n layui.each(that.treeToFlat(table.cache[options.id]), function (i1, item1) {\r\n if (item1['LAY_HIDE']) return;\r\n var itemData = that.getNodeDataByIndex(item1[LAY_DATA_INDEX]);\r\n itemData['LAY_NUM'] = ++num;\r\n trMain.eq(i1).find('.laytable-cell-numbers').html(num);\r\n trFixedL.eq(i1).find('.laytable-cell-numbers').html(num);\r\n trFixedR.eq(i1).find('.laytable-cell-numbers').html(num);\r\n })\r\n }\r\n\r\n // 树表渲染\r\n Class.prototype.render = function (type) {\r\n var that = this;\r\n that.tableIns = table[type === 'reloadData' ? 'reloadData' : 'reload'](that.tableIns.config.id, $.extend(true, {}, that.config));\r\n that.config = that.tableIns.config;\r\n };\r\n\r\n // 表格重载\r\n Class.prototype.reload = function (options, deep, type) {\r\n var that = this;\r\n\r\n options = options || {};\r\n delete that.haveInit;\r\n\r\n // 防止数组深度合并\r\n layui.each(options, function (key, item) {\r\n if (layui.type(item) === 'array') delete that.config[key];\r\n });\r\n\r\n // 根据需要处理options中的一些参数\r\n updateOptions(that.getOptions().id, options, type || true);\r\n\r\n // 对参数进行深度或浅扩展\r\n that.config = $.extend(deep, {}, that.config, options);\r\n\r\n // 执行渲染\r\n that.render(type);\r\n };\r\n\r\n // 仅重载数据\r\n treeTable.reloadData = function () {\r\n var args = $.extend(true, [], arguments);\r\n args[3] = 'reloadData';\r\n\r\n return treeTable.reload.apply(null, args);\r\n };\r\n\r\n var updateStatus = function (data, statusObj, childrenKey, notCascade) {\r\n var dataUpdated = [];\r\n layui.each(data, function (i1, item1) {\r\n if (layui.type(statusObj) === 'function') {\r\n statusObj(item1);\r\n } else {\r\n $.extend(item1, statusObj);\r\n }\r\n dataUpdated.push($.extend({}, item1));\r\n notCascade || (dataUpdated = dataUpdated.concat(updateStatus(item1[childrenKey], statusObj, childrenKey, notCascade)));\r\n });\r\n return dataUpdated;\r\n }\r\n\r\n Class.prototype.updateStatus = function (data, statusObj, notCascade) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n data = data || table.cache[options.id];\r\n\r\n return updateStatus(data, statusObj, treeOptions.customName.children, notCascade);\r\n }\r\n\r\n Class.prototype.getTableData = function () {\r\n var that = this;\r\n var options = that.getOptions();\r\n // return options.url ? table.cache[options.id] : options.data;\r\n return table.cache[options.id];\r\n }\r\n\r\n treeTable.updateStatus = function (id, statusObj, data) {\r\n var that = getThisTable(id);\r\n var options = that.getOptions();\r\n if (!data) {\r\n if (options.url) {\r\n data = table.cache[options.id];\r\n } else {\r\n data = options.data;\r\n }\r\n }\r\n return that.updateStatus(data, statusObj);\r\n }\r\n\r\n treeTable.sort = function (id) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n\r\n var tableData = treeTable.getData(id);\r\n var customName = treeOptions.customName;\r\n var childrenKey = customName.children;\r\n\r\n // 只和同级节点排序\r\n var sort = function(data, field, type){\r\n layui.sort(data, field, type, true);\r\n layui.each(data, function(rowIndex, trData){\r\n sort(trData[childrenKey] || [], field, type);\r\n })\r\n }\r\n\r\n if (options.autoSort) {\r\n var initSort = options.initSort;\r\n if (initSort.type) {\r\n sort(tableData, initSort.field, initSort.type === 'desc');\r\n } else {\r\n // 恢复默认\r\n sort(tableData, table.config.indexName, null);\r\n }\r\n // 更新缓存中数据的顺序\r\n table.cache[id] = tableData;\r\n // 重新初始化缓存数据\r\n that.initData(tableData);\r\n treeTable.renderData(id);\r\n }\r\n }\r\n\r\n // 处理事件\r\n var updateObjParams = function (obj) {\r\n var tableId = obj.config.id;\r\n var tableThat = getThisTable(tableId);\r\n var trData = obj.data = treeTable.getNodeDataByIndex(tableId, obj.index); // 克隆的\r\n var trIndex = trData[LAY_DATA_INDEX];\r\n obj.dataIndex = trIndex;\r\n\r\n // 处理update方法\r\n var updateFn = obj.update;\r\n obj.update = function () {\r\n var updateThat = this;\r\n var args = arguments;\r\n $.extend(tableThat.getNodeDataByIndex(trIndex), args[0]);\r\n var ret = updateFn.apply(updateThat, args); // 主要负责更新节点内容\r\n var nameKey = obj.config.tree.customName.name;\r\n nameKey in args[0] && obj.tr.find('td[data-field=\"' + nameKey + '\"]').children('div.layui-table-cell').removeClass('layui-table-tree-item');\r\n tableThat.renderTreeTable(obj.tr, obj.tr.attr('data-level'), false);\r\n return ret;\r\n }\r\n\r\n // 处理del方法\r\n obj.del = function () {\r\n treeTable.removeNode(tableId, trData);\r\n }\r\n\r\n // 处理setRowChecked\r\n obj.setRowChecked = function (checked) {\r\n treeTable.setRowChecked(tableId, {\r\n index: trData,\r\n checked: checked\r\n });\r\n }\r\n }\r\n\r\n // 更新数据\r\n treeTable.updateNode = function (id, index, newNode) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableView = options.elem.next();\r\n var trElem = tableView.find('tr[lay-data-index=\"' + index + '\"]');\r\n var trIndex = trElem.attr('data-index');\r\n var trLevel = trElem.attr('data-level')\r\n\r\n if (!newNode) {\r\n return;\r\n }\r\n // 更新值\r\n var newNodeTemp = that.getNodeDataByIndex(index, false, newNode);\r\n // 获取新的tr替换\r\n var trNew = table.getTrHtml(id, [newNodeTemp]);\r\n // 重新渲染tr\r\n layui.each(['main', 'fixed-l', 'fixed-r'], function (i, item) {\r\n tableView.find('.layui-table-' + item + ' tbody tr[lay-data-index=\"' + index + '\"]').replaceWith($(trNew[['trs', 'trs_fixed', 'trs_fixed_r'][i]].join('')).attr({\r\n 'data-index': trIndex,\r\n 'lay-data-index': index,\r\n 'data-level': trLevel\r\n }).data('index', trIndex));\r\n });\r\n that.renderTreeTable(tableView.find('tr[lay-data-index=\"' + index + '\"]'), trLevel);\r\n }\r\n\r\n // 删除数据\r\n // _keepParent 暂时为私有参数,仅供内部使用\r\n treeTable.removeNode = function (id, node, _keepParent) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var isParentKey = treeOptions.customName.isParent;\r\n var childrenKey = treeOptions.customName.children;\r\n var tableView = options.elem.next();\r\n var delNode;\r\n var indexArr = [];\r\n var tableCache = table.cache[id];\r\n delNode = that.getNodeDataByIndex(layui.type(node) === 'string' ? node : node[LAY_DATA_INDEX], false, 'delete');\r\n var nodeP = that.getNodeDataByIndex(delNode[LAY_PARENT_INDEX]);\r\n that.updateCheckStatus(nodeP);\r\n var delNodesFlat = that.treeToFlat([delNode], delNode[treeOptions.customName.pid], delNode[LAY_PARENT_INDEX]);\r\n layui.each(delNodesFlat, function (i2, delNode) {\r\n var delNodeDataIndex = delNode[LAY_DATA_INDEX];\r\n indexArr.push('tr[lay-data-index=\"' + delNodeDataIndex + '\"]');\r\n // 删除临时 key\r\n if(delNodeDataIndex.indexOf('-') !== -1){\r\n delete tableCache[delNodeDataIndex]; \r\n }\r\n })\r\n\r\n tableView.find(indexArr.join(',')).remove(); // 删除行\r\n\r\n var deleteCacheKey = function(){\r\n for (var key in tableCache) {\r\n // 根节点 getNodeDataByIndex 内部已处理\r\n if(key.indexOf('-') !== -1){\r\n // L93 updateCache() 中,cacheKey 取自 rowData 中的 LAY_DATA_INDEX,\r\n // 两者不同说明当前 cacheKey 引用的 rowData 已被更新\r\n if(key !== tableCache[key][LAY_DATA_INDEX]){\r\n delete tableCache[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 重新整理数据\r\n var tableData = that.initData();\r\n deleteCacheKey();\r\n // index发生变化需要更新页面tr中对应的lay-data-index 新增和删除都要注意数据结构变动之后的index问题\r\n layui.each(that.treeToFlat(tableData), function (i3, item3) {\r\n if (item3[LAY_DATA_INDEX_HISTORY] && item3[LAY_DATA_INDEX_HISTORY] !== item3[LAY_DATA_INDEX]) {\r\n tableView.find('tr[lay-data-index=\"' + item3[LAY_DATA_INDEX_HISTORY] + '\"]').attr({\r\n 'data-index': item3[LAY_DATA_INDEX],\r\n 'lay-data-index': item3[LAY_DATA_INDEX],\r\n }).data('index', item3[LAY_DATA_INDEX]);\r\n // item3[LAY_DATA_INDEX_HISTORY] = item3[LAY_DATA_INDEX]\r\n }\r\n });\r\n // 重新更新顶层节点的data-index;\r\n layui.each(tableCache, function (i4, item4) {\r\n tableView.find('tr[data-level=\"0\"][lay-data-index=\"' + item4[LAY_DATA_INDEX] + '\"]')\r\n .attr('data-index', i4)\r\n .data('index', i4);\r\n })\r\n options.hasNumberCol && formatNumber(that);\r\n // 更新父节点状态\r\n if(nodeP){\r\n var trEl = tableView.find('tr[lay-data-index=\"' + nodeP[LAY_DATA_INDEX] + '\"]');\r\n\r\n if(!_keepParent){\r\n nodeP[isParentKey] = !!(nodeP[childrenKey] && nodeP[childrenKey].length);\r\n }\r\n\r\n that.updateNodeIcon({\r\n scopeEl: trEl,\r\n isExpand: nodeP[LAY_EXPAND],\r\n isParent: nodeP[isParentKey],\r\n }); \r\n }\r\n\r\n // 重新适配尺寸\r\n treeTable.resize(id);\r\n }\r\n\r\n /**\r\n * 新增数据节点\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {String|Number} opts.parentIndex 指定的父节点,如果增加根节点,请设置 parentIndex 为 null 即可\r\n * @param {Number} opts.index 新节点插入的位置(从 0 开始)index = -1(默认) 时,插入到最后\r\n * @param {Object|Array} opts.data 新增的节点,单个或者多个\r\n * @param {Boolean} opts.focus 新增的节点,单个或者多个\r\n * @return {Array} 新增的节点\r\n * */\r\n treeTable.addNodes = function (id, opts) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableViewElem = options.elem.next();\r\n var checkName = table.config.checkName;\r\n\r\n opts = opts || {};\r\n\r\n var parentIndex = opts.parentIndex;\r\n var index = opts.index;\r\n var newNodes = opts.data;\r\n var focus = opts.focus;\r\n\r\n parentIndex = layui.type(parentIndex) === 'number' ? parentIndex.toString() : parentIndex;\r\n var parentNode = parentIndex ? that.getNodeDataByIndex(parentIndex) : null;\r\n index = layui.type(index) === 'number' ? index : -1;\r\n\r\n // 添加数据\r\n newNodes = $.extend(true, [], (layui.isArray(newNodes) ? newNodes : [newNodes]));\r\n\r\n // 若未传入 LAY_CHECKED 属性,则继承父节点的 checked 状态\r\n layui.each(newNodes, function(i, item){\r\n if(!(checkName in item) && parentNode){\r\n item[checkName] = parentNode[checkName];\r\n }\r\n })\r\n\r\n var tableData = that.getTableData(), dataAfter;\r\n if (!parentNode) {\r\n // 添加到根节点\r\n dataAfter = table.cache[id].splice(index === -1 ? table.cache[id].length : index);\r\n table.cache[id] = table.cache[id].concat(newNodes, dataAfter);\r\n if (!options.url) {\r\n // 静态data模式\r\n if (!options.page) {\r\n options.data = table.cache[id];\r\n } else {\r\n var pageOptions = options.page;\r\n options.data.splice.apply(options.data, [pageOptions.limit * (pageOptions.curr - 1), pageOptions.limit].concat(table.cache[id]))\r\n }\r\n }\r\n // 将新节点添加到页面\r\n tableData = that.initData();\r\n\r\n if (tableViewElem.find('.layui-none').length) {\r\n table.renderData(id);\r\n return newNodes;\r\n }\r\n\r\n var newNodesHtml = table.getTrHtml(id, newNodes);\r\n var newNodesHtmlObj = {\r\n trs: $(newNodesHtml.trs.join('')),\r\n trs_fixed: $(newNodesHtml.trs_fixed.join('')),\r\n trs_fixed_r: $(newNodesHtml.trs_fixed_r.join(''))\r\n }\r\n\r\n var attrs = {};\r\n layui.each(newNodes, function (newNodeIndex, newNodeItem) {\r\n attrs = {\r\n 'data-index': newNodeItem[LAY_DATA_INDEX],\r\n 'lay-data-index': newNodeItem[LAY_DATA_INDEX],\r\n 'data-level': '0'\r\n };\r\n newNodesHtmlObj.trs.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n newNodesHtmlObj.trs_fixed.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n newNodesHtmlObj.trs_fixed_r.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n })\r\n var trIndexPrev = parseInt(newNodes[0][LAY_DATA_INDEX]) - 1;\r\n var tableViewElemMAIN = tableViewElem.find(ELEM_MAIN);\r\n var tableViewElemFIXL = tableViewElem.find(ELEM_FIXL);\r\n var tableViewElemFIXR = tableViewElem.find(ELEM_FIXR);\r\n if (trIndexPrev === -1) {\r\n // 插入到开头\r\n var hasTr = tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"0\"]')[0];\r\n if(hasTr){\r\n tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs_fixed_r);\r\n }else{\r\n tableViewElemMAIN.find('tbody').prepend(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tbody').prepend(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tbody').prepend(newNodesHtmlObj.trs_fixed_r);\r\n }\r\n } else {\r\n if (index === -1) {\r\n // 追加到最后\r\n tableViewElemMAIN.find('tbody').append(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tbody').append(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tbody').append(newNodesHtmlObj.trs_fixed_r);\r\n } else {\r\n var trIndexNext = dataAfter[0][LAY_DATA_INDEX_HISTORY];\r\n tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs_fixed_r);\r\n }\r\n\r\n }\r\n\r\n // 重新更新顶层节点的data-index;\r\n layui.each(table.cache[id], function (i4, item4) {\r\n tableViewElem.find('tr[data-level=\"0\"][lay-data-index=\"' + item4[LAY_DATA_INDEX] + '\"]')\r\n .attr('data-index', i4)\r\n .data('index', i4);\r\n })\r\n\r\n that.renderTreeTable(tableViewElem.find(newNodes.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')));\r\n } else {\r\n var isParentKey = treeOptions.customName.isParent;\r\n var childKey = treeOptions.customName.children;\r\n\r\n parentNode[isParentKey] = true;\r\n var childrenNodes = parentNode[childKey];\r\n if (!childrenNodes) {\r\n childrenNodes = parentNode[childKey] = newNodes;\r\n } else {\r\n dataAfter = childrenNodes.splice(index === -1 ? childrenNodes.length : index);\r\n childrenNodes = parentNode[childKey] = childrenNodes.concat(newNodes, dataAfter);\r\n }\r\n // 删除已经存在的同级节点以及他们的子节点,并且把中间节点的已展开过的状态设置为false\r\n that.updateStatus(childrenNodes, function (d) {\r\n if (d[isParentKey] || treeOptions.view.showFlexIconIfNotParent) {\r\n d[LAY_HAS_EXPANDED] = false;\r\n }\r\n });\r\n var childrenNodesFlat = that.treeToFlat(childrenNodes);\r\n tableViewElem.find(childrenNodesFlat.map(function (value) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).remove();\r\n\r\n tableData = that.initData();\r\n // 去掉父节点的已经展开过的状态,重新执行一次展开的方法\r\n parentNode[LAY_HAS_EXPANDED] = false;\r\n parentNode[LAY_ASYNC_STATUS] = 'local'; // 转为本地数据,应该规定异步加载子节点的时候addNodes的规则\r\n expandNode({trElem: tableViewElem.find('tr[lay-data-index=\"' + parentIndex + '\"]')}, true)\r\n }\r\n that.updateCheckStatus(parentNode);\r\n // 更新父节点图标状态\r\n if(parentNode){\r\n var trEl = tableViewElem.find('tr[lay-data-index=\"' + parentNode[LAY_DATA_INDEX] + '\"]');\r\n that.updateNodeIcon({\r\n scopeEl: trEl,\r\n isExpand: parentNode[LAY_EXPAND],\r\n isParent: parentNode[isParentKey],\r\n }); \r\n }\r\n treeTable.resize(id);\r\n if (focus) {\r\n // 滚动到第一个新增的节点\r\n tableViewElem.find(ELEM_MAIN).find('tr[lay-data-index=\"' + newNodes[0][LAY_DATA_INDEX] + '\"]').get(0).scrollIntoViewIfNeeded();\r\n }\r\n\r\n return newNodes;\r\n }\r\n\r\n // 获取表格选中状态\r\n treeTable.checkStatus = function (id, includeHalfCheck) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var checkName = table.config.checkName;\r\n\r\n // 需要区分单双选\r\n var tableData = treeTable.getData(id, true);\r\n var checkedData = tableData.filter(function (value, index, array) {\r\n return value[checkName] || (includeHalfCheck && value[LAY_CHECKBOX_HALF]);\r\n });\r\n\r\n var isAll = true;\r\n layui.each(treeOptions.data.cascade === 'all' ? table.cache[id] : treeTable.getData(id, true), function (i1, item1) {\r\n if (!item1[checkName]) {\r\n isAll = false;\r\n return true;\r\n }\r\n })\r\n\r\n return {\r\n data: checkedData,\r\n isAll: isAll\r\n }\r\n }\r\n\r\n // 排序之后重新渲染成树表\r\n treeTable.on('sort', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n treeTable.sort(tableId);\r\n }\r\n });\r\n\r\n // 行点击\r\n treeTable.on('row', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // 行双击\r\n treeTable.on('rowDouble', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n\r\n var treeOptions = options.tree || {};\r\n if (treeOptions.view.dblClickExpand) {\r\n expandNode({trElem: obj.tr.first()}, null, null, null, true);\r\n }\r\n }\r\n })\r\n\r\n // 菜单\r\n treeTable.on('rowContextmenu', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // tr中带lay-event节点点击\r\n treeTable.on('tool', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // 行内编辑\r\n treeTable.on('edit', function (obj) {\r\n // 如果编辑涉及到关键的name字段需要重新更新一下tr节点\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n if (obj.field === options.tree.customName.name) {\r\n var updateData = {};\r\n updateData[obj.field] = obj.value;\r\n obj.update(updateData); // 通过update调用执行tr节点的更新\r\n }\r\n }\r\n });\r\n\r\n // 单选\r\n treeTable.on('radio', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n var that = getThisTable(tableId);\r\n updateObjParams(obj);\r\n checkNode.call(that, obj.tr, obj.checked)\r\n }\r\n })\r\n\r\n // 设置或取消行选中样式\r\n Class.prototype.setRowCheckedClass = function(tr, checked){\r\n var that = this;\r\n var options = that.getOptions();\r\n\r\n var index = tr.data('index');\r\n var tableViewElem = options.elem.next();\r\n \r\n tr[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 主体行\r\n\r\n // 右侧固定行\r\n tr.each(function(){\r\n var index = $(this).data('index');\r\n var trFixedR = tableViewElem.find('.layui-table-fixed-r tbody tr[data-index=\"'+ index +'\"]');\r\n trFixedR[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED);\r\n });\r\n };\r\n\r\n // 更新表格的复选框状态\r\n Class.prototype.updateCheckStatus = function (dataP, checked) {\r\n var that = this;\r\n var options = that.getOptions();\r\n if (!options.hasChecboxCol) {\r\n return false; // 如果没有复选列则不需要更新状态\r\n }\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableView = options.elem.next();\r\n\r\n var checkName = table.config.checkName;\r\n\r\n var cascade = treeOptions.data.cascade;\r\n var isCascadeParent = cascade === 'all' || cascade === 'parent';\r\n\r\n // 如有必要更新父节点们的状态\r\n if (isCascadeParent && dataP) {\r\n var trsP = that.updateParentCheckStatus(dataP, layui.type(checked) === 'boolean' ? checked : null);\r\n layui.each(trsP, function (indexP, itemP) {\r\n var checkboxElem = tableView.find('tr[lay-data-index=\"' + itemP[LAY_DATA_INDEX] + '\"] input[name=\"layTableCheckbox\"]:not(:disabled)');\r\n var checked = itemP[checkName];\r\n\r\n // 标记父节点行背景色\r\n that.setRowCheckedClass(checkboxElem.closest('tr'), checked);\r\n \r\n // 设置原始复选框 checked 属性值并渲染\r\n form.render(checkboxElem.prop({\r\n checked: checked,\r\n indeterminate: itemP[LAY_CHECKBOX_HALF]\r\n }))\r\n })\r\n }\r\n\r\n // 更新全选的状态\r\n var isAll = true;\r\n var isIndeterminate = false;\r\n var data = treeOptions.data.cascade === 'all' ? table.cache[tableId] : treeTable.getData(tableId, true);\r\n data = data.filter(function (item) {\r\n return !item[options.disabledName];\r\n });\r\n\r\n if(data.length > 0){\r\n layui.each(data, function (i1, item1) {\r\n if (item1[checkName] || item1[LAY_CHECKBOX_HALF]) {\r\n isIndeterminate = true;\r\n }\r\n if (!item1[checkName]) {\r\n isAll = false;\r\n }\r\n if (isIndeterminate && !isAll) {\r\n return true;\r\n }\r\n })\r\n }else{\r\n isAll = false;\r\n }\r\n \r\n isIndeterminate = isIndeterminate && !isAll;\r\n form.render(tableView.find('input[name=\"layTableCheckbox\"][lay-filter=\"layTableAllChoose\"]').prop({\r\n 'checked': isAll,\r\n indeterminate: isIndeterminate\r\n }));\r\n\r\n return isAll\r\n }\r\n\r\n // 更新父节点的选中状态\r\n Class.prototype.updateParentCheckStatus = function (dataP, checked) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var checkName = table.config.checkName;\r\n var childrenKey = treeOptions.customName.children;\r\n\r\n var dataRet = [];\r\n dataP[LAY_CHECKBOX_HALF] = false; // 先设置为非半选,是否为半选又下面逻辑判断\r\n if (checked === true) {\r\n // 为真需要判断子节点的情况\r\n if (!dataP[childrenKey].length) {\r\n checked = false;\r\n } else {\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (!item[checkName]) { // 只要有一个子节点为false\r\n checked = false;\r\n dataP[LAY_CHECKBOX_HALF] = true;\r\n return true; // 跳出循环\r\n }\r\n });\r\n }\r\n } else if (checked === false) {\r\n // 判断是否为半选\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (item[checkName] || item[LAY_CHECKBOX_HALF]) { // 只要有一个子节点为选中或者半选状态\r\n dataP[LAY_CHECKBOX_HALF] = true;\r\n return true;\r\n }\r\n });\r\n } else {\r\n // 状态不确定的情况下根据子节点的信息\r\n checked = false;\r\n var checkedNum = 0;\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (item[checkName]) {\r\n checkedNum++;\r\n }\r\n });\r\n checked = dataP[childrenKey].length ? dataP[childrenKey].length === checkedNum : dataP[checkName]; // 如果没有子节点保留原来的状态;\r\n dataP[LAY_CHECKBOX_HALF] = checked ? false : checkedNum > 0;\r\n }\r\n dataP[checkName] = checked;\r\n dataRet.push($.extend({}, dataP));\r\n if (dataP[LAY_PARENT_INDEX]) {\r\n dataRet = dataRet.concat(that.updateParentCheckStatus(table.cache[tableId][dataP[LAY_PARENT_INDEX]], checked));\r\n }\r\n return dataRet\r\n }\r\n\r\n var checkNode = function (trElem, checked, callbackFlag) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableView = options.elem.next();\r\n var inputElem = (trElem.length ? trElem : tableView).find('.laytable-cell-radio, .laytable-cell-checkbox').children('input').last();\r\n // 判断是单选还是多选 不应该同时存在radio列和checkbox列\r\n var isRadio = inputElem.attr('type') === 'radio';\r\n\r\n if (callbackFlag) {\r\n var triggerEvent = function () {\r\n var fn = function (event) {\r\n layui.stope(event);\r\n }\r\n inputElem.parent().on('click', fn); // 添加临时的阻止冒泡事件\r\n inputElem.next().click();\r\n inputElem.parent().off('click', fn);\r\n }\r\n // 如果需要触发事件可以简单的触发对应节点的click事件\r\n if (isRadio) {\r\n // 单选只能选中或者切换其他的不能取消选中 后续看是否有支持的必要 todo\r\n if (checked && !inputElem.prop('checked')) {\r\n triggerEvent()\r\n }\r\n } else {\r\n if (layui.type(checked) === 'boolean') {\r\n if (inputElem.prop('checked') !== checked) {\r\n // 如果当前已经是想要修改的状态则不做处理\r\n triggerEvent()\r\n }\r\n } else {\r\n // 切换\r\n triggerEvent()\r\n }\r\n }\r\n } else {\r\n var trData = that.getNodeDataByIndex(trElem.attr('data-index'));\r\n var checkName = table.config.checkName;\r\n // 如果不触发事件应该有一个方法可以更新数据以及页面的节点\r\n if (isRadio) {\r\n if (!trData) {\r\n // 单选必须是一个存在的行\r\n return;\r\n }\r\n var statusChecked = {};\r\n statusChecked[checkName] = false;\r\n // that.updateStatus(null, statusChecked); // 取消其他的选中状态\r\n that.updateStatus(null, function (d) {\r\n if (d[checkName]) {\r\n var radioElem = tableView.find('tr[lay-data-index=\"' + d[LAY_DATA_INDEX] + '\"] input[type=\"radio\"][lay-type=\"layTableRadio\"]');\r\n d[checkName] = false;\r\n\r\n // 取消当前选中行背景色\r\n that.setRowCheckedClass(radioElem.closest('tr'), false);\r\n form.render(radioElem.prop('checked', false));\r\n }\r\n }); // 取消其他的选中状态\r\n trData[checkName] = checked;\r\n\r\n that.setRowCheckedClass(trElem, checked); // 标记当前选中行背景色\r\n that.setRowCheckedClass(trElem.siblings(), false); // 取消其他行背景色\r\n\r\n form.render(trElem.find('input[type=\"radio\"][lay-type=\"layTableRadio\"]').prop('checked', checked));\r\n } else {\r\n // 切换只能用到单条,全选到这一步的时候应该是一个确定的状态\r\n checked = layui.type(checked) === 'boolean' ? checked : !trData[checkName]; // 状态切换,如果遇到不可操作的节点待处理 todo\r\n // 全选或者是一个父节点,将子节点的状态同步为当前节点的状态\r\n // 处理不可操作的信息\r\n var checkedStatusFn = function (d) {\r\n if (!d[table.config.disabledName]) { // 节点不可操作的不处理\r\n d[checkName] = checked;\r\n d[LAY_CHECKBOX_HALF] = false;\r\n }\r\n }\r\n\r\n var trs = that.updateStatus(trData ? [trData] : table.cache[tableId], checkedStatusFn, trData && ['parent', 'none'].indexOf(treeOptions.data.cascade) !== -1);\r\n var checkboxElem = tableView.find(trs.map(function (value) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"] input[name=\"layTableCheckbox\"]:not(:disabled)';\r\n }).join(','));\r\n\r\n that.setRowCheckedClass(checkboxElem.closest('tr'), checked); // 标记当前选中行背景色\r\n form.render(checkboxElem.prop({checked: checked, indeterminate: false}));\r\n\r\n var trDataP;\r\n\r\n // 更新父节点以及更上层节点的状态\r\n if (trData && trData[LAY_PARENT_INDEX]) {\r\n // 找到父节点,然后判断父节点的子节点是否全部选中\r\n trDataP = that.getNodeDataByIndex(trData[LAY_PARENT_INDEX]);\r\n }\r\n\r\n return that.updateCheckStatus(trDataP, checked);\r\n }\r\n }\r\n }\r\n\r\n // 多选\r\n treeTable.on('checkbox', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n var that = getThisTable(tableId);\r\n var checked = obj.checked;\r\n updateObjParams(obj)\r\n obj.isAll = checkNode.call(that, obj.tr, checked);\r\n }\r\n })\r\n\r\n /**\r\n * 设置行选中状态\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {Object|String} opts.index 节点下标\r\n * @param {Boolean} opts.checked 选中或取消\r\n * @param {Boolean} [opts.callbackFlag] 是否触发事件回调\r\n * */\r\n treeTable.setRowChecked = function (id, opts) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var tableView = options.elem.next();\r\n\r\n opts = opts || {};\r\n\r\n var node = opts.index;\r\n var checked = opts.checked;\r\n var callbackFlag = opts.callbackFlag;\r\n\r\n var dataIndex = layui.type(node) === 'string' ? node : node[LAY_DATA_INDEX];\r\n // 判断是否在当前页面中\r\n var nodeData = that.getNodeDataByIndex(dataIndex);\r\n if (!nodeData) {\r\n // 目前只能处理当前页的数据\r\n return;\r\n }\r\n\r\n var collectNeedExpandNodeIndex = function(index){\r\n needExpandIndex.push(index);\r\n var trElem = tableView.find('tr[lay-data-index=\"' + index + '\"]');\r\n if (!trElem.length) {\r\n var nodeData = that.getNodeDataByIndex(index);\r\n var parentIndex = nodeData[LAY_PARENT_INDEX];\r\n parentIndex && collectNeedExpandNodeIndex(parentIndex);\r\n }\r\n }\r\n\r\n // 判断是否展开过\r\n var trElem = tableView.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n if (!trElem.length) {\r\n var parentIndex = nodeData[LAY_PARENT_INDEX];\r\n var needExpandIndex = [];\r\n collectNeedExpandNodeIndex(parentIndex);\r\n // 如果还没有展开没有渲染的要先渲染出来\r\n layui.each(needExpandIndex.reverse(),function(index, nodeIndex){\r\n treeTable.expandNode(id, {\r\n index: nodeIndex,\r\n expandFlag: true\r\n });\r\n })\r\n trElem = tableView.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n }\r\n checkNode.call(that, trElem, checked, callbackFlag);\r\n }\r\n\r\n treeTable.checkAllNodes = function (id, checked) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var tableView = options.elem.next();\r\n\r\n checkNode.call(that, tableView.find('tr[data-index=\"NONE\"]'), !!checked)\r\n }\r\n\r\n /**\r\n * 获得数据\r\n * @param {String} id 表格id\r\n * @param {Boolean} [isSimpleData] 是否返回平铺结构的数据\r\n * @return {Array} 表格数据\r\n * */\r\n treeTable.getData = function (id, isSimpleData) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n var tableData = [];\r\n layui.each($.extend(true, [], table.cache[id] || []), function (index, item) {\r\n // 遍历排除掉临时的数据\r\n tableData.push(item);\r\n })\r\n return isSimpleData ? that.treeToFlat(tableData) : tableData;\r\n }\r\n\r\n /**\r\n * 重新加载子节点\r\n * @param {String} id 表格id\r\n * @param {String} dataIndex 父节点的dataIndex\r\n * */\r\n treeTable.reloadAsyncNode = function (id, dataIndex) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n if (!treeOptions.async || !treeOptions.async.enable) {\r\n return;\r\n }\r\n var dataP = that.getNodeDataByIndex(dataIndex);\r\n if (!dataP) {\r\n return;\r\n }\r\n dataP[LAY_HAS_EXPANDED] = false;\r\n dataP[LAY_EXPAND] = false;\r\n dataP[LAY_ASYNC_STATUS] = false;\r\n layui.each(that.treeToFlat(dataP[treeOptions.customName.children]).reverse(), function (i1, item1) {\r\n treeTable.removeNode(id, item1[LAY_DATA_INDEX], true);\r\n })\r\n // 重新展开\r\n treeTable.expandNode(id, {\r\n index: dataIndex,\r\n expandFlag: true,\r\n callbackFlag: true,\r\n })\r\n }\r\n\r\n /**\r\n * 通过数据id获取节点对象\r\n * */\r\n treeTable.getNodeById = function (id, dataId) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n return that.getNodeById(dataId);\r\n }\r\n\r\n /**\r\n * 根据自定义规则搜索节点数据\r\n * @param {String} id 树表id\r\n * @param {Function} filter 自定义过滤器函数\r\n * @param {Object} [opts]\r\n * @param {Boolean} [opts.isSingle] 是否只找到第一个\r\n * @param {Object} [opts.parentNode] 在指定在某个父节点下的子节点中搜索\r\n * @return {Object} 节点对象\r\n * */\r\n treeTable.getNodesByFilter = function (id, filter, opts) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n var options = that.getOptions();\r\n\r\n opts = opts || {};\r\n var isSingle = opts.isSingle;\r\n var parentNode = opts.parentNode;\r\n var dataP = parentNode && parentNode.data;\r\n // dataP = dataP || table.cache[id];\r\n var nodes = that.treeToFlat(dataP ? (dataP[options.tree.customName.children] || []) : table.cache[id]).filter(filter);\r\n var nodesResult = [];\r\n layui.each(nodes, function (i1, item1) {\r\n nodesResult.push(that.getNodeByIndex(item1[LAY_DATA_INDEX]));\r\n if (isSingle) {\r\n return true;\r\n }\r\n });\r\n\r\n return nodesResult;\r\n }\r\n\r\n\r\n // 记录所有实例\r\n thisTreeTable.that = {}; // 记录所有实例对象\r\n // thisTreeTable.config = {}; // 记录所有实例配置项\r\n\r\n // 重载\r\n treeTable.reload = function (id, options, deep, type) {\r\n // deep = deep !== false; // 默认采用深拷贝\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n that.reload(options, deep, type);\r\n return thisTreeTable.call(that);\r\n };\r\n\r\n // 核心入口\r\n treeTable.render = function (options) {\r\n var inst = new Class(options);\r\n return thisTreeTable.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, treeTable);\r\n});\r\n","/**\r\n * tree 树组件\r\n */\r\n\r\nlayui.define(['form','util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var form = layui.form;\r\n var layer = layui.layer;\r\n var util = layui.util;\r\n \r\n // 模块名\r\n var MOD_NAME = 'tree';\r\n\r\n // 外部接口\r\n var tree = {\r\n config: {\r\n customName: { // 自定义 data 字段名\r\n id: 'id',\r\n title: 'title',\r\n children: 'children'\r\n }\r\n },\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id || that.index;\r\n \r\n thisModule.that[id] = that; // 记录当前实例对象\r\n thisModule.config[id] = options; // 记录当前实例配置项\r\n \r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n getChecked: function(){\r\n return that.getChecked.call(that);\r\n },\r\n setChecked: function(id){// 设置值\r\n return that.setChecked.call(that, id);\r\n }\r\n }\r\n };\r\n \r\n // 获取当前实例配置项\r\n var getThisModuleConfig = function(id){\r\n var config = thisModule.config[id];\r\n if(!config) hint.error('The ID option was not found in the '+ MOD_NAME +' instance');\r\n return config || null;\r\n }\r\n\r\n // 字符常量\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var NONE = 'layui-none';\r\n var DISABLED = 'layui-disabled';\r\n \r\n var ELEM_VIEW = 'layui-tree';\r\n var ELEM_SET = 'layui-tree-set';\r\n var ICON_CLICK = 'layui-tree-iconClick';\r\n var ICON_ADD = 'layui-icon-addition';\r\n var ICON_SUB = 'layui-icon-subtraction';\r\n var ELEM_ENTRY = 'layui-tree-entry';\r\n var ELEM_MAIN = 'layui-tree-main';\r\n var ELEM_TEXT = 'layui-tree-txt';\r\n var ELEM_PACK = 'layui-tree-pack';\r\n var ELEM_SPREAD = 'layui-tree-spread';\r\n var ELEM_LINE_SHORT = 'layui-tree-setLineShort';\r\n var ELEM_SHOW = 'layui-tree-showLine';\r\n var ELEM_EXTEND = 'layui-tree-lineExtend';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++tree.index;\r\n that.config = $.extend({}, that.config, tree.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n data: [], // 数据\r\n \r\n showCheckbox: false, // 是否显示复选框\r\n showLine: true, // 是否开启连接线\r\n accordion: false, // 是否开启手风琴模式\r\n onlyIconControl: false, // 是否仅允许节点左侧图标控制展开收缩\r\n isJump: false, // 是否允许点击节点时弹出新窗口跳转\r\n edit: false, // 是否开启节点的操作图标\r\n \r\n text: {\r\n defaultNodeName: '未命名', // 节点默认名称\r\n none: '无数据' // 数据为空时的文本提示\r\n }\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n \r\n layui.each(options, function(key, item){\r\n if(layui.type(item) === 'array') delete that.config[key];\r\n });\r\n \r\n that.config = $.extend(true, {}, that.config, options);\r\n that.render();\r\n };\r\n\r\n // 主体渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 初始化自定义字段名\r\n options.customName = $.extend({}, tree.config.customName, options.customName);\r\n \r\n that.checkids = [];\r\n\r\n var temp = $('
          ');\r\n that.tree(temp);\r\n\r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return;\r\n\r\n // 索引\r\n that.key = options.id || that.index;\r\n \r\n // 插入组件结构\r\n that.elem = temp;\r\n that.elemNone = $('
          '+ options.text.none +'
          ');\r\n othis.html(that.elem);\r\n\r\n if(that.elem.find('.layui-tree-set').length == 0){\r\n return that.elem.append(that.elemNone);\r\n };\r\n \r\n // 复选框渲染\r\n if(options.showCheckbox){\r\n that.renderForm('checkbox');\r\n };\r\n\r\n that.elem.find('.layui-tree-set').each(function(){\r\n var othis = $(this);\r\n // 最外层\r\n if(!othis.parent('.layui-tree-pack')[0]){\r\n othis.addClass('layui-tree-setHide');\r\n };\r\n\r\n // 没有下一个节点 上一层父级有延伸线\r\n if(!othis.next()[0] && othis.parents('.layui-tree-pack').eq(1).hasClass('layui-tree-lineExtend')){\r\n othis.addClass(ELEM_LINE_SHORT);\r\n };\r\n \r\n // 没有下一个节点 外层最后一个\r\n if(!othis.next()[0] && !othis.parents('.layui-tree-set').eq(0).next()[0]){\r\n othis.addClass(ELEM_LINE_SHORT);\r\n };\r\n });\r\n\r\n that.events();\r\n };\r\n \r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n form.render(type, 'LAY-tree-'+ this.index);\r\n };\r\n\r\n // 节点解析\r\n Class.prototype.tree = function(elem, children){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var data = children || options.data;\r\n\r\n // 遍历数据\r\n layui.each(data, function(index, item){\r\n var hasChild = item[customName.children] && item[customName.children].length > 0;\r\n var packDiv = $('
          ');\r\n var entryDiv = $(['
          '\r\n ,'
          '\r\n ,'
          '\r\n // 箭头\r\n ,function(){\r\n if(options.showLine){\r\n if(hasChild){\r\n return '';\r\n }else{\r\n return '';\r\n };\r\n }else{\r\n return '';\r\n };\r\n }()\r\n \r\n // 复选框\r\n ,function(){\r\n return options.showCheckbox ? '' : '';\r\n }()\r\n \r\n // 节点\r\n ,function(){\r\n if(options.isJump && item.href){\r\n return ''+ (item[customName.title] || item.label || options.text.defaultNodeName) +'';\r\n }else{\r\n return ''+ (item[customName.title] || item.label || options.text.defaultNodeName) +'';\r\n }\r\n }()\r\n ,'
          '\r\n \r\n // 节点操作图标\r\n ,function(){\r\n if(!options.edit) return '';\r\n \r\n var editIcon = {\r\n add: ''\r\n ,update: ''\r\n ,del: ''\r\n }, arr = ['
          '];\r\n \r\n if(options.edit === true){\r\n options.edit = ['update', 'del']\r\n }\r\n \r\n if(typeof options.edit === 'object'){\r\n layui.each(options.edit, function(i, val){\r\n arr.push(editIcon[val] || '')\r\n });\r\n return arr.join('') + '
          ';\r\n }\r\n }()\r\n ,'
          '].join(''));\r\n\r\n // 如果有子节点,则递归继续生成树\r\n if(hasChild){\r\n entryDiv.append(packDiv);\r\n that.tree(packDiv, item[customName.children]);\r\n };\r\n\r\n elem.append(entryDiv);\r\n \r\n // 若有前置节点,前置节点加连接线\r\n if(entryDiv.prev('.'+ELEM_SET)[0]){\r\n entryDiv.prev().children('.layui-tree-pack').addClass('layui-tree-showLine');\r\n };\r\n \r\n // 若无子节点,则父节点加延伸线\r\n if(!hasChild){\r\n entryDiv.parent('.layui-tree-pack').addClass('layui-tree-lineExtend');\r\n };\r\n\r\n // 展开节点操作\r\n that.spread(entryDiv, item);\r\n \r\n // 选择框\r\n if(options.showCheckbox){\r\n item.checked && that.checkids.push(item[customName.id]);\r\n that.checkClick(entryDiv, item);\r\n }\r\n \r\n // 操作节点\r\n options.edit && that.operate(entryDiv, item);\r\n \r\n });\r\n };\r\n\r\n // 展开节点\r\n Class.prototype.spread = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var entry = elem.children('.'+ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n var elemCheckbox = elemMain.find('input[same=\"layuiTreeCheck\"]');\r\n var elemIcon = entry.find('.'+ ICON_CLICK);\r\n var elemText = entry.find('.'+ ELEM_TEXT);\r\n var touchOpen = options.onlyIconControl ? elemIcon : elemMain; // 判断展开通过节点还是箭头图标\r\n var state = '';\r\n \r\n // 展开收缩\r\n touchOpen.on('click', function(e){\r\n var packCont = elem.children('.'+ELEM_PACK)\r\n ,iconClick = touchOpen.children('.layui-icon')[0] ? touchOpen.children('.layui-icon') : touchOpen.find('.layui-tree-icon').children('.layui-icon');\r\n\r\n // 若没有子节点\r\n if(!packCont[0]){\r\n state = 'normal';\r\n }else{\r\n if(elem.hasClass(ELEM_SPREAD)){\r\n elem.removeClass(ELEM_SPREAD);\r\n packCont.slideUp(200);\r\n iconClick.removeClass(ICON_SUB).addClass(ICON_ADD); \r\n that.updateFieldValue(item, 'spread', false);\r\n }else{\r\n elem.addClass(ELEM_SPREAD);\r\n packCont.slideDown(200);\r\n iconClick.addClass(ICON_SUB).removeClass(ICON_ADD);\r\n that.updateFieldValue(item, 'spread', true);\r\n\r\n // 是否手风琴\r\n if(options.accordion){\r\n var sibls = elem.siblings('.'+ELEM_SET);\r\n sibls.removeClass(ELEM_SPREAD);\r\n sibls.children('.'+ELEM_PACK).slideUp(200);\r\n sibls.find('.layui-tree-icon').children('.layui-icon').removeClass(ICON_SUB).addClass(ICON_ADD);\r\n };\r\n };\r\n };\r\n });\r\n \r\n // 点击回调\r\n elemText.on('click', function(){\r\n var othis = $(this);\r\n \r\n // 判断是否禁用状态\r\n if(othis.hasClass(DISABLED)) return;\r\n \r\n // 判断展开收缩状态\r\n if(elem.hasClass(ELEM_SPREAD)){\r\n state = options.onlyIconControl ? 'open' : 'close';\r\n } else {\r\n state = options.onlyIconControl ? 'close' : 'open';\r\n }\r\n\r\n // 获取选中状态\r\n if(elemCheckbox[0]){\r\n that.updateFieldValue(item, 'checked', elemCheckbox.prop('checked'));\r\n }\r\n \r\n // 点击产生的回调\r\n options.click && options.click({\r\n elem: elem,\r\n state: state,\r\n data: item\r\n });\r\n });\r\n };\r\n\r\n // 更新数据源 checked,spread 字段值\r\n Class.prototype.updateFieldValue = function(obj, field, value){\r\n if(field in obj) obj[field] = value;\r\n };\r\n \r\n // 计算复选框选中状态\r\n Class.prototype.setCheckbox = function(elem, item, elemCheckbox){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var checked = elemCheckbox.prop('checked');\r\n \r\n if(elemCheckbox.prop('disabled')) return;\r\n\r\n // 同步子节点选中状态\r\n if(typeof item[customName.children] === 'object' || elem.find('.'+ELEM_PACK)[0]){\r\n var elemCheckboxs = elem.find('.'+ ELEM_PACK).find('input[same=\"layuiTreeCheck\"]');\r\n elemCheckboxs.each(function(index){\r\n if(this.disabled) return; // 不可点击则跳过\r\n var children = item[customName.children][index];\r\n if(children) that.updateFieldValue(children, 'checked', checked);\r\n that.updateFieldValue(this, 'checked', checked);\r\n });\r\n };\r\n\r\n // 同步父节点选中状态\r\n var setParentsChecked = function(thisNodeElem){\r\n // 若无父节点,则终止递归\r\n if(!thisNodeElem.parents('.'+ ELEM_SET)[0]) return;\r\n\r\n var state;\r\n var parentPack = thisNodeElem.parent('.'+ ELEM_PACK);\r\n var parentNodeElem = parentPack.parent();\r\n var parentCheckbox = parentPack.prev().find('input[same=\"layuiTreeCheck\"]');\r\n\r\n // 如果子节点有任意一条选中,则父节点为选中状态\r\n if(checked){\r\n parentCheckbox.prop('checked', checked);\r\n } else { // 如果当前节点取消选中,则根据计算“兄弟和子孙”节点选中状态,来同步父节点选中状态\r\n parentPack.find('input[same=\"layuiTreeCheck\"]').each(function(){\r\n if(this.checked){\r\n state = true;\r\n }\r\n });\r\n \r\n // 如果兄弟子孙节点全部未选中,则父节点也应为非选中状态\r\n state || parentCheckbox.prop('checked', false);\r\n }\r\n \r\n // 向父节点递归\r\n setParentsChecked(parentNodeElem);\r\n };\r\n \r\n setParentsChecked(elem);\r\n\r\n that.renderForm('checkbox');\r\n };\r\n \r\n // 复选框选择\r\n Class.prototype.checkClick = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var entry = elem.children('.'+ ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n \r\n \r\n \r\n // 点击复选框\r\n elemMain.on('click', 'input[same=\"layuiTreeCheck\"]+', function(e){\r\n layui.stope(e); // 阻止点击节点事件\r\n\r\n var elemCheckbox = $(this).prev();\r\n var checked = elemCheckbox.prop('checked');\r\n \r\n if(elemCheckbox.prop('disabled')) return;\r\n \r\n that.setCheckbox(elem, item, elemCheckbox);\r\n that.updateFieldValue(item, 'checked', checked);\r\n\r\n // 复选框点击产生的回调\r\n options.oncheck && options.oncheck({\r\n elem: elem,\r\n checked: checked,\r\n data: item\r\n });\r\n });\r\n };\r\n\r\n // 节点操作\r\n Class.prototype.operate = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var entry = elem.children('.'+ ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n\r\n entry.children('.layui-tree-btnGroup').on('click', '.layui-icon', function(e){\r\n layui.stope(e); // 阻止节点操作\r\n\r\n var type = $(this).data(\"type\");\r\n var packCont = elem.children('.'+ELEM_PACK);\r\n var returnObj = {\r\n data: item,\r\n type: type,\r\n elem:elem\r\n };\r\n // 增加\r\n if(type == 'add'){\r\n // 若节点本身无子节点\r\n if(!packCont[0]){\r\n // 若开启连接线,更改图标样式\r\n if(options.showLine){\r\n elemMain.find('.'+ICON_CLICK).addClass('layui-tree-icon');\r\n elemMain.find('.'+ICON_CLICK).children('.layui-icon').addClass(ICON_ADD).removeClass('layui-icon-file');\r\n // 若未开启连接线,显示箭头\r\n } else {\r\n elemMain.find('.layui-tree-iconArrow').removeClass(HIDE);\r\n };\r\n // 节点添加子节点容器\r\n elem.append('
          ');\r\n };\r\n\r\n // 新增节点\r\n var key = options.operate && options.operate(returnObj);\r\n var obj = {};\r\n\r\n obj[customName.title] = options.text.defaultNodeName;\r\n obj[customName.id] = key;\r\n that.tree(elem.children('.'+ELEM_PACK), [obj]);\r\n \r\n // 放在新增后面,因为要对元素进行操作\r\n if(options.showLine){\r\n // 节点本身无子节点\r\n if(!packCont[0]){\r\n // 遍历兄弟节点,判断兄弟节点是否有子节点\r\n var siblings = elem.siblings('.'+ELEM_SET)\r\n var num = 1;\r\n var parentPack = elem.parent('.'+ELEM_PACK);\r\n\r\n layui.each(siblings, function(index, i){\r\n if(!$(i).children('.'+ELEM_PACK)[0]){\r\n num = 0;\r\n };\r\n });\r\n\r\n // 若兄弟节点都有子节点\r\n if(num == 1){\r\n // 兄弟节点添加连接线\r\n siblings.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n siblings.children('.'+ELEM_PACK).children('.'+ELEM_SET).removeClass(ELEM_LINE_SHORT);\r\n elem.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n // 父级移除延伸线\r\n parentPack.removeClass(ELEM_EXTEND);\r\n // 同层节点最后一个更改线的状态\r\n parentPack.children('.'+ELEM_SET).last().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n } else {\r\n elem.children('.'+ELEM_PACK).children('.'+ELEM_SET).addClass(ELEM_LINE_SHORT);\r\n };\r\n } else {\r\n // 添加延伸线\r\n if(!packCont.hasClass(ELEM_EXTEND)){\r\n packCont.addClass(ELEM_EXTEND);\r\n };\r\n // 子节点添加延伸线\r\n elem.find('.'+ELEM_PACK).each(function(){\r\n $(this).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n });\r\n // 如果前一个节点有延伸线\r\n if(packCont.children('.'+ELEM_SET).last().prev().hasClass(ELEM_LINE_SHORT)){\r\n packCont.children('.'+ELEM_SET).last().prev().removeClass(ELEM_LINE_SHORT);\r\n }else{\r\n // 若之前的没有,说明处于连接状态\r\n packCont.children('.'+ELEM_SET).last().removeClass(ELEM_LINE_SHORT);\r\n };\r\n // 若是最外层,要始终保持相连的状态\r\n if(!elem.parent('.'+ELEM_PACK)[0] && elem.next()[0]){\r\n packCont.children('.'+ELEM_SET).last().removeClass(ELEM_LINE_SHORT);\r\n };\r\n };\r\n };\r\n if(!options.showCheckbox) return;\r\n // 若开启复选框,同步新增节点状态\r\n if(elemMain.find('input[same=\"layuiTreeCheck\"]')[0].checked){\r\n var packLast = elem.children('.'+ELEM_PACK).children('.'+ELEM_SET).last();\r\n packLast.find('input[same=\"layuiTreeCheck\"]')[0].checked = true;\r\n };\r\n that.renderForm('checkbox');\r\n \r\n // 修改\r\n } else if(type == 'update') {\r\n var text = elemMain.children('.'+ ELEM_TEXT).html();\r\n elemMain.children('.'+ ELEM_TEXT).html('');\r\n // 添加输入框,覆盖在文字上方\r\n elemMain.append('');\r\n // 获取焦点\r\n elemMain.children('.layui-tree-editInput').val(util.unescape(text)).focus();\r\n // 嵌入文字移除输入框\r\n var getVal = function(input){\r\n var textNew = util.escape(input.val().trim());\r\n textNew = textNew ? textNew : options.text.defaultNodeName;\r\n input.remove();\r\n elemMain.children('.'+ ELEM_TEXT).html(textNew);\r\n \r\n // 同步数据\r\n returnObj.data[customName.title] = textNew;\r\n \r\n // 节点修改的回调\r\n options.operate && options.operate(returnObj);\r\n };\r\n // 失去焦点\r\n elemMain.children('.layui-tree-editInput').blur(function(){\r\n getVal($(this));\r\n });\r\n // 回车\r\n elemMain.children('.layui-tree-editInput').on('keydown', function(e){\r\n if(e.keyCode === 13){\r\n e.preventDefault();\r\n getVal($(this));\r\n };\r\n });\r\n\r\n // 删除\r\n } else {\r\n layer.confirm('确认删除该节点 \"'+ (item[customName.title] || '') +'\" 吗?', function(index){\r\n options.operate && options.operate(returnObj); // 节点删除的回调\r\n returnObj.status = 'remove'; // 标注节点删除\r\n \r\n layer.close(index);\r\n \r\n // 若删除最后一个,显示空数据提示\r\n if(!elem.prev('.'+ELEM_SET)[0] && !elem.next('.'+ELEM_SET)[0] && !elem.parent('.'+ELEM_PACK)[0]){\r\n elem.remove();\r\n that.elem.append(that.elemNone);\r\n return;\r\n };\r\n // 若有兄弟节点\r\n if(elem.siblings('.'+ELEM_SET).children('.'+ELEM_ENTRY)[0]){\r\n // 若开启复选框\r\n if(options.showCheckbox){\r\n // 若开启复选框,进行下步操作\r\n var elemDel = function(elem){\r\n // 若无父结点,则不执行\r\n if(!elem.parents('.'+ELEM_SET)[0]) return;\r\n var siblingTree = elem.siblings('.'+ELEM_SET).children('.'+ELEM_ENTRY);\r\n var parentTree = elem.parent('.'+ELEM_PACK).prev();\r\n var checkState = parentTree.find('input[same=\"layuiTreeCheck\"]')[0];\r\n var state = 1;\r\n var num = 0;\r\n\r\n // 若父节点未勾选\r\n if(checkState.checked == false){\r\n // 遍历兄弟节点\r\n siblingTree.each(function(i, item1){\r\n var input = $(item1).find('input[same=\"layuiTreeCheck\"]')[0]\r\n if(input.checked == false && !input.disabled){\r\n state = 0;\r\n };\r\n // 判断是否全为不可勾选框\r\n if(!input.disabled){\r\n num = 1;\r\n };\r\n });\r\n // 若有可勾选选择框并且已勾选\r\n if(state == 1 && num == 1){\r\n // 勾选父节点\r\n checkState.checked = true;\r\n that.renderForm('checkbox');\r\n // 向上遍历祖先节点\r\n elemDel(parentTree.parent('.'+ELEM_SET));\r\n };\r\n };\r\n };\r\n elemDel(elem);\r\n };\r\n // 若开启连接线\r\n if(options.showLine){\r\n // 遍历兄弟节点,判断兄弟节点是否有子节点\r\n var siblings = elem.siblings('.'+ELEM_SET);\r\n var num = 1;\r\n var parentPack = elem.parent('.'+ELEM_PACK);\r\n\r\n layui.each(siblings, function(index, i){\r\n if(!$(i).children('.'+ELEM_PACK)[0]){\r\n num = 0;\r\n };\r\n });\r\n // 若兄弟节点都有子节点\r\n if(num == 1){\r\n // 若节点本身无子节点\r\n if(!packCont[0]){\r\n // 父级去除延伸线,因为此时子节点里没有空节点\r\n parentPack.removeClass(ELEM_EXTEND);\r\n siblings.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n siblings.children('.'+ELEM_PACK).children('.'+ELEM_SET).removeClass(ELEM_LINE_SHORT);\r\n };\r\n // 若为最后一个节点\r\n if(!elem.next()[0]){\r\n elem.prev().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n }else{\r\n parentPack.children('.'+ELEM_SET).last().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n };\r\n // 若为最外层最后一个节点,去除前一个结点的连接线\r\n if(!elem.next()[0] && !elem.parents('.'+ELEM_SET)[1] && !elem.parents('.'+ELEM_SET).eq(0).next()[0]){\r\n elem.prev('.'+ELEM_SET).addClass(ELEM_LINE_SHORT);\r\n };\r\n }else{\r\n // 若为最后一个节点且有延伸线\r\n if(!elem.next()[0] && elem.hasClass(ELEM_LINE_SHORT)){\r\n elem.prev().addClass(ELEM_LINE_SHORT);\r\n };\r\n };\r\n };\r\n \r\n } else {\r\n // 若无兄弟节点\r\n var prevDiv = elem.parent('.'+ELEM_PACK).prev();\r\n // 若开启了连接线\r\n if(options.showLine){\r\n prevDiv.find('.'+ICON_CLICK).removeClass('layui-tree-icon');\r\n prevDiv.find('.'+ICON_CLICK).children('.layui-icon').removeClass(ICON_SUB).addClass('layui-icon-file');\r\n // 父节点所在层添加延伸线\r\n var pare = prevDiv.parents('.'+ELEM_PACK).eq(0);\r\n pare.addClass(ELEM_EXTEND);\r\n\r\n // 兄弟节点最后子节点添加延伸线\r\n pare.children('.'+ELEM_SET).each(function(){\r\n $(this).children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n });\r\n }else{\r\n // 父节点隐藏箭头\r\n prevDiv.find('.layui-tree-iconArrow').addClass(HIDE);\r\n };\r\n // 移除展开属性\r\n elem.parents('.'+ELEM_SET).eq(0).removeClass(ELEM_SPREAD);\r\n // 移除节点容器\r\n elem.parent('.'+ELEM_PACK).remove();\r\n };\r\n\r\n elem.remove();\r\n });\r\n \r\n };\r\n });\r\n };\r\n\r\n // 部分事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n var checkWarp = that.elem.find('.layui-tree-checkedFirst');\r\n \r\n // 初始选中\r\n that.setChecked(that.checkids);\r\n \r\n // 搜索\r\n that.elem.find('.layui-tree-search').on('keyup', function(){\r\n var input = $(this);\r\n var val = input.val();\r\n var pack = input.nextAll();\r\n var arr = [];\r\n\r\n // 遍历所有的值\r\n pack.find('.'+ ELEM_TEXT).each(function(){\r\n var entry = $(this).parents('.'+ELEM_ENTRY);\r\n // 若值匹配,加一个类以作标识\r\n if($(this).html().indexOf(val) != -1){\r\n arr.push($(this).parent());\r\n \r\n var select = function(div){\r\n div.addClass('layui-tree-searchShow');\r\n // 向上父节点渲染\r\n if(div.parent('.'+ELEM_PACK)[0]){\r\n select(div.parent('.'+ELEM_PACK).parent('.'+ELEM_SET));\r\n };\r\n };\r\n select(entry.parent('.'+ELEM_SET));\r\n };\r\n });\r\n\r\n // 根据标志剔除\r\n pack.find('.'+ELEM_ENTRY).each(function(){\r\n var parent = $(this).parent('.'+ELEM_SET);\r\n if(!parent.hasClass('layui-tree-searchShow')){\r\n parent.addClass(HIDE);\r\n };\r\n });\r\n if(pack.find('.layui-tree-searchShow').length == 0){\r\n that.elem.append(that.elemNone);\r\n };\r\n\r\n // 节点过滤的回调\r\n options.onsearch && options.onsearch({\r\n elem: arr\r\n });\r\n });\r\n\r\n // 还原搜索初始状态\r\n that.elem.find('.layui-tree-search').on('keydown', function(){\r\n $(this).nextAll().find('.'+ELEM_ENTRY).each(function(){\r\n var parent = $(this).parent('.'+ELEM_SET);\r\n parent.removeClass('layui-tree-searchShow '+ HIDE);\r\n });\r\n if($('.layui-tree-emptyText')[0]) $('.layui-tree-emptyText').remove();\r\n });\r\n };\r\n\r\n // 得到选中节点\r\n Class.prototype.getChecked = function(){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var checkId = [];\r\n var checkData = [];\r\n \r\n // 遍历节点找到选中索引\r\n that.elem.find('.layui-form-checked').each(function(){\r\n checkId.push($(this).prev()[0].value);\r\n });\r\n \r\n // 遍历节点\r\n var eachNodes = function(data, checkNode){\r\n layui.each(data, function(index, item){\r\n layui.each(checkId, function(index2, item2){\r\n if(item[customName.id] == item2){\r\n that.updateFieldValue(item, 'checked', true);\r\n\r\n var cloneItem = $.extend({}, item);\r\n delete cloneItem[customName.children];\r\n\r\n checkNode.push(cloneItem);\r\n \r\n if(item[customName.children]){\r\n cloneItem[customName.children] = [];\r\n eachNodes(item[customName.children], cloneItem[customName.children]);\r\n }\r\n return true\r\n }\r\n });\r\n });\r\n };\r\n\r\n eachNodes($.extend({}, options.data), checkData);\r\n \r\n return checkData;\r\n };\r\n\r\n // 设置选中节点\r\n Class.prototype.setChecked = function(checkedId){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 初始选中\r\n that.elem.find('.'+ELEM_SET).each(function(i, item){\r\n var thisId = $(this).data('id');\r\n var input = $(item).children('.'+ELEM_ENTRY).find('input[same=\"layuiTreeCheck\"]');\r\n var reInput = input.next();\r\n \r\n // 若返回数字\r\n if(typeof checkedId === 'number'){\r\n if(thisId.toString() == checkedId.toString()){\r\n if(!input[0].checked){\r\n reInput.click();\r\n };\r\n return false;\r\n };\r\n } \r\n // 若返回数组\r\n else if(typeof checkedId === 'object'){\r\n layui.each(checkedId, function(index, value){\r\n if(value.toString() == thisId.toString() && !input[0].checked){\r\n reInput.click();\r\n return true;\r\n }\r\n });\r\n };\r\n });\r\n };\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n thisModule.config = {}; // 记录所有实例配置项\r\n \r\n // 重载实例\r\n tree.reload = function(id, options){\r\n var that = thisModule.that[id];\r\n that.reload(options);\r\n \r\n return thisModule.call(that);\r\n };\r\n \r\n // 获得选中的节点数据\r\n tree.getChecked = function(id){\r\n var that = thisModule.that[id];\r\n return that.getChecked();\r\n };\r\n \r\n // 设置选中节点\r\n tree.setChecked = function(id, checkedId){\r\n var that = thisModule.that[id];\r\n return that.setChecked(checkedId);\r\n };\r\n \r\n // 核心入口\r\n tree.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, tree);\r\n})\r\n","/**\r\n * transfer 穿梭框组件\r\n */\r\n\r\nlayui.define(['laytpl', 'form'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var laytpl = layui.laytpl;\r\n var form = layui.form;\r\n \r\n // 模块名\r\n var MOD_NAME = 'transfer';\r\n\r\n // 外部接口\r\n var transfer = {\r\n config: {},\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id || that.index;\r\n \r\n thisModule.that[id] = that; // 记录当前实例对象\r\n thisModule.config[id] = options; // 记录当前实例配置项\r\n \r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n // 获取右侧数据\r\n getData: function(){\r\n return that.getData.call(that);\r\n }\r\n }\r\n };\r\n \r\n // 获取当前实例配置项\r\n var getThisModuleConfig = function(id){\r\n var config = thisModule.config[id];\r\n if(!config) hint.error('The ID option was not found in the '+ MOD_NAME +' instance');\r\n return config || null;\r\n };\r\n\r\n // 字符常量\r\n var ELEM = 'layui-transfer';\r\n var HIDE = 'layui-hide'; \r\n var DISABLED = 'layui-btn-disabled';\r\n var NONE = 'layui-none';\r\n var ELEM_BOX = 'layui-transfer-box';\r\n var ELEM_HEADER = 'layui-transfer-header';\r\n var ELEM_SEARCH = 'layui-transfer-search';\r\n var ELEM_ACTIVE = 'layui-transfer-active';\r\n var ELEM_DATA = 'layui-transfer-data';\r\n \r\n // 穿梭框模板\r\n var TPL_BOX = function(obj){\r\n obj = obj || {};\r\n return ['
          ',\r\n '
          ',\r\n '',\r\n '
          ',\r\n '{{# if(d.data.showSearch){ }}',\r\n '
          ',\r\n '',\r\n '',\r\n '
          ',\r\n '{{# } }}',\r\n '
            ',\r\n '
            '].join('');\r\n };\r\n \r\n // 主模板\r\n var TPL_MAIN = ['
            ',\r\n TPL_BOX({\r\n index: 0,\r\n checkAllName: 'layTransferLeftCheckAll'\r\n }),\r\n '
            ',\r\n '',\r\n '',\r\n '
            ',\r\n TPL_BOX({\r\n index: 1,\r\n checkAllName: 'layTransferRightCheckAll'\r\n }),\r\n '
            '].join('');\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++transfer.index;\r\n that.config = $.extend({}, that.config, transfer.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n title: ['列表一', '列表二'],\r\n width: 200,\r\n height: 360,\r\n data: [], // 数据源\r\n value: [], // 选中的数据\r\n showSearch: false, // 是否开启搜索\r\n id: '', // 唯一索引,默认自增 index\r\n text: {\r\n none: '无数据',\r\n searchNone: '无匹配数据'\r\n }\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.render();\r\n };\r\n\r\n // 渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 解析模板\r\n var thisElem = that.elem = $(laytpl(TPL_MAIN, {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n }).render({\r\n data: options,\r\n index: that.index // 索引\r\n }));\r\n \r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return;\r\n \r\n // 初始化属性\r\n options.data = options.data || [];\r\n options.value = options.value || [];\r\n \r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n that.key = options.id;\r\n \r\n // 插入组件结构\r\n othis.html(that.elem);\r\n \r\n // 各级容器\r\n that.layBox = that.elem.find('.'+ ELEM_BOX)\r\n that.layHeader = that.elem.find('.'+ ELEM_HEADER)\r\n that.laySearch = that.elem.find('.'+ ELEM_SEARCH)\r\n that.layData = thisElem.find('.'+ ELEM_DATA);\r\n that.layBtn = thisElem.find('.'+ ELEM_ACTIVE + ' .layui-btn');\r\n \r\n // 初始化尺寸\r\n that.layBox.css({\r\n width: options.width,\r\n height: options.height\r\n });\r\n that.layData.css({\r\n height: function(){\r\n var height = options.height - that.layHeader.outerHeight();\r\n if(options.showSearch){\r\n height -= that.laySearch.outerHeight();\r\n }\r\n return height - 2;\r\n }()\r\n });\r\n \r\n that.renderData(); // 渲染数据\r\n that.events(); // 事件\r\n };\r\n \r\n // 渲染数据\r\n Class.prototype.renderData = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 左右穿梭框差异数据\r\n var arr = [{\r\n checkName: 'layTransferLeftCheck',\r\n views: []\r\n }, {\r\n checkName: 'layTransferRightCheck',\r\n views: []\r\n }];\r\n \r\n // 解析格式\r\n that.parseData(function(item){ \r\n // 标注为 selected 的为右边的数据\r\n var _index = item.selected ? 1 : 0\r\n var listElem = ['
          • ',\r\n '',\r\n '
          • '].join('');\r\n // 按照 options.value 顺序排列右侧数据\r\n if(_index){\r\n layui.each(options.value, function(i, v){\r\n if(v == item.value && item.selected){\r\n arr[_index].views[i] = listElem;\r\n }\r\n });\r\n } else {\r\n arr[_index].views.push(listElem);\r\n }\r\n delete item.selected;\r\n });\r\n \r\n that.layData.eq(0).html(arr[0].views.join(''));\r\n that.layData.eq(1).html(arr[1].views.join(''));\r\n \r\n that.renderCheckBtn();\r\n };\r\n \r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n form.render(type, 'LAY-transfer-'+ this.index);\r\n };\r\n \r\n // 同步复选框和按钮状态\r\n Class.prototype.renderCheckBtn = function(obj){\r\n var that = this;\r\n var options = that.config;\r\n \r\n obj = obj || {};\r\n \r\n that.layBox.each(function(_index){\r\n var othis = $(this);\r\n var thisDataElem = othis.find('.'+ ELEM_DATA);\r\n var allElemCheckbox = othis.find('.'+ ELEM_HEADER).find('input[type=\"checkbox\"]');\r\n var listElemCheckbox = thisDataElem.find('input[type=\"checkbox\"]');\r\n \r\n // 同步复选框和按钮状态\r\n var nums = 0;\r\n var haveChecked = false;\r\n\r\n listElemCheckbox.each(function(){\r\n var isHide = $(this).data('hide');\r\n if(this.checked || this.disabled || isHide){\r\n nums++;\r\n }\r\n if(this.checked && !isHide){\r\n haveChecked = true;\r\n }\r\n });\r\n \r\n allElemCheckbox.prop('checked', haveChecked && nums === listElemCheckbox.length); // 全选复选框状态\r\n that.layBtn.eq(_index)[haveChecked ? 'removeClass' : 'addClass'](DISABLED); // 对应的按钮状态\r\n \r\n // 无数据视图\r\n if(!obj.stopNone){\r\n var isNone = thisDataElem.children('li:not(.'+ HIDE +')').length\r\n that.noneView(thisDataElem, isNone ? '' : options.text.none);\r\n }\r\n });\r\n \r\n that.renderForm('checkbox');\r\n };\r\n \r\n // 无数据视图\r\n Class.prototype.noneView = function(thisDataElem, text){\r\n var createNoneElem = $('

            '+ (text || '') +'

            ');\r\n if(thisDataElem.find('.'+ NONE)[0]){\r\n thisDataElem.find('.'+ NONE).remove();\r\n }\r\n text.replace(/\\s/g, '') && thisDataElem.append(createNoneElem);\r\n };\r\n \r\n // 同步 value 属性值\r\n Class.prototype.setValue = function(){\r\n var that = this;\r\n var options = that.config;\r\n var arr = [];\r\n\r\n that.layBox.eq(1).find('.'+ ELEM_DATA +' input[type=\"checkbox\"]').each(function(){\r\n var isHide = $(this).data('hide');\r\n isHide || arr.push(this.value);\r\n });\r\n options.value = arr;\r\n \r\n return that;\r\n };\r\n\r\n // 解析数据\r\n Class.prototype.parseData = function(callback){\r\n var that = this;\r\n var options = that.config;\r\n var newData = [];\r\n \r\n layui.each(options.data, function(index, item){\r\n // 解析格式\r\n item = (typeof options.parseData === 'function' \r\n ? options.parseData(item) \r\n : item) || item;\r\n \r\n newData.push(item = $.extend({}, item))\r\n \r\n layui.each(options.value, function(index2, item2){\r\n if(item2 == item.value){\r\n item.selected = true;\r\n }\r\n });\r\n callback && callback(item);\r\n });\r\n \r\n options.data = newData;\r\n return that;\r\n };\r\n \r\n // 获得右侧面板数据\r\n Class.prototype.getData = function(value){\r\n var that = this;\r\n var options = that.config;\r\n var selectedData = [];\r\n \r\n that.setValue();\r\n \r\n layui.each(value || options.value, function(index, item){\r\n layui.each(options.data, function(index2, item2){\r\n delete item2.selected;\r\n if(item == item2.value){\r\n selectedData.push(item2);\r\n };\r\n });\r\n });\r\n return selectedData;\r\n };\r\n\r\n // 执行穿梭\r\n Class.prototype.transfer = function (_index, elem) {\r\n var that = this;\r\n var options = that.config;\r\n var thisBoxElem = that.layBox.eq(_index);\r\n var arr = [];\r\n\r\n if (!elem) {\r\n // 通过按钮触发找到选中的进行移动\r\n thisBoxElem.each(function(_index){\r\n var othis = $(this);\r\n var thisDataElem = othis.find('.'+ ELEM_DATA);\r\n\r\n thisDataElem.children('li').each(function(){\r\n var thisList = $(this);\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n var isHide = thisElemCheckbox.data('hide');\r\n\r\n if(thisElemCheckbox[0].checked && !isHide){\r\n thisElemCheckbox[0].checked = false;\r\n thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_DATA).append(thisList.clone());\r\n thisList.remove();\r\n\r\n // 记录当前穿梭的数据\r\n arr.push(thisElemCheckbox[0].value);\r\n }\r\n\r\n that.setValue();\r\n });\r\n });\r\n } else {\r\n // 双击单条记录移动\r\n var thisList = elem;\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n\r\n thisElemCheckbox[0].checked = false;\r\n thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_DATA).append(thisList.clone());\r\n thisList.remove();\r\n\r\n // 记录当前穿梭的数据\r\n arr.push(thisElemCheckbox[0].value);\r\n\r\n that.setValue();\r\n }\r\n\r\n that.renderCheckBtn();\r\n\r\n // 穿梭时,如果另外一个框正在搜索,则触发匹配\r\n var siblingInput = thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_SEARCH +' input')\r\n siblingInput.val() === '' || siblingInput.trigger('keyup');\r\n\r\n // 穿梭时的回调\r\n options.onchange && options.onchange(that.getData(arr), _index);\r\n }\r\n\r\n // 事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 左右复选框\r\n that.elem.on('click', 'input[lay-filter=\"layTransferCheckbox\"]+', function(){ \r\n var thisElemCheckbox = $(this).prev();\r\n var checked = thisElemCheckbox[0].checked;\r\n var thisDataElem = thisElemCheckbox.parents('.'+ ELEM_BOX).eq(0).find('.'+ ELEM_DATA);\r\n \r\n if(thisElemCheckbox[0].disabled) return;\r\n \r\n // 判断是否全选\r\n if(thisElemCheckbox.attr('lay-type') === 'all'){\r\n thisDataElem.find('input[type=\"checkbox\"]').each(function(){\r\n if(this.disabled) return;\r\n this.checked = checked;\r\n });\r\n }\r\n\r\n setTimeout(function () {\r\n that.renderCheckBtn({stopNone: true});\r\n }, 0)\r\n });\r\n\r\n // 双击穿梭\r\n that.elem.on('dblclick', '.' + ELEM_DATA + '>li', function(event){\r\n var elemThis = $(this);\r\n var thisElemCheckbox = elemThis.children('input[type=\"checkbox\"]');\r\n var thisDataElem = elemThis.parent();\r\n var thisBoxElem = thisDataElem.parent();\r\n var index = thisBoxElem.data('index');\r\n\r\n if(thisElemCheckbox[0].disabled) return;\r\n\r\n // 根据 dblclick 回调函数返回值决定是否执行穿梭 --- 2.9.3+\r\n var ret = typeof options.dblclick === 'function' ? options.dblclick({\r\n elem: elemThis,\r\n data: that.getData([thisElemCheckbox[0].value])[0],\r\n index: index\r\n }) : null;\r\n\r\n if(ret === false) return;\r\n\r\n that.transfer(index, elemThis);\r\n })\r\n\r\n // 穿梭按钮事件\r\n that.layBtn.on('click', function(){\r\n var othis = $(this);\r\n var _index = othis.data('index');\r\n\r\n if(othis.hasClass(DISABLED)) return;\r\n that.transfer(_index);\r\n });\r\n \r\n // 搜索\r\n that.laySearch.find('input').on('keyup', function(){\r\n var value = this.value;\r\n var thisDataElem = $(this).parents('.'+ ELEM_SEARCH).eq(0).siblings('.'+ ELEM_DATA);\r\n var thisListElem = thisDataElem.children('li');\r\n\r\n thisListElem.each(function(){\r\n var thisList = $(this);\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n var title = thisElemCheckbox[0].title;\r\n\r\n // 是否区分大小写\r\n if(options.showSearch !== 'cs'){\r\n title = title.toLowerCase();\r\n value = value.toLowerCase();\r\n }\r\n\r\n var isMatch = title.indexOf(value) !== -1;\r\n\r\n thisList[isMatch ? 'removeClass': 'addClass'](HIDE);\r\n thisElemCheckbox.data('hide', isMatch ? false : true);\r\n });\r\n\r\n that.renderCheckBtn();\r\n \r\n // 无匹配数据视图\r\n var isNone = thisListElem.length === thisDataElem.children('li.'+ HIDE).length;\r\n that.noneView(thisDataElem, isNone ? options.text.searchNone : '');\r\n });\r\n };\r\n \r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n thisModule.config = {}; // 记录所有实例配置项\r\n \r\n // 重载实例\r\n transfer.reload = function(id, options){\r\n var that = thisModule.that[id];\r\n that.reload(options);\r\n \r\n return thisModule.call(that);\r\n };\r\n \r\n // 获得选中的数据(右侧面板)\r\n transfer.getData = function(id){\r\n var that = thisModule.that[id];\r\n return that.getData();\r\n };\r\n\r\n // 核心入口\r\n transfer.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, transfer);\r\n});\r\n","/**\r\n * carousel 轮播模块\r\n * MIT Licensed \r\n */\r\n \r\nlayui.define(['jquery', 'lay'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n\r\n // 外部接口\r\n var carousel = {\r\n config: {}, // 全局配置项\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n \r\n // 字符常量\r\n var MOD_NAME = 'carousel';\r\n var ELEM = '.layui-carousel';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled'\r\n \r\n var ELEM_ITEM = '>*[carousel-item]>*';\r\n var ELEM_LEFT = 'layui-carousel-left';\r\n var ELEM_RIGHT = 'layui-carousel-right';\r\n var ELEM_PREV = 'layui-carousel-prev';\r\n var ELEM_NEXT = 'layui-carousel-next';\r\n var ELEM_ARROW = 'layui-carousel-arrow';\r\n var ELEM_IND = 'layui-carousel-ind';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, carousel.config, options);\r\n that.render();\r\n };\r\n \r\n // 默认配置\r\n Class.prototype.config = {\r\n width: '600px',\r\n height: '280px',\r\n full: false, // 是否全屏\r\n arrow: 'hover', // 切换箭头默认显示状态:hover/always/none\r\n indicator: 'inside', // 指示器位置:inside/outside/none\r\n autoplay: true, // 是否自动切换\r\n interval: 3000, // 自动切换的时间间隔,不能低于800ms\r\n anim: '', // 动画类型:default/updown/fade\r\n trigger: 'click', // 指示器的触发方式:click/hover\r\n index: 0 // 初始开始的索引\r\n };\r\n \r\n // 轮播渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n carousel.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n options.elem = $(options.elem);\r\n if(!options.elem[0]) return;\r\n that.elemItem = options.elem.find(ELEM_ITEM);\r\n \r\n if(options.index < 0) options.index = 0;\r\n if(options.index >= that.elemItem.length) options.index = that.elemItem.length - 1;\r\n if(options.interval < 800) options.interval = 800;\r\n\r\n // 是否全屏模式\r\n if(options.full){\r\n options.elem.css({\r\n position: 'fixed',\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 9999\r\n });\r\n } else {\r\n options.elem.css({\r\n width: options.width,\r\n height: options.height\r\n });\r\n }\r\n \r\n options.elem.attr('lay-anim', options.anim);\r\n \r\n // 初始焦点状态\r\n that.elemItem.eq(options.index).addClass(THIS);\r\n\r\n // 指示器、箭头等动作\r\n that.indicator();\r\n that.arrow();\r\n that.autoplay();\r\n\r\n if (that.elemItem.length > 1) {\r\n that.events();\r\n }\r\n };\r\n \r\n // 重置轮播\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n clearInterval(that.timer);\r\n that.config = $.extend({}, that.config, options);\r\n that.render();\r\n };\r\n \r\n // 获取上一个等待条目的索引\r\n Class.prototype.prevIndex = function(){\r\n var that = this;\r\n var options = that.config;\r\n var prevIndex = options.index - 1;\r\n\r\n if(prevIndex < 0){\r\n prevIndex = that.elemItem.length - 1;\r\n }\r\n\r\n return prevIndex;\r\n };\r\n \r\n // 获取下一个等待条目的索引\r\n Class.prototype.nextIndex = function(){\r\n var that = this;\r\n var options = that.config;\r\n var nextIndex = options.index + 1;\r\n\r\n if(nextIndex >= that.elemItem.length){\r\n nextIndex = 0;\r\n }\r\n\r\n return nextIndex;\r\n };\r\n \r\n // 索引递增\r\n Class.prototype.addIndex = function(num){\r\n var that = this;\r\n var options = that.config;\r\n \r\n num = num || 1;\r\n options.index = options.index + num;\r\n \r\n // index 不能超过轮播总数量\r\n if(options.index >= that.elemItem.length){\r\n options.index = 0;\r\n }\r\n };\r\n \r\n // 索引递减\r\n Class.prototype.subIndex = function(num){\r\n var that = this;\r\n var options = that.config;\r\n \r\n num = num || 1;\r\n options.index = options.index - num;\r\n \r\n // index 不能超过轮播总数量\r\n if(options.index < 0){\r\n options.index = that.elemItem.length - 1;\r\n }\r\n };\r\n \r\n // 自动轮播\r\n Class.prototype.autoplay = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n if(!options.autoplay) return;\r\n clearInterval(that.timer);\r\n \r\n if (itemsCount > 1) {\r\n that.timer = setInterval(function(){\r\n that.slide();\r\n }, options.interval);\r\n }\r\n };\r\n \r\n // 箭头\r\n Class.prototype.arrow = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n // 模板\r\n var tplArrow = $([\r\n '',\r\n ''\r\n ].join(''));\r\n \r\n // 预设基础属性\r\n options.elem.attr('lay-arrow', options.arrow);\r\n \r\n // 避免重复插入\r\n if(options.elem.find('.'+ELEM_ARROW)[0]){\r\n options.elem.find('.'+ELEM_ARROW).remove();\r\n }\r\n itemsCount > 1 ? options.elem.append(tplArrow) : tplArrow.remove();\r\n \r\n // 事件\r\n tplArrow.on('click', function(){\r\n var othis = $(this);\r\n var type = othis.attr('lay-type')\r\n that.slide(type);\r\n });\r\n };\r\n\r\n // 跳转到特定下标\r\n Class.prototype.goto = function(index){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(index > options.index){\r\n that.slide('add', index - options.index);\r\n } else if(index < options.index){\r\n that.slide('sub', options.index - index);\r\n }\r\n }\r\n \r\n // 指示器\r\n Class.prototype.indicator = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n // 模板\r\n var tplInd = that.elemInd = $(['
              ',\r\n function(){\r\n var li = [];\r\n layui.each(that.elemItem, function(index){\r\n li.push('');\r\n });\r\n return li.join('');\r\n }(),\r\n '
            '].join(''));\r\n \r\n // 预设基础属性\r\n options.elem.attr('lay-indicator', options.indicator);\r\n \r\n // 避免重复插入\r\n if(options.elem.find('.'+ELEM_IND)[0]){\r\n options.elem.find('.'+ELEM_IND).remove();\r\n }\r\n\r\n itemsCount > 1 ? options.elem.append(tplInd) : tplInd.remove();\r\n \r\n if(options.anim === 'updown'){\r\n tplInd.css('margin-top', -(tplInd.height()/2));\r\n }\r\n \r\n // 事件\r\n tplInd.find('li').on(options.trigger === 'hover' ? 'mouseover' : options.trigger, function(){\r\n that.goto($(this).index());\r\n });\r\n };\r\n \r\n // 滑动切换\r\n Class.prototype.slide = function(type, num){\r\n var that = this;\r\n var elemItem = that.elemItem;\r\n var itemsCount = elemItem.length;\r\n var options = that.config;\r\n var thisIndex = options.index;\r\n var filter = options.elem.attr('lay-filter');\r\n \r\n if (that.haveSlide || itemsCount <= 1) return;\r\n \r\n // 滑动方向\r\n if(type === 'sub'){\r\n that.subIndex(num);\r\n elemItem.eq(options.index).addClass(ELEM_PREV);\r\n setTimeout(function(){\r\n elemItem.eq(thisIndex).addClass(ELEM_RIGHT);\r\n elemItem.eq(options.index).addClass(ELEM_RIGHT);\r\n }, 50);\r\n } else { // 默认递增滑\r\n that.addIndex(num);\r\n elemItem.eq(options.index).addClass(ELEM_NEXT);\r\n setTimeout(function(){\r\n elemItem.eq(thisIndex).addClass(ELEM_LEFT);\r\n elemItem.eq(options.index).addClass(ELEM_LEFT);\r\n }, 50); \r\n }\r\n \r\n // 移除过渡类\r\n setTimeout(function(){\r\n elemItem.removeClass(THIS + ' ' + ELEM_PREV + ' ' + ELEM_NEXT + ' ' + ELEM_LEFT + ' ' + ELEM_RIGHT);\r\n elemItem.eq(options.index).addClass(THIS);\r\n that.haveSlide = false; // 解锁\r\n }, 350);\r\n \r\n // 指示器焦点\r\n that.elemInd.find('li').eq(options.index).addClass(THIS)\r\n .siblings().removeClass(THIS);\r\n \r\n that.haveSlide = true;\r\n \r\n // 回调返回的参数\r\n var params = {\r\n index: options.index,\r\n prevIndex: thisIndex,\r\n item: elemItem.eq(options.index)\r\n };\r\n \r\n typeof options.change === 'function' && options.change(params);\r\n layui.event.call(this, MOD_NAME, 'change('+ filter +')', params);\r\n };\r\n \r\n // 事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n if(options.elem.data('haveEvents')) return;\r\n\r\n \r\n // 移入移出容器\r\n options.elem.on('mouseenter touchstart', function(){\r\n if (that.config.autoplay === 'always') return;\r\n clearInterval(that.timer);\r\n }).on('mouseleave touchend', function(){\r\n if (that.config.autoplay === 'always') return;\r\n that.autoplay();\r\n });\r\n\r\n var touchEl = options.elem;\r\n var isVertical = options.anim === 'updown';\r\n lay.touchSwipe(touchEl, {\r\n onTouchEnd: function(e, state){\r\n var duration = Date.now() - state.timeStart;\r\n var distance = isVertical ? state.distanceY : state.distanceX;\r\n var speed = distance / duration;\r\n var shouldSwipe = Math.abs(speed) > 0.25 || Math.abs(distance) > touchEl[isVertical ? 'height' : 'width']() / 3;\r\n if(shouldSwipe){\r\n that.slide(distance > 0 ? '' : 'sub');\r\n }\r\n }\r\n })\r\n \r\n options.elem.data('haveEvents', true);\r\n };\r\n \r\n // 核心入口\r\n carousel.render = function(options){\r\n return new Class(options);\r\n };\r\n \r\n exports(MOD_NAME, carousel);\r\n});\r\n\r\n \r\n","/**\r\n * rate 评分评星组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'],function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.jquery;\r\n var lay = layui.lay;\r\n\r\n // 外部接口\r\n var rate = {\r\n config: {},\r\n index: layui.rate ? (layui.rate.index + 10000) : 0,\r\n\r\n //设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n //事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n }\r\n\r\n // 操作当前实例\r\n var thisRate = function () {\r\n var that = this;\r\n var options = that.config;\r\n\r\n return {\r\n setvalue: function (value) {\r\n that.setvalue.call(that, value);\r\n },\r\n config: options\r\n }\r\n };\r\n\r\n //字符常量\r\n var MOD_NAME = 'rate';\r\n var ELEM_VIEW = 'layui-rate';\r\n var ICON_RATE = 'layui-icon-rate';\r\n var ICON_RATE_SOLID = 'layui-icon-rate-solid';\r\n var ICON_RATE_HALF = 'layui-icon-rate-half';\r\n var ICON_SOLID_HALF = 'layui-icon-rate-solid layui-icon-rate-half';\r\n var ICON_SOLID_RATE = 'layui-icon-rate-solid layui-icon-rate';\r\n var ICON_HALF_RATE = 'layui-icon-rate layui-icon-rate-half';\r\n\r\n //构造器\r\n var Class = function (options) {\r\n var that = this;\r\n that.index = ++rate.index;\r\n that.config = $.extend({}, that.config, rate.config, options);\r\n that.render();\r\n };\r\n\r\n //默认配置\r\n Class.prototype.config = {\r\n length: 5, //初始长度\r\n text: false, //是否显示评分等级\r\n readonly: false, //是否只读\r\n half: false, //是否可以半星\r\n value: 0, //星星选中个数\r\n theme: '' //主题颜色\r\n };\r\n\r\n //评分渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n rate.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n // 自定义主题\r\n var style = options.theme ? ('style=\"color: '+ options.theme + ';\"') : '';\r\n\r\n options.elem = $(options.elem);\r\n\r\n //最大值不能大于总长度\r\n if(options.value > options.length){\r\n options.value = options.length;\r\n }\r\n\r\n //如果没有选择半星的属性,却给了小数的数值,统一向上或向下取整\r\n if(parseInt(options.value) !== options.value){\r\n if(!options.half){\r\n options.value = (Math.ceil(options.value) - options.value) < 0.5 ? Math.ceil(options.value): Math.floor(options.value)\r\n }\r\n }\r\n\r\n //组件模板\r\n var temp = '
              ';\r\n for(var i = 1;i <= options.length;i++){\r\n var item = '
            • Math.floor(options.value)?ICON_RATE:ICON_RATE_SOLID)\r\n + '\" '+ style +'>
            • ';\r\n\r\n if(options.half&&parseInt(options.value) !== options.value&&i == Math.ceil(options.value)){\r\n temp = temp + '
            • ';\r\n }else{\r\n temp = temp +item;\r\n }\r\n }\r\n temp += '
            ' + (options.text ? (''+ options.value + '星') : '') + '';\r\n\r\n //开始插入替代元素\r\n var othis = options.elem;\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n\r\n //生成替代元素\r\n hasRender[0] && hasRender.remove(); //如果已经渲染,则Rerender\r\n\r\n that.elemTemp = $(temp);\r\n\r\n options.span = that.elemTemp.next('span');\r\n\r\n options.setText && options.setText(options.value);\r\n\r\n othis.html(that.elemTemp);\r\n\r\n othis.addClass(\"layui-inline\");\r\n\r\n //如果不是只读,那么进行触控事件\r\n if(!options.readonly) that.action();\r\n\r\n };\r\n\r\n //评分重置\r\n Class.prototype.setvalue = function(value){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.value = value ;\r\n that.render();\r\n };\r\n\r\n //li触控事件\r\n Class.prototype.action = function(){\r\n var that = this;\r\n var options = that.config;\r\n var _ul = that.elemTemp;\r\n var wide = _ul.find(\"i\").width();\r\n var liElems = _ul.children(\"li\");\r\n\r\n liElems.each(function(index){\r\n var ind = index + 1;\r\n var othis = $(this);\r\n\r\n //点击\r\n othis.on('click', function(e){\r\n //将当前点击li的索引值赋给value\r\n options.value = ind;\r\n if(options.half){\r\n //获取鼠标在li上的位置\r\n var x = e.pageX - $(this).offset().left;\r\n if(x <= wide / 2){\r\n options.value = options.value - 0.5;\r\n }\r\n }\r\n\r\n if(options.text) _ul.next(\"span\").text(options.value + \"星\");\r\n\r\n options.choose && options.choose(options.value);\r\n options.setText && options.setText(options.value);\r\n });\r\n\r\n //移入\r\n othis.on('mousemove', function(e){\r\n _ul.find(\"i\").each(function(){\r\n $(this).addClass(ICON_RATE).removeClass(ICON_SOLID_HALF)\r\n });\r\n _ul.find(\"i:lt(\" + ind + \")\").each(function(){\r\n $(this).addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE)\r\n });\r\n // 如果设置可选半星,那么判断鼠标相对li的位置\r\n if(options.half){\r\n var x = e.pageX - $(this).offset().left;\r\n if(x <= wide / 2){\r\n othis.children(\"i\").addClass(ICON_RATE_HALF).removeClass(ICON_RATE_SOLID)\r\n }\r\n }\r\n })\r\n\r\n //移出\r\n othis.on('mouseleave', function(){\r\n _ul.find(\"i\").each(function(){\r\n $(this).addClass(ICON_RATE).removeClass(ICON_SOLID_HALF)\r\n });\r\n _ul.find(\"i:lt(\" + Math.floor(options.value) + \")\").each(function(){\r\n $(this).addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE)\r\n });\r\n //如果设置可选半星,根据分数判断是否有半星\r\n if(options.half){\r\n if(parseInt(options.value) !== options.value){\r\n _ul.children(\"li:eq(\" + Math.floor(options.value) + \")\").children(\"i\").addClass(ICON_RATE_HALF).removeClass(ICON_SOLID_RATE)\r\n }\r\n }\r\n })\r\n\r\n })\r\n\r\n lay.touchSwipe(_ul, {\r\n onTouchMove: function(e, state){\r\n if(Date.now() - state.timeStart <= 200) return;\r\n var pageX = e.touches[0].pageX;\r\n var rateElemWidth = _ul.width();\r\n var itemElemWidth = rateElemWidth / options.length; // 单颗星的宽度\r\n var offsetX = pageX - _ul.offset().left;\r\n var num = offsetX / itemElemWidth; // 原始值\r\n var remainder = num % 1;\r\n var integer = num - remainder;\r\n\r\n // 最终值\r\n var score = remainder <= 0.5 && options.half ? integer + 0.5 : Math.ceil(num);\r\n if(score > options.length) score = options.length;\r\n if(score < 0) score = 0;\r\n\r\n liElems.each(function(index){\r\n var iconElem = $(this).children('i');\r\n var isActiveIcon = (Math.ceil(score) - index === 1);\r\n var needSelect = Math.ceil(score) > index;\r\n var shouldHalfIcon = (score - index === 0.5);\r\n\r\n if(needSelect){\r\n // 设置选中样式\r\n iconElem.addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE);\r\n if(options.half && shouldHalfIcon){\r\n iconElem.addClass(ICON_RATE_HALF).removeClass(ICON_RATE_SOLID);\r\n }\r\n }else{\r\n // 恢复初始样式\r\n iconElem.addClass(ICON_RATE).removeClass(ICON_SOLID_HALF);\r\n }\r\n\r\n // 设置缩放样式\r\n iconElem.toggleClass('layui-rate-hover', isActiveIcon);\r\n });\r\n\r\n // 更新最终值\r\n options.value = score;\r\n if(options.text) _ul.next(\"span\").text(options.value + \"星\");\r\n options.setText && options.setText(options.value);\r\n },\r\n onTouchEnd: function(e, state){\r\n if(Date.now() - state.timeStart <= 200) return;\r\n _ul.find('i').removeClass('layui-rate-hover');\r\n options.choose && options.choose(options.value);\r\n options.setText && options.setText(options.value);\r\n }\r\n });\r\n };\r\n\r\n //事件处理\r\n Class.prototype.events = function () {\r\n var that = this;\r\n //var options = that.config;\r\n };\r\n\r\n //核心入口\r\n rate.render = function(options){\r\n var inst = new Class(options);\r\n return thisRate.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, rate);\r\n})\r\n","/**\r\n * flow 流加载组件\r\n */\r\n\r\n\r\nlayui.define('jquery', function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.$, Flow = function(options){}\r\n ,ELEM_MORE = 'layui-flow-more'\r\n ,ELEM_LOAD = '';\r\n\r\n //主方法\r\n Flow.prototype.load = function(options){\r\n var that = this, page = 0, lock, isOver, lazyimg, timer;\r\n options = options || {};\r\n\r\n var elem = $(options.elem); if(!elem[0]) return;\r\n var scrollElem = $(options.scrollElem || document); // 滚动条所在元素\r\n var threshold = 'mb' in options ? options.mb : 50; // 临界距离\r\n var isAuto = 'isAuto' in options ? options.isAuto : true; // 否自动滚动加载\r\n var moreText = options.moreText || \"加载更多\"; // 手动加载时,加载更多按钮文案\r\n var end = options.end || '没有更多了'; // “末页”显示文案\r\n var direction = options.direction || 'bottom';\r\n var isTop = direction === 'top';\r\n\r\n // 重复执行时清理旧的事件绑定\r\n that._cleanup(elem, scrollElem);\r\n\r\n //滚动条所在元素是否为document\r\n var notDocument = options.scrollElem && options.scrollElem !== document;\r\n\r\n //加载更多\r\n var ELEM_TEXT = '' + moreText + ''\r\n ,more = $('');\r\n\r\n if(!elem.find('.layui-flow-more')[0]){\r\n elem[isTop ? 'prepend' : 'append'](more);\r\n }\r\n\r\n //加载下一个元素\r\n var next = function(html, over){\r\n var scrollHeightStart = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;\r\n var scrollTopStart = scrollElem.scrollTop();\r\n html = $(html);\r\n more[isTop ? 'after' : 'before'](html);\r\n over = over == 0 ? true : null;\r\n over ? more.html(end) : more.find('a').html(ELEM_TEXT);\r\n isOver = over;\r\n lock = null;\r\n lazyimg && lazyimg();\r\n if(isTop){\r\n var scrollHeightEnd = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;\r\n if(page === 1){\r\n // 首次渲染后滑动到底部\r\n scrollElem.scrollTop(scrollHeightEnd);\r\n }else if(page > 1){\r\n var nextElementHeight = scrollHeightEnd - scrollHeightStart;\r\n scrollElem.scrollTop(scrollTopStart + nextElementHeight);\r\n }\r\n }\r\n };\r\n\r\n //触发请求\r\n var done = function(){\r\n lock = true;\r\n more.find('a').html(ELEM_LOAD);\r\n typeof options.done === 'function' && options.done(++page, next);\r\n };\r\n\r\n done();\r\n\r\n //不自动滚动加载\r\n more.find('a').on('click.flow', function(){\r\n var othis = $(this);\r\n if(isOver) return;\r\n lock || done();\r\n });\r\n\r\n //如果允许图片懒加载\r\n if(options.isLazyimg){\r\n lazyimg = that.lazyimg({\r\n elem: options.elem + ' img'\r\n ,scrollElem: options.scrollElem\r\n ,direction: options.direction\r\n });\r\n }\r\n\r\n if(!isAuto) return that;\r\n\r\n scrollElem.on('scroll.flow', function(){\r\n var othis = $(this), top = othis.scrollTop();\r\n\r\n if(timer) clearTimeout(timer);\r\n if(isOver || !elem.width()) return; //如果已经结束,或者元素处于隐藏状态,则不执行滚动加载\r\n\r\n timer = setTimeout(function(){\r\n //计算滚动所在容器的可视高度\r\n var height = notDocument ? othis.height() : $(window).height();\r\n\r\n //计算滚动所在容器的实际高度\r\n var scrollHeight = notDocument\r\n ? othis.prop('scrollHeight')\r\n : document.documentElement.scrollHeight;\r\n\r\n //临界点\r\n if(!isTop ? scrollHeight - top - height <= threshold : top <= threshold){\r\n lock || done();\r\n }\r\n }, 100);\r\n });\r\n\r\n return that;\r\n };\r\n\r\n //图片懒加载\r\n Flow.prototype.lazyimg = function(options){\r\n var that = this, index = 0, haveScroll;\r\n options = options || {};\r\n\r\n var scrollElem = $(options.scrollElem || document); //滚动条所在元素\r\n var elem = options.elem || 'img';\r\n var direction = options.direction || 'bottom';\r\n var isTop = direction === 'top';\r\n\r\n //滚动条所在元素是否为document\r\n var notDocument = options.scrollElem && options.scrollElem !== document;\r\n\r\n //显示图片\r\n var show = function(item, height){\r\n var start = scrollElem.scrollTop(), end = start + height;\r\n var elemTop = notDocument ? function(){\r\n return item.offset().top - scrollElem.offset().top + start;\r\n }() : item.offset().top;\r\n\r\n /* 始终只加载在当前屏范围内的图片 */\r\n if((isTop ? elemTop + item.height() : elemTop) >= start && elemTop <= end){\r\n if(item.attr('lay-src')){\r\n var src = item.attr('lay-src');\r\n layui.img(src, function(){\r\n var next = that.lazyimg.elem.eq(index);\r\n item.attr('src', src).removeAttr('lay-src');\r\n\r\n /* 当前图片加载就绪后,检测下一个图片是否在当前屏 */\r\n next[0] && render(next);\r\n index++;\r\n }, function(){\r\n var next = that.lazyimg.elem.eq(index);\r\n item.removeAttr('lay-src');\r\n });\r\n }\r\n }\r\n }, render = function(othis, scroll){\r\n\r\n //计算滚动所在容器的可视高度\r\n var height = notDocument ? (scroll||scrollElem).height() : $(window).height();\r\n var start = scrollElem.scrollTop(), end = start + height;\r\n\r\n that.lazyimg.elem = $(elem);\r\n\r\n if(othis){\r\n show(othis, height);\r\n } else {\r\n //计算未加载过的图片\r\n for(var i = 0; i < that.lazyimg.elem.length; i++){\r\n var item = that.lazyimg.elem.eq(i), elemTop = notDocument ? function(){\r\n return item.offset().top - scrollElem.offset().top + start;\r\n }() : item.offset().top;\r\n\r\n show(item, height);\r\n index = i;\r\n\r\n //如果图片的top坐标,超出了当前屏,则终止后续图片的遍历\r\n if(elemTop > end) break;\r\n }\r\n }\r\n };\r\n\r\n render();\r\n\r\n if(!haveScroll){\r\n var timer;\r\n scrollElem.on('scroll.lazyimg' , function(){\r\n var othis = $(this);\r\n if(timer) clearTimeout(timer)\r\n timer = setTimeout(function(){\r\n render(null, othis);\r\n }, 50);\r\n });\r\n haveScroll = true;\r\n }\r\n return render;\r\n };\r\n\r\n // 重复执行时清理旧的事件绑定,私有方法\r\n Flow.prototype._cleanup = function(elem, scrollElem){\r\n scrollElem.off('scroll.flow').off('scroll.lazyimg');\r\n elem.find('.layui-flow-more').find('a').off('click.flow');\r\n elem.html('');\r\n }\r\n\r\n //暴露接口\r\n exports('flow', new Flow());\r\n});\r\n","/**\r\n * code\r\n * Code 预览组件\r\n */\r\n\r\nlayui.define(['lay', 'util', 'element', 'form'], function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.$;\r\n var util = layui.util;\r\n var element = layui.element;\r\n var form = layui.form;\r\n var layer = layui.layer;\r\n var hint = layui.hint();\r\n\r\n // 常量\r\n var CONST = {\r\n ELEM_VIEW: 'layui-code-view',\r\n ELEM_TAB: 'layui-tab',\r\n ELEM_HEADER: 'layui-code-header',\r\n ELEM_FULL: 'layui-code-full',\r\n ELEM_PREVIEW: 'layui-code-preview',\r\n ELEM_ITEM: 'layui-code-item',\r\n ELEM_SHOW: 'layui-show',\r\n ELEM_LINE: 'layui-code-line',\r\n ELEM_LINE_NUM: 'layui-code-line-number',\r\n ELEM_LN_MODE: 'layui-code-ln-mode',\r\n CDDE_DATA_CLASS: 'LayuiCodeDataClass',\r\n LINE_RAW_WIDTH: 45, // 行号初始宽度,需与 css 保持一致\r\n };\r\n\r\n // 默认参数项\r\n var config = {\r\n elem: '', // 元素选择器\r\n about: '', // 代码栏右上角信息\r\n ln: true, // 代码区域是否显示行号\r\n header: false, // 是否显示代码栏头部区域\r\n encode: true, // 是否对 code 进行编码(若开启预览,则强制开启)\r\n copy: true, // 是否开启代码区域复制功能图标\r\n // 默认文本\r\n text: {\r\n code: util.escape(''),\r\n preview: 'Preview',\r\n },\r\n wordWrap: true, // 是否自动换行\r\n lang: 'text', // 指定语言类型\r\n highlighter: false, // 是否开启语法高亮,'hljs','prism','shiki'\r\n langMarker: false, // 代码区域是否显示语言类型标记\r\n };\r\n\r\n // 初始索引\r\n var codeIndex = layui.code ? (layui.code.index + 10000) : 0;\r\n\r\n // 去除尾部空格\r\n var trimEnd = function(str){\r\n return String(str).replace(/\\s+$/, '');\r\n }\r\n // 保留首行缩进\r\n var trim = function(str){\r\n return trimEnd(str).replace(/^\\n|\\n$/, '');\r\n };\r\n\r\n // export api\r\n exports('code', function(options, mode){\r\n options = $.extend(true, {}, config, options);\r\n\r\n // 返回对象\r\n var ret = {\r\n config: options,\r\n reload: function(opts) { // 重载\r\n layui.code(this.updateOptions(opts));\r\n },\r\n updateOptions: function(opts) { // 更新属性(选项)\r\n opts = opts || {};\r\n delete opts.elem;\r\n return $.extend(true, options, opts);\r\n },\r\n reloadCode: function(opts) { // 仅重载 code\r\n layui.code(this.updateOptions(opts), 'reloadCode');\r\n }\r\n };\r\n\r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n // 是否正向渲染\r\n layui.each(options.obverse ? elem : elem.get().reverse(), function(){\r\n layui.code($.extend({}, options, {\r\n elem: this\r\n }), mode);\r\n });\r\n return ret;\r\n }\r\n\r\n // 目标元素是否存在\r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return ret;\r\n\r\n // 合并属性上的参数,并兼容旧版本属性写法 lay-*\r\n $.extend(true, options, lay.options(othis[0]), function(obj){\r\n var attrs = ['title', 'height', 'encode', 'skin', 'about'];\r\n layui.each(attrs, function(i, attr){\r\n var value = othis.attr('lay-'+ attr);\r\n if(typeof value === 'string'){\r\n obj[attr] = value;\r\n }\r\n })\r\n return obj;\r\n }({}));\r\n\r\n // codeRender 需要关闭编码\r\n // 未使用 codeRender 时若开启了预览,则强制开启编码\r\n options.encode = (options.encode || options.preview) && !options.codeRender;\r\n\r\n // 获得初始 code\r\n options.code = options.code || function(){\r\n var arr = [];\r\n var textarea = othis.children('textarea');\r\n\r\n // 若内容放置在 textarea 中\r\n textarea.each(function(){\r\n arr.push(trim(this.value));\r\n });\r\n\r\n // 内容直接放置在元素外层\r\n if(arr.length === 0){\r\n arr.push(trim(othis.html()));\r\n }\r\n\r\n return arr.join('');\r\n }();\r\n\r\n // 创建 code 行结构\r\n var createCode = function(html) {\r\n // codeRender\r\n if(typeof options.codeRender === 'function') {\r\n html = options.codeRender(String(html), options);\r\n }\r\n\r\n // code 行\r\n var lines = String(html).split(/\\r?\\n/g);\r\n\r\n // 包裹 code 行结构\r\n html = $.map(lines, function(line, num) {\r\n return [\r\n '
            ',\r\n (\r\n options.ln ? [\r\n '
            ',\r\n (util.digit(num + 1) + '.'),\r\n '
            ',\r\n ].join('') : ''\r\n ),\r\n '
            ',\r\n (line || ' '),\r\n '
            ',\r\n '
            '\r\n ].join('');\r\n });\r\n\r\n return {\r\n lines: lines,\r\n html: html\r\n };\r\n };\r\n\r\n // 原始 code\r\n var rawCode = options.code;\r\n\r\n // 最终 code\r\n var finalCode = function(code) {\r\n return typeof options.codeParse === 'function' ?\r\n options.codeParse(code, options) :\r\n code;\r\n };\r\n\r\n // 仅重载 code\r\n if (mode === 'reloadCode') {\r\n return othis.children('.layui-code-wrap').html(\r\n createCode(finalCode(rawCode)).html\r\n ), ret;\r\n }\r\n\r\n // 自增索引\r\n var index = layui.code.index = ++codeIndex;\r\n othis.attr('lay-code-index', index);\r\n\r\n // 初始化 className\r\n var hasDataClass = CONST.CDDE_DATA_CLASS in othis.data();\r\n if (hasDataClass) {\r\n othis.attr('class', othis.data(CONST.CDDE_DATA_CLASS) || '');\r\n }\r\n\r\n // 记录初始 className\r\n if (!hasDataClass) {\r\n othis.data(CONST.CDDE_DATA_CLASS, othis.attr('class'));\r\n }\r\n\r\n // 工具栏\r\n var tools = {\r\n copy: {\r\n className: 'file-b',\r\n title: ['复制代码'],\r\n event: function(obj){\r\n var code = util.unescape(finalCode(options.code));\r\n\r\n // 写入剪切板\r\n lay.clipboard.writeText({\r\n text: code,\r\n done: function() {\r\n layer.msg('已复制', {icon: 1});\r\n },\r\n error: function() {\r\n layer.msg('复制失败', {icon: 2});\r\n }\r\n });\r\n\r\n typeof options.onCopy === 'function' && options.onCopy(code);\r\n }\r\n }\r\n };\r\n\r\n // 移除包裹结构\r\n var unwrap = (function fn() {\r\n var elemViewHas = othis.parent('.' + CONST.ELEM_PREVIEW);\r\n var elemTabHas = elemViewHas.children('.'+ CONST.ELEM_TAB);\r\n var elemPreviewViewHas = elemViewHas.children('.' + CONST.ELEM_ITEM +'-preview');\r\n\r\n // 移除旧结构\r\n elemTabHas.remove(); // 移除 tab\r\n elemPreviewViewHas.remove(); // 移除预览区域\r\n if (elemViewHas[0]) othis.unwrap(); // 移除外层容器\r\n\r\n return fn;\r\n })();\r\n\r\n // 是否开启预览\r\n if(options.preview){\r\n var FILTER_VALUE = 'LAY-CODE-DF-'+ index;\r\n var layout = options.layout || ['code', 'preview'];\r\n var isIframePreview = options.preview === 'iframe';\r\n\r\n // 追加 Tab 组件\r\n var elemView = $('
            ');\r\n var elemTabView = $('
            ');\r\n var elemHeaderView = $('
            ');\r\n var elemPreviewView = $('
            ');\r\n var elemToolbar = $('
            ');\r\n\r\n\r\n if(options.id) elemView.attr('id', options.id);\r\n elemView.addClass(options.className);\r\n elemTabView.attr('lay-filter', FILTER_VALUE);\r\n\r\n // 标签头\r\n layui.each(layout, function(i, v){\r\n var li = $('
          • ');\r\n if(i === 0) li.addClass('layui-this');\r\n li.html(options.text[v]);\r\n elemHeaderView.append(li);\r\n });\r\n\r\n // 工具栏\r\n $.extend(tools, {\r\n 'full': {\r\n className: 'screen-full',\r\n title: ['最大化显示', '还原显示'],\r\n event: function(obj){\r\n var el = obj.elem;\r\n var elemView = el.closest('.'+ CONST.ELEM_PREVIEW);\r\n var classNameFull = 'layui-icon-'+ this.className;\r\n var classNameRestore = 'layui-icon-screen-restore';\r\n var title = this.title;\r\n var htmlElem = $('html,body');\r\n var ELEM_SCROLLBAR_HIDE = 'layui-scrollbar-hide';\r\n\r\n if(el.hasClass(classNameFull)){\r\n elemView.addClass(CONST.ELEM_FULL);\r\n el.removeClass(classNameFull).addClass(classNameRestore);\r\n el.attr('title', title[1]);\r\n htmlElem.addClass(ELEM_SCROLLBAR_HIDE);\r\n } else {\r\n elemView.removeClass(CONST.ELEM_FULL);\r\n el.removeClass(classNameRestore).addClass(classNameFull);\r\n el.attr('title', title[0]);\r\n htmlElem.removeClass(ELEM_SCROLLBAR_HIDE);\r\n }\r\n }\r\n },\r\n 'window': {\r\n className: 'release',\r\n title: ['在新窗口预览'],\r\n event: function(obj){\r\n util.openWin({\r\n content: finalCode(options.code)\r\n });\r\n }\r\n }\r\n });\r\n\r\n // copy\r\n if(options.copy){\r\n if(layui.type(options.tools) === 'array'){\r\n // 若 copy 未存在于 tools 中,则追加到最前\r\n if(options.tools.indexOf('copy') === -1){\r\n options.tools.unshift('copy');\r\n }\r\n } else {\r\n options.tools = ['copy'];\r\n }\r\n }\r\n\r\n // 工具栏事件\r\n elemToolbar.on('click', '>i', function(){\r\n var oi = $(this);\r\n var type = oi.data('type');\r\n var parameters = {\r\n elem: oi,\r\n type: type,\r\n options: options, // 当前属性选项\r\n rawCode: options.code, // 原始 code\r\n finalCode: util.unescape(finalCode(options.code)) // 最终 code\r\n };\r\n\r\n // 内部 tools event\r\n tools[type] && typeof tools[type].event === 'function' && tools[type].event(parameters);\r\n\r\n // 外部 tools event\r\n typeof options.toolsEvent === 'function' && options.toolsEvent(parameters);\r\n });\r\n\r\n // 增加工具栏\r\n if (options.addTools && options.tools) {\r\n options.tools = [].concat(options.tools, options.addTools);\r\n }\r\n\r\n // 渲染工具栏\r\n layui.each(options.tools, function(i, v){\r\n var viso = typeof v === 'object'; // 若为 object 值,则可自定义更多属性\r\n var tool = viso ? v : (\r\n tools[v] || {\r\n className: v,\r\n title: [v]\r\n }\r\n );\r\n\r\n var className = tool.className || tool.type;\r\n var title = tool.title || [''];\r\n var type = viso ? ( tool.type || className ) : v;\r\n\r\n if (!type) return;\r\n\r\n // 若非内置 tool,则合并到 tools 中\r\n if (!tools[type]) {\r\n var obj = {};\r\n obj[type] = tool;\r\n $.extend(tools, obj);\r\n }\r\n\r\n elemToolbar.append(\r\n ''\r\n );\r\n });\r\n\r\n othis.addClass(CONST.ELEM_ITEM).wrap(elemView); // 包裹外层容器\r\n elemTabView.append(elemHeaderView); // 追加标签头\r\n options.tools && elemTabView.append(elemToolbar); // 追加工具栏\r\n othis.before(elemTabView); // 追加标签结构\r\n\r\n // 追加预览\r\n if(isIframePreview){\r\n elemPreviewView.html('');\r\n }\r\n\r\n // 执行预览\r\n var runPreview = function(thisItemBody){\r\n var iframe = thisItemBody.children('iframe')[0];\r\n\r\n // 是否 iframe 方式预览\r\n if(isIframePreview && iframe){\r\n iframe.srcdoc = finalCode(options.code);\r\n } else {\r\n thisItemBody.html(options.code);\r\n }\r\n\r\n // 当前实例预览完毕后的回调\r\n setTimeout(function(){\r\n typeof options.done === 'function' && options.done({\r\n container: thisItemBody,\r\n options: options,\r\n render: function(){\r\n form.render(thisItemBody.find('.layui-form'));\r\n element.render();\r\n }\r\n });\r\n },3);\r\n };\r\n\r\n if(layout[0] === 'preview'){\r\n elemPreviewView.addClass(CONST.ELEM_SHOW);\r\n othis.before(elemPreviewView);\r\n runPreview(elemPreviewView);\r\n } else {\r\n othis.addClass(CONST.ELEM_SHOW).after(elemPreviewView);\r\n }\r\n\r\n // 内容项初始化样式\r\n options.previewStyle = [options.style, options.previewStyle].join('');\r\n elemPreviewView.attr('style', options.previewStyle);\r\n\r\n // tab change\r\n element.on('tab('+ FILTER_VALUE +')', function(data){\r\n var $this = $(this);\r\n var thisElem = $(data.elem).closest('.'+ CONST.ELEM_PREVIEW);\r\n var elemItemBody = thisElem.find('.'+ CONST.ELEM_ITEM);\r\n var thisItemBody = elemItemBody.eq(data.index);\r\n\r\n elemItemBody.removeClass(CONST.ELEM_SHOW);\r\n thisItemBody.addClass(CONST.ELEM_SHOW);\r\n\r\n if($this.attr('lay-id') === 'preview'){\r\n runPreview(thisItemBody);\r\n }\r\n\r\n setCodeLayout();\r\n });\r\n }\r\n\r\n // 创建 code 容器\r\n var codeElem = $(''); // 此处的闭合标签是为了兼容 IE8\r\n\r\n // 添加主容器 className\r\n othis.addClass(function(arr) {\r\n if (!options.wordWrap) arr.push('layui-code-nowrap');\r\n return arr.join(' ')\r\n }(['layui-code-view layui-border-box']));\r\n\r\n // code 主题风格\r\n var theme = options.theme || options.skin;\r\n if (theme) {\r\n othis.removeClass('layui-code-theme-dark layui-code-theme-light');\r\n othis.addClass('layui-code-theme-'+ theme);\r\n }\r\n\r\n // 添加高亮必要的 className\r\n if (options.highlighter) {\r\n othis.addClass([\r\n options.highlighter,\r\n 'language-' + options.lang,\r\n 'layui-code-hl'\r\n ].join(' '));\r\n }\r\n\r\n // 获取 code 行结构\r\n var createCodeRst = createCode(\r\n options.encode ? util.escape(finalCode(rawCode)) : rawCode // 是否编码\r\n );\r\n var lines = createCodeRst.lines;\r\n\r\n // 插入 code\r\n othis.html(codeElem.html(createCodeRst.html));\r\n\r\n // 插入行号边栏\r\n if (options.ln) {\r\n othis.append('
            ');\r\n }\r\n\r\n // 兼容旧版本 height 属性\r\n if (options.height) {\r\n codeElem.css('max-height', options.height);\r\n }\r\n\r\n // code 区域样式\r\n options.codeStyle = [options.style, options.codeStyle].join('');\r\n if (options.codeStyle) {\r\n codeElem.attr('style', function(i, val) {\r\n return (val || '') + options.codeStyle;\r\n });\r\n }\r\n\r\n // 动态设置样式\r\n var cssRules = [\r\n {\r\n selector: '>.layui-code-wrap>.layui-code-line{}',\r\n setValue: function(item, value) {\r\n item.style['padding-left'] = value + 'px';\r\n }\r\n },\r\n {\r\n selector: '>.layui-code-wrap>.layui-code-line>.layui-code-line-number{}',\r\n setValue: function(item, value) {\r\n item.style.width = value + 'px';\r\n }\r\n },\r\n {\r\n selector: '>.layui-code-ln-side{}',\r\n setValue: function(item, value) {\r\n item.style.width = value + 'px';\r\n }\r\n }\r\n ];\r\n\r\n // 生成初始 style 元素\r\n var styleElem = lay.style({\r\n target: othis[0],\r\n id: 'DF-code-'+ index,\r\n text: $.map($.map(cssRules, function(val){\r\n return val.selector;\r\n }), function(val, i) {\r\n return ['.layui-code-view[lay-code-index=\"'+ index + '\"]', val].join(' ');\r\n }).join('')\r\n })\r\n\r\n // 动态设置 code 布局\r\n var setCodeLayout = (function fn() {\r\n if (options.ln) {\r\n var multiLine = Math.floor(lines.length / 100);\r\n var lineElem = codeElem.children('.'+ CONST.ELEM_LINE);\r\n var width = lineElem.last().children('.'+ CONST.ELEM_LINE_NUM).outerWidth();\r\n\r\n othis.addClass(CONST.ELEM_LN_MODE);\r\n\r\n // 若超出 100 行\r\n if (multiLine && width > CONST.LINE_RAW_WIDTH) {\r\n lay.getStyleRules(styleElem, function(item, i) {\r\n try {\r\n cssRules[i].setValue(item, width);\r\n } catch(e) { }\r\n });\r\n }\r\n }\r\n\r\n return fn;\r\n })();\r\n\r\n // 创建 code header\r\n if (options.header) {\r\n var headerElem = $('
            ');\r\n headerElem.html(options.title || options.text.code);\r\n othis.prepend(headerElem);\r\n }\r\n\r\n // 创建 code 区域固定条\r\n var elemFixbar = $('
            ');\r\n\r\n // 若开启复制,且未开启预览,则单独生成复制图标\r\n if(options.copy && !options.preview){\r\n var copyElem = $(['',\r\n '',\r\n ''].join(''));\r\n\r\n // 点击复制\r\n copyElem.on('click', function(){\r\n tools.copy.event();\r\n });\r\n\r\n elemFixbar.append(copyElem);\r\n }\r\n\r\n // 创建 language marker\r\n if (options.langMarker) {\r\n elemFixbar.append('' + options.lang + '');\r\n }\r\n\r\n // 创建 about 自定义内容\r\n if (options.about) {\r\n elemFixbar.append(options.about);\r\n }\r\n\r\n // 生成 code fixbar\r\n othis.append(elemFixbar);\r\n\r\n // code 渲染完毕后的回调\r\n if (!options.preview) {\r\n setTimeout(function(){\r\n typeof options.done === 'function' && options.done({});\r\n },3);\r\n }\r\n\r\n // 所有实例渲染完毕后的回调\r\n if(options.elem.length === index + 1){\r\n typeof options.allDone === 'function' && options.allDone();\r\n }\r\n\r\n return ret;\r\n });\r\n});\r\n\r\n// 若为源码版,则自动加载该组件依赖的 css 文件\r\nif(!layui['layui.all']){\r\n layui.addcss('modules/code.css?v=6', 'skincodecss');\r\n}\r\n"]}