2019-12-02 03:32:03 +00:00
/ * !
* jQuery JavaScript Library v3 . 3.1
* https : //jquery.com/
*
* Includes Sizzle . js
* https : //sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https : //jquery.org/license
*
* Date : 2018 - 01 - 20 T17 : 24 Z
* /
( function ( global , factory ) { "use strict" ; if ( typeof module === "object" && typeof module . exports === "object" ) { module . exports = global . document ? factory ( global , true ) : function ( w ) { if ( ! w . document ) { throw new Error ( "jQuery requires a window with a document" ) ; }
return factory ( w ) ; } ; } else { factory ( global ) ; }
} ) ( typeof window !== "undefined" ? window : this , function ( window , noGlobal ) { "use strict" ; var arr = [ ] ; var document = window . document ; var getProto = Object . getPrototypeOf ; var slice = arr . slice ; var concat = arr . concat ; var push = arr . push ; var indexOf = arr . indexOf ; var class2type = { } ; var toString = class2type . toString ; var hasOwn = class2type . hasOwnProperty ; var fnToString = hasOwn . toString ; var ObjectFunctionString = fnToString . call ( Object ) ; var support = { } ; var isFunction = function isFunction ( obj ) { return typeof obj === "function" && typeof obj . nodeType !== "number" ; } ; var isWindow = function isWindow ( obj ) { return obj != null && obj === obj . window ; } ; var preservedScriptAttributes = { type : true , src : true , noModule : true } ; function DOMEval ( code , doc , node ) { doc = doc || document ; var i , script = doc . createElement ( "script" ) ; script . text = code ; if ( node ) { for ( i in preservedScriptAttributes ) { if ( node [ i ] ) { script [ i ] = node [ i ] ; } } }
doc . head . appendChild ( script ) . parentNode . removeChild ( script ) ; }
function toType ( obj ) { if ( obj == null ) { return obj + "" ; }
return typeof obj === "object" || typeof obj === "function" ? class2type [ toString . call ( obj ) ] || "object" : typeof obj ; }
var
version = "3.3.1" , jQuery = function ( selector , context ) { return new jQuery . fn . init ( selector , context ) ; } , rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g ; jQuery . fn = jQuery . prototype = { jquery : version , constructor : jQuery , length : 0 , toArray : function ( ) { return slice . call ( this ) ; } , get : function ( num ) { if ( num == null ) { return slice . call ( this ) ; }
return num < 0 ? this [ num + this . length ] : this [ num ] ; } , pushStack : function ( elems ) { var ret = jQuery . merge ( this . constructor ( ) , elems ) ; ret . prevObject = this ; return ret ; } , each : function ( callback ) { return jQuery . each ( this , callback ) ; } , map : function ( callback ) { return this . pushStack ( jQuery . map ( this , function ( elem , i ) { return callback . call ( elem , i , elem ) ; } ) ) ; } , slice : function ( ) { return this . pushStack ( slice . apply ( this , arguments ) ) ; } , first : function ( ) { return this . eq ( 0 ) ; } , last : function ( ) { return this . eq ( - 1 ) ; } , eq : function ( i ) { var len = this . length , j = + i + ( i < 0 ? len : 0 ) ; return this . pushStack ( j >= 0 && j < len ? [ this [ j ] ] : [ ] ) ; } , end : function ( ) { return this . prevObject || this . constructor ( ) ; } , push : push , sort : arr . sort , splice : arr . splice } ; jQuery . extend = jQuery . fn . extend = function ( ) { var options , name , src , copy , copyIsArray , clone , target = arguments [ 0 ] || { } , i = 1 , length = arguments . length , deep = false ; if ( typeof target === "boolean" ) { deep = target ; target = arguments [ i ] || { } ; i ++ ; }
if ( typeof target !== "object" && ! isFunction ( target ) ) { target = { } ; }
if ( i === length ) { target = this ; i -- ; }
for ( ; i < length ; i ++ ) { if ( ( options = arguments [ i ] ) != null ) { for ( name in options ) { src = target [ name ] ; copy = options [ name ] ; if ( target === copy ) { continue ; }
if ( deep && copy && ( jQuery . isPlainObject ( copy ) || ( copyIsArray = Array . isArray ( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false ; clone = src && Array . isArray ( src ) ? src : [ ] ; } else { clone = src && jQuery . isPlainObject ( src ) ? src : { } ; }
target [ name ] = jQuery . extend ( deep , clone , copy ) ; } else if ( copy !== undefined ) { target [ name ] = copy ; } } } }
return target ; } ; jQuery . extend ( { expando : "jQuery" + ( version + Math . random ( ) ) . replace ( /\D/g , "" ) , isReady : true , error : function ( msg ) { throw new Error ( msg ) ; } , noop : function ( ) { } , isPlainObject : function ( obj ) { var proto , Ctor ; if ( ! obj || toString . call ( obj ) !== "[object Object]" ) { return false ; }
proto = getProto ( obj ) ; if ( ! proto ) { return true ; }
Ctor = hasOwn . call ( proto , "constructor" ) && proto . constructor ; return typeof Ctor === "function" && fnToString . call ( Ctor ) === ObjectFunctionString ; } , isEmptyObject : function ( obj ) { var name ; for ( name in obj ) { return false ; }
return true ; } , globalEval : function ( code ) { DOMEval ( code ) ; } , each : function ( obj , callback ) { var length , i = 0 ; if ( isArrayLike ( obj ) ) { length = obj . length ; for ( ; i < length ; i ++ ) { if ( callback . call ( obj [ i ] , i , obj [ i ] ) === false ) { break ; } } } else { for ( i in obj ) { if ( callback . call ( obj [ i ] , i , obj [ i ] ) === false ) { break ; } } }
return obj ; } , trim : function ( text ) { return text == null ? "" : ( text + "" ) . replace ( rtrim , "" ) ; } , makeArray : function ( arr , results ) { var ret = results || [ ] ; if ( arr != null ) { if ( isArrayLike ( Object ( arr ) ) ) { jQuery . merge ( ret , typeof arr === "string" ? [ arr ] : arr ) ; } else { push . call ( ret , arr ) ; } }
return ret ; } , inArray : function ( elem , arr , i ) { return arr == null ? - 1 : indexOf . call ( arr , elem , i ) ; } , merge : function ( first , second ) { var len = + second . length , j = 0 , i = first . length ; for ( ; j < len ; j ++ ) { first [ i ++ ] = second [ j ] ; }
first . length = i ; return first ; } , grep : function ( elems , callback , invert ) { var callbackInverse , matches = [ ] , i = 0 , length = elems . length , callbackExpect = ! invert ; for ( ; i < length ; i ++ ) { callbackInverse = ! callback ( elems [ i ] , i ) ; if ( callbackInverse !== callbackExpect ) { matches . push ( elems [ i ] ) ; } }
return matches ; } , map : function ( elems , callback , arg ) { var length , value , i = 0 , ret = [ ] ; if ( isArrayLike ( elems ) ) { length = elems . length ; for ( ; i < length ; i ++ ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) { ret . push ( value ) ; } }
} else { for ( i in elems ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) { ret . push ( value ) ; } } }
return concat . apply ( [ ] , ret ) ; } , guid : 1 , support : support } ) ; if ( typeof Symbol === "function" ) { jQuery . fn [ Symbol . iterator ] = arr [ Symbol . iterator ] ; }
jQuery . each ( "Boolean Number String Function Array Date RegExp Object Error Symbol" . split ( " " ) , function ( i , name ) { class2type [ "[object " + name + "]" ] = name . toLowerCase ( ) ; } ) ; function isArrayLike ( obj ) { var length = ! ! obj && "length" in obj && obj . length , type = toType ( obj ) ; if ( isFunction ( obj ) || isWindow ( obj ) ) { return false ; }
return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj ; }
var Sizzle = / * !
* Sizzle CSS Selector Engine v2 . 3.3
* https : //sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http : //jquery.org/license
*
* Date : 2016 - 08 - 08
* /
( function ( window ) { var i , support , Expr , getText , isXML , tokenize , compile , select , outermostContext , sortInput , hasDuplicate , setDocument , document , docElem , documentIsHTML , rbuggyQSA , rbuggyMatches , matches , contains , expando = "sizzle" + 1 * new Date ( ) , preferredDoc = window . document , dirruns = 0 , done = 0 , classCache = createCache ( ) , tokenCache = createCache ( ) , compilerCache = createCache ( ) , sortOrder = function ( a , b ) { if ( a === b ) { hasDuplicate = true ; }
return 0 ; } , hasOwn = ( { } ) . hasOwnProperty , arr = [ ] , pop = arr . pop , push _native = arr . push , push = arr . push , slice = arr . slice , indexOf = function ( list , elem ) { var i = 0 , len = list . length ; for ( ; i < len ; i ++ ) { if ( list [ i ] === elem ) { return i ; } }
return - 1 ; } , booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" , whitespace = "[\\x20\\t\\r\\n\\f]" , identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+" , attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
"*([*^$|!~]?=)" + whitespace +
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
"*\\]" , pseudos = ":(" + identifier + ")(?:\\((" +
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
".*" +
")\\)|)" , rwhitespace = new RegExp ( whitespace + "+" , "g" ) , rtrim = new RegExp ( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$" , "g" ) , rcomma = new RegExp ( "^" + whitespace + "*," + whitespace + "*" ) , rcombinators = new RegExp ( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ) , rattributeQuotes = new RegExp ( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]" , "g" ) , rpseudo = new RegExp ( pseudos ) , ridentifier = new RegExp ( "^" + identifier + "$" ) , matchExpr = { "ID" : new RegExp ( "^#(" + identifier + ")" ) , "CLASS" : new RegExp ( "^\\.(" + identifier + ")" ) , "TAG" : new RegExp ( "^(" + identifier + "|[*])" ) , "ATTR" : new RegExp ( "^" + attributes ) , "PSEUDO" : new RegExp ( "^" + pseudos ) , "CHILD" : new RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
"*(\\d+)|))" + whitespace + "*\\)|)" , "i" ) , "bool" : new RegExp ( "^(?:" + booleans + ")$" , "i" ) , "needsContext" : new RegExp ( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)" , "i" ) } , rinputs = /^(?:input|select|textarea|button)$/i , rheader = /^h\d$/i , rnative = /^[^{]+\{\s*\[native \w/ , rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/ , rsibling = /[+~]/ , runescape = new RegExp ( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)" , "ig" ) , funescape = function ( _ , escaped , escapedWhitespace ) { var high = "0x" + escaped - 0x10000 ; return high !== high || escapedWhitespace ? escaped : high < 0 ? String . fromCharCode ( high + 0x10000 ) : String . fromCharCode ( high >> 10 | 0xD800 , high & 0x3FF | 0xDC00 ) ; } , rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g , fcssescape = function ( ch , asCodePoint ) { if ( asCodePoint ) { if ( ch === "\0" ) { return "\uFFFD" ; }
return ch . slice ( 0 , - 1 ) + "\\" + ch . charCodeAt ( ch . length - 1 ) . toString ( 16 ) + " " ; }
return "\\" + ch ; } , unloadHandler = function ( ) { setDocument ( ) ; } , disabledAncestor = addCombinator ( function ( elem ) { return elem . disabled === true && ( "form" in elem || "label" in elem ) ; } , { dir : "parentNode" , next : "legend" } ) ; try { push . apply ( ( arr = slice . call ( preferredDoc . childNodes ) ) , preferredDoc . childNodes ) ; arr [ preferredDoc . childNodes . length ] . nodeType ; } catch ( e ) { push = { apply : arr . length ? function ( target , els ) { push _native . apply ( target , slice . call ( els ) ) ; } : function ( target , els ) { var j = target . length , i = 0 ; while ( ( target [ j ++ ] = els [ i ++ ] ) ) { }
target . length = j - 1 ; } } ; }
function Sizzle ( selector , context , results , seed ) { var m , i , elem , nid , match , groups , newSelector , newContext = context && context . ownerDocument , nodeType = context ? context . nodeType : 9 ; results = results || [ ] ; if ( typeof selector !== "string" || ! selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results ; }
if ( ! seed ) { if ( ( context ? context . ownerDocument || context : preferredDoc ) !== document ) { setDocument ( context ) ; }
context = context || document ; if ( documentIsHTML ) { if ( nodeType !== 11 && ( match = rquickExpr . exec ( selector ) ) ) { if ( ( m = match [ 1 ] ) ) { if ( nodeType === 9 ) { if ( ( elem = context . getElementById ( m ) ) ) { if ( elem . id === m ) { results . push ( elem ) ; return results ; } } else { return results ; }
} else { if ( newContext && ( elem = newContext . getElementById ( m ) ) && contains ( context , elem ) && elem . id === m ) { results . push ( elem ) ; return results ; } }
} else if ( match [ 2 ] ) { push . apply ( results , context . getElementsByTagName ( selector ) ) ; return results ; } else if ( ( m = match [ 3 ] ) && support . getElementsByClassName && context . getElementsByClassName ) { push . apply ( results , context . getElementsByClassName ( m ) ) ; return results ; } }
if ( support . qsa && ! compilerCache [ selector + " " ] && ( ! rbuggyQSA || ! rbuggyQSA . test ( selector ) ) ) { if ( nodeType !== 1 ) { newContext = context ; newSelector = selector ; } else if ( context . nodeName . toLowerCase ( ) !== "object" ) { if ( ( nid = context . getAttribute ( "id" ) ) ) { nid = nid . replace ( rcssescape , fcssescape ) ; } else { context . setAttribute ( "id" , ( nid = expando ) ) ; }
groups = tokenize ( selector ) ; i = groups . length ; while ( i -- ) { groups [ i ] = "#" + nid + " " + toSelector ( groups [ i ] ) ; }
newSelector = groups . join ( "," ) ; newContext = rsibling . test ( selector ) && testContext ( context . parentNode ) || context ; }
if ( newSelector ) { try { push . apply ( results , newContext . querySelectorAll ( newSelector ) ) ; return results ; } catch ( qsaError ) { } finally { if ( nid === expando ) { context . removeAttribute ( "id" ) ; } } } } } }
return select ( selector . replace ( rtrim , "$1" ) , context , results , seed ) ; }
function createCache ( ) { var keys = [ ] ; function cache ( key , value ) { if ( keys . push ( key + " " ) > Expr . cacheLength ) { delete cache [ keys . shift ( ) ] ; }
return ( cache [ key + " " ] = value ) ; }
return cache ; }
function markFunction ( fn ) { fn [ expando ] = true ; return fn ; }
function assert ( fn ) { var el = document . createElement ( "fieldset" ) ; try { return ! ! fn ( el ) ; } catch ( e ) { return false ; } finally { if ( el . parentNode ) { el . parentNode . removeChild ( el ) ; }
el = null ; } }
function addHandle ( attrs , handler ) { var arr = attrs . split ( "|" ) , i = arr . length ; while ( i -- ) { Expr . attrHandle [ arr [ i ] ] = handler ; } }
function siblingCheck ( a , b ) { var cur = b && a , diff = cur && a . nodeType === 1 && b . nodeType === 1 && a . sourceIndex - b . sourceIndex ; if ( diff ) { return diff ; }
if ( cur ) { while ( ( cur = cur . nextSibling ) ) { if ( cur === b ) { return - 1 ; } } }
return a ? 1 : - 1 ; }
function createInputPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === type ; } ; }
function createButtonPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return ( name === "input" || name === "button" ) && elem . type === type ; } ; }
function createDisabledPseudo ( disabled ) { return function ( elem ) { if ( "form" in elem ) { if ( elem . parentNode && elem . disabled === false ) { if ( "label" in elem ) { if ( "label" in elem . parentNode ) { return elem . parentNode . disabled === disabled ; } else { return elem . disabled === disabled ; } }
return elem . isDisabled === disabled || elem . isDisabled !== ! disabled && disabledAncestor ( elem ) === disabled ; }
return elem . disabled === disabled ; } else if ( "label" in elem ) { return elem . disabled === disabled ; }
return false ; } ; }
function createPositionalPseudo ( fn ) { return markFunction ( function ( argument ) { argument = + argument ; return markFunction ( function ( seed , matches ) { var j , matchIndexes = fn ( [ ] , seed . length , argument ) , i = matchIndexes . length ; while ( i -- ) { if ( seed [ ( j = matchIndexes [ i ] ) ] ) { seed [ j ] = ! ( matches [ j ] = seed [ j ] ) ; } } } ) ; } ) ; }
function testContext ( context ) { return context && typeof context . getElementsByTagName !== "undefined" && context ; }
support = Sizzle . support = { } ; isXML = Sizzle . isXML = function ( elem ) { var documentElement = elem && ( elem . ownerDocument || elem ) . documentElement ; return documentElement ? documentElement . nodeName !== "HTML" : false ; } ; setDocument = Sizzle . setDocument = function ( node ) { var hasCompare , subWindow , doc = node ? node . ownerDocument || node : preferredDoc ; if ( doc === document || doc . nodeType !== 9 || ! doc . documentElement ) { return document ; }
document = doc ; docElem = document . documentElement ; documentIsHTML = ! isXML ( document ) ; if ( preferredDoc !== document && ( subWindow = document . defaultView ) && subWindow . top !== subWindow ) { if ( subWindow . addEventListener ) { subWindow . addEventListener ( "unload" , unloadHandler , false ) ; } else if ( subWindow . attachEvent ) { subWindow . attachEvent ( "onunload" , unloadHandler ) ; } }
support . attributes = assert ( function ( el ) { el . className = "i" ; return ! el . getAttribute ( "className" ) ; } ) ; support . getElementsByTagName = assert ( function ( el ) { el . appendChild ( document . createComment ( "" ) ) ; return ! el . getElementsByTagName ( "*" ) . length ; } ) ; support . getElementsByClassName = rnative . test ( document . getElementsByClassName ) ; support . getById = assert ( function ( el ) { docElem . appendChild ( el ) . id = expando ; return ! document . getElementsByName || ! document . getElementsByName ( expando ) . length ; } ) ; if ( support . getById ) { Expr . filter [ "ID" ] = function ( id ) { var attrId = id . replace ( runescape , funescape ) ; return function ( elem ) { return elem . getAttribute ( "id" ) === attrId ; } ; } ; Expr . find [ "ID" ] = function ( id , context ) { if ( typeof context . getElementById !== "undefined" && documentIsHTML ) { var elem = context . getElementById ( id ) ; return elem ? [ elem ] : [ ] ; } } ; } else { Expr . filter [ "ID" ] = function ( id ) { var attrId = id . replace ( runescape , funescape ) ; return function ( elem ) { var node = typeof elem . getAttributeNode !== "undefined" && elem . getAttributeNode ( "id" ) ; return node && node . value === attrId ; } ; } ; Expr . find [ "ID" ] = function ( id , context ) { if ( typeof context . getElementById !== "undefined" && documentIsHTML ) { var node , i , elems , elem = context . getElementById ( id ) ; if ( elem ) { node = elem . getAttributeNode ( "id" ) ; if ( node && node . value === id ) { return [ elem ] ; }
elems = context . getElementsByName ( id ) ; i = 0 ; while ( ( elem = elems [ i ++ ] ) ) { node = elem . getAttributeNode ( "id" ) ; if ( node && node . value === id ) { return [ elem ] ; } } }
return [ ] ; } } ; }
Expr . find [ "TAG" ] = support . getElementsByTagName ? function ( tag , context ) { if ( typeof context . getElementsByTagName !== "undefined" ) { return context . getElementsByTagName ( tag ) ; } else if ( support . qsa ) { return context . querySelectorAll ( tag ) ; } } : function ( tag , context ) { var elem , tmp = [ ] , i = 0 , results = context . getElementsByTagName ( tag ) ; if ( tag === "*" ) { while ( ( elem = results [ i ++ ] ) ) { if ( elem . nodeType === 1 ) { tmp . push ( elem ) ; } }
return tmp ; }
return results ; } ; Expr . find [ "CLASS" ] = support . getElementsByClassName && function ( className , context ) { if ( typeof context . getElementsByClassName !== "undefined" && documentIsHTML ) { return context . getElementsByClassName ( className ) ; } } ; rbuggyMatches = [ ] ; rbuggyQSA = [ ] ; if ( ( support . qsa = rnative . test ( document . querySelectorAll ) ) ) { assert ( function ( el ) { docElem . appendChild ( el ) . innerHTML = "<a id='" + expando + "'></a>" +
"<select id='" + expando + "-\r\\' msallowcapture=''>" +
"<option selected=''></option></select>" ; if ( el . querySelectorAll ( "[msallowcapture^='']" ) . length ) { rbuggyQSA . push ( "[*^$]=" + whitespace + "*(?:''|\"\")" ) ; }
if ( ! el . querySelectorAll ( "[selected]" ) . length ) { rbuggyQSA . push ( "\\[" + whitespace + "*(?:value|" + booleans + ")" ) ; }
if ( ! el . querySelectorAll ( "[id~=" + expando + "-]" ) . length ) { rbuggyQSA . push ( "~=" ) ; }
if ( ! el . querySelectorAll ( ":checked" ) . length ) { rbuggyQSA . push ( ":checked" ) ; }
if ( ! el . querySelectorAll ( "a#" + expando + "+*" ) . length ) { rbuggyQSA . push ( ".#.+[+~]" ) ; } } ) ; assert ( function ( el ) { el . innerHTML = "<a href='' disabled='disabled'></a>" +
"<select disabled='disabled'><option/></select>" ; var input = document . createElement ( "input" ) ; input . setAttribute ( "type" , "hidden" ) ; el . appendChild ( input ) . setAttribute ( "name" , "D" ) ; if ( el . querySelectorAll ( "[name=d]" ) . length ) { rbuggyQSA . push ( "name" + whitespace + "*[*^$|!~]?=" ) ; }
if ( el . querySelectorAll ( ":enabled" ) . length !== 2 ) { rbuggyQSA . push ( ":enabled" , ":disabled" ) ; }
docElem . appendChild ( el ) . disabled = true ; if ( el . querySelectorAll ( ":disabled" ) . length !== 2 ) { rbuggyQSA . push ( ":enabled" , ":disabled" ) ; }
el . querySelectorAll ( "*,:x" ) ; rbuggyQSA . push ( ",.*:" ) ; } ) ; }
if ( ( support . matchesSelector = rnative . test ( ( matches = docElem . matches || docElem . webkitMatchesSelector || docElem . mozMatchesSelector || docElem . oMatchesSelector || docElem . msMatchesSelector ) ) ) ) { assert ( function ( el ) { support . disconnectedMatch = matches . call ( el , "*" ) ; matches . call ( el , "[s!='']:x" ) ; rbuggyMatches . push ( "!=" , pseudos ) ; } ) ; }
rbuggyQSA = rbuggyQSA . length && new RegExp ( rbuggyQSA . join ( "|" ) ) ; rbuggyMatches = rbuggyMatches . length && new RegExp ( rbuggyMatches . join ( "|" ) ) ; hasCompare = rnative . test ( docElem . compareDocumentPosition ) ; contains = hasCompare || rnative . test ( docElem . contains ) ? function ( a , b ) { var adown = a . nodeType === 9 ? a . documentElement : a , bup = b && b . parentNode ; return a === bup || ! ! ( bup && bup . nodeType === 1 && ( adown . contains ? adown . contains ( bup ) : a . compareDocumentPosition && a . compareDocumentPosition ( bup ) & 16 ) ) ; } : function ( a , b ) { if ( b ) { while ( ( b = b . parentNode ) ) { if ( b === a ) { return true ; } } }
return false ; } ; sortOrder = hasCompare ? function ( a , b ) { if ( a === b ) { hasDuplicate = true ; return 0 ; }
var compare = ! a . compareDocumentPosition - ! b . compareDocumentPosition ; if ( compare ) { return compare ; }
compare = ( a . ownerDocument || a ) === ( b . ownerDocument || b ) ? a . compareDocumentPosition ( b ) : 1 ; if ( compare & 1 || ( ! support . sortDetached && b . compareDocumentPosition ( a ) === compare ) ) { if ( a === document || a . ownerDocument === preferredDoc && contains ( preferredDoc , a ) ) { return - 1 ; }
if ( b === document || b . ownerDocument === preferredDoc && contains ( preferredDoc , b ) ) { return 1 ; }
return sortInput ? ( indexOf ( sortInput , a ) - indexOf ( sortInput , b ) ) : 0 ; }
return compare & 4 ? - 1 : 1 ; } : function ( a , b ) { if ( a === b ) { hasDuplicate = true ; return 0 ; }
var cur , i = 0 , aup = a . parentNode , bup = b . parentNode , ap = [ a ] , bp = [ b ] ; if ( ! aup || ! bup ) { return a === document ? - 1 : b === document ? 1 : aup ? - 1 : bup ? 1 : sortInput ? ( indexOf ( sortInput , a ) - indexOf ( sortInput , b ) ) : 0 ; } else if ( aup === bup ) { return siblingCheck ( a , b ) ; }
cur = a ; while ( ( cur = cur . parentNode ) ) { ap . unshift ( cur ) ; }
cur = b ; while ( ( cur = cur . parentNode ) ) { bp . unshift ( cur ) ; }
while ( ap [ i ] === bp [ i ] ) { i ++ ; }
return i ? siblingCheck ( ap [ i ] , bp [ i ] ) : ap [ i ] === preferredDoc ? - 1 : bp [ i ] === preferredDoc ? 1 : 0 ; } ; return document ; } ; Sizzle . matches = function ( expr , elements ) { return Sizzle ( expr , null , null , elements ) ; } ; Sizzle . matchesSelector = function ( elem , expr ) { if ( ( elem . ownerDocument || elem ) !== document ) { setDocument ( elem ) ; }
expr = expr . replace ( rattributeQuotes , "='$1']" ) ; if ( support . matchesSelector && documentIsHTML && ! compilerCache [ expr + " " ] && ( ! rbuggyMatches || ! rbuggyMatches . test ( expr ) ) && ( ! rbuggyQSA || ! rbuggyQSA . test ( expr ) ) ) { try { var ret = matches . call ( elem , expr ) ; if ( ret || support . disconnectedMatch || elem . document && elem . document . nodeType !== 11 ) { return ret ; } } catch ( e ) { } }
return Sizzle ( expr , document , null , [ elem ] ) . length > 0 ; } ; Sizzle . contains = function ( context , elem ) { if ( ( context . ownerDocument || context ) !== document ) { setDocument ( context ) ; }
return contains ( context , elem ) ; } ; Sizzle . attr = function ( elem , name ) { if ( ( elem . ownerDocument || elem ) !== document ) { setDocument ( elem ) ; }
var fn = Expr . attrHandle [ name . toLowerCase ( ) ] , val = fn && hasOwn . call ( Expr . attrHandle , name . toLowerCase ( ) ) ? fn ( elem , name , ! documentIsHTML ) : undefined ; return val !== undefined ? val : support . attributes || ! documentIsHTML ? elem . getAttribute ( name ) : ( val = elem . getAttributeNode ( name ) ) && val . specified ? val . value : null ; } ; Sizzle . escape = function ( sel ) { return ( sel + "" ) . replace ( rcssescape , fcssescape ) ; } ; Sizzle . error = function ( msg ) { throw new Error ( "Syntax error, unrecognized expression: " + msg ) ; } ; Sizzle . uniqueSort = function ( results ) { var elem , duplicates = [ ] , j = 0 , i = 0 ; hasDuplicate = ! support . detectDuplicates ; sortInput = ! support . sortStable && results . slice ( 0 ) ; results . sort ( sortOrder ) ; if ( hasDuplicate ) { while ( ( elem = results [ i ++ ] ) ) { if ( elem === results [ i ] ) { j = duplicates . push ( i ) ; } }
while ( j -- ) { results . splice ( duplicates [ j ] , 1 ) ; } }
sortInput = null ; return results ; } ; getText = Sizzle . getText = function ( elem ) { var node , ret = "" , i = 0 , nodeType = elem . nodeType ; if ( ! nodeType ) { while ( ( node = elem [ i ++ ] ) ) { ret += getText ( node ) ; } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { if ( typeof elem . textContent === "string" ) { return elem . textContent ; } else { for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) { ret += getText ( elem ) ; } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem . nodeValue ; }
return ret ; } ; Expr = Sizzle . selectors = { cacheLength : 50 , createPseudo : markFunction , match : matchExpr , attrHandle : { } , find : { } , relative : { ">" : { dir : "parentNode" , first : true } , " " : { dir : "parentNode" } , "+" : { dir : "previousSibling" , first : true } , "~" : { dir : "previousSibling" } } , preFilter : { "ATTR" : function ( match ) { match [ 1 ] = match [ 1 ] . replace ( runescape , funescape ) ; match [ 3 ] = ( match [ 3 ] || match [ 4 ] || match [ 5 ] || "" ) . replace ( runescape , funescape ) ; if ( match [ 2 ] === "~=" ) { match [ 3 ] = " " + match [ 3 ] + " " ; }
return match . slice ( 0 , 4 ) ; } , "CHILD" : function ( match ) { match [ 1 ] = match [ 1 ] . toLowerCase ( ) ; if ( match [ 1 ] . slice ( 0 , 3 ) === "nth" ) { if ( ! match [ 3 ] ) { Sizzle . error ( match [ 0 ] ) ; }
match [ 4 ] = + ( match [ 4 ] ? match [ 5 ] + ( match [ 6 ] || 1 ) : 2 * ( match [ 3 ] === "even" || match [ 3 ] === "odd" ) ) ; match [ 5 ] = + ( ( match [ 7 ] + match [ 8 ] ) || match [ 3 ] === "odd" ) ; } else if ( match [ 3 ] ) { Sizzle . error ( match [ 0 ] ) ; }
return match ; } , "PSEUDO" : function ( match ) { var excess , unquoted = ! match [ 6 ] && match [ 2 ] ; if ( matchExpr [ "CHILD" ] . test ( match [ 0 ] ) ) { return null ; }
if ( match [ 3 ] ) { match [ 2 ] = match [ 4 ] || match [ 5 ] || "" ; } else if ( unquoted && rpseudo . test ( unquoted ) && ( excess = tokenize ( unquoted , true ) ) && ( excess = unquoted . indexOf ( ")" , unquoted . length - excess ) - unquoted . length ) ) { match [ 0 ] = match [ 0 ] . slice ( 0 , excess ) ; match [ 2 ] = unquoted . slice ( 0 , excess ) ; }
return match . slice ( 0 , 3 ) ; } } , filter : { "TAG" : function ( nodeNameSelector ) { var nodeName = nodeNameSelector . replace ( runescape , funescape ) . toLowerCase ( ) ; return nodeNameSelector === "*" ? function ( ) { return true ; } : function ( elem ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === nodeName ; } ; } , "CLASS" : function ( className ) { var pattern = classCache [ className + " " ] ; return pattern || ( pattern = new RegExp ( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" ) ) && classCache ( className , function ( elem ) { return pattern . test ( typeof elem . className === "string" && elem . className || typeof elem . getAttribute !== "undefined" && elem . getAttribute ( "class" ) || "" ) ; } ) ; } , "ATTR" : function ( name , operator , check ) { return function ( elem ) { var result = Sizzle . attr ( elem , name ) ; if ( result == null ) { return operator === "!=" ; }
if ( ! operator ) { return true ; }
result += "" ; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result . indexOf ( check ) === 0 : operator === "*=" ? check && result . indexOf ( check ) > - 1 : operator === "$=" ? check && result . slice ( - check . length ) === check : operator === "~=" ? ( " " + result . replace ( rwhitespace , " " ) + " " ) . indexOf ( check ) > - 1 : operator === "|=" ? result === check || result . slice ( 0 , check . length + 1 ) === check + "-" : false ; } ; } , "CHILD" : function ( type , what , argument , first , last ) { var simple = type . slice ( 0 , 3 ) !== "nth" , forward = type . slice ( - 4 ) !== "last" , ofType = what === "of-type" ; return first === 1 && last === 0 ? function ( elem ) { return ! ! elem . parentNode ; } : function ( elem , context , xml ) { var cache , uniqueCache , outerCache , node , nodeIndex , start , dir = simple !== forward ? "nextSibling" : "previousSibling" , parent = elem . parentNode , name = ofType && elem . nodeName . toLowerCase ( ) , useCache = ! xml && ! ofType , diff = false ; if ( parent ) { if ( simple ) { while ( dir ) { node = elem ; while ( ( node = node [ dir ] ) ) { if ( ofType ? node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) { return false ; } }
start = dir = type === "only" && ! start && "nextSibling" ; }
return true ; }
start = [ forward ? parent . firstChild : parent . lastChild ] ; if ( forward && useCache ) { node = parent ; outerCache = node [ expando ] || ( node [ expando ] = { } ) ; uniqueCache = outerCache [ node . uniqueID ] || ( outerCache [ node . uniqueID ] = { } ) ; cache = uniqueCache [ type ] || [ ] ; nodeIndex = cache [ 0 ] === dirruns && cache [ 1 ] ; diff = nodeIndex && cache [ 2 ] ; node = nodeIndex && parent . childNodes [ nodeIndex ] ; while ( ( node = ++ nodeIndex && node && node [ dir ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) ) { if ( node . nodeType === 1 && ++ diff && node === elem ) { uniqueCache [ type ] = [ dirruns , nodeIndex , diff ] ; break ; } } } else { if ( useCache ) { node = elem ; outerCache = node [ expando ] || ( node [ expando ] = { } ) ; uniqueCache = outerCache [ node . uniqueID ] || ( outerCache [ node . uniqueID ] = { } ) ; cache = uniqueCache [ type ] || [ ] ; nodeIndex = cache [ 0 ] === dirruns && cache [ 1 ] ; diff = nodeIndex ; }
if ( diff === false ) { while ( ( node = ++ nodeIndex && node && node [ dir ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) ) { if ( ( ofType ? node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) && ++ diff ) { if ( useCache ) { outerCache = node [ expando ] || ( node [ expando ] = { } ) ; uniqueCache = outerCache [ node . uniqueID ] || ( outerCache [ node . uniqueID ] = { } ) ; uniqueCache [ type ] = [ dirruns , diff ] ; }
if ( node === elem ) { break ; } } } } }
diff -= last ; return diff === first || ( diff % first === 0 && diff / first >= 0 ) ; } } ; } , "PSEUDO" : function ( pseudo , argument ) { var args , fn = Expr . pseudos [ pseudo ] || Expr . setFilters [ pseudo . toLowerCase ( ) ] || Sizzle . error ( "unsupported pseudo: " + pseudo ) ; if ( fn [ expando ] ) { return fn ( argument ) ; }
if ( fn . length > 1 ) { args = [ pseudo , pseudo , "" , argument ] ; return Expr . setFilters . hasOwnProperty ( pseudo . toLowerCase ( ) ) ? markFunction ( function ( seed , matches ) { var idx , matched = fn ( seed , argument ) , i = matched . length ; while ( i -- ) { idx = indexOf ( seed , matched [ i ] ) ; seed [ idx ] = ! ( matches [ idx ] = matched [ i ] ) ; } } ) : function ( elem ) { return fn ( elem , 0 , args ) ; } ; }
return fn ; } } , pseudos : { "not" : markFunction ( function ( selector ) { var input = [ ] , results = [ ] , matcher = compile ( selector . replace ( rtrim , "$1" ) ) ; return matcher [ expando ] ? markFunction ( function ( seed , matches , context , xml ) { var elem , unmatched = matcher ( seed , null , xml , [ ] ) , i = seed . length ; while ( i -- ) { if ( ( elem = unmatched [ i ] ) ) { seed [ i ] = ! ( matches [ i ] = elem ) ; } } } ) : function ( elem , context , xml ) { input [ 0 ] = elem ; matcher ( input , null , xml , results ) ; input [ 0 ] = null ; return ! results . pop ( ) ; } ; } ) , "has" : markFunction ( function ( selector ) { return function ( elem ) { return Sizzle ( selector , elem ) . length > 0 ; } ; } ) , "contains" : markFunction ( function ( text ) { text = text . replace ( runescape , funescape ) ; return function ( elem ) { return ( elem . textContent || elem . innerText || getText ( elem ) ) . indexOf ( text ) > - 1 ; } ; } ) , "lang" : markFunction ( function ( lang ) { if ( ! ridentifier . test ( lang || "" ) ) { Sizzle . error ( "unsupported lang: " + lang ) ; }
lang = lang . replace ( runescape , funescape ) . toLowerCase ( ) ; return function ( elem ) { var elemLang ; do { if ( ( elemLang = documentIsHTML ? elem . lang : elem . getAttribute ( "xml:lang" ) || elem . getAttribute ( "lang" ) ) ) { elemLang = elemLang . toLowerCase ( ) ; return elemLang === lang || elemLang . indexOf ( lang + "-" ) === 0 ; } } while ( ( elem = elem . parentNode ) && elem . nodeType === 1 ) ; return false ; } ; } ) , "target" : function ( elem ) { var hash = window . location && window . location . hash ; return hash && hash . slice ( 1 ) === elem . id ; } , "root" : function ( elem ) { return elem === docElem ; } , "focus" : function ( elem ) { return elem === document . activeElement && ( ! document . hasFocus || document . hasFocus ( ) ) && ! ! ( elem . type || elem . href || ~ elem . tabIndex ) ; } , "enabled" : createDisabledPseudo ( false ) , "disabled" : createDisabledPseudo ( true ) , "checked" : function ( elem ) { var nodeName = elem . nodeName . toLowerCase ( ) ; return ( nodeName === "input" && ! ! elem . checked ) || ( nodeName === "option" && ! ! elem . selected ) ; } , "selected" : function ( elem ) { if ( elem . parentNode ) { elem . parentNode . selectedIndex ; }
return elem . selected === true ; } , "empty" : function ( elem ) { for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) { if ( elem . nodeType < 6 ) { return false ; } }
return true ; } , "parent" : function ( elem ) { return ! Expr . pseudos [ "empty" ] ( elem ) ; } , "header" : function ( elem ) { return rheader . test ( elem . nodeName ) ; } , "input" : function ( elem ) { return rinputs . test ( elem . nodeName ) ; } , "button" : function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === "button" || name === "button" ; } , "text" : function ( elem ) { var attr ; return elem . nodeName . toLowerCase ( ) === "input" && elem . type === "text" && ( ( attr = elem . getAttribute ( "type" ) ) == null || attr . toLowerCase ( ) === "text" ) ; } , "first" : createPositionalPseudo ( function ( ) { return [ 0 ] ; } ) , "last" : createPositionalPseudo ( function ( matchIndexes , length ) { return [ length - 1 ] ; } ) , "eq" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { return [ argument < 0 ? argument + length : argument ] ; } ) , "even" : createPositionalPseudo ( function ( matchIndexes , length ) { var i = 0 ; for ( ; i < length ; i += 2 ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "odd" : createPositionalPseudo ( function ( matchIndexes , length ) { var i = 1 ; for ( ; i < length ; i += 2 ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "lt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; -- i >= 0 ; ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "gt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; ++ i < length ; ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) } } ; Expr . pseudos [ "nth" ] = Expr . pseudos [ "eq" ] ; for ( i in { radio : true , checkbox : true , file : true , password : true , image : true } ) { Expr . pseudos [ i ] = createInputPseudo ( i ) ; }
for ( i in { submit : true , reset : true } ) { Expr . pseudos [ i ] = createButtonPseudo ( i ) ; }
function setFilters ( ) { }
setFilters . prototype = Expr . filters = Expr . pseudos ; Expr . setFilters = new setFilters ( ) ; tokenize = Sizzle . tokenize = function ( selector , parseOnly ) { var matched , match , tokens , type , soFar , groups , preFilters , cached = tokenCache [ selector + " " ] ; if ( cached ) { return parseOnly ? 0 : cached . slice ( 0 ) ; }
soFar = selector ; groups = [ ] ; preFilters = Expr . preFilter ; while ( soFar ) { if ( ! matched || ( match = rcomma . exec ( soFar ) ) ) { if ( match ) { soFar = soFar . slice ( match [ 0 ] . length ) || soFar ; }
groups . push ( ( tokens = [ ] ) ) ; }
matched = false ; if ( ( match = rcombinators . exec ( soFar ) ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : match [ 0 ] . replace ( rtrim , " " ) } ) ; soFar = soFar . slice ( matched . length ) ; }
for ( type in Expr . filter ) { if ( ( match = matchExpr [ type ] . exec ( soFar ) ) && ( ! preFilters [ type ] || ( match = preFilters [ type ] ( match ) ) ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : type , matches : match } ) ; soFar = soFar . slice ( matched . length ) ; } }
if ( ! matched ) { break ; } }
return parseOnly ? soFar . length : soFar ? Sizzle . error ( selector ) : tokenCache ( selector , groups ) . slice ( 0 ) ; } ; function toSelector ( tokens ) { var i = 0 , len = tokens . length , selector = "" ; for ( ; i < len ; i ++ ) { selector += tokens [ i ] . value ; }
return selector ; }
function addCombinator ( matcher , combinator , base ) { var dir = combinator . dir , skip = combinator . next , key = skip || dir , checkNonElements = base && key === "parentNode" , doneName = done ++ ; return combinator . first ? function ( elem , context , xml ) { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { return matcher ( elem , context , xml ) ; } }
return false ; } : function ( elem , context , xml ) { var oldCache , uniqueCache , outerCache , newCache = [ dirruns , doneName ] ; if ( xml ) { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { if ( matcher ( elem , context , xml ) ) { return true ; } } } } else { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { outerCache = elem [ expando ] || ( elem [ expando ] = { } ) ; uniqueCache = outerCache [ elem . uniqueID ] || ( outerCache [ elem . uniqueID ] = { } ) ; if ( skip && skip === elem . nodeName . toLowerCase ( ) ) { elem = elem [ dir ] || elem ; } else if ( ( oldCache = uniqueCache [ key ] ) && oldCache [ 0 ] === dirruns && oldCache [ 1 ] === doneName ) { return ( newCache [ 2 ] = oldCache [ 2 ] ) ; } else { uniqueCache [ key ] = newCache ; if ( ( newCache [ 2 ] = matcher ( elem , context , xml ) ) ) { return true ; } } } } }
return false ; } ; }
function elementMatcher ( matchers ) { return matchers . length > 1 ? function ( elem , context , xml ) { var i = matchers . length ; while ( i -- ) { if ( ! matchers [ i ] ( elem , context , xml ) ) { return false ; } }
return true ; } : matchers [ 0 ] ; }
function multipleContexts ( selector , contexts , results ) { var i = 0 , len = contexts . length ; for ( ; i < len ; i ++ ) { Sizzle ( selector , contexts [ i ] , results ) ; }
return results ; }
function condense ( unmatched , map , filter , context , xml ) { var elem , newUnmatched = [ ] , i = 0 , len = unmatched . length , mapped = map != null ; for ( ; i < len ; i ++ ) { if ( ( elem = unmatched [ i ] ) ) { if ( ! filter || filter ( elem , context , xml ) ) { newUnmatched . push ( elem ) ; if ( mapped ) { map . push ( i ) ; } } } }
return newUnmatched ; }
function setMatcher ( preFilter , selector , matcher , postFilter , postFinder , postSelector ) { if ( postFilter && ! postFilter [ expando ] ) { postFilter = setMatcher ( postFilter ) ; }
if ( postFinder && ! postFinder [ expando ] ) { postFinder = setMatcher ( postFinder , postSelector ) ; }
return markFunction ( function ( seed , results , context , xml ) { var temp , i , elem , preMap = [ ] , postMap = [ ] , preexisting = results . length , elems = seed || multipleContexts ( selector || "*" , context . nodeType ? [ context ] : context , [ ] ) , matcherIn = preFilter && ( seed || ! selector ) ? condense ( elems , preMap , preFilter , context , xml ) : elems , matcherOut = matcher ? postFinder || ( seed ? preFilter : preexisting || postFilter ) ? [ ] : results : matcherIn ; if ( matcher ) { matcher ( matcherIn , matcherOut , context , xml ) ; }
if ( postFilter ) { temp = condense ( matcherOut , postMap ) ; postFilter ( temp , [ ] , context , xml ) ; i = temp . length ; while ( i -- ) { if ( ( elem = temp [ i ] ) ) { matcherOut [ postMap [ i ] ] = ! ( matcherIn [ postMap [ i ] ] = elem ) ; } } }
if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { temp = [ ] ; i = matcherOut . length ; while ( i -- ) { if ( ( elem = matcherOut [ i ] ) ) { temp . push ( ( matcherIn [ i ] = elem ) ) ; } }
postFinder ( null , ( matcherOut = [ ] ) , temp , xml ) ; }
i = matcherOut . length ; while ( i -- ) { if ( ( elem = matcherOut [ i ] ) && ( temp = postFinder ? indexOf ( seed , elem ) : preMap [ i ] ) > - 1 ) { seed [ temp ] = ! ( results [ temp ] = elem ) ; } } }
} else { matcherOut = condense ( matcherOut === results ? matcherOut . splice ( preexisting , matcherOut . length ) : matcherOut ) ; if ( postFinder ) { postFinder ( null , results , matcherOut , xml ) ; } else { push . apply ( results , matcherOut ) ; } } } ) ; }
function matcherFromTokens ( tokens ) { var checkContext , matcher , j , len = tokens . length , leadingRelative = Expr . relative [ tokens [ 0 ] . type ] , implicitRelative = leadingRelative || Expr . relative [ " " ] , i = leadingRelative ? 1 : 0 , matchContext = addCombinator ( function ( elem ) { return elem === checkContext ; } , implicitRelative , true ) , matchAnyContext = addCombinator ( function ( elem ) { return indexOf ( checkContext , elem ) > - 1 ; } , implicitRelative , true ) , matchers = [ function ( elem , context , xml ) { var ret = ( ! leadingRelative && ( xml || context !== outermostContext ) ) || ( ( checkContext = context ) . nodeType ? matchContext ( elem , context , xml ) : matchAnyContext ( elem , context , xml ) ) ; checkContext = null ; return ret ; } ] ; for ( ; i < len ; i ++ ) { if ( ( matcher = Expr . relative [ tokens [ i ] . type ] ) ) { matchers = [ addCombinator ( elementMatcher ( matchers ) , matcher ) ] ; } else { matcher = Expr . filter [ tokens [ i ] . type ] . apply ( null , tokens [ i ] . matches ) ; if ( matcher [ expando ] ) { j = ++ i ; for ( ; j < len ; j ++ ) { if ( Expr . relative [ tokens [ j ] . type ] ) { break ; } }
return setMatcher ( i > 1 && elementMatcher ( matchers ) , i > 1 && toSelector ( tokens . slice ( 0 , i - 1 ) . concat ( { value : tokens [ i - 2 ] . type === " " ? "*" : "" } ) ) . replace ( rtrim , "$1" ) , matcher , i < j && matcherFromTokens ( tokens . slice ( i , j ) ) , j < len && matcherFromTokens ( ( tokens = tokens . slice ( j ) ) ) , j < len && toSelector ( tokens ) ) ; }
matchers . push ( matcher ) ; } }
return elementMatcher ( matchers ) ; }
function matcherFromGroupMatchers ( elementMatchers , setMatchers ) { var bySet = setMatchers . length > 0 , byElement = elementMatchers . length > 0 , superMatcher = function ( seed , context , xml , results , outermost ) { var elem , j , matcher , matchedCount = 0 , i = "0" , unmatched = seed && [ ] , setMatched = [ ] , contextBackup = outermostContext , elems = seed || byElement && Expr . find [ "TAG" ] ( "*" , outermost ) , dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math . random ( ) || 0.1 ) , len = elems . length ; if ( outermost ) { outermostContext = context === document || context || outermost ; }
for ( ; i !== len && ( elem = elems [ i ] ) != null ; i ++ ) { if ( byElement && elem ) { j = 0 ; if ( ! context && elem . ownerDocument !== document ) { setDocument ( elem ) ; xml = ! documentIsHTML ; }
while ( ( matcher = elementMatchers [ j ++ ] ) ) { if ( matcher ( elem , context || document , xml ) ) { results . push ( elem ) ; break ; } }
if ( outermost ) { dirruns = dirrunsUnique ; } }
if ( bySet ) { if ( ( elem = ! matcher && elem ) ) { matchedCount -- ; }
if ( seed ) { unmatched . push ( elem ) ; } } }
matchedCount += i ; if ( bySet && i !== matchedCount ) { j = 0 ; while ( ( matcher = setMatchers [ j ++ ] ) ) { matcher ( unmatched , setMatched , context , xml ) ; }
if ( seed ) { if ( matchedCount > 0 ) { while ( i -- ) { if ( ! ( unmatched [ i ] || setMatched [ i ] ) ) { setMatched [ i ] = pop . call ( results ) ; } } }
setMatched = condense ( setMatched ) ; }
push . apply ( results , setMatched ) ; if ( outermost && ! seed && setMatched . length > 0 && ( matchedCount + setMatchers . length ) > 1 ) { Sizzle . uniqueSort ( results ) ; } }
if ( outermost ) { dirruns = dirrunsUnique ; outermostContext = contextBackup ; }
return unmatched ; } ; return bySet ? markFunction ( superMatcher ) : superMatcher ; }
compile = Sizzle . compile = function ( selector , match ) { var i , setMatchers = [ ] , elementMatchers = [ ] , cached = compilerCache [ selector + " " ] ; if ( ! cached ) { if ( ! match ) { match = tokenize ( selector ) ; }
i = match . length ; while ( i -- ) { cached = matcherFromTokens ( match [ i ] ) ; if ( cached [ expando ] ) { setMatchers . push ( cached ) ; } else { elementMatchers . push ( cached ) ; } }
cached = compilerCache ( selector , matcherFromGroupMatchers ( elementMatchers , setMatchers ) ) ; cached . selector = selector ; }
return cached ; } ; select = Sizzle . select = function ( selector , context , results , seed ) { var i , tokens , token , type , find , compiled = typeof selector === "function" && selector , match = ! seed && tokenize ( ( selector = compiled . selector || selector ) ) ; results = results || [ ] ; if ( match . length === 1 ) { tokens = match [ 0 ] = match [ 0 ] . slice ( 0 ) ; if ( tokens . length > 2 && ( token = tokens [ 0 ] ) . type === "ID" && context . nodeType === 9 && documentIsHTML && Expr . relative [ tokens [ 1 ] . type ] ) { context = ( Expr . find [ "ID" ] ( token . matches [ 0 ] . replace ( runescape , funescape ) , context ) || [ ] ) [ 0 ] ; if ( ! context ) { return results ; } else if ( compiled ) { context = context . parentNode ; }
selector = selector . slice ( tokens . shift ( ) . value . length ) ; }
i = matchExpr [ "needsContext" ] . test ( selector ) ? 0 : tokens . length ; while ( i -- ) { token = tokens [ i ] ; if ( Expr . relative [ ( type = token . type ) ] ) { break ; }
if ( ( find = Expr . find [ type ] ) ) { if ( ( seed = find ( token . matches [ 0 ] . replace ( runescape , funescape ) , rsibling . test ( tokens [ 0 ] . type ) && testContext ( context . parentNode ) || context ) ) ) { tokens . splice ( i , 1 ) ; selector = seed . length && toSelector ( tokens ) ; if ( ! selector ) { push . apply ( results , seed ) ; return results ; }
break ; } } } }
( compiled || compile ( selector , match ) ) ( seed , context , ! documentIsHTML , results , ! context || rsibling . test ( selector ) && testContext ( context . parentNode ) || context ) ; return results ; } ; support . sortStable = expando . split ( "" ) . sort ( sortOrder ) . join ( "" ) === expando ; support . detectDuplicates = ! ! hasDuplicate ; setDocument ( ) ; support . sortDetached = assert ( function ( el ) { return el . compareDocumentPosition ( document . createElement ( "fieldset" ) ) & 1 ; } ) ; if ( ! assert ( function ( el ) { el . innerHTML = "<a href='#'></a>" ; return el . firstChild . getAttribute ( "href" ) === "#" ; } ) ) { addHandle ( "type|href|height|width" , function ( elem , name , isXML ) { if ( ! isXML ) { return elem . getAttribute ( name , name . toLowerCase ( ) === "type" ? 1 : 2 ) ; } } ) ; }
if ( ! support . attributes || ! assert ( function ( el ) { el . innerHTML = "<input/>" ; el . firstChild . setAttribute ( "value" , "" ) ; return el . firstChild . getAttribute ( "value" ) === "" ; } ) ) { addHandle ( "value" , function ( elem , name , isXML ) { if ( ! isXML && elem . nodeName . toLowerCase ( ) === "input" ) { return elem . defaultValue ; } } ) ; }
if ( ! assert ( function ( el ) { return el . getAttribute ( "disabled" ) == null ; } ) ) { addHandle ( booleans , function ( elem , name , isXML ) { var val ; if ( ! isXML ) { return elem [ name ] === true ? name . toLowerCase ( ) : ( val = elem . getAttributeNode ( name ) ) && val . specified ? val . value : null ; } } ) ; }
return Sizzle ; } ) ( window ) ; jQuery . find = Sizzle ; jQuery . expr = Sizzle . selectors ; jQuery . expr [ ":" ] = jQuery . expr . pseudos ; jQuery . uniqueSort = jQuery . unique = Sizzle . uniqueSort ; jQuery . text = Sizzle . getText ; jQuery . isXMLDoc = Sizzle . isXML ; jQuery . contains = Sizzle . contains ; jQuery . escapeSelector = Sizzle . escape ; var dir = function ( elem , dir , until ) { var matched = [ ] , truncate = until !== undefined ; while ( ( elem = elem [ dir ] ) && elem . nodeType !== 9 ) { if ( elem . nodeType === 1 ) { if ( truncate && jQuery ( elem ) . is ( until ) ) { break ; }
matched . push ( elem ) ; } }
return matched ; } ; var siblings = function ( n , elem ) { var matched = [ ] ; for ( ; n ; n = n . nextSibling ) { if ( n . nodeType === 1 && n !== elem ) { matched . push ( n ) ; } }
return matched ; } ; var rneedsContext = jQuery . expr . match . needsContext ; function nodeName ( elem , name ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === name . toLowerCase ( ) ; } ; var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ) ; function winnow ( elements , qualifier , not ) { if ( isFunction ( qualifier ) ) { return jQuery . grep ( elements , function ( elem , i ) { return ! ! qualifier . call ( elem , i , elem ) !== not ; } ) ; }
if ( qualifier . nodeType ) { return jQuery . grep ( elements , function ( elem ) { return ( elem === qualifier ) !== not ; } ) ; }
if ( typeof qualifier !== "string" ) { return jQuery . grep ( elements , function ( elem ) { return ( indexOf . call ( qualifier , elem ) > - 1 ) !== not ; } ) ; }
return jQuery . filter ( qualifier , elements , not ) ; }
jQuery . filter = function ( expr , elems , not ) { var elem = elems [ 0 ] ; if ( not ) { expr = ":not(" + expr + ")" ; }
if ( elems . length === 1 && elem . nodeType === 1 ) { return jQuery . find . matchesSelector ( elem , expr ) ? [ elem ] : [ ] ; }
return jQuery . find . matches ( expr , jQuery . grep ( elems , function ( elem ) { return elem . nodeType === 1 ; } ) ) ; } ; jQuery . fn . extend ( { find : function ( selector ) { var i , ret , len = this . length , self = this ; if ( typeof selector !== "string" ) { return this . pushStack ( jQuery ( selector ) . filter ( function ( ) { for ( i = 0 ; i < len ; i ++ ) { if ( jQuery . contains ( self [ i ] , this ) ) { return true ; } } } ) ) ; }
ret = this . pushStack ( [ ] ) ; for ( i = 0 ; i < len ; i ++ ) { jQuery . find ( selector , self [ i ] , ret ) ; }
return len > 1 ? jQuery . uniqueSort ( ret ) : ret ; } , filter : function ( selector ) { return this . pushStack ( winnow ( this , selector || [ ] , false ) ) ; } , not : function ( selector ) { return this . pushStack ( winnow ( this , selector || [ ] , true ) ) ; } , is : function ( selector ) { return ! ! winnow ( this , typeof selector === "string" && rneedsContext . test ( selector ) ? jQuery ( selector ) : selector || [ ] , false ) . length ; } } ) ; var rootjQuery , rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/ , init = jQuery . fn . init = function ( selector , context , root ) { var match , elem ; if ( ! selector ) { return this ; }
root = root || rootjQuery ; if ( typeof selector === "string" ) { if ( selector [ 0 ] === "<" && selector [ selector . length - 1 ] === ">" && selector . length >= 3 ) { match = [ null , selector , null ] ; } else { match = rquickExpr . exec ( selector ) ; }
if ( match && ( match [ 1 ] || ! context ) ) { if ( match [ 1 ] ) { context = context instanceof jQuery ? context [ 0 ] : context ; jQuery . merge ( this , jQuery . parseHTML ( match [ 1 ] , context && context . nodeType ? context . ownerDocument || context : document , true ) ) ; if ( rsingleTag . test ( match [ 1 ] ) && jQuery . isPlainObject ( context ) ) { for ( match in context ) { if ( isFunction ( this [ match ] ) ) { this [ match ] ( context [ match ] ) ; } else { this . attr ( match , context [ match ] ) ; } } }
return this ; } else { elem = document . getElementById ( match [ 2 ] ) ; if ( elem ) { this [ 0 ] = elem ; this . length = 1 ; }
return this ; }
} else if ( ! context || context . jquery ) { return ( context || root ) . find ( selector ) ; } else { return this . constructor ( context ) . find ( selector ) ; }
} else if ( selector . nodeType ) { this [ 0 ] = selector ; this . length = 1 ; return this ; } else if ( isFunction ( selector ) ) { return root . ready !== undefined ? root . ready ( selector ) : selector ( jQuery ) ; }
return jQuery . makeArray ( selector , this ) ; } ; init . prototype = jQuery . fn ; rootjQuery = jQuery ( document ) ; var rparentsprev = /^(?:parents|prev(?:Until|All))/ , guaranteedUnique = { children : true , contents : true , next : true , prev : true } ; jQuery . fn . extend ( { has : function ( target ) { var targets = jQuery ( target , this ) , l = targets . length ; return this . filter ( function ( ) { var i = 0 ; for ( ; i < l ; i ++ ) { if ( jQuery . contains ( this , targets [ i ] ) ) { return true ; } } } ) ; } , closest : function ( selectors , context ) { var cur , i = 0 , l = this . length , matched = [ ] , targets = typeof selectors !== "string" && jQuery ( selectors ) ; if ( ! rneedsContext . test ( selectors ) ) { for ( ; i < l ; i ++ ) { for ( cur = this [ i ] ; cur && cur !== context ; cur = cur . parentNode ) { if ( cur . nodeType < 11 && ( targets ? targets . index ( cur ) > - 1 : cur . nodeType === 1 && jQuery . find . matchesSelector ( cur , selectors ) ) ) { matched . push ( cur ) ; break ; } } } }
return this . pushStack ( matched . length > 1 ? jQuery . uniqueSort ( matched ) : matched ) ; } , index : function ( elem ) { if ( ! elem ) { return ( this [ 0 ] && this [ 0 ] . parentNode ) ? this . first ( ) . prevAll ( ) . length : - 1 ; }
if ( typeof elem === "string" ) { return indexOf . call ( jQuery ( elem ) , this [ 0 ] ) ; }
return indexOf . call ( this , elem . jquery ? elem [ 0 ] : elem ) ; } , add : function ( selector , context ) { return this . pushStack ( jQuery . uniqueSort ( jQuery . merge ( this . get ( ) , jQuery ( selector , context ) ) ) ) ; } , addBack : function ( selector ) { return this . add ( selector == null ? this . prevObject : this . prevObject . filter ( selector ) ) ; } } ) ; function sibling ( cur , dir ) { while ( ( cur = cur [ dir ] ) && cur . nodeType !== 1 ) { }
return cur ; }
jQuery . each ( { parent : function ( elem ) { var parent = elem . parentNode ; return parent && parent . nodeType !== 11 ? parent : null ; } , parents : function ( elem ) { return dir ( elem , "parentNode" ) ; } , parentsUntil : function ( elem , i , until ) { return dir ( elem , "parentNode" , until ) ; } , next : function ( elem ) { return sibling ( elem , "nextSibling" ) ; } , prev : function ( elem ) { return sibling ( elem , "previousSibling" ) ; } , nextAll : function ( elem ) { return dir ( elem , "nextSibling" ) ; } , prevAll : function ( elem ) { return dir ( elem , "previousSibling" ) ; } , nextUntil : function ( elem , i , until ) { return dir ( elem , "nextSibling" , until ) ; } , prevUntil : function ( elem , i , until ) { return dir ( elem , "previousSibling" , until ) ; } , siblings : function ( elem ) { return siblings ( ( elem . parentNode || { } ) . firstChild , elem ) ; } , children : function ( elem ) { return siblings ( elem . firstChild ) ; } , contents : function ( elem ) { if ( nodeName ( elem , "iframe" ) ) { return elem . contentDocument ; }
if ( nodeName ( elem , "template" ) ) { elem = elem . content || elem ; }
return jQuery . merge ( [ ] , elem . childNodes ) ; } } , function ( name , fn ) { jQuery . fn [ name ] = function ( until , selector ) { var matched = jQuery . map ( this , fn , until ) ; if ( name . slice ( - 5 ) !== "Until" ) { selector = until ; }
if ( selector && typeof selector === "string" ) { matched = jQuery . filter ( selector , matched ) ; }
if ( this . length > 1 ) { if ( ! guaranteedUnique [ name ] ) { jQuery . uniqueSort ( matched ) ; }
if ( rparentsprev . test ( name ) ) { matched . reverse ( ) ; } }
return this . pushStack ( matched ) ; } ; } ) ; var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ) ; function createOptions ( options ) { var object = { } ; jQuery . each ( options . match ( rnothtmlwhite ) || [ ] , function ( _ , flag ) { object [ flag ] = true ; } ) ; return object ; }
jQuery . Callbacks = function ( options ) { options = typeof options === "string" ? createOptions ( options ) : jQuery . extend ( { } , options ) ; var
firing , memory , fired , locked , list = [ ] , queue = [ ] , firingIndex = - 1 , fire = function ( ) { locked = locked || options . once ; fired = firing = true ; for ( ; queue . length ; firingIndex = - 1 ) { memory = queue . shift ( ) ; while ( ++ firingIndex < list . length ) { if ( list [ firingIndex ] . apply ( memory [ 0 ] , memory [ 1 ] ) === false && options . stopOnFalse ) { firingIndex = list . length ; memory = false ; } } }
if ( ! options . memory ) { memory = false ; }
firing = false ; if ( locked ) { if ( memory ) { list = [ ] ; } else { list = "" ; } } } , self = { add : function ( ) { if ( list ) { if ( memory && ! firing ) { firingIndex = list . length - 1 ; queue . push ( memory ) ; }
( function add ( args ) { jQuery . each ( args , function ( _ , arg ) { if ( isFunction ( arg ) ) { if ( ! options . unique || ! self . has ( arg ) ) { list . push ( arg ) ; } } else if ( arg && arg . length && toType ( arg ) !== "string" ) { add ( arg ) ; } } ) ; } ) ( arguments ) ; if ( memory && ! firing ) { fire ( ) ; } }
return this ; } , remove : function ( ) { jQuery . each ( arguments , function ( _ , arg ) { var index ; while ( ( index = jQuery . inArray ( arg , list , index ) ) > - 1 ) { list . splice ( index , 1 ) ; if ( index <= firingIndex ) { firingIndex -- ; } } } ) ; return this ; } , has : function ( fn ) { return fn ? jQuery . inArray ( fn , list ) > - 1 : list . length > 0 ; } , empty : function ( ) { if ( list ) { list = [ ] ; }
return this ; } , disable : function ( ) { locked = queue = [ ] ; list = memory = "" ; return this ; } , disabled : function ( ) { return ! list ; } , lock : function ( ) { locked = queue = [ ] ; if ( ! memory && ! firing ) { list = memory = "" ; }
return this ; } , locked : function ( ) { return ! ! locked ; } , fireWith : function ( context , args ) { if ( ! locked ) { args = args || [ ] ; args = [ context , args . slice ? args . slice ( ) : args ] ; queue . push ( args ) ; if ( ! firing ) { fire ( ) ; } }
return this ; } , fire : function ( ) { self . fireWith ( this , arguments ) ; return this ; } , fired : function ( ) { return ! ! fired ; } } ; return self ; } ; function Identity ( v ) { return v ; }
function Thrower ( ex ) { throw ex ; }
function adoptValue ( value , resolve , reject , noValue ) { var method ; try { if ( value && isFunction ( ( method = value . promise ) ) ) { method . call ( value ) . done ( resolve ) . fail ( reject ) ; } else if ( value && isFunction ( ( method = value . then ) ) ) { method . call ( value , resolve , reject ) ; } else { resolve . apply ( undefined , [ value ] . slice ( noValue ) ) ; }
} catch ( value ) { reject . apply ( undefined , [ value ] ) ; } }
jQuery . extend ( { Deferred : function ( func ) { var tuples = [ [ "notify" , "progress" , jQuery . Callbacks ( "memory" ) , jQuery . Callbacks ( "memory" ) , 2 ] , [ "resolve" , "done" , jQuery . Callbacks ( "once memory" ) , jQuery . Callbacks ( "once memory" ) , 0 , "resolved" ] , [ "reject" , "fail" , jQuery . Callbacks ( "once memory" ) , jQuery . Callbacks ( "once memory" ) , 1 , "rejected" ] ] , state = "pending" , promise = { state : function ( ) { return state ; } , always : function ( ) { deferred . done ( arguments ) . fail ( arguments ) ; return this ; } , "catch" : function ( fn ) { return promise . then ( null , fn ) ; } , pipe : function ( ) { var fns = arguments ; return jQuery . Deferred ( function ( newDefer ) { jQuery . each ( tuples , function ( i , tuple ) { var fn = isFunction ( fns [ tuple [ 4 ] ] ) && fns [ tuple [ 4 ] ] ; deferred [ tuple [ 1 ] ] ( function ( ) { var returned = fn && fn . apply ( this , arguments ) ; if ( returned && isFunction ( returned . promise ) ) { returned . promise ( ) . progress ( newDefer . notify ) . done ( newDefer . resolve ) . fail ( newDefer . reject ) ; } else { newDefer [ tuple [ 0 ] + "With" ] ( this , fn ? [ returned ] : arguments ) ; } } ) ; } ) ; fns = null ; } ) . promise ( ) ; } , then : function ( onFulfilled , onRejected , onProgress ) { var maxDepth = 0 ; function resolve ( depth , deferred , handler , special ) { return function ( ) { var that = this , args = arguments , mightThrow = function ( ) { var returned , then ; if ( depth < maxDepth ) { return ; }
returned = handler . apply ( that , args ) ; if ( returned === deferred . promise ( ) ) { throw new TypeError ( "Thenable self-resolution" ) ; }
then = returned && ( typeof returned === "object" || typeof returned === "function" ) && returned . then ; if ( isFunction ( then ) ) { if ( special ) { then . call ( returned , resolve ( maxDepth , deferred , Identity , special ) , resolve ( maxDepth , deferred , Thrower , special ) ) ; } else { maxDepth ++ ; then . call ( returned , resolve ( maxDepth , deferred , Identity , special ) , resolve ( maxDepth , deferred , Thrower , special ) , resolve ( maxDepth , deferred , Identity , deferred . notifyWith ) ) ; }
} else { if ( handler !== Identity ) { that = undefined ; args = [ returned ] ; }
( special || deferred . resolveWith ) ( that , args ) ; } } , process = special ? mightThrow : function ( ) { try { mightThrow ( ) ; } catch ( e ) { if ( jQuery . Deferred . exceptionHook ) { jQuery . Deferred . exceptionHook ( e , process . stackTrace ) ; }
if ( depth + 1 >= maxDepth ) { if ( handler !== Thrower ) { that = undefined ; args = [ e ] ; }
deferred . rejectWith ( that , args ) ; } } } ; if ( depth ) { process ( ) ; } else { if ( jQuery . Deferred . getStackHook ) { process . stackTrace = jQuery . Deferred . getStackHook ( ) ; }
window . setTimeout ( process ) ; } } ; }
return jQuery . Deferred ( function ( newDefer ) { tuples [ 0 ] [ 3 ] . add ( resolve ( 0 , newDefer , isFunction ( onProgress ) ? onProgress : Identity , newDefer . notifyWith ) ) ; tuples [ 1 ] [ 3 ] . add ( resolve ( 0 , newDefer , isFunction ( onFulfilled ) ? onFulfilled : Identity ) ) ; tuples [ 2 ] [ 3 ] . add ( resolve ( 0 , newDefer , isFunction ( onRejected ) ? onRejected : Thrower ) ) ; } ) . promise ( ) ; } , promise : function ( obj ) { return obj != null ? jQuery . extend ( obj , promise ) : promise ; } } , deferred = { } ; jQuery . each ( tuples , function ( i , tuple ) { var list = tuple [ 2 ] , stateString = tuple [ 5 ] ; promise [ tuple [ 1 ] ] = list . add ; if ( stateString ) { list . add ( function ( ) { state = stateString ; } , tuples [ 3 - i ] [ 2 ] . disable , tuples [ 3 - i ] [ 3 ] . disable , tuples [ 0 ] [ 2 ] . lock , tuples [ 0 ] [ 3 ] . lock ) ; }
list . add ( tuple [ 3 ] . fire ) ; deferred [ tuple [ 0 ] ] = function ( ) { deferred [ tuple [ 0 ] + "With" ] ( this === deferred ? undefined : this , arguments ) ; return this ; } ; deferred [ tuple [ 0 ] + "With" ] = list . fireWith ; } ) ; promise . promise ( deferred ) ; if ( func ) { func . call ( deferred , deferred ) ; }
return deferred ; } , when : function ( singleValue ) { var
remaining = arguments . length , i = remaining , resolveContexts = Array ( i ) , resolveValues = slice . call ( arguments ) , master = jQuery . Deferred ( ) , updateFunc = function ( i ) { return function ( value ) { resolveContexts [ i ] = this ; resolveValues [ i ] = arguments . length > 1 ? slice . call ( arguments ) : value ; if ( ! ( -- remaining ) ) { master . resolveWith ( resolveContexts , resolveValues ) ; } } ; } ; if ( remaining <= 1 ) { adoptValue ( singleValue , master . done ( updateFunc ( i ) ) . resolve , master . reject , ! remaining ) ; if ( master . state ( ) === "pending" || isFunction ( resolveValues [ i ] && resolveValues [ i ] . then ) ) { return master . then ( ) ; } }
while ( i -- ) { adoptValue ( resolveValues [ i ] , updateFunc ( i ) , master . reject ) ; }
return master . promise ( ) ; } } ) ; var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/ ; jQuery . Deferred . exceptionHook = function ( error , stack ) { if ( window . console && window . console . warn && error && rerrorNames . test ( error . name ) ) { window . console . warn ( "jQuery.Deferred exception: " + error . message , error . stack , stack ) ; } } ; jQuery . readyException = function ( error ) { window . setTimeout ( function ( ) { throw error ; } ) ; } ; var readyList = jQuery . Deferred ( ) ; jQuery . fn . ready = function ( fn ) { readyList . then ( fn )
. catch ( function ( error ) { jQuery . readyException ( error ) ; } ) ; return this ; } ; jQuery . extend ( { isReady : false , readyWait : 1 , ready : function ( wait ) { if ( wait === true ? -- jQuery . readyWait : jQuery . isReady ) { return ; }
jQuery . isReady = true ; if ( wait !== true && -- jQuery . readyWait > 0 ) { return ; }
readyList . resolveWith ( document , [ jQuery ] ) ; } } ) ; jQuery . ready . then = readyList . then ; function completed ( ) { document . removeEventListener ( "DOMContentLoaded" , completed ) ; window . removeEventListener ( "load" , completed ) ; jQuery . ready ( ) ; }
if ( document . readyState === "complete" || ( document . readyState !== "loading" && ! document . documentElement . doScroll ) ) { window . setTimeout ( jQuery . ready ) ; } else { document . addEventListener ( "DOMContentLoaded" , completed ) ; window . addEventListener ( "load" , completed ) ; }
var access = function ( elems , fn , key , value , chainable , emptyGet , raw ) { var i = 0 , len = elems . length , bulk = key == null ; if ( toType ( key ) === "object" ) { chainable = true ; for ( i in key ) { access ( elems , fn , i , key [ i ] , true , emptyGet , raw ) ; }
} else if ( value !== undefined ) { chainable = true ; if ( ! isFunction ( value ) ) { raw = true ; }
if ( bulk ) { if ( raw ) { fn . call ( elems , value ) ; fn = null ; } else { bulk = fn ; fn = function ( elem , key , value ) { return bulk . call ( jQuery ( elem ) , value ) ; } ; } }
if ( fn ) { for ( ; i < len ; i ++ ) { fn ( elems [ i ] , key , raw ? value : value . call ( elems [ i ] , i , fn ( elems [ i ] , key ) ) ) ; } } }
if ( chainable ) { return elems ; }
if ( bulk ) { return fn . call ( elems ) ; }
return len ? fn ( elems [ 0 ] , key ) : emptyGet ; } ; var rmsPrefix = /^-ms-/ , rdashAlpha = /-([a-z])/g ; function fcamelCase ( all , letter ) { return letter . toUpperCase ( ) ; }
function camelCase ( string ) { return string . replace ( rmsPrefix , "ms-" ) . replace ( rdashAlpha , fcamelCase ) ; }
var acceptData = function ( owner ) { return owner . nodeType === 1 || owner . nodeType === 9 || ! ( + owner . nodeType ) ; } ; function Data ( ) { this . expando = jQuery . expando + Data . uid ++ ; }
Data . uid = 1 ; Data . prototype = { cache : function ( owner ) { var value = owner [ this . expando ] ; if ( ! value ) { value = { } ; if ( acceptData ( owner ) ) { if ( owner . nodeType ) { owner [ this . expando ] = value ; } else { Object . defineProperty ( owner , this . expando , { value : value , configurable : true } ) ; } } }
return value ; } , set : function ( owner , data , value ) { var prop , cache = this . cache ( owner ) ; if ( typeof data === "string" ) { cache [ camelCase ( data ) ] = value ; } else { for ( prop in data ) { cache [ camelCase ( prop ) ] = data [ prop ] ; } }
return cache ; } , get : function ( owner , key ) { return key === undefined ? this . cache ( owner ) : owner [ this . expando ] && owner [ this . expando ] [ camelCase ( key ) ] ; } , access : function ( owner , key , value ) { if ( key === undefined || ( ( key && typeof key === "string" ) && value === undefined ) ) { return this . get ( owner , key ) ; }
this . set ( owner , key , value ) ; return value !== undefined ? value : key ; } , remove : function ( owner , key ) { var i , cache = owner [ this . expando ] ; if ( cache === undefined ) { return ; }
if ( key !== undefined ) { if ( Array . isArray ( key ) ) { key = key . map ( camelCase ) ; } else { key = camelCase ( key ) ; key = key in cache ? [ key ] : ( key . match ( rnothtmlwhite ) || [ ] ) ; }
i = key . length ; while ( i -- ) { delete cache [ key [ i ] ] ; } }
if ( key === undefined || jQuery . isEmptyObject ( cache ) ) { if ( owner . nodeType ) { owner [ this . expando ] = undefined ; } else { delete owner [ this . expando ] ; } } } , hasData : function ( owner ) { var cache = owner [ this . expando ] ; return cache !== undefined && ! jQuery . isEmptyObject ( cache ) ; } } ; var dataPriv = new Data ( ) ; var dataUser = new Data ( ) ; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/ , rmultiDash = /[A-Z]/g ; function getData ( data ) { if ( data === "true" ) { return true ; }
if ( data === "false" ) { return false ; }
if ( data === "null" ) { return null ; }
if ( data === + data + "" ) { return + data ; }
if ( rbrace . test ( data ) ) { return JSON . parse ( data ) ; }
return data ; }
function dataAttr ( elem , key , data ) { var name ; if ( data === undefined && elem . nodeType === 1 ) { name = "data-" + key . replace ( rmultiDash , "-$&" ) . toLowerCase ( ) ; data = elem . getAttribute ( name ) ; if ( typeof data === "string" ) { try { data = getData ( data ) ; } catch ( e ) { }
dataUser . set ( elem , key , data ) ; } else { data = undefined ; } }
return data ; }
jQuery . extend ( { hasData : function ( elem ) { return dataUser . hasData ( elem ) || dataPriv . hasData ( elem ) ; } , data : function ( elem , name , data ) { return dataUser . access ( elem , name , data ) ; } , removeData : function ( elem , name ) { dataUser . remove ( elem , name ) ; } , _data : function ( elem , name , data ) { return dataPriv . access ( elem , name , data ) ; } , _removeData : function ( elem , name ) { dataPriv . remove ( elem , name ) ; } } ) ; jQuery . fn . extend ( { data : function ( key , value ) { var i , name , data , elem = this [ 0 ] , attrs = elem && elem . attributes ; if ( key === undefined ) { if ( this . length ) { data = dataUser . get ( elem ) ; if ( elem . nodeType === 1 && ! dataPriv . get ( elem , "hasDataAttrs" ) ) { i = attrs . length ; while ( i -- ) { if ( attrs [ i ] ) { name = attrs [ i ] . name ; if ( name . indexOf ( "data-" ) === 0 ) { name = camelCase ( name . slice ( 5 ) ) ; dataAttr ( elem , name , data [ name ] ) ; } } }
dataPriv . set ( elem , "hasDataAttrs" , true ) ; } }
return data ; }
if ( typeof key === "object" ) { return this . each ( function ( ) { dataUser . set ( this , key ) ; } ) ; }
return access ( this , function ( value ) { var data ; if ( elem && value === undefined ) { data = dataUser . get ( elem , key ) ; if ( data !== undefined ) { return data ; }
data = dataAttr ( elem , key ) ; if ( data !== undefined ) { return data ; }
return ; }
this . each ( function ( ) { dataUser . set ( this , key , value ) ; } ) ; } , null , value , arguments . length > 1 , null , true ) ; } , removeData : function ( key ) { return this . each ( function ( ) { dataUser . remove ( this , key ) ; } ) ; } } ) ; jQuery . extend ( { queue : function ( elem , type , data ) { var queue ; if ( elem ) { type = ( type || "fx" ) + "queue" ; queue = dataPriv . get ( elem , type ) ; if ( data ) { if ( ! queue || Array . isArray ( data ) ) { queue = dataPriv . access ( elem , type , jQuery . makeArray ( data ) ) ; } else { queue . push ( data ) ; } }
return queue || [ ] ; } } , dequeue : function ( elem , type ) { type = type || "fx" ; var queue = jQuery . queue ( elem , type ) , startLength = queue . length , fn = queue . shift ( ) , hooks = jQuery . _queueHooks ( elem , type ) , next = function ( ) { jQuery . dequeue ( elem , type ) ; } ; if ( fn === "inprogress" ) { fn = queue . shift ( ) ; startLength -- ; }
if ( fn ) { if ( type === "fx" ) { queue . unshift ( "inprogress" ) ; }
delete hooks . stop ; fn . call ( elem , next , hooks ) ; }
if ( ! startLength && hooks ) { hooks . empty . fire ( ) ; } } , _queueHooks : function ( elem , type ) { var key = type + "queueHooks" ; return dataPriv . get ( elem , key ) || dataPriv . access ( elem , key , { empty : jQuery . Callbacks ( "once memory" ) . add ( function ( ) { dataPriv . remove ( elem , [ type + "queue" , key ] ) ; } ) } ) ; } } ) ; jQuery . fn . extend ( { queue : function ( type , data ) { var setter = 2 ; if ( typeof type !== "string" ) { data = type ; type = "fx" ; setter -- ; }
if ( arguments . length < setter ) { return jQuery . queue ( this [ 0 ] , type ) ; }
return data === undefined ? this : this . each ( function ( ) { var queue = jQuery . queue ( this , type , data ) ; jQuery . _queueHooks ( this , type ) ; if ( type === "fx" && queue [ 0 ] !== "inprogress" ) { jQuery . dequeue ( this , type ) ; } } ) ; } , dequeue : function ( type ) { return this . each ( function ( ) { jQuery . dequeue ( this , type ) ; } ) ; } , clearQueue : function ( type ) { return this . queue ( type || "fx" , [ ] ) ; } , promise : function ( type , obj ) { var tmp , count = 1 , defer = jQuery . Deferred ( ) , elements = this , i = this . length , resolve = function ( ) { if ( ! ( -- count ) ) { defer . resolveWith ( elements , [ elements ] ) ; } } ; if ( typeof type !== "string" ) { obj = type ; type = undefined ; }
type = type || "fx" ; while ( i -- ) { tmp = dataPriv . get ( elements [ i ] , type + "queueHooks" ) ; if ( tmp && tmp . empty ) { count ++ ; tmp . empty . add ( resolve ) ; } }
resolve ( ) ; return defer . promise ( obj ) ; } } ) ; var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ) . source ; var rcssNum = new RegExp ( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$" , "i" ) ; var cssExpand = [ "Top" , "Right" , "Bottom" , "Left" ] ; var isHiddenWithinTree = function ( elem , el ) { elem = el || elem ; return elem . style . display === "none" || elem . style . display === "" && jQuery . contains ( elem . ownerDocument , elem ) && jQuery . css ( elem , "display" ) === "none" ; } ; var swap = function ( elem , options , callback , args ) { var ret , name , old = { } ; for ( name in options ) { old [ name ] = elem . style [ name ] ; elem . style [ name ] = options [ name ] ; }
ret = callback . apply ( elem , args || [ ] ) ; for ( name in options ) { elem . style [ name ] = old [ name ] ; }
return ret ; } ; function adjustCSS ( elem , prop , valueParts , tween ) { var adjusted , scale , maxIterations = 20 , currentValue = tween ? function ( ) { return tween . cur ( ) ; } : function ( ) { return jQuery . css ( elem , prop , "" ) ; } , initial = currentValue ( ) , unit = valueParts && valueParts [ 3 ] || ( jQuery . cssNumber [ prop ] ? "" : "px" ) , initialInUnit = ( jQuery . cssNumber [ prop ] || unit !== "px" && + initial ) && rcssNum . exec ( jQuery . css ( elem , prop ) ) ; if ( initialInUnit && initialInUnit [ 3 ] !== unit ) { initial = initial / 2 ; unit = unit || initialInUnit [ 3 ] ; initialInUnit = + initial || 1 ; while ( maxIterations -- ) { jQuery . style ( elem , prop , initialInUnit + unit ) ; if ( ( 1 - scale ) * ( 1 - ( scale = currentValue ( ) / initial || 0.5 ) ) <= 0 ) { maxIterations = 0 ; }
initialInUnit = initialInUnit / scale ; }
initialInUnit = initialInUnit * 2 ; jQuery . style ( elem , prop , initialInUnit + unit ) ; valueParts = valueParts || [ ] ; }
if ( valueParts ) { initialInUnit = + initialInUnit || + initial || 0 ; adjusted = valueParts [ 1 ] ? initialInUnit + ( valueParts [ 1 ] + 1 ) * valueParts [ 2 ] : + valueParts [ 2 ] ; if ( tween ) { tween . unit = unit ; tween . start = initialInUnit ; tween . end = adjusted ; } }
return adjusted ; }
var defaultDisplayMap = { } ; function getDefaultDisplay ( elem ) { var temp , doc = elem . ownerDocument , nodeName = elem . nodeName , display = defaultDisplayMap [ nodeName ] ; if ( display ) { return display ; }
temp = doc . body . appendChild ( doc . createElement ( nodeName ) ) ; display = jQuery . css ( temp , "display" ) ; temp . parentNode . removeChild ( temp ) ; if ( display === "none" ) { display = "block" ; }
defaultDisplayMap [ nodeName ] = display ; return display ; }
function showHide ( elements , show ) { var display , elem , values = [ ] , index = 0 , length = elements . length ; for ( ; index < length ; index ++ ) { elem = elements [ index ] ; if ( ! elem . style ) { continue ; }
display = elem . style . display ; if ( show ) { if ( display === "none" ) { values [ index ] = dataPriv . get ( elem , "display" ) || null ; if ( ! values [ index ] ) { elem . style . display = "" ; } }
if ( elem . style . display === "" && isHiddenWithinTree ( elem ) ) { values [ index ] = getDefaultDisplay ( elem ) ; } } else { if ( display !== "none" ) { values [ index ] = "none" ; dataPriv . set ( elem , "display" , display ) ; } } }
for ( index = 0 ; index < length ; index ++ ) { if ( values [ index ] != null ) { elements [ index ] . style . display = values [ index ] ; } }
return elements ; }
jQuery . fn . extend ( { show : function ( ) { return showHide ( this , true ) ; } , hide : function ( ) { return showHide ( this ) ; } , toggle : function ( state ) { if ( typeof state === "boolean" ) { return state ? this . show ( ) : this . hide ( ) ; }
return this . each ( function ( ) { if ( isHiddenWithinTree ( this ) ) { jQuery ( this ) . show ( ) ; } else { jQuery ( this ) . hide ( ) ; } } ) ; } } ) ; var rcheckableType = ( /^(?:checkbox|radio)$/i ) ; var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ) ; var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ) ; var wrapMap = { option : [ 1 , "<select multiple='multiple'>" , "</select>" ] , thead : [ 1 , "<table>" , "</table>" ] , col : [ 2 , "<table><colgroup>" , "</colgroup></table>" ] , tr : [ 2 , "<table><tbody>" , "</tbody></table>" ] , td : [ 3 , "<table><tbody><tr>" , "</tr></tbody></table>" ] , _default : [ 0 , "" , "" ] } ; wrapMap . optgroup = wrapMap . option ; wrapMap . tbody = wrapMap . tfoot = wrapMap . colgroup = wrapMap . caption = wrapMap . thead ; wrapMap . th = wrapMap . td ; function getAll ( context , tag ) { var ret ; if ( typeof context . getElementsByTagName !== "undefined" ) { ret = context . getElementsByTagName ( tag || "*" ) ; } else if ( typeof context . querySelectorAll !== "undefined" ) { ret = context . querySelectorAll ( tag || "*" ) ; } else { ret = [ ] ; }
if ( tag === undefined || tag && nodeName ( context , tag ) ) { return jQuery . merge ( [ context ] , ret ) ; }
return ret ; }
function setGlobalEval ( elems , refElements ) { var i = 0 , l = elems . length ; for ( ; i < l ; i ++ ) { dataPriv . set ( elems [ i ] , "globalEval" , ! refElements || dataPriv . get ( refElements [ i ] , "globalEval" ) ) ; } }
var rhtml = /<|&#?\w+;/ ; function buildFragment ( elems , context , scripts , selection , ignored ) { var elem , tmp , tag , wrap , contains , j , fragment = context . createDocumentFragment ( ) , nodes = [ ] , i = 0 , l = elems . length ; for ( ; i < l ; i ++ ) { elem = elems [ i ] ; if ( elem || elem === 0 ) { if ( toType ( elem ) === "object" ) { jQuery . merge ( nodes , elem . nodeType ? [ elem ] : elem ) ; } else if ( ! rhtml . test ( elem ) ) { nodes . push ( context . createTextNode ( elem ) ) ; } else { tmp = tmp || fragment . appendChild ( context . createElement ( "div" ) ) ; tag = ( rtagName . exec ( elem ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ; wrap = wrapMap [ tag ] || wrapMap . _default ; tmp . innerHTML = wrap [ 1 ] + jQuery . htmlPrefilter ( elem ) + wrap [ 2 ] ; j = wrap [ 0 ] ; while ( j -- ) { tmp = tmp . lastChild ; }
jQuery . merge ( nodes , tmp . childNodes ) ; tmp = fragment . firstChild ; tmp . textContent = "" ; } } }
fragment . textContent = "" ; i = 0 ; while ( ( elem = nodes [ i ++ ] ) ) { if ( selection && jQuery . inArray ( elem , selection ) > - 1 ) { if ( ignored ) { ignored . push ( elem ) ; }
continue ; }
contains = jQuery . contains ( elem . ownerDocument , elem ) ; tmp = getAll ( fragment . appendChild ( elem ) , "script" ) ; if ( contains ) { setGlobalEval ( tmp ) ; }
if ( scripts ) { j = 0 ; while ( ( elem = tmp [ j ++ ] ) ) { if ( rscriptType . test ( elem . type || "" ) ) { scripts . push ( elem ) ; } } } }
return fragment ; }
( function ( ) { var fragment = document . createDocumentFragment ( ) , div = fragment . appendChild ( document . createElement ( "div" ) ) , input = document . createElement ( "input" ) ; input . setAttribute ( "type" , "radio" ) ; input . setAttribute ( "checked" , "checked" ) ; input . setAttribute ( "name" , "t" ) ; div . appendChild ( input ) ; support . checkClone = div . cloneNode ( true ) . cloneNode ( true ) . lastChild . checked ; div . innerHTML = "<textarea>x</textarea>" ; support . noCloneChecked = ! ! div . cloneNode ( true ) . lastChild . defaultValue ; } ) ( ) ; var documentElement = document . documentElement ; var
rkeyEvent = /^key/ , rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/ , rtypenamespace = /^([^.]*)(?:\.(.+)|)/ ; function returnTrue ( ) { return true ; }
function returnFalse ( ) { return false ; }
function safeActiveElement ( ) { try { return document . activeElement ; } catch ( err ) { } }
function on ( elem , types , selector , data , fn , one ) { var origFn , type ; if ( typeof types === "object" ) { if ( typeof selector !== "string" ) { data = data || selector ; selector = undefined ; }
for ( type in types ) { on ( elem , type , selector , data , types [ type ] , one ) ; }
return elem ; }
if ( data == null && fn == null ) { fn = selector ; data = selector = undefined ; } else if ( fn == null ) { if ( typeof selector === "string" ) { fn = data ; data = undefined ; } else { fn = data ; data = selector ; selector = undefined ; } }
if ( fn === false ) { fn = returnFalse ; } else if ( ! fn ) { return elem ; }
if ( one === 1 ) { origFn = fn ; fn = function ( event ) { jQuery ( ) . off ( event ) ; return origFn . apply ( this , arguments ) ; } ; fn . guid = origFn . guid || ( origFn . guid = jQuery . guid ++ ) ; }
return elem . each ( function ( ) { jQuery . event . add ( this , types , fn , data , selector ) ; } ) ; }
jQuery . event = { global : { } , add : function ( elem , types , handler , data , selector ) { var handleObjIn , eventHandle , tmp , events , t , handleObj , special , handlers , type , namespaces , origType , elemData = dataPriv . get ( elem ) ; if ( ! elemData ) { return ; }
if ( handler . handler ) { handleObjIn = handler ; handler = handleObjIn . handler ; selector = handleObjIn . selector ; }
if ( selector ) { jQuery . find . matchesSelector ( documentElement , selector ) ; }
if ( ! handler . guid ) { handler . guid = jQuery . guid ++ ; }
if ( ! ( events = elemData . events ) ) { events = elemData . events = { } ; }
if ( ! ( eventHandle = elemData . handle ) ) { eventHandle = elemData . handle = function ( e ) { return typeof jQuery !== "undefined" && jQuery . event . triggered !== e . type ? jQuery . event . dispatch . apply ( elem , arguments ) : undefined ; } ; }
types = ( types || "" ) . match ( rnothtmlwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; if ( ! type ) { continue ; }
special = jQuery . event . special [ type ] || { } ; type = ( selector ? special . delegateType : special . bindType ) || type ; special = jQuery . event . special [ type ] || { } ; handleObj = jQuery . extend ( { type : type , origType : origType , data : data , handler : handler , guid : handler . guid , selector : selector , needsContext : selector && jQuery . expr . match . needsContext . test ( selector ) , namespace : namespaces . join ( "." ) } , handleObjIn ) ; if ( ! ( handlers = events [ type ] ) ) { handlers = events [ type ] = [ ] ; handlers . delegateCount = 0 ; if ( ! special . setup || special . setup . call ( elem , data , namespaces , eventHandle ) === false ) { if ( elem . addEventListener ) { elem . addEventListener ( type , eventHandle ) ; } } }
if ( special . add ) { special . add . call ( elem , handleObj ) ; if ( ! handleObj . handler . guid ) { handleObj . handler . guid = handler . guid ; } }
if ( selector ) { handlers . splice ( handlers . delegateCount ++ , 0 , handleObj ) ; } else { handlers . push ( handleObj ) ; }
jQuery . event . global [ type ] = true ; } } , remove : function ( elem , types , handler , selector , mappedTypes ) { var j , origCount , tmp , events , t , handleObj , special , handlers , type , namespaces , origType , elemData = dataPriv . hasData ( elem ) && dataPriv . get ( elem ) ; if ( ! elemData || ! ( events = elemData . events ) ) { return ; }
types = ( types || "" ) . match ( rnothtmlwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; if ( ! type ) { for ( type in events ) { jQuery . event . remove ( elem , type + types [ t ] , handler , selector , true ) ; }
continue ; }
special = jQuery . event . special [ type ] || { } ; type = ( selector ? special . delegateType : special . bindType ) || type ; handlers = events [ type ] || [ ] ; tmp = tmp [ 2 ] && new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) ; origCount = j = handlers . length ; while ( j -- ) { handleObj = handlers [ j ] ; if ( ( mappedTypes || origType === handleObj . origType ) && ( ! handler || handler . guid === handleObj . guid ) && ( ! tmp || tmp . test ( handleObj . namespace ) ) && ( ! selector || selector === handleObj . selector || selector === "**" && handleObj . selector ) ) { handlers . splice ( j , 1 ) ; if ( handleObj . selector ) { handlers . delegateCount -- ; }
if ( special . remove ) { special . remove . call ( elem , handleObj ) ; } } }
if ( origCount && ! handlers . length ) { if ( ! special . teardown || special . teardown . call ( elem , namespaces , elemData . handle ) === false ) { jQuery . removeEvent ( elem , type , elemData . handle ) ; }
delete events [ type ] ; } }
if ( jQuery . isEmptyObject ( events ) ) { dataPriv . remove ( elem , "handle events" ) ; } } , dispatch : function ( nativeEvent ) { var event = jQuery . event . fix ( nativeEvent ) ; var i , j , ret , matched , handleObj , handlerQueue , args = new Array ( arguments . length ) , handlers = ( dataPriv . get ( this , "events" ) || { } ) [ event . type ] || [ ] , special = jQuery . event . special [ event . type ] || { } ; args [ 0 ] = event ; for ( i = 1 ; i < arguments . length ; i ++ ) { args [ i ] = arguments [ i ] ; }
event . delegateTarget = this ; if ( special . preDispatch && special . preDispatch . call ( this , event ) === false ) { return ; }
handlerQueue = jQuery . event . handlers . call ( this , event , handlers ) ; i = 0 ; while ( ( matched = handlerQueue [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { event . currentTarget = matched . elem ; j = 0 ; while ( ( handleObj = matched . handlers [ j ++ ] ) && ! event . isImmediatePropagationStopped ( ) ) { if ( ! event . rnamespace || event . rnamespace . test ( handleObj . namespace ) ) { event . handleObj = handleObj ; event . data = handleObj . data ; ret = ( ( jQuery . event . special [ handleObj . origType ] || { } ) . handle || handleObj . handler ) . apply ( matched . elem , args ) ; if ( ret !== undefined ) { if ( ( event . result = ret ) === false ) { event . preventDefault ( ) ; event . stopPropagation ( ) ; } } } } }
if ( special . postDispatch ) { special . postDispatch . call ( this , event ) ; }
return event . result ; } , handlers : function ( event , handlers ) { var i , handleObj , sel , matchedHandlers , matchedSelectors , handlerQueue = [ ] , delegateCount = handlers . delegateCount , cur = event . target ; if ( delegateCount && cur . nodeType && ! ( event . type === "click" && event . button >= 1 ) ) { for ( ; cur !== this ; cur = cur . parentNode || this ) { if ( cur . nodeType === 1 && ! ( event . type === "click" && cur . disabled === true ) ) { matchedHandlers = [ ] ; matchedSelectors = { } ; for ( i = 0 ; i < delegateCount ; i ++ ) { handleObj = handlers [ i ] ; sel = handleObj . selector + " " ; if ( matchedSelectors [ sel ] === undefined ) { matchedSelectors [ sel ] = handleObj . needsContext ? jQuery ( sel , this ) . index ( cur ) > - 1 : jQuery . find ( sel , this , null , [ cur ] ) . length ; }
if ( matchedSelectors [ sel ] ) { matchedHandlers . push ( handleObj ) ; } }
if ( matchedHandlers . length ) { handlerQueue . push ( { elem : cur , handlers : matchedHandlers } ) ; } } } }
cur = this ; if ( delegateCount < handlers . length ) { handlerQueue . push ( { elem : cur , handlers : handlers . slice ( delegateCount ) } ) ; }
return handlerQueue ; } , addProp : function ( name , hook ) { Object . defineProperty ( jQuery . Event . prototype , name , { enumerable : true , configurable : true , get : isFunction ( hook ) ? function ( ) { if ( this . originalEvent ) { return hook ( this . originalEvent ) ; } } : function ( ) { if ( this . originalEvent ) { return this . originalEvent [ name ] ; } } , set : function ( value ) { Object . defineProperty ( this , name , { enumerable : true , configurable : true , writable : true , value : value } ) ; } } ) ; } , fix : function ( originalEvent ) { return originalEvent [ jQuery . expando ] ? originalEvent : new jQuery . Event ( originalEvent ) ; } , special : { load : { noBubble : true } , focus : { trigger : function ( ) { if ( this !== safeActiveElement ( ) && this . focus ) { this . focus ( ) ; return false ; } } , delegateType : "focusin" } , blur : { trigger : function ( ) { if ( this === safeActiveElement ( ) && this . blur ) { this . blur ( ) ; return false ; } } , delegateType : "focusout" } , click : { trigger : function ( ) { if ( this . type === "checkbox" && this . click && nodeName ( this , "input" ) ) { this . click ( ) ; return false ; } } , _default : function ( event ) { return nodeName ( event . target , "a" ) ; } } , beforeunload : { postDispatch : function ( event ) { if ( event . result !== undefined && event . originalEvent ) { event . originalEvent . returnValue = event . result ; } } } } } ; jQuery . removeEvent = function ( elem , type , handle ) { if ( elem . removeEventListener ) { elem . removeEventListener ( type , handle ) ; } } ; jQuery . Event = function ( src , props ) { if ( ! ( this instanceof jQuery . Event ) ) { return new jQuery . Event ( src , props ) ; }
if ( src && src . type ) { this . originalEvent = src ; this . type = src . type ; this . isDefaultPrevented = src . defaultPrevented || src . defaultPrevented === undefined && src . returnValue === false ? returnTrue : returnFalse ; this . target = ( src . target && src . target . nodeType === 3 ) ? src . target . parentNode : src . target ; this . currentTarget = src . currentTarget ; this . relatedTarget = src . relatedTarget ; } else { this . type = src ; }
if ( props ) { jQuery . extend ( this , props ) ; }
this . timeStamp = src && src . timeStamp || Date . now ( ) ; this [ jQuery . expando ] = true ; } ; jQuery . Event . prototype = { constructor : jQuery . Event , isDefaultPrevented : returnFalse , isPropagationStopped : returnFalse , isImmediatePropagationStopped : returnFalse , isSimulated : false , preventDefault : function ( ) { var e = this . originalEvent ; this . isDefaultPrevented = returnTrue ; if ( e && ! this . isSimulated ) { e . preventDefault ( ) ; } } , stopPropagation : function ( ) { var e = this . originalEvent ; this . isPropagationStopped = returnTrue ; if ( e && ! this . isSimulated ) { e . stopPropagation ( ) ; } } , stopImmediatePropagation : function ( ) { var e = this . originalEvent ; this . isImmediatePropagationStopped = returnTrue ; if ( e && ! this . isSimulated ) { e . stopImmediatePropagation ( ) ; }
this . stopPropagation ( ) ; } } ; jQuery . each ( { altKey : true , bubbles : true , cancelable : true , changedTouches : true , ctrlKey : true , detail : true , eventPhase : true , metaKey : true , pageX : true , pageY : true , shiftKey : true , view : true , "char" : true , charCode : true , key : true , keyCode : true , button : true , buttons : true , clientX : true , clientY : true , offsetX : true , offsetY : true , pointerId : true , pointerType : true , screenX : true , screenY : true , targetTouches : true , toElement : true , touches : true , which : function ( event ) { var button = event . button ; if ( event . which == null && rkeyEvent . test ( event . type ) ) { return event . charCode != null ? event . charCode : event . keyCode ; }
if ( ! event . which && button !== undefined && rmouseEvent . test ( event . type ) ) { if ( button & 1 ) { return 1 ; }
if ( button & 2 ) { return 3 ; }
if ( button & 4 ) { return 2 ; }
return 0 ; }
return event . which ; } } , jQuery . event . addProp ) ; jQuery . each ( { mouseenter : "mouseover" , mouseleave : "mouseout" , pointerenter : "pointerover" , pointerleave : "pointerout" } , function ( orig , fix ) { jQuery . event . special [ orig ] = { delegateType : fix , bindType : fix , handle : function ( event ) { var ret , target = this , related = event . relatedTarget , handleObj = event . handleObj ; if ( ! related || ( related !== target && ! jQuery . contains ( target , related ) ) ) { event . type = handleObj . origType ; ret = handleObj . handler . apply ( this , arguments ) ; event . type = fix ; }
return ret ; } } ; } ) ; jQuery . fn . extend ( { on : function ( types , selector , data , fn ) { return on ( this , types , selector , data , fn ) ; } , one : function ( types , selector , data , fn ) { return on ( this , types , selector , data , fn , 1 ) ; } , off : function ( types , selector , fn ) { var handleObj , type ; if ( types && types . preventDefault && types . handleObj ) { handleObj = types . handleObj ; jQuery ( types . delegateTarget ) . off ( handleObj . namespace ? handleObj . origType + "." + handleObj . namespace : handleObj . origType , handleObj . selector , handleObj . handler ) ; return this ; }
if ( typeof types === "object" ) { for ( type in types ) { this . off ( type , selector , types [ type ] ) ; }
return this ; }
if ( selector === false || typeof selector === "function" ) { fn = selector ; selector = undefined ; }
if ( fn === false ) { fn = returnFalse ; }
return this . each ( function ( ) { jQuery . event . remove ( this , types , fn , selector ) ; } ) ; } } ) ; var
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi , rnoInnerhtml = /<script|<style|<link/i , rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i , rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g ; function manipulationTarget ( elem , content ) { if ( nodeName ( elem , "table" ) && nodeName ( content . nodeType !== 11 ? content : content . firstChild , "tr" ) ) { return jQuery ( elem ) . children ( "tbody" ) [ 0 ] || elem ; }
return elem ; }
function disableScript ( elem ) { elem . type = ( elem . getAttribute ( "type" ) !== null ) + "/" + elem . type ; return elem ; }
function restoreScript ( elem ) { if ( ( elem . type || "" ) . slice ( 0 , 5 ) === "true/" ) { elem . type = elem . type . slice ( 5 ) ; } else { elem . removeAttribute ( "type" ) ; }
return elem ; }
function cloneCopyEvent ( src , dest ) { var i , l , type , pdataOld , pdataCur , udataOld , udataCur , events ; if ( dest . nodeType !== 1 ) { return ; }
if ( dataPriv . hasData ( src ) ) { pdataOld = dataPriv . access ( src ) ; pdataCur = dataPriv . set ( dest , pdataOld ) ; events = pdataOld . events ; if ( events ) { delete pdataCur . handle ; pdataCur . events = { } ; for ( type in events ) { for ( i = 0 , l = events [ type ] . length ; i < l ; i ++ ) { jQuery . event . add ( dest , type , events [ type ] [ i ] ) ; } } } }
if ( dataUser . hasData ( src ) ) { udataOld = dataUser . access ( src ) ; udataCur = jQuery . extend ( { } , udataOld ) ; dataUser . set ( dest , udataCur ) ; } }
function fixInput ( src , dest ) { var nodeName = dest . nodeName . toLowerCase ( ) ; if ( nodeName === "input" && rcheckableType . test ( src . type ) ) { dest . checked = src . checked ; } else if ( nodeName === "input" || nodeName === "textarea" ) { dest . defaultValue = src . defaultValue ; } }
function domManip ( collection , args , callback , ignored ) { args = concat . apply ( [ ] , args ) ; var fragment , first , scripts , hasScripts , node , doc , i = 0 , l = collection . length , iNoClone = l - 1 , value = args [ 0 ] , valueIsFunction = isFunction ( value ) ; if ( valueIsFunction || ( l > 1 && typeof value === "string" && ! support . checkClone && rchecked . test ( value ) ) ) { return collection . each ( function ( index ) { var self = collection . eq ( index ) ; if ( valueIsFunction ) { args [ 0 ] = value . call ( this , index , self . html ( ) ) ; }
domManip ( self , args , callback , ignored ) ; } ) ; }
if ( l ) { fragment = buildFragment ( args , collection [ 0 ] . ownerDocument , false , collection , ignored ) ; first = fragment . firstChild ; if ( fragment . childNodes . length === 1 ) { fragment = first ; }
if ( first || ignored ) { scripts = jQuery . map ( getAll ( fragment , "script" ) , disableScript ) ; hasScripts = scripts . length ; for ( ; i < l ; i ++ ) { node = fragment ; if ( i !== iNoClone ) { node = jQuery . clone ( node , true , true ) ; if ( hasScripts ) { jQuery . merge ( scripts , getAll ( node , "script" ) ) ; } }
callback . call ( collection [ i ] , node , i ) ; }
if ( hasScripts ) { doc = scripts [ scripts . length - 1 ] . ownerDocument ; jQuery . map ( scripts , restoreScript ) ; for ( i = 0 ; i < hasScripts ; i ++ ) { node = scripts [ i ] ; if ( rscriptType . test ( node . type || "" ) && ! dataPriv . access ( node , "globalEval" ) && jQuery . contains ( doc , node ) ) { if ( node . src && ( node . type || "" ) . toLowerCase ( ) !== "module" ) { if ( jQuery . _evalUrl ) { jQuery . _evalUrl ( node . src ) ; } } else { DOMEval ( node . textContent . replace ( rcleanScript , "" ) , doc , node ) ; } } } } } }
return collection ; }
function remove ( elem , selector , keepData ) { var node , nodes = selector ? jQuery . filter ( selector , elem ) : elem , i = 0 ; for ( ; ( node = nodes [ i ] ) != null ; i ++ ) { if ( ! keepData && node . nodeType === 1 ) { jQuery . cleanData ( getAll ( node ) ) ; }
if ( node . parentNode ) { if ( keepData && jQuery . contains ( node . ownerDocument , node ) ) { setGlobalEval ( getAll ( node , "script" ) ) ; }
node . parentNode . removeChild ( node ) ; } }
return elem ; }
jQuery . extend ( { htmlPrefilter : function ( html ) { return html . replace ( rxhtmlTag , "<$1></$2>" ) ; } , clone : function ( elem , dataAndEvents , deepDataAndEvents ) { var i , l , srcElements , destElements , clone = elem . cloneNode ( true ) , inPage = jQuery . contains ( elem . ownerDocument , elem ) ; if ( ! support . noCloneChecked && ( elem . nodeType === 1 || elem . nodeType === 11 ) && ! jQuery . isXMLDoc ( elem ) ) { destElements = getAll ( clone ) ; srcElements = getAll ( elem ) ; for ( i = 0 , l = srcElements . length ; i < l ; i ++ ) { fixInput ( srcElements [ i ] , destElements [ i ] ) ; } }
if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll ( elem ) ; destElements = destElements || getAll ( clone ) ; for ( i = 0 , l = srcElements . length ; i < l ; i ++ ) { cloneCopyEvent ( srcElements [ i ] , destElements [ i ] ) ; } } else { cloneCopyEvent ( elem , clone ) ; } }
destElements = getAll ( clone , "script" ) ; if ( destElements . length > 0 ) { setGlobalEval ( destElements , ! inPage && getAll ( elem , "script" ) ) ; }
return clone ; } , cleanData : function ( elems ) { var data , elem , type , special = jQuery . event . special , i = 0 ; for ( ; ( elem = elems [ i ] ) !== undefined ; i ++ ) { if ( acceptData ( elem ) ) { if ( ( data = elem [ dataPriv . expando ] ) ) { if ( data . events ) { for ( type in data . events ) { if ( special [ type ] ) { jQuery . event . remove ( elem , type ) ; } else { jQuery . removeEvent ( elem , type , data . handle ) ; } } }
elem [ dataPriv . expando ] = undefined ; }
if ( elem [ dataUser . expando ] ) { elem [ dataUser . expando ] = undefined ; } } } } } ) ; jQuery . fn . extend ( { detach : function ( selector ) { return remove ( this , selector , true ) ; } , remove : function ( selector ) { return remove ( this , selector ) ; } , text : function ( value ) { return access ( this , function ( value ) { return value === undefined ? jQuery . text ( this ) : this . empty ( ) . each ( function ( ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) { this . textContent = value ; } } ) ; } , null , value , arguments . length ) ; } , append : function ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) { var target = manipulationTarget ( this , elem ) ; target . appendChild ( elem ) ; } } ) ; } , prepend : function ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) { var target = manipulationTarget ( this , elem ) ; target . insertBefore ( elem , target . firstChild ) ; } } ) ; } , before : function ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . parentNode ) { this . parentNode . insertBefore ( elem , this ) ; } } ) ; } , after : function ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . parentNode ) { this . parentNode . insertBefore ( elem , this . nextSibling ) ; } } ) ; } , empty : function ( ) { var elem , i = 0 ; for ( ; ( elem = this [ i ] ) != null ; i ++ ) { if ( elem . nodeType === 1 ) { jQuery . cleanData ( getAll ( elem , false ) ) ; elem . textContent = "" ; } }
return this ; } , clone : function ( dataAndEvents , deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents ; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents ; return this . map ( function ( ) { return jQuery . clone ( this , dataAndEvents , deepDataAndEvents ) ; } ) ; } , html : function ( value ) { return access ( this , function ( value ) { var elem = this [ 0 ] || { } , i = 0 , l = this . length ; if ( value === undefined && elem . nodeType === 1 ) { return elem . innerHTML ; }
if ( typeof value === "string" && ! rnoInnerhtml . test ( value ) && ! wrapMap [ ( rtagName . exec ( value ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) { value = jQuery . htmlPrefilter ( value ) ; try { for ( ; i < l ; i ++ ) { elem = this [ i ] || { } ; if ( elem . nodeType === 1 ) { jQuery . cleanData ( getAll ( elem , false ) ) ; elem . innerHTML = value ; } }
elem = 0 ; } catch ( e ) { } }
if ( elem ) { this . empty ( ) . append ( value ) ; } } , null , value , arguments . length ) ; } , replaceWith : function ( ) { var ignored = [ ] ; return domManip ( this , arguments , function ( elem ) { var parent = this . parentNode ; if ( jQuery . inArray ( this , ignored ) < 0 ) { jQuery . cleanData ( getAll ( this ) ) ; if ( parent ) { parent . replaceChild ( elem , this ) ; } }
} , ignored ) ; } } ) ; jQuery . each ( { appendTo : "append" , prependTo : "prepend" , insertBefore : "before" , insertAfter : "after" , replaceAll : "replaceWith" } , function ( name , original ) { jQuery . fn [ name ] = function ( selector ) { var elems , ret = [ ] , insert = jQuery ( selector ) , last = insert . length - 1 , i = 0 ; for ( ; i <= last ; i ++ ) { elems = i === last ? this : this . clone ( true ) ; jQuery ( insert [ i ] ) [ original ] ( elems ) ; push . apply ( ret , elems . get ( ) ) ; }
return this . pushStack ( ret ) ; } ; } ) ; var rnumnonpx = new RegExp ( "^(" + pnum + ")(?!px)[a-z%]+$" , "i" ) ; var getStyles = function ( elem ) { var view = elem . ownerDocument . defaultView ; if ( ! view || ! view . opener ) { view = window ; }
return view . getComputedStyle ( elem ) ; } ; var rboxStyle = new RegExp ( cssExpand . join ( "|" ) , "i" ) ; ( function ( ) { function computeStyleTests ( ) { if ( ! div ) { return ; }
container . style . cssText = "position:absolute;left:-11111px;width:60px;" +
"margin-top:1px;padding:0;border:0" ; div . style . cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
"margin:auto;border:1px;padding:1px;" +
"width:60%;top:1%" ; documentElement . appendChild ( container ) . appendChild ( div ) ; var divStyle = window . getComputedStyle ( div ) ; pixelPositionVal = divStyle . top !== "1%" ; reliableMarginLeftVal = roundPixelMeasures ( divStyle . marginLeft ) === 12 ; div . style . right = "60%" ; pixelBoxStylesVal = roundPixelMeasures ( divStyle . right ) === 36 ; boxSizingReliableVal = roundPixelMeasures ( divStyle . width ) === 36 ; div . style . position = "absolute" ; scrollboxSizeVal = div . offsetWidth === 36 || "absolute" ; documentElement . removeChild ( container ) ; div = null ; }
function roundPixelMeasures ( measure ) { return Math . round ( parseFloat ( measure ) ) ; }
var pixelPositionVal , boxSizingReliableVal , scrollboxSizeVal , pixelBoxStylesVal , reliableMarginLeftVal , container = document . createElement ( "div" ) , div = document . createElement ( "div" ) ; if ( ! div . style ) { return ; }
div . style . backgroundClip = "content-box" ; div . cloneNode ( true ) . style . backgroundClip = "" ; support . clearCloneStyle = div . style . backgroundClip === "content-box" ; jQuery . extend ( support , { boxSizingReliable : function ( ) { computeStyleTests ( ) ; return boxSizingReliableVal ; } , pixelBoxStyles : function ( ) { computeStyleTests ( ) ; return pixelBoxStylesVal ; } , pixelPosition : function ( ) { computeStyleTests ( ) ; return pixelPositionVal ; } , reliableMarginLeft : function ( ) { computeStyleTests ( ) ; return reliableMarginLeftVal ; } , scrollboxSize : function ( ) { computeStyleTests ( ) ; return scrollboxSizeVal ; } } ) ; } ) ( ) ; function curCSS ( elem , name , computed ) { var width , minWidth , maxWidth , ret , style = elem . style ; computed = computed || getStyles ( elem ) ; if ( computed ) { ret = computed . getPropertyValue ( name ) || computed [ name ] ; if ( ret === "" && ! jQuery . contains ( elem . ownerDocument , elem ) ) { ret = jQuery . style ( elem , name ) ; }
if ( ! support . pixelBoxStyles ( ) && rnumnonpx . test ( ret ) && rboxStyle . test ( name ) ) { width = style . width ; minWidth = style . minWidth ; maxWidth = style . maxWidth ; style . minWidth = style . maxWidth = style . width = ret ; ret = computed . width ; style . width = width ; style . minWidth = minWidth ; style . maxWidth = maxWidth ; } }
return ret !== undefined ? ret + "" : ret ; }
function addGetHookIf ( conditionFn , hookFn ) { return { get : function ( ) { if ( conditionFn ( ) ) { delete this . get ; return ; }
return ( this . get = hookFn ) . apply ( this , arguments ) ; } } ; }
var
rdisplayswap = /^(none|table(?!-c[ea]).+)/ , rcustomProp = /^--/ , cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } , cssNormalTransform = { letterSpacing : "0" , fontWeight : "400" } , cssPrefixes = [ "Webkit" , "Moz" , "ms" ] , emptyStyle = document . createElement ( "div" ) . style ; function vendorPropName ( name ) { if ( name in emptyStyle ) { return name ; }
var capName = name [ 0 ] . toUpperCase ( ) + name . slice ( 1 ) , i = cssPrefixes . length ; while ( i -- ) { name = cssPrefixes [ i ] + capName ; if ( name in emptyStyle ) { return name ; } } }
function finalPropName ( name ) { var ret = jQuery . cssProps [ name ] ; if ( ! ret ) { ret = jQuery . cssProps [ name ] = vendorPropName ( name ) || name ; }
return ret ; }
function setPositiveNumber ( elem , value , subtract ) { var matches = rcssNum . exec ( value ) ; return matches ? Math . max ( 0 , matches [ 2 ] - ( subtract || 0 ) ) + ( matches [ 3 ] || "px" ) : value ; }
function boxModelAdjustment ( elem , dimension , box , isBorderBox , styles , computedVal ) { var i = dimension === "width" ? 1 : 0 , extra = 0 , delta = 0 ; if ( box === ( isBorderBox ? "border" : "content" ) ) { return 0 ; }
for ( ; i < 4 ; i += 2 ) { if ( box === "margin" ) { delta += jQuery . css ( elem , box + cssExpand [ i ] , true , styles ) ; }
if ( ! isBorderBox ) { delta += jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; if ( box !== "padding" ) { delta += jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) ; } else { extra += jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) ; }
} else { if ( box === "content" ) { delta -= jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; }
if ( box !== "margin" ) { delta -= jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) ; } } }
if ( ! isBorderBox && computedVal >= 0 ) { delta += Math . max ( 0 , Math . ceil ( elem [ "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ] -
computedVal -
delta -
extra -
0.5 ) ) ; }
return delta ; }
function getWidthOrHeight ( elem , dimension , extra ) { var styles = getStyles ( elem ) , val = curCSS ( elem , dimension , styles ) , isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" , valueIsBorderBox = isBorderBox ; if ( rnumnonpx . test ( val ) ) { if ( ! extra ) { return val ; }
val = "auto" ; }
valueIsBorderBox = valueIsBorderBox && ( support . boxSizingReliable ( ) || val === elem . style [ dimension ] ) ; if ( val === "auto" || ! parseFloat ( val ) && jQuery . css ( elem , "display" , false , styles ) === "inline" ) { val = elem [ "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ] ; valueIsBorderBox = true ; }
val = parseFloat ( val ) || 0 ; return ( val +
boxModelAdjustment ( elem , dimension , extra || ( isBorderBox ? "border" : "content" ) , valueIsBorderBox , styles , val ) ) + "px" ; }
jQuery . extend ( { cssHooks : { opacity : { get : function ( elem , computed ) { if ( computed ) { var ret = curCSS ( elem , "opacity" ) ; return ret === "" ? "1" : ret ; } } } } , cssNumber : { "animationIterationCount" : true , "columnCount" : true , "fillOpacity" : true , "flexGrow" : true , "flexShrink" : true , "fontWeight" : true , "lineHeight" : true , "opacity" : true , "order" : true , "orphans" : true , "widows" : true , "zIndex" : true , "zoom" : true } , cssProps : { } , style : function ( elem , name , value , extra ) { if ( ! elem || elem . nodeType === 3 || elem . nodeType === 8 || ! elem . style ) { return ; }
var ret , type , hooks , origName = camelCase ( name ) , isCustomProp = rcustomProp . test ( name ) , style = elem . style ; if ( ! isCustomProp ) { name = finalPropName ( origName ) ; }
hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( value !== undefined ) { type = typeof value ; if ( type === "string" && ( ret = rcssNum . exec ( value ) ) && ret [ 1 ] ) { value = adjustCSS ( elem , name , ret ) ; type = "number" ; }
if ( value == null || value !== value ) { return ; }
if ( type === "number" ) { value += ret && ret [ 3 ] || ( jQuery . cssNumber [ origName ] ? "" : "px" ) ; }
if ( ! support . clearCloneStyle && value === "" && name . indexOf ( "background" ) === 0 ) { style [ name ] = "inherit" ; }
if ( ! hooks || ! ( "set" in hooks ) || ( value = hooks . set ( elem , value , extra ) ) !== undefined ) { if ( isCustomProp ) { style . setProperty ( name , value ) ; } else { style [ name ] = value ; } } } else { if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , false , extra ) ) !== undefined ) { return ret ; }
return style [ name ] ; } } , css : function ( elem , name , extra , styles ) { var val , num , hooks , origName = camelCase ( name ) , isCustomProp = rcustomProp . test ( name ) ; if ( ! isCustomProp ) { name = finalPropName ( origName ) ; }
hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( hooks && "get" in hooks ) { val = hooks . get ( elem , true , extra ) ; }
if ( val === undefined ) { val = curCSS ( elem , name , styles ) ; }
if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform [ name ] ; }
if ( extra === "" || extra ) { num = parseFloat ( val ) ; return extra === true || isFinite ( num ) ? num || 0 : val ; }
return val ; } } ) ; jQuery . each ( [ "height" , "width" ] , function ( i , dimension ) { jQuery . cssHooks [ dimension ] = { get : function ( elem , computed , extra ) { if ( computed ) { return rdisplayswap . test ( jQuery . css ( elem , "display" ) ) && ( ! elem . getClientRects ( ) . length || ! elem . getBoundingClientRect ( ) . width ) ? swap ( elem , cssShow , function ( ) { return getWidthOrHeight ( elem , dimension , extra ) ; } ) : getWidthOrHeight ( elem , dimension , extra ) ; } } , set : function ( elem , value , extra ) { var matches , styles = getStyles ( elem ) , isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" , subtract = extra && boxModelAdjustment ( elem , dimension , extra , isBorderBox , styles ) ; if ( isBorderBox && support . scrollboxSize ( ) === styles . position ) { subtract -= Math . ceil ( elem [ "offset" + dimension [ 0 ] . toUpperCase ( ) + dimension . slice ( 1 ) ] -
parseFloat ( styles [ dimension ] ) -
boxModelAdjustment ( elem , dimension , "border" , false , styles ) -
0.5 ) ; }
if ( subtract && ( matches = rcssNum . exec ( value ) ) && ( matches [ 3 ] || "px" ) !== "px" ) { elem . style [ dimension ] = value ; value = jQuery . css ( elem , dimension ) ; }
return setPositiveNumber ( elem , value , subtract ) ; } } ; } ) ; jQuery . cssHooks . marginLeft = addGetHookIf ( support . reliableMarginLeft , function ( elem , computed ) { if ( computed ) { return ( parseFloat ( curCSS ( elem , "marginLeft" ) ) || elem . getBoundingClientRect ( ) . left -
swap ( elem , { marginLeft : 0 } , function ( ) { return elem . getBoundingClientRect ( ) . left ; } ) ) + "px" ; } } ) ; jQuery . each ( { margin : "" , padding : "" , border : "Width" } , function ( prefix , suffix ) { jQuery . cssHooks [ prefix + suffix ] = { expand : function ( value ) { var i = 0 , expanded = { } , parts = typeof value === "string" ? value . split ( " " ) : [ value ] ; for ( ; i < 4 ; i ++ ) { expanded [ prefix + cssExpand [ i ] + suffix ] = parts [ i ] || parts [ i - 2 ] || parts [ 0 ] ; }
return expanded ; } } ; if ( prefix !== "margin" ) { jQuery . cssHooks [ prefix + suffix ] . set = setPositiveNumber ; } } ) ; jQuery . fn . extend ( { css : function ( name , value ) { return access ( this , function ( elem , name , value ) { var styles , len , map = { } , i = 0 ; if ( Array . isArray ( name ) ) { styles = getStyles ( elem ) ; len = name . length ; for ( ; i < len ; i ++ ) { map [ name [ i ] ] = jQuery . css ( elem , name [ i ] , false , styles ) ; }
return map ; }
return value !== undefined ? jQuery . style ( elem , name , value ) : jQuery . css ( elem , name ) ; } , name , value , arguments . length > 1 ) ; } } ) ; function Tween ( elem , options , prop , end , easing ) { return new Tween . prototype . init ( elem , options , prop , end , easing ) ; }
jQuery . Tween = Tween ; Tween . prototype = { constructor : Tween , init : function ( elem , options , prop , end , easing , unit ) { this . elem = elem ; this . prop = prop ; this . easing = easing || jQuery . easing . _default ; this . options = options ; this . start = this . now = this . cur ( ) ; this . end = end ; this . unit = unit || ( jQuery . cssNumber [ prop ] ? "" : "px" ) ; } , cur : function ( ) { var hooks = Tween . propHooks [ this . prop ] ; return hooks && hooks . get ? hooks . get ( this ) : Tween . propHooks . _default . get ( this ) ; } , run : function ( percent ) { var eased , hooks = Tween . propHooks [ this . prop ] ; if ( this . options . duration ) { this . pos = eased = jQuery . easing [ this . easing ] ( percent , this . options . duration * percent , 0 , 1 , this . options . duration ) ; } else { this . pos = eased = percent ; }
this . now = ( this . end - this . start ) * eased + this . start ; if ( this . options . step ) { this . options . step . call ( this . elem , this . now , this ) ; }
if ( hooks && hooks . set ) { hooks . set ( this ) ; } else { Tween . propHooks . _default . set ( this ) ; }
return this ; } } ; Tween . prototype . init . prototype = Tween . prototype ; Tween . propHooks = { _default : { get : function ( tween ) { var result ; if ( tween . elem . nodeType !== 1 || tween . elem [ tween . prop ] != null && tween . elem . style [ tween . prop ] == null ) { return tween . elem [ tween . prop ] ; }
result = jQuery . css ( tween . elem , tween . prop , "" ) ; return ! result || result === "auto" ? 0 : result ; } , set : function ( tween ) { if ( jQuery . fx . step [ tween . prop ] ) { jQuery . fx . step [ tween . prop ] ( tween ) ; } else if ( tween . elem . nodeType === 1 && ( tween . elem . style [ jQuery . cssProps [ tween . prop ] ] != null || jQuery . cssHooks [ tween . prop ] ) ) { jQuery . style ( tween . elem , tween . prop , tween . now + tween . unit ) ; } else { tween . elem [ tween . prop ] = tween . now ; } } } } ; Tween . propHooks . scrollTop = Tween . propHooks . scrollLeft = { set : function ( tween ) { if ( tween . elem . nodeType && tween . elem . parentNode ) { tween . elem [ tween . prop ] = tween . now ; } } } ; jQuery . easing = { linear : function ( p ) { return p ; } , swing : function ( p ) { return 0.5 - Math . cos ( p * Math . PI ) / 2 ; } , _default : "swing" } ; jQuery . fx = Tween . prototype . init ; jQuery . fx . step = { } ; var
fxNow , inProgress , rfxtypes = /^(?:toggle|show|hide)$/ , rrun = /queueHooks$/ ; function schedule ( ) { if ( inProgress ) { if ( document . hidden === false && window . requestAnimationFrame ) { window . requestAnimationFrame ( schedule ) ; } else { window . setTimeout ( schedule , jQuery . fx . interval ) ; }
jQuery . fx . tick ( ) ; } }
function createFxNow ( ) { window . setTimeout ( function ( ) { fxNow = undefined ; } ) ; return ( fxNow = Date . now ( ) ) ; }
function genFx ( type , includeWidth ) { var which , i = 0 , attrs = { height : type } ; includeWidth = includeWidth ? 1 : 0 ; for ( ; i < 4 ; i += 2 - includeWidth ) { which = cssExpand [ i ] ; attrs [ "margin" + which ] = attrs [ "padding" + which ] = type ; }
if ( includeWidth ) { attrs . opacity = attrs . width = type ; }
return attrs ; }
function createTween ( value , prop , animation ) { var tween , collection = ( Animation . tweeners [ prop ] || [ ] ) . concat ( Animation . tweeners [ "*" ] ) , index = 0 , length = collection . length ; for ( ; index < length ; index ++ ) { if ( ( tween = collection [ index ] . call ( animation , prop , value ) ) ) { return tween ; } } }
function defaultPrefilter ( elem , props , opts ) { var prop , value , toggle , hooks , oldfire , propTween , restoreDisplay , display , isBox = "width" in props || "height" in props , anim = this , orig = { } , style = elem . style , hidden = elem . nodeType && isHiddenWithinTree ( elem ) , dataShow = dataPriv . get ( elem , "fxshow" ) ; if ( ! opts . queue ) { hooks = jQuery . _queueHooks ( elem , "fx" ) ; if ( hooks . unqueued == null ) { hooks . unqueued = 0 ; oldfire = hooks . empty . fire ; hooks . empty . fire = function ( ) { if ( ! hooks . unqueued ) { oldfire ( ) ; } } ; }
hooks . unqueued ++ ; anim . always ( function ( ) { anim . always ( function ( ) { hooks . unqueued -- ; if ( ! jQuery . queue ( elem , "fx" ) . length ) { hooks . empty . fire ( ) ; } } ) ; } ) ; }
for ( prop in props ) { value = props [ prop ] ; if ( rfxtypes . test ( value ) ) { delete props [ prop ] ; toggle = toggle || value === "toggle" ; if ( value === ( hidden ? "hide" : "show" ) ) { if ( value === "show" && dataShow && dataShow [ prop ] !== undefined ) { hidden = true ; } else { continue ; } }
orig [ prop ] = dataShow && dataShow [ prop ] || jQuery . style ( elem , prop ) ; } }
propTween = ! jQuery . isEmptyObject ( props ) ; if ( ! propTween && jQuery . isEmptyObject ( orig ) ) { return ; }
if ( isBox && elem . nodeType === 1 ) { opts . overflow = [ style . overflow , style . overflowX , style . overflowY ] ; restoreDisplay = dataShow && dataShow . display ; if ( restoreDisplay == null ) { restoreDisplay = dataPriv . get ( elem , "display" ) ; }
display = jQuery . css ( elem , "display" ) ; if ( display === "none" ) { if ( restoreDisplay ) { display = restoreDisplay ; } else { showHide ( [ elem ] , true ) ; restoreDisplay = elem . style . display || restoreDisplay ; display = jQuery . css ( elem , "display" ) ; showHide ( [ elem ] ) ; } }
if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { if ( jQuery . css ( elem , "float" ) === "none" ) { if ( ! propTween ) { anim . done ( function ( ) { style . display = restoreDisplay ; } ) ; if ( restoreDisplay == null ) { display = style . display ; restoreDisplay = display === "none" ? "" : display ; } }
style . display = "inline-block" ; } } }
if ( opts . overflow ) { style . overflow = "hidden" ; anim . always ( function ( ) { style . overflow = opts . overflow [ 0 ] ; style . overflowX = opts . overflow [ 1 ] ; style . overflowY = opts . overflow [ 2 ] ; } ) ; }
propTween = false ; for ( prop in orig ) { if ( ! propTween ) { if ( dataShow ) { if ( "hidden" in dataShow ) { hidden = dataShow . hidden ; } } else { dataShow = dataPriv . access ( elem , "fxshow" , { display : restoreDisplay } ) ; }
if ( toggle ) { dataShow . hidden = ! hidden ; }
if ( hidden ) { showHide ( [ elem ] , true ) ; }
anim . done ( function ( ) { if ( ! hidden ) { showHide ( [ elem ] ) ; }
dataPriv . remove ( elem , "fxshow" ) ; for ( prop in orig ) { jQuery . style ( elem , prop , orig [ prop ] ) ; } } ) ; }
propTween = createTween ( hidden ? dataShow [ prop ] : 0 , prop , anim ) ; if ( ! ( prop in dataShow ) ) { dataShow [ prop ] = propTween . start ; if ( hidden ) { propTween . end = propTween . start ; propTween . start = 0 ; } } } }
function propFilter ( props , specialEasing ) { var index , name , easing , value , hooks ; for ( index in props ) { name = camelCase ( index ) ; easing = specialEasing [ name ] ; value = props [ index ] ; if ( Array . isArray ( value ) ) { easing = value [ 1 ] ; value = props [ index ] = value [ 0 ] ; }
if ( index !== name ) { props [ name ] = value ; delete props [ index ] ; }
hooks = jQuery . cssHooks [ name ] ; if ( hooks && "expand" in hooks ) { value = hooks . expand ( value ) ; delete props [ name ] ; for ( index in value ) { if ( ! ( index in props ) ) { props [ index ] = value [ index ] ; specialEasing [ index ] = easing ; } } } else { specialEasing [ name ] = easing ; } } }
function Animation ( elem , properties , options ) { var result , stopped , index = 0 , length = Animation . prefilters . length , deferred = jQuery . Deferred ( ) . always ( function ( ) { delete tick . elem ; } ) , tick = function ( ) { if ( stopped ) { return false ; }
var currentTime = fxNow || createFxNow ( ) , remaining = Math . max ( 0 , animation . startTime + animation . duration - currentTime ) , temp = remaining / animation . duration || 0 , percent = 1 - temp , index = 0 , length = animation . tweens . length ; for ( ; index < length ; index ++ ) { animation . tweens [ index ] . run ( percent ) ; }
deferred . notifyWith ( elem , [ animation , percent , remaining ] ) ; if ( percent < 1 && length ) { return remaining ; }
if ( ! length ) { deferred . notifyWith ( elem , [ animation , 1 , 0 ] ) ; }
deferred . resolveWith ( elem , [ animation ] ) ; return false ; } , animation = deferred . promise ( { elem : elem , props : jQuery . extend ( { } , properties ) , opts : jQuery . extend ( true , { specialEasing : { } , easing : jQuery . easing . _default } , options ) , originalProperties : properties , originalOptions : options , startTime : fxNow || createFxNow ( ) , duration : options . duration , tweens : [ ] , createTween : function ( prop , end ) { var tween = jQuery . Tween ( elem , animation . opts , prop , end , animation . opts . specialEasing [ prop ] || animation . opts . easing ) ; animation . tweens . push ( tween ) ; return tween ; } , stop : function ( gotoEnd ) { var index = 0 , length = gotoEnd ? animation . tweens . length : 0 ; if ( stopped ) { return this ; }
stopped = true ; for ( ; index < length ; index ++ ) { animation . tweens [ index ] . run ( 1 ) ; }
if ( gotoEnd ) { deferred . notifyWith ( elem , [ animation , 1 , 0 ] ) ; deferred . resolveWith ( elem , [ animation , gotoEnd ] ) ; } else { deferred . rejectWith ( elem , [ animation , gotoEnd ] ) ; }
return this ; } } ) , props = animation . props ; propFilter ( props , animation . opts . specialEasing ) ; for ( ; index < length ; index ++ ) { result = Animation . prefilters [ index ] . call ( animation , elem , props , animation . opts ) ; if ( result ) { if ( isFunction ( result . stop ) ) { jQuery . _queueHooks ( animation . elem , animation . opts . queue ) . stop = result . stop . bind ( result ) ; }
return result ; } }
jQuery . map ( props , createTween , animation ) ; if ( isFunction ( animation . opts . start ) ) { animation . opts . start . call ( elem , animation ) ; }
animation . progress ( animation . opts . progress ) . done ( animation . opts . done , animation . opts . complete ) . fail ( animation . opts . fail ) . always ( animation . opts . always ) ; jQuery . fx . timer ( jQuery . extend ( tick , { elem : elem , anim : animation , queue : animation . opts . queue } ) ) ; return animation ; }
jQuery . Animation = jQuery . extend ( Animation , { tweeners : { "*" : [ function ( prop , value ) { var tween = this . createTween ( prop , value ) ; adjustCSS ( tween . elem , prop , rcssNum . exec ( value ) , tween ) ; return tween ; } ] } , tweener : function ( props , callback ) { if ( isFunction ( props ) ) { callback = props ; props = [ "*" ] ; } else { props = props . match ( rnothtmlwhite ) ; }
var prop , index = 0 , length = props . length ; for ( ; index < length ; index ++ ) { prop = props [ index ] ; Animation . tweeners [ prop ] = Animation . tweeners [ prop ] || [ ] ; Animation . tweeners [ prop ] . unshift ( callback ) ; } } , prefilters : [ defaultPrefilter ] , prefilter : function ( callback , prepend ) { if ( prepend ) { Animation . prefilters . unshift ( callback ) ; } else { Animation . prefilters . push ( callback ) ; } } } ) ; jQuery . speed = function ( speed , easing , fn ) { var opt = speed && typeof speed === "object" ? jQuery . extend ( { } , speed ) : { complete : fn || ! fn && easing || isFunction ( speed ) && speed , duration : speed , easing : fn && easing || easing && ! isFunction ( easing ) && easing } ; if ( jQuery . fx . off ) { opt . duration = 0 ; } else { if ( typeof opt . duration !== "number" ) { if ( opt . duration in jQuery . fx . speeds ) { opt . duration = jQuery . fx . speeds [ opt . duration ] ; } else { opt . duration = jQuery . fx . speeds . _default ; } } }
if ( opt . queue == null || opt . queue === true ) { opt . queue = "fx" ; }
opt . old = opt . complete ; opt . complete = function ( ) { if ( isFunction ( opt . old ) ) { opt . old . call ( this ) ; }
if ( opt . queue ) { jQuery . dequeue ( this , opt . queue ) ; } } ; return opt ; } ; jQuery . fn . extend ( { fadeTo : function ( speed , to , easing , callback ) { return this . filter ( isHiddenWithinTree ) . css ( "opacity" , 0 ) . show ( )
. end ( ) . animate ( { opacity : to } , speed , easing , callback ) ; } , animate : function ( prop , speed , easing , callback ) { var empty = jQuery . isEmptyObject ( prop ) , optall = jQuery . speed ( speed , easing , callback ) , doAnimation = function ( ) { var anim = Animation ( this , jQuery . extend ( { } , prop ) , optall ) ; if ( empty || dataPriv . get ( this , "finish" ) ) { anim . stop ( true ) ; } } ; doAnimation . finish = doAnimation ; return empty || optall . queue === false ? this . each ( doAnimation ) : this . queue ( optall . queue , doAnimation ) ; } , stop : function ( type , clearQueue , gotoEnd ) { var stopQueue = function ( hooks ) { var stop = hooks . stop ; delete hooks . stop ; stop ( gotoEnd ) ; } ; if ( typeof type !== "string" ) { gotoEnd = clearQueue ; clearQueue = type ; type = undefined ; }
if ( clearQueue && type !== false ) { this . queue ( type || "fx" , [ ] ) ; }
return this . each ( function ( ) { var dequeue = true , index = type != null && type + "queueHooks" , timers = jQuery . timers , data = dataPriv . get ( this ) ; if ( index ) { if ( data [ index ] && data [ index ] . stop ) { stopQueue ( data [ index ] ) ; } } else { for ( index in data ) { if ( data [ index ] && data [ index ] . stop && rrun . test ( index ) ) { stopQueue ( data [ index ] ) ; } } }
for ( index = timers . length ; index -- ; ) { if ( timers [ index ] . elem === this && ( type == null || timers [ index ] . queue === type ) ) { timers [ index ] . anim . stop ( gotoEnd ) ; dequeue = false ; timers . splice ( index , 1 ) ; } }
if ( dequeue || ! gotoEnd ) { jQuery . dequeue ( this , type ) ; } } ) ; } , finish : function ( type ) { if ( type !== false ) { type = type || "fx" ; }
return this . each ( function ( ) { var index , data = dataPriv . get ( this ) , queue = data [ type + "queue" ] , hooks = data [ type + "queueHooks" ] , timers = jQuery . timers , length = queue ? queue . length : 0 ; data . finish = true ; jQuery . queue ( this , type , [ ] ) ; if ( hooks && hooks . stop ) { hooks . stop . call ( this , true ) ; }
for ( index = timers . length ; index -- ; ) { if ( timers [ index ] . elem === this && timers [ index ] . queue === type ) { timers [ index ] . anim . stop ( true ) ; timers . splice ( index , 1 ) ; } }
for ( index = 0 ; index < length ; index ++ ) { if ( queue [ index ] && queue [ index ] . finish ) { queue [ index ] . finish . call ( this ) ; } }
delete data . finish ; } ) ; } } ) ; jQuery . each ( [ "toggle" , "show" , "hide" ] , function ( i , name ) { var cssFn = jQuery . fn [ name ] ; jQuery . fn [ name ] = function ( speed , easing , callback ) { return speed == null || typeof speed === "boolean" ? cssFn . apply ( this , arguments ) : this . animate ( genFx ( name , true ) , speed , easing , callback ) ; } ; } ) ; jQuery . each ( { slideDown : genFx ( "show" ) , slideUp : genFx ( "hide" ) , slideToggle : genFx ( "toggle" ) , fadeIn : { opacity : "show" } , fadeOut : { opacity : "hide" } , fadeToggle : { opacity : "toggle" } } , function ( name , props ) { jQuery . fn [ name ] = function ( speed , easing , callback ) { return this . animate ( props , speed , easing , callback ) ; } ; } ) ; jQuery . timers = [ ] ; jQuery . fx . tick = function ( ) { var timer , i = 0 , timers = jQuery . timers ; fxNow = Date . now ( ) ; for ( ; i < timers . length ; i ++ ) { timer = timers [ i ] ; if ( ! timer ( ) && timers [ i ] === timer ) { timers . splice ( i -- , 1 ) ; } }
if ( ! timers . length ) { jQuery . fx . stop ( ) ; }
fxNow = undefined ; } ; jQuery . fx . timer = function ( timer ) { jQuery . timers . push ( timer ) ; jQuery . fx . start ( ) ; } ; jQuery . fx . interval = 13 ; jQuery . fx . start = function ( ) { if ( inProgress ) { return ; }
inProgress = true ; schedule ( ) ; } ; jQuery . fx . stop = function ( ) { inProgress = null ; } ; jQuery . fx . speeds = { slow : 600 , fast : 200 , _default : 400 } ; jQuery . fn . delay = function ( time , type ) { time = jQuery . fx ? jQuery . fx . speeds [ time ] || time : time ; type = type || "fx" ; return this . queue ( type , function ( next , hooks ) { var timeout = window . setTimeout ( next , time ) ; hooks . stop = function ( ) { window . clearTimeout ( timeout ) ; } ; } ) ; } ; ( function ( ) { var input = document . createElement ( "input" ) , select = document . createElement ( "select" ) , opt = select . appendChild ( document . createElement ( "option" ) ) ; input . type = "checkbox" ; support . checkOn = input . value !== "" ; support . optSelected = opt . selected ; input = document . createElement ( "input" ) ; input . value = "t" ; input . type = "radio" ; support . radioValue = input . value === "t" ; } ) ( ) ; var boolHook , attrHandle = jQuery . expr . attrHandle ; jQuery . fn . extend ( { attr : function ( name , value ) { return access ( this , jQuery . attr , name , value , arguments . length > 1 ) ; } , removeAttr : function ( name ) { return this . each ( function ( ) { jQuery . removeAttr ( this , name ) ; } ) ; } } ) ; jQuery . extend ( { attr : function ( elem , name , value ) { var ret , hooks , nType = elem . nodeType ; if ( nType === 3 || nType === 8 || nType === 2 ) { return ; }
if ( typeof elem . getAttribute === "undefined" ) { return jQuery . prop ( elem , name , value ) ; }
if ( nType !== 1 || ! jQuery . isXMLDoc ( elem ) ) { hooks = jQuery . attrHooks [ name . toLowerCase ( ) ] || ( jQuery . expr . match . bool . test ( name ) ? boolHook : undefined ) ; }
if ( value !== undefined ) { if ( value === null ) { jQuery . removeAttr ( elem , name ) ; return ; }
if ( hooks && "set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) { return ret ; }
elem . setAttribute ( name , value + "" ) ; return value ; }
if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) { return ret ; }
ret = jQuery . find . attr ( elem , name ) ; return ret == null ? undefined : ret ; } , attrHooks : { type : { set : function ( elem , value ) { if ( ! support . radioValue && value === "radio" && nodeName ( elem , "input" ) ) { var val = elem . value ; elem . setAttribute ( "type" , value ) ; if ( val ) { elem . value = val ; }
return value ; } } } } , removeAttr : function ( elem , value ) { var name , i = 0 , attrNames = value && value . match ( rnothtmlwhite ) ; if ( attrNames && elem . nodeType === 1 ) { while ( ( name = attrNames [ i ++ ] ) ) { elem . removeAttribute ( name ) ; } } } } ) ; boolHook = { set : function ( elem , value , name ) { if ( value === false ) { jQuery . removeAttr ( elem , name ) ; } else { elem . setAttribute ( name , name ) ; }
return name ; } } ; jQuery . each ( jQuery . expr . match . bool . source . match ( /\w+/g ) , function ( i , name ) { var getter = attrHandle [ name ] || jQuery . find . attr ; attrHandle [ name ] = function ( elem , name , isXML ) { var ret , handle , lowercaseName = name . toLowerCase ( ) ; if ( ! isXML ) { handle = attrHandle [ lowercaseName ] ; attrHandle [ lowercaseName ] = ret ; ret = getter ( elem , name , isXML ) != null ? lowercaseName : null ; attrHandle [ lowercaseName ] = handle ; }
return ret ; } ; } ) ; var rfocusable = /^(?:input|select|textarea|button)$/i , rclickable = /^(?:a|area)$/i ; jQuery . fn . extend ( { prop : function ( name , value ) { return access ( this , jQuery . prop , name , value , arguments . length > 1 ) ; } , removeProp : function ( name ) { return this . each ( function ( ) { delete this [ jQuery . propFix [ name ] || name ] ; } ) ; } } ) ; jQuery . extend ( { prop : function ( elem , name , value ) { var ret , hooks , nType = elem . nodeType ; if ( nType === 3 || nType === 8 || nType === 2 ) { return ; }
if ( nType !== 1 || ! jQuery . isXMLDoc ( elem ) ) { name = jQuery . propFix [ name ] || name ; hooks = jQuery . propHooks [ name ] ; }
if ( value !== undefined ) { if ( hooks && "set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) { return ret ; }
return ( elem [ name ] = value ) ; }
if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) { return ret ; }
return elem [ name ] ; } , propHooks : { tabIndex : { get : function ( elem ) { var tabindex = jQuery . find . attr ( elem , "tabindex" ) ; if ( tabindex ) { return parseInt ( tabindex , 10 ) ; }
if ( rfocusable . test ( elem . nodeName ) || rclickable . test ( elem . nodeName ) && elem . href ) { return 0 ; }
return - 1 ; } } } , propFix : { "for" : "htmlFor" , "class" : "className" } } ) ; if ( ! support . optSelected ) { jQuery . propHooks . selected = { get : function ( elem ) { var parent = elem . parentNode ; if ( parent && parent . parentNode ) { parent . parentNode . selectedIndex ; }
return null ; } , set : function ( elem ) { var parent = elem . parentNode ; if ( parent ) { parent . selectedIndex ; if ( parent . parentNode ) { parent . parentNode . selectedIndex ; } } } } ; }
jQuery . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { jQuery . propFix [ this . toLowerCase ( ) ] = this ; } ) ; function stripAndCollapse ( value ) { var tokens = value . match ( rnothtmlwhite ) || [ ] ; return tokens . join ( " " ) ; }
function getClass ( elem ) { return elem . getAttribute && elem . getAttribute ( "class" ) || "" ; }
function classesToArray ( value ) { if ( Array . isArray ( value ) ) { return value ; }
if ( typeof value === "string" ) { return value . match ( rnothtmlwhite ) || [ ] ; }
return [ ] ; }
jQuery . fn . extend ( { addClass : function ( value ) { var classes , elem , cur , curValue , clazz , j , finalValue , i = 0 ; if ( isFunction ( value ) ) { return this . each ( function ( j ) { jQuery ( this ) . addClass ( value . call ( this , j , getClass ( this ) ) ) ; } ) ; }
classes = classesToArray ( value ) ; if ( classes . length ) { while ( ( elem = this [ i ++ ] ) ) { curValue = getClass ( elem ) ; cur = elem . nodeType === 1 && ( " " + stripAndCollapse ( curValue ) + " " ) ; if ( cur ) { j = 0 ; while ( ( clazz = classes [ j ++ ] ) ) { if ( cur . indexOf ( " " + clazz + " " ) < 0 ) { cur += clazz + " " ; } }
finalValue = stripAndCollapse ( cur ) ; if ( curValue !== finalValue ) { elem . setAttribute ( "class" , finalValue ) ; } } } }
return this ; } , removeClass : function ( value ) { var classes , elem , cur , curValue , clazz , j , finalValue , i = 0 ; if ( isFunction ( value ) ) { return this . each ( function ( j ) { jQuery ( this ) . removeClass ( value . call ( this , j , getClass ( this ) ) ) ; } ) ; }
if ( ! arguments . length ) { return this . attr ( "class" , "" ) ; }
classes = classesToArray ( value ) ; if ( classes . length ) { while ( ( elem = this [ i ++ ] ) ) { curValue = getClass ( elem ) ; cur = elem . nodeType === 1 && ( " " + stripAndCollapse ( curValue ) + " " ) ; if ( cur ) { j = 0 ; while ( ( clazz = classes [ j ++ ] ) ) { while ( cur . indexOf ( " " + clazz + " " ) > - 1 ) { cur = cur . replace ( " " + clazz + " " , " " ) ; } }
finalValue = stripAndCollapse ( cur ) ; if ( curValue !== finalValue ) { elem . setAttribute ( "class" , finalValue ) ; } } } }
return this ; } , toggleClass : function ( value , stateVal ) { var type = typeof value , isValidValue = type === "string" || Array . isArray ( value ) ; if ( typeof stateVal === "boolean" && isValidValue ) { return stateVal ? this . addClass ( value ) : this . removeClass ( value ) ; }
if ( isFunction ( value ) ) { return this . each ( function ( i ) { jQuery ( this ) . toggleClass ( value . call ( this , i , getClass ( this ) , stateVal ) , stateVal ) ; } ) ; }
return this . each ( function ( ) { var className , i , self , classNames ; if ( isValidValue ) { i = 0 ; self = jQuery ( this ) ; classNames = classesToArray ( value ) ; while ( ( className = classNames [ i ++ ] ) ) { if ( self . hasClass ( className ) ) { self . removeClass ( className ) ; } else { self . addClass ( className ) ; } }
} else if ( value === undefined || type === "boolean" ) { className = getClass ( this ) ; if ( className ) { dataPriv . set ( this , "__className__" , className ) ; }
if ( this . setAttribute ) { this . setAttribute ( "class" , className || value === false ? "" : dataPriv . get ( this , "__className__" ) || "" ) ; } } } ) ; } , hasClass : function ( selector ) { var className , elem , i = 0 ; className = " " + selector + " " ; while ( ( elem = this [ i ++ ] ) ) { if ( elem . nodeType === 1 && ( " " + stripAndCollapse ( getClass ( elem ) ) + " " ) . indexOf ( className ) > - 1 ) { return true ; } }
return false ; } } ) ; var rreturn = /\r/g ; jQuery . fn . extend ( { val : function ( value ) { var hooks , ret , valueIsFunction , elem = this [ 0 ] ; if ( ! arguments . length ) { if ( elem ) { hooks = jQuery . valHooks [ elem . type ] || jQuery . valHooks [ elem . nodeName . toLowerCase ( ) ] ; if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , "value" ) ) !== undefined ) { return ret ; }
ret = elem . value ; if ( typeof ret === "string" ) { return ret . replace ( rreturn , "" ) ; }
return ret == null ? "" : ret ; }
return ; }
valueIsFunction = isFunction ( value ) ; return this . each ( function ( i ) { var val ; if ( this . nodeType !== 1 ) { return ; }
if ( valueIsFunction ) { val = value . call ( this , i , jQuery ( this ) . val ( ) ) ; } else { val = value ; }
if ( val == null ) { val = "" ; } else if ( typeof val === "number" ) { val += "" ; } else if ( Array . isArray ( val ) ) { val = jQuery . map ( val , function ( value ) { return value == null ? "" : value + "" ; } ) ; }
hooks = jQuery . valHooks [ this . type ] || jQuery . valHooks [ this . nodeName . toLowerCase ( ) ] ; if ( ! hooks || ! ( "set" in hooks ) || hooks . set ( this , val , "value" ) === undefined ) { this . value = val ; } } ) ; } } ) ; jQuery . extend ( { valHooks : { option : { get : function ( elem ) { var val = jQuery . find . attr ( elem , "value" ) ; return val != null ? val : stripAndCollapse ( jQuery . text ( elem ) ) ; } } , select : { get : function ( elem ) { var value , option , i , options = elem . options , index = elem . selectedIndex , one = elem . type === "select-one" , values = one ? null : [ ] , max = one ? index + 1 : options . length ; if ( index < 0 ) { i = max ; } else { i = one ? index : 0 ; }
for ( ; i < max ; i ++ ) { option = options [ i ] ; if ( ( option . selected || i === index ) && ! option . disabled && ( ! option . parentNode . disabled || ! nodeName ( option . parentNode , "optgroup" ) ) ) { value = jQuery ( option ) . val ( ) ; if ( one ) { return value ; }
values . push ( value ) ; } }
return values ; } , set : function ( elem , value ) { var optionSet , option , options = elem . options , values = jQuery . makeArray ( value ) , i = options . length ; while ( i -- ) { option = options [ i ] ; if ( option . selected = jQuery . inArray ( jQuery . valHooks . option . get ( option ) , values ) > - 1 ) { optionSet = true ; }
}
if ( ! optionSet ) { elem . selectedIndex = - 1 ; }
return values ; } } } } ) ; jQuery . each ( [ "radio" , "checkbox" ] , function ( ) { jQuery . valHooks [ this ] = { set : function ( elem , value ) { if ( Array . isArray ( value ) ) { return ( elem . checked = jQuery . inArray ( jQuery ( elem ) . val ( ) , value ) > - 1 ) ; } } } ; if ( ! support . checkOn ) { jQuery . valHooks [ this ] . get = function ( elem ) { return elem . getAttribute ( "value" ) === null ? "on" : elem . value ; } ; } } ) ; support . focusin = "onfocusin" in window ; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/ , stopPropagationCallback = function ( e ) { e . stopPropagation ( ) ; } ; jQuery . extend ( jQuery . event , { trigger : function ( event , data , elem , onlyHandlers ) { var i , cur , tmp , bubbleType , ontype , handle , special , lastElement , eventPath = [ elem || document ] , type = hasOwn . call ( event , "type" ) ? event . type : event , namespaces = hasOwn . call ( event , "namespace" ) ? event . namespace . split ( "." ) : [ ] ; cur = lastElement = tmp = elem = elem || document ; if ( elem . nodeType === 3 || elem . nodeType === 8 ) { return ; }
if ( rfocusMorph . test ( type + jQuery . event . triggered ) ) { return ; }
if ( type . indexOf ( "." ) > - 1 ) { namespaces = type . split ( "." ) ; type = namespaces . shift ( ) ; namespaces . sort ( ) ; }
ontype = type . indexOf ( ":" ) < 0 && "on" + type ; event = event [ jQuery . expando ] ? event : new jQuery . Event ( type , typeof event === "object" && event ) ; event . isTrigger = onlyHandlers ? 2 : 3 ; event . namespace = namespaces . join ( "." ) ; event . rnamespace = event . namespace ? new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null ; event . result = undefined ; if ( ! event . target ) { event . target = elem ; }
data = data == null ? [ event ] : jQuery . makeArray ( data , [ event ] ) ; special = jQuery . event . special [ type ] || { } ; if ( ! onlyHandlers && special . trigger && special . trigger . apply ( elem , data ) === false ) { return ; }
if ( ! onlyHandlers && ! special . noBubble && ! isWindow ( elem ) ) { bubbleType = special . delegateType || type ; if ( ! rfocusMorph . test ( bubbleType + type ) ) { cur = cur . parentNode ; }
for ( ; cur ; cur = cur . parentNode ) { eventPath . push ( cur ) ; tmp = cur ; }
if ( tmp === ( elem . ownerDocument || document ) ) { eventPath . push ( tmp . defaultView || tmp . parentWindow || window ) ; } }
i = 0 ; while ( ( cur = eventPath [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { lastElement = cur ; event . type = i > 1 ? bubbleType : special . bindType || type ; handle = ( dataPriv . get ( cur , "events" ) || { } ) [ event . type ] && dataPriv . get ( cur , "handle" ) ; if ( handle ) { handle . apply ( cur , data ) ; }
handle = ontype && cur [ ontype ] ; if ( handle && handle . apply && acceptData ( cur ) ) { event . result = handle . apply ( cur , data ) ; if ( event . result === false ) { event . preventDefault ( ) ; } } }
event . type = type ; if ( ! onlyHandlers && ! event . isDefaultPrevented ( ) ) { if ( ( ! special . _default || special . _default . apply ( eventPath . pop ( ) , data ) === false ) && acceptData ( elem ) ) { if ( ontype && isFunction ( elem [ type ] ) && ! isWindow ( elem ) ) { tmp = elem [ ontype ] ; if ( tmp ) { elem [ ontype ] = null ; }
jQuery . event . triggered = type ; if ( event . isPropagationStopped ( ) ) { lastElement . addEventListener ( type , stopPropagationCallback ) ; }
elem [ type ] ( ) ; if ( event . isPropagationStopped ( ) ) { lastElement . removeEventListener ( type , stopPropagationCallback ) ; }
jQuery . event . triggered = undefined ; if ( tmp ) { elem [ ontype ] = tmp ; } } } }
return event . result ; } , simulate : function ( type , elem , event ) { var e = jQuery . extend ( new jQuery . Event ( ) , event , { type : type , isSimulated : true } ) ; jQuery . event . trigger ( e , null , elem ) ; } } ) ; jQuery . fn . extend ( { trigger : function ( type , data ) { return this . each ( function ( ) { jQuery . event . trigger ( type , data , this ) ; } ) ; } , triggerHandler : function ( type , data ) { var elem = this [ 0 ] ; if ( elem ) { return jQuery . event . trigger ( type , data , elem , true ) ; } } } ) ; if ( ! support . focusin ) { jQuery . each ( { focus : "focusin" , blur : "focusout" } , function ( orig , fix ) { var handler = function ( event ) { jQuery . event . simulate ( fix , event . target , jQuery . event . fix ( event ) ) ; } ; jQuery . event . special [ fix ] = { setup : function ( ) { var doc = this . ownerDocument || this , attaches = dataPriv . access ( doc , fix ) ; if ( ! attaches ) { doc . addEventListener ( orig , handler , true ) ; }
dataPriv . access ( doc , fix , ( attaches || 0 ) + 1 ) ; } , teardown : function ( ) { var doc = this . ownerDocument || this , attaches = dataPriv . access ( doc , fix ) - 1 ; if ( ! attaches ) { doc . removeEventListener ( orig , handler , true ) ; dataPriv . remove ( doc , fix ) ; } else { dataPriv . access ( doc , fix , attaches ) ; } } } ; } ) ; }
var location = window . location ; var nonce = Date . now ( ) ; var rquery = ( /\?/ ) ; jQuery . parseXML = function ( data ) { var xml ; if ( ! data || typeof data !== "string" ) { return null ; }
try { xml = ( new window . DOMParser ( ) ) . parseFromString ( data , "text/xml" ) ; } catch ( e ) { xml = undefined ; }
if ( ! xml || xml . getElementsByTagName ( "parsererror" ) . length ) { jQuery . error ( "Invalid XML: " + data ) ; }
return xml ; } ; var
rbracket = /\[\]$/ , rCRLF = /\r?\n/g , rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i , rsubmittable = /^(?:input|select|textarea|keygen)/i ; function buildParams ( prefix , obj , traditional , add ) { var name ; if ( Array . isArray ( obj ) ) { jQuery . each ( obj , function ( i , v ) { if ( traditional || rbracket . test ( prefix ) ) { add ( prefix , v ) ; } else { buildParams ( prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]" , v , traditional , add ) ; } } ) ; } else if ( ! traditional && toType ( obj ) === "object" ) { for ( name in obj ) { buildParams ( prefix + "[" + name + "]" , obj [ name ] , traditional , add ) ; } } else { add ( prefix , obj ) ; } }
jQuery . param = function ( a , traditional ) { var prefix , s = [ ] , add = function ( key , valueOrFunction ) { var value = isFunction ( valueOrFunction ) ? valueOrFunction ( ) : valueOrFunction ; s [ s . length ] = encodeURIComponent ( key ) + "=" +
encodeURIComponent ( value == null ? "" : value ) ; } ; if ( Array . isArray ( a ) || ( a . jquery && ! jQuery . isPlainObject ( a ) ) ) { jQuery . each ( a , function ( ) { add ( this . name , this . value ) ; } ) ; } else { for ( prefix in a ) { buildParams ( prefix , a [ prefix ] , traditional , add ) ; } }
return s . join ( "&" ) ; } ; jQuery . fn . extend ( { serialize : function ( ) { return jQuery . param ( this . serializeArray ( ) ) ; } , serializeArray : function ( ) { return this . map ( function ( ) { var elements = jQuery . prop ( this , "elements" ) ; return elements ? jQuery . makeArray ( elements ) : this ; } ) . filter ( function ( ) { var type = this . type ; return this . name && ! jQuery ( this ) . is ( ":disabled" ) && rsubmittable . test ( this . nodeName ) && ! rsubmitterTypes . test ( type ) && ( this . checked || ! rcheckableType . test ( type ) ) ; } ) . map ( function ( i , elem ) { var val = jQuery ( this ) . val ( ) ; if ( val == null ) { return null ; }
if ( Array . isArray ( val ) ) { return jQuery . map ( val , function ( val ) { return { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } ; } ) ; }
return { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } ; } ) . get ( ) ; } } ) ; var
r20 = /%20/g , rhash = /#.*$/ , rantiCache = /([?&])_=[^&]*/ , rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg , rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ , rnoContent = /^(?:GET|HEAD)$/ , rprotocol = /^\/\// , prefilters = { } , transports = { } , allTypes = "*/" . concat ( "*" ) , originAnchor = document . createElement ( "a" ) ; originAnchor . href = location . href ; function addToPrefiltersOrTransports ( structure ) { return function ( dataTypeExpression , func ) { if ( typeof dataTypeExpression !== "string" ) { func = dataTypeExpression ; dataTypeExpression = "*" ; }
var dataType , i = 0 , dataTypes = dataTypeExpression . toLowerCase ( ) . match ( rnothtmlwhite ) || [ ] ; if ( isFunction ( func ) ) { while ( ( dataType = dataTypes [ i ++ ] ) ) { if ( dataType [ 0 ] === "+" ) { dataType = dataType . slice ( 1 ) || "*" ; ( structure [ dataType ] = structure [ dataType ] || [ ] ) . unshift ( func ) ; } else { ( structure [ dataType ] = structure [ dataType ] || [ ] ) . push ( func ) ; } } } } ; }
function inspectPrefiltersOrTransports ( structure , options , originalOptions , jqXHR ) { var inspected = { } , seekingTransport = ( structure === transports ) ; function inspect ( dataType ) { var selected ; inspected [ dataType ] = true ; jQuery . each ( structure [ dataType ] || [ ] , function ( _ , prefilterOrFactory ) { var dataTypeOrTransport = prefilterOrFactory ( options , originalOptions , jqXHR ) ; if ( typeof dataTypeOrTransport === "string" && ! seekingTransport && ! inspected [ dataTypeOrTransport ] ) { options . dataTypes . unshift ( dataTypeOrTransport ) ; inspect ( dataTypeOrTransport ) ; return false ; } else if ( seekingTransport ) { return ! ( selected = dataTypeOrTransport ) ; } } ) ; return selected ; }
return inspect ( options . dataTypes [ 0 ] ) || ! inspected [ "*" ] && inspect ( "*" ) ; }
function ajaxExtend ( target , src ) { var key , deep , flatOptions = jQuery . ajaxSettings . flatOptions || { } ; for ( key in src ) { if ( src [ key ] !== undefined ) { ( flatOptions [ key ] ? target : ( deep || ( deep = { } ) ) ) [ key ] = src [ key ] ; } }
if ( deep ) { jQuery . extend ( true , target , deep ) ; }
return target ; }
function ajaxHandleResponses ( s , jqXHR , responses ) { var ct , type , finalDataType , firstDataType , contents = s . contents , dataTypes = s . dataTypes ; while ( dataTypes [ 0 ] === "*" ) { dataTypes . shift ( ) ; if ( ct === undefined ) { ct = s . mimeType || jqXHR . getResponseHeader ( "Content-Type" ) ; } }
if ( ct ) { for ( type in contents ) { if ( contents [ type ] && contents [ type ] . test ( ct ) ) { dataTypes . unshift ( type ) ; break ; } } }
if ( dataTypes [ 0 ] in responses ) { finalDataType = dataTypes [ 0 ] ; } else { for ( type in responses ) { if ( ! dataTypes [ 0 ] || s . converters [ type + " " + dataTypes [ 0 ] ] ) { finalDataType = type ; break ; }
if ( ! firstDataType ) { firstDataType = type ; } }
finalDataType = finalDataType || firstDataType ; }
if ( finalDataType ) { if ( finalDataType !== dataTypes [ 0 ] ) { dataTypes . unshift ( finalDataType ) ; }
return responses [ finalDataType ] ; } }
function ajaxConvert ( s , response , jqXHR , isSuccess ) { var conv2 , current , conv , tmp , prev , converters = { } , dataTypes = s . dataTypes . slice ( ) ; if ( dataTypes [ 1 ] ) { for ( conv in s . converters ) { converters [ conv . toLowerCase ( ) ] = s . converters [ conv ] ; } }
current = dataTypes . shift ( ) ; while ( current ) { if ( s . responseFields [ current ] ) { jqXHR [ s . responseFields [ current ] ] = response ; }
if ( ! prev && isSuccess && s . dataFilter ) { response = s . dataFilter ( response , s . dataType ) ; }
prev = current ; current = dataTypes . shift ( ) ; if ( current ) { if ( current === "*" ) { current = prev ; } else if ( prev !== "*" && prev !== current ) { conv = converters [ prev + " " + current ] || converters [ "* " + current ] ; if ( ! conv ) { for ( conv2 in converters ) { tmp = conv2 . split ( " " ) ; if ( tmp [ 1 ] === current ) { conv = converters [ prev + " " + tmp [ 0 ] ] || converters [ "* " + tmp [ 0 ] ] ; if ( conv ) { if ( conv === true ) { conv = converters [ conv2 ] ; } else if ( converters [ conv2 ] !== true ) { current = tmp [ 0 ] ; dataTypes . unshift ( tmp [ 1 ] ) ; }
break ; } } } }
if ( conv !== true ) { if ( conv && s . throws ) { response = conv ( response ) ; } else { try { response = conv ( response ) ; } catch ( e ) { return { state : "parsererror" , error : conv ? e : "No conversion from " + prev + " to " + current } ; } } } } } }
return { state : "success" , data : response } ; }
jQuery . extend ( { active : 0 , lastModified : { } , etag : { } , ajaxSettings : { url : location . href , type : "GET" , isLocal : rlocalProtocol . test ( location . protocol ) , global : true , processData : true , async : true , contentType : "application/x-www-form-urlencoded; charset=UTF-8" , accepts : { "*" : allTypes , text : "text/plain" , html : "text/html" , xml : "application/xml, text/xml" , json : "application/json, text/javascript" } , contents : { xml : /\bxml\b/ , html : /\bhtml/ , json : /\bjson\b/ } , responseFields : { xml : "responseXML" , text : "responseText" , json : "responseJSON" } , converters : { "* text" : String , "text html" : true , "text json" : JSON . parse , "text xml" : jQuery . parseXML } , flatOptions : { url : true , context : true } } , ajaxSetup : function ( target , settings ) { return settings ? ajaxExtend ( ajaxExtend ( target , jQuery . ajaxSettings ) , settings ) : ajaxExtend ( jQuery . ajaxSettings , target ) ; } , ajaxPrefilter : addToPrefiltersOrTransports ( prefilters ) , ajaxTransport : addToPrefiltersOrTransports ( transports ) , ajax : function ( url , options ) { if ( typeof url === "object" ) { options = url ; url = undefined ; }
options = options || { } ; var transport , cacheURL , responseHeadersString , responseHeaders , timeoutTimer , urlAnchor , completed , fireGlobals , i , uncached , s = jQuery . ajaxSetup ( { } , options ) , callbackContext = s . context || s , globalEventContext = s . context && ( callbackContext . nodeType || callbackContext . jquery ) ? jQuery ( callbackContext ) : jQuery . event , deferred = jQuery . Deferred ( ) , completeDeferred = jQuery . Callbacks ( "once memory" ) , statusCode = s . statusCode || { } , requestHeaders = { } , requestHeadersNames = { } , strAbort = "canceled" , jqXHR = { readyState : 0 , getResponseHeader : function ( key ) { var match ; if ( completed ) { if ( ! responseHeaders ) { responseHeaders = { } ; while ( ( match = rheaders . exec ( responseHeadersString ) ) ) { responseHeaders [ match [ 1 ] . toLowerCase ( ) ] = match [ 2 ] ; } }
match = responseHeaders [ key . toLowerCase ( ) ] ; }
return match == null ? null : match ; } , getAllResponseHeaders : function ( ) { return completed ? responseHeadersString : null ; } , setRequestHeader : function ( name , value ) { if ( completed == null ) { name = requestHeadersNames [ name . toLowerCase ( ) ] = requestHeadersNames [ name . toLowerCase ( ) ] || name ; requestHeaders [ name ] = value ; }
return this ; } , overrideMimeType : function ( type ) { if ( completed == null ) { s . mimeType = type ; }
return this ; } , statusCode : function ( map ) { var code ; if ( map ) { if ( completed ) { jqXHR . always ( map [ jqXHR . status ] ) ; } else { for ( code in map ) { statusCode [ code ] = [ statusCode [ code ] , map [ code ] ] ; } } }
return this ; } , abort : function ( statusText ) { var finalText = statusText || strAbort ; if ( transport ) { transport . abort ( finalText ) ; }
done ( 0 , finalText ) ; return this ; } } ; deferred . promise ( jqXHR ) ; s . url = ( ( url || s . url || location . href ) + "" ) . replace ( rprotocol , location . protocol + "//" ) ; s . type = options . method || options . type || s . method || s . type ; s . dataTypes = ( s . dataType || "*" ) . toLowerCase ( ) . match ( rnothtmlwhite ) || [ "" ] ; if ( s . crossDomain == null ) { urlAnchor = document . createElement ( "a" ) ; try { urlAnchor . href = s . url ; urlAnchor . href = urlAnchor . href ; s . crossDomain = originAnchor . protocol + "//" + originAnchor . host !== urlAnchor . protocol + "//" + urlAnchor . host ; } catch ( e ) { s . crossDomain = true ; } }
if ( s . data && s . processData && typeof s . data !== "string" ) { s . data = jQuery . param ( s . data , s . traditional ) ; }
inspectPrefiltersOrTransports ( prefilters , s , options , jqXHR ) ; if ( completed ) { return jqXHR ; }
fireGlobals = jQuery . event && s . global ; if ( fireGlobals && jQuery . active ++ === 0 ) { jQuery . event . trigger ( "ajaxStart" ) ; }
s . type = s . type . toUpperCase ( ) ; s . hasContent = ! rnoContent . test ( s . type ) ; cacheURL = s . url . replace ( rhash , "" ) ; if ( ! s . hasContent ) { uncached = s . url . slice ( cacheURL . length ) ; if ( s . data && ( s . processData || typeof s . data === "string" ) ) { cacheURL += ( rquery . test ( cacheURL ) ? "&" : "?" ) + s . data ; delete s . data ; }
if ( s . cache === false ) { cacheURL = cacheURL . replace ( rantiCache , "$1" ) ; uncached = ( rquery . test ( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce ++ ) + uncached ; }
s . url = cacheURL + uncached ; } else if ( s . data && s . processData && ( s . contentType || "" ) . indexOf ( "application/x-www-form-urlencoded" ) === 0 ) { s . data = s . data . replace ( r20 , "+" ) ; }
if ( s . ifModified ) { if ( jQuery . lastModified [ cacheURL ] ) { jqXHR . setRequestHeader ( "If-Modified-Since" , jQuery . lastModified [ cacheURL ] ) ; }
if ( jQuery . etag [ cacheURL ] ) { jqXHR . setRequestHeader ( "If-None-Match" , jQuery . etag [ cacheURL ] ) ; } }
if ( s . data && s . hasContent && s . contentType !== false || options . contentType ) { jqXHR . setRequestHeader ( "Content-Type" , s . contentType ) ; }
jqXHR . setRequestHeader ( "Accept" , s . dataTypes [ 0 ] && s . accepts [ s . dataTypes [ 0 ] ] ? s . accepts [ s . dataTypes [ 0 ] ] +
( s . dataTypes [ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s . accepts [ "*" ] ) ; for ( i in s . headers ) { jqXHR . setRequestHeader ( i , s . headers [ i ] ) ; }
if ( s . beforeSend && ( s . beforeSend . call ( callbackContext , jqXHR , s ) === false || completed ) ) { return jqXHR . abort ( ) ; }
strAbort = "abort" ; completeDeferred . add ( s . complete ) ; jqXHR . done ( s . success ) ; jqXHR . fail ( s . error ) ; transport = inspectPrefiltersOrTransports ( transports , s , options , jqXHR ) ; if ( ! transport ) { done ( - 1 , "No Transport" ) ; } else { jqXHR . readyState = 1 ; if ( fireGlobals ) { globalEventContext . trigger ( "ajaxSend" , [ jqXHR , s ] ) ; }
if ( completed ) { return jqXHR ; }
if ( s . async && s . timeout > 0 ) { timeoutTimer = window . setTimeout ( function ( ) { jqXHR . abort ( "timeout" ) ; } , s . timeout ) ; }
try { completed = false ; transport . send ( requestHeaders , done ) ; } catch ( e ) { if ( completed ) { throw e ; }
done ( - 1 , e ) ; } }
function done ( status , nativeStatusText , responses , headers ) { var isSuccess , success , error , response , modified , statusText = nativeStatusText ; if ( completed ) { return ; }
completed = true ; if ( timeoutTimer ) { window . clearTimeout ( timeoutTimer ) ; }
transport = undefined ; responseHeadersString = headers || "" ; jqXHR . readyState = status > 0 ? 4 : 0 ; isSuccess = status >= 200 && status < 300 || status === 304 ; if ( responses ) { response = ajaxHandleResponses ( s , jqXHR , responses ) ; }
response = ajaxConvert ( s , response , jqXHR , isSuccess ) ; if ( isSuccess ) { if ( s . ifModified ) { modified = jqXHR . getResponseHeader ( "Last-Modified" ) ; if ( modified ) { jQuery . lastModified [ cacheURL ] = modified ; }
modified = jqXHR . getResponseHeader ( "etag" ) ; if ( modified ) { jQuery . etag [ cacheURL ] = modified ; } }
if ( status === 204 || s . type === "HEAD" ) { statusText = "nocontent" ; } else if ( status === 304 ) { statusText = "notmodified" ; } else { statusText = response . state ; success = response . data ; error = response . error ; isSuccess = ! error ; } } else { error = statusText ; if ( status || ! statusText ) { statusText = "error" ; if ( status < 0 ) { status = 0 ; } } }
jqXHR . status = status ; jqXHR . statusText = ( nativeStatusText || statusText ) + "" ; if ( isSuccess ) { deferred . resolveWith ( callbackContext , [ success , statusText , jqXHR ] ) ; } else { deferred . rejectWith ( callbackContext , [ jqXHR , statusText , error ] ) ; }
jqXHR . statusCode ( statusCode ) ; statusCode = undefined ; if ( fireGlobals ) { globalEventContext . trigger ( isSuccess ? "ajaxSuccess" : "ajaxError" , [ jqXHR , s , isSuccess ? success : error ] ) ; }
completeDeferred . fireWith ( callbackContext , [ jqXHR , statusText ] ) ; if ( fireGlobals ) { globalEventContext . trigger ( "ajaxComplete" , [ jqXHR , s ] ) ; if ( ! ( -- jQuery . active ) ) { jQuery . event . trigger ( "ajaxStop" ) ; } } }
return jqXHR ; } , getJSON : function ( url , data , callback ) { return jQuery . get ( url , data , callback , "json" ) ; } , getScript : function ( url , callback ) { return jQuery . get ( url , undefined , callback , "script" ) ; } } ) ; jQuery . each ( [ "get" , "post" ] , function ( i , method ) { jQuery [ method ] = function ( url , data , callback , type ) { if ( isFunction ( data ) ) { type = type || callback ; callback = data ; data = undefined ; }
return jQuery . ajax ( jQuery . extend ( { url : url , type : method , dataType : type , data : data , success : callback } , jQuery . isPlainObject ( url ) && url ) ) ; } ; } ) ; jQuery . _evalUrl = function ( url ) { return jQuery . ajax ( { url : url , type : "GET" , dataType : "script" , cache : true , async : false , global : false , "throws" : true } ) ; } ; jQuery . fn . extend ( { wrapAll : function ( html ) { var wrap ; if ( this [ 0 ] ) { if ( isFunction ( html ) ) { html = html . call ( this [ 0 ] ) ; }
wrap = jQuery ( html , this [ 0 ] . ownerDocument ) . eq ( 0 ) . clone ( true ) ; if ( this [ 0 ] . parentNode ) { wrap . insertBefore ( this [ 0 ] ) ; }
wrap . map ( function ( ) { var elem = this ; while ( elem . firstElementChild ) { elem = elem . firstElementChild ; }
return elem ; } ) . append ( this ) ; }
return this ; } , wrapInner : function ( html ) { if ( isFunction ( html ) ) { return this . each ( function ( i ) { jQuery ( this ) . wrapInner ( html . call ( this , i ) ) ; } ) ; }
return this . each ( function ( ) { var self = jQuery ( this ) , contents = self . contents ( ) ; if ( contents . length ) { contents . wrapAll ( html ) ; } else { self . append ( html ) ; } } ) ; } , wrap : function ( html ) { var htmlIsFunction = isFunction ( html ) ; return this . each ( function ( i ) { jQuery ( this ) . wrapAll ( htmlIsFunction ? html . call ( this , i ) : html ) ; } ) ; } , unwrap : function ( selector ) { this . parent ( selector ) . not ( "body" ) . each ( function ( ) { jQuery ( this ) . replaceWith ( this . childNodes ) ; } ) ; return this ; } } ) ; jQuery . expr . pseudos . hidden = function ( elem ) { return ! jQuery . expr . pseudos . visible ( elem ) ; } ; jQuery . expr . pseudos . visible = function ( elem ) { return ! ! ( elem . offsetWidth || elem . offsetHeight || elem . getClientRects ( ) . length ) ; } ; jQuery . ajaxSettings . xhr = function ( ) { try { return new window . XMLHttpRequest ( ) ; } catch ( e ) { } } ; var xhrSuccessStatus = { 0 : 200 , 1223 : 204 } , xhrSupported = jQuery . ajaxSettings . xhr ( ) ; support . cors = ! ! xhrSupported && ( "withCredentials" in xhrSupported ) ; support . ajax = xhrSupported = ! ! xhrSupported ; jQuery . ajaxTransport ( function ( options ) { var callback , errorCallback ; if ( support . cors || xhrSupported && ! options . crossDomain ) { return { send : function ( headers , complete ) { var i , xhr = options . xhr ( ) ; xhr . open ( options . type , options . url , options . async , options . username , options . password ) ; if ( options . xhrFields ) { for ( i in options . xhrFields ) { xhr [ i ] = options . xhrFields [ i ] ; } }
if ( options . mimeType && xhr . overrideMimeType ) { xhr . overrideMimeType ( options . mimeType ) ; }
if ( ! options . crossDomain && ! headers [ "X-Requested-With" ] ) { headers [ "X-Requested-With" ] = "XMLHttpRequest" ; }
for ( i in headers ) { xhr . setRequestHeader ( i , headers [ i ] ) ; }
callback = function ( type ) { return function ( ) { if ( callback ) { callback = errorCallback = xhr . onload = xhr . onerror = xhr . onabort = xhr . ontimeout = xhr . onreadystatechange = null ; if ( type === "abort" ) { xhr . abort ( ) ; } else if ( type === "error" ) { if ( typeof xhr . status !== "number" ) { complete ( 0 , "error" ) ; } else { complete ( xhr . status , xhr . statusText ) ; } } else { complete ( xhrSuccessStatus [ xhr . status ] || xhr . status , xhr . statusText , ( xhr . responseType || "text" ) !== "text" || typeof xhr . responseText !== "string" ? { binary : xhr . response } : { text : xhr . responseText } , xhr . getAllResponseHeaders ( ) ) ; } } } ; } ; xhr . onload = callback ( ) ; errorCallback = xhr . onerror = xhr . ontimeout = callback ( "error" ) ; if ( xhr . onabort !== undefined ) { xhr . onabort = errorCallback ; } else { xhr . onreadystatechange = function ( ) { if ( xhr . readyState === 4 ) { window . setTimeout ( function ( ) { if ( callback ) { errorCallback ( ) ; } } ) ; } } ; }
callback = callback ( "abort" ) ; try { xhr . send ( options . hasContent && options . data || null ) ; } catch ( e ) { if ( callback ) { throw e ; } } } , abort : function ( ) { if ( callback ) { callback ( ) ; } } } ; } } ) ; jQuery . ajaxPrefilter ( function ( s ) { if ( s . crossDomain ) { s . contents . script = false ; } } ) ; jQuery . ajaxSetup ( { accepts : { script : "text/javascript, application/javascript, " +
"application/ecmascript, application/x-ecmascript" } , contents : { script : /\b(?:java|ecma)script\b/ } , converters : { "text script" : function ( text ) { jQuery . globalEval ( text ) ; return text ; } } } ) ; jQuery . ajaxPrefilter ( "script" , function ( s ) { if ( s . cache === undefined ) { s . cache = false ; }
if ( s . crossDomain ) { s . type = "GET" ; } } ) ; jQuery . ajaxTransport ( "script" , function ( s ) { if ( s . crossDomain ) { var script , callback ; return { send : function ( _ , complete ) { script = jQuery ( "<script>" ) . prop ( { charset : s . scriptCharset , src : s . url } ) . on ( "load error" , callback = function ( evt ) { script . remove ( ) ; callback = null ; if ( evt ) { complete ( evt . type === "error" ? 404 : 200 , evt . type ) ; } } ) ; document . head . appendChild ( script [ 0 ] ) ; } , abort : function ( ) { if ( callback ) { callback ( ) ; } } } ; } } ) ; var oldCallbacks = [ ] , rjsonp = /(=)\?(?=&|$)|\?\?/ ; jQuery . ajaxSetup ( { jsonp : "callback" , jsonpCallback : function ( ) { var callback = oldCallbacks . pop ( ) || ( jQuery . expando + "_" + ( nonce ++ ) ) ; this [ callback ] = true ; return callback ; } } ) ; jQuery . ajaxPrefilter ( "json jsonp" , function ( s , originalSettings , jqXHR ) { var callbackName , overwritten , responseContainer , jsonProp = s . jsonp !== false && ( rjsonp . test ( s . url ) ? "url" : typeof s . data === "string" && ( s . contentType || "" ) . indexOf ( "application/x-www-form-urlencoded" ) === 0 && rjsonp . test ( s . data ) && "data" ) ; if ( jsonProp || s . dataTypes [ 0 ] === "jsonp" ) { callbackName = s . jsonpCallback = isFunction ( s . jsonpCallback ) ? s . jsonpCallback ( ) : s . jsonpCallback ; if ( jsonProp ) { s [ jsonProp ] = s [ jsonProp ] . replace ( rjsonp , "$1" + callbackName ) ; } else if ( s . jsonp !== false ) { s . url += ( rquery . test ( s . url ) ? "&" : "?" ) + s . jsonp + "=" + callbackName ; }
s . converters [ "script json" ] = function ( ) { if ( ! responseContainer ) { jQuery . error ( callbackName + " was not called" ) ; }
return responseContainer [ 0 ] ; } ; s . dataTypes [ 0 ] = "json" ; overwritten = window [ callbackName ] ; window [ callbackName ] = function ( ) { responseContainer = arguments ; } ; jqXHR . always ( function ( ) { if ( overwritten === undefined ) { jQuery ( window ) . removeProp ( callbackName ) ; } else { window [ callbackName ] = overwritten ; }
if ( s [ callbackName ] ) { s . jsonpCallback = originalSettings . jsonpCallback ; oldCallbacks . push ( callbackName ) ; }
if ( responseContainer && isFunction ( overwritten ) ) { overwritten ( responseContainer [ 0 ] ) ; }
responseContainer = overwritten = undefined ; } ) ; return "script" ; } } ) ; support . createHTMLDocument = ( function ( ) { var body = document . implementation . createHTMLDocument ( "" ) . body ; body . innerHTML = "<form></form><form></form>" ; return body . childNodes . length === 2 ; } ) ( ) ; jQuery . parseHTML = function ( data , context , keepScripts ) { if ( typeof data !== "string" ) { return [ ] ; }
if ( typeof context === "boolean" ) { keepScripts = context ; context = false ; }
var base , parsed , scripts ; if ( ! context ) { if ( support . createHTMLDocument ) { context = document . implementation . createHTMLDocument ( "" ) ; base = context . createElement ( "base" ) ; base . href = document . location . href ; context . head . appendChild ( base ) ; } else { context = document ; } }
parsed = rsingleTag . exec ( data ) ; scripts = ! keepScripts && [ ] ; if ( parsed ) { return [ context . createElement ( parsed [ 1 ] ) ] ; }
parsed = buildFragment ( [ data ] , context , scripts ) ; if ( scripts && scripts . length ) { jQuery ( scripts ) . remove ( ) ; }
return jQuery . merge ( [ ] , parsed . childNodes ) ; } ; jQuery . fn . load = function ( url , params , callback ) { var selector , type , response , self = this , off = url . indexOf ( " " ) ; if ( off > - 1 ) { selector = stripAndCollapse ( url . slice ( off ) ) ; url = url . slice ( 0 , off ) ; }
if ( isFunction ( params ) ) { callback = params ; params = undefined ; } else if ( params && typeof params === "object" ) { type = "POST" ; }
if ( self . length > 0 ) { jQuery . ajax ( { url : url , type : type || "GET" , dataType : "html" , data : params } ) . done ( function ( responseText ) { response = arguments ; self . html ( selector ? jQuery ( "<div>" ) . append ( jQuery . parseHTML ( responseText ) ) . find ( selector ) : responseText ) ; } ) . always ( callback && function ( jqXHR , status ) { self . each ( function ( ) { callback . apply ( this , response || [ jqXHR . responseText , status , jqXHR ] ) ; } ) ; } ) ; }
return this ; } ; jQuery . each ( [ "ajaxStart" , "ajaxStop" , "ajaxComplete" , "ajaxError" , "ajaxSuccess" , "ajaxSend" ] , function ( i , type ) { jQuery . fn [ type ] = function ( fn ) { return this . on ( type , fn ) ; } ; } ) ; jQuery . expr . pseudos . animated = function ( elem ) { return jQuery . grep ( jQuery . timers , function ( fn ) { return elem === fn . elem ; } ) . length ; } ; jQuery . offset = { setOffset : function ( elem , options , i ) { var curPosition , curLeft , curCSSTop , curTop , curOffset , curCSSLeft , calculatePosition , position = jQuery . css ( elem , "position" ) , curElem = jQuery ( elem ) , props = { } ; if ( position === "static" ) { elem . style . position = "relative" ; }
curOffset = curElem . offset ( ) ; curCSSTop = jQuery . css ( elem , "top" ) ; curCSSLeft = jQuery . css ( elem , "left" ) ; calculatePosition = ( position === "absolute" || position === "fixed" ) && ( curCSSTop + curCSSLeft ) . indexOf ( "auto" ) > - 1 ; if ( calculatePosition ) { curPosition = curElem . position ( ) ; curTop = curPosition . top ; curLeft = curPosition . left ; } else { curTop = parseFloat ( curCSSTop ) || 0 ; curLeft = parseFloat ( curCSSLeft ) || 0 ; }
if ( isFunction ( options ) ) { options = options . call ( elem , i , jQuery . extend ( { } , curOffset ) ) ; }
if ( options . top != null ) { props . top = ( options . top - curOffset . top ) + curTop ; }
if ( options . left != null ) { props . left = ( options . left - curOffset . left ) + curLeft ; }
if ( "using" in options ) { options . using . call ( elem , props ) ; } else { curElem . css ( props ) ; } } } ; jQuery . fn . extend ( { offset : function ( options ) { if ( arguments . length ) { return options === undefined ? this : this . each ( function ( i ) { jQuery . offset . setOffset ( this , options , i ) ; } ) ; }
var rect , win , elem = this [ 0 ] ; if ( ! elem ) { return ; }
if ( ! elem . getClientRects ( ) . length ) { return { top : 0 , left : 0 } ; }
rect = elem . getBoundingClientRect ( ) ; win = elem . ownerDocument . defaultView ; return { top : rect . top + win . pageYOffset , left : rect . left + win . pageXOffset } ; } , position : function ( ) { if ( ! this [ 0 ] ) { return ; }
var offsetParent , offset , doc , elem = this [ 0 ] , parentOffset = { top : 0 , left : 0 } ; if ( jQuery . css ( elem , "position" ) === "fixed" ) { offset = elem . getBoundingClientRect ( ) ; } else { offset = this . offset ( ) ; doc = elem . ownerDocument ; offsetParent = elem . offsetParent || doc . documentElement ; while ( offsetParent && ( offsetParent === doc . body || offsetParent === doc . documentElement ) && jQuery . css ( offsetParent , "position" ) === "static" ) { offsetParent = offsetParent . parentNode ; }
if ( offsetParent && offsetParent !== elem && offsetParent . nodeType === 1 ) { parentOffset = jQuery ( offsetParent ) . offset ( ) ; parentOffset . top += jQuery . css ( offsetParent , "borderTopWidth" , true ) ; parentOffset . left += jQuery . css ( offsetParent , "borderLeftWidth" , true ) ; } }
return { top : offset . top - parentOffset . top - jQuery . css ( elem , "marginTop" , true ) , left : offset . left - parentOffset . left - jQuery . css ( elem , "marginLeft" , true ) } ; } , offsetParent : function ( ) { return this . map ( function ( ) { var offsetParent = this . offsetParent ; while ( offsetParent && jQuery . css ( offsetParent , "position" ) === "static" ) { offsetParent = offsetParent . offsetParent ; }
return offsetParent || documentElement ; } ) ; } } ) ; jQuery . each ( { scrollLeft : "pageXOffset" , scrollTop : "pageYOffset" } , function ( method , prop ) { var top = "pageYOffset" === prop ; jQuery . fn [ method ] = function ( val ) { return access ( this , function ( elem , method , val ) { var win ; if ( isWindow ( elem ) ) { win = elem ; } else if ( elem . nodeType === 9 ) { win = elem . defaultView ; }
if ( val === undefined ) { return win ? win [ prop ] : elem [ method ] ; }
if ( win ) { win . scrollTo ( ! top ? val : win . pageXOffset , top ? val : win . pageYOffset ) ; } else { elem [ method ] = val ; } } , method , val , arguments . length ) ; } ; } ) ; jQuery . each ( [ "top" , "left" ] , function ( i , prop ) { jQuery . cssHooks [ prop ] = addGetHookIf ( support . pixelPosition , function ( elem , computed ) { if ( computed ) { computed = curCSS ( elem , prop ) ; return rnumnonpx . test ( computed ) ? jQuery ( elem ) . position ( ) [ prop ] + "px" : computed ; } } ) ; } ) ; jQuery . each ( { Height : "height" , Width : "width" } , function ( name , type ) { jQuery . each ( { padding : "inner" + name , content : type , "" : "outer" + name } , function ( defaultExtra , funcName ) { jQuery . fn [ funcName ] = function ( margin , value ) { var chainable = arguments . length && ( defaultExtra || typeof margin !== "boolean" ) , extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ) ; return access ( this , function ( elem , type , value ) { var doc ; if ( isWindow ( elem ) ) { return funcName . indexOf ( "outer" ) === 0 ? elem [ "inner" + name ] : elem . document . documentElement [ "client" + name ] ; }
if ( elem . nodeType === 9 ) { doc = elem . documentElement ; return Math . max ( elem . body [ "scroll" + name ] , doc [ "scroll" + name ] , elem . body [ "offset" + name ] , doc [ "offset" + name ] , doc [ "client" + name ] ) ; }
return value === undefined ? jQuery . css ( elem , type , extra ) : jQuery . style ( elem , type , value , extra ) ; } , type , chainable ? margin : undefined , chainable ) ; } ; } ) ; } ) ; jQuery . each ( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ) . split ( " " ) , function ( i , name ) { jQuery . fn [ name ] = function ( data , fn ) { return arguments . length > 0 ? this . on ( name , null , data , fn ) : this . trigger ( name ) ; } ; } ) ; jQuery . fn . extend ( { hover : function ( fnOver , fnOut ) { return this . mouseenter ( fnOver ) . mouseleave ( fnOut || fnOver ) ; } } ) ; jQuery . fn . extend ( { bind : function ( types , data , fn ) { return this . on ( types , null , data , fn ) ; } , unbind : function ( types , fn ) { return this . off ( types , null , fn ) ; } , delegate : function ( selector , types , data , fn ) { return this . on ( types , selector , data , fn ) ; } , undelegate : function ( selector , types , fn ) { return arguments . length === 1 ? this . off ( selector , "**" ) : this . off ( types , selector || "**" , fn ) ; } } ) ; jQuery . proxy = function ( fn , context ) { var tmp , args , proxy ; if ( typeof context === "string" ) { tmp = fn [ context ] ; context = fn ; fn = tmp ; }
if ( ! isFunction ( fn ) ) { return undefined ; }
args = slice . call ( arguments , 2 ) ; proxy = function ( ) { return fn . apply ( context || this , args . concat ( slice . call ( arguments ) ) ) ; } ; proxy . guid = fn . guid = fn . guid || jQuery . guid ++ ; return proxy ; } ; jQuery . holdReady = function ( hold ) { if ( hold ) { jQuery . readyWait ++ ; } else { jQuery . ready ( true ) ; } } ; jQuery . isArray = Array . isArray ; jQuery . parseJSON = JSON . parse ; jQuery . nodeName = nodeName ; jQuery . isFunction = isFunction ; jQuery . isWindow = isWindow ; jQuery . camelCase = camelCase ; jQuery . type = toType ; jQuery . now = Date . now ; jQuery . isNumeric = function ( obj ) { var type = jQuery . type ( obj ) ; return ( type === "number" || type === "string" ) && ! isNaN ( obj - parseFloat ( obj ) ) ; } ; if ( typeof define === "function" && define . amd ) { define ( "jquery" , [ ] , function ( ) { return jQuery ; } ) ; }
var
_jQuery = window . jQuery , _$ = window . $ ; jQuery . noConflict = function ( deep ) { if ( window . $ === jQuery ) { window . $ = _$ ; }
if ( deep && window . jQuery === jQuery ) { window . jQuery = _jQuery ; }
return jQuery ; } ; if ( ! noGlobal ) { window . jQuery = window . $ = jQuery ; }
return jQuery ; } ) ; ; / * ! j Q u e r y U I - v 1 . 1 2 . 1 - 2 0 1 6 - 0 9 - 1 4
* http : //jqueryui.com
* Includes : widget . js , position . js , data . js , disable - selection . js , effect . js , effects / effect - blind . js , effects / effect - bounce . js , effects / effect - clip . js , effects / effect - drop . js , effects / effect - explode . js , effects / effect - fade . js , effects / effect - fold . js , effects / effect - highlight . js , effects / effect - puff . js , effects / effect - pulsate . js , effects / effect - scale . js , effects / effect - shake . js , effects / effect - size . js , effects / effect - slide . js , effects / effect - transfer . js , focusable . js , form - reset - mixin . js , jquery - 1 - 7. js , keycode . js , labels . js , scroll - parent . js , tabbable . js , unique - id . js , widgets / accordion . js , widgets / autocomplete . js , widgets / button . js , widgets / checkboxradio . js , widgets / controlgroup . js , widgets / datepicker . js , widgets / dialog . js , widgets / draggable . js , widgets / droppable . js , widgets / menu . js , widgets / mouse . js , widgets / progressbar . js , widgets / resizable . js , widgets / selectable . js , widgets / selectmenu . js , widgets / slider . js , widgets / sortable . js , widgets / spinner . js , widgets / tabs . js , widgets / tooltip . js
* Copyright jQuery Foundation and other contributors ; Licensed MIT * /
( function ( factory ) { if ( typeof define === "function" && define . amd ) { define ( [ "jquery" ] , factory ) ; } else { factory ( jQuery ) ; } } ( function ( $ ) { $ . ui = $ . ui || { } ; var version = $ . ui . version = "1.12.1" ; / * !
* jQuery UI Widget 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetUuid = 0 ; var widgetSlice = Array . prototype . slice ; $ . cleanData = ( function ( orig ) { return function ( elems ) { var events , elem , i ; for ( i = 0 ; ( elem = elems [ i ] ) != null ; i ++ ) { try { events = $ . _data ( elem , "events" ) ; if ( events && events . remove ) { $ ( elem ) . triggerHandler ( "remove" ) ; }
} catch ( e ) { } }
orig ( elems ) ; } ; } ) ( $ . cleanData ) ; $ . widget = function ( name , base , prototype ) { var existingConstructor , constructor , basePrototype ; var proxiedPrototype = { } ; var namespace = name . split ( "." ) [ 0 ] ; name = name . split ( "." ) [ 1 ] ; var fullName = namespace + "-" + name ; if ( ! prototype ) { prototype = base ; base = $ . Widget ; }
if ( $ . isArray ( prototype ) ) { prototype = $ . extend . apply ( null , [ { } ] . concat ( prototype ) ) ; }
$ . expr [ ":" ] [ fullName . toLowerCase ( ) ] = function ( elem ) { return ! ! $ . data ( elem , fullName ) ; } ; $ [ namespace ] = $ [ namespace ] || { } ; existingConstructor = $ [ namespace ] [ name ] ; constructor = $ [ namespace ] [ name ] = function ( options , element ) { if ( ! this . _createWidget ) { return new constructor ( options , element ) ; }
if ( arguments . length ) { this . _createWidget ( options , element ) ; } } ; $ . extend ( constructor , existingConstructor , { version : prototype . version , _proto : $ . extend ( { } , prototype ) , _childConstructors : [ ] } ) ; basePrototype = new base ( ) ; basePrototype . options = $ . widget . extend ( { } , basePrototype . options ) ; $ . each ( prototype , function ( prop , value ) { if ( ! $ . isFunction ( value ) ) { proxiedPrototype [ prop ] = value ; return ; }
proxiedPrototype [ prop ] = ( function ( ) { function _super ( ) { return base . prototype [ prop ] . apply ( this , arguments ) ; }
function _superApply ( args ) { return base . prototype [ prop ] . apply ( this , args ) ; }
return function ( ) { var _ _super = this . _super ; var _ _superApply = this . _superApply ; var returnValue ; this . _super = _super ; this . _superApply = _superApply ; returnValue = value . apply ( this , arguments ) ; this . _super = _ _super ; this . _superApply = _ _superApply ; return returnValue ; } ; } ) ( ) ; } ) ; constructor . prototype = $ . widget . extend ( basePrototype , { widgetEventPrefix : existingConstructor ? ( basePrototype . widgetEventPrefix || name ) : name } , proxiedPrototype , { constructor : constructor , namespace : namespace , widgetName : name , widgetFullName : fullName } ) ; if ( existingConstructor ) { $ . each ( existingConstructor . _childConstructors , function ( i , child ) { var childPrototype = child . prototype ; $ . widget ( childPrototype . namespace + "." + childPrototype . widgetName , constructor , child . _proto ) ; } ) ; delete existingConstructor . _childConstructors ; } else { base . _childConstructors . push ( constructor ) ; }
$ . widget . bridge ( name , constructor ) ; return constructor ; } ; $ . widget . extend = function ( target ) { var input = widgetSlice . call ( arguments , 1 ) ; var inputIndex = 0 ; var inputLength = input . length ; var key ; var value ; for ( ; inputIndex < inputLength ; inputIndex ++ ) { for ( key in input [ inputIndex ] ) { value = input [ inputIndex ] [ key ] ; if ( input [ inputIndex ] . hasOwnProperty ( key ) && value !== undefined ) { if ( $ . isPlainObject ( value ) ) { target [ key ] = $ . isPlainObject ( target [ key ] ) ? $ . widget . extend ( { } , target [ key ] , value ) : $ . widget . extend ( { } , value ) ; } else { target [ key ] = value ; } } } }
return target ; } ; $ . widget . bridge = function ( name , object ) { var fullName = object . prototype . widgetFullName || name ; $ . fn [ name ] = function ( options ) { var isMethodCall = typeof options === "string" ; var args = widgetSlice . call ( arguments , 1 ) ; var returnValue = this ; if ( isMethodCall ) { if ( ! this . length && options === "instance" ) { returnValue = undefined ; } else { this . each ( function ( ) { var methodValue ; var instance = $ . data ( this , fullName ) ; if ( options === "instance" ) { returnValue = instance ; return false ; }
if ( ! instance ) { return $ . error ( "cannot call methods on " + name +
" prior to initialization; " +
"attempted to call method '" + options + "'" ) ; }
if ( ! $ . isFunction ( instance [ options ] ) || options . charAt ( 0 ) === "_" ) { return $ . error ( "no such method '" + options + "' for " + name +
" widget instance" ) ; }
methodValue = instance [ options ] . apply ( instance , args ) ; if ( methodValue !== instance && methodValue !== undefined ) { returnValue = methodValue && methodValue . jquery ? returnValue . pushStack ( methodValue . get ( ) ) : methodValue ; return false ; } } ) ; } } else { if ( args . length ) { options = $ . widget . extend . apply ( null , [ options ] . concat ( args ) ) ; }
this . each ( function ( ) { var instance = $ . data ( this , fullName ) ; if ( instance ) { instance . option ( options || { } ) ; if ( instance . _init ) { instance . _init ( ) ; } } else { $ . data ( this , fullName , new object ( options , this ) ) ; } } ) ; }
return returnValue ; } ; } ; $ . Widget = function ( ) { } ; $ . Widget . _childConstructors = [ ] ; $ . Widget . prototype = { widgetName : "widget" , widgetEventPrefix : "" , defaultElement : "<div>" , options : { classes : { } , disabled : false , create : null } , _createWidget : function ( options , element ) { element = $ ( element || this . defaultElement || this ) [ 0 ] ; this . element = $ ( element ) ; this . uuid = widgetUuid ++ ; this . eventNamespace = "." + this . widgetName + this . uuid ; this . bindings = $ ( ) ; this . hoverable = $ ( ) ; this . focusable = $ ( ) ; this . classesElementLookup = { } ; if ( element !== this ) { $ . data ( element , this . widgetFullName , this ) ; this . _on ( true , this . element , { remove : function ( event ) { if ( event . target === element ) { this . destroy ( ) ; } } } ) ; this . document = $ ( element . style ? element . ownerDocument : element . document || element ) ; this . window = $ ( this . document [ 0 ] . defaultView || this . document [ 0 ] . parentWindow ) ; }
this . options = $ . widget . extend ( { } , this . options , this . _getCreateOptions ( ) , options ) ; this . _create ( ) ; if ( this . options . disabled ) { this . _setOptionDisabled ( this . options . disabled ) ; }
this . _trigger ( "create" , null , this . _getCreateEventData ( ) ) ; this . _init ( ) ; } , _getCreateOptions : function ( ) { return { } ; } , _getCreateEventData : $ . noop , _create : $ . noop , _init : $ . noop , destroy : function ( ) { var that = this ; this . _destroy ( ) ; $ . each ( this . classesElementLookup , function ( key , value ) { that . _removeClass ( value , key ) ; } ) ; this . element . off ( this . eventNamespace ) . removeData ( this . widgetFullName ) ; this . widget ( ) . off ( this . eventNamespace ) . removeAttr ( "aria-disabled" ) ; this . bindings . off ( this . eventNamespace ) ; } , _destroy : $ . noop , widget : function ( ) { return this . element ; } , option : function ( key , value ) { var options = key ; var parts ; var curOption ; var i ; if ( arguments . length === 0 ) { return $ . widget . extend ( { } , this . options ) ; }
if ( typeof key === "string" ) { options = { } ; parts = key . split ( "." ) ; key = parts . shift ( ) ; if ( parts . length ) { curOption = options [ key ] = $ . widget . extend ( { } , this . options [ key ] ) ; for ( i = 0 ; i < parts . length - 1 ; i ++ ) { curOption [ parts [ i ] ] = curOption [ parts [ i ] ] || { } ; curOption = curOption [ parts [ i ] ] ; }
key = parts . pop ( ) ; if ( arguments . length === 1 ) { return curOption [ key ] === undefined ? null : curOption [ key ] ; }
curOption [ key ] = value ; } else { if ( arguments . length === 1 ) { return this . options [ key ] === undefined ? null : this . options [ key ] ; }
options [ key ] = value ; } }
this . _setOptions ( options ) ; return this ; } , _setOptions : function ( options ) { var key ; for ( key in options ) { this . _setOption ( key , options [ key ] ) ; }
return this ; } , _setOption : function ( key , value ) { if ( key === "classes" ) { this . _setOptionClasses ( value ) ; }
this . options [ key ] = value ; if ( key === "disabled" ) { this . _setOptionDisabled ( value ) ; }
return this ; } , _setOptionClasses : function ( value ) { var classKey , elements , currentElements ; for ( classKey in value ) { currentElements = this . classesElementLookup [ classKey ] ; if ( value [ classKey ] === this . options . classes [ classKey ] || ! currentElements || ! currentElements . length ) { continue ; }
elements = $ ( currentElements . get ( ) ) ; this . _removeClass ( currentElements , classKey ) ; elements . addClass ( this . _classes ( { element : elements , keys : classKey , classes : value , add : true } ) ) ; } } , _setOptionDisabled : function ( value ) { this . _toggleClass ( this . widget ( ) , this . widgetFullName + "-disabled" , null , ! ! value ) ; if ( value ) { this . _removeClass ( this . hoverable , null , "ui-state-hover" ) ; this . _removeClass ( this . focusable , null , "ui-state-focus" ) ; } } , enable : function ( ) { return this . _setOptions ( { disabled : false } ) ; } , disable : function ( ) { return this . _setOptions ( { disabled : true } ) ; } , _classes : function ( options ) { var full = [ ] ; var that = this ; options = $ . extend ( { element : this . element , classes : this . options . classes || { } } , options ) ; function processClassString ( classes , checkOption ) { var current , i ; for ( i = 0 ; i < classes . length ; i ++ ) { current = that . classesElementLookup [ classes [ i ] ] || $ ( ) ; if ( options . add ) { current = $ ( $ . unique ( current . get ( ) . concat ( options . element . get ( ) ) ) ) ; } else { current = $ ( current . not ( options . element ) . get ( ) ) ; }
that . classesElementLookup [ classes [ i ] ] = current ; full . push ( classes [ i ] ) ; if ( checkOption && options . classes [ classes [ i ] ] ) { full . push ( options . classes [ classes [ i ] ] ) ; } } }
this . _on ( options . element , { "remove" : "_untrackClassesElement" } ) ; if ( options . keys ) { processClassString ( options . keys . match ( /\S+/g ) || [ ] , true ) ; }
if ( options . extra ) { processClassString ( options . extra . match ( /\S+/g ) || [ ] ) ; }
return full . join ( " " ) ; } , _untrackClassesElement : function ( event ) { var that = this ; $ . each ( that . classesElementLookup , function ( key , value ) { if ( $ . inArray ( event . target , value ) !== - 1 ) { that . classesElementLookup [ key ] = $ ( value . not ( event . target ) . get ( ) ) ; } } ) ; } , _removeClass : function ( element , keys , extra ) { return this . _toggleClass ( element , keys , extra , false ) ; } , _addClass : function ( element , keys , extra ) { return this . _toggleClass ( element , keys , extra , true ) ; } , _toggleClass : function ( element , keys , extra , add ) { add = ( typeof add === "boolean" ) ? add : extra ; var shift = ( typeof element === "string" || element === null ) , options = { extra : shift ? keys : extra , keys : shift ? element : keys , element : shift ? this . element : element , add : add } ; options . element . toggleClass ( this . _classes ( options ) , add ) ; return this ; } , _on : function ( suppressDisabledCheck , element , handlers ) { var delegateElement ; var instance = this ; if ( typeof suppressDisabledCheck !== "boolean" ) { handlers = element ; element = suppressDisabledCheck ; suppressDisabledCheck = false ; }
if ( ! handlers ) { handlers = element ; element = this . element ; delegateElement = this . widget ( ) ; } else { element = delegateElement = $ ( element ) ; this . bindings = this . bindings . add ( element ) ; }
$ . each ( handlers , function ( event , handler ) { function handlerProxy ( ) { if ( ! suppressDisabledCheck && ( instance . options . disabled === true || $ ( this ) . hasClass ( "ui-state-disabled" ) ) ) { return ; }
return ( typeof handler === "string" ? instance [ handler ] : handler ) . apply ( instance , arguments ) ; }
if ( typeof handler !== "string" ) { handlerProxy . guid = handler . guid = handler . guid || handlerProxy . guid || $ . guid ++ ; }
var match = event . match ( /^([\w:-]*)\s*(.*)$/ ) ; var eventName = match [ 1 ] + instance . eventNamespace ; var selector = match [ 2 ] ; if ( selector ) { delegateElement . on ( eventName , selector , handlerProxy ) ; } else { element . on ( eventName , handlerProxy ) ; } } ) ; } , _off : function ( element , eventName ) { eventName = ( eventName || "" ) . split ( " " ) . join ( this . eventNamespace + " " ) +
this . eventNamespace ; element . off ( eventName ) . off ( eventName ) ; this . bindings = $ ( this . bindings . not ( element ) . get ( ) ) ; this . focusable = $ ( this . focusable . not ( element ) . get ( ) ) ; this . hoverable = $ ( this . hoverable . not ( element ) . get ( ) ) ; } , _delay : function ( handler , delay ) { function handlerProxy ( ) { return ( typeof handler === "string" ? instance [ handler ] : handler ) . apply ( instance , arguments ) ; }
var instance = this ; return setTimeout ( handlerProxy , delay || 0 ) ; } , _hoverable : function ( element ) { this . hoverable = this . hoverable . add ( element ) ; this . _on ( element , { mouseenter : function ( event ) { this . _addClass ( $ ( event . currentTarget ) , null , "ui-state-hover" ) ; } , mouseleave : function ( event ) { this . _removeClass ( $ ( event . currentTarget ) , null , "ui-state-hover" ) ; } } ) ; } , _focusable : function ( element ) { this . focusable = this . focusable . add ( element ) ; this . _on ( element , { focusin : function ( event ) { this . _addClass ( $ ( event . currentTarget ) , null , "ui-state-focus" ) ; } , focusout : function ( event ) { this . _removeClass ( $ ( event . currentTarget ) , null , "ui-state-focus" ) ; } } ) ; } , _trigger : function ( type , event , data ) { var prop , orig ; var callback = this . options [ type ] ; data = data || { } ; event = $ . Event ( event ) ; event . type = ( type === this . widgetEventPrefix ? type : this . widgetEventPrefix + type ) . toLowerCase ( ) ; event . target = this . element [ 0 ] ; orig = event . originalEvent ; if ( orig ) { for ( prop in orig ) { if ( ! ( prop in event ) ) { event [ prop ] = orig [ prop ] ; } } }
this . element . trigger ( event , data ) ; return ! ( $ . isFunction ( callback ) && callback . apply ( this . element [ 0 ] , [ event ] . concat ( data ) ) === false || event . isDefaultPrevented ( ) ) ; } } ; $ . each ( { show : "fadeIn" , hide : "fadeOut" } , function ( method , defaultEffect ) { $ . Widget . prototype [ "_" + method ] = function ( element , options , callback ) { if ( typeof options === "string" ) { options = { effect : options } ; }
var hasOptions ; var effectName = ! options ? method : options === true || typeof options === "number" ? defaultEffect : options . effect || defaultEffect ; options = options || { } ; if ( typeof options === "number" ) { options = { duration : options } ; }
hasOptions = ! $ . isEmptyObject ( options ) ; options . complete = callback ; if ( options . delay ) { element . delay ( options . delay ) ; }
if ( hasOptions && $ . effects && $ . effects . effect [ effectName ] ) { element [ method ] ( options ) ; } else if ( effectName !== method && element [ effectName ] ) { element [ effectName ] ( options . duration , options . easing , callback ) ; } else { element . queue ( function ( next ) { $ ( this ) [ method ] ( ) ; if ( callback ) { callback . call ( element [ 0 ] ) ; }
next ( ) ; } ) ; } } ; } ) ; var widget = $ . widget ; / * !
* jQuery UI Position 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
*
* http : //api.jqueryui.com/position/
* /
( function ( ) { var cachedScrollbarWidth , max = Math . max , abs = Math . abs , rhorizontal = /left|center|right/ , rvertical = /top|center|bottom/ , roffset = /[\+\-]\d+(\.[\d]+)?%?/ , rposition = /^\w+/ , rpercent = /%$/ , _position = $ . fn . position ; function getOffsets ( offsets , width , height ) { return [ parseFloat ( offsets [ 0 ] ) * ( rpercent . test ( offsets [ 0 ] ) ? width / 100 : 1 ) , parseFloat ( offsets [ 1 ] ) * ( rpercent . test ( offsets [ 1 ] ) ? height / 100 : 1 ) ] ; }
function parseCss ( element , property ) { return parseInt ( $ . css ( element , property ) , 10 ) || 0 ; }
function getDimensions ( elem ) { var raw = elem [ 0 ] ; if ( raw . nodeType === 9 ) { return { width : elem . width ( ) , height : elem . height ( ) , offset : { top : 0 , left : 0 } } ; }
if ( $ . isWindow ( raw ) ) { return { width : elem . width ( ) , height : elem . height ( ) , offset : { top : elem . scrollTop ( ) , left : elem . scrollLeft ( ) } } ; }
if ( raw . preventDefault ) { return { width : 0 , height : 0 , offset : { top : raw . pageY , left : raw . pageX } } ; }
return { width : elem . outerWidth ( ) , height : elem . outerHeight ( ) , offset : elem . offset ( ) } ; }
$ . position = { scrollbarWidth : function ( ) { if ( cachedScrollbarWidth !== undefined ) { return cachedScrollbarWidth ; }
var w1 , w2 , div = $ ( "<div " +
"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
"<div style='height:100px;width:auto;'></div></div>" ) , innerDiv = div . children ( ) [ 0 ] ; $ ( "body" ) . append ( div ) ; w1 = innerDiv . offsetWidth ; div . css ( "overflow" , "scroll" ) ; w2 = innerDiv . offsetWidth ; if ( w1 === w2 ) { w2 = div [ 0 ] . clientWidth ; }
div . remove ( ) ; return ( cachedScrollbarWidth = w1 - w2 ) ; } , getScrollInfo : function ( within ) { var overflowX = within . isWindow || within . isDocument ? "" : within . element . css ( "overflow-x" ) , overflowY = within . isWindow || within . isDocument ? "" : within . element . css ( "overflow-y" ) , hasOverflowX = overflowX === "scroll" || ( overflowX === "auto" && within . width < within . element [ 0 ] . scrollWidth ) , hasOverflowY = overflowY === "scroll" || ( overflowY === "auto" && within . height < within . element [ 0 ] . scrollHeight ) ; return { width : hasOverflowY ? $ . position . scrollbarWidth ( ) : 0 , height : hasOverflowX ? $ . position . scrollbarWidth ( ) : 0 } ; } , getWithinInfo : function ( element ) { var withinElement = $ ( element || window ) , isWindow = $ . isWindow ( withinElement [ 0 ] ) , isDocument = ! ! withinElement [ 0 ] && withinElement [ 0 ] . nodeType === 9 , hasOffset = ! isWindow && ! isDocument ; return { element : withinElement , isWindow : isWindow , isDocument : isDocument , offset : hasOffset ? $ ( element ) . offset ( ) : { left : 0 , top : 0 } , scrollLeft : withinElement . scrollLeft ( ) , scrollTop : withinElement . scrollTop ( ) , width : withinElement . outerWidth ( ) , height : withinElement . outerHeight ( ) } ; } } ; $ . fn . position = function ( options ) { if ( ! options || ! options . of ) { return _position . apply ( this , arguments ) ; }
options = $ . extend ( { } , options ) ; var atOffset , targetWidth , targetHeight , targetOffset , basePosition , dimensions , target = $ ( options . of ) , within = $ . position . getWithinInfo ( options . within ) , scrollInfo = $ . position . getScrollInfo ( within ) , collision = ( options . collision || "flip" ) . split ( " " ) , offsets = { } ; dimensions = getDimensions ( target ) ; if ( target [ 0 ] . preventDefault ) { options . at = "left top" ; }
targetWidth = dimensions . width ; targetHeight = dimensions . height ; targetOffset = dimensions . offset ; basePosition = $ . extend ( { } , targetOffset ) ; $ . each ( [ "my" , "at" ] , function ( ) { var pos = ( options [ this ] || "" ) . split ( " " ) , horizontalOffset , verticalOffset ; if ( pos . length === 1 ) { pos = rhorizontal . test ( pos [ 0 ] ) ? pos . concat ( [ "center" ] ) : rvertical . test ( pos [ 0 ] ) ? [ "center" ] . concat ( pos ) : [ "center" , "center" ] ; }
pos [ 0 ] = rhorizontal . test ( pos [ 0 ] ) ? pos [ 0 ] : "center" ; pos [ 1 ] = rvertical . test ( pos [ 1 ] ) ? pos [ 1 ] : "center" ; horizontalOffset = roffset . exec ( pos [ 0 ] ) ; verticalOffset = roffset . exec ( pos [ 1 ] ) ; offsets [ this ] = [ horizontalOffset ? horizontalOffset [ 0 ] : 0 , verticalOffset ? verticalOffset [ 0 ] : 0 ] ; options [ this ] = [ rposition . exec ( pos [ 0 ] ) [ 0 ] , rposition . exec ( pos [ 1 ] ) [ 0 ] ] ; } ) ; if ( collision . length === 1 ) { collision [ 1 ] = collision [ 0 ] ; }
if ( options . at [ 0 ] === "right" ) { basePosition . left += targetWidth ; } else if ( options . at [ 0 ] === "center" ) { basePosition . left += targetWidth / 2 ; }
if ( options . at [ 1 ] === "bottom" ) { basePosition . top += targetHeight ; } else if ( options . at [ 1 ] === "center" ) { basePosition . top += targetHeight / 2 ; }
atOffset = getOffsets ( offsets . at , targetWidth , targetHeight ) ; basePosition . left += atOffset [ 0 ] ; basePosition . top += atOffset [ 1 ] ; return this . each ( function ( ) { var collisionPosition , using , elem = $ ( this ) , elemWidth = elem . outerWidth ( ) , elemHeight = elem . outerHeight ( ) , marginLeft = parseCss ( this , "marginLeft" ) , marginTop = parseCss ( this , "marginTop" ) , collisionWidth = elemWidth + marginLeft + parseCss ( this , "marginRight" ) +
scrollInfo . width , collisionHeight = elemHeight + marginTop + parseCss ( this , "marginBottom" ) +
scrollInfo . height , position = $ . extend ( { } , basePosition ) , myOffset = getOffsets ( offsets . my , elem . outerWidth ( ) , elem . outerHeight ( ) ) ; if ( options . my [ 0 ] === "right" ) { position . left -= elemWidth ; } else if ( options . my [ 0 ] === "center" ) { position . left -= elemWidth / 2 ; }
if ( options . my [ 1 ] === "bottom" ) { position . top -= elemHeight ; } else if ( options . my [ 1 ] === "center" ) { position . top -= elemHeight / 2 ; }
position . left += myOffset [ 0 ] ; position . top += myOffset [ 1 ] ; collisionPosition = { marginLeft : marginLeft , marginTop : marginTop } ; $ . each ( [ "left" , "top" ] , function ( i , dir ) { if ( $ . ui . position [ collision [ i ] ] ) { $ . ui . position [ collision [ i ] ] [ dir ] ( position , { targetWidth : targetWidth , targetHeight : targetHeight , elemWidth : elemWidth , elemHeight : elemHeight , collisionPosition : collisionPosition , collisionWidth : collisionWidth , collisionHeight : collisionHeight , offset : [ atOffset [ 0 ] + myOffset [ 0 ] , atOffset [ 1 ] + myOffset [ 1 ] ] , my : options . my , at : options . at , within : within , elem : elem } ) ; } } ) ; if ( options . using ) { using = function ( props ) { var left = targetOffset . left - position . left , right = left + targetWidth - elemWidth , top = targetOffset . top - position . top , bottom = top + targetHeight - elemHeight , feedback = { target : { element : target , left : targetOffset . left , top : targetOffset . top , width : targetWidth , height : targetHeight } , element : { element : elem , left : position . left , top : position . top , width : elemWidth , height : elemHeight } , horizontal : right < 0 ? "left" : left > 0 ? "right" : "center" , vertical : bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" } ; if ( targetWidth < elemWidth && abs ( left + right ) < targetWidth ) { feedback . horizontal = "center" ; }
if ( targetHeight < elemHeight && abs ( top + bottom ) < targetHeight ) { feedback . vertical = "middle" ; }
if ( max ( abs ( left ) , abs ( right ) ) > max ( abs ( top ) , abs ( bottom ) ) ) { feedback . important = "horizontal" ; } else { feedback . important = "vertical" ; }
options . using . call ( this , props , feedback ) ; } ; }
elem . offset ( $ . extend ( position , { using : using } ) ) ; } ) ; } ; $ . ui . position = { fit : { left : function ( position , data ) { var within = data . within , withinOffset = within . isWindow ? within . scrollLeft : within . offset . left , outerWidth = within . width , collisionPosLeft = position . left - data . collisionPosition . marginLeft , overLeft = withinOffset - collisionPosLeft , overRight = collisionPosLeft + data . collisionWidth - outerWidth - withinOffset , newOverRight ; if ( data . collisionWidth > outerWidth ) { if ( overLeft > 0 && overRight <= 0 ) { newOverRight = position . left + overLeft + data . collisionWidth - outerWidth -
withinOffset ; position . left += overLeft - newOverRight ; } else if ( overRight > 0 && overLeft <= 0 ) { position . left = withinOffset ; } else { if ( overLeft > overRight ) { position . left = withinOffset + outerWidth - data . collisionWidth ; } else { position . left = withinOffset ; } }
} else if ( overLeft > 0 ) { position . left += overLeft ; } else if ( overRight > 0 ) { position . left -= overRight ; } else { position . left = max ( position . left - collisionPosLeft , position . left ) ; } } , top : function ( position , data ) { var within = data . within , withinOffset = within . isWindow ? within . scrollTop : within . offset . top , outerHeight = data . within . height , collisionPosTop = position . top - data . collisionPosition . marginTop , overTop = withinOffset - collisionPosTop , overBottom = collisionPosTop + data . collisionHeight - outerHeight - withinOffset , newOverBottom ; if ( data . collisionHeight > outerHeight ) { if ( overTop > 0 && overBottom <= 0 ) { newOverBottom = position . top + overTop + data . collisionHeight - outerHeight -
withinOffset ; position . top += overTop - newOverBottom ; } else if ( overBottom > 0 && overTop <= 0 ) { position . top = withinOffset ; } else { if ( overTop > overBottom ) { position . top = withinOffset + outerHeight - data . collisionHeight ; } else { position . top = withinOffset ; } }
} else if ( overTop > 0 ) { position . top += overTop ; } else if ( overBottom > 0 ) { position . top -= overBottom ; } else { position . top = max ( position . top - collisionPosTop , position . top ) ; } } } , flip : { left : function ( position , data ) { var within = data . within , withinOffset = within . offset . left + within . scrollLeft , outerWidth = within . width , offsetLeft = within . isWindow ? within . scrollLeft : within . offset . left , collisionPosLeft = position . left - data . collisionPosition . marginLeft , overLeft = collisionPosLeft - offsetLeft , overRight = collisionPosLeft + data . collisionWidth - outerWidth - offsetLeft , myOffset = data . my [ 0 ] === "left" ? - data . elemWidth : data . my [ 0 ] === "right" ? data . elemWidth : 0 , atOffset = data . at [ 0 ] === "left" ? data . targetWidth : data . at [ 0 ] === "right" ? - data . targetWidth : 0 , offset = - 2 * data . offset [ 0 ] , newOverRight , newOverLeft ; if ( overLeft < 0 ) { newOverRight = position . left + myOffset + atOffset + offset + data . collisionWidth -
outerWidth - withinOffset ; if ( newOverRight < 0 || newOverRight < abs ( overLeft ) ) { position . left += myOffset + atOffset + offset ; } } else if ( overRight > 0 ) { newOverLeft = position . left - data . collisionPosition . marginLeft + myOffset +
atOffset + offset - offsetLeft ; if ( newOverLeft > 0 || abs ( newOverLeft ) < overRight ) { position . left += myOffset + atOffset + offset ; } } } , top : function ( position , data ) { var within = data . within , withinOffset = within . offset . top + within . scrollTop , outerHeight = within . height , offsetTop = within . isWindow ? within . scrollTop : within . offset . top , collisionPosTop = position . top - data . collisionPosition . marginTop , overTop = collisionPosTop - offsetTop , overBottom = collisionPosTop + data . collisionHeight - outerHeight - offsetTop , top = data . my [ 1 ] === "top" , myOffset = top ? - data . elemHeight : data . my [ 1 ] === "bottom" ? data . elemHeight : 0 , atOffset = data . at [ 1 ] === "top" ? data . targetHeight : data . at [ 1 ] === "bottom" ? - data . targetHeight : 0 , offset = - 2 * data . offset [ 1 ] , newOverTop , newOverBottom ; if ( overTop < 0 ) { newOverBottom = position . top + myOffset + atOffset + offset + data . collisionHeight -
outerHeight - withinOffset ; if ( newOverBottom < 0 || newOverBottom < abs ( overTop ) ) { position . top += myOffset + atOffset + offset ; } } else if ( overBottom > 0 ) { newOverTop = position . top - data . collisionPosition . marginTop + myOffset + atOffset +
offset - offsetTop ; if ( newOverTop > 0 || abs ( newOverTop ) < overBottom ) { position . top += myOffset + atOffset + offset ; } } } } , flipfit : { left : function ( ) { $ . ui . position . flip . left . apply ( this , arguments ) ; $ . ui . position . fit . left . apply ( this , arguments ) ; } , top : function ( ) { $ . ui . position . flip . top . apply ( this , arguments ) ; $ . ui . position . fit . top . apply ( this , arguments ) ; } } } ; } ) ( ) ; var position = $ . ui . position ; / * !
* jQuery UI : data 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var data = $ . extend ( $ . expr [ ":" ] , { data : $ . expr . createPseudo ? $ . expr . createPseudo ( function ( dataName ) { return function ( elem ) { return ! ! $ . data ( elem , dataName ) ; } ; } ) : function ( elem , i , match ) { return ! ! $ . data ( elem , match [ 3 ] ) ; } } ) ; / * !
* jQuery UI Disable Selection 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var disableSelection = $ . fn . extend ( { disableSelection : ( function ( ) { var eventType = "onselectstart" in document . createElement ( "div" ) ? "selectstart" : "mousedown" ; return function ( ) { return this . on ( eventType + ".ui-disableSelection" , function ( event ) { event . preventDefault ( ) ; } ) ; } ; } ) ( ) , enableSelection : function ( ) { return this . off ( ".ui-disableSelection" ) ; } } ) ; / * !
* jQuery UI Effects 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var dataSpace = "ui-effects-" , dataSpaceStyle = "ui-effects-style" , dataSpaceAnimated = "ui-effects-animated" , jQuery = $ ; $ . effects = { effect : { } } ; / * !
* jQuery Color Animations v2 . 1.2
* https : //github.com/jquery/jquery-color
*
* Copyright 2014 jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
*
* Date : Wed Jan 16 08 : 47 : 09 2013 - 0600
* /
( function ( jQuery , undefined ) { var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +
"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor" , rplusequals = /^([\-+])=\s*(\d+\.?\d*)/ , stringParsers = [ { re : /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/ , parse : function ( execResult ) { return [ execResult [ 1 ] , execResult [ 2 ] , execResult [ 3 ] , execResult [ 4 ] ] ; } } , { re : /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/ , parse : function ( execResult ) { return [ execResult [ 1 ] * 2.55 , execResult [ 2 ] * 2.55 , execResult [ 3 ] * 2.55 , execResult [ 4 ] ] ; } } , { re : /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/ , parse : function ( execResult ) { return [ parseInt ( execResult [ 1 ] , 16 ) , parseInt ( execResult [ 2 ] , 16 ) , parseInt ( execResult [ 3 ] , 16 ) ] ; } } , { re : /#([a-f0-9])([a-f0-9])([a-f0-9])/ , parse : function ( execResult ) { return [ parseInt ( execResult [ 1 ] + execResult [ 1 ] , 16 ) , parseInt ( execResult [ 2 ] + execResult [ 2 ] , 16 ) , parseInt ( execResult [ 3 ] + execResult [ 3 ] , 16 ) ] ; } } , { re : /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/ , space : "hsla" , parse : function ( execResult ) { return [ execResult [ 1 ] , execResult [ 2 ] / 100 , execResult [ 3 ] / 100 , execResult [ 4 ] ] ; } } ] , color = jQuery . Color = function ( color , green , blue , alpha ) { return new jQuery . Color . fn . parse ( color , green , blue , alpha ) ; } , spaces = { rgba : { props : { red : { idx : 0 , type : "byte" } , green : { idx : 1 , type : "byte" } , blue : { idx : 2 , type : "byte" } } } , hsla : { props : { hue : { idx : 0 , type : "degrees" } , saturation : { idx : 1 , type : "percent" } , lightness : { idx : 2 , type : "percent" } } } } , propTypes = { "byte" : { floor : true , max : 255 } , "percent" : { max : 1 } , "degrees" : { mod : 360 , floor : true } } , support = color . support = { } , supportElem = jQuery ( "<p>" ) [ 0 ] , colors , each = jQuery . each ; supportElem . style . cssText = "background-color:rgba(1,1,1,.5)" ; support . rgba = supportElem . style . backgroundColor . indexOf ( "rgba" ) > - 1 ; each ( spaces , function ( spaceName , space ) { space . cache = "_" + spaceName ; space . props . alpha = { idx : 3 , type : "percent" , def : 1 } ; } ) ; function clamp ( value , prop , allowEmpty ) { var type = propTypes [ prop . type ] || { } ; if ( value == null ) { return ( allowEmpty || ! prop . def ) ? null : prop . def ; }
value = type . floor ? ~ ~ value : parseFloat ( value ) ; if ( isNaN ( value ) ) { return prop . def ; }
if ( type . mod ) { return ( value + type . mod ) % type . mod ; }
return 0 > value ? 0 : type . max < value ? type . max : value ; }
function stringParse ( string ) { var inst = color ( ) , rgba = inst . _rgba = [ ] ; string = string . toLowerCase ( ) ; each ( stringParsers , function ( i , parser ) { var parsed , match = parser . re . exec ( string ) , values = match && parser . parse ( match ) , spaceName = parser . space || "rgba" ; if ( values ) { parsed = inst [ spaceName ] ( values ) ; inst [ spaces [ spaceName ] . cache ] = parsed [ spaces [ spaceName ] . cache ] ; rgba = inst . _rgba = parsed . _rgba ; return false ; } } ) ; if ( rgba . length ) { if ( rgba . join ( ) === "0,0,0,0" ) { jQuery . extend ( rgba , colors . transparent ) ; }
return inst ; }
return colors [ string ] ; }
color . fn = jQuery . extend ( color . prototype , { parse : function ( red , green , blue , alpha ) { if ( red === undefined ) { this . _rgba = [ null , null , null , null ] ; return this ; }
if ( red . jquery || red . nodeType ) { red = jQuery ( red ) . css ( green ) ; green = undefined ; }
var inst = this , type = jQuery . type ( red ) , rgba = this . _rgba = [ ] ; if ( green !== undefined ) { red = [ red , green , blue , alpha ] ; type = "array" ; }
if ( type === "string" ) { return this . parse ( stringParse ( red ) || colors . _default ) ; }
if ( type === "array" ) { each ( spaces . rgba . props , function ( key , prop ) { rgba [ prop . idx ] = clamp ( red [ prop . idx ] , prop ) ; } ) ; return this ; }
if ( type === "object" ) { if ( red instanceof color ) { each ( spaces , function ( spaceName , space ) { if ( red [ space . cache ] ) { inst [ space . cache ] = red [ space . cache ] . slice ( ) ; } } ) ; } else { each ( spaces , function ( spaceName , space ) { var cache = space . cache ; each ( space . props , function ( key , prop ) { if ( ! inst [ cache ] && space . to ) { if ( key === "alpha" || red [ key ] == null ) { return ; }
inst [ cache ] = space . to ( inst . _rgba ) ; }
inst [ cache ] [ prop . idx ] = clamp ( red [ key ] , prop , true ) ; } ) ; if ( inst [ cache ] && jQuery . inArray ( null , inst [ cache ] . slice ( 0 , 3 ) ) < 0 ) { inst [ cache ] [ 3 ] = 1 ; if ( space . from ) { inst . _rgba = space . from ( inst [ cache ] ) ; } } } ) ; }
return this ; } } , is : function ( compare ) { var is = color ( compare ) , same = true , inst = this ; each ( spaces , function ( _ , space ) { var localCache , isCache = is [ space . cache ] ; if ( isCache ) { localCache = inst [ space . cache ] || space . to && space . to ( inst . _rgba ) || [ ] ; each ( space . props , function ( _ , prop ) { if ( isCache [ prop . idx ] != null ) { same = ( isCache [ prop . idx ] === localCache [ prop . idx ] ) ; return same ; } } ) ; }
return same ; } ) ; return same ; } , _space : function ( ) { var used = [ ] , inst = this ; each ( spaces , function ( spaceName , space ) { if ( inst [ space . cache ] ) { used . push ( spaceName ) ; } } ) ; return used . pop ( ) ; } , transition : function ( other , distance ) { var end = color ( other ) , spaceName = end . _space ( ) , space = spaces [ spaceName ] , startColor = this . alpha ( ) === 0 ? color ( "transparent" ) : this , start = startColor [ space . cache ] || space . to ( startColor . _rgba ) , result = start . slice ( ) ; end = end [ space . cache ] ; each ( space . props , function ( key , prop ) { var index = prop . idx , startValue = start [ index ] , endValue = end [ index ] , type = propTypes [ prop . type ] || { } ; if ( endValue === null ) { return ; }
if ( startValue === null ) { result [ index ] = endValue ; } else { if ( type . mod ) { if ( endValue - startValue > type . mod / 2 ) { startValue += type . mod ; } else if ( startValue - endValue > type . mod / 2 ) { startValue -= type . mod ; } }
result [ index ] = clamp ( ( endValue - startValue ) * distance + startValue , prop ) ; } } ) ; return this [ spaceName ] ( result ) ; } , blend : function ( opaque ) { if ( this . _rgba [ 3 ] === 1 ) { return this ; }
var rgb = this . _rgba . slice ( ) , a = rgb . pop ( ) , blend = color ( opaque ) . _rgba ; return color ( jQuery . map ( rgb , function ( v , i ) { return ( 1 - a ) * blend [ i ] + a * v ; } ) ) ; } , toRgbaString : function ( ) { var prefix = "rgba(" , rgba = jQuery . map ( this . _rgba , function ( v , i ) { return v == null ? ( i > 2 ? 1 : 0 ) : v ; } ) ; if ( rgba [ 3 ] === 1 ) { rgba . pop ( ) ; prefix = "rgb(" ; }
return prefix + rgba . join ( ) + ")" ; } , toHslaString : function ( ) { var prefix = "hsla(" , hsla = jQuery . map ( this . hsla ( ) , function ( v , i ) { if ( v == null ) { v = i > 2 ? 1 : 0 ; }
if ( i && i < 3 ) { v = Math . round ( v * 100 ) + "%" ; }
return v ; } ) ; if ( hsla [ 3 ] === 1 ) { hsla . pop ( ) ; prefix = "hsl(" ; }
return prefix + hsla . join ( ) + ")" ; } , toHexString : function ( includeAlpha ) { var rgba = this . _rgba . slice ( ) , alpha = rgba . pop ( ) ; if ( includeAlpha ) { rgba . push ( ~ ~ ( alpha * 255 ) ) ; }
return "#" + jQuery . map ( rgba , function ( v ) { v = ( v || 0 ) . toString ( 16 ) ; return v . length === 1 ? "0" + v : v ; } ) . join ( "" ) ; } , toString : function ( ) { return this . _rgba [ 3 ] === 0 ? "transparent" : this . toRgbaString ( ) ; } } ) ; color . fn . parse . prototype = color . fn ; function hue2rgb ( p , q , h ) { h = ( h + 1 ) % 1 ; if ( h * 6 < 1 ) { return p + ( q - p ) * h * 6 ; }
if ( h * 2 < 1 ) { return q ; }
if ( h * 3 < 2 ) { return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6 ; }
return p ; }
spaces . hsla . to = function ( rgba ) { if ( rgba [ 0 ] == null || rgba [ 1 ] == null || rgba [ 2 ] == null ) { return [ null , null , null , rgba [ 3 ] ] ; }
var r = rgba [ 0 ] / 255 , g = rgba [ 1 ] / 255 , b = rgba [ 2 ] / 255 , a = rgba [ 3 ] , max = Math . max ( r , g , b ) , min = Math . min ( r , g , b ) , diff = max - min , add = max + min , l = add * 0.5 , h , s ; if ( min === max ) { h = 0 ; } else if ( r === max ) { h = ( 60 * ( g - b ) / diff ) + 360 ; } else if ( g === max ) { h = ( 60 * ( b - r ) / diff ) + 120 ; } else { h = ( 60 * ( r - g ) / diff ) + 240 ; }
if ( diff === 0 ) { s = 0 ; } else if ( l <= 0.5 ) { s = diff / add ; } else { s = diff / ( 2 - add ) ; }
return [ Math . round ( h ) % 360 , s , l , a == null ? 1 : a ] ; } ; spaces . hsla . from = function ( hsla ) { if ( hsla [ 0 ] == null || hsla [ 1 ] == null || hsla [ 2 ] == null ) { return [ null , null , null , hsla [ 3 ] ] ; }
var h = hsla [ 0 ] / 360 , s = hsla [ 1 ] , l = hsla [ 2 ] , a = hsla [ 3 ] , q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s , p = 2 * l - q ; return [ Math . round ( hue2rgb ( p , q , h + ( 1 / 3 ) ) * 255 ) , Math . round ( hue2rgb ( p , q , h ) * 255 ) , Math . round ( hue2rgb ( p , q , h - ( 1 / 3 ) ) * 255 ) , a ] ; } ; each ( spaces , function ( spaceName , space ) { var props = space . props , cache = space . cache , to = space . to , from = space . from ; color . fn [ spaceName ] = function ( value ) { if ( to && ! this [ cache ] ) { this [ cache ] = to ( this . _rgba ) ; }
if ( value === undefined ) { return this [ cache ] . slice ( ) ; }
var ret , type = jQuery . type ( value ) , arr = ( type === "array" || type === "object" ) ? value : arguments , local = this [ cache ] . slice ( ) ; each ( props , function ( key , prop ) { var val = arr [ type === "object" ? key : prop . idx ] ; if ( val == null ) { val = local [ prop . idx ] ; }
local [ prop . idx ] = clamp ( val , prop ) ; } ) ; if ( from ) { ret = color ( from ( local ) ) ; ret [ cache ] = local ; return ret ; } else { return color ( local ) ; } } ; each ( props , function ( key , prop ) { if ( color . fn [ key ] ) { return ; }
color . fn [ key ] = function ( value ) { var vtype = jQuery . type ( value ) , fn = ( key === "alpha" ? ( this . _hsla ? "hsla" : "rgba" ) : spaceName ) , local = this [ fn ] ( ) , cur = local [ prop . idx ] , match ; if ( vtype === "undefined" ) { return cur ; }
if ( vtype === "function" ) { value = value . call ( this , cur ) ; vtype = jQuery . type ( value ) ; }
if ( value == null && prop . empty ) { return this ; }
if ( vtype === "string" ) { match = rplusequals . exec ( value ) ; if ( match ) { value = cur + parseFloat ( match [ 2 ] ) * ( match [ 1 ] === "+" ? 1 : - 1 ) ; } }
local [ prop . idx ] = value ; return this [ fn ] ( local ) ; } ; } ) ; } ) ; color . hook = function ( hook ) { var hooks = hook . split ( " " ) ; each ( hooks , function ( i , hook ) { jQuery . cssHooks [ hook ] = { set : function ( elem , value ) { var parsed , curElem , backgroundColor = "" ; if ( value !== "transparent" && ( jQuery . type ( value ) !== "string" || ( parsed = stringParse ( value ) ) ) ) { value = color ( parsed || value ) ; if ( ! support . rgba && value . _rgba [ 3 ] !== 1 ) { curElem = hook === "backgroundColor" ? elem . parentNode : elem ; while ( ( backgroundColor === "" || backgroundColor === "transparent" ) && curElem && curElem . style ) { try { backgroundColor = jQuery . css ( curElem , "backgroundColor" ) ; curElem = curElem . parentNode ; } catch ( e ) { } }
value = value . blend ( backgroundColor && backgroundColor !== "transparent" ? backgroundColor : "_default" ) ; }
value = value . toRgbaString ( ) ; }
try { elem . style [ hook ] = value ; } catch ( e ) { } } } ; jQuery . fx . step [ hook ] = function ( fx ) { if ( ! fx . colorInit ) { fx . start = color ( fx . elem , hook ) ; fx . end = color ( fx . end ) ; fx . colorInit = true ; }
jQuery . cssHooks [ hook ] . set ( fx . elem , fx . start . transition ( fx . end , fx . pos ) ) ; } ; } ) ; } ; color . hook ( stepHooks ) ; jQuery . cssHooks . borderColor = { expand : function ( value ) { var expanded = { } ; each ( [ "Top" , "Right" , "Bottom" , "Left" ] , function ( i , part ) { expanded [ "border" + part + "Color" ] = value ; } ) ; return expanded ; } } ; colors = jQuery . Color . names = { aqua : "#00ffff" , black : "#000000" , blue : "#0000ff" , fuchsia : "#ff00ff" , gray : "#808080" , green : "#008000" , lime : "#00ff00" , maroon : "#800000" , navy : "#000080" , olive : "#808000" , purple : "#800080" , red : "#ff0000" , silver : "#c0c0c0" , teal : "#008080" , white : "#ffffff" , yellow : "#ffff00" , transparent : [ null , null , null , 0 ] , _default : "#ffffff" } ; } ) ( jQuery ) ; ( function ( ) { var classAnimationActions = [ "add" , "remove" , "toggle" ] , shorthandStyles = { border : 1 , borderBottom : 1 , borderColor : 1 , borderLeft : 1 , borderRight : 1 , borderTop : 1 , borderWidth : 1 , margin : 1 , padding : 1 } ; $ . each ( [ "borderLeftStyle" , "borderRightStyle" , "borderBottomStyle" , "borderTopStyle" ] , function ( _ , prop ) { $ . fx . step [ prop ] = function ( fx ) { if ( fx . end !== "none" && ! fx . setAttr || fx . pos === 1 && ! fx . setAttr ) { jQuery . style ( fx . elem , prop , fx . end ) ; fx . setAttr = true ; } } ; } ) ; function getElementStyles ( elem ) { var key , len , style = elem . ownerDocument . defaultView ? elem . ownerDocument . defaultView . getComputedStyle ( elem , null ) : elem . currentStyle , styles = { } ; if ( style && style . length && style [ 0 ] && style [ style [ 0 ] ] ) { len = style . length ; while ( len -- ) { key = style [ len ] ; if ( typeof style [ key ] === "string" ) { styles [ $ . camelCase ( key ) ] = style [ key ] ; } }
} else { for ( key in style ) { if ( typeof style [ key ] === "string" ) { styles [ key ] = style [ key ] ; } } }
return styles ; }
function styleDifference ( oldStyle , newStyle ) { var diff = { } , name , value ; for ( name in newStyle ) { value = newStyle [ name ] ; if ( oldStyle [ name ] !== value ) { if ( ! shorthandStyles [ name ] ) { if ( $ . fx . step [ name ] || ! isNaN ( parseFloat ( value ) ) ) { diff [ name ] = value ; } } } }
return diff ; }
if ( ! $ . fn . addBack ) { $ . fn . addBack = function ( selector ) { return this . add ( selector == null ? this . prevObject : this . prevObject . filter ( selector ) ) ; } ; }
$ . effects . animateClass = function ( value , duration , easing , callback ) { var o = $ . speed ( duration , easing , callback ) ; return this . queue ( function ( ) { var animated = $ ( this ) , baseClass = animated . attr ( "class" ) || "" , applyClassChange , allAnimations = o . children ? animated . find ( "*" ) . addBack ( ) : animated ; allAnimations = allAnimations . map ( function ( ) { var el = $ ( this ) ; return { el : el , start : getElementStyles ( this ) } ; } ) ; applyClassChange = function ( ) { $ . each ( classAnimationActions , function ( i , action ) { if ( value [ action ] ) { animated [ action + "Class" ] ( value [ action ] ) ; } } ) ; } ; applyClassChange ( ) ; allAnimations = allAnimations . map ( function ( ) { this . end = getElementStyles ( this . el [ 0 ] ) ; this . diff = styleDifference ( this . start , this . end ) ; return this ; } ) ; animated . attr ( "class" , baseClass ) ; allAnimations = allAnimations . map ( function ( ) { var styleInfo = this , dfd = $ . Deferred ( ) , opts = $ . extend ( { } , o , { queue : false , complete : function ( ) { dfd . resolve ( styleInfo ) ; } } ) ; this . el . animate ( this . diff , opts ) ; return dfd . promise ( ) ; } ) ; $ . when . apply ( $ , allAnimations . get ( ) ) . done ( function ( ) { applyClassChange ( ) ; $ . each ( arguments , function ( ) { var el = this . el ; $ . each ( this . diff , function ( key ) { el . css ( key , "" ) ; } ) ; } ) ; o . complete . call ( animated [ 0 ] ) ; } ) ; } ) ; } ; $ . fn . extend ( { addClass : ( function ( orig ) { return function ( classNames , speed , easing , callback ) { return speed ? $ . effects . animateClass . call ( this , { add : classNames } , speed , easing , callback ) : orig . apply ( this , arguments ) ; } ; } ) ( $ . fn . addClass ) , removeClass : ( function ( orig ) { return function ( classNames , speed , easing , callback ) { return arguments . length > 1 ? $ . effects . animateClass . call ( this , { remove : classNames } , speed , easing , callback ) : orig . apply ( this , arguments ) ; } ; } ) ( $ . fn . removeClass ) , toggleClass : ( function ( orig ) { return function ( classNames , force , speed , easing , callback ) { if ( typeof force === "boolean" || force === undefined ) { if ( ! speed ) { return orig . apply ( this , arguments ) ; } else { return $ . effects . animateClass . call ( this , ( force ? { add : classNames } : { remove : classNames } ) , speed , easing , callback ) ; } } else { return $ . effects . animateClass . call ( this , { toggle : classNames } , force , speed , easing ) ; } } ; } ) ( $ . fn . toggleClass ) , switchClass : function ( remove , add , speed , easing , callback ) { return $ . effects . animateClass . call ( this , { add : add , remove : remove } , speed , easing , callback ) ; } } ) ; } ) ( ) ; ( function ( ) { if ( $ . expr && $ . expr . filters && $ . expr . filters . animated ) { $ . expr . filters . animated = ( function ( orig ) { return function ( elem ) { return ! ! $ ( elem ) . data ( dataSpaceAnimated ) || orig ( elem ) ; } ; } ) ( $ . expr . filters . animated ) ; }
if ( $ . uiBackCompat !== false ) { $ . extend ( $ . effects , { save : function ( element , set ) { var i = 0 , length = set . length ; for ( ; i < length ; i ++ ) { if ( set [ i ] !== null ) { element . data ( dataSpace + set [ i ] , element [ 0 ] . style [ set [ i ] ] ) ; } } } , restore : function ( element , set ) { var val , i = 0 , length = set . length ; for ( ; i < length ; i ++ ) { if ( set [ i ] !== null ) { val = element . data ( dataSpace + set [ i ] ) ; element . css ( set [ i ] , val ) ; } } } , setMode : function ( el , mode ) { if ( mode === "toggle" ) { mode = el . is ( ":hidden" ) ? "show" : "hide" ; }
return mode ; } , createWrapper : function ( element ) { if ( element . parent ( ) . is ( ".ui-effects-wrapper" ) ) { return element . parent ( ) ; }
var props = { width : element . outerWidth ( true ) , height : element . outerHeight ( true ) , "float" : element . css ( "float" ) } , wrapper = $ ( "<div></div>" ) . addClass ( "ui-effects-wrapper" ) . css ( { fontSize : "100%" , background : "transparent" , border : "none" , margin : 0 , padding : 0 } ) , size = { width : element . width ( ) , height : element . height ( ) } , active = document . activeElement ; try { active . id ; } catch ( e ) { active = document . body ; }
element . wrap ( wrapper ) ; if ( element [ 0 ] === active || $ . contains ( element [ 0 ] , active ) ) { $ ( active ) . trigger ( "focus" ) ; }
wrapper = element . parent ( ) ; if ( element . css ( "position" ) === "static" ) { wrapper . css ( { position : "relative" } ) ; element . css ( { position : "relative" } ) ; } else { $ . extend ( props , { position : element . css ( "position" ) , zIndex : element . css ( "z-index" ) } ) ; $ . each ( [ "top" , "left" , "bottom" , "right" ] , function ( i , pos ) { props [ pos ] = element . css ( pos ) ; if ( isNaN ( parseInt ( props [ pos ] , 10 ) ) ) { props [ pos ] = "auto" ; } } ) ; element . css ( { position : "relative" , top : 0 , left : 0 , right : "auto" , bottom : "auto" } ) ; }
element . css ( size ) ; return wrapper . css ( props ) . show ( ) ; } , removeWrapper : function ( element ) { var active = document . activeElement ; if ( element . parent ( ) . is ( ".ui-effects-wrapper" ) ) { element . parent ( ) . replaceWith ( element ) ; if ( element [ 0 ] === active || $ . contains ( element [ 0 ] , active ) ) { $ ( active ) . trigger ( "focus" ) ; } }
return element ; } } ) ; }
$ . extend ( $ . effects , { version : "1.12.1" , define : function ( name , mode , effect ) { if ( ! effect ) { effect = mode ; mode = "effect" ; }
$ . effects . effect [ name ] = effect ; $ . effects . effect [ name ] . mode = mode ; return effect ; } , scaledDimensions : function ( element , percent , direction ) { if ( percent === 0 ) { return { height : 0 , width : 0 , outerHeight : 0 , outerWidth : 0 } ; }
var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1 , y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1 ; return { height : element . height ( ) * y , width : element . width ( ) * x , outerHeight : element . outerHeight ( ) * y , outerWidth : element . outerWidth ( ) * x } ; } , clipToBox : function ( animation ) { return { width : animation . clip . right - animation . clip . left , height : animation . clip . bottom - animation . clip . top , left : animation . clip . left , top : animation . clip . top } ; } , unshift : function ( element , queueLength , count ) { var queue = element . queue ( ) ; if ( queueLength > 1 ) { queue . splice . apply ( queue , [ 1 , 0 ] . concat ( queue . splice ( queueLength , count ) ) ) ; }
element . dequeue ( ) ; } , saveStyle : function ( element ) { element . data ( dataSpaceStyle , element [ 0 ] . style . cssText ) ; } , restoreStyle : function ( element ) { element [ 0 ] . style . cssText = element . data ( dataSpaceStyle ) || "" ; element . removeData ( dataSpaceStyle ) ; } , mode : function ( element , mode ) { var hidden = element . is ( ":hidden" ) ; if ( mode === "toggle" ) { mode = hidden ? "show" : "hide" ; }
if ( hidden ? mode === "hide" : mode === "show" ) { mode = "none" ; }
return mode ; } , getBaseline : function ( origin , original ) { var y , x ; switch ( origin [ 0 ] ) { case "top" : y = 0 ; break ; case "middle" : y = 0.5 ; break ; case "bottom" : y = 1 ; break ; default : y = origin [ 0 ] / original . height ; }
switch ( origin [ 1 ] ) { case "left" : x = 0 ; break ; case "center" : x = 0.5 ; break ; case "right" : x = 1 ; break ; default : x = origin [ 1 ] / original . width ; }
return { x : x , y : y } ; } , createPlaceholder : function ( element ) { var placeholder , cssPosition = element . css ( "position" ) , position = element . position ( ) ; element . css ( { marginTop : element . css ( "marginTop" ) , marginBottom : element . css ( "marginBottom" ) , marginLeft : element . css ( "marginLeft" ) , marginRight : element . css ( "marginRight" ) } ) . outerWidth ( element . outerWidth ( ) ) . outerHeight ( element . outerHeight ( ) ) ; if ( /^(static|relative)/ . test ( cssPosition ) ) { cssPosition = "absolute" ; placeholder = $ ( "<" + element [ 0 ] . nodeName + ">" ) . insertAfter ( element ) . css ( { display : /^(inline|ruby)/ . test ( element . css ( "display" ) ) ? "inline-block" : "block" , visibility : "hidden" , marginTop : element . css ( "marginTop" ) , marginBottom : element . css ( "marginBottom" ) , marginLeft : element . css ( "marginLeft" ) , marginRight : element . css ( "marginRight" ) , "float" : element . css ( "float" ) } ) . outerWidth ( element . outerWidth ( ) ) . outerHeight ( element . outerHeight ( ) ) . addClass ( "ui-effects-placeholder" ) ; element . data ( dataSpace + "placeholder" , placeholder ) ; }
element . css ( { position : cssPosition , left : position . left , top : position . top } ) ; return placeholder ; } , removePlaceholder : function ( element ) { var dataKey = dataSpace + "placeholder" , placeholder = element . data ( dataKey ) ; if ( placeholder ) { placeholder . remove ( ) ; element . removeData ( dataKey ) ; } } , cleanUp : function ( element ) { $ . effects . restoreStyle ( element ) ; $ . effects . removePlaceholder ( element ) ; } , setTransition : function ( element , list , factor , value ) { value = value || { } ; $ . each ( list , function ( i , x ) { var unit = element . cssUnit ( x ) ; if ( unit [ 0 ] > 0 ) { value [ x ] = unit [ 0 ] * factor + unit [ 1 ] ; } } ) ; return value ; } } ) ; function _normalizeArguments ( effect , options , speed , callback ) { if ( $ . isPlainObject ( effect ) ) { options = effect ; effect = effect . effect ; }
effect = { effect : effect } ; if ( options == null ) { options = { } ; }
if ( $ . isFunction ( options ) ) { callback = options ; speed = null ; options = { } ; }
if ( typeof options === "number" || $ . fx . speeds [ options ] ) { callback = speed ; speed = options ; options = { } ; }
if ( $ . isFunction ( speed ) ) { callback = speed ; speed = null ; }
if ( options ) { $ . extend ( effect , options ) ; }
speed = speed || options . duration ; effect . duration = $ . fx . off ? 0 : typeof speed === "number" ? speed : speed in $ . fx . speeds ? $ . fx . speeds [ speed ] : $ . fx . speeds . _default ; effect . complete = callback || options . complete ; return effect ; }
function standardAnimationOption ( option ) { if ( ! option || typeof option === "number" || $ . fx . speeds [ option ] ) { return true ; }
if ( typeof option === "string" && ! $ . effects . effect [ option ] ) { return true ; }
if ( $ . isFunction ( option ) ) { return true ; }
if ( typeof option === "object" && ! option . effect ) { return true ; }
return false ; }
$ . fn . extend ( { effect : function ( ) { var args = _normalizeArguments . apply ( this , arguments ) , effectMethod = $ . effects . effect [ args . effect ] , defaultMode = effectMethod . mode , queue = args . queue , queueName = queue || "fx" , complete = args . complete , mode = args . mode , modes = [ ] , prefilter = function ( next ) { var el = $ ( this ) , normalizedMode = $ . effects . mode ( el , mode ) || defaultMode ; el . data ( dataSpaceAnimated , true ) ; modes . push ( normalizedMode ) ; if ( defaultMode && ( normalizedMode === "show" || ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { el . show ( ) ; }
if ( ! defaultMode || normalizedMode !== "none" ) { $ . effects . saveStyle ( el ) ; }
if ( $ . isFunction ( next ) ) { next ( ) ; } } ; if ( $ . fx . off || ! effectMethod ) { if ( mode ) { return this [ mode ] ( args . duration , complete ) ; } else { return this . each ( function ( ) { if ( complete ) { complete . call ( this ) ; } } ) ; } }
function run ( next ) { var elem = $ ( this ) ; function cleanup ( ) { elem . removeData ( dataSpaceAnimated ) ; $ . effects . cleanUp ( elem ) ; if ( args . mode === "hide" ) { elem . hide ( ) ; }
done ( ) ; }
function done ( ) { if ( $ . isFunction ( complete ) ) { complete . call ( elem [ 0 ] ) ; }
if ( $ . isFunction ( next ) ) { next ( ) ; } }
args . mode = modes . shift ( ) ; if ( $ . uiBackCompat !== false && ! defaultMode ) { if ( elem . is ( ":hidden" ) ? mode === "hide" : mode === "show" ) { elem [ mode ] ( ) ; done ( ) ; } else { effectMethod . call ( elem [ 0 ] , args , done ) ; } } else { if ( args . mode === "none" ) { elem [ mode ] ( ) ; done ( ) ; } else { effectMethod . call ( elem [ 0 ] , args , cleanup ) ; } } }
return queue === false ? this . each ( prefilter ) . each ( run ) : this . queue ( queueName , prefilter ) . queue ( queueName , run ) ; } , show : ( function ( orig ) { return function ( option ) { if ( standardAnimationOption ( option ) ) { return orig . apply ( this , arguments ) ; } else { var args = _normalizeArguments . apply ( this , arguments ) ; args . mode = "show" ; return this . effect . call ( this , args ) ; } } ; } ) ( $ . fn . show ) , hide : ( function ( orig ) { return function ( option ) { if ( standardAnimationOption ( option ) ) { return orig . apply ( this , arguments ) ; } else { var args = _normalizeArguments . apply ( this , arguments ) ; args . mode = "hide" ; return this . effect . call ( this , args ) ; } } ; } ) ( $ . fn . hide ) , toggle : ( function ( orig ) { return function ( option ) { if ( standardAnimationOption ( option ) || typeof option === "boolean" ) { return orig . apply ( this , arguments ) ; } else { var args = _normalizeArguments . apply ( this , arguments ) ; args . mode = "toggle" ; return this . effect . call ( this , args ) ; } } ; } ) ( $ . fn . toggle ) , cssUnit : function ( key ) { var style = this . css ( key ) , val = [ ] ; $ . each ( [ "em" , "px" , "%" , "pt" ] , function ( i , unit ) { if ( style . indexOf ( unit ) > 0 ) { val = [ parseFloat ( style ) , unit ] ; } } ) ; return val ; } , cssClip : function ( clipObj ) { if ( clipObj ) { return this . css ( "clip" , "rect(" + clipObj . top + "px " + clipObj . right + "px " +
clipObj . bottom + "px " + clipObj . left + "px)" ) ; }
return parseClip ( this . css ( "clip" ) , this ) ; } , transfer : function ( options , done ) { var element = $ ( this ) , target = $ ( options . to ) , targetFixed = target . css ( "position" ) === "fixed" , body = $ ( "body" ) , fixTop = targetFixed ? body . scrollTop ( ) : 0 , fixLeft = targetFixed ? body . scrollLeft ( ) : 0 , endPosition = target . offset ( ) , animation = { top : endPosition . top - fixTop , left : endPosition . left - fixLeft , height : target . innerHeight ( ) , width : target . innerWidth ( ) } , startPosition = element . offset ( ) , transfer = $ ( "<div class='ui-effects-transfer'></div>" ) . appendTo ( "body" ) . addClass ( options . className ) . css ( { top : startPosition . top - fixTop , left : startPosition . left - fixLeft , height : element . innerHeight ( ) , width : element . innerWidth ( ) , position : targetFixed ? "fixed" : "absolute" } ) . animate ( animation , options . duration , options . easing , function ( ) { transfer . remove ( ) ; if ( $ . isFunction ( done ) ) { done ( ) ; } } ) ; } } ) ; function parseClip ( str , element ) { var outerWidth = element . outerWidth ( ) , outerHeight = element . outerHeight ( ) , clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/ , values = clipRegex . exec ( str ) || [ "" , 0 , outerWidth , outerHeight , 0 ] ; return { top : parseFloat ( values [ 1 ] ) || 0 , right : values [ 2 ] === "auto" ? outerWidth : parseFloat ( values [ 2 ] ) , bottom : values [ 3 ] === "auto" ? outerHeight : parseFloat ( values [ 3 ] ) , left : parseFloat ( values [ 4 ] ) || 0 } ; }
$ . fx . step . clip = function ( fx ) { if ( ! fx . clipInit ) { fx . start = $ ( fx . elem ) . cssClip ( ) ; if ( typeof fx . end === "string" ) { fx . end = parseClip ( fx . end , fx . elem ) ; }
fx . clipInit = true ; }
$ ( fx . elem ) . cssClip ( { top : fx . pos * ( fx . end . top - fx . start . top ) + fx . start . top , right : fx . pos * ( fx . end . right - fx . start . right ) + fx . start . right , bottom : fx . pos * ( fx . end . bottom - fx . start . bottom ) + fx . start . bottom , left : fx . pos * ( fx . end . left - fx . start . left ) + fx . start . left } ) ; } ; } ) ( ) ; ( function ( ) { var baseEasings = { } ; $ . each ( [ "Quad" , "Cubic" , "Quart" , "Quint" , "Expo" ] , function ( i , name ) { baseEasings [ name ] = function ( p ) { return Math . pow ( p , i + 2 ) ; } ; } ) ; $ . extend ( baseEasings , { Sine : function ( p ) { return 1 - Math . cos ( p * Math . PI / 2 ) ; } , Circ : function ( p ) { return 1 - Math . sqrt ( 1 - p * p ) ; } , Elastic : function ( p ) { return p === 0 || p === 1 ? p : - Math . pow ( 2 , 8 * ( p - 1 ) ) * Math . sin ( ( ( p - 1 ) * 80 - 7.5 ) * Math . PI / 15 ) ; } , Back : function ( p ) { return p * p * ( 3 * p - 2 ) ; } , Bounce : function ( p ) { var pow2 , bounce = 4 ; while ( p < ( ( pow2 = Math . pow ( 2 , -- bounce ) ) - 1 ) / 11 ) { }
return 1 / Math . pow ( 4 , 3 - bounce ) - 7.5625 * Math . pow ( ( pow2 * 3 - 2 ) / 22 - p , 2 ) ; } } ) ; $ . each ( baseEasings , function ( name , easeIn ) { $ . easing [ "easeIn" + name ] = easeIn ; $ . easing [ "easeOut" + name ] = function ( p ) { return 1 - easeIn ( 1 - p ) ; } ; $ . easing [ "easeInOut" + name ] = function ( p ) { return p < 0.5 ? easeIn ( p * 2 ) / 2 : 1 - easeIn ( p * - 2 + 2 ) / 2 ; } ; } ) ; } ) ( ) ; var effect = $ . effects ; / * !
* jQuery UI Effects Blind 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectBlind = $ . effects . define ( "blind" , "hide" , function ( options , done ) { var map = { up : [ "bottom" , "top" ] , vertical : [ "bottom" , "top" ] , down : [ "top" , "bottom" ] , left : [ "right" , "left" ] , horizontal : [ "right" , "left" ] , right : [ "left" , "right" ] } , element = $ ( this ) , direction = options . direction || "up" , start = element . cssClip ( ) , animate = { clip : $ . extend ( { } , start ) } , placeholder = $ . effects . createPlaceholder ( element ) ; animate . clip [ map [ direction ] [ 0 ] ] = animate . clip [ map [ direction ] [ 1 ] ] ; if ( options . mode === "show" ) { element . cssClip ( animate . clip ) ; if ( placeholder ) { placeholder . css ( $ . effects . clipToBox ( animate ) ) ; }
animate . clip = start ; }
if ( placeholder ) { placeholder . animate ( $ . effects . clipToBox ( animate ) , options . duration , options . easing ) ; }
element . animate ( animate , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Bounce 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectBounce = $ . effects . define ( "bounce" , function ( options , done ) { var upAnim , downAnim , refValue , element = $ ( this ) , mode = options . mode , hide = mode === "hide" , show = mode === "show" , direction = options . direction || "up" , distance = options . distance , times = options . times || 5 , anims = times * 2 + ( show || hide ? 1 : 0 ) , speed = options . duration / anims , easing = options . easing , ref = ( direction === "up" || direction === "down" ) ? "top" : "left" , motion = ( direction === "up" || direction === "left" ) , i = 0 , queuelen = element . queue ( ) . length ; $ . effects . createPlaceholder ( element ) ; refValue = element . css ( ref ) ; if ( ! distance ) { distance = element [ ref === "top" ? "outerHeight" : "outerWidth" ] ( ) / 3 ; }
if ( show ) { downAnim = { opacity : 1 } ; downAnim [ ref ] = refValue ; element . css ( "opacity" , 0 ) . css ( ref , motion ? - distance * 2 : distance * 2 ) . animate ( downAnim , speed , easing ) ; }
if ( hide ) { distance = distance / Math . pow ( 2 , times - 1 ) ; }
downAnim = { } ; downAnim [ ref ] = refValue ; for ( ; i < times ; i ++ ) { upAnim = { } ; upAnim [ ref ] = ( motion ? "-=" : "+=" ) + distance ; element . animate ( upAnim , speed , easing ) . animate ( downAnim , speed , easing ) ; distance = hide ? distance * 2 : distance / 2 ; }
if ( hide ) { upAnim = { opacity : 0 } ; upAnim [ ref ] = ( motion ? "-=" : "+=" ) + distance ; element . animate ( upAnim , speed , easing ) ; }
element . queue ( done ) ; $ . effects . unshift ( element , queuelen , anims + 1 ) ; } ) ; / * !
* jQuery UI Effects Clip 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectClip = $ . effects . define ( "clip" , "hide" , function ( options , done ) { var start , animate = { } , element = $ ( this ) , direction = options . direction || "vertical" , both = direction === "both" , horizontal = both || direction === "horizontal" , vertical = both || direction === "vertical" ; start = element . cssClip ( ) ; animate . clip = { top : vertical ? ( start . bottom - start . top ) / 2 : start . top , right : horizontal ? ( start . right - start . left ) / 2 : start . right , bottom : vertical ? ( start . bottom - start . top ) / 2 : start . bottom , left : horizontal ? ( start . right - start . left ) / 2 : start . left } ; $ . effects . createPlaceholder ( element ) ; if ( options . mode === "show" ) { element . cssClip ( animate . clip ) ; animate . clip = start ; }
element . animate ( animate , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Drop 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectDrop = $ . effects . define ( "drop" , "hide" , function ( options , done ) { var distance , element = $ ( this ) , mode = options . mode , show = mode === "show" , direction = options . direction || "left" , ref = ( direction === "up" || direction === "down" ) ? "top" : "left" , motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=" , oppositeMotion = ( motion === "+=" ) ? "-=" : "+=" , animation = { opacity : 0 } ; $ . effects . createPlaceholder ( element ) ; distance = options . distance || element [ ref === "top" ? "outerHeight" : "outerWidth" ] ( true ) / 2 ; animation [ ref ] = motion + distance ; if ( show ) { element . css ( animation ) ; animation [ ref ] = oppositeMotion + distance ; animation . opacity = 1 ; }
element . animate ( animation , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Explode 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectExplode = $ . effects . define ( "explode" , "hide" , function ( options , done ) { var i , j , left , top , mx , my , rows = options . pieces ? Math . round ( Math . sqrt ( options . pieces ) ) : 3 , cells = rows , element = $ ( this ) , mode = options . mode , show = mode === "show" , offset = element . show ( ) . css ( "visibility" , "hidden" ) . offset ( ) , width = Math . ceil ( element . outerWidth ( ) / cells ) , height = Math . ceil ( element . outerHeight ( ) / rows ) , pieces = [ ] ; function childComplete ( ) { pieces . push ( this ) ; if ( pieces . length === rows * cells ) { animComplete ( ) ; } }
for ( i = 0 ; i < rows ; i ++ ) { top = offset . top + i * height ; my = i - ( rows - 1 ) / 2 ; for ( j = 0 ; j < cells ; j ++ ) { left = offset . left + j * width ; mx = j - ( cells - 1 ) / 2 ; element . clone ( ) . appendTo ( "body" ) . wrap ( "<div></div>" ) . css ( { position : "absolute" , visibility : "visible" , left : - j * width , top : - i * height } )
. parent ( ) . addClass ( "ui-effects-explode" ) . css ( { position : "absolute" , overflow : "hidden" , width : width , height : height , left : left + ( show ? mx * width : 0 ) , top : top + ( show ? my * height : 0 ) , opacity : show ? 0 : 1 } ) . animate ( { left : left + ( show ? 0 : mx * width ) , top : top + ( show ? 0 : my * height ) , opacity : show ? 1 : 0 } , options . duration || 500 , options . easing , childComplete ) ; } }
function animComplete ( ) { element . css ( { visibility : "visible" } ) ; $ ( pieces ) . remove ( ) ; done ( ) ; } } ) ; / * !
* jQuery UI Effects Fade 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectFade = $ . effects . define ( "fade" , "toggle" , function ( options , done ) { var show = options . mode === "show" ; $ ( this ) . css ( "opacity" , show ? 0 : 1 ) . animate ( { opacity : show ? 1 : 0 } , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Fold 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectFold = $ . effects . define ( "fold" , "hide" , function ( options , done ) { var element = $ ( this ) , mode = options . mode , show = mode === "show" , hide = mode === "hide" , size = options . size || 15 , percent = /([0-9]+)%/ . exec ( size ) , horizFirst = ! ! options . horizFirst , ref = horizFirst ? [ "right" , "bottom" ] : [ "bottom" , "right" ] , duration = options . duration / 2 , placeholder = $ . effects . createPlaceholder ( element ) , start = element . cssClip ( ) , animation1 = { clip : $ . extend ( { } , start ) } , animation2 = { clip : $ . extend ( { } , start ) } , distance = [ start [ ref [ 0 ] ] , start [ ref [ 1 ] ] ] , queuelen = element . queue ( ) . length ; if ( percent ) { size = parseInt ( percent [ 1 ] , 10 ) / 100 * distance [ hide ? 0 : 1 ] ; }
animation1 . clip [ ref [ 0 ] ] = size ; animation2 . clip [ ref [ 0 ] ] = size ; animation2 . clip [ ref [ 1 ] ] = 0 ; if ( show ) { element . cssClip ( animation2 . clip ) ; if ( placeholder ) { placeholder . css ( $ . effects . clipToBox ( animation2 ) ) ; }
animation2 . clip = start ; }
element . queue ( function ( next ) { if ( placeholder ) { placeholder . animate ( $ . effects . clipToBox ( animation1 ) , duration , options . easing ) . animate ( $ . effects . clipToBox ( animation2 ) , duration , options . easing ) ; }
next ( ) ; } ) . animate ( animation1 , duration , options . easing ) . animate ( animation2 , duration , options . easing ) . queue ( done ) ; $ . effects . unshift ( element , queuelen , 4 ) ; } ) ; / * !
* jQuery UI Effects Highlight 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectHighlight = $ . effects . define ( "highlight" , "show" , function ( options , done ) { var element = $ ( this ) , animation = { backgroundColor : element . css ( "backgroundColor" ) } ; if ( options . mode === "hide" ) { animation . opacity = 0 ; }
$ . effects . saveStyle ( element ) ; element . css ( { backgroundImage : "none" , backgroundColor : options . color || "#ffff99" } ) . animate ( animation , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Size 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectSize = $ . effects . define ( "size" , function ( options , done ) { var baseline , factor , temp , element = $ ( this ) , cProps = [ "fontSize" ] , vProps = [ "borderTopWidth" , "borderBottomWidth" , "paddingTop" , "paddingBottom" ] , hProps = [ "borderLeftWidth" , "borderRightWidth" , "paddingLeft" , "paddingRight" ] , mode = options . mode , restore = mode !== "effect" , scale = options . scale || "both" , origin = options . origin || [ "middle" , "center" ] , position = element . css ( "position" ) , pos = element . position ( ) , original = $ . effects . scaledDimensions ( element ) , from = options . from || original , to = options . to || $ . effects . scaledDimensions ( element , 0 ) ; $ . effects . createPlaceholder ( element ) ; if ( mode === "show" ) { temp = from ; from = to ; to = temp ; }
factor = { from : { y : from . height / original . height , x : from . width / original . width } , to : { y : to . height / original . height , x : to . width / original . width } } ; if ( scale === "box" || scale === "both" ) { if ( factor . from . y !== factor . to . y ) { from = $ . effects . setTransition ( element , vProps , factor . from . y , from ) ; to = $ . effects . setTransition ( element , vProps , factor . to . y , to ) ; }
if ( factor . from . x !== factor . to . x ) { from = $ . effects . setTransition ( element , hProps , factor . from . x , from ) ; to = $ . effects . setTransition ( element , hProps , factor . to . x , to ) ; } }
if ( scale === "content" || scale === "both" ) { if ( factor . from . y !== factor . to . y ) { from = $ . effects . setTransition ( element , cProps , factor . from . y , from ) ; to = $ . effects . setTransition ( element , cProps , factor . to . y , to ) ; } }
if ( origin ) { baseline = $ . effects . getBaseline ( origin , original ) ; from . top = ( original . outerHeight - from . outerHeight ) * baseline . y + pos . top ; from . left = ( original . outerWidth - from . outerWidth ) * baseline . x + pos . left ; to . top = ( original . outerHeight - to . outerHeight ) * baseline . y + pos . top ; to . left = ( original . outerWidth - to . outerWidth ) * baseline . x + pos . left ; }
element . css ( from ) ; if ( scale === "content" || scale === "both" ) { vProps = vProps . concat ( [ "marginTop" , "marginBottom" ] ) . concat ( cProps ) ; hProps = hProps . concat ( [ "marginLeft" , "marginRight" ] ) ; element . find ( "*[width]" ) . each ( function ( ) { var child = $ ( this ) , childOriginal = $ . effects . scaledDimensions ( child ) , childFrom = { height : childOriginal . height * factor . from . y , width : childOriginal . width * factor . from . x , outerHeight : childOriginal . outerHeight * factor . from . y , outerWidth : childOriginal . outerWidth * factor . from . x } , childTo = { height : childOriginal . height * factor . to . y , width : childOriginal . width * factor . to . x , outerHeight : childOriginal . height * factor . to . y , outerWidth : childOriginal . width * factor . to . x } ; if ( factor . from . y !== factor . to . y ) { childFrom = $ . effects . setTransition ( child , vProps , factor . from . y , childFrom ) ; childTo = $ . effects . setTransition ( child , vProps , factor . to . y , childTo ) ; }
if ( factor . from . x !== factor . to . x ) { childFrom = $ . effects . setTransition ( child , hProps , factor . from . x , childFrom ) ; childTo = $ . effects . setTransition ( child , hProps , factor . to . x , childTo ) ; }
if ( restore ) { $ . effects . saveStyle ( child ) ; }
child . css ( childFrom ) ; child . animate ( childTo , options . duration , options . easing , function ( ) { if ( restore ) { $ . effects . restoreStyle ( child ) ; } } ) ; } ) ; }
element . animate ( to , { queue : false , duration : options . duration , easing : options . easing , complete : function ( ) { var offset = element . offset ( ) ; if ( to . opacity === 0 ) { element . css ( "opacity" , from . opacity ) ; }
if ( ! restore ) { element . css ( "position" , position === "static" ? "relative" : position ) . offset ( offset ) ; $ . effects . saveStyle ( element ) ; }
done ( ) ; } } ) ; } ) ; / * !
* jQuery UI Effects Scale 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectScale = $ . effects . define ( "scale" , function ( options , done ) { var el = $ ( this ) , mode = options . mode , percent = parseInt ( options . percent , 10 ) || ( parseInt ( options . percent , 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ) , newOptions = $ . extend ( true , { from : $ . effects . scaledDimensions ( el ) , to : $ . effects . scaledDimensions ( el , percent , options . direction || "both" ) , origin : options . origin || [ "middle" , "center" ] } , options ) ; if ( options . fade ) { newOptions . from . opacity = 1 ; newOptions . to . opacity = 0 ; }
$ . effects . effect . size . call ( this , newOptions , done ) ; } ) ; / * !
* jQuery UI Effects Puff 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectPuff = $ . effects . define ( "puff" , "hide" , function ( options , done ) { var newOptions = $ . extend ( true , { } , options , { fade : true , percent : parseInt ( options . percent , 10 ) || 150 } ) ; $ . effects . effect . scale . call ( this , newOptions , done ) ; } ) ; / * !
* jQuery UI Effects Pulsate 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectPulsate = $ . effects . define ( "pulsate" , "show" , function ( options , done ) { var element = $ ( this ) , mode = options . mode , show = mode === "show" , hide = mode === "hide" , showhide = show || hide , anims = ( ( options . times || 5 ) * 2 ) + ( showhide ? 1 : 0 ) , duration = options . duration / anims , animateTo = 0 , i = 1 , queuelen = element . queue ( ) . length ; if ( show || ! element . is ( ":visible" ) ) { element . css ( "opacity" , 0 ) . show ( ) ; animateTo = 1 ; }
for ( ; i < anims ; i ++ ) { element . animate ( { opacity : animateTo } , duration , options . easing ) ; animateTo = 1 - animateTo ; }
element . animate ( { opacity : animateTo } , duration , options . easing ) ; element . queue ( done ) ; $ . effects . unshift ( element , queuelen , anims + 1 ) ; } ) ; / * !
* jQuery UI Effects Shake 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectShake = $ . effects . define ( "shake" , function ( options , done ) { var i = 1 , element = $ ( this ) , direction = options . direction || "left" , distance = options . distance || 20 , times = options . times || 3 , anims = times * 2 + 1 , speed = Math . round ( options . duration / anims ) , ref = ( direction === "up" || direction === "down" ) ? "top" : "left" , positiveMotion = ( direction === "up" || direction === "left" ) , animation = { } , animation1 = { } , animation2 = { } , queuelen = element . queue ( ) . length ; $ . effects . createPlaceholder ( element ) ; animation [ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance ; animation1 [ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2 ; animation2 [ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2 ; element . animate ( animation , speed , options . easing ) ; for ( ; i < times ; i ++ ) { element . animate ( animation1 , speed , options . easing ) . animate ( animation2 , speed , options . easing ) ; }
element . animate ( animation1 , speed , options . easing ) . animate ( animation , speed / 2 , options . easing ) . queue ( done ) ; $ . effects . unshift ( element , queuelen , anims + 1 ) ; } ) ; / * !
* jQuery UI Effects Slide 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effectsEffectSlide = $ . effects . define ( "slide" , "show" , function ( options , done ) { var startClip , startRef , element = $ ( this ) , map = { up : [ "bottom" , "top" ] , down : [ "top" , "bottom" ] , left : [ "right" , "left" ] , right : [ "left" , "right" ] } , mode = options . mode , direction = options . direction || "left" , ref = ( direction === "up" || direction === "down" ) ? "top" : "left" , positiveMotion = ( direction === "up" || direction === "left" ) , distance = options . distance || element [ ref === "top" ? "outerHeight" : "outerWidth" ] ( true ) , animation = { } ; $ . effects . createPlaceholder ( element ) ; startClip = element . cssClip ( ) ; startRef = element . position ( ) [ ref ] ; animation [ ref ] = ( positiveMotion ? - 1 : 1 ) * distance + startRef ; animation . clip = element . cssClip ( ) ; animation . clip [ map [ direction ] [ 1 ] ] = animation . clip [ map [ direction ] [ 0 ] ] ; if ( mode === "show" ) { element . cssClip ( animation . clip ) ; element . css ( ref , animation [ ref ] ) ; animation . clip = startClip ; animation [ ref ] = startRef ; }
element . animate ( animation , { queue : false , duration : options . duration , easing : options . easing , complete : done } ) ; } ) ; / * !
* jQuery UI Effects Transfer 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var effect ; if ( $ . uiBackCompat !== false ) { effect = $ . effects . define ( "transfer" , function ( options , done ) { $ ( this ) . transfer ( options , done ) ; } ) ; }
var effectsEffectTransfer = effect ; / * !
* jQuery UI Focusable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . ui . focusable = function ( element , hasTabindex ) { var map , mapName , img , focusableIfVisible , fieldset , nodeName = element . nodeName . toLowerCase ( ) ; if ( "area" === nodeName ) { map = element . parentNode ; mapName = map . name ; if ( ! element . href || ! mapName || map . nodeName . toLowerCase ( ) !== "map" ) { return false ; }
img = $ ( "img[usemap='#" + mapName + "']" ) ; return img . length > 0 && img . is ( ":visible" ) ; }
if ( /^(input|select|textarea|button|object)$/ . test ( nodeName ) ) { focusableIfVisible = ! element . disabled ; if ( focusableIfVisible ) { fieldset = $ ( element ) . closest ( "fieldset" ) [ 0 ] ; if ( fieldset ) { focusableIfVisible = ! fieldset . disabled ; } } } else if ( "a" === nodeName ) { focusableIfVisible = element . href || hasTabindex ; } else { focusableIfVisible = hasTabindex ; }
return focusableIfVisible && $ ( element ) . is ( ":visible" ) && visible ( $ ( element ) ) ; } ; function visible ( element ) { var visibility = element . css ( "visibility" ) ; while ( visibility === "inherit" ) { element = element . parent ( ) ; visibility = element . css ( "visibility" ) ; }
return visibility !== "hidden" ; }
$ . extend ( $ . expr [ ":" ] , { focusable : function ( element ) { return $ . ui . focusable ( element , $ . attr ( element , "tabindex" ) != null ) ; } } ) ; var focusable = $ . ui . focusable ; var form = $ . fn . form = function ( ) { return typeof this [ 0 ] . form === "string" ? this . closest ( "form" ) : $ ( this [ 0 ] . form ) ; } ; / * !
* jQuery UI Form Reset Mixin 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var formResetMixin = $ . ui . formResetMixin = { _formResetHandler : function ( ) { var form = $ ( this ) ; setTimeout ( function ( ) { var instances = form . data ( "ui-form-reset-instances" ) ; $ . each ( instances , function ( ) { this . refresh ( ) ; } ) ; } ) ; } , _bindFormResetHandler : function ( ) { this . form = this . element . form ( ) ; if ( ! this . form . length ) { return ; }
var instances = this . form . data ( "ui-form-reset-instances" ) || [ ] ; if ( ! instances . length ) { this . form . on ( "reset.ui-form-reset" , this . _formResetHandler ) ; }
instances . push ( this ) ; this . form . data ( "ui-form-reset-instances" , instances ) ; } , _unbindFormResetHandler : function ( ) { if ( ! this . form . length ) { return ; }
var instances = this . form . data ( "ui-form-reset-instances" ) ; instances . splice ( $ . inArray ( this , instances ) , 1 ) ; if ( instances . length ) { this . form . data ( "ui-form-reset-instances" , instances ) ; } else { this . form . removeData ( "ui-form-reset-instances" ) . off ( "reset.ui-form-reset" ) ; } } } ; / * !
* jQuery UI Support for jQuery core 1.7 . x 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
*
* /
if ( $ . fn . jquery . substring ( 0 , 3 ) === "1.7" ) { $ . each ( [ "Width" , "Height" ] , function ( i , name ) { var side = name === "Width" ? [ "Left" , "Right" ] : [ "Top" , "Bottom" ] , type = name . toLowerCase ( ) , orig = { innerWidth : $ . fn . innerWidth , innerHeight : $ . fn . innerHeight , outerWidth : $ . fn . outerWidth , outerHeight : $ . fn . outerHeight } ; function reduce ( elem , size , border , margin ) { $ . each ( side , function ( ) { size -= parseFloat ( $ . css ( elem , "padding" + this ) ) || 0 ; if ( border ) { size -= parseFloat ( $ . css ( elem , "border" + this + "Width" ) ) || 0 ; }
if ( margin ) { size -= parseFloat ( $ . css ( elem , "margin" + this ) ) || 0 ; } } ) ; return size ; }
$ . fn [ "inner" + name ] = function ( size ) { if ( size === undefined ) { return orig [ "inner" + name ] . call ( this ) ; }
return this . each ( function ( ) { $ ( this ) . css ( type , reduce ( this , size ) + "px" ) ; } ) ; } ; $ . fn [ "outer" + name ] = function ( size , margin ) { if ( typeof size !== "number" ) { return orig [ "outer" + name ] . call ( this , size ) ; }
return this . each ( function ( ) { $ ( this ) . css ( type , reduce ( this , size , true , margin ) + "px" ) ; } ) ; } ; } ) ; $ . fn . addBack = function ( selector ) { return this . add ( selector == null ? this . prevObject : this . prevObject . filter ( selector ) ) ; } ; } ; / * !
* jQuery UI Keycode 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var keycode = $ . ui . keyCode = { BACKSPACE : 8 , COMMA : 188 , DELETE : 46 , DOWN : 40 , END : 35 , ENTER : 13 , ESCAPE : 27 , HOME : 36 , LEFT : 37 , PAGE _DOWN : 34 , PAGE _UP : 33 , PERIOD : 190 , RIGHT : 39 , SPACE : 32 , TAB : 9 , UP : 38 } ; var escapeSelector = $ . ui . escapeSelector = ( function ( ) { var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g ; return function ( selector ) { return selector . replace ( selectorEscape , "\\$1" ) ; } ; } ) ( ) ; / * !
* jQuery UI Labels 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var labels = $ . fn . labels = function ( ) { var ancestor , selector , id , labels , ancestors ; if ( this [ 0 ] . labels && this [ 0 ] . labels . length ) { return this . pushStack ( this [ 0 ] . labels ) ; }
labels = this . eq ( 0 ) . parents ( "label" ) ; id = this . attr ( "id" ) ; if ( id ) { ancestor = this . eq ( 0 ) . parents ( ) . last ( ) ; ancestors = ancestor . add ( ancestor . length ? ancestor . siblings ( ) : this . siblings ( ) ) ; selector = "label[for='" + $ . ui . escapeSelector ( id ) + "']" ; labels = labels . add ( ancestors . find ( selector ) . addBack ( selector ) ) ; }
return this . pushStack ( labels ) ; } ; / * !
* jQuery UI Scroll Parent 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var scrollParent = $ . fn . scrollParent = function ( includeHidden ) { var position = this . css ( "position" ) , excludeStaticParent = position === "absolute" , overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/ , scrollParent = this . parents ( ) . filter ( function ( ) { var parent = $ ( this ) ; if ( excludeStaticParent && parent . css ( "position" ) === "static" ) { return false ; }
return overflowRegex . test ( parent . css ( "overflow" ) + parent . css ( "overflow-y" ) +
parent . css ( "overflow-x" ) ) ; } ) . eq ( 0 ) ; return position === "fixed" || ! scrollParent . length ? $ ( this [ 0 ] . ownerDocument || document ) : scrollParent ; } ; / * !
* jQuery UI Tabbable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var tabbable = $ . extend ( $ . expr [ ":" ] , { tabbable : function ( element ) { var tabIndex = $ . attr ( element , "tabindex" ) , hasTabindex = tabIndex != null ; return ( ! hasTabindex || tabIndex >= 0 ) && $ . ui . focusable ( element , hasTabindex ) ; } } ) ; / * !
* jQuery UI Unique ID 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var uniqueId = $ . fn . extend ( { uniqueId : ( function ( ) { var uuid = 0 ; return function ( ) { return this . each ( function ( ) { if ( ! this . id ) { this . id = "ui-id-" + ( ++ uuid ) ; } } ) ; } ; } ) ( ) , removeUniqueId : function ( ) { return this . each ( function ( ) { if ( /^ui-id-\d+$/ . test ( this . id ) ) { $ ( this ) . removeAttr ( "id" ) ; } } ) ; } } ) ; / * !
* jQuery UI Accordion 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsAccordion = $ . widget ( "ui.accordion" , { version : "1.12.1" , options : { active : 0 , animate : { } , classes : { "ui-accordion-header" : "ui-corner-top" , "ui-accordion-header-collapsed" : "ui-corner-all" , "ui-accordion-content" : "ui-corner-bottom" } , collapsible : false , event : "click" , header : "> li > :first-child, > :not(li):even" , heightStyle : "auto" , icons : { activeHeader : "ui-icon-triangle-1-s" , header : "ui-icon-triangle-1-e" } , activate : null , beforeActivate : null } , hideProps : { borderTopWidth : "hide" , borderBottomWidth : "hide" , paddingTop : "hide" , paddingBottom : "hide" , height : "hide" } , showProps : { borderTopWidth : "show" , borderBottomWidth : "show" , paddingTop : "show" , paddingBottom : "show" , height : "show" } , _create : function ( ) { var options = this . options ; this . prevShow = this . prevHide = $ ( ) ; this . _addClass ( "ui-accordion" , "ui-widget ui-helper-reset" ) ; this . element . attr ( "role" , "tablist" ) ; if ( ! options . collapsible && ( options . active === false || options . active == null ) ) { options . active = 0 ; }
this . _processPanels ( ) ; if ( options . active < 0 ) { options . active += this . headers . length ; }
this . _refresh ( ) ; } , _getCreateEventData : function ( ) { return { header : this . active , panel : ! this . active . length ? $ ( ) : this . active . next ( ) } ; } , _createIcons : function ( ) { var icon , children , icons = this . options . icons ; if ( icons ) { icon = $ ( "<span>" ) ; this . _addClass ( icon , "ui-accordion-header-icon" , "ui-icon " + icons . header ) ; icon . prependTo ( this . headers ) ; children = this . active . children ( ".ui-accordion-header-icon" ) ; this . _removeClass ( children , icons . header ) . _addClass ( children , null , icons . activeHeader ) . _addClass ( this . headers , "ui-accordion-icons" ) ; } } , _destroyIcons : function ( ) { this . _removeClass ( this . headers , "ui-accordion-icons" ) ; this . headers . children ( ".ui-accordion-header-icon" ) . remove ( ) ; } , _destroy : function ( ) { var contents ; this . element . removeAttr ( "role" ) ; this . headers . removeAttr ( "role aria-expanded aria-selected aria-controls tabIndex" ) . removeUniqueId ( ) ; this . _destroyIcons ( ) ; contents = this . headers . next ( ) . css ( "display" , "" ) . removeAttr ( "role aria-hidden aria-labelledby" ) . removeUniqueId ( ) ; if ( this . options . heightStyle !== "content" ) { contents . css ( "height" , "" ) ; } } , _setOption : function ( key , value ) { if ( key === "active" ) { this . _activate ( value ) ; return ; }
if ( key === "event" ) { if ( this . options . event ) { this . _off ( this . headers , this . options . event ) ; }
this . _setupEvents ( value ) ; }
this . _super ( key , value ) ; if ( key === "collapsible" && ! value && this . options . active === false ) { this . _activate ( 0 ) ; }
if ( key === "icons" ) { this . _destroyIcons ( ) ; if ( value ) { this . _createIcons ( ) ; } } } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . element . attr ( "aria-disabled" , value ) ; this . _toggleClass ( null , "ui-state-disabled" , ! ! value ) ; this . _toggleClass ( this . headers . add ( this . headers . next ( ) ) , null , "ui-state-disabled" , ! ! value ) ; } , _keydown : function ( event ) { if ( event . altKey || event . ctrlKey ) { return ; }
var keyCode = $ . ui . keyCode , length = this . headers . length , currentIndex = this . headers . index ( event . target ) , toFocus = false ; switch ( event . keyCode ) { case keyCode . RIGHT : case keyCode . DOWN : toFocus = this . headers [ ( currentIndex + 1 ) % length ] ; break ; case keyCode . LEFT : case keyCode . UP : toFocus = this . headers [ ( currentIndex - 1 + length ) % length ] ; break ; case keyCode . SPACE : case keyCode . ENTER : this . _eventHandler ( event ) ; break ; case keyCode . HOME : toFocus = this . headers [ 0 ] ; break ; case keyCode . END : toFocus = this . headers [ length - 1 ] ; break ; }
if ( toFocus ) { $ ( event . target ) . attr ( "tabIndex" , - 1 ) ; $ ( toFocus ) . attr ( "tabIndex" , 0 ) ; $ ( toFocus ) . trigger ( "focus" ) ; event . preventDefault ( ) ; } } , _panelKeyDown : function ( event ) { if ( event . keyCode === $ . ui . keyCode . UP && event . ctrlKey ) { $ ( event . currentTarget ) . prev ( ) . trigger ( "focus" ) ; } } , refresh : function ( ) { var options = this . options ; this . _processPanels ( ) ; if ( ( options . active === false && options . collapsible === true ) || ! this . headers . length ) { options . active = false ; this . active = $ ( ) ; } else if ( options . active === false ) { this . _activate ( 0 ) ; } else if ( this . active . length && ! $ . contains ( this . element [ 0 ] , this . active [ 0 ] ) ) { if ( this . headers . length === this . headers . find ( ".ui-state-disabled" ) . length ) { options . active = false ; this . active = $ ( ) ; } else { this . _activate ( Math . max ( 0 , options . active - 1 ) ) ; }
} else { options . active = this . headers . index ( this . active ) ; }
this . _destroyIcons ( ) ; this . _refresh ( ) ; } , _processPanels : function ( ) { var prevHeaders = this . headers , prevPanels = this . panels ; this . headers = this . element . find ( this . options . header ) ; this . _addClass ( this . headers , "ui-accordion-header ui-accordion-header-collapsed" , "ui-state-default" ) ; this . panels = this . headers . next ( ) . filter ( ":not(.ui-accordion-content-active)" ) . hide ( ) ; this . _addClass ( this . panels , "ui-accordion-content" , "ui-helper-reset ui-widget-content" ) ; if ( prevPanels ) { this . _off ( prevHeaders . not ( this . headers ) ) ; this . _off ( prevPanels . not ( this . panels ) ) ; } } , _refresh : function ( ) { var maxHeight , options = this . options , heightStyle = options . heightStyle , parent = this . element . parent ( ) ; this . active = this . _findActive ( options . active ) ; this . _addClass ( this . active , "ui-accordion-header-active" , "ui-state-active" ) . _removeClass ( this . active , "ui-accordion-header-collapsed" ) ; this . _addClass ( this . active . next ( ) , "ui-accordion-content-active" ) ; this . active . next ( ) . show ( ) ; this . headers . attr ( "role" , "tab" ) . each ( function ( ) { var header = $ ( this ) , headerId = header . uniqueId ( ) . attr ( "id" ) , panel = header . next ( ) , panelId = panel . uniqueId ( ) . attr ( "id" ) ; header . attr ( "aria-controls" , panelId ) ; panel . attr ( "aria-labelledby" , headerId ) ; } ) . next ( ) . attr ( "role" , "tabpanel" ) ; this . headers . not ( this . active ) . attr ( { "aria-selected" : "false" , "aria-expanded" : "false" , tabIndex : - 1 } ) . next ( ) . attr ( { "aria-hidden" : "true" } ) . hide ( ) ; if ( ! this . active . length ) { this . headers . eq ( 0 ) . attr ( "tabIndex" , 0 ) ; } else { this . active . attr ( { "aria-selected" : "true" , "aria-expanded" : "true" , tabIndex : 0 } ) . next ( ) . attr ( { "aria-hidden" : "false" } ) ; }
this . _createIcons ( ) ; this . _setupEvents ( options . event ) ; if ( heightStyle === "fill" ) { maxHeight = parent . height ( ) ; this . element . siblings ( ":visible" ) . each ( function ( ) { var elem = $ ( this ) , position = elem . css ( "position" ) ; if ( position === "absolute" || position === "fixed" ) { return ; }
maxHeight -= elem . outerHeight ( true ) ; } ) ; this . headers . each ( function ( ) { maxHeight -= $ ( this ) . outerHeight ( true ) ; } ) ; this . headers . next ( ) . each ( function ( ) { $ ( this ) . height ( Math . max ( 0 , maxHeight -
$ ( this ) . innerHeight ( ) + $ ( this ) . height ( ) ) ) ; } ) . css ( "overflow" , "auto" ) ; } else if ( heightStyle === "auto" ) { maxHeight = 0 ; this . headers . next ( ) . each ( function ( ) { var isVisible = $ ( this ) . is ( ":visible" ) ; if ( ! isVisible ) { $ ( this ) . show ( ) ; }
maxHeight = Math . max ( maxHeight , $ ( this ) . css ( "height" , "" ) . height ( ) ) ; if ( ! isVisible ) { $ ( this ) . hide ( ) ; } } ) . height ( maxHeight ) ; } } , _activate : function ( index ) { var active = this . _findActive ( index ) [ 0 ] ; if ( active === this . active [ 0 ] ) { return ; }
active = active || this . active [ 0 ] ; this . _eventHandler ( { target : active , currentTarget : active , preventDefault : $ . noop } ) ; } , _findActive : function ( selector ) { return typeof selector === "number" ? this . headers . eq ( selector ) : $ ( ) ; } , _setupEvents : function ( event ) { var events = { keydown : "_keydown" } ; if ( event ) { $ . each ( event . split ( " " ) , function ( index , eventName ) { events [ eventName ] = "_eventHandler" ; } ) ; }
this . _off ( this . headers . add ( this . headers . next ( ) ) ) ; this . _on ( this . headers , events ) ; this . _on ( this . headers . next ( ) , { keydown : "_panelKeyDown" } ) ; this . _hoverable ( this . headers ) ; this . _focusable ( this . headers ) ; } , _eventHandler : function ( event ) { var activeChildren , clickedChildren , options = this . options , active = this . active , clicked = $ ( event . currentTarget ) , clickedIsActive = clicked [ 0 ] === active [ 0 ] , collapsing = clickedIsActive && options . collapsible , toShow = collapsing ? $ ( ) : clicked . next ( ) , toHide = active . next ( ) , eventData = { oldHeader : active , oldPanel : toHide , newHeader : collapsing ? $ ( ) : clicked , newPanel : toShow } ; event . preventDefault ( ) ; if ( ( clickedIsActive && ! options . collapsible ) || ( this . _trigger ( "beforeActivate" , event , eventData ) === false ) ) { return ; }
options . active = collapsing ? false : this . headers . index ( clicked ) ; this . active = clickedIsActive ? $ ( ) : clicked ; this . _toggle ( eventData ) ; this . _removeClass ( active , "ui-accordion-header-active" , "ui-state-active" ) ; if ( options . icons ) { activeChildren = active . children ( ".ui-accordion-header-icon" ) ; this . _removeClass ( activeChildren , null , options . icons . activeHeader ) . _addClass ( activeChildren , null , options . icons . header ) ; }
if ( ! clickedIsActive ) { this . _removeClass ( clicked , "ui-accordion-header-collapsed" ) . _addClass ( clicked , "ui-accordion-header-active" , "ui-state-active" ) ; if ( options . icons ) { clickedChildren = clicked . children ( ".ui-accordion-header-icon" ) ; this . _removeClass ( clickedChildren , null , options . icons . header ) . _addClass ( clickedChildren , null , options . icons . activeHeader ) ; }
this . _addClass ( clicked . next ( ) , "ui-accordion-content-active" ) ; } } , _toggle : function ( data ) { var toShow = data . newPanel , toHide = this . prevShow . length ? this . prevShow : data . oldPanel ; this . prevShow . add ( this . prevHide ) . stop ( true , true ) ; this . prevShow = toShow ; this . prevHide = toHide ; if ( this . options . animate ) { this . _animate ( toShow , toHide , data ) ; } else { toHide . hide ( ) ; toShow . show ( ) ; this . _toggleComplete ( data ) ; }
toHide . attr ( { "aria-hidden" : "true" } ) ; toHide . prev ( ) . attr ( { "aria-selected" : "false" , "aria-expanded" : "false" } ) ; if ( toShow . length && toHide . length ) { toHide . prev ( ) . attr ( { "tabIndex" : - 1 , "aria-expanded" : "false" } ) ; } else if ( toShow . length ) { this . headers . filter ( function ( ) { return parseInt ( $ ( this ) . attr ( "tabIndex" ) , 10 ) === 0 ; } ) . attr ( "tabIndex" , - 1 ) ; }
toShow . attr ( "aria-hidden" , "false" ) . prev ( ) . attr ( { "aria-selected" : "true" , "aria-expanded" : "true" , tabIndex : 0 } ) ; } , _animate : function ( toShow , toHide , data ) { var total , easing , duration , that = this , adjust = 0 , boxSizing = toShow . css ( "box-sizing" ) , down = toShow . length && ( ! toHide . length || ( toShow . index ( ) < toHide . index ( ) ) ) , animate = this . options . animate || { } , options = down && animate . down || animate , complete = function ( ) { that . _toggleComplete ( data ) ; } ; if ( typeof options === "number" ) { duration = options ; }
if ( typeof options === "string" ) { easing = options ; }
easing = easing || options . easing || animate . easing ; duration = duration || options . duration || animate . duration ; if ( ! toHide . length ) { return toShow . animate ( this . showProps , duration , easing , complete ) ; }
if ( ! toShow . length ) { return toHide . animate ( this . hideProps , duration , easing , complete ) ; }
total = toShow . show ( ) . outerHeight ( ) ; toHide . animate ( this . hideProps , { duration : duration , easing : easing , step : function ( now , fx ) { fx . now = Math . round ( now ) ; } } ) ; toShow . hide ( ) . animate ( this . showProps , { duration : duration , easing : easing , complete : complete , step : function ( now , fx ) { fx . now = Math . round ( now ) ; if ( fx . prop !== "height" ) { if ( boxSizing === "content-box" ) { adjust += fx . now ; } } else if ( that . options . heightStyle !== "content" ) { fx . now = Math . round ( total - toHide . outerHeight ( ) - adjust ) ; adjust = 0 ; } } } ) ; } , _toggleComplete : function ( data ) { var toHide = data . oldPanel , prev = toHide . prev ( ) ; this . _removeClass ( toHide , "ui-accordion-content-active" ) ; this . _removeClass ( prev , "ui-accordion-header-active" ) . _addClass ( prev , "ui-accordion-header-collapsed" ) ; if ( toHide . length ) { toHide . parent ( ) [ 0 ] . className = toHide . parent ( ) [ 0 ] . className ; }
this . _trigger ( "activate" , null , data ) ; } } ) ; var safeActiveElement = $ . ui . safeActiveElement = function ( document ) { var activeElement ; try { activeElement = document . activeElement ; } catch ( error ) { activeElement = document . body ; }
if ( ! activeElement ) { activeElement = document . body ; }
if ( ! activeElement . nodeName ) { activeElement = document . body ; }
return activeElement ; } ; / * !
* jQuery UI Menu 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsMenu = $ . widget ( "ui.menu" , { version : "1.12.1" , defaultElement : "<ul>" , delay : 300 , options : { icons : { submenu : "ui-icon-caret-1-e" } , items : "> *" , menus : "ul" , position : { my : "left top" , at : "right top" } , role : "menu" , blur : null , focus : null , select : null } , _create : function ( ) { this . activeMenu = this . element ; this . mouseHandled = false ; this . element . uniqueId ( ) . attr ( { role : this . options . role , tabIndex : 0 } ) ; this . _addClass ( "ui-menu" , "ui-widget ui-widget-content" ) ; this . _on ( { "mousedown .ui-menu-item" : function ( event ) { event . preventDefault ( ) ; } , "click .ui-menu-item" : function ( event ) { var target = $ ( event . target ) ; var active = $ ( $ . ui . safeActiveElement ( this . document [ 0 ] ) ) ; if ( ! this . mouseHandled && target . not ( ".ui-state-disabled" ) . length ) { this . select ( event ) ; if ( ! event . isPropagationStopped ( ) ) { this . mouseHandled = true ; }
if ( target . has ( ".ui-menu" ) . length ) { this . expand ( event ) ; } else if ( ! this . element . is ( ":focus" ) && active . closest ( ".ui-menu" ) . length ) { this . element . trigger ( "focus" , [ true ] ) ; if ( this . active && this . active . parents ( ".ui-menu" ) . length === 1 ) { clearTimeout ( this . timer ) ; } } } } , "mouseenter .ui-menu-item" : function ( event ) { if ( this . previousFilter ) { return ; }
var actualTarget = $ ( event . target ) . closest ( ".ui-menu-item" ) , target = $ ( event . currentTarget ) ; if ( actualTarget [ 0 ] !== target [ 0 ] ) { return ; }
this . _removeClass ( target . siblings ( ) . children ( ".ui-state-active" ) , null , "ui-state-active" ) ; this . focus ( event , target ) ; } , mouseleave : "collapseAll" , "mouseleave .ui-menu" : "collapseAll" , focus : function ( event , keepActiveItem ) { var item = this . active || this . element . find ( this . options . items ) . eq ( 0 ) ; if ( ! keepActiveItem ) { this . focus ( event , item ) ; } } , blur : function ( event ) { this . _delay ( function ( ) { var notContained = ! $ . contains ( this . element [ 0 ] , $ . ui . safeActiveElement ( this . document [ 0 ] ) ) ; if ( notContained ) { this . collapseAll ( event ) ; } } ) ; } , keydown : "_keydown" } ) ; this . refresh ( ) ; this . _on ( this . document , { click : function ( event ) { if ( this . _closeOnDocumentClick ( event ) ) { this . collapseAll ( event ) ; }
this . mouseHandled = false ; } } ) ; } , _destroy : function ( ) { var items = this . element . find ( ".ui-menu-item" ) . removeAttr ( "role aria-disabled" ) , submenus = items . children ( ".ui-menu-item-wrapper" ) . removeUniqueId ( ) . removeAttr ( "tabIndex role aria-haspopup" ) ; this . element . removeAttr ( "aria-activedescendant" ) . find ( ".ui-menu" ) . addBack ( ) . removeAttr ( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
"tabIndex" ) . removeUniqueId ( ) . show ( ) ; submenus . children ( ) . each ( function ( ) { var elem = $ ( this ) ; if ( elem . data ( "ui-menu-submenu-caret" ) ) { elem . remove ( ) ; } } ) ; } , _keydown : function ( event ) { var match , prev , character , skip , preventDefault = true ; switch ( event . keyCode ) { case $ . ui . keyCode . PAGE _UP : this . previousPage ( event ) ; break ; case $ . ui . keyCode . PAGE _DOWN : this . nextPage ( event ) ; break ; case $ . ui . keyCode . HOME : this . _move ( "first" , "first" , event ) ; break ; case $ . ui . keyCode . END : this . _move ( "last" , "last" , event ) ; break ; case $ . ui . keyCode . UP : this . previous ( event ) ; break ; case $ . ui . keyCode . DOWN : this . next ( event ) ; break ; case $ . ui . keyCode . LEFT : this . collapse ( event ) ; break ; case $ . ui . keyCode . RIGHT : if ( this . active && ! this . active . is ( ".ui-state-disabled" ) ) { this . expand ( event ) ; }
break ; case $ . ui . keyCode . ENTER : case $ . ui . keyCode . SPACE : this . _activate ( event ) ; break ; case $ . ui . keyCode . ESCAPE : this . collapse ( event ) ; break ; default : preventDefault = false ; prev = this . previousFilter || "" ; skip = false ; character = event . keyCode >= 96 && event . keyCode <= 105 ? ( event . keyCode - 96 ) . toString ( ) : String . fromCharCode ( event . keyCode ) ; clearTimeout ( this . filterTimer ) ; if ( character === prev ) { skip = true ; } else { character = prev + character ; }
match = this . _filterMenuItems ( character ) ; match = skip && match . index ( this . active . next ( ) ) !== - 1 ? this . active . nextAll ( ".ui-menu-item" ) : match ; if ( ! match . length ) { character = String . fromCharCode ( event . keyCode ) ; match = this . _filterMenuItems ( character ) ; }
if ( match . length ) { this . focus ( event , match ) ; this . previousFilter = character ; this . filterTimer = this . _delay ( function ( ) { delete this . previousFilter ; } , 1000 ) ; } else { delete this . previousFilter ; } }
if ( preventDefault ) { event . preventDefault ( ) ; } } , _activate : function ( event ) { if ( this . active && ! this . active . is ( ".ui-state-disabled" ) ) { if ( this . active . children ( "[aria-haspopup='true']" ) . length ) { this . expand ( event ) ; } else { this . select ( event ) ; } } } , refresh : function ( ) { var menus , items , newSubmenus , newItems , newWrappers , that = this , icon = this . options . icons . submenu , submenus = this . element . find ( this . options . menus ) ; this . _toggleClass ( "ui-menu-icons" , null , ! ! this . element . find ( ".ui-icon" ) . length ) ; newSubmenus = submenus . filter ( ":not(.ui-menu)" ) . hide ( ) . attr ( { role : this . options . role , "aria-hidden" : "true" , "aria-expanded" : "false" } ) . each ( function ( ) { var menu = $ ( this ) , item = menu . prev ( ) , submenuCaret = $ ( "<span>" ) . data ( "ui-menu-submenu-caret" , true ) ; that . _addClass ( submenuCaret , "ui-menu-icon" , "ui-icon " + icon ) ; item . attr ( "aria-haspopup" , "true" ) . prepend ( submenuCaret ) ; menu . attr ( "aria-labelledby" , item . attr ( "id" ) ) ; } ) ; this . _addClass ( newSubmenus , "ui-menu" , "ui-widget ui-widget-content ui-front" ) ; menus = submenus . add ( this . element ) ; items = menus . find ( this . options . items ) ; items . not ( ".ui-menu-item" ) . each ( function ( ) { var item = $ ( this ) ; if ( that . _isDivider ( item ) ) { that . _addClass ( item , "ui-menu-divider" , "ui-widget-content" ) ; } } ) ; newItems = items . not ( ".ui-menu-item, .ui-menu-divider" ) ; newWrappers = newItems . children ( ) . not ( ".ui-menu" ) . uniqueId ( ) . attr ( { tabIndex : - 1 , role : this . _itemRole ( ) } ) ; this . _addClass ( newItems , "ui-menu-item" ) . _addClass ( newWrappers , "ui-menu-item-wrapper" ) ; items . filter ( ".ui-state-disabled" ) . attr ( "aria-disabled" , "true" ) ; if ( this . active && ! $ . contains ( this . element [ 0 ] , this . active [ 0 ] ) ) { this . blur ( ) ; } } , _itemRole : function ( ) { return { menu : "menuitem" , listbox : "option" } [ this . options . role ] ; } , _setOption : function ( key , value ) { if ( key === "icons" ) { var icons = this . element . find ( ".ui-menu-icon" ) ; this . _removeClass ( icons , null , this . options . icons . submenu ) . _addClass ( icons , null , value . submenu ) ; }
this . _super ( key , value ) ; } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . element . attr ( "aria-disabled" , String ( value ) ) ; this . _toggleClass ( null , "ui-state-disabled" , ! ! value ) ; } , focus : function ( event , item ) { var nested , focused , activeParent ; this . blur ( event , event && event . type === "focus" ) ; this . _scrollIntoView ( item ) ; this . active = item . first ( ) ; focused = this . active . children ( ".ui-menu-item-wrapper" ) ; this . _addClass ( focused , null , "ui-state-active" ) ; if ( this . options . role ) { this . element . attr ( "aria-activedescendant" , focused . attr ( "id" ) ) ; }
activeParent = this . active . parent ( ) . closest ( ".ui-menu-item" ) . children ( ".ui-menu-item-wrapper" ) ; this . _addClass ( activeParent , null , "ui-state-active" ) ; if ( event && event . type === "keydown" ) { this . _close ( ) ; } else { this . timer = this . _delay ( function ( ) { this . _close ( ) ; } , this . delay ) ; }
nested = item . children ( ".ui-menu" ) ; if ( nested . length && event && ( /^mouse/ . test ( event . type ) ) ) { this . _startOpening ( nested ) ; }
this . activeMenu = item . parent ( ) ; this . _trigger ( "focus" , event , { item : item } ) ; } , _scrollIntoView : function ( item ) { var borderTop , paddingTop , offset , scroll , elementHeight , itemHeight ; if ( this . _hasScroll ( ) ) { borderTop = parseFloat ( $ . css ( this . activeMenu [ 0 ] , "borderTopWidth" ) ) || 0 ; paddingTop = parseFloat ( $ . css ( this . activeMenu [ 0 ] , "paddingTop" ) ) || 0 ; offset = item . offset ( ) . top - this . activeMenu . offset ( ) . top - borderTop - paddingTop ; scroll = this . activeMenu . scrollTop ( ) ; elementHeight = this . activeMenu . height ( ) ; itemHeight = item . outerHeight ( ) ; if ( offset < 0 ) { this . activeMenu . scrollTop ( scroll + offset ) ; } else if ( offset + itemHeight > elementHeight ) { this . activeMenu . scrollTop ( scroll + offset - elementHeight + itemHeight ) ; } } } , blur : function ( event , fromFocus ) { if ( ! fromFocus ) { clearTimeout ( this . timer ) ; }
if ( ! this . active ) { return ; }
this . _removeClass ( this . active . children ( ".ui-menu-item-wrapper" ) , null , "ui-state-active" ) ; this . _trigger ( "blur" , event , { item : this . active } ) ; this . active = null ; } , _startOpening : function ( submenu ) { clearTimeout ( this . timer ) ; if ( submenu . attr ( "aria-hidden" ) !== "true" ) { return ; }
this . timer = this . _delay ( function ( ) { this . _close ( ) ; this . _open ( submenu ) ; } , this . delay ) ; } , _open : function ( submenu ) { var position = $ . extend ( { of : this . active } , this . options . position ) ; clearTimeout ( this . timer ) ; this . element . find ( ".ui-menu" ) . not ( submenu . parents ( ".ui-menu" ) ) . hide ( ) . attr ( "aria-hidden" , "true" ) ; submenu . show ( ) . removeAttr ( "aria-hidden" ) . attr ( "aria-expanded" , "true" ) . position ( position ) ; } , collapseAll : function ( event , all ) { clearTimeout ( this . timer ) ; this . timer = this . _delay ( function ( ) { var currentMenu = all ? this . element : $ ( event && event . target ) . closest ( this . element . find ( ".ui-menu" ) ) ; if ( ! currentMenu . length ) { currentMenu = this . element ; }
this . _close ( currentMenu ) ; this . blur ( event ) ; this . _removeClass ( currentMenu . find ( ".ui-state-active" ) , null , "ui-state-active" ) ; this . activeMenu = currentMenu ; } , this . delay ) ; } , _close : function ( startMenu ) { if ( ! startMenu ) { startMenu = this . active ? this . active . parent ( ) : this . element ; }
startMenu . find ( ".ui-menu" ) . hide ( ) . attr ( "aria-hidden" , "true" ) . attr ( "aria-expanded" , "false" ) ; } , _closeOnDocumentClick : function ( event ) { return ! $ ( event . target ) . closest ( ".ui-menu" ) . length ; } , _isDivider : function ( item ) { return ! /[^\-\u2014\u2013\s]/ . test ( item . text ( ) ) ; } , collapse : function ( event ) { var newItem = this . active && this . active . parent ( ) . closest ( ".ui-menu-item" , this . element ) ; if ( newItem && newItem . length ) { this . _close ( ) ; this . focus ( event , newItem ) ; } } , expand : function ( event ) { var newItem = this . active && this . active . children ( ".ui-menu " ) . find ( this . options . items ) . first ( ) ; if ( newItem && newItem . length ) { this . _open ( newItem . parent ( ) ) ; this . _delay ( function ( ) { this . focus ( event , newItem ) ; } ) ; } } , next : function ( event ) { this . _move ( "next" , "first" , event ) ; } , previous : function ( event ) { this . _move ( "prev" , "last" , event ) ; } , isFirstItem : function ( ) { return this . active && ! this . active . prevAll ( ".ui-menu-item" ) . length ; } , isLastItem : function ( ) { return this . active && ! this . active . nextAll ( ".ui-menu-item" ) . length ; } , _move : function ( direction , filter , event ) { var next ; if ( this . active ) { if ( direction === "first" || direction === "last" ) { next = this . active
[ direction === "first" ? "prevAll" : "nextAll" ] ( ".ui-menu-item" ) . eq ( - 1 ) ; } else { next = this . active
[ direction + "All" ] ( ".ui-menu-item" ) . eq ( 0 ) ; } }
if ( ! next || ! next . length || ! this . active ) { next = this . activeMenu . find ( this . options . items ) [ filter ] ( ) ; }
this . focus ( event , next ) ; } , nextPage : function ( event ) { var item , base , height ; if ( ! this . active ) { this . next ( event ) ; return ; }
if ( this . isLastItem ( ) ) { return ; }
if ( this . _hasScroll ( ) ) { base = this . active . offset ( ) . top ; height = this . element . height ( ) ; this . active . nextAll ( ".ui-menu-item" ) . each ( function ( ) { item = $ ( this ) ; return item . offset ( ) . top - base - height < 0 ; } ) ; this . focus ( event , item ) ; } else { this . focus ( event , this . activeMenu . find ( this . options . items )
[ ! this . active ? "first" : "last" ] ( ) ) ; } } , previousPage : function ( event ) { var item , base , height ; if ( ! this . active ) { this . next ( event ) ; return ; }
if ( this . isFirstItem ( ) ) { return ; }
if ( this . _hasScroll ( ) ) { base = this . active . offset ( ) . top ; height = this . element . height ( ) ; this . active . prevAll ( ".ui-menu-item" ) . each ( function ( ) { item = $ ( this ) ; return item . offset ( ) . top - base + height > 0 ; } ) ; this . focus ( event , item ) ; } else { this . focus ( event , this . activeMenu . find ( this . options . items ) . first ( ) ) ; } } , _hasScroll : function ( ) { return this . element . outerHeight ( ) < this . element . prop ( "scrollHeight" ) ; } , select : function ( event ) { this . active = this . active || $ ( event . target ) . closest ( ".ui-menu-item" ) ; var ui = { item : this . active } ; if ( ! this . active . has ( ".ui-menu" ) . length ) { this . collapseAll ( event , true ) ; }
this . _trigger ( "select" , event , ui ) ; } , _filterMenuItems : function ( character ) { var escapedCharacter = character . replace ( /[\-\[\]{}()*+?.,\\\^$|#\s]/g , "\\$&" ) , regex = new RegExp ( "^" + escapedCharacter , "i" ) ; return this . activeMenu . find ( this . options . items )
. filter ( ".ui-menu-item" ) . filter ( function ( ) { return regex . test ( $ . trim ( $ ( this ) . children ( ".ui-menu-item-wrapper" ) . text ( ) ) ) ; } ) ; } } ) ; / * !
* jQuery UI Autocomplete 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.autocomplete" , { version : "1.12.1" , defaultElement : "<input>" , options : { appendTo : null , autoFocus : false , delay : 300 , minLength : 1 , position : { my : "left top" , at : "left bottom" , collision : "none" } , source : null , change : null , close : null , focus : null , open : null , response : null , search : null , select : null } , requestIndex : 0 , pending : 0 , _create : function ( ) { var suppressKeyPress , suppressKeyPressRepeat , suppressInput , nodeName = this . element [ 0 ] . nodeName . toLowerCase ( ) , isTextarea = nodeName === "textarea" , isInput = nodeName === "input" ; this . isMultiLine = isTextarea || ! isInput && this . _isContentEditable ( this . element ) ; this . valueMethod = this . element [ isTextarea || isInput ? "val" : "text" ] ; this . isNewMenu = true ; this . _addClass ( "ui-autocomplete-input" ) ; this . element . attr ( "autocomplete" , "off" ) ; this . _on ( this . element , { keydown : function ( event ) { if ( this . element . prop ( "readOnly" ) ) { suppressKeyPress = true ; suppressInput = true ; suppressKeyPressRepeat = true ; return ; }
suppressKeyPress = false ; suppressInput = false ; suppressKeyPressRepeat = false ; var keyCode = $ . ui . keyCode ; switch ( event . keyCode ) { case keyCode . PAGE _UP : suppressKeyPress = true ; this . _move ( "previousPage" , event ) ; break ; case keyCode . PAGE _DOWN : suppressKeyPress = true ; this . _move ( "nextPage" , event ) ; break ; case keyCode . UP : suppressKeyPress = true ; this . _keyEvent ( "previous" , event ) ; break ; case keyCode . DOWN : suppressKeyPress = true ; this . _keyEvent ( "next" , event ) ; break ; case keyCode . ENTER : if ( this . menu . active ) { suppressKeyPress = true ; event . preventDefault ( ) ; this . menu . select ( event ) ; }
break ; case keyCode . TAB : if ( this . menu . active ) { this . menu . select ( event ) ; }
break ; case keyCode . ESCAPE : if ( this . menu . element . is ( ":visible" ) ) { if ( ! this . isMultiLine ) { this . _value ( this . term ) ; }
this . close ( event ) ; event . preventDefault ( ) ; }
break ; default : suppressKeyPressRepeat = true ; this . _searchTimeout ( event ) ; break ; } } , keypress : function ( event ) { if ( suppressKeyPress ) { suppressKeyPress = false ; if ( ! this . isMultiLine || this . menu . element . is ( ":visible" ) ) { event . preventDefault ( ) ; }
return ; }
if ( suppressKeyPressRepeat ) { return ; }
var keyCode = $ . ui . keyCode ; switch ( event . keyCode ) { case keyCode . PAGE _UP : this . _move ( "previousPage" , event ) ; break ; case keyCode . PAGE _DOWN : this . _move ( "nextPage" , event ) ; break ; case keyCode . UP : this . _keyEvent ( "previous" , event ) ; break ; case keyCode . DOWN : this . _keyEvent ( "next" , event ) ; break ; } } , input : function ( event ) { if ( suppressInput ) { suppressInput = false ; event . preventDefault ( ) ; return ; }
this . _searchTimeout ( event ) ; } , focus : function ( ) { this . selectedItem = null ; this . previous = this . _value ( ) ; } , blur : function ( event ) { if ( this . cancelBlur ) { delete this . cancelBlur ; return ; }
clearTimeout ( this . searching ) ; this . close ( event ) ; this . _change ( event ) ; } } ) ; this . _initSource ( ) ; this . menu = $ ( "<ul>" ) . appendTo ( this . _appendTo ( ) ) . menu ( { role : null } ) . hide ( ) . menu ( "instance" ) ; this . _addClass ( this . menu . element , "ui-autocomplete" , "ui-front" ) ; this . _on ( this . menu . element , { mousedown : function ( event ) { event . preventDefault ( ) ; this . cancelBlur = true ; this . _delay ( function ( ) { delete this . cancelBlur ; if ( this . element [ 0 ] !== $ . ui . safeActiveElement ( this . document [ 0 ] ) ) { this . element . trigger ( "focus" ) ; } } ) ; } , menufocus : function ( event , ui ) { var label , item ; if ( this . isNewMenu ) { this . isNewMenu = false ; if ( event . originalEvent && /^mouse/ . test ( event . originalEvent . type ) ) { this . menu . blur ( ) ; this . document . one ( "mousemove" , function ( ) { $ ( event . target ) . trigger ( event . originalEvent ) ; } ) ; return ; } }
item = ui . item . data ( "ui-autocomplete-item" ) ; if ( false !== this . _trigger ( "focus" , event , { item : item } ) ) { if ( event . originalEvent && /^key/ . test ( event . originalEvent . type ) ) { this . _value ( item . value ) ; } }
label = ui . item . attr ( "aria-label" ) || item . value ; if ( label && $ . trim ( label ) . length ) { this . liveRegion . children ( ) . hide ( ) ; $ ( "<div>" ) . text ( label ) . appendTo ( this . liveRegion ) ; } } , menuselect : function ( event , ui ) { var item = ui . item . data ( "ui-autocomplete-item" ) , previous = this . previous ; if ( this . element [ 0 ] !== $ . ui . safeActiveElement ( this . document [ 0 ] ) ) { this . element . trigger ( "focus" ) ; this . previous = previous ; this . _delay ( function ( ) { this . previous = previous ; this . selectedItem = item ; } ) ; }
if ( false !== this . _trigger ( "select" , event , { item : item } ) ) { this . _value ( item . value ) ; }
this . term = this . _value ( ) ; this . close ( event ) ; this . selectedItem = item ; } } ) ; this . liveRegion = $ ( "<div>" , { role : "status" , "aria-live" : "assertive" , "aria-relevant" : "additions" } ) . appendTo ( this . document [ 0 ] . body ) ; this . _addClass ( this . liveRegion , null , "ui-helper-hidden-accessible" ) ; this . _on ( this . window , { beforeunload : function ( ) { this . element . removeAttr ( "autocomplete" ) ; } } ) ; } , _destroy : function ( ) { clearTimeout ( this . searching ) ; this . element . removeAttr ( "autocomplete" ) ; this . menu . element . remove ( ) ; this . liveRegion . remove ( ) ; } , _setOption : function ( key , value ) { this . _super ( key , value ) ; if ( key === "source" ) { this . _initSource ( ) ; }
if ( key === "appendTo" ) { this . menu . element . appendTo ( this . _appendTo ( ) ) ; }
if ( key === "disabled" && value && this . xhr ) { this . xhr . abort ( ) ; } } , _isEventTargetInWidget : function ( event ) { var menuElement = this . menu . element [ 0 ] ; return event . target === this . element [ 0 ] || event . target === menuElement || $ . contains ( menuElement , event . target ) ; } , _closeOnClickOutside : function ( event ) { if ( ! this . _isEventTargetInWidget ( event ) ) { this . close ( ) ; } } , _appendTo : function ( ) { var element = this . options . appendTo ; if ( element ) { element = element . jquery || element . nodeType ? $ ( element ) : this . document . find ( element ) . eq ( 0 ) ; }
if ( ! element || ! element [ 0 ] ) { element = this . element . closest ( ".ui-front, dialog" ) ; }
if ( ! element . length ) { element = this . document [ 0 ] . body ; }
return element ; } , _initSource : function ( ) { var array , url , that = this ; if ( $ . isArray ( this . options . source ) ) { array = this . options . source ; this . source = function ( request , response ) { response ( $ . ui . autocomplete . filter ( array , request . term ) ) ; } ; } else if ( typeof this . options . source === "string" ) { url = this . options . source ; this . source = function ( request , response ) { if ( that . xhr ) { that . xhr . abort ( ) ; }
that . xhr = $ . ajax ( { url : url , data : request , dataType : "json" , success : function ( data ) { response ( data ) ; } , error : function ( ) { response ( [ ] ) ; } } ) ; } ; } else { this . source = this . options . source ; } } , _searchTimeout : function ( event ) { clearTimeout ( this . searching ) ; this . searching = this . _delay ( function ( ) { var equalValues = this . term === this . _value ( ) , menuVisible = this . menu . element . is ( ":visible" ) , modifierKey = event . altKey || event . ctrlKey || event . metaKey || event . shiftKey ; if ( ! equalValues || ( equalValues && ! menuVisible && ! modifierKey ) ) { this . selectedItem = null ; this . search ( null , event ) ; } } , this . options . delay ) ; } , search : function ( value , event ) { value = value != null ? value : this . _value ( ) ; this . term = this . _value ( ) ; if ( value . length < this . options . minLength ) { return this . close ( event ) ; }
if ( this . _trigger ( "search" , event ) === false ) { return ; }
return this . _search ( value ) ; } , _search : function ( value ) { this . pending ++ ; this . _addClass ( "ui-autocomplete-loading" ) ; this . cancelSearch = false ; this . source ( { term : value } , this . _response ( ) ) ; } , _response : function ( ) { var index = ++ this . requestIndex ; return $ . proxy ( function ( content ) { if ( index === this . requestIndex ) { this . _ _response ( content ) ; }
this . pending -- ; if ( ! this . pending ) { this . _removeClass ( "ui-autocomplete-loading" ) ; } } , this ) ; } , _ _response : function ( content ) { if ( content ) { content = this . _normalize ( content ) ; }
this . _trigger ( "response" , null , { content : content } ) ; if ( ! this . options . disabled && content && content . length && ! this . cancelSearch ) { this . _suggest ( content ) ; this . _trigger ( "open" ) ; } else { this . _close ( ) ; } } , close : function ( event ) { this . cancelSearch = true ; this . _close ( event ) ; } , _close : function ( event ) { this . _off ( this . document , "mousedown" ) ; if ( this . menu . element . is ( ":visible" ) ) { this . menu . element . hide ( ) ; this . menu . blur ( ) ; this . isNewMenu = true ; this . _trigger ( "close" , event ) ; } } , _change : function ( event ) { if ( this . previous !== this . _value ( ) ) { this . _trigger ( "change" , event , { item : this . selectedItem } ) ; } } , _normalize : function ( items ) { if ( items . length && items [ 0 ] . label && items [ 0 ] . value ) { return items ; }
return $ . map ( items , function ( item ) { if ( typeof item === "string" ) { return { label : item , value : item } ; }
return $ . extend ( { } , item , { label : item . label || item . value , value : item . value || item . label } ) ; } ) ; } , _suggest : function ( items ) { var ul = this . menu . element . empty ( ) ; this . _renderMenu ( ul , items ) ; this . isNewMenu = true ; this . menu . refresh ( ) ; ul . show ( ) ; this . _resizeMenu ( ) ; ul . position ( $ . extend ( { of : this . element } , this . options . position ) ) ; if ( this . options . autoFocus ) { this . menu . next ( ) ; }
this . _on ( this . document , { mousedown : "_closeOnClickOutside" } ) ; } , _resizeMenu : function ( ) { var ul = this . menu . element ; ul . outerWidth ( Math . max ( ul . width ( "" ) . outerWidth ( ) + 1 , this . element . outerWidth ( ) ) ) ; } , _renderMenu : function ( ul , items ) { var that = this ; $ . each ( items , function ( index , item ) { that . _renderItemData ( ul , item ) ; } ) ; } , _renderItemData : function ( ul , item ) { return this . _renderItem ( ul , item ) . data ( "ui-autocomplete-item" , item ) ; } , _renderItem : function ( ul , item ) { return $ ( "<li>" ) . append ( $ ( "<div>" ) . text ( item . label ) ) . appendTo ( ul ) ; } , _move : function ( direction , event ) { if ( ! this . menu . element . is ( ":visible" ) ) { this . search ( null , event ) ; return ; }
if ( this . menu . isFirstItem ( ) && /^previous/ . test ( direction ) || this . menu . isLastItem ( ) && /^next/ . test ( direction ) ) { if ( ! this . isMultiLine ) { this . _value ( this . term ) ; }
this . menu . blur ( ) ; return ; }
this . menu [ direction ] ( event ) ; } , widget : function ( ) { return this . menu . element ; } , _value : function ( ) { return this . valueMethod . apply ( this . element , arguments ) ; } , _keyEvent : function ( keyEvent , event ) { if ( ! this . isMultiLine || this . menu . element . is ( ":visible" ) ) { this . _move ( keyEvent , event ) ; event . preventDefault ( ) ; } } , _isContentEditable : function ( element ) { if ( ! element . length ) { return false ; }
var editable = element . prop ( "contentEditable" ) ; if ( editable === "inherit" ) { return this . _isContentEditable ( element . parent ( ) ) ; }
return editable === "true" ; } } ) ; $ . extend ( $ . ui . autocomplete , { escapeRegex : function ( value ) { return value . replace ( /[\-\[\]{}()*+?.,\\\^$|#\s]/g , "\\$&" ) ; } , filter : function ( array , term ) { var matcher = new RegExp ( $ . ui . autocomplete . escapeRegex ( term ) , "i" ) ; return $ . grep ( array , function ( value ) { return matcher . test ( value . label || value . value || value ) ; } ) ; } } ) ; $ . widget ( "ui.autocomplete" , $ . ui . autocomplete , { options : { messages : { noResults : "No search results." , results : function ( amount ) { return amount + ( amount > 1 ? " results are" : " result is" ) +
" available, use up and down arrow keys to navigate." ; } } } , _ _response : function ( content ) { var message ; this . _superApply ( arguments ) ; if ( this . options . disabled || this . cancelSearch ) { return ; }
if ( content && content . length ) { message = this . options . messages . results ( content . length ) ; } else { message = this . options . messages . noResults ; }
this . liveRegion . children ( ) . hide ( ) ; $ ( "<div>" ) . text ( message ) . appendTo ( this . liveRegion ) ; } } ) ; var widgetsAutocomplete = $ . ui . autocomplete ; / * !
* jQuery UI Controlgroup 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g ; var widgetsControlgroup = $ . widget ( "ui.controlgroup" , { version : "1.12.1" , defaultElement : "<div>" , options : { direction : "horizontal" , disabled : null , onlyVisible : true , items : { "button" : "input[type=button], input[type=submit], input[type=reset], button, a" , "controlgroupLabel" : ".ui-controlgroup-label" , "checkboxradio" : "input[type='checkbox'], input[type='radio']" , "selectmenu" : "select" , "spinner" : ".ui-spinner-input" } } , _create : function ( ) { this . _enhance ( ) ; } , _enhance : function ( ) { this . element . attr ( "role" , "toolbar" ) ; this . refresh ( ) ; } , _destroy : function ( ) { this . _callChildMethod ( "destroy" ) ; this . childWidgets . removeData ( "ui-controlgroup-data" ) ; this . element . removeAttr ( "role" ) ; if ( this . options . items . controlgroupLabel ) { this . element . find ( this . options . items . controlgroupLabel ) . find ( ".ui-controlgroup-label-contents" ) . contents ( ) . unwrap ( ) ; } } , _initWidgets : function ( ) { var that = this , childWidgets = [ ] ; $ . each ( this . options . items , function ( widget , selector ) { var labels ; var options = { } ; if ( ! selector ) { return ; }
if ( widget === "controlgroupLabel" ) { labels = that . element . find ( selector ) ; labels . each ( function ( ) { var element = $ ( this ) ; if ( element . children ( ".ui-controlgroup-label-contents" ) . length ) { return ; }
element . contents ( ) . wrapAll ( "<span class='ui-controlgroup-label-contents'></span>" ) ; } ) ; that . _addClass ( labels , null , "ui-widget ui-widget-content ui-state-default" ) ; childWidgets = childWidgets . concat ( labels . get ( ) ) ; return ; }
if ( ! $ . fn [ widget ] ) { return ; }
if ( that [ "_" + widget + "Options" ] ) { options = that [ "_" + widget + "Options" ] ( "middle" ) ; } else { options = { classes : { } } ; }
that . element . find ( selector ) . each ( function ( ) { var element = $ ( this ) ; var instance = element [ widget ] ( "instance" ) ; var instanceOptions = $ . widget . extend ( { } , options ) ; if ( widget === "button" && element . parent ( ".ui-spinner" ) . length ) { return ; }
if ( ! instance ) { instance = element [ widget ] ( ) [ widget ] ( "instance" ) ; }
if ( instance ) { instanceOptions . classes = that . _resolveClassesValues ( instanceOptions . classes , instance ) ; }
element [ widget ] ( instanceOptions ) ; var widgetElement = element [ widget ] ( "widget" ) ; $ . data ( widgetElement [ 0 ] , "ui-controlgroup-data" , instance ? instance : element [ widget ] ( "instance" ) ) ; childWidgets . push ( widgetElement [ 0 ] ) ; } ) ; } ) ; this . childWidgets = $ ( $ . unique ( childWidgets ) ) ; this . _addClass ( this . childWidgets , "ui-controlgroup-item" ) ; } , _callChildMethod : function ( method ) { this . childWidgets . each ( function ( ) { var element = $ ( this ) , data = element . data ( "ui-controlgroup-data" ) ; if ( data && data [ method ] ) { data [ method ] ( ) ; } } ) ; } , _updateCornerClass : function ( element , position ) { var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all" ; var add = this . _buildSimpleOptions ( position , "label" ) . classes . label ; this . _removeClass ( element , null , remove ) ; this . _addClass ( element , null , add ) ; } , _buildSimpleOptions : function ( position , key ) { var direction = this . options . direction === "vertical" ; var result = { classes : { } } ; result . classes [ key ] = { "middle" : "" , "first" : "ui-corner-" + ( direction ? "top" : "left" ) , "last" : "ui-corner-" + ( direction ? "bottom" : "right" ) , "only" : "ui-corner-all" } [ position ] ; return result ; } , _spinnerOptions : function ( position ) { var options = this . _buildSimpleOptions ( position , "ui-spinner" ) ; options . classes [ "ui-spinner-up" ] = "" ; options . classes [ "ui-spinner-down" ] = "" ; return options ; } , _buttonOptions : function ( position ) { return this . _buildSimpleOptions ( position , "ui-button" ) ; } , _checkboxradioOptions : function ( position ) { return this . _buildSimpleOptions ( position , "ui-checkboxradio-label" ) ; } , _selectmenuOptions : function ( position ) { var direction = this . options . direction === "vertical" ; return { width : direction ? "auto" : false , classes : { middle : { "ui-selectmenu-button-open" : "" , "ui-selectmenu-button-closed" : "" } , first : { "ui-selectmenu-button-open" : "ui-corner-" + ( direction ? "top" : "tl" ) , "ui-selectmenu-button-closed" : "ui-corner-" + ( direction ? "top" : "left" ) } , last : { "ui-selectmenu-button-open" : direction ? "" : "ui-corner-tr" , "ui-selectmenu-button-closed" : "ui-corner-" + ( direction ? "bottom" : "right" ) } , only : { "ui-selectmenu-button-open" : "ui-corner-top" , "ui-selectmenu-button-closed" : "ui-corner-all" } } [ position ] } ; } , _resolveClassesValues : function ( classes , instance ) { var result = { } ; $ . each ( classes , function ( key ) { var current = instance . options . classes [ key ] || "" ; current = $ . trim ( current . replace ( controlgroupCornerRegex , "" ) ) ; result [ key ] = ( current + " " + classes [ key ] ) . replace ( /\s+/g , " " ) ; } ) ; return result ; } , _setOption : function ( key , value ) { if ( key === "direction" ) { this . _removeClass ( "ui-controlgroup-" + this . options . direction ) ; }
this . _super ( key , value ) ; if ( key === "disabled" ) { this . _callChildMethod ( value ? "disable" : "enable" ) ; return ; }
this . refresh ( ) ; } , refresh : function ( ) { var children , that = this ; this . _addClass ( "ui-controlgroup ui-controlgroup-" + this . options . direction ) ; if ( this . options . direction === "horizontal" ) { this . _addClass ( null , "ui-helper-clearfix" ) ; }
this . _initWidgets ( ) ; children = this . childWidgets ; if ( this . options . onlyVisible ) { children = children . filter ( ":visible" ) ; }
if ( children . length ) { $ . each ( [ "first" , "last" ] , function ( index , value ) { var instance = children [ value ] ( ) . data ( "ui-controlgroup-data" ) ; if ( instance && that [ "_" + instance . widgetName + "Options" ] ) { var options = that [ "_" + instance . widgetName + "Options" ] ( children . length === 1 ? "only" : value ) ; options . classes = that . _resolveClassesValues ( options . classes , instance ) ; instance . element [ instance . widgetName ] ( options ) ; } else { that . _updateCornerClass ( children [ value ] ( ) , value ) ; } } ) ; this . _callChildMethod ( "refresh" ) ; } } } ) ; / * !
* jQuery UI Checkboxradio 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.checkboxradio" , [ $ . ui . formResetMixin , { version : "1.12.1" , options : { disabled : null , label : null , icon : true , classes : { "ui-checkboxradio-label" : "ui-corner-all" , "ui-checkboxradio-icon" : "ui-corner-all" } } , _getCreateOptions : function ( ) { var disabled , labels ; var that = this ; var options = this . _super ( ) || { } ; this . _readType ( ) ; labels = this . element . labels ( ) ; this . label = $ ( labels [ labels . length - 1 ] ) ; if ( ! this . label . length ) { $ . error ( "No label found for checkboxradio widget" ) ; }
this . originalLabel = "" ; this . label . contents ( ) . not ( this . element [ 0 ] ) . each ( function ( ) { that . originalLabel += this . nodeType === 3 ? $ ( this ) . text ( ) : this . outerHTML ; } ) ; if ( this . originalLabel ) { options . label = this . originalLabel ; }
disabled = this . element [ 0 ] . disabled ; if ( disabled != null ) { options . disabled = disabled ; }
return options ; } , _create : function ( ) { var checked = this . element [ 0 ] . checked ; this . _bindFormResetHandler ( ) ; if ( this . options . disabled == null ) { this . options . disabled = this . element [ 0 ] . disabled ; }
this . _setOption ( "disabled" , this . options . disabled ) ; this . _addClass ( "ui-checkboxradio" , "ui-helper-hidden-accessible" ) ; this . _addClass ( this . label , "ui-checkboxradio-label" , "ui-button ui-widget" ) ; if ( this . type === "radio" ) { this . _addClass ( this . label , "ui-checkboxradio-radio-label" ) ; }
if ( this . options . label && this . options . label !== this . originalLabel ) { this . _updateLabel ( ) ; } else if ( this . originalLabel ) { this . options . label = this . originalLabel ; }
this . _enhance ( ) ; if ( checked ) { this . _addClass ( this . label , "ui-checkboxradio-checked" , "ui-state-active" ) ; if ( this . icon ) { this . _addClass ( this . icon , null , "ui-state-hover" ) ; } }
this . _on ( { change : "_toggleClasses" , focus : function ( ) { this . _addClass ( this . label , null , "ui-state-focus ui-visual-focus" ) ; } , blur : function ( ) { this . _removeClass ( this . label , null , "ui-state-focus ui-visual-focus" ) ; } } ) ; } , _readType : function ( ) { var nodeName = this . element [ 0 ] . nodeName . toLowerCase ( ) ; this . type = this . element [ 0 ] . type ; if ( nodeName !== "input" || ! /radio|checkbox/ . test ( this . type ) ) { $ . error ( "Can't create checkboxradio on element.nodeName=" + nodeName +
" and element.type=" + this . type ) ; } } , _enhance : function ( ) { this . _updateIcon ( this . element [ 0 ] . checked ) ; } , widget : function ( ) { return this . label ; } , _getRadioGroup : function ( ) { var group ; var name = this . element [ 0 ] . name ; var nameSelector = "input[name='" + $ . ui . escapeSelector ( name ) + "']" ; if ( ! name ) { return $ ( [ ] ) ; }
if ( this . form . length ) { group = $ ( this . form [ 0 ] . elements ) . filter ( nameSelector ) ; } else { group = $ ( nameSelector ) . filter ( function ( ) { return $ ( this ) . form ( ) . length === 0 ; } ) ; }
return group . not ( this . element ) ; } , _toggleClasses : function ( ) { var checked = this . element [ 0 ] . checked ; this . _toggleClass ( this . label , "ui-checkboxradio-checked" , "ui-state-active" , checked ) ; if ( this . options . icon && this . type === "checkbox" ) { this . _toggleClass ( this . icon , null , "ui-icon-check ui-state-checked" , checked ) . _toggleClass ( this . icon , null , "ui-icon-blank" , ! checked ) ; }
if ( this . type === "radio" ) { this . _getRadioGroup ( ) . each ( function ( ) { var instance = $ ( this ) . checkboxradio ( "instance" ) ; if ( instance ) { instance . _removeClass ( instance . label , "ui-checkboxradio-checked" , "ui-state-active" ) ; } } ) ; } } , _destroy : function ( ) { this . _unbindFormResetHandler ( ) ; if ( this . icon ) { this . icon . remove ( ) ; this . iconSpace . remove ( ) ; } } , _setOption : function ( key , value ) { if ( key === "label" && ! value ) { return ; }
this . _super ( key , value ) ; if ( key === "disabled" ) { this . _toggleClass ( this . label , null , "ui-state-disabled" , value ) ; this . element [ 0 ] . disabled = value ; return ; }
this . refresh ( ) ; } , _updateIcon : function ( checked ) { var toAdd = "ui-icon ui-icon-background " ; if ( this . options . icon ) { if ( ! this . icon ) { this . icon = $ ( "<span>" ) ; this . iconSpace = $ ( "<span> </span>" ) ; this . _addClass ( this . iconSpace , "ui-checkboxradio-icon-space" ) ; }
if ( this . type === "checkbox" ) { toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank" ; this . _removeClass ( this . icon , null , checked ? "ui-icon-blank" : "ui-icon-check" ) ; } else { toAdd += "ui-icon-blank" ; }
this . _addClass ( this . icon , "ui-checkboxradio-icon" , toAdd ) ; if ( ! checked ) { this . _removeClass ( this . icon , null , "ui-icon-check ui-state-checked" ) ; }
this . icon . prependTo ( this . label ) . after ( this . iconSpace ) ; } else if ( this . icon !== undefined ) { this . icon . remove ( ) ; this . iconSpace . remove ( ) ; delete this . icon ; } } , _updateLabel : function ( ) { var contents = this . label . contents ( ) . not ( this . element [ 0 ] ) ; if ( this . icon ) { contents = contents . not ( this . icon [ 0 ] ) ; }
if ( this . iconSpace ) { contents = contents . not ( this . iconSpace [ 0 ] ) ; }
contents . remove ( ) ; this . label . append ( this . options . label ) ; } , refresh : function ( ) { var checked = this . element [ 0 ] . checked , isDisabled = this . element [ 0 ] . disabled ; this . _updateIcon ( checked ) ; this . _toggleClass ( this . label , "ui-checkboxradio-checked" , "ui-state-active" , checked ) ; if ( this . options . label !== null ) { this . _updateLabel ( ) ; }
if ( isDisabled !== this . options . disabled ) { this . _setOptions ( { "disabled" : isDisabled } ) ; } } } ] ) ; var widgetsCheckboxradio = $ . ui . checkboxradio ; / * !
* jQuery UI Button 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.button" , { version : "1.12.1" , defaultElement : "<button>" , options : { classes : { "ui-button" : "ui-corner-all" } , disabled : null , icon : null , iconPosition : "beginning" , label : null , showLabel : true } , _getCreateOptions : function ( ) { var disabled , options = this . _super ( ) || { } ; this . isInput = this . element . is ( "input" ) ; disabled = this . element [ 0 ] . disabled ; if ( disabled != null ) { options . disabled = disabled ; }
this . originalLabel = this . isInput ? this . element . val ( ) : this . element . html ( ) ; if ( this . originalLabel ) { options . label = this . originalLabel ; }
return options ; } , _create : function ( ) { if ( ! this . option . showLabel & ! this . options . icon ) { this . options . showLabel = true ; }
if ( this . options . disabled == null ) { this . options . disabled = this . element [ 0 ] . disabled || false ; }
this . hasTitle = ! ! this . element . attr ( "title" ) ; if ( this . options . label && this . options . label !== this . originalLabel ) { if ( this . isInput ) { this . element . val ( this . options . label ) ; } else { this . element . html ( this . options . label ) ; } }
this . _addClass ( "ui-button" , "ui-widget" ) ; this . _setOption ( "disabled" , this . options . disabled ) ; this . _enhance ( ) ; if ( this . element . is ( "a" ) ) { this . _on ( { "keyup" : function ( event ) { if ( event . keyCode === $ . ui . keyCode . SPACE ) { event . preventDefault ( ) ; if ( this . element [ 0 ] . click ) { this . element [ 0 ] . click ( ) ; } else { this . element . trigger ( "click" ) ; } } } } ) ; } } , _enhance : function ( ) { if ( ! this . element . is ( "button" ) ) { this . element . attr ( "role" , "button" ) ; }
if ( this . options . icon ) { this . _updateIcon ( "icon" , this . options . icon ) ; this . _updateTooltip ( ) ; } } , _updateTooltip : function ( ) { this . title = this . element . attr ( "title" ) ; if ( ! this . options . showLabel && ! this . title ) { this . element . attr ( "title" , this . options . label ) ; } } , _updateIcon : function ( option , value ) { var icon = option !== "iconPosition" , position = icon ? this . options . iconPosition : value , displayBlock = position === "top" || position === "bottom" ; if ( ! this . icon ) { this . icon = $ ( "<span>" ) ; this . _addClass ( this . icon , "ui-button-icon" , "ui-icon" ) ; if ( ! this . options . showLabel ) { this . _addClass ( "ui-button-icon-only" ) ; } } else if ( icon ) { this . _removeClass ( this . icon , null , this . options . icon ) ; }
if ( icon ) { this . _addClass ( this . icon , null , value ) ; }
this . _attachIcon ( position ) ; if ( displayBlock ) { this . _addClass ( this . icon , null , "ui-widget-icon-block" ) ; if ( this . iconSpace ) { this . iconSpace . remove ( ) ; } } else { if ( ! this . iconSpace ) { this . iconSpace = $ ( "<span> </span>" ) ; this . _addClass ( this . iconSpace , "ui-button-icon-space" ) ; }
this . _removeClass ( this . icon , null , "ui-wiget-icon-block" ) ; this . _attachIconSpace ( position ) ; } } , _destroy : function ( ) { this . element . removeAttr ( "role" ) ; if ( this . icon ) { this . icon . remove ( ) ; }
if ( this . iconSpace ) { this . iconSpace . remove ( ) ; }
if ( ! this . hasTitle ) { this . element . removeAttr ( "title" ) ; } } , _attachIconSpace : function ( iconPosition ) { this . icon [ /^(?:end|bottom)/ . test ( iconPosition ) ? "before" : "after" ] ( this . iconSpace ) ; } , _attachIcon : function ( iconPosition ) { this . element [ /^(?:end|bottom)/ . test ( iconPosition ) ? "append" : "prepend" ] ( this . icon ) ; } , _setOptions : function ( options ) { var newShowLabel = options . showLabel === undefined ? this . options . showLabel : options . showLabel , newIcon = options . icon === undefined ? this . options . icon : options . icon ; if ( ! newShowLabel && ! newIcon ) { options . showLabel = true ; }
this . _super ( options ) ; } , _setOption : function ( key , value ) { if ( key === "icon" ) { if ( value ) { this . _updateIcon ( key , value ) ; } else if ( this . icon ) { this . icon . remove ( ) ; if ( this . iconSpace ) { this . iconSpace . remove ( ) ; } } }
if ( key === "iconPosition" ) { this . _updateIcon ( key , value ) ; }
if ( key === "showLabel" ) { this . _toggleClass ( "ui-button-icon-only" , null , ! value ) ; this . _updateTooltip ( ) ; }
if ( key === "label" ) { if ( this . isInput ) { this . element . val ( value ) ; } else { this . element . html ( value ) ; if ( this . icon ) { this . _attachIcon ( this . options . iconPosition ) ; this . _attachIconSpace ( this . options . iconPosition ) ; } } }
this . _super ( key , value ) ; if ( key === "disabled" ) { this . _toggleClass ( null , "ui-state-disabled" , value ) ; this . element [ 0 ] . disabled = value ; if ( value ) { this . element . blur ( ) ; } } } , refresh : function ( ) { var isDisabled = this . element . is ( "input, button" ) ? this . element [ 0 ] . disabled : this . element . hasClass ( "ui-button-disabled" ) ; if ( isDisabled !== this . options . disabled ) { this . _setOptions ( { disabled : isDisabled } ) ; }
this . _updateTooltip ( ) ; } } ) ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.button" , $ . ui . button , { options : { text : true , icons : { primary : null , secondary : null } } , _create : function ( ) { if ( this . options . showLabel && ! this . options . text ) { this . options . showLabel = this . options . text ; }
if ( ! this . options . showLabel && this . options . text ) { this . options . text = this . options . showLabel ; }
if ( ! this . options . icon && ( this . options . icons . primary || this . options . icons . secondary ) ) { if ( this . options . icons . primary ) { this . options . icon = this . options . icons . primary ; } else { this . options . icon = this . options . icons . secondary ; this . options . iconPosition = "end" ; } } else if ( this . options . icon ) { this . options . icons . primary = this . options . icon ; }
this . _super ( ) ; } , _setOption : function ( key , value ) { if ( key === "text" ) { this . _super ( "showLabel" , value ) ; return ; }
if ( key === "showLabel" ) { this . options . text = value ; }
if ( key === "icon" ) { this . options . icons . primary = value ; }
if ( key === "icons" ) { if ( value . primary ) { this . _super ( "icon" , value . primary ) ; this . _super ( "iconPosition" , "beginning" ) ; } else if ( value . secondary ) { this . _super ( "icon" , value . secondary ) ; this . _super ( "iconPosition" , "end" ) ; } }
this . _superApply ( arguments ) ; } } ) ; $ . fn . button = ( function ( orig ) { return function ( ) { if ( ! this . length || ( this . length && this [ 0 ] . tagName !== "INPUT" ) || ( this . length && this [ 0 ] . tagName === "INPUT" && ( this . attr ( "type" ) !== "checkbox" && this . attr ( "type" ) !== "radio" ) ) ) { return orig . apply ( this , arguments ) ; }
if ( ! $ . ui . checkboxradio ) { $ . error ( "Checkboxradio widget missing" ) ; }
if ( arguments . length === 0 ) { return this . checkboxradio ( { "icon" : false } ) ; }
return this . checkboxradio . apply ( this , arguments ) ; } ; } ) ( $ . fn . button ) ; $ . fn . buttonset = function ( ) { if ( ! $ . ui . controlgroup ) { $ . error ( "Controlgroup widget missing" ) ; }
if ( arguments [ 0 ] === "option" && arguments [ 1 ] === "items" && arguments [ 2 ] ) { return this . controlgroup . apply ( this , [ arguments [ 0 ] , "items.button" , arguments [ 2 ] ] ) ; }
if ( arguments [ 0 ] === "option" && arguments [ 1 ] === "items" ) { return this . controlgroup . apply ( this , [ arguments [ 0 ] , "items.button" ] ) ; }
if ( typeof arguments [ 0 ] === "object" && arguments [ 0 ] . items ) { arguments [ 0 ] . items = { button : arguments [ 0 ] . items } ; }
return this . controlgroup . apply ( this , arguments ) ; } ; }
var widgetsButton = $ . ui . button ; / * !
* jQuery UI Datepicker 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . extend ( $ . ui , { datepicker : { version : "1.12.1" } } ) ; var datepicker _instActive ; function datepicker _getZindex ( elem ) { var position , value ; while ( elem . length && elem [ 0 ] !== document ) { position = elem . css ( "position" ) ; if ( position === "absolute" || position === "relative" || position === "fixed" ) { value = parseInt ( elem . css ( "zIndex" ) , 10 ) ; if ( ! isNaN ( value ) && value !== 0 ) { return value ; } }
elem = elem . parent ( ) ; }
return 0 ; }
function Datepicker ( ) { this . _curInst = null ; this . _keyEvent = false ; this . _disabledInputs = [ ] ; this . _datepickerShowing = false ; this . _inDialog = false ; this . _mainDivId = "ui-datepicker-div" ; this . _inlineClass = "ui-datepicker-inline" ; this . _appendClass = "ui-datepicker-append" ; this . _triggerClass = "ui-datepicker-trigger" ; this . _dialogClass = "ui-datepicker-dialog" ; this . _disableClass = "ui-datepicker-disabled" ; this . _unselectableClass = "ui-datepicker-unselectable" ; this . _currentClass = "ui-datepicker-current-day" ; this . _dayOverClass = "ui-datepicker-days-cell-over" ; this . regional = [ ] ; this . regional [ "" ] = { closeText : "Done" , prevText : "Prev" , nextText : "Next" , currentText : "Today" , monthNames : [ "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ] , monthNamesShort : [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" ] , dayNames : [ "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ] , dayNamesShort : [ "Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat" ] , dayNamesMin : [ "Su" , "Mo" , "Tu" , "We" , "Th" , "Fr" , "Sa" ] , weekHeader : "Wk" , dateFormat : "mm/dd/yy" , firstDay : 0 , isRTL : false , showMonthAfterYear : false , yearSuffix : "" } ; this . _defaults = { showOn : "focus" , showAnim : "fadeIn" , showOptions : { } , defaultDate : null , appendText : "" , buttonText : "..." , buttonImage : "" , buttonImageOnly : false , hideIfNoPrevNext : false , navigationAsDateFormat : false , gotoCurrent : false , changeMonth : false , changeYear : false , yearRange : "c-10:c+10" , showOtherMonths : false , selectOtherMonths : false , showWeek : false , calculateWeek : this . iso8601Week , shortYearCutoff : "+10" , minDate : null , maxDate : null , duration : "fast" , beforeShowDay : null , beforeShow : null , onSelect : null , onChangeMonthYear : null , onClose : null , numberOfMonths : 1 , showCurrentAtPos : 0 , stepMonths : 1 , stepBigMonths : 12 , altField : "" , altFormat : "" , constrainInput : true , showButtonPanel : false , autoSize : false , disabled : false } ; $ . extend ( this . _defaults , this . regional [ "" ] ) ; this . regional . en = $ . extend ( true , { } , this . regional [ "" ] ) ; this . regional [ "en-US" ] = $ . extend ( true , { } , this . regional . en ) ; this . dpDiv = datepicker _bindHover ( $ ( "<div id='" + this . _mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ; }
$ . extend ( Datepicker . prototype , { markerClassName : "hasDatepicker" , maxRows : 4 , _widgetDatepicker : function ( ) { return this . dpDiv ; } , setDefaults : function ( settings ) { datepicker _extendRemove ( this . _defaults , settings || { } ) ; return this ; } , _attachDatepicker : function ( target , settings ) { var nodeName , inline , inst ; nodeName = target . nodeName . toLowerCase ( ) ; inline = ( nodeName === "div" || nodeName === "span" ) ; if ( ! target . id ) { this . uuid += 1 ; target . id = "dp" + this . uuid ; }
inst = this . _newInst ( $ ( target ) , inline ) ; inst . settings = $ . extend ( { } , settings || { } ) ; if ( nodeName === "input" ) { this . _connectDatepicker ( target , inst ) ; } else if ( inline ) { this . _inlineDatepicker ( target , inst ) ; } } , _newInst : function ( target , inline ) { var id = target [ 0 ] . id . replace ( /([^A-Za-z0-9_\-])/g , "\\\\$1" ) ; return { id : id , input : target , selectedDay : 0 , selectedMonth : 0 , selectedYear : 0 , drawMonth : 0 , drawYear : 0 , inline : inline , dpDiv : ( ! inline ? this . dpDiv : datepicker _bindHover ( $ ( "<div class='" + this . _inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) } ; } , _connectDatepicker : function ( target , inst ) { var input = $ ( target ) ; inst . append = $ ( [ ] ) ; inst . trigger = $ ( [ ] ) ; if ( input . hasClass ( this . markerClassName ) ) { return ; }
this . _attachments ( input , inst ) ; input . addClass ( this . markerClassName ) . on ( "keydown" , this . _doKeyDown ) . on ( "keypress" , this . _doKeyPress ) . on ( "keyup" , this . _doKeyUp ) ; this . _autoSize ( inst ) ; $ . data ( target , "datepicker" , inst ) ; if ( inst . settings . disabled ) { this . _disableDatepicker ( target ) ; } } , _attachments : function ( input , inst ) { var showOn , buttonText , buttonImage , appendText = this . _get ( inst , "appendText" ) , isRTL = this . _get ( inst , "isRTL" ) ; if ( inst . append ) { inst . append . remove ( ) ; }
if ( appendText ) { inst . append = $ ( "<span class='" + this . _appendClass + "'>" + appendText + "</span>" ) ; input [ isRTL ? "before" : "after" ] ( inst . append ) ; }
input . off ( "focus" , this . _showDatepicker ) ; if ( inst . trigger ) { inst . trigger . remove ( ) ; }
showOn = this . _get ( inst , "showOn" ) ; if ( showOn === "focus" || showOn === "both" ) { input . on ( "focus" , this . _showDatepicker ) ; }
if ( showOn === "button" || showOn === "both" ) { buttonText = this . _get ( inst , "buttonText" ) ; buttonImage = this . _get ( inst , "buttonImage" ) ; inst . trigger = $ ( this . _get ( inst , "buttonImageOnly" ) ? $ ( "<img/>" ) . addClass ( this . _triggerClass ) . attr ( { src : buttonImage , alt : buttonText , title : buttonText } ) : $ ( "<button type='button'></button>" ) . addClass ( this . _triggerClass ) . html ( ! buttonImage ? buttonText : $ ( "<img/>" ) . attr ( { src : buttonImage , alt : buttonText , title : buttonText } ) ) ) ; input [ isRTL ? "before" : "after" ] ( inst . trigger ) ; inst . trigger . on ( "click" , function ( ) { if ( $ . datepicker . _datepickerShowing && $ . datepicker . _lastInput === input [ 0 ] ) { $ . datepicker . _hideDatepicker ( ) ; } else if ( $ . datepicker . _datepickerShowing && $ . datepicker . _lastInput !== input [ 0 ] ) { $ . datepicker . _hideDatepicker ( ) ; $ . datepicker . _showDatepicker ( input [ 0 ] ) ; } else { $ . datepicker . _showDatepicker ( input [ 0 ] ) ; }
return false ; } ) ; } } , _autoSize : function ( inst ) { if ( this . _get ( inst , "autoSize" ) && ! inst . inline ) { var findMax , max , maxI , i , date = new Date ( 2009 , 12 - 1 , 20 ) , dateFormat = this . _get ( inst , "dateFormat" ) ; if ( dateFormat . match ( /[DM]/ ) ) { findMax = function ( names ) { max = 0 ; maxI = 0 ; for ( i = 0 ; i < names . length ; i ++ ) { if ( names [ i ] . length > max ) { max = names [ i ] . length ; maxI = i ; } }
return maxI ; } ; date . setMonth ( findMax ( this . _get ( inst , ( dateFormat . match ( /MM/ ) ? "monthNames" : "monthNamesShort" ) ) ) ) ; date . setDate ( findMax ( this . _get ( inst , ( dateFormat . match ( /DD/ ) ? "dayNames" : "dayNamesShort" ) ) ) + 20 - date . getDay ( ) ) ; }
inst . input . attr ( "size" , this . _formatDate ( inst , date ) . length ) ; } } , _inlineDatepicker : function ( target , inst ) { var divSpan = $ ( target ) ; if ( divSpan . hasClass ( this . markerClassName ) ) { return ; }
divSpan . addClass ( this . markerClassName ) . append ( inst . dpDiv ) ; $ . data ( target , "datepicker" , inst ) ; this . _setDate ( inst , this . _getDefaultDate ( inst ) , true ) ; this . _updateDatepicker ( inst ) ; this . _updateAlternate ( inst ) ; if ( inst . settings . disabled ) { this . _disableDatepicker ( target ) ; }
inst . dpDiv . css ( "display" , "block" ) ; } , _dialogDatepicker : function ( input , date , onSelect , settings , pos ) { var id , browserWidth , browserHeight , scrollX , scrollY , inst = this . _dialogInst ; if ( ! inst ) { this . uuid += 1 ; id = "dp" + this . uuid ; this . _dialogInput = $ ( "<input type='text' id='" + id +
"' style='position: absolute; top: -100px; width: 0px;'/>" ) ; this . _dialogInput . on ( "keydown" , this . _doKeyDown ) ; $ ( "body" ) . append ( this . _dialogInput ) ; inst = this . _dialogInst = this . _newInst ( this . _dialogInput , false ) ; inst . settings = { } ; $ . data ( this . _dialogInput [ 0 ] , "datepicker" , inst ) ; }
datepicker _extendRemove ( inst . settings , settings || { } ) ; date = ( date && date . constructor === Date ? this . _formatDate ( inst , date ) : date ) ; this . _dialogInput . val ( date ) ; this . _pos = ( pos ? ( pos . length ? pos : [ pos . pageX , pos . pageY ] ) : null ) ; if ( ! this . _pos ) { browserWidth = document . documentElement . clientWidth ; browserHeight = document . documentElement . clientHeight ; scrollX = document . documentElement . scrollLeft || document . body . scrollLeft ; scrollY = document . documentElement . scrollTop || document . body . scrollTop ; this . _pos = [ ( browserWidth / 2 ) - 100 + scrollX , ( browserHeight / 2 ) - 150 + scrollY ] ; }
this . _dialogInput . css ( "left" , ( this . _pos [ 0 ] + 20 ) + "px" ) . css ( "top" , this . _pos [ 1 ] + "px" ) ; inst . settings . onSelect = onSelect ; this . _inDialog = true ; this . dpDiv . addClass ( this . _dialogClass ) ; this . _showDatepicker ( this . _dialogInput [ 0 ] ) ; if ( $ . blockUI ) { $ . blockUI ( this . dpDiv ) ; }
$ . data ( this . _dialogInput [ 0 ] , "datepicker" , inst ) ; return this ; } , _destroyDatepicker : function ( target ) { var nodeName , $target = $ ( target ) , inst = $ . data ( target , "datepicker" ) ; if ( ! $target . hasClass ( this . markerClassName ) ) { return ; }
nodeName = target . nodeName . toLowerCase ( ) ; $ . removeData ( target , "datepicker" ) ; if ( nodeName === "input" ) { inst . append . remove ( ) ; inst . trigger . remove ( ) ; $target . removeClass ( this . markerClassName ) . off ( "focus" , this . _showDatepicker ) . off ( "keydown" , this . _doKeyDown ) . off ( "keypress" , this . _doKeyPress ) . off ( "keyup" , this . _doKeyUp ) ; } else if ( nodeName === "div" || nodeName === "span" ) { $target . removeClass ( this . markerClassName ) . empty ( ) ; }
if ( datepicker _instActive === inst ) { datepicker _instActive = null ; } } , _enableDatepicker : function ( target ) { var nodeName , inline , $target = $ ( target ) , inst = $ . data ( target , "datepicker" ) ; if ( ! $target . hasClass ( this . markerClassName ) ) { return ; }
nodeName = target . nodeName . toLowerCase ( ) ; if ( nodeName === "input" ) { target . disabled = false ; inst . trigger . filter ( "button" ) . each ( function ( ) { this . disabled = false ; } ) . end ( ) . filter ( "img" ) . css ( { opacity : "1.0" , cursor : "" } ) ; } else if ( nodeName === "div" || nodeName === "span" ) { inline = $target . children ( "." + this . _inlineClass ) ; inline . children ( ) . removeClass ( "ui-state-disabled" ) ; inline . find ( "select.ui-datepicker-month, select.ui-datepicker-year" ) . prop ( "disabled" , false ) ; }
this . _disabledInputs = $ . map ( this . _disabledInputs , function ( value ) { return ( value === target ? null : value ) ; } ) ; } , _disableDatepicker : function ( target ) { var nodeName , inline , $target = $ ( target ) , inst = $ . data ( target , "datepicker" ) ; if ( ! $target . hasClass ( this . markerClassName ) ) { return ; }
nodeName = target . nodeName . toLowerCase ( ) ; if ( nodeName === "input" ) { target . disabled = true ; inst . trigger . filter ( "button" ) . each ( function ( ) { this . disabled = true ; } ) . end ( ) . filter ( "img" ) . css ( { opacity : "0.5" , cursor : "default" } ) ; } else if ( nodeName === "div" || nodeName === "span" ) { inline = $target . children ( "." + this . _inlineClass ) ; inline . children ( ) . addClass ( "ui-state-disabled" ) ; inline . find ( "select.ui-datepicker-month, select.ui-datepicker-year" ) . prop ( "disabled" , true ) ; }
this . _disabledInputs = $ . map ( this . _disabledInputs , function ( value ) { return ( value === target ? null : value ) ; } ) ; this . _disabledInputs [ this . _disabledInputs . length ] = target ; } , _isDisabledDatepicker : function ( target ) { if ( ! target ) { return false ; }
for ( var i = 0 ; i < this . _disabledInputs . length ; i ++ ) { if ( this . _disabledInputs [ i ] === target ) { return true ; } }
return false ; } , _getInst : function ( target ) { try { return $ . data ( target , "datepicker" ) ; }
catch ( err ) { throw "Missing instance data for this datepicker" ; } } , _optionDatepicker : function ( target , name , value ) { var settings , date , minDate , maxDate , inst = this . _getInst ( target ) ; if ( arguments . length === 2 && typeof name === "string" ) { return ( name === "defaults" ? $ . extend ( { } , $ . datepicker . _defaults ) : ( inst ? ( name === "all" ? $ . extend ( { } , inst . settings ) : this . _get ( inst , name ) ) : null ) ) ; }
settings = name || { } ; if ( typeof name === "string" ) { settings = { } ; settings [ name ] = value ; }
if ( inst ) { if ( this . _curInst === inst ) { this . _hideDatepicker ( ) ; }
date = this . _getDateDatepicker ( target , true ) ; minDate = this . _getMinMaxDate ( inst , "min" ) ; maxDate = this . _getMinMaxDate ( inst , "max" ) ; datepicker _extendRemove ( inst . settings , settings ) ; if ( minDate !== null && settings . dateFormat !== undefined && settings . minDate === undefined ) { inst . settings . minDate = this . _formatDate ( inst , minDate ) ; }
if ( maxDate !== null && settings . dateFormat !== undefined && settings . maxDate === undefined ) { inst . settings . maxDate = this . _formatDate ( inst , maxDate ) ; }
if ( "disabled" in settings ) { if ( settings . disabled ) { this . _disableDatepicker ( target ) ; } else { this . _enableDatepicker ( target ) ; } }
this . _attachments ( $ ( target ) , inst ) ; this . _autoSize ( inst ) ; this . _setDate ( inst , date ) ; this . _updateAlternate ( inst ) ; this . _updateDatepicker ( inst ) ; } } , _changeDatepicker : function ( target , name , value ) { this . _optionDatepicker ( target , name , value ) ; } , _refreshDatepicker : function ( target ) { var inst = this . _getInst ( target ) ; if ( inst ) { this . _updateDatepicker ( inst ) ; } } , _setDateDatepicker : function ( target , date ) { var inst = this . _getInst ( target ) ; if ( inst ) { this . _setDate ( inst , date ) ; this . _updateDatepicker ( inst ) ; this . _updateAlternate ( inst ) ; } } , _getDateDatepicker : function ( target , noDefault ) { var inst = this . _getInst ( target ) ; if ( inst && ! inst . inline ) { this . _setDateFromField ( inst , noDefault ) ; }
return ( inst ? this . _getDate ( inst ) : null ) ; } , _doKeyDown : function ( event ) { var onSelect , dateStr , sel , inst = $ . datepicker . _getInst ( event . target ) , handled = true , isRTL = inst . dpDiv . is ( ".ui-datepicker-rtl" ) ; inst . _keyEvent = true ; if ( $ . datepicker . _datepickerShowing ) { switch ( event . keyCode ) { case 9 : $ . datepicker . _hideDatepicker ( ) ; handled = false ; break ; case 13 : sel = $ ( "td." + $ . datepicker . _dayOverClass + ":not(." +
$ . datepicker . _currentClass + ")" , inst . dpDiv ) ; if ( sel [ 0 ] ) { $ . datepicker . _selectDay ( event . target , inst . selectedMonth , inst . selectedYear , sel [ 0 ] ) ; }
onSelect = $ . datepicker . _get ( inst , "onSelect" ) ; if ( onSelect ) { dateStr = $ . datepicker . _formatDate ( inst ) ; onSelect . apply ( ( inst . input ? inst . input [ 0 ] : null ) , [ dateStr , inst ] ) ; } else { $ . datepicker . _hideDatepicker ( ) ; }
return false ; case 27 : $ . datepicker . _hideDatepicker ( ) ; break ; case 33 : $ . datepicker . _adjustDate ( event . target , ( event . ctrlKey ? - $ . datepicker . _get ( inst , "stepBigMonths" ) : - $ . datepicker . _get ( inst , "stepMonths" ) ) , "M" ) ; break ; case 34 : $ . datepicker . _adjustDate ( event . target , ( event . ctrlKey ? + $ . datepicker . _get ( inst , "stepBigMonths" ) : + $ . datepicker . _get ( inst , "stepMonths" ) ) , "M" ) ; break ; case 35 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _clearDate ( event . target ) ; }
handled = event . ctrlKey || event . metaKey ; break ; case 36 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _gotoToday ( event . target ) ; }
handled = event . ctrlKey || event . metaKey ; break ; case 37 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _adjustDate ( event . target , ( isRTL ? + 1 : - 1 ) , "D" ) ; }
handled = event . ctrlKey || event . metaKey ; if ( event . originalEvent . altKey ) { $ . datepicker . _adjustDate ( event . target , ( event . ctrlKey ? - $ . datepicker . _get ( inst , "stepBigMonths" ) : - $ . datepicker . _get ( inst , "stepMonths" ) ) , "M" ) ; }
break ; case 38 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _adjustDate ( event . target , - 7 , "D" ) ; }
handled = event . ctrlKey || event . metaKey ; break ; case 39 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _adjustDate ( event . target , ( isRTL ? - 1 : + 1 ) , "D" ) ; }
handled = event . ctrlKey || event . metaKey ; if ( event . originalEvent . altKey ) { $ . datepicker . _adjustDate ( event . target , ( event . ctrlKey ? + $ . datepicker . _get ( inst , "stepBigMonths" ) : + $ . datepicker . _get ( inst , "stepMonths" ) ) , "M" ) ; }
break ; case 40 : if ( event . ctrlKey || event . metaKey ) { $ . datepicker . _adjustDate ( event . target , + 7 , "D" ) ; }
handled = event . ctrlKey || event . metaKey ; break ; default : handled = false ; } } else if ( event . keyCode === 36 && event . ctrlKey ) { $ . datepicker . _showDatepicker ( this ) ; } else { handled = false ; }
if ( handled ) { event . preventDefault ( ) ; event . stopPropagation ( ) ; } } , _doKeyPress : function ( event ) { var chars , chr , inst = $ . datepicker . _getInst ( event . target ) ; if ( $ . datepicker . _get ( inst , "constrainInput" ) ) { chars = $ . datepicker . _possibleChars ( $ . datepicker . _get ( inst , "dateFormat" ) ) ; chr = String . fromCharCode ( event . charCode == null ? event . keyCode : event . charCode ) ; return event . ctrlKey || event . metaKey || ( chr < " " || ! chars || chars . indexOf ( chr ) > - 1 ) ; } } , _doKeyUp : function ( event ) { var date , inst = $ . datepicker . _getInst ( event . target ) ; if ( inst . input . val ( ) !== inst . lastVal ) { try { date = $ . datepicker . parseDate ( $ . datepicker . _get ( inst , "dateFormat" ) , ( inst . input ? inst . input . val ( ) : null ) , $ . datepicker . _getFormatConfig ( inst ) ) ; if ( date ) { $ . datepicker . _setDateFromField ( inst ) ; $ . datepicker . _updateAlternate ( inst ) ; $ . datepicker . _updateDatepicker ( inst ) ; } }
catch ( err ) { } }
return true ; } , _showDatepicker : function ( input ) { input = input . target || input ; if ( input . nodeName . toLowerCase ( ) !== "input" ) { input = $ ( "input" , input . parentNode ) [ 0 ] ; }
if ( $ . datepicker . _isDisabledDatepicker ( input ) || $ . datepicker . _lastInput === input ) { return ; }
var inst , beforeShow , beforeShowSettings , isFixed , offset , showAnim , duration ; inst = $ . datepicker . _getInst ( input ) ; if ( $ . datepicker . _curInst && $ . datepicker . _curInst !== inst ) { $ . datepicker . _curInst . dpDiv . stop ( true , true ) ; if ( inst && $ . datepicker . _datepickerShowing ) { $ . datepicker . _hideDatepicker ( $ . datepicker . _curInst . input [ 0 ] ) ; } }
beforeShow = $ . datepicker . _get ( inst , "beforeShow" ) ; beforeShowSettings = beforeShow ? beforeShow . apply ( input , [ input , inst ] ) : { } ; if ( beforeShowSettings === false ) { return ; }
datepicker _extendRemove ( inst . settings , beforeShowSettings ) ; inst . lastVal = null ; $ . datepicker . _lastInput = input ; $ . datepicker . _setDateFromField ( inst ) ; if ( $ . datepicker . _inDialog ) { input . value = "" ; }
if ( ! $ . datepicker . _pos ) { $ . datepicker . _pos = $ . datepicker . _findPos ( input ) ; $ . datepicker . _pos [ 1 ] += input . offsetHeight ; }
isFixed = false ; $ ( input ) . parents ( ) . each ( function ( ) { isFixed |= $ ( this ) . css ( "position" ) === "fixed" ; return ! isFixed ; } ) ; offset = { left : $ . datepicker . _pos [ 0 ] , top : $ . datepicker . _pos [ 1 ] } ; $ . datepicker . _pos = null ; inst . dpDiv . empty ( ) ; inst . dpDiv . css ( { position : "absolute" , display : "block" , top : "-1000px" } ) ; $ . datepicker . _updateDatepicker ( inst ) ; offset = $ . datepicker . _checkOffset ( inst , offset , isFixed ) ; inst . dpDiv . css ( { position : ( $ . datepicker . _inDialog && $ . blockUI ? "static" : ( isFixed ? "fixed" : "absolute" ) ) , display : "none" , left : offset . left + "px" , top : offset . top + "px" } ) ; if ( ! inst . inline ) { showAnim = $ . datepicker . _get ( inst , "showAnim" ) ; duration = $ . datepicker . _get ( inst , "duration" ) ; inst . dpDiv . css ( "z-index" , datepicker _getZindex ( $ ( input ) ) + 1 ) ; $ . datepicker . _datepickerShowing = true ; if ( $ . effects && $ . effects . effect [ showAnim ] ) { inst . dpDiv . show ( showAnim , $ . datepicker . _get ( inst , "showOptions" ) , duration ) ; } else { inst . dpDiv [ showAnim || "show" ] ( showAnim ? duration : null ) ; }
if ( $ . datepicker . _shouldFocusInput ( inst ) ) { inst . input . trigger ( "focus" ) ; }
$ . datepicker . _curInst = inst ; } } , _updateDatepicker : function ( inst ) { this . maxRows = 4 ; datepicker _instActive = inst ; inst . dpDiv . empty ( ) . append ( this . _generateHTML ( inst ) ) ; this . _attachHandlers ( inst ) ; var origyearshtml , numMonths = this . _getNumberOfMonths ( inst ) , cols = numMonths [ 1 ] , width = 17 , activeCell = inst . dpDiv . find ( "." + this . _dayOverClass + " a" ) ; if ( activeCell . length > 0 ) { datepicker _handleMouseover . apply ( activeCell . get ( 0 ) ) ; }
inst . dpDiv . removeClass ( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ) . width ( "" ) ; if ( cols > 1 ) { inst . dpDiv . addClass ( "ui-datepicker-multi-" + cols ) . css ( "width" , ( width * cols ) + "em" ) ; }
inst . dpDiv [ ( numMonths [ 0 ] !== 1 || numMonths [ 1 ] !== 1 ? "add" : "remove" ) +
"Class" ] ( "ui-datepicker-multi" ) ; inst . dpDiv [ ( this . _get ( inst , "isRTL" ) ? "add" : "remove" ) +
"Class" ] ( "ui-datepicker-rtl" ) ; if ( inst === $ . datepicker . _curInst && $ . datepicker . _datepickerShowing && $ . datepicker . _shouldFocusInput ( inst ) ) { inst . input . trigger ( "focus" ) ; }
if ( inst . yearshtml ) { origyearshtml = inst . yearshtml ; setTimeout ( function ( ) { if ( origyearshtml === inst . yearshtml && inst . yearshtml ) { inst . dpDiv . find ( "select.ui-datepicker-year:first" ) . replaceWith ( inst . yearshtml ) ; }
origyearshtml = inst . yearshtml = null ; } , 0 ) ; } } , _shouldFocusInput : function ( inst ) { return inst . input && inst . input . is ( ":visible" ) && ! inst . input . is ( ":disabled" ) && ! inst . input . is ( ":focus" ) ; } , _checkOffset : function ( inst , offset , isFixed ) { var dpWidth = inst . dpDiv . outerWidth ( ) , dpHeight = inst . dpDiv . outerHeight ( ) , inputWidth = inst . input ? inst . input . outerWidth ( ) : 0 , inputHeight = inst . input ? inst . input . outerHeight ( ) : 0 , viewWidth = document . documentElement . clientWidth + ( isFixed ? 0 : $ ( document ) . scrollLeft ( ) ) , viewHeight = document . documentElement . clientHeight + ( isFixed ? 0 : $ ( document ) . scrollTop ( ) ) ; offset . left -= ( this . _get ( inst , "isRTL" ) ? ( dpWidth - inputWidth ) : 0 ) ; offset . left -= ( isFixed && offset . left === inst . input . offset ( ) . left ) ? $ ( document ) . scrollLeft ( ) : 0 ; offset . top -= ( isFixed && offset . top === ( inst . input . offset ( ) . top + inputHeight ) ) ? $ ( document ) . scrollTop ( ) : 0 ; offset . left -= Math . min ( offset . left , ( offset . left + dpWidth > viewWidth && viewWidth > dpWidth ) ? Math . abs ( offset . left + dpWidth - viewWidth ) : 0 ) ; offset . top -= Math . min ( offset . top , ( offset . top + dpHeight > viewHeight && viewHeight > dpHeight ) ? Math . abs ( dpHeight + inputHeight ) : 0 ) ; return offset ; } , _findPos : function ( obj ) { var position , inst = this . _getInst ( obj ) , isRTL = this . _get ( inst , "isRTL" ) ; while ( obj && ( obj . type === "hidden" || obj . nodeType !== 1 || $ . expr . filters . hidden ( obj ) ) ) { obj = obj [ isRTL ? "previousSibling" : "nextSibling" ] ; }
position = $ ( obj ) . offset ( ) ; return [ position . left , position . top ] ; } , _hideDatepicker : function ( input ) { var showAnim , duration , postProcess , onClose , inst = this . _curInst ; if ( ! inst || ( input && inst !== $ . data ( input , "datepicker" ) ) ) { return ; }
if ( this . _datepickerShowing ) { showAnim = this . _get ( inst , "showAnim" ) ; duration = this . _get ( inst , "duration" ) ; postProcess = function ( ) { $ . datepicker . _tidyDialog ( inst ) ; } ; if ( $ . effects && ( $ . effects . effect [ showAnim ] || $ . effects [ showAnim ] ) ) { inst . dpDiv . hide ( showAnim , $ . datepicker . _get ( inst , "showOptions" ) , duration , postProcess ) ; } else { inst . dpDiv [ ( showAnim === "slideDown" ? "slideUp" : ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ] ( ( showAnim ? duration : null ) , postProcess ) ; }
if ( ! showAnim ) { postProcess ( ) ; }
this . _datepickerShowing = false ; onClose = this . _get ( inst , "onClose" ) ; if ( onClose ) { onClose . apply ( ( inst . input ? inst . input [ 0 ] : null ) , [ ( inst . input ? inst . input . val ( ) : "" ) , inst ] ) ; }
this . _lastInput = null ; if ( this . _inDialog ) { this . _dialogInput . css ( { position : "absolute" , left : "0" , top : "-100px" } ) ; if ( $ . blockUI ) { $ . unblockUI ( ) ; $ ( "body" ) . append ( this . dpDiv ) ; } }
this . _inDialog = false ; } } , _tidyDialog : function ( inst ) { inst . dpDiv . removeClass ( this . _dialogClass ) . off ( ".ui-datepicker-calendar" ) ; } , _checkExternalClick : function ( event ) { if ( ! $ . datepicker . _curInst ) { return ; }
var $target = $ ( event . target ) , inst = $ . datepicker . _getInst ( $target [ 0 ] ) ; if ( ( ( $target [ 0 ] . id !== $ . datepicker . _mainDivId && $target . parents ( "#" + $ . datepicker . _mainDivId ) . length === 0 && ! $target . hasClass ( $ . datepicker . markerClassName ) && ! $target . closest ( "." + $ . datepicker . _triggerClass ) . length && $ . datepicker . _datepickerShowing && ! ( $ . datepicker . _inDialog && $ . blockUI ) ) ) || ( $target . hasClass ( $ . datepicker . markerClassName ) && $ . datepicker . _curInst !== inst ) ) { $ . datepicker . _hideDatepicker ( ) ; } } , _adjustDate : function ( id , offset , period ) { var target = $ ( id ) , inst = this . _getInst ( target [ 0 ] ) ; if ( this . _isDisabledDatepicker ( target [ 0 ] ) ) { return ; }
this . _adjustInstDate ( inst , offset +
( period === "M" ? this . _get ( inst , "showCurrentAtPos" ) : 0 ) , period ) ; this . _updateDatepicker ( inst ) ; } , _gotoToday : function ( id ) { var date , target = $ ( id ) , inst = this . _getInst ( target [ 0 ] ) ; if ( this . _get ( inst , "gotoCurrent" ) && inst . currentDay ) { inst . selectedDay = inst . currentDay ; inst . drawMonth = inst . selectedMonth = inst . currentMonth ; inst . drawYear = inst . selectedYear = inst . currentYear ; } else { date = new Date ( ) ; inst . selectedDay = date . getDate ( ) ; inst . drawMonth = inst . selectedMonth = date . getMonth ( ) ; inst . drawYear = inst . selectedYear = date . getFullYear ( ) ; }
this . _notifyChange ( inst ) ; this . _adjustDate ( target ) ; } , _selectMonthYear : function ( id , select , period ) { var target = $ ( id ) , inst = this . _getInst ( target [ 0 ] ) ; inst [ "selected" + ( period === "M" ? "Month" : "Year" ) ] = inst [ "draw" + ( period === "M" ? "Month" : "Year" ) ] = parseInt ( select . options [ select . selectedIndex ] . value , 10 ) ; this . _notifyChange ( inst ) ; this . _adjustDate ( target ) ; } , _selectDay : function ( id , month , year , td ) { var inst , target = $ ( id ) ; if ( $ ( td ) . hasClass ( this . _unselectableClass ) || this . _isDisabledDatepicker ( target [ 0 ] ) ) { return ; }
inst = this . _getInst ( target [ 0 ] ) ; inst . selectedDay = inst . currentDay = $ ( "a" , td ) . html ( ) ; inst . selectedMonth = inst . currentMonth = month ; inst . selectedYear = inst . currentYear = year ; this . _selectDate ( id , this . _formatDate ( inst , inst . currentDay , inst . currentMonth , inst . currentYear ) ) ; } , _clearDate : function ( id ) { var target = $ ( id ) ; this . _selectDate ( target , "" ) ; } , _selectDate : function ( id , dateStr ) { var onSelect , target = $ ( id ) , inst = this . _getInst ( target [ 0 ] ) ; dateStr = ( dateStr != null ? dateStr : this . _formatDate ( inst ) ) ; if ( inst . input ) { inst . input . val ( dateStr ) ; }
this . _updateAlternate ( inst ) ; onSelect = this . _get ( inst , "onSelect" ) ; if ( onSelect ) { onSelect . apply ( ( inst . input ? inst . input [ 0 ] : null ) , [ dateStr , inst ] ) ; } else if ( inst . input ) { inst . input . trigger ( "change" ) ; }
if ( inst . inline ) { this . _updateDatepicker ( inst ) ; } else { this . _hideDatepicker ( ) ; this . _lastInput = inst . input [ 0 ] ; if ( typeof ( inst . input [ 0 ] ) !== "object" ) { inst . input . trigger ( "focus" ) ; }
this . _lastInput = null ; } } , _updateAlternate : function ( inst ) { var altFormat , date , dateStr , altField = this . _get ( inst , "altField" ) ; if ( altField ) { altFormat = this . _get ( inst , "altFormat" ) || this . _get ( inst , "dateFormat" ) ; date = this . _getDate ( inst ) ; dateStr = this . formatDate ( altFormat , date , this . _getFormatConfig ( inst ) ) ; $ ( altField ) . val ( dateStr ) ; } } , noWeekends : function ( date ) { var day = date . getDay ( ) ; return [ ( day > 0 && day < 6 ) , "" ] ; } , iso8601Week : function ( date ) { var time , checkDate = new Date ( date . getTime ( ) ) ; checkDate . setDate ( checkDate . getDate ( ) + 4 - ( checkDate . getDay ( ) || 7 ) ) ; time = checkDate . getTime ( ) ; checkDate . setMonth ( 0 ) ; checkDate . setDate ( 1 ) ; return Math . floor ( Math . round ( ( time - checkDate ) / 86400000 ) / 7 ) + 1 ; } , parseDate : function ( format , value , settings ) { if ( format == null || value == null ) { throw "Invalid arguments" ; }
value = ( typeof value === "object" ? value . toString ( ) : value + "" ) ; if ( value === "" ) { return null ; }
var iFormat , dim , extra , iValue = 0 , shortYearCutoffTemp = ( settings ? settings . shortYearCutoff : null ) || this . _defaults . shortYearCutoff , shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : new Date ( ) . getFullYear ( ) % 100 + parseInt ( shortYearCutoffTemp , 10 ) ) , dayNamesShort = ( settings ? settings . dayNamesShort : null ) || this . _defaults . dayNamesShort , dayNames = ( settings ? settings . dayNames : null ) || this . _defaults . dayNames , monthNamesShort = ( settings ? settings . monthNamesShort : null ) || this . _defaults . monthNamesShort , monthNames = ( settings ? settings . monthNames : null ) || this . _defaults . monthNames , year = - 1 , month = - 1 , day = - 1 , doy = - 1 , literal = false , date , lookAhead = function ( match ) { var matches = ( iFormat + 1 < format . length && format . charAt ( iFormat + 1 ) === match ) ; if ( matches ) { iFormat ++ ; }
return matches ; } , getNumber = function ( match ) { var isDoubled = lookAhead ( match ) , size = ( match === "@" ? 14 : ( match === "!" ? 20 : ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ) , minSize = ( match === "y" ? size : 1 ) , digits = new RegExp ( "^\\d{" + minSize + "," + size + "}" ) , num = value . substring ( iValue ) . match ( digits ) ; if ( ! num ) { throw "Missing number at position " + iValue ; }
iValue += num [ 0 ] . length ; return parseInt ( num [ 0 ] , 10 ) ; } , getName = function ( match , shortNames , longNames ) { var index = - 1 , names = $ . map ( lookAhead ( match ) ? longNames : shortNames , function ( v , k ) { return [ [ k , v ] ] ; } ) . sort ( function ( a , b ) { return - ( a [ 1 ] . length - b [ 1 ] . length ) ; } ) ; $ . each ( names , function ( i , pair ) { var name = pair [ 1 ] ; if ( value . substr ( iValue , name . length ) . toLowerCase ( ) === name . toLowerCase ( ) ) { index = pair [ 0 ] ; iValue += name . length ; return false ; } } ) ; if ( index !== - 1 ) { return index + 1 ; } else { throw "Unknown name at position " + iValue ; } } , checkLiteral = function ( ) { if ( value . charAt ( iValue ) !== format . charAt ( iFormat ) ) { throw "Unexpected literal at position " + iValue ; }
iValue ++ ; } ; for ( iFormat = 0 ; iFormat < format . length ; iFormat ++ ) { if ( literal ) { if ( format . charAt ( iFormat ) === "'" && ! lookAhead ( "'" ) ) { literal = false ; } else { checkLiteral ( ) ; } } else { switch ( format . charAt ( iFormat ) ) { case "d" : day = getNumber ( "d" ) ; break ; case "D" : getName ( "D" , dayNamesShort , dayNames ) ; break ; case "o" : doy = getNumber ( "o" ) ; break ; case "m" : month = getNumber ( "m" ) ; break ; case "M" : month = getName ( "M" , monthNamesShort , monthNames ) ; break ; case "y" : year = getNumber ( "y" ) ; break ; case "@" : date = new Date ( getNumber ( "@" ) ) ; year = date . getFullYear ( ) ; month = date . getMonth ( ) + 1 ; day = date . getDate ( ) ; break ; case "!" : date = new Date ( ( getNumber ( "!" ) - this . _ticksTo1970 ) / 10000 ) ; year = date . getFullYear ( ) ; month = date . getMonth ( ) + 1 ; day = date . getDate ( ) ; break ; case "'" : if ( lookAhead ( "'" ) ) { checkLiteral ( ) ; } else { literal = true ; }
break ; default : checkLiteral ( ) ; } } }
if ( iValue < value . length ) { extra = value . substr ( iValue ) ; if ( ! /^\s+/ . test ( extra ) ) { throw "Extra/unparsed characters found in date: " + extra ; } }
if ( year === - 1 ) { year = new Date ( ) . getFullYear ( ) ; } else if ( year < 100 ) { year += new Date ( ) . getFullYear ( ) - new Date ( ) . getFullYear ( ) % 100 +
( year <= shortYearCutoff ? 0 : - 100 ) ; }
if ( doy > - 1 ) { month = 1 ; day = doy ; do { dim = this . _getDaysInMonth ( year , month - 1 ) ; if ( day <= dim ) { break ; }
month ++ ; day -= dim ; } while ( true ) ; }
date = this . _daylightSavingAdjust ( new Date ( year , month - 1 , day ) ) ; if ( date . getFullYear ( ) !== year || date . getMonth ( ) + 1 !== month || date . getDate ( ) !== day ) { throw "Invalid date" ; }
return date ; } , ATOM : "yy-mm-dd" , COOKIE : "D, dd M yy" , ISO _8601 : "yy-mm-dd" , RFC _822 : "D, d M y" , RFC _850 : "DD, dd-M-y" , RFC _1036 : "D, d M y" , RFC _1123 : "D, d M yy" , RFC _2822 : "D, d M yy" , RSS : "D, d M y" , TICKS : "!" , TIMESTAMP : "@" , W3C : "yy-mm-dd" , _ticksTo1970 : ( ( ( 1970 - 1 ) * 365 + Math . floor ( 1970 / 4 ) - Math . floor ( 1970 / 100 ) +
Math . floor ( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ) , formatDate : function ( format , date , settings ) { if ( ! date ) { return "" ; }
var iFormat , dayNamesShort = ( settings ? settings . dayNamesShort : null ) || this . _defaults . dayNamesShort , dayNames = ( settings ? settings . dayNames : null ) || this . _defaults . dayNames , monthNamesShort = ( settings ? settings . monthNamesShort : null ) || this . _defaults . monthNamesShort , monthNames = ( settings ? settings . monthNames : null ) || this . _defaults . monthNames , lookAhead = function ( match ) { var matches = ( iFormat + 1 < format . length && format . charAt ( iFormat + 1 ) === match ) ; if ( matches ) { iFormat ++ ; }
return matches ; } , formatNumber = function ( match , value , len ) { var num = "" + value ; if ( lookAhead ( match ) ) { while ( num . length < len ) { num = "0" + num ; } }
return num ; } , formatName = function ( match , value , shortNames , longNames ) { return ( lookAhead ( match ) ? longNames [ value ] : shortNames [ value ] ) ; } , output = "" , literal = false ; if ( date ) { for ( iFormat = 0 ; iFormat < format . length ; iFormat ++ ) { if ( literal ) { if ( format . charAt ( iFormat ) === "'" && ! lookAhead ( "'" ) ) { literal = false ; } else { output += format . charAt ( iFormat ) ; } } else { switch ( format . charAt ( iFormat ) ) { case "d" : output += formatNumber ( "d" , date . getDate ( ) , 2 ) ; break ; case "D" : output += formatName ( "D" , date . getDay ( ) , dayNamesShort , dayNames ) ; break ; case "o" : output += formatNumber ( "o" , Math . round ( ( new Date ( date . getFullYear ( ) , date . getMonth ( ) , date . getDate ( ) ) . getTime ( ) - new Date ( date . getFullYear ( ) , 0 , 0 ) . getTime ( ) ) / 86400000 ) , 3 ) ; break ; case "m" : output += formatNumber ( "m" , date . getMonth ( ) + 1 , 2 ) ; break ; case "M" : output += formatName ( "M" , date . getMonth ( ) , monthNamesShort , monthNames ) ; break ; case "y" : output += ( lookAhead ( "y" ) ? date . getFullYear ( ) : ( date . getFullYear ( ) % 100 < 10 ? "0" : "" ) + date . getFullYear ( ) % 100 ) ; break ; case "@" : output += date . getTime ( ) ; break ; case "!" : output += date . getTime ( ) * 10000 + this . _ticksTo1970 ; break ; case "'" : if ( lookAhead ( "'" ) ) { output += "'" ; } else { literal = true ; }
break ; default : output += format . charAt ( iFormat ) ; } } } }
return output ; } , _possibleChars : function ( format ) { var iFormat , chars = "" , literal = false , lookAhead = function ( match ) { var matches = ( iFormat + 1 < format . length && format . charAt ( iFormat + 1 ) === match ) ; if ( matches ) { iFormat ++ ; }
return matches ; } ; for ( iFormat = 0 ; iFormat < format . length ; iFormat ++ ) { if ( literal ) { if ( format . charAt ( iFormat ) === "'" && ! lookAhead ( "'" ) ) { literal = false ; } else { chars += format . charAt ( iFormat ) ; } } else { switch ( format . charAt ( iFormat ) ) { case "d" : case "m" : case "y" : case "@" : chars += "0123456789" ; break ; case "D" : case "M" : return null ; case "'" : if ( lookAhead ( "'" ) ) { chars += "'" ; } else { literal = true ; }
break ; default : chars += format . charAt ( iFormat ) ; } } }
return chars ; } , _get : function ( inst , name ) { return inst . settings [ name ] !== undefined ? inst . settings [ name ] : this . _defaults [ name ] ; } , _setDateFromField : function ( inst , noDefault ) { if ( inst . input . val ( ) === inst . lastVal ) { return ; }
var dateFormat = this . _get ( inst , "dateFormat" ) , dates = inst . lastVal = inst . input ? inst . input . val ( ) : null , defaultDate = this . _getDefaultDate ( inst ) , date = defaultDate , settings = this . _getFormatConfig ( inst ) ; try { date = this . parseDate ( dateFormat , dates , settings ) || defaultDate ; } catch ( event ) { dates = ( noDefault ? "" : dates ) ; }
inst . selectedDay = date . getDate ( ) ; inst . drawMonth = inst . selectedMonth = date . getMonth ( ) ; inst . drawYear = inst . selectedYear = date . getFullYear ( ) ; inst . currentDay = ( dates ? date . getDate ( ) : 0 ) ; inst . currentMonth = ( dates ? date . getMonth ( ) : 0 ) ; inst . currentYear = ( dates ? date . getFullYear ( ) : 0 ) ; this . _adjustInstDate ( inst ) ; } , _getDefaultDate : function ( inst ) { return this . _restrictMinMax ( inst , this . _determineDate ( inst , this . _get ( inst , "defaultDate" ) , new Date ( ) ) ) ; } , _determineDate : function ( inst , date , defaultDate ) { var offsetNumeric = function ( offset ) { var date = new Date ( ) ; date . setDate ( date . getDate ( ) + offset ) ; return date ; } , offsetString = function ( offset ) { try { return $ . datepicker . parseDate ( $ . datepicker . _get ( inst , "dateFormat" ) , offset , $ . datepicker . _getFormatConfig ( inst ) ) ; }
catch ( e ) { }
var date = ( offset . toLowerCase ( ) . match ( /^c/ ) ? $ . datepicker . _getDate ( inst ) : null ) || new Date ( ) , year = date . getFullYear ( ) , month = date . getMonth ( ) , day = date . getDate ( ) , pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g , matches = pattern . exec ( offset ) ; while ( matches ) { switch ( matches [ 2 ] || "d" ) { case "d" : case "D" : day += parseInt ( matches [ 1 ] , 10 ) ; break ; case "w" : case "W" : day += parseInt ( matches [ 1 ] , 10 ) * 7 ; break ; case "m" : case "M" : month += parseInt ( matches [ 1 ] , 10 ) ; day = Math . min ( day , $ . datepicker . _getDaysInMonth ( year , month ) ) ; break ; case "y" : case "Y" : year += parseInt ( matches [ 1 ] , 10 ) ; day = Math . min ( day , $ . datepicker . _getDaysInMonth ( year , month ) ) ; break ; }
matches = pattern . exec ( offset ) ; }
return new Date ( year , month , day ) ; } , newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString ( date ) : ( typeof date === "number" ? ( isNaN ( date ) ? defaultDate : offsetNumeric ( date ) ) : new Date ( date . getTime ( ) ) ) ) ) ; newDate = ( newDate && newDate . toString ( ) === "Invalid Date" ? defaultDate : newDate ) ; if ( newDate ) { newDate . setHours ( 0 ) ; newDate . setMinutes ( 0 ) ; newDate . setSeconds ( 0 ) ; newDate . setMilliseconds ( 0 ) ; }
return this . _daylightSavingAdjust ( newDate ) ; } , _daylightSavingAdjust : function ( date ) { if ( ! date ) { return null ; }
date . setHours ( date . getHours ( ) > 12 ? date . getHours ( ) + 2 : 0 ) ; return date ; } , _setDate : function ( inst , date , noChange ) { var clear = ! date , origMonth = inst . selectedMonth , origYear = inst . selectedYear , newDate = this . _restrictMinMax ( inst , this . _determineDate ( inst , date , new Date ( ) ) ) ; inst . selectedDay = inst . currentDay = newDate . getDate ( ) ; inst . drawMonth = inst . selectedMonth = inst . currentMonth = newDate . getMonth ( ) ; inst . drawYear = inst . selectedYear = inst . currentYear = newDate . getFullYear ( ) ; if ( ( origMonth !== inst . selectedMonth || origYear !== inst . selectedYear ) && ! noChange ) { this . _notifyChange ( inst ) ; }
this . _adjustInstDate ( inst ) ; if ( inst . input ) { inst . input . val ( clear ? "" : this . _formatDate ( inst ) ) ; } } , _getDate : function ( inst ) { var startDate = ( ! inst . currentYear || ( inst . input && inst . input . val ( ) === "" ) ? null : this . _daylightSavingAdjust ( new Date ( inst . currentYear , inst . currentMonth , inst . currentDay ) ) ) ; return startDate ; } , _attachHandlers : function ( inst ) { var stepMonths = this . _get ( inst , "stepMonths" ) , id = "#" + inst . id . replace ( /\\\\/g , "\\" ) ; inst . dpDiv . find ( "[data-handler]" ) . map ( function ( ) { var handler = { prev : function ( ) { $ . datepicker . _adjustDate ( id , - stepMonths , "M" ) ; } , next : function ( ) { $ . datepicker . _adjustDate ( id , + stepMonths , "M" ) ; } , hide : function ( ) { $ . datepicker . _hideDatepicker ( ) ; } , today : function ( ) { $ . datepicker . _gotoToday ( id ) ; } , selectDay : function ( ) { $ . datepicker . _selectDay ( id , + this . getAttribute ( "data-month" ) , + this . getAttribute ( "data-year" ) , this ) ; return false ; } , selectMonth : function ( ) { $ . datepicker . _selectMonthYear ( id , this , "M" ) ; return false ; } , selectYear : function ( ) { $ . datepicker . _selectMonthYear ( id , this , "Y" ) ; return false ; } } ; $ ( this ) . on ( this . getAttribute ( "data-event" ) , handler [ this . getAttribute ( "data-handler" ) ] ) ; } ) ; } , _generateHTML : function ( inst ) { var maxDraw , prevText , prev , nextText , next , currentText , gotoDate , controls , buttonPanel , firstDay , showWeek , dayNames , dayNamesMin , monthNames , monthNamesShort , beforeShowDay , showOtherMonths , selectOtherMonths , defaultDate , html , dow , row , group , col , selectedDate , cornerClass , calender , thead , day , daysInMonth , leadDays , curRows , numRows , printDate , dRow , tbody , daySettings , otherMonth , unselectable , tempDate = new Date ( ) , today = this . _daylightSavingAdjust ( new Date ( tempDate . getFullYear ( ) , tempDate . getMonth ( ) , tempDate . getDate ( ) ) ) , isRTL = this . _get ( inst , "isRTL" ) , showButtonPanel = this . _get ( inst , "showButtonPanel" ) , hideIfNoPrevNext = this . _get ( inst , "hideIfNoPrevNext" ) , navigationAsDateFormat = this . _get ( inst , "navigationAsDateFormat" ) , numMonths = this . _getNumberOfMonths ( inst ) , showCurrentAtPos = this . _get ( inst , "showCurrentAtPos" ) , stepMonths = this . _get ( inst , "stepMonths" ) , isMultiMonth = ( numMonths [ 0 ] !== 1 || numMonths [ 1 ] !== 1 ) , currentDate = this . _daylightSavingAdjust ( ( ! inst . currentDay ? new Date ( 9999 , 9 , 9 ) : new Date ( inst . currentYear , inst . currentMonth , inst . currentDay ) ) ) , minDate = this . _getMinMaxDate ( inst , "min" ) , maxDate = this . _getMinMaxDate ( inst , "max" ) , drawMonth = inst . drawMonth - showCurrentAtPos , drawYear = inst . drawYear ; if ( drawMonth < 0 ) { drawMonth += 12 ; drawYear -- ; }
if ( maxDate ) { maxDraw = this . _daylightSavingAdjust ( new Date ( maxDate . getFullYear ( ) , maxDate . getMonth ( ) - ( numMonths [ 0 ] * numMonths [ 1 ] ) + 1 , maxDate . getDate ( ) ) ) ; maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw ) ; while ( this . _daylightSavingAdjust ( new Date ( drawYear , drawMonth , 1 ) ) > maxDraw ) { drawMonth -- ; if ( drawMonth < 0 ) { drawMonth = 11 ; drawYear -- ; } } }
inst . drawMonth = drawMonth ; inst . drawYear = drawYear ; prevText = this . _get ( inst , "prevText" ) ; prevText = ( ! navigationAsDateFormat ? prevText : this . formatDate ( prevText , this . _daylightSavingAdjust ( new Date ( drawYear , drawMonth - stepMonths , 1 ) ) , this . _getFormatConfig ( inst ) ) ) ; prev = ( this . _canAdjustMonth ( inst , - 1 , drawYear , drawMonth ) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" : ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) ) ; nextText = this . _get ( inst , "nextText" ) ; nextText = ( ! navigationAsDateFormat ? nextText : this . formatDate ( nextText , this . _daylightSavingAdjust ( new Date ( drawYear , drawMonth + stepMonths , 1 ) ) , this . _getFormatConfig ( inst ) ) ) ; next = ( this . _canAdjustMonth ( inst , + 1 , drawYear , drawMonth ) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" : ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) ) ; currentText = this . _get ( inst , "currentText" ) ; gotoDate = ( this . _get ( inst , "gotoCurrent" ) && inst . currentDay ? currentDate : today ) ; currentText = ( ! navigationAsDateFormat ? currentText : this . formatDate ( currentText , gotoDate , this . _getFormatConfig ( inst ) ) ) ; controls = ( ! inst . inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
this . _get ( inst , "closeText" ) + "</button>" : "" ) ; buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) +
( this . _isInRange ( inst , gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : "" ; firstDay = parseInt ( this . _get ( inst , "firstDay" ) , 10 ) ; firstDay = ( isNaN ( firstDay ) ? 0 : firstDay ) ; showWeek = this . _get ( inst , "showWeek" ) ; dayNames = this . _get ( inst , "dayNames" ) ; dayNamesMin = this . _get ( inst , "dayNamesMin" ) ; monthNames = this . _get ( inst , "monthNames" ) ; monthNamesShort = this . _get ( inst , "monthNamesShort" ) ; beforeShowDay = this . _get ( inst , "beforeShowDay" ) ; showOtherMonths = this . _get ( inst , "showOtherMonths" ) ; selectOtherMonths = this . _get ( inst , "selectOtherMonths" ) ; defaultDate = this . _getDefaultDate ( inst ) ; html = "" ; for ( row = 0 ; row < numMonths [ 0 ] ; row ++ ) { group = "" ; this . maxRows = 4 ; for ( col = 0 ; col < numMonths [ 1 ] ; col ++ ) { selectedDate = this . _daylightSavingAdjust ( new Date ( drawYear , drawMonth , inst . selectedDay ) ) ; cornerClass = " ui-corner-all" ; calender = "" ; if ( isMultiMonth ) { calender += "<div class='ui-datepicker-group" ; if ( numMonths [ 1 ] > 1 ) { switch ( col ) { case 0 : calender += " ui-datepicker-group-first" ; cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ) ; break ; case numMonths [ 1 ] - 1 : calender += " ui-datepicker-group-last" ; cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ) ; break ; default : calender += " ui-datepicker-group-middle" ; cornerClass = "" ; break ; } }
calender += "'>" ; }
calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
( /all|left/ . test ( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +
( /all|right/ . test ( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +
this . _generateMonthYearHeader ( inst , drawMonth , drawYear , minDate , maxDate , row > 0 || col > 0 , monthNames , monthNamesShort ) +
"</div><table class='ui-datepicker-calendar'><thead>" +
"<tr>" ; thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this . _get ( inst , "weekHeader" ) + "</th>" : "" ) ; for ( dow = 0 ; dow < 7 ; dow ++ ) { day = ( dow + firstDay ) % 7 ; thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" +
"<span title='" + dayNames [ day ] + "'>" + dayNamesMin [ day ] + "</span></th>" ; }
calender += thead + "</tr></thead><tbody>" ; daysInMonth = this . _getDaysInMonth ( drawYear , drawMonth ) ; if ( drawYear === inst . selectedYear && drawMonth === inst . selectedMonth ) { inst . selectedDay = Math . min ( inst . selectedDay , daysInMonth ) ; }
leadDays = ( this . _getFirstDayOfMonth ( drawYear , drawMonth ) - firstDay + 7 ) % 7 ; curRows = Math . ceil ( ( leadDays + daysInMonth ) / 7 ) ; numRows = ( isMultiMonth ? this . maxRows > curRows ? this . maxRows : curRows : curRows ) ; this . maxRows = numRows ; printDate = this . _daylightSavingAdjust ( new Date ( drawYear , drawMonth , 1 - leadDays ) ) ; for ( dRow = 0 ; dRow < numRows ; dRow ++ ) { calender += "<tr>" ; tbody = ( ! showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
this . _get ( inst , "calculateWeek" ) ( printDate ) + "</td>" ) ; for ( dow = 0 ; dow < 7 ; dow ++ ) { daySettings = ( beforeShowDay ? beforeShowDay . apply ( ( inst . input ? inst . input [ 0 ] : null ) , [ printDate ] ) : [ true , "" ] ) ; otherMonth = ( printDate . getMonth ( ) !== drawMonth ) ; unselectable = ( otherMonth && ! selectOtherMonths ) || ! daySettings [ 0 ] || ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate ) ; tbody += "<td class='" +
( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) +
( otherMonth ? " ui-datepicker-other-month" : "" ) +
( ( printDate . getTime ( ) === selectedDate . getTime ( ) && drawMonth === inst . selectedMonth && inst . _keyEvent ) || ( defaultDate . getTime ( ) === printDate . getTime ( ) && defaultDate . getTime ( ) === selectedDate . getTime ( ) ) ? " " + this . _dayOverClass : "" ) +
( unselectable ? " " + this . _unselectableClass + " ui-state-disabled" : "" ) +
( otherMonth && ! showOtherMonths ? "" : " " + daySettings [ 1 ] +
( printDate . getTime ( ) === currentDate . getTime ( ) ? " " + this . _currentClass : "" ) +
( printDate . getTime ( ) === today . getTime ( ) ? " ui-datepicker-today" : "" ) ) + "'" +
( ( ! otherMonth || showOtherMonths ) && daySettings [ 2 ] ? " title='" + daySettings [ 2 ] . replace ( /'/g , "'" ) + "'" : "" ) +
( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate . getMonth ( ) + "' data-year='" + printDate . getFullYear ( ) + "'" ) + ">" +
( otherMonth && ! showOtherMonths ? " " : ( unselectable ? "<span class='ui-state-default'>" + printDate . getDate ( ) + "</span>" : "<a class='ui-state-default" +
( printDate . getTime ( ) === today . getTime ( ) ? " ui-state-highlight" : "" ) +
( printDate . getTime ( ) === currentDate . getTime ( ) ? " ui-state-active" : "" ) +
( otherMonth ? " ui-priority-secondary" : "" ) +
"' href='#'>" + printDate . getDate ( ) + "</a>" ) ) + "</td>" ; printDate . setDate ( printDate . getDate ( ) + 1 ) ; printDate = this . _daylightSavingAdjust ( printDate ) ; }
calender += tbody + "</tr>" ; }
drawMonth ++ ; if ( drawMonth > 11 ) { drawMonth = 0 ; drawYear ++ ; }
calender += "</tbody></table>" + ( isMultiMonth ? "</div>" +
( ( numMonths [ 0 ] > 0 && col === numMonths [ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" ) ; group += calender ; }
html += group ; }
html += buttonPanel ; inst . _keyEvent = false ; return html ; } , _generateMonthYearHeader : function ( inst , drawMonth , drawYear , minDate , maxDate , secondary , monthNames , monthNamesShort ) { var inMinYear , inMaxYear , month , years , thisYear , determineYear , year , endYear , changeMonth = this . _get ( inst , "changeMonth" ) , changeYear = this . _get ( inst , "changeYear" ) , showMonthAfterYear = this . _get ( inst , "showMonthAfterYear" ) , html = "<div class='ui-datepicker-title'>" , monthHtml = "" ; if ( secondary || ! changeMonth ) { monthHtml += "<span class='ui-datepicker-month'>" + monthNames [ drawMonth ] + "</span>" ; } else { inMinYear = ( minDate && minDate . getFullYear ( ) === drawYear ) ; inMaxYear = ( maxDate && maxDate . getFullYear ( ) === drawYear ) ; monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>" ; for ( month = 0 ; month < 12 ; month ++ ) { if ( ( ! inMinYear || month >= minDate . getMonth ( ) ) && ( ! inMaxYear || month <= maxDate . getMonth ( ) ) ) { monthHtml += "<option value='" + month + "'" +
( month === drawMonth ? " selected='selected'" : "" ) +
">" + monthNamesShort [ month ] + "</option>" ; } }
monthHtml += "</select>" ; }
if ( ! showMonthAfterYear ) { html += monthHtml + ( secondary || ! ( changeMonth && changeYear ) ? " " : "" ) ; }
if ( ! inst . yearshtml ) { inst . yearshtml = "" ; if ( secondary || ! changeYear ) { html += "<span class='ui-datepicker-year'>" + drawYear + "</span>" ; } else { years = this . _get ( inst , "yearRange" ) . split ( ":" ) ; thisYear = new Date ( ) . getFullYear ( ) ; determineYear = function ( value ) { var year = ( value . match ( /c[+\-].*/ ) ? drawYear + parseInt ( value . substring ( 1 ) , 10 ) : ( value . match ( /[+\-].*/ ) ? thisYear + parseInt ( value , 10 ) : parseInt ( value , 10 ) ) ) ; return ( isNaN ( year ) ? thisYear : year ) ; } ; year = determineYear ( years [ 0 ] ) ; endYear = Math . max ( year , determineYear ( years [ 1 ] || "" ) ) ; year = ( minDate ? Math . max ( year , minDate . getFullYear ( ) ) : year ) ; endYear = ( maxDate ? Math . min ( endYear , maxDate . getFullYear ( ) ) : endYear ) ; inst . yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>" ; for ( ; year <= endYear ; year ++ ) { inst . yearshtml += "<option value='" + year + "'" +
( year === drawYear ? " selected='selected'" : "" ) +
">" + year + "</option>" ; }
inst . yearshtml += "</select>" ; html += inst . yearshtml ; inst . yearshtml = null ; } }
html += this . _get ( inst , "yearSuffix" ) ; if ( showMonthAfterYear ) { html += ( secondary || ! ( changeMonth && changeYear ) ? " " : "" ) + monthHtml ; }
html += "</div>" ; return html ; } , _adjustInstDate : function ( inst , offset , period ) { var year = inst . selectedYear + ( period === "Y" ? offset : 0 ) , month = inst . selectedMonth + ( period === "M" ? offset : 0 ) , day = Math . min ( inst . selectedDay , this . _getDaysInMonth ( year , month ) ) + ( period === "D" ? offset : 0 ) , date = this . _restrictMinMax ( inst , this . _daylightSavingAdjust ( new Date ( year , month , day ) ) ) ; inst . selectedDay = date . getDate ( ) ; inst . drawMonth = inst . selectedMonth = date . getMonth ( ) ; inst . drawYear = inst . selectedYear = date . getFullYear ( ) ; if ( period === "M" || period === "Y" ) { this . _notifyChange ( inst ) ; } } , _restrictMinMax : function ( inst , date ) { var minDate = this . _getMinMaxDate ( inst , "min" ) , maxDate = this . _getMinMaxDate ( inst , "max" ) , newDate = ( minDate && date < minDate ? minDate : date ) ; return ( maxDate && newDate > maxDate ? maxDate : newDate ) ; } , _notifyChange : function ( inst ) { var onChange = this . _get ( inst , "onChangeMonthYear" ) ; if ( onChange ) { onChange . apply ( ( inst . input ? inst . input [ 0 ] : null ) , [ inst . selectedYear , inst . selectedMonth + 1 , inst ] ) ; } } , _getNumberOfMonths : function ( inst ) { var numMonths = this . _get ( inst , "numberOfMonths" ) ; return ( numMonths == null ? [ 1 , 1 ] : ( typeof numMonths === "number" ? [ 1 , numMonths ] : numMonths ) ) ; } , _getMinMaxDate : function ( inst , minMax ) { return this . _determineDate ( inst , this . _get ( inst , minMax + "Date" ) , null ) ; } , _getDaysInMonth : function ( year , month ) { return 32 - this . _daylightSavingAdjust ( new Date ( year , month , 32 ) ) . getDate ( ) ; } , _getFirstDayOfMonth : function ( year , month ) { return new Date ( year , month , 1 ) . getDay ( ) ; } , _canAdjustMonth : function ( inst , offset , curYear , curMonth ) { var numMonths = this . _getNumberOfMonths ( inst ) , date = this . _daylightSavingAdjust ( new Date ( curYear , curMonth + ( offset < 0 ? offset : numMonths [ 0 ] * numMonths [ 1 ] ) , 1 ) ) ; if ( offset < 0 ) { date . setDate ( this . _getDaysInMonth ( date . getFullYear ( ) , date . getMonth ( ) ) ) ; }
return this . _isInRange ( inst , date ) ; } , _isInRange : function ( inst , date ) { var yearSplit , currentYear , minDate = this . _getMinMaxDate ( inst , "min" ) , maxDate = this . _getMinMaxDate ( inst , "max" ) , minYear = null , maxYear = null , years = this . _get ( inst , "yearRange" ) ; if ( years ) { yearSplit = years . split ( ":" ) ; currentYear = new Date ( ) . getFullYear ( ) ; minYear = parseInt ( yearSplit [ 0 ] , 10 ) ; maxYear = parseInt ( yearSplit [ 1 ] , 10 ) ; if ( yearSplit [ 0 ] . match ( /[+\-].*/ ) ) { minYear += currentYear ; }
if ( yearSplit [ 1 ] . match ( /[+\-].*/ ) ) { maxYear += currentYear ; } }
return ( ( ! minDate || date . getTime ( ) >= minDate . getTime ( ) ) && ( ! maxDate || date . getTime ( ) <= maxDate . getTime ( ) ) && ( ! minYear || date . getFullYear ( ) >= minYear ) && ( ! maxYear || date . getFullYear ( ) <= maxYear ) ) ; } , _getFormatConfig : function ( inst ) { var shortYearCutoff = this . _get ( inst , "shortYearCutoff" ) ; shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff : new Date ( ) . getFullYear ( ) % 100 + parseInt ( shortYearCutoff , 10 ) ) ; return { shortYearCutoff : shortYearCutoff , dayNamesShort : this . _get ( inst , "dayNamesShort" ) , dayNames : this . _get ( inst , "dayNames" ) , monthNamesShort : this . _get ( inst , "monthNamesShort" ) , monthNames : this . _get ( inst , "monthNames" ) } ; } , _formatDate : function ( inst , day , month , year ) { if ( ! day ) { inst . currentDay = inst . selectedDay ; inst . currentMonth = inst . selectedMonth ; inst . currentYear = inst . selectedYear ; }
var date = ( day ? ( typeof day === "object" ? day : this . _daylightSavingAdjust ( new Date ( year , month , day ) ) ) : this . _daylightSavingAdjust ( new Date ( inst . currentYear , inst . currentMonth , inst . currentDay ) ) ) ; return this . formatDate ( this . _get ( inst , "dateFormat" ) , date , this . _getFormatConfig ( inst ) ) ; } } ) ; function datepicker _bindHover ( dpDiv ) { var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a" ; return dpDiv . on ( "mouseout" , selector , function ( ) { $ ( this ) . removeClass ( "ui-state-hover" ) ; if ( this . className . indexOf ( "ui-datepicker-prev" ) !== - 1 ) { $ ( this ) . removeClass ( "ui-datepicker-prev-hover" ) ; }
if ( this . className . indexOf ( "ui-datepicker-next" ) !== - 1 ) { $ ( this ) . removeClass ( "ui-datepicker-next-hover" ) ; } } ) . on ( "mouseover" , selector , datepicker _handleMouseover ) ; }
function datepicker _handleMouseover ( ) { if ( ! $ . datepicker . _isDisabledDatepicker ( datepicker _instActive . inline ? datepicker _instActive . dpDiv . parent ( ) [ 0 ] : datepicker _instActive . input [ 0 ] ) ) { $ ( this ) . parents ( ".ui-datepicker-calendar" ) . find ( "a" ) . removeClass ( "ui-state-hover" ) ; $ ( this ) . addClass ( "ui-state-hover" ) ; if ( this . className . indexOf ( "ui-datepicker-prev" ) !== - 1 ) { $ ( this ) . addClass ( "ui-datepicker-prev-hover" ) ; }
if ( this . className . indexOf ( "ui-datepicker-next" ) !== - 1 ) { $ ( this ) . addClass ( "ui-datepicker-next-hover" ) ; } } }
function datepicker _extendRemove ( target , props ) { $ . extend ( target , props ) ; for ( var name in props ) { if ( props [ name ] == null ) { target [ name ] = props [ name ] ; } }
return target ; }
$ . fn . datepicker = function ( options ) { if ( ! this . length ) { return this ; }
if ( ! $ . datepicker . initialized ) { $ ( document ) . on ( "mousedown" , $ . datepicker . _checkExternalClick ) ; $ . datepicker . initialized = true ; }
if ( $ ( "#" + $ . datepicker . _mainDivId ) . length === 0 ) { $ ( "body" ) . append ( $ . datepicker . dpDiv ) ; }
var otherArgs = Array . prototype . slice . call ( arguments , 1 ) ; if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) { return $ . datepicker [ "_" + options + "Datepicker" ] . apply ( $ . datepicker , [ this [ 0 ] ] . concat ( otherArgs ) ) ; }
if ( options === "option" && arguments . length === 2 && typeof arguments [ 1 ] === "string" ) { return $ . datepicker [ "_" + options + "Datepicker" ] . apply ( $ . datepicker , [ this [ 0 ] ] . concat ( otherArgs ) ) ; }
return this . each ( function ( ) { typeof options === "string" ? $ . datepicker [ "_" + options + "Datepicker" ] . apply ( $ . datepicker , [ this ] . concat ( otherArgs ) ) : $ . datepicker . _attachDatepicker ( this , options ) ; } ) ; } ; $ . datepicker = new Datepicker ( ) ; $ . datepicker . initialized = false ; $ . datepicker . uuid = new Date ( ) . getTime ( ) ; $ . datepicker . version = "1.12.1" ; var widgetsDatepicker = $ . datepicker ; var ie = $ . ui . ie = ! ! /msie [\w.]+/ . exec ( navigator . userAgent . toLowerCase ( ) ) ; / * !
* jQuery UI Mouse 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var mouseHandled = false ; $ ( document ) . on ( "mouseup" , function ( ) { mouseHandled = false ; } ) ; var widgetsMouse = $ . widget ( "ui.mouse" , { version : "1.12.1" , options : { cancel : "input, textarea, button, select, option" , distance : 1 , delay : 0 } , _mouseInit : function ( ) { var that = this ; this . element . on ( "mousedown." + this . widgetName , function ( event ) { return that . _mouseDown ( event ) ; } ) . on ( "click." + this . widgetName , function ( event ) { if ( true === $ . data ( event . target , that . widgetName + ".preventClickEvent" ) ) { $ . removeData ( event . target , that . widgetName + ".preventClickEvent" ) ; event . stopImmediatePropagation ( ) ; return false ; } } ) ; this . started = false ; } , _mouseDestroy : function ( ) { this . element . off ( "." + this . widgetName ) ; if ( this . _mouseMoveDelegate ) { this . document . off ( "mousemove." + this . widgetName , this . _mouseMoveDelegate ) . off ( "mouseup." + this . widgetName , this . _mouseUpDelegate ) ; } } , _mouseDown : function ( event ) { if ( mouseHandled ) { return ; }
this . _mouseMoved = false ; ( this . _mouseStarted && this . _mouseUp ( event ) ) ; this . _mouseDownEvent = event ; var that = this , btnIsLeft = ( event . which === 1 ) , elIsCancel = ( typeof this . options . cancel === "string" && event . target . nodeName ? $ ( event . target ) . closest ( this . options . cancel ) . length : false ) ; if ( ! btnIsLeft || elIsCancel || ! this . _mouseCapture ( event ) ) { return true ; }
this . mouseDelayMet = ! this . options . delay ; if ( ! this . mouseDelayMet ) { this . _mouseDelayTimer = setTimeout ( function ( ) { that . mouseDelayMet = true ; } , this . options . delay ) ; }
if ( this . _mouseDistanceMet ( event ) && this . _mouseDelayMet ( event ) ) { this . _mouseStarted = ( this . _mouseStart ( event ) !== false ) ; if ( ! this . _mouseStarted ) { event . preventDefault ( ) ; return true ; } }
if ( true === $ . data ( event . target , this . widgetName + ".preventClickEvent" ) ) { $ . removeData ( event . target , this . widgetName + ".preventClickEvent" ) ; }
this . _mouseMoveDelegate = function ( event ) { return that . _mouseMove ( event ) ; } ; this . _mouseUpDelegate = function ( event ) { return that . _mouseUp ( event ) ; } ; this . document . on ( "mousemove." + this . widgetName , this . _mouseMoveDelegate ) . on ( "mouseup." + this . widgetName , this . _mouseUpDelegate ) ; event . preventDefault ( ) ; mouseHandled = true ; return true ; } , _mouseMove : function ( event ) { if ( this . _mouseMoved ) { if ( $ . ui . ie && ( ! document . documentMode || document . documentMode < 9 ) && ! event . button ) { return this . _mouseUp ( event ) ; } else if ( ! event . which ) { if ( event . originalEvent . altKey || event . originalEvent . ctrlKey || event . originalEvent . metaKey || event . originalEvent . shiftKey ) { this . ignoreMissingWhich = true ; } else if ( ! this . ignoreMissingWhich ) { return this . _mouseUp ( event ) ; } } }
if ( event . which || event . button ) { this . _mouseMoved = true ; }
if ( this . _mouseStarted ) { this . _mouseDrag ( event ) ; return event . preventDefault ( ) ; }
if ( this . _mouseDistanceMet ( event ) && this . _mouseDelayMet ( event ) ) { this . _mouseStarted = ( this . _mouseStart ( this . _mouseDownEvent , event ) !== false ) ; ( this . _mouseStarted ? this . _mouseDrag ( event ) : this . _mouseUp ( event ) ) ; }
return ! this . _mouseStarted ; } , _mouseUp : function ( event ) { this . document . off ( "mousemove." + this . widgetName , this . _mouseMoveDelegate ) . off ( "mouseup." + this . widgetName , this . _mouseUpDelegate ) ; if ( this . _mouseStarted ) { this . _mouseStarted = false ; if ( event . target === this . _mouseDownEvent . target ) { $ . data ( event . target , this . widgetName + ".preventClickEvent" , true ) ; }
this . _mouseStop ( event ) ; }
if ( this . _mouseDelayTimer ) { clearTimeout ( this . _mouseDelayTimer ) ; delete this . _mouseDelayTimer ; }
this . ignoreMissingWhich = false ; mouseHandled = false ; event . preventDefault ( ) ; } , _mouseDistanceMet : function ( event ) { return ( Math . max ( Math . abs ( this . _mouseDownEvent . pageX - event . pageX ) , Math . abs ( this . _mouseDownEvent . pageY - event . pageY ) ) >= this . options . distance ) ; } , _mouseDelayMet : function ( ) { return this . mouseDelayMet ; } , _mouseStart : function ( ) { } , _mouseDrag : function ( ) { } , _mouseStop : function ( ) { } , _mouseCapture : function ( ) { return true ; } } ) ; var plugin = $ . ui . plugin = { add : function ( module , option , set ) { var i , proto = $ . ui [ module ] . prototype ; for ( i in set ) { proto . plugins [ i ] = proto . plugins [ i ] || [ ] ; proto . plugins [ i ] . push ( [ option , set [ i ] ] ) ; } } , call : function ( instance , name , args , allowDisconnected ) { var i , set = instance . plugins [ name ] ; if ( ! set ) { return ; }
if ( ! allowDisconnected && ( ! instance . element [ 0 ] . parentNode || instance . element [ 0 ] . parentNode . nodeType === 11 ) ) { return ; }
for ( i = 0 ; i < set . length ; i ++ ) { if ( instance . options [ set [ i ] [ 0 ] ] ) { set [ i ] [ 1 ] . apply ( instance . element , args ) ; } } } } ; var safeBlur = $ . ui . safeBlur = function ( element ) { if ( element && element . nodeName . toLowerCase ( ) !== "body" ) { $ ( element ) . trigger ( "blur" ) ; } } ; / * !
* jQuery UI Draggable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.draggable" , $ . ui . mouse , { version : "1.12.1" , widgetEventPrefix : "drag" , options : { addClasses : true , appendTo : "parent" , axis : false , connectToSortable : false , containment : false , cursor : "auto" , cursorAt : false , grid : false , handle : false , helper : "original" , iframeFix : false , opacity : false , refreshPositions : false , revert : false , revertDuration : 500 , scope : "default" , scroll : true , scrollSensitivity : 20 , scrollSpeed : 20 , snap : false , snapMode : "both" , snapTolerance : 20 , stack : false , zIndex : false , drag : null , start : null , stop : null } , _create : function ( ) { if ( this . options . helper === "original" ) { this . _setPositionRelative ( ) ; }
if ( this . options . addClasses ) { this . _addClass ( "ui-draggable" ) ; }
this . _setHandleClassName ( ) ; this . _mouseInit ( ) ; } , _setOption : function ( key , value ) { this . _super ( key , value ) ; if ( key === "handle" ) { this . _removeHandleClassName ( ) ; this . _setHandleClassName ( ) ; } } , _destroy : function ( ) { if ( ( this . helper || this . element ) . is ( ".ui-draggable-dragging" ) ) { this . destroyOnClear = true ; return ; }
this . _removeHandleClassName ( ) ; this . _mouseDestroy ( ) ; } , _mouseCapture : function ( event ) { var o = this . options ; if ( this . helper || o . disabled || $ ( event . target ) . closest ( ".ui-resizable-handle" ) . length > 0 ) { return false ; }
this . handle = this . _getHandle ( event ) ; if ( ! this . handle ) { return false ; }
this . _blurActiveElement ( event ) ; this . _blockFrames ( o . iframeFix === true ? "iframe" : o . iframeFix ) ; return true ; } , _blockFrames : function ( selector ) { this . iframeBlocks = this . document . find ( selector ) . map ( function ( ) { var iframe = $ ( this ) ; return $ ( "<div>" ) . css ( "position" , "absolute" ) . appendTo ( iframe . parent ( ) ) . outerWidth ( iframe . outerWidth ( ) ) . outerHeight ( iframe . outerHeight ( ) ) . offset ( iframe . offset ( ) ) [ 0 ] ; } ) ; } , _unblockFrames : function ( ) { if ( this . iframeBlocks ) { this . iframeBlocks . remove ( ) ; delete this . iframeBlocks ; } } , _blurActiveElement : function ( event ) { var activeElement = $ . ui . safeActiveElement ( this . document [ 0 ] ) , target = $ ( event . target ) ; if ( target . closest ( activeElement ) . length ) { return ; }
$ . ui . safeBlur ( activeElement ) ; } , _mouseStart : function ( event ) { var o = this . options ; this . helper = this . _createHelper ( event ) ; this . _addClass ( this . helper , "ui-draggable-dragging" ) ; this . _cacheHelperProportions ( ) ; if ( $ . ui . ddmanager ) { $ . ui . ddmanager . current = this ; }
this . _cacheMargins ( ) ; this . cssPosition = this . helper . css ( "position" ) ; this . scrollParent = this . helper . scrollParent ( true ) ; this . offsetParent = this . helper . offsetParent ( ) ; this . hasFixedAncestor = this . helper . parents ( ) . filter ( function ( ) { return $ ( this ) . css ( "position" ) === "fixed" ; } ) . length > 0 ; this . positionAbs = this . element . offset ( ) ; this . _refreshOffsets ( event ) ; this . originalPosition = this . position = this . _generatePosition ( event , false ) ; this . originalPageX = event . pageX ; this . originalPageY = event . pageY ; ( o . cursorAt && this . _adjustOffsetFromHelper ( o . cursorAt ) ) ; this . _setContainment ( ) ; if ( this . _trigger ( "start" , event ) === false ) { this . _clear ( ) ; return false ; }
this . _cacheHelperProportions ( ) ; if ( $ . ui . ddmanager && ! o . dropBehaviour ) { $ . ui . ddmanager . prepareOffsets ( this , event ) ; }
this . _mouseDrag ( event , true ) ; if ( $ . ui . ddmanager ) { $ . ui . ddmanager . dragStart ( this , event ) ; }
return true ; } , _refreshOffsets : function ( event ) { this . offset = { top : this . positionAbs . top - this . margins . top , left : this . positionAbs . left - this . margins . left , scroll : false , parent : this . _getParentOffset ( ) , relative : this . _getRelativeOffset ( ) } ; this . offset . click = { left : event . pageX - this . offset . left , top : event . pageY - this . offset . top } ; } , _mouseDrag : function ( event , noPropagation ) { if ( this . hasFixedAncestor ) { this . offset . parent = this . _getParentOffset ( ) ; }
this . position = this . _generatePosition ( event , true ) ; this . positionAbs = this . _convertPositionTo ( "absolute" ) ; if ( ! noPropagation ) { var ui = this . _uiHash ( ) ; if ( this . _trigger ( "drag" , event , ui ) === false ) { this . _mouseUp ( new $ . Event ( "mouseup" , event ) ) ; return false ; }
this . position = ui . position ; }
this . helper [ 0 ] . style . left = this . position . left + "px" ; this . helper [ 0 ] . style . top = this . position . top + "px" ; if ( $ . ui . ddmanager ) { $ . ui . ddmanager . drag ( this , event ) ; }
return false ; } , _mouseStop : function ( event ) { var that = this , dropped = false ; if ( $ . ui . ddmanager && ! this . options . dropBehaviour ) { dropped = $ . ui . ddmanager . drop ( this , event ) ; }
if ( this . dropped ) { dropped = this . dropped ; this . dropped = false ; }
if ( ( this . options . revert === "invalid" && ! dropped ) || ( this . options . revert === "valid" && dropped ) || this . options . revert === true || ( $ . isFunction ( this . options . revert ) && this . options . revert . call ( this . element , dropped ) ) ) { $ ( this . helper ) . animate ( this . originalPosition , parseInt ( this . options . revertDuration , 10 ) , function ( ) { if ( that . _trigger ( "stop" , event ) !== false ) { that . _clear ( ) ; } } ) ; } else { if ( this . _trigger ( "stop" , event ) !== false ) { this . _clear ( ) ; } }
return false ; } , _mouseUp : function ( event ) { this . _unblockFrames ( ) ; if ( $ . ui . ddmanager ) { $ . ui . ddmanager . dragStop ( this , event ) ; }
if ( this . handleElement . is ( event . target ) ) { this . element . trigger ( "focus" ) ; }
return $ . ui . mouse . prototype . _mouseUp . call ( this , event ) ; } , cancel : function ( ) { if ( this . helper . is ( ".ui-draggable-dragging" ) ) { this . _mouseUp ( new $ . Event ( "mouseup" , { target : this . element [ 0 ] } ) ) ; } else { this . _clear ( ) ; }
return this ; } , _getHandle : function ( event ) { return this . options . handle ? ! ! $ ( event . target ) . closest ( this . element . find ( this . options . handle ) ) . length : true ; } , _setHandleClassName : function ( ) { this . handleElement = this . options . handle ? this . element . find ( this . options . handle ) : this . element ; this . _addClass ( this . handleElement , "ui-draggable-handle" ) ; } , _removeHandleClassName : function ( ) { this . _removeClass ( this . handleElement , "ui-draggable-handle" ) ; } , _createHelper : function ( event ) { var o = this . options , helperIsFunction = $ . isFunction ( o . helper ) , helper = helperIsFunction ? $ ( o . helper . apply ( this . element [ 0 ] , [ event ] ) ) : ( o . helper === "clone" ? this . element . clone ( ) . removeAttr ( "id" ) : this . element ) ; if ( ! helper . parents ( "body" ) . length ) { helper . appendTo ( ( o . appendTo === "parent" ? this . element [ 0 ] . parentNode : o . appendTo ) ) ; }
if ( helperIsFunction && helper [ 0 ] === this . element [ 0 ] ) { this . _setPositionRelative ( ) ; }
if ( helper [ 0 ] !== this . element [ 0 ] && ! ( /(fixed|absolute)/ ) . test ( helper . css ( "position" ) ) ) { helper . css ( "position" , "absolute" ) ; }
return helper ; } , _setPositionRelative : function ( ) { if ( ! ( /^(?:r|a|f)/ ) . test ( this . element . css ( "position" ) ) ) { this . element [ 0 ] . style . position = "relative" ; } } , _adjustOffsetFromHelper : function ( obj ) { if ( typeof obj === "string" ) { obj = obj . split ( " " ) ; }
if ( $ . isArray ( obj ) ) { obj = { left : + obj [ 0 ] , top : + obj [ 1 ] || 0 } ; }
if ( "left" in obj ) { this . offset . click . left = obj . left + this . margins . left ; }
if ( "right" in obj ) { this . offset . click . left = this . helperProportions . width - obj . right + this . margins . left ; }
if ( "top" in obj ) { this . offset . click . top = obj . top + this . margins . top ; }
if ( "bottom" in obj ) { this . offset . click . top = this . helperProportions . height - obj . bottom + this . margins . top ; } } , _isRootNode : function ( element ) { return ( /(html|body)/i ) . test ( element . tagName ) || element === this . document [ 0 ] ; } , _getParentOffset : function ( ) { var po = this . offsetParent . offset ( ) , document = this . document [ 0 ] ; if ( this . cssPosition === "absolute" && this . scrollParent [ 0 ] !== document && $ . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) { po . left += this . scrollParent . scrollLeft ( ) ; po . top += this . scrollParent . scrollTop ( ) ; }
if ( this . _isRootNode ( this . offsetParent [ 0 ] ) ) { po = { top : 0 , left : 0 } ; }
return { top : po . top + ( parseInt ( this . offsetParent . css ( "borderTopWidth" ) , 10 ) || 0 ) , left : po . left + ( parseInt ( this . offsetParent . css ( "borderLeftWidth" ) , 10 ) || 0 ) } ; } , _getRelativeOffset : function ( ) { if ( this . cssPosition !== "relative" ) { return { top : 0 , left : 0 } ; }
var p = this . element . position ( ) , scrollIsRootNode = this . _isRootNode ( this . scrollParent [ 0 ] ) ; return { top : p . top - ( parseInt ( this . helper . css ( "top" ) , 10 ) || 0 ) +
( ! scrollIsRootNode ? this . scrollParent . scrollTop ( ) : 0 ) , left : p . left - ( parseInt ( this . helper . css ( "left" ) , 10 ) || 0 ) +
( ! scrollIsRootNode ? this . scrollParent . scrollLeft ( ) : 0 ) } ; } , _cacheMargins : function ( ) { this . margins = { left : ( parseInt ( this . element . css ( "marginLeft" ) , 10 ) || 0 ) , top : ( parseInt ( this . element . css ( "marginTop" ) , 10 ) || 0 ) , right : ( parseInt ( this . element . css ( "marginRight" ) , 10 ) || 0 ) , bottom : ( parseInt ( this . element . css ( "marginBottom" ) , 10 ) || 0 ) } ; } , _cacheHelperProportions : function ( ) { this . helperProportions = { width : this . helper . outerWidth ( ) , height : this . helper . outerHeight ( ) } ; } , _setContainment : function ( ) { var isUserScrollable , c , ce , o = this . options , document = this . document [ 0 ] ; this . relativeContainer = null ; if ( ! o . containment ) { this . containment = null ; return ; }
if ( o . containment === "window" ) { this . containment = [ $ ( window ) . scrollLeft ( ) - this . offset . relative . left - this . offset . parent . left , $ ( window ) . scrollTop ( ) - this . offset . relative . top - this . offset . parent . top , $ ( window ) . scrollLeft ( ) + $ ( window ) . width ( ) -
this . helperProportions . width - this . margins . left , $ ( window ) . scrollTop ( ) +
( $ ( window ) . height ( ) || document . body . parentNode . scrollHeight ) -
this . helperProportions . height - this . margins . top ] ; return ; }
if ( o . containment === "document" ) { this . containment = [ 0 , 0 , $ ( document ) . width ( ) - this . helperProportions . width - this . margins . left , ( $ ( document ) . height ( ) || document . body . parentNode . scrollHeight ) -
this . helperProportions . height - this . margins . top ] ; return ; }
if ( o . containment . constructor === Array ) { this . containment = o . containment ; return ; }
if ( o . containment === "parent" ) { o . containment = this . helper [ 0 ] . parentNode ; }
c = $ ( o . containment ) ; ce = c [ 0 ] ; if ( ! ce ) { return ; }
isUserScrollable = /(scroll|auto)/ . test ( c . css ( "overflow" ) ) ; this . containment = [ ( parseInt ( c . css ( "borderLeftWidth" ) , 10 ) || 0 ) +
( parseInt ( c . css ( "paddingLeft" ) , 10 ) || 0 ) , ( parseInt ( c . css ( "borderTopWidth" ) , 10 ) || 0 ) +
( parseInt ( c . css ( "paddingTop" ) , 10 ) || 0 ) , ( isUserScrollable ? Math . max ( ce . scrollWidth , ce . offsetWidth ) : ce . offsetWidth ) -
( parseInt ( c . css ( "borderRightWidth" ) , 10 ) || 0 ) -
( parseInt ( c . css ( "paddingRight" ) , 10 ) || 0 ) -
this . helperProportions . width -
this . margins . left -
this . margins . right , ( isUserScrollable ? Math . max ( ce . scrollHeight , ce . offsetHeight ) : ce . offsetHeight ) -
( parseInt ( c . css ( "borderBottomWidth" ) , 10 ) || 0 ) -
( parseInt ( c . css ( "paddingBottom" ) , 10 ) || 0 ) -
this . helperProportions . height -
this . margins . top -
this . margins . bottom ] ; this . relativeContainer = c ; } , _convertPositionTo : function ( d , pos ) { if ( ! pos ) { pos = this . position ; }
var mod = d === "absolute" ? 1 : - 1 , scrollIsRootNode = this . _isRootNode ( this . scrollParent [ 0 ] ) ; return { top : ( pos . top +
this . offset . relative . top * mod +
this . offset . parent . top * mod -
( ( this . cssPosition === "fixed" ? - this . offset . scroll . top : ( scrollIsRootNode ? 0 : this . offset . scroll . top ) ) * mod ) ) , left : ( pos . left +
this . offset . relative . left * mod +
this . offset . parent . left * mod -
( ( this . cssPosition === "fixed" ? - this . offset . scroll . left : ( scrollIsRootNode ? 0 : this . offset . scroll . left ) ) * mod ) ) } ; } , _generatePosition : function ( event , constrainPosition ) { var containment , co , top , left , o = this . options , scrollIsRootNode = this . _isRootNode ( this . scrollParent [ 0 ] ) , pageX = event . pageX , pageY = event . pageY ; if ( ! scrollIsRootNode || ! this . offset . scroll ) { this . offset . scroll = { top : this . scrollParent . scrollTop ( ) , left : this . scrollParent . scrollLeft ( ) } ; }
if ( constrainPosition ) { if ( this . containment ) { if ( this . relativeContainer ) { co = this . relativeContainer . offset ( ) ; containment = [ this . containment [ 0 ] + co . left , this . containment [ 1 ] + co . top , this . containment [ 2 ] + co . left , this . containment [ 3 ] + co . top ] ; } else { containment = this . containment ; }
if ( event . pageX - this . offset . click . left < containment [ 0 ] ) { pageX = containment [ 0 ] + this . offset . click . left ; }
if ( event . pageY - this . offset . click . top < containment [ 1 ] ) { pageY = containment [ 1 ] + this . offset . click . top ; }
if ( event . pageX - this . offset . click . left > containment [ 2 ] ) { pageX = containment [ 2 ] + this . offset . click . left ; }
if ( event . pageY - this . offset . click . top > containment [ 3 ] ) { pageY = containment [ 3 ] + this . offset . click . top ; } }
if ( o . grid ) { top = o . grid [ 1 ] ? this . originalPageY + Math . round ( ( pageY -
this . originalPageY ) / o . grid [ 1 ] ) * o . grid [ 1 ] : this . originalPageY ; pageY = containment ? ( ( top - this . offset . click . top >= containment [ 1 ] || top - this . offset . click . top > containment [ 3 ] ) ? top : ( ( top - this . offset . click . top >= containment [ 1 ] ) ? top - o . grid [ 1 ] : top + o . grid [ 1 ] ) ) : top ; left = o . grid [ 0 ] ? this . originalPageX +
Math . round ( ( pageX - this . originalPageX ) / o . grid [ 0 ] ) * o . grid [ 0 ] : this . originalPageX ; pageX = containment ? ( ( left - this . offset . click . left >= containment [ 0 ] || left - this . offset . click . left > containment [ 2 ] ) ? left : ( ( left - this . offset . click . left >= containment [ 0 ] ) ? left - o . grid [ 0 ] : left + o . grid [ 0 ] ) ) : left ; }
if ( o . axis === "y" ) { pageX = this . originalPageX ; }
if ( o . axis === "x" ) { pageY = this . originalPageY ; } }
return { top : ( pageY -
this . offset . click . top -
this . offset . relative . top -
this . offset . parent . top +
( this . cssPosition === "fixed" ? - this . offset . scroll . top : ( scrollIsRootNode ? 0 : this . offset . scroll . top ) ) ) , left : ( pageX -
this . offset . click . left -
this . offset . relative . left -
this . offset . parent . left +
( this . cssPosition === "fixed" ? - this . offset . scroll . left : ( scrollIsRootNode ? 0 : this . offset . scroll . left ) ) ) } ; } , _clear : function ( ) { this . _removeClass ( this . helper , "ui-draggable-dragging" ) ; if ( this . helper [ 0 ] !== this . element [ 0 ] && ! this . cancelHelperRemoval ) { this . helper . remove ( ) ; }
this . helper = null ; this . cancelHelperRemoval = false ; if ( this . destroyOnClear ) { this . destroy ( ) ; } } , _trigger : function ( type , event , ui ) { ui = ui || this . _uiHash ( ) ; $ . ui . plugin . call ( this , type , [ event , ui , this ] , true ) ; if ( /^(drag|start|stop)/ . test ( type ) ) { this . positionAbs = this . _convertPositionTo ( "absolute" ) ; ui . offset = this . positionAbs ; }
return $ . Widget . prototype . _trigger . call ( this , type , event , ui ) ; } , plugins : { } , _uiHash : function ( ) { return { helper : this . helper , position : this . position , originalPosition : this . originalPosition , offset : this . positionAbs } ; } } ) ; $ . ui . plugin . add ( "draggable" , "connectToSortable" , { start : function ( event , ui , draggable ) { var uiSortable = $ . extend ( { } , ui , { item : draggable . element } ) ; draggable . sortables = [ ] ; $ ( draggable . options . connectToSortable ) . each ( function ( ) { var sortable = $ ( this ) . sortable ( "instance" ) ; if ( sortable && ! sortable . options . disabled ) { draggable . sortables . push ( sortable ) ; sortable . refreshPositions ( ) ; sortable . _trigger ( "activate" , event , uiSortable ) ; } } ) ; } , stop : function ( event , ui , draggable ) { var uiSortable = $ . extend ( { } , ui , { item : draggable . element } ) ; draggable . cancelHelperRemoval = false ; $ . each ( draggable . sortables , function ( ) { var sortable = this ; if ( sortable . isOver ) { sortable . isOver = 0 ; draggable . cancelHelperRemoval = true ; sortable . cancelHelperRemoval = false ; sortable . _storedCSS = { position : sortable . placeholder . css ( "position" ) , top : sortable . placeholder . css ( "top" ) , left : sortable . placeholder . css ( "left" ) } ; sortable . _mouseStop ( event ) ; sortable . options . helper = sortable . options . _helper ; } else { sortable . cancelHelperRemoval = true ; sortable . _trigger ( "deactivate" , event , uiSortable ) ; } } ) ; } , drag : function ( event , ui , draggable ) { $ . each ( draggable . sortables , function ( ) { var innermostIntersecting = false , sortable = this ; sortable . positionAbs = draggable . positionAbs ; sortable . helperProportions = draggable . helperProportions ; sortable . offset . click = draggable . offset . click ; if ( sortable . _intersectsWith ( sortable . containerCache ) ) { innermostIntersecting = true ; $ . each ( draggable . sortables , function ( ) { this . positionAbs = draggable . positionAbs ; this . helperProportions = draggable . helperProportions ; this . offset . click = draggable . offset . click ; if ( this !== sortable && this . _intersectsWith ( this . containerCache ) && $ . contains ( sortable . element [ 0 ] , this . element [ 0 ] ) ) { innermostIntersecting = false ; }
return innermostIntersecting ; } ) ; }
if ( innermostIntersecting ) { if ( ! sortable . isOver ) { sortable . isOver = 1 ; draggable . _parent = ui . helper . parent ( ) ; sortable . currentItem = ui . helper . appendTo ( sortable . element ) . data ( "ui-sortable-item" , true ) ; sortable . options . _helper = sortable . options . helper ; sortable . options . helper = function ( ) { return ui . helper [ 0 ] ; } ; event . target = sortable . currentItem [ 0 ] ; sortable . _mouseCapture ( event , true ) ; sortable . _mouseStart ( event , true , true ) ; sortable . offset . click . top = draggable . offset . click . top ; sortable . offset . click . left = draggable . offset . click . left ; sortable . offset . parent . left -= draggable . offset . parent . left -
sortable . offset . parent . left ; sortable . offset . parent . top -= draggable . offset . parent . top -
sortable . offset . parent . top ; draggable . _trigger ( "toSortable" , event ) ; draggable . dropped = sortable . element ; $ . each ( draggable . sortables , function ( ) { this . refreshPositions ( ) ; } ) ; draggable . currentItem = draggable . element ; sortable . fromOutside = draggable ; }
if ( sortable . currentItem ) { sortable . _mouseDrag ( event ) ; ui . position = sortable . position ; } } else { if ( sortable . isOver ) { sortable . isOver = 0 ; sortable . cancelHelperRemoval = true ; sortable . options . _revert = sortable . options . revert ; sortable . options . revert = false ; sortable . _trigger ( "out" , event , sortable . _uiHash ( sortable ) ) ; sortable . _mouseStop ( event , true ) ; sortable . options . revert = sortable . options . _revert ; sortable . options . helper = sortable . options . _helper ; if ( sortable . placeholder ) { sortable . placeholder . remove ( ) ; }
ui . helper . appendTo ( draggable . _parent ) ; draggable . _refreshOffsets ( event ) ; ui . position = draggable . _generatePosition ( event , true ) ; draggable . _trigger ( "fromSortable" , event ) ; draggable . dropped = false ; $ . each ( draggable . sortables , function ( ) { this . refreshPositions ( ) ; } ) ; } } } ) ; } } ) ; $ . ui . plugin . add ( "draggable" , "cursor" , { start : function ( event , ui , instance ) { var t = $ ( "body" ) , o = instance . options ; if ( t . css ( "cursor" ) ) { o . _cursor = t . css ( "cursor" ) ; }
t . css ( "cursor" , o . cursor ) ; } , stop : function ( event , ui , instance ) { var o = instance . options ; if ( o . _cursor ) { $ ( "body" ) . css ( "cursor" , o . _cursor ) ; } } } ) ; $ . ui . plugin . add ( "draggable" , "opacity" , { start : function ( event , ui , instance ) { var t = $ ( ui . helper ) , o = instance . options ; if ( t . css ( "opacity" ) ) { o . _opacity = t . css ( "opacity" ) ; }
t . css ( "opacity" , o . opacity ) ; } , stop : function ( event , ui , instance ) { var o = instance . options ; if ( o . _opacity ) { $ ( ui . helper ) . css ( "opacity" , o . _opacity ) ; } } } ) ; $ . ui . plugin . add ( "draggable" , "scroll" , { start : function ( event , ui , i ) { if ( ! i . scrollParentNotHidden ) { i . scrollParentNotHidden = i . helper . scrollParent ( false ) ; }
if ( i . scrollParentNotHidden [ 0 ] !== i . document [ 0 ] && i . scrollParentNotHidden [ 0 ] . tagName !== "HTML" ) { i . overflowOffset = i . scrollParentNotHidden . offset ( ) ; } } , drag : function ( event , ui , i ) { var o = i . options , scrolled = false , scrollParent = i . scrollParentNotHidden [ 0 ] , document = i . document [ 0 ] ; if ( scrollParent !== document && scrollParent . tagName !== "HTML" ) { if ( ! o . axis || o . axis !== "x" ) { if ( ( i . overflowOffset . top + scrollParent . offsetHeight ) - event . pageY < o . scrollSensitivity ) { scrollParent . scrollTop = scrolled = scrollParent . scrollTop + o . scrollSpeed ; } else if ( event . pageY - i . overflowOffset . top < o . scrollSensitivity ) { scrollParent . scrollTop = scrolled = scrollParent . scrollTop - o . scrollSpeed ; } }
if ( ! o . axis || o . axis !== "y" ) { if ( ( i . overflowOffset . left + scrollParent . offsetWidth ) - event . pageX < o . scrollSensitivity ) { scrollParent . scrollLeft = scrolled = scrollParent . scrollLeft + o . scrollSpeed ; } else if ( event . pageX - i . overflowOffset . left < o . scrollSensitivity ) { scrollParent . scrollLeft = scrolled = scrollParent . scrollLeft - o . scrollSpeed ; } } } else { if ( ! o . axis || o . axis !== "x" ) { if ( event . pageY - $ ( document ) . scrollTop ( ) < o . scrollSensitivity ) { scrolled = $ ( document ) . scrollTop ( $ ( document ) . scrollTop ( ) - o . scrollSpeed ) ; } else if ( $ ( window ) . height ( ) - ( event . pageY - $ ( document ) . scrollTop ( ) ) < o . scrollSensitivity ) { scrolled = $ ( document ) . scrollTop ( $ ( document ) . scrollTop ( ) + o . scrollSpeed ) ; } }
if ( ! o . axis || o . axis !== "y" ) { if ( event . pageX - $ ( document ) . scrollLeft ( ) < o . scrollSensitivity ) { scrolled = $ ( document ) . scrollLeft ( $ ( document ) . scrollLeft ( ) - o . scrollSpeed ) ; } else if ( $ ( window ) . width ( ) - ( event . pageX - $ ( document ) . scrollLeft ( ) ) < o . scrollSensitivity ) { scrolled = $ ( document ) . scrollLeft ( $ ( document ) . scrollLeft ( ) + o . scrollSpeed ) ; } } }
if ( scrolled !== false && $ . ui . ddmanager && ! o . dropBehaviour ) { $ . ui . ddmanager . prepareOffsets ( i , event ) ; } } } ) ; $ . ui . plugin . add ( "draggable" , "snap" , { start : function ( event , ui , i ) { var o = i . options ; i . snapElements = [ ] ; $ ( o . snap . constructor !== String ? ( o . snap . items || ":data(ui-draggable)" ) : o . snap ) . each ( function ( ) { var $t = $ ( this ) , $o = $t . offset ( ) ; if ( this !== i . element [ 0 ] ) { i . snapElements . push ( { item : this , width : $t . outerWidth ( ) , height : $t . outerHeight ( ) , top : $o . top , left : $o . left } ) ; } } ) ; } , drag : function ( event , ui , inst ) { var ts , bs , ls , rs , l , r , t , b , i , first , o = inst . options , d = o . snapTolerance , x1 = ui . offset . left , x2 = x1 + inst . helperProportions . width , y1 = ui . offset . top , y2 = y1 + inst . helperProportions . height ; for ( i = inst . snapElements . length - 1 ; i >= 0 ; i -- ) { l = inst . snapElements [ i ] . left - inst . margins . left ; r = l + inst . snapElements [ i ] . width ; t = inst . snapElements [ i ] . top - inst . margins . top ; b = t + inst . snapElements [ i ] . height ; if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || ! $ . contains ( inst . snapElements [ i ] . item . ownerDocument , inst . snapElements [ i ] . item ) ) { if ( inst . snapElements [ i ] . snapping ) { ( inst . options . snap . release && inst . options . snap . release . call ( inst . element , event , $ . extend ( inst . _uiHash ( ) , { snapItem : inst . snapElements [ i ] . item } ) ) ) ; }
inst . snapElements [ i ] . snapping = false ; continue ; }
if ( o . snapMode !== "inner" ) { ts = Math . abs ( t - y2 ) <= d ; bs = Math . abs ( b - y1 ) <= d ; ls = Math . abs ( l - x2 ) <= d ; rs = Math . abs ( r - x1 ) <= d ; if ( ts ) { ui . position . top = inst . _convertPositionTo ( "relative" , { top : t - inst . helperProportions . height , left : 0 } ) . top ; }
if ( bs ) { ui . position . top = inst . _convertPositionTo ( "relative" , { top : b , left : 0 } ) . top ; }
if ( ls ) { ui . position . left = inst . _convertPositionTo ( "relative" , { top : 0 , left : l - inst . helperProportions . width } ) . left ; }
if ( rs ) { ui . position . left = inst . _convertPositionTo ( "relative" , { top : 0 , left : r } ) . left ; } }
first = ( ts || bs || ls || rs ) ; if ( o . snapMode !== "outer" ) { ts = Math . abs ( t - y1 ) <= d ; bs = Math . abs ( b - y2 ) <= d ; ls = Math . abs ( l - x1 ) <= d ; rs = Math . abs ( r - x2 ) <= d ; if ( ts ) { ui . position . top = inst . _convertPositionTo ( "relative" , { top : t , left : 0 } ) . top ; }
if ( bs ) { ui . position . top = inst . _convertPositionTo ( "relative" , { top : b - inst . helperProportions . height , left : 0 } ) . top ; }
if ( ls ) { ui . position . left = inst . _convertPositionTo ( "relative" , { top : 0 , left : l } ) . left ; }
if ( rs ) { ui . position . left = inst . _convertPositionTo ( "relative" , { top : 0 , left : r - inst . helperProportions . width } ) . left ; } }
if ( ! inst . snapElements [ i ] . snapping && ( ts || bs || ls || rs || first ) ) { ( inst . options . snap . snap && inst . options . snap . snap . call ( inst . element , event , $ . extend ( inst . _uiHash ( ) , { snapItem : inst . snapElements [ i ] . item } ) ) ) ; }
inst . snapElements [ i ] . snapping = ( ts || bs || ls || rs || first ) ; } } } ) ; $ . ui . plugin . add ( "draggable" , "stack" , { start : function ( event , ui , instance ) { var min , o = instance . options , group = $ . makeArray ( $ ( o . stack ) ) . sort ( function ( a , b ) { return ( parseInt ( $ ( a ) . css ( "zIndex" ) , 10 ) || 0 ) -
( parseInt ( $ ( b ) . css ( "zIndex" ) , 10 ) || 0 ) ; } ) ; if ( ! group . length ) { return ; }
min = parseInt ( $ ( group [ 0 ] ) . css ( "zIndex" ) , 10 ) || 0 ; $ ( group ) . each ( function ( i ) { $ ( this ) . css ( "zIndex" , min + i ) ; } ) ; this . css ( "zIndex" , ( min + group . length ) ) ; } } ) ; $ . ui . plugin . add ( "draggable" , "zIndex" , { start : function ( event , ui , instance ) { var t = $ ( ui . helper ) , o = instance . options ; if ( t . css ( "zIndex" ) ) { o . _zIndex = t . css ( "zIndex" ) ; }
t . css ( "zIndex" , o . zIndex ) ; } , stop : function ( event , ui , instance ) { var o = instance . options ; if ( o . _zIndex ) { $ ( ui . helper ) . css ( "zIndex" , o . _zIndex ) ; } } } ) ; var widgetsDraggable = $ . ui . draggable ; / * !
* jQuery UI Resizable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.resizable" , $ . ui . mouse , { version : "1.12.1" , widgetEventPrefix : "resize" , options : { alsoResize : false , animate : false , animateDuration : "slow" , animateEasing : "swing" , aspectRatio : false , autoHide : false , classes : { "ui-resizable-se" : "ui-icon ui-icon-gripsmall-diagonal-se" } , containment : false , ghost : false , grid : false , handles : "e,s,se" , helper : false , maxHeight : null , maxWidth : null , minHeight : 10 , minWidth : 10 , zIndex : 90 , resize : null , start : null , stop : null } , _num : function ( value ) { return parseFloat ( value ) || 0 ; } , _isNumber : function ( value ) { return ! isNaN ( parseFloat ( value ) ) ; } , _hasScroll : function ( el , a ) { if ( $ ( el ) . css ( "overflow" ) === "hidden" ) { return false ; }
var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop" , has = false ; if ( el [ scroll ] > 0 ) { return true ; }
el [ scroll ] = 1 ; has = ( el [ scroll ] > 0 ) ; el [ scroll ] = 0 ; return has ; } , _create : function ( ) { var margins , o = this . options , that = this ; this . _addClass ( "ui-resizable" ) ; $ . extend ( this , { _aspectRatio : ! ! ( o . aspectRatio ) , aspectRatio : o . aspectRatio , originalElement : this . element , _proportionallyResizeElements : [ ] , _helper : o . helper || o . ghost || o . animate ? o . helper || "ui-resizable-helper" : null } ) ; if ( this . element [ 0 ] . nodeName . match ( /^(canvas|textarea|input|select|button|img)$/i ) ) { this . element . wrap ( $ ( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ) . css ( { position : this . element . css ( "position" ) , width : this . element . outerWidth ( ) , height : this . element . outerHeight ( ) , top : this . element . css ( "top" ) , left : this . element . css ( "left" ) } ) ) ; this . element = this . element . parent ( ) . data ( "ui-resizable" , this . element . resizable ( "instance" ) ) ; this . elementIsWrapper = true ; margins = { marginTop : this . originalElement . css ( "marginTop" ) , marginRight : this . originalElement . css ( "marginRight" ) , marginBottom : this . originalElement . css ( "marginBottom" ) , marginLeft : this . originalElement . css ( "marginLeft" ) } ; this . element . css ( margins ) ; this . originalElement . css ( "margin" , 0 ) ; this . originalResizeStyle = this . originalElement . css ( "resize" ) ; this . originalElement . css ( "resize" , "none" ) ; this . _proportionallyResizeElements . push ( this . originalElement . css ( { position : "static" , zoom : 1 , display : "block" } ) ) ; this . originalElement . css ( margins ) ; this . _proportionallyResize ( ) ; }
this . _setupHandles ( ) ; if ( o . autoHide ) { $ ( this . element ) . on ( "mouseenter" , function ( ) { if ( o . disabled ) { return ; }
that . _removeClass ( "ui-resizable-autohide" ) ; that . _handles . show ( ) ; } ) . on ( "mouseleave" , function ( ) { if ( o . disabled ) { return ; }
if ( ! that . resizing ) { that . _addClass ( "ui-resizable-autohide" ) ; that . _handles . hide ( ) ; } } ) ; }
this . _mouseInit ( ) ; } , _destroy : function ( ) { this . _mouseDestroy ( ) ; var wrapper , _destroy = function ( exp ) { $ ( exp ) . removeData ( "resizable" ) . removeData ( "ui-resizable" ) . off ( ".resizable" ) . find ( ".ui-resizable-handle" ) . remove ( ) ; } ; if ( this . elementIsWrapper ) { _destroy ( this . element ) ; wrapper = this . element ; this . originalElement . css ( { position : wrapper . css ( "position" ) , width : wrapper . outerWidth ( ) , height : wrapper . outerHeight ( ) , top : wrapper . css ( "top" ) , left : wrapper . css ( "left" ) } ) . insertAfter ( wrapper ) ; wrapper . remove ( ) ; }
this . originalElement . css ( "resize" , this . originalResizeStyle ) ; _destroy ( this . originalElement ) ; return this ; } , _setOption : function ( key , value ) { this . _super ( key , value ) ; switch ( key ) { case "handles" : this . _removeHandles ( ) ; this . _setupHandles ( ) ; break ; default : break ; } } , _setupHandles : function ( ) { var o = this . options , handle , i , n , hname , axis , that = this ; this . handles = o . handles || ( ! $ ( ".ui-resizable-handle" , this . element ) . length ? "e,s,se" : { n : ".ui-resizable-n" , e : ".ui-resizable-e" , s : ".ui-resizable-s" , w : ".ui-resizable-w" , se : ".ui-resizable-se" , sw : ".ui-resizable-sw" , ne : ".ui-resizable-ne" , nw : ".ui-resizable-nw" } ) ; this . _handles = $ ( ) ; if ( this . handles . constructor === String ) { if ( this . handles === "all" ) { this . handles = "n,e,s,w,se,sw,ne,nw" ; }
n = this . handles . split ( "," ) ; this . handles = { } ; for ( i = 0 ; i < n . length ; i ++ ) { handle = $ . trim ( n [ i ] ) ; hname = "ui-resizable-" + handle ; axis = $ ( "<div>" ) ; this . _addClass ( axis , "ui-resizable-handle " + hname ) ; axis . css ( { zIndex : o . zIndex } ) ; this . handles [ handle ] = ".ui-resizable-" + handle ; this . element . append ( axis ) ; } }
this . _renderAxis = function ( target ) { var i , axis , padPos , padWrapper ; target = target || this . element ; for ( i in this . handles ) { if ( this . handles [ i ] . constructor === String ) { this . handles [ i ] = this . element . children ( this . handles [ i ] ) . first ( ) . show ( ) ; } else if ( this . handles [ i ] . jquery || this . handles [ i ] . nodeType ) { this . handles [ i ] = $ ( this . handles [ i ] ) ; this . _on ( this . handles [ i ] , { "mousedown" : that . _mouseDown } ) ; }
if ( this . elementIsWrapper && this . originalElement [ 0 ] . nodeName . match ( /^(textarea|input|select|button)$/i ) ) { axis = $ ( this . handles [ i ] , this . element ) ; padWrapper = /sw|ne|nw|se|n|s/ . test ( i ) ? axis . outerHeight ( ) : axis . outerWidth ( ) ; padPos = [ "padding" , /ne|nw|n/ . test ( i ) ? "Top" : /se|sw|s/ . test ( i ) ? "Bottom" : /^e$/ . test ( i ) ? "Right" : "Left" ] . join ( "" ) ; target . css ( padPos , padWrapper ) ; this . _proportionallyResize ( ) ; }
this . _handles = this . _handles . add ( this . handles [ i ] ) ; } } ; this . _renderAxis ( this . element ) ; this . _handles = this . _handles . add ( this . element . find ( ".ui-resizable-handle" ) ) ; this . _handles . disableSelection ( ) ; this . _handles . on ( "mouseover" , function ( ) { if ( ! that . resizing ) { if ( this . className ) { axis = this . className . match ( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i ) ; }
that . axis = axis && axis [ 1 ] ? axis [ 1 ] : "se" ; } } ) ; if ( o . autoHide ) { this . _handles . hide ( ) ; this . _addClass ( "ui-resizable-autohide" ) ; } } , _removeHandles : function ( ) { this . _handles . remove ( ) ; } , _mouseCapture : function ( event ) { var i , handle , capture = false ; for ( i in this . handles ) { handle = $ ( this . handles [ i ] ) [ 0 ] ; if ( handle === event . target || $ . contains ( handle , event . target ) ) { capture = true ; } }
return ! this . options . disabled && capture ; } , _mouseStart : function ( event ) { var curleft , curtop , cursor , o = this . options , el = this . element ; this . resizing = true ; this . _renderProxy ( ) ; curleft = this . _num ( this . helper . css ( "left" ) ) ; curtop = this . _num ( this . helper . css ( "top" ) ) ; if ( o . containment ) { curleft += $ ( o . containment ) . scrollLeft ( ) || 0 ; curtop += $ ( o . containment ) . scrollTop ( ) || 0 ; }
this . offset = this . helper . offset ( ) ; this . position = { left : curleft , top : curtop } ; this . size = this . _helper ? { width : this . helper . width ( ) , height : this . helper . height ( ) } : { width : el . width ( ) , height : el . height ( ) } ; this . originalSize = this . _helper ? { width : el . outerWidth ( ) , height : el . outerHeight ( ) } : { width : el . width ( ) , height : el . height ( ) } ; this . sizeDiff = { width : el . outerWidth ( ) - el . width ( ) , height : el . outerHeight ( ) - el . height ( ) } ; this . originalPosition = { left : curleft , top : curtop } ; this . originalMousePosition = { left : event . pageX , top : event . pageY } ; this . aspectRatio = ( typeof o . aspectRatio === "number" ) ? o . aspectRatio : ( ( this . originalSize . width / this . originalSize . height ) || 1 ) ; cursor = $ ( ".ui-resizable-" + this . axis ) . css ( "cursor" ) ; $ ( "body" ) . css ( "cursor" , cursor === "auto" ? this . axis + "-resize" : cursor ) ; this . _addClass ( "ui-resizable-resizing" ) ; this . _propagate ( "start" , event ) ; return true ; } , _mouseDrag : function ( event ) { var data , props , smp = this . originalMousePosition , a = this . axis , dx = ( event . pageX - smp . left ) || 0 , dy = ( event . pageY - smp . top ) || 0 , trigger = this . _change [ a ] ; this . _updatePrevProperties ( ) ; if ( ! trigger ) { return false ; }
data = trigger . apply ( this , [ event , dx , dy ] ) ; this . _updateVirtualBoundaries ( event . shiftKey ) ; if ( this . _aspectRatio || event . shiftKey ) { data = this . _updateRatio ( data , event ) ; }
data = this . _respectSize ( data , event ) ; this . _updateCache ( data ) ; this . _propagate ( "resize" , event ) ; props = this . _applyChanges ( ) ; if ( ! this . _helper && this . _proportionallyResizeElements . length ) { this . _proportionallyResize ( ) ; }
if ( ! $ . isEmptyObject ( props ) ) { this . _updatePrevProperties ( ) ; this . _trigger ( "resize" , event , this . ui ( ) ) ; this . _applyChanges ( ) ; }
return false ; } , _mouseStop : function ( event ) { this . resizing = false ; var pr , ista , soffseth , soffsetw , s , left , top , o = this . options , that = this ; if ( this . _helper ) { pr = this . _proportionallyResizeElements ; ista = pr . length && ( /textarea/i ) . test ( pr [ 0 ] . nodeName ) ; soffseth = ista && this . _hasScroll ( pr [ 0 ] , "left" ) ? 0 : that . sizeDiff . height ; soffsetw = ista ? 0 : that . sizeDiff . width ; s = { width : ( that . helper . width ( ) - soffsetw ) , height : ( that . helper . height ( ) - soffseth ) } ; left = ( parseFloat ( that . element . css ( "left" ) ) +
( that . position . left - that . originalPosition . left ) ) || null ; top = ( parseFloat ( that . element . css ( "top" ) ) +
( that . position . top - that . originalPosition . top ) ) || null ; if ( ! o . animate ) { this . element . css ( $ . extend ( s , { top : top , left : left } ) ) ; }
that . helper . height ( that . size . height ) ; that . helper . width ( that . size . width ) ; if ( this . _helper && ! o . animate ) { this . _proportionallyResize ( ) ; } }
$ ( "body" ) . css ( "cursor" , "auto" ) ; this . _removeClass ( "ui-resizable-resizing" ) ; this . _propagate ( "stop" , event ) ; if ( this . _helper ) { this . helper . remove ( ) ; }
return false ; } , _updatePrevProperties : function ( ) { this . prevPosition = { top : this . position . top , left : this . position . left } ; this . prevSize = { width : this . size . width , height : this . size . height } ; } , _applyChanges : function ( ) { var props = { } ; if ( this . position . top !== this . prevPosition . top ) { props . top = this . position . top + "px" ; }
if ( this . position . left !== this . prevPosition . left ) { props . left = this . position . left + "px" ; }
if ( this . size . width !== this . prevSize . width ) { props . width = this . size . width + "px" ; }
if ( this . size . height !== this . prevSize . height ) { props . height = this . size . height + "px" ; }
this . helper . css ( props ) ; return props ; } , _updateVirtualBoundaries : function ( forceAspectRatio ) { var pMinWidth , pMaxWidth , pMinHeight , pMaxHeight , b , o = this . options ; b = { minWidth : this . _isNumber ( o . minWidth ) ? o . minWidth : 0 , maxWidth : this . _isNumber ( o . maxWidth ) ? o . maxWidth : Infinity , minHeight : this . _isNumber ( o . minHeight ) ? o . minHeight : 0 , maxHeight : this . _isNumber ( o . maxHeight ) ? o . maxHeight : Infinity } ; if ( this . _aspectRatio || forceAspectRatio ) { pMinWidth = b . minHeight * this . aspectRatio ; pMinHeight = b . minWidth / this . aspectRatio ; pMaxWidth = b . maxHeight * this . aspectRatio ; pMaxHeight = b . maxWidth / this . aspectRatio ; if ( pMinWidth > b . minWidth ) { b . minWidth = pMinWidth ; }
if ( pMinHeight > b . minHeight ) { b . minHeight = pMinHeight ; }
if ( pMaxWidth < b . maxWidth ) { b . maxWidth = pMaxWidth ; }
if ( pMaxHeight < b . maxHeight ) { b . maxHeight = pMaxHeight ; } }
this . _vBoundaries = b ; } , _updateCache : function ( data ) { this . offset = this . helper . offset ( ) ; if ( this . _isNumber ( data . left ) ) { this . position . left = data . left ; }
if ( this . _isNumber ( data . top ) ) { this . position . top = data . top ; }
if ( this . _isNumber ( data . height ) ) { this . size . height = data . height ; }
if ( this . _isNumber ( data . width ) ) { this . size . width = data . width ; } } , _updateRatio : function ( data ) { var cpos = this . position , csize = this . size , a = this . axis ; if ( this . _isNumber ( data . height ) ) { data . width = ( data . height * this . aspectRatio ) ; } else if ( this . _isNumber ( data . width ) ) { data . height = ( data . width / this . aspectRatio ) ; }
if ( a === "sw" ) { data . left = cpos . left + ( csize . width - data . width ) ; data . top = null ; }
if ( a === "nw" ) { data . top = cpos . top + ( csize . height - data . height ) ; data . left = cpos . left + ( csize . width - data . width ) ; }
return data ; } , _respectSize : function ( data ) { var o = this . _vBoundaries , a = this . axis , ismaxw = this . _isNumber ( data . width ) && o . maxWidth && ( o . maxWidth < data . width ) , ismaxh = this . _isNumber ( data . height ) && o . maxHeight && ( o . maxHeight < data . height ) , isminw = this . _isNumber ( data . width ) && o . minWidth && ( o . minWidth > data . width ) , isminh = this . _isNumber ( data . height ) && o . minHeight && ( o . minHeight > data . height ) , dw = this . originalPosition . left + this . originalSize . width , dh = this . originalPosition . top + this . originalSize . height , cw = /sw|nw|w/ . test ( a ) , ch = /nw|ne|n/ . test ( a ) ; if ( isminw ) { data . width = o . minWidth ; }
if ( isminh ) { data . height = o . minHeight ; }
if ( ismaxw ) { data . width = o . maxWidth ; }
if ( ismaxh ) { data . height = o . maxHeight ; }
if ( isminw && cw ) { data . left = dw - o . minWidth ; }
if ( ismaxw && cw ) { data . left = dw - o . maxWidth ; }
if ( isminh && ch ) { data . top = dh - o . minHeight ; }
if ( ismaxh && ch ) { data . top = dh - o . maxHeight ; }
if ( ! data . width && ! data . height && ! data . left && data . top ) { data . top = null ; } else if ( ! data . width && ! data . height && ! data . top && data . left ) { data . left = null ; }
return data ; } , _getPaddingPlusBorderDimensions : function ( element ) { var i = 0 , widths = [ ] , borders = [ element . css ( "borderTopWidth" ) , element . css ( "borderRightWidth" ) , element . css ( "borderBottomWidth" ) , element . css ( "borderLeftWidth" ) ] , paddings = [ element . css ( "paddingTop" ) , element . css ( "paddingRight" ) , element . css ( "paddingBottom" ) , element . css ( "paddingLeft" ) ] ; for ( ; i < 4 ; i ++ ) { widths [ i ] = ( parseFloat ( borders [ i ] ) || 0 ) ; widths [ i ] += ( parseFloat ( paddings [ i ] ) || 0 ) ; }
return { height : widths [ 0 ] + widths [ 2 ] , width : widths [ 1 ] + widths [ 3 ] } ; } , _proportionallyResize : function ( ) { if ( ! this . _proportionallyResizeElements . length ) { return ; }
var prel , i = 0 , element = this . helper || this . element ; for ( ; i < this . _proportionallyResizeElements . length ; i ++ ) { prel = this . _proportionallyResizeElements [ i ] ; if ( ! this . outerDimensions ) { this . outerDimensions = this . _getPaddingPlusBorderDimensions ( prel ) ; }
prel . css ( { height : ( element . height ( ) - this . outerDimensions . height ) || 0 , width : ( element . width ( ) - this . outerDimensions . width ) || 0 } ) ; } } , _renderProxy : function ( ) { var el = this . element , o = this . options ; this . elementOffset = el . offset ( ) ; if ( this . _helper ) { this . helper = this . helper || $ ( "<div style='overflow:hidden;'></div>" ) ; this . _addClass ( this . helper , this . _helper ) ; this . helper . css ( { width : this . element . outerWidth ( ) , height : this . element . outerHeight ( ) , position : "absolute" , left : this . elementOffset . left + "px" , top : this . elementOffset . top + "px" , zIndex : ++ o . zIndex } ) ; this . helper . appendTo ( "body" ) . disableSelection ( ) ; } else { this . helper = this . element ; } } , _change : { e : function ( event , dx ) { return { width : this . originalSize . width + dx } ; } , w : function ( event , dx ) { var cs = this . originalSize , sp = this . originalPosition ; return { left : sp . left + dx , width : cs . width - dx } ; } , n : function ( event , dx , dy ) { var cs = this . originalSize , sp = this . originalPosition ; return { top : sp . top + dy , height : cs . height - dy } ; } , s : function ( event , dx , dy ) { return { height : this . originalSize . height + dy } ; } , se : function ( event , dx , dy ) { return $ . extend ( this . _change . s . apply ( this , arguments ) , this . _change . e . apply ( this , [ event , dx , dy ] ) ) ; } , sw : function ( event , dx , dy ) { return $ . extend ( this . _change . s . apply ( this , arguments ) , this . _change . w . apply ( this , [ event , dx , dy ] ) ) ; } , ne : function ( event , dx , dy ) { return $ . extend ( this . _change . n . apply ( this , arguments ) , this . _change . e . apply ( this , [ event , dx , dy ] ) ) ; } , nw : function ( event , dx , dy ) { return $ . extend ( this . _change . n . apply ( this , arguments ) , this . _change . w . apply ( this , [ event , dx , dy ] ) ) ; } } , _propagate : function ( n , event ) { $ . ui . plugin . call ( this , n , [ event , this . ui ( ) ] ) ; ( n !== "resize" && this . _trigger ( n , event , this . ui ( ) ) ) ; } , plugins : { } , ui : function ( ) { return { originalElement : this . originalElement , element : this . element , helper : this . helper , position : this . position , size : this . size , originalSize : this . originalSize , originalPosition : this . originalPosition } ; } } ) ; $ . ui . plugin . add ( "resizable" , "animate" , { stop : function ( event ) { var that = $ ( this ) . resizable ( "instance" ) , o = that . options , pr = that . _proportionallyResizeElements , ista = pr . length && ( /textarea/i ) . test ( pr [ 0 ] . nodeName ) , soffseth = ista && that . _hasScroll ( pr [ 0 ] , "left" ) ? 0 : that . sizeDiff . height , soffsetw = ista ? 0 : that . sizeDiff . width , style = { width : ( that . size . width - soffsetw ) , height : ( that . size . height - soffseth ) } , left = ( parseFloat ( that . element . css ( "left" ) ) +
( that . position . left - that . originalPosition . left ) ) || null , top = ( parseFloat ( that . element . css ( "top" ) ) +
( that . position . top - that . originalPosition . top ) ) || null ; that . element . animate ( $ . extend ( style , top && left ? { top : top , left : left } : { } ) , { duration : o . animateDuration , easing : o . animateEasing , step : function ( ) { var data = { width : parseFloat ( that . element . css ( "width" ) ) , height : parseFloat ( that . element . css ( "height" ) ) , top : parseFloat ( that . element . css ( "top" ) ) , left : parseFloat ( that . element . css ( "left" ) ) } ; if ( pr && pr . length ) { $ ( pr [ 0 ] ) . css ( { width : data . width , height : data . height } ) ; }
that . _updateCache ( data ) ; that . _propagate ( "resize" , event ) ; } } ) ; } } ) ; $ . ui . plugin . add ( "resizable" , "containment" , { start : function ( ) { var element , p , co , ch , cw , width , height , that = $ ( this ) . resizable ( "instance" ) , o = that . options , el = that . element , oc = o . containment , ce = ( oc instanceof $ ) ? oc . get ( 0 ) : ( /parent/ . test ( oc ) ) ? el . parent ( ) . get ( 0 ) : oc ; if ( ! ce ) { return ; }
that . containerElement = $ ( ce ) ; if ( /document/ . test ( oc ) || oc === document ) { that . containerOffset = { left : 0 , top : 0 } ; that . containerPosition = { left : 0 , top : 0 } ; that . parentData = { element : $ ( document ) , left : 0 , top : 0 , width : $ ( document ) . width ( ) , height : $ ( document ) . height ( ) || document . body . parentNode . scrollHeight } ; } else { element = $ ( ce ) ; p = [ ] ; $ ( [ "Top" , "Right" , "Left" , "Bottom" ] ) . each ( function ( i , name ) { p [ i ] = that . _num ( element . css ( "padding" + name ) ) ; } ) ; that . containerOffset = element . offset ( ) ; that . containerPosition = element . position ( ) ; that . containerSize = { height : ( element . innerHeight ( ) - p [ 3 ] ) , width : ( element . innerWidth ( ) - p [ 1 ] ) } ; co = that . containerOffset ; ch = that . containerSize . height ; cw = that . containerSize . width ; width = ( that . _hasScroll ( ce , "left" ) ? ce . scrollWidth : cw ) ; height = ( that . _hasScroll ( ce ) ? ce . scrollHeight : ch ) ; that . parentData = { element : ce , left : co . left , top : co . top , width : width , height : height } ; } } , resize : function ( event ) { var woset , hoset , isParent , isOffsetRelative , that = $ ( this ) . resizable ( "instance" ) , o = that . options , co = that . containerOffset , cp = that . position , pRatio = that . _aspectRatio || event . shiftKey , cop = { top : 0 , left : 0 } , ce = that . containerElement , continueResize = true ; if ( ce [ 0 ] !== document && ( /static/ ) . test ( ce . css ( "position" ) ) ) { cop = co ; }
if ( cp . left < ( that . _helper ? co . left : 0 ) ) { that . size . width = that . size . width +
( that . _helper ? ( that . position . left - co . left ) : ( that . position . left - cop . left ) ) ; if ( pRatio ) { that . size . height = that . size . width / that . aspectRatio ; continueResize = false ; }
that . position . left = o . helper ? co . left : 0 ; }
if ( cp . top < ( that . _helper ? co . top : 0 ) ) { that . size . height = that . size . height +
( that . _helper ? ( that . position . top - co . top ) : that . position . top ) ; if ( pRatio ) { that . size . width = that . size . height * that . aspectRatio ; continueResize = false ; }
that . position . top = that . _helper ? co . top : 0 ; }
isParent = that . containerElement . get ( 0 ) === that . element . parent ( ) . get ( 0 ) ; isOffsetRelative = /relative|absolute/ . test ( that . containerElement . css ( "position" ) ) ; if ( isParent && isOffsetRelative ) { that . offset . left = that . parentData . left + that . position . left ; that . offset . top = that . parentData . top + that . position . top ; } else { that . offset . left = that . element . offset ( ) . left ; that . offset . top = that . element . offset ( ) . top ; }
woset = Math . abs ( that . sizeDiff . width +
( that . _helper ? that . offset . left - cop . left : ( that . offset . left - co . left ) ) ) ; hoset = Math . abs ( that . sizeDiff . height +
( that . _helper ? that . offset . top - cop . top : ( that . offset . top - co . top ) ) ) ; if ( woset + that . size . width >= that . parentData . width ) { that . size . width = that . parentData . width - woset ; if ( pRatio ) { that . size . height = that . size . width / that . aspectRatio ; continueResize = false ; } }
if ( hoset + that . size . height >= that . parentData . height ) { that . size . height = that . parentData . height - hoset ; if ( pRatio ) { that . size . width = that . size . height * that . aspectRatio ; continueResize = false ; } }
if ( ! continueResize ) { that . position . left = that . prevPosition . left ; that . position . top = that . prevPosition . top ; that . size . width = that . prevSize . width ; that . size . height = that . prevSize . height ; } } , stop : function ( ) { var that = $ ( this ) . resizable ( "instance" ) , o = that . options , co = that . containerOffset , cop = that . containerPosition , ce = that . containerElement , helper = $ ( that . helper ) , ho = helper . offset ( ) , w = helper . outerWidth ( ) - that . sizeDiff . width , h = helper . outerHeight ( ) - that . sizeDiff . height ; if ( that . _helper && ! o . animate && ( /relative/ ) . test ( ce . css ( "position" ) ) ) { $ ( this ) . css ( { left : ho . left - cop . left - co . left , width : w , height : h } ) ; }
if ( that . _helper && ! o . animate && ( /static/ ) . test ( ce . css ( "position" ) ) ) { $ ( this ) . css ( { left : ho . left - cop . left - co . left , width : w , height : h } ) ; } } } ) ; $ . ui . plugin . add ( "resizable" , "alsoResize" , { start : function ( ) { var that = $ ( this ) . resizable ( "instance" ) , o = that . options ; $ ( o . alsoResize ) . each ( function ( ) { var el = $ ( this ) ; el . data ( "ui-resizable-alsoresize" , { width : parseFloat ( el . width ( ) ) , height : parseFloat ( el . height ( ) ) , left : parseFloat ( el . css ( "left" ) ) , top : parseFloat ( el . css ( "top" ) ) } ) ; } ) ; } , resize : function ( event , ui ) { var that = $ ( this ) . resizable ( "instance" ) , o = that . options , os = that . originalSize , op = that . originalPosition , delta = { height : ( that . size . height - os . height ) || 0 , width : ( that . size . width - os . width ) || 0 , top : ( that . position . top - op . top ) || 0 , left : ( that . position . left - op . left ) || 0 } ; $ ( o . alsoResize ) . each ( function ( ) { var el = $ ( this ) , start = $ ( this ) . data ( "ui-resizable-alsoresize" ) , style = { } , css = el . parents ( ui . originalElement [ 0 ] ) . length ? [ "width" , "height" ] : [ "width" , "height" , "top" , "left" ] ; $ . each ( css , function ( i , prop ) { var sum = ( start [ prop ] || 0 ) + ( delta [ prop ] || 0 ) ; if ( sum && sum >= 0 ) { style [ prop ] = sum || null ; } } ) ; el . css ( style ) ; } ) ; } , stop : function ( ) { $ ( this ) . removeData ( "ui-resizable-alsoresize" ) ; } } ) ; $ . ui . plugin . add ( "resizable" , "ghost" , { start : function ( ) { var that = $ ( this ) . resizable ( "instance" ) , cs = that . size ; that . ghost = that . originalElement . clone ( ) ; that . ghost . css ( { opacity : 0.25 , display : "block" , position : "relative" , height : cs . height , width : cs . width , margin : 0 , left : 0 , top : 0 } ) ; that . _addClass ( that . ghost , "ui-resizable-ghost" ) ; if ( $ . uiBackCompat !== false && typeof that . options . ghost === "string" ) { that . ghost . addClass ( this . options . ghost ) ; }
that . ghost . appendTo ( that . helper ) ; } , resize : function ( ) { var that = $ ( this ) . resizable ( "instance" ) ; if ( that . ghost ) { that . ghost . css ( { position : "relative" , height : that . size . height , width : that . size . width } ) ; } } , stop : function ( ) { var that = $ ( this ) . resizable ( "instance" ) ; if ( that . ghost && that . helper ) { that . helper . get ( 0 ) . removeChild ( that . ghost . get ( 0 ) ) ; } } } ) ; $ . ui . plugin . add ( "resizable" , "grid" , { resize : function ( ) { var outerDimensions , that = $ ( this ) . resizable ( "instance" ) , o = that . options , cs = that . size , os = that . originalSize , op = that . originalPosition , a = that . axis , grid = typeof o . grid === "number" ? [ o . grid , o . grid ] : o . grid , gridX = ( grid [ 0 ] || 1 ) , gridY = ( grid [ 1 ] || 1 ) , ox = Math . round ( ( cs . width - os . width ) / gridX ) * gridX , oy = Math . round ( ( cs . height - os . height ) / gridY ) * gridY , newWidth = os . width + ox , newHeight = os . height + oy , isMaxWidth = o . maxWidth && ( o . maxWidth < newWidth ) , isMaxHeight = o . maxHeight && ( o . maxHeight < newHeight ) , isMinWidth = o . minWidth && ( o . minWidth > newWidth ) , isMinHeight = o . minHeight && ( o . minHeight > newHeight ) ; o . grid = grid ; if ( isMinWidth ) { newWidth += gridX ; }
if ( isMinHeight ) { newHeight += gridY ; }
if ( isMaxWidth ) { newWidth -= gridX ; }
if ( isMaxHeight ) { newHeight -= gridY ; }
if ( /^(se|s|e)$/ . test ( a ) ) { that . size . width = newWidth ; that . size . height = newHeight ; } else if ( /^(ne)$/ . test ( a ) ) { that . size . width = newWidth ; that . size . height = newHeight ; that . position . top = op . top - oy ; } else if ( /^(sw)$/ . test ( a ) ) { that . size . width = newWidth ; that . size . height = newHeight ; that . position . left = op . left - ox ; } else { if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) { outerDimensions = that . _getPaddingPlusBorderDimensions ( this ) ; }
if ( newHeight - gridY > 0 ) { that . size . height = newHeight ; that . position . top = op . top - oy ; } else { newHeight = gridY - outerDimensions . height ; that . size . height = newHeight ; that . position . top = op . top + os . height - newHeight ; }
if ( newWidth - gridX > 0 ) { that . size . width = newWidth ; that . position . left = op . left - ox ; } else { newWidth = gridX - outerDimensions . width ; that . size . width = newWidth ; that . position . left = op . left + os . width - newWidth ; } } } } ) ; var widgetsResizable = $ . ui . resizable ; / * !
* jQuery UI Dialog 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.dialog" , { version : "1.12.1" , options : { appendTo : "body" , autoOpen : true , buttons : [ ] , classes : { "ui-dialog" : "ui-corner-all" , "ui-dialog-titlebar" : "ui-corner-all" } , closeOnEscape : true , closeText : "Close" , draggable : true , hide : null , height : "auto" , maxHeight : null , maxWidth : null , minHeight : 150 , minWidth : 150 , modal : false , position : { my : "center" , at : "center" , of : window , collision : "fit" , using : function ( pos ) { var topOffset = $ ( this ) . css ( pos ) . offset ( ) . top ; if ( topOffset < 0 ) { $ ( this ) . css ( "top" , pos . top - topOffset ) ; } } } , resizable : true , show : null , title : null , width : 300 , beforeClose : null , close : null , drag : null , dragStart : null , dragStop : null , focus : null , open : null , resize : null , resizeStart : null , resizeStop : null } , sizeRelatedOptions : { buttons : true , height : true , maxHeight : true , maxWidth : true , minHeight : true , minWidth : true , width : true } , resizableRelatedOptions : { maxHeight : true , maxWidth : true , minHeight : true , minWidth : true } , _create : function ( ) { this . originalCss = { display : this . element [ 0 ] . style . display , width : this . element [ 0 ] . style . width , minHeight : this . element [ 0 ] . style . minHeight , maxHeight : this . element [ 0 ] . style . maxHeight , height : this . element [ 0 ] . style . height } ; this . originalPosition = { parent : this . element . parent ( ) , index : this . element . parent ( ) . children ( ) . index ( this . element ) } ; this . originalTitle = this . element . attr ( "title" ) ; if ( this . options . title == null && this . originalTitle != null ) { this . options . title = this . originalTitle ; }
if ( this . options . disabled ) { this . options . disabled = false ; }
this . _createWrapper ( ) ; this . element . show ( ) . removeAttr ( "title" ) . appendTo ( this . uiDialog ) ; this . _addClass ( "ui-dialog-content" , "ui-widget-content" ) ; this . _createTitlebar ( ) ; this . _createButtonPane ( ) ; if ( this . options . draggable && $ . fn . draggable ) { this . _makeDraggable ( ) ; }
if ( this . options . resizable && $ . fn . resizable ) { this . _makeResizable ( ) ; }
this . _isOpen = false ; this . _trackFocus ( ) ; } , _init : function ( ) { if ( this . options . autoOpen ) { this . open ( ) ; } } , _appendTo : function ( ) { var element = this . options . appendTo ; if ( element && ( element . jquery || element . nodeType ) ) { return $ ( element ) ; }
return this . document . find ( element || "body" ) . eq ( 0 ) ; } , _destroy : function ( ) { var next , originalPosition = this . originalPosition ; this . _untrackInstance ( ) ; this . _destroyOverlay ( ) ; this . element . removeUniqueId ( ) . css ( this . originalCss )
. detach ( ) ; this . uiDialog . remove ( ) ; if ( this . originalTitle ) { this . element . attr ( "title" , this . originalTitle ) ; }
next = originalPosition . parent . children ( ) . eq ( originalPosition . index ) ; if ( next . length && next [ 0 ] !== this . element [ 0 ] ) { next . before ( this . element ) ; } else { originalPosition . parent . append ( this . element ) ; } } , widget : function ( ) { return this . uiDialog ; } , disable : $ . noop , enable : $ . noop , close : function ( event ) { var that = this ; if ( ! this . _isOpen || this . _trigger ( "beforeClose" , event ) === false ) { return ; }
this . _isOpen = false ; this . _focusedElement = null ; this . _destroyOverlay ( ) ; this . _untrackInstance ( ) ; if ( ! this . opener . filter ( ":focusable" ) . trigger ( "focus" ) . length ) { $ . ui . safeBlur ( $ . ui . safeActiveElement ( this . document [ 0 ] ) ) ; }
this . _hide ( this . uiDialog , this . options . hide , function ( ) { that . _trigger ( "close" , event ) ; } ) ; } , isOpen : function ( ) { return this . _isOpen ; } , moveToTop : function ( ) { this . _moveToTop ( ) ; } , _moveToTop : function ( event , silent ) { var moved = false , zIndices = this . uiDialog . siblings ( ".ui-front:visible" ) . map ( function ( ) { return + $ ( this ) . css ( "z-index" ) ; } ) . get ( ) , zIndexMax = Math . max . apply ( null , zIndices ) ; if ( zIndexMax >= + this . uiDialog . css ( "z-index" ) ) { this . uiDialog . css ( "z-index" , zIndexMax + 1 ) ; moved = true ; }
if ( moved && ! silent ) { this . _trigger ( "focus" , event ) ; }
return moved ; } , open : function ( ) { var that = this ; if ( this . _isOpen ) { if ( this . _moveToTop ( ) ) { this . _focusTabbable ( ) ; }
return ; }
this . _isOpen = true ; this . opener = $ ( $ . ui . safeActiveElement ( this . document [ 0 ] ) ) ; this . _size ( ) ; this . _position ( ) ; this . _createOverlay ( ) ; this . _moveToTop ( null , true ) ; if ( this . overlay ) { this . overlay . css ( "z-index" , this . uiDialog . css ( "z-index" ) - 1 ) ; }
this . _show ( this . uiDialog , this . options . show , function ( ) { that . _focusTabbable ( ) ; that . _trigger ( "focus" ) ; } ) ; this . _makeFocusTarget ( ) ; this . _trigger ( "open" ) ; } , _focusTabbable : function ( ) { var hasFocus = this . _focusedElement ; if ( ! hasFocus ) { hasFocus = this . element . find ( "[autofocus]" ) ; }
if ( ! hasFocus . length ) { hasFocus = this . element . find ( ":tabbable" ) ; }
if ( ! hasFocus . length ) { hasFocus = this . uiDialogButtonPane . find ( ":tabbable" ) ; }
if ( ! hasFocus . length ) { hasFocus = this . uiDialogTitlebarClose . filter ( ":tabbable" ) ; }
if ( ! hasFocus . length ) { hasFocus = this . uiDialog ; }
hasFocus . eq ( 0 ) . trigger ( "focus" ) ; } , _keepFocus : function ( event ) { function checkFocus ( ) { var activeElement = $ . ui . safeActiveElement ( this . document [ 0 ] ) , isActive = this . uiDialog [ 0 ] === activeElement || $ . contains ( this . uiDialog [ 0 ] , activeElement ) ; if ( ! isActive ) { this . _focusTabbable ( ) ; } }
event . preventDefault ( ) ; checkFocus . call ( this ) ; this . _delay ( checkFocus ) ; } , _createWrapper : function ( ) { this . uiDialog = $ ( "<div>" ) . hide ( ) . attr ( { tabIndex : - 1 , role : "dialog" } ) . appendTo ( this . _appendTo ( ) ) ; this . _addClass ( this . uiDialog , "ui-dialog" , "ui-widget ui-widget-content ui-front" ) ; this . _on ( this . uiDialog , { keydown : function ( event ) { if ( this . options . closeOnEscape && ! event . isDefaultPrevented ( ) && event . keyCode && event . keyCode === $ . ui . keyCode . ESCAPE ) { event . preventDefault ( ) ; this . close ( event ) ; return ; }
if ( event . keyCode !== $ . ui . keyCode . TAB || event . isDefaultPrevented ( ) ) { return ; }
var tabbables = this . uiDialog . find ( ":tabbable" ) , first = tabbables . filter ( ":first" ) , last = tabbables . filter ( ":last" ) ; if ( ( event . target === last [ 0 ] || event . target === this . uiDialog [ 0 ] ) && ! event . shiftKey ) { this . _delay ( function ( ) { first . trigger ( "focus" ) ; } ) ; event . preventDefault ( ) ; } else if ( ( event . target === first [ 0 ] || event . target === this . uiDialog [ 0 ] ) && event . shiftKey ) { this . _delay ( function ( ) { last . trigger ( "focus" ) ; } ) ; event . preventDefault ( ) ; } } , mousedown : function ( event ) { if ( this . _moveToTop ( event ) ) { this . _focusTabbable ( ) ; } } } ) ; if ( ! this . element . find ( "[aria-describedby]" ) . length ) { this . uiDialog . attr ( { "aria-describedby" : this . element . uniqueId ( ) . attr ( "id" ) } ) ; } } , _createTitlebar : function ( ) { var uiDialogTitle ; this . uiDialogTitlebar = $ ( "<div>" ) ; this . _addClass ( this . uiDialogTitlebar , "ui-dialog-titlebar" , "ui-widget-header ui-helper-clearfix" ) ; this . _on ( this . uiDialogTitlebar , { mousedown : function ( event ) { if ( ! $ ( event . target ) . closest ( ".ui-dialog-titlebar-close" ) ) { this . uiDialog . trigger ( "focus" ) ; } } } ) ; this . uiDialogTitlebarClose = $ ( "<button type='button'></button>" ) . button ( { label : $ ( "<a>" ) . text ( this . options . closeText ) . html ( ) , icon : "ui-icon-closethick" , showLabel : false } ) . appendTo ( this . uiDialogTitlebar ) ; this . _addClass ( this . uiDialogTitlebarClose , "ui-dialog-titlebar-close" ) ; this . _on ( this . uiDialogTitlebarClose , { click : function ( event ) { event . preventDefault ( ) ; this . close ( event ) ; } } ) ; uiDialogTitle = $ ( "<span>" ) . uniqueId ( ) . prependTo ( this . uiDialogTitlebar ) ; this . _addClass ( uiDialogTitle , "ui-dialog-title" ) ; this . _title ( uiDialogTitle ) ; this . uiDialogTitlebar . prependTo ( this . uiDialog ) ; this . uiDialog . attr ( { "aria-labelledby" : uiDialogTitle . attr ( "id" ) } ) ; } , _title : function ( title ) { if ( this . options . title ) { title . text ( this . options . title ) ; } else { title . html ( " " ) ; } } , _createButtonPane : function ( ) { this . uiDialogButtonPane = $ ( "<div>" ) ; this . _addClass ( this . uiDialogButtonPane , "ui-dialog-buttonpane" , "ui-widget-content ui-helper-clearfix" ) ; this . uiButtonSet = $ ( "<div>" ) . appendTo ( this . uiDialogButtonPane ) ; this . _addClass ( this . uiButtonSet , "ui-dialog-buttonset" ) ; this . _createButtons ( ) ; } , _createButtons : function ( ) { var that = this , buttons = this . options . buttons ; this . uiDialogButtonPane . remove ( ) ; this . uiButtonSet . empty ( ) ; if ( $ . isEmptyObject ( buttons ) || ( $ . isArray ( buttons ) && ! buttons . length ) ) { this . _removeClass ( this . uiDialog , "ui-dialog-buttons" ) ; return ; }
$ . each ( buttons , function ( name , props ) { var click , buttonOptions ; props = $ . isFunction ( props ) ? { click : props , text : name } : props ; props = $ . extend ( { type : "button" } , props ) ; click = props . click ; buttonOptions = { icon : props . icon , iconPosition : props . iconPosition , showLabel : props . showLabel , icons : props . icons , text : props . text } ; delete props . click ; delete props . icon ; delete props . iconPosition ; delete props . showLabel ; delete props . icons ; if ( typeof props . text === "boolean" ) { delete props . text ; }
$ ( "<button></button>" , props ) . button ( buttonOptions ) . appendTo ( that . uiButtonSet ) . on ( "click" , function ( ) { click . apply ( that . element [ 0 ] , arguments ) ; } ) ; } ) ; this . _addClass ( this . uiDialog , "ui-dialog-buttons" ) ; this . uiDialogButtonPane . appendTo ( this . uiDialog ) ; } , _makeDraggable : function ( ) { var that = this , options = this . options ; function filteredUi ( ui ) { return { position : ui . position , offset : ui . offset } ; }
this . uiDialog . draggable ( { cancel : ".ui-dialog-content, .ui-dialog-titlebar-close" , handle : ".ui-dialog-titlebar" , containment : "document" , start : function ( event , ui ) { that . _addClass ( $ ( this ) , "ui-dialog-dragging" ) ; that . _blockFrames ( ) ; that . _trigger ( "dragStart" , event , filteredUi ( ui ) ) ; } , drag : function ( event , ui ) { that . _trigger ( "drag" , event , filteredUi ( ui ) ) ; } , stop : function ( event , ui ) { var left = ui . offset . left - that . document . scrollLeft ( ) , top = ui . offset . top - that . document . scrollTop ( ) ; options . position = { my : "left top" , at : "left" + ( left >= 0 ? "+" : "" ) + left + " " +
"top" + ( top >= 0 ? "+" : "" ) + top , of : that . window } ; that . _removeClass ( $ ( this ) , "ui-dialog-dragging" ) ; that . _unblockFrames ( ) ; that . _trigger ( "dragStop" , event , filteredUi ( ui ) ) ; } } ) ; } , _makeResizable : function ( ) { var that = this , options = this . options , handles = options . resizable , position = this . uiDialog . css ( "position" ) , resizeHandles = typeof handles === "string" ? handles : "n,e,s,w,se,sw,ne,nw" ; function filteredUi ( ui ) { return { originalPosition : ui . originalPosition , originalSize : ui . originalSize , position : ui . position , size : ui . size } ; }
this . uiDialog . resizable ( { cancel : ".ui-dialog-content" , containment : "document" , alsoResize : this . element , maxWidth : options . maxWidth , maxHeight : options . maxHeight , minWidth : options . minWidth , minHeight : this . _minHeight ( ) , handles : resizeHandles , start : function ( event , ui ) { that . _addClass ( $ ( this ) , "ui-dialog-resizing" ) ; that . _blockFrames ( ) ; that . _trigger ( "resizeStart" , event , filteredUi ( ui ) ) ; } , resize : function ( event , ui ) { that . _trigger ( "resize" , event , filteredUi ( ui ) ) ; } , stop : function ( event , ui ) { var offset = that . uiDialog . offset ( ) , left = offset . left - that . document . scrollLeft ( ) , top = offset . top - that . document . scrollTop ( ) ; options . height = that . uiDialog . height ( ) ; options . width = that . uiDialog . width ( ) ; options . position = { my : "left top" , at : "left" + ( left >= 0 ? "+" : "" ) + left + " " +
"top" + ( top >= 0 ? "+" : "" ) + top , of : that . window } ; that . _removeClass ( $ ( this ) , "ui-dialog-resizing" ) ; that . _unblockFrames ( ) ; that . _trigger ( "resizeStop" , event , filteredUi ( ui ) ) ; } } ) . css ( "position" , position ) ; } , _trackFocus : function ( ) { this . _on ( this . widget ( ) , { focusin : function ( event ) { this . _makeFocusTarget ( ) ; this . _focusedElement = $ ( event . target ) ; } } ) ; } , _makeFocusTarget : function ( ) { this . _untrackInstance ( ) ; this . _trackingInstances ( ) . unshift ( this ) ; } , _untrackInstance : function ( ) { var instances = this . _trackingInstances ( ) , exists = $ . inArray ( this , instances ) ; if ( exists !== - 1 ) { instances . splice ( exists , 1 ) ; } } , _trackingInstances : function ( ) { var instances = this . document . data ( "ui-dialog-instances" ) ; if ( ! instances ) { instances = [ ] ; this . document . data ( "ui-dialog-instances" , instances ) ; }
return instances ; } , _minHeight : function ( ) { var options = this . options ; return options . height === "auto" ? options . minHeight : Math . min ( options . minHeight , options . height ) ; } , _position : function ( ) { var isVisible = this . uiDialog . is ( ":visible" ) ; if ( ! isVisible ) { this . uiDialog . show ( ) ; }
this . uiDialog . position ( this . options . position ) ; if ( ! isVisible ) { this . uiDialog . hide ( ) ; } } , _setOptions : function ( options ) { var that = this , resize = false , resizableOptions = { } ; $ . each ( options , function ( key , value ) { that . _setOption ( key , value ) ; if ( key in that . sizeRelatedOptions ) { resize = true ; }
if ( key in that . resizableRelatedOptions ) { resizableOptions [ key ] = value ; } } ) ; if ( resize ) { this . _size ( ) ; this . _position ( ) ; }
if ( this . uiDialog . is ( ":data(ui-resizable)" ) ) { this . uiDialog . resizable ( "option" , resizableOptions ) ; } } , _setOption : function ( key , value ) { var isDraggable , isResizable , uiDialog = this . uiDialog ; if ( key === "disabled" ) { return ; }
this . _super ( key , value ) ; if ( key === "appendTo" ) { this . uiDialog . appendTo ( this . _appendTo ( ) ) ; }
if ( key === "buttons" ) { this . _createButtons ( ) ; }
if ( key === "closeText" ) { this . uiDialogTitlebarClose . button ( { label : $ ( "<a>" ) . text ( "" + this . options . closeText ) . html ( ) } ) ; }
if ( key === "draggable" ) { isDraggable = uiDialog . is ( ":data(ui-draggable)" ) ; if ( isDraggable && ! value ) { uiDialog . draggable ( "destroy" ) ; }
if ( ! isDraggable && value ) { this . _makeDraggable ( ) ; } }
if ( key === "position" ) { this . _position ( ) ; }
if ( key === "resizable" ) { isResizable = uiDialog . is ( ":data(ui-resizable)" ) ; if ( isResizable && ! value ) { uiDialog . resizable ( "destroy" ) ; }
if ( isResizable && typeof value === "string" ) { uiDialog . resizable ( "option" , "handles" , value ) ; }
if ( ! isResizable && value !== false ) { this . _makeResizable ( ) ; } }
if ( key === "title" ) { this . _title ( this . uiDialogTitlebar . find ( ".ui-dialog-title" ) ) ; } } , _size : function ( ) { var nonContentHeight , minContentHeight , maxContentHeight , options = this . options ; this . element . show ( ) . css ( { width : "auto" , minHeight : 0 , maxHeight : "none" , height : 0 } ) ; if ( options . minWidth > options . width ) { options . width = options . minWidth ; }
nonContentHeight = this . uiDialog . css ( { height : "auto" , width : options . width } ) . outerHeight ( ) ; minContentHeight = Math . max ( 0 , options . minHeight - nonContentHeight ) ; maxContentHeight = typeof options . maxHeight === "number" ? Math . max ( 0 , options . maxHeight - nonContentHeight ) : "none" ; if ( options . height === "auto" ) { this . element . css ( { minHeight : minContentHeight , maxHeight : maxContentHeight , height : "auto" } ) ; } else { this . element . height ( Math . max ( 0 , options . height - nonContentHeight ) ) ; }
if ( this . uiDialog . is ( ":data(ui-resizable)" ) ) { this . uiDialog . resizable ( "option" , "minHeight" , this . _minHeight ( ) ) ; } } , _blockFrames : function ( ) { this . iframeBlocks = this . document . find ( "iframe" ) . map ( function ( ) { var iframe = $ ( this ) ; return $ ( "<div>" ) . css ( { position : "absolute" , width : iframe . outerWidth ( ) , height : iframe . outerHeight ( ) } ) . appendTo ( iframe . parent ( ) ) . offset ( iframe . offset ( ) ) [ 0 ] ; } ) ; } , _unblockFrames : function ( ) { if ( this . iframeBlocks ) { this . iframeBlocks . remove ( ) ; delete this . iframeBlocks ; } } , _allowInteraction : function ( event ) { if ( $ ( event . target ) . closest ( ".ui-dialog" ) . length ) { return true ; }
return ! ! $ ( event . target ) . closest ( ".ui-datepicker" ) . length ; } , _createOverlay : function ( ) { if ( ! this . options . modal ) { return ; }
var isOpening = true ; this . _delay ( function ( ) { isOpening = false ; } ) ; if ( ! this . document . data ( "ui-dialog-overlays" ) ) { this . _on ( this . document , { focusin : function ( event ) { if ( isOpening ) { return ; }
if ( ! this . _allowInteraction ( event ) ) { event . preventDefault ( ) ; this . _trackingInstances ( ) [ 0 ] . _focusTabbable ( ) ; } } } ) ; }
this . overlay = $ ( "<div>" ) . appendTo ( this . _appendTo ( ) ) ; this . _addClass ( this . overlay , null , "ui-widget-overlay ui-front" ) ; this . _on ( this . overlay , { mousedown : "_keepFocus" } ) ; this . document . data ( "ui-dialog-overlays" , ( this . document . data ( "ui-dialog-overlays" ) || 0 ) + 1 ) ; } , _destroyOverlay : function ( ) { if ( ! this . options . modal ) { return ; }
if ( this . overlay ) { var overlays = this . document . data ( "ui-dialog-overlays" ) - 1 ; if ( ! overlays ) { this . _off ( this . document , "focusin" ) ; this . document . removeData ( "ui-dialog-overlays" ) ; } else { this . document . data ( "ui-dialog-overlays" , overlays ) ; }
this . overlay . remove ( ) ; this . overlay = null ; } } } ) ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.dialog" , $ . ui . dialog , { options : { dialogClass : "" } , _createWrapper : function ( ) { this . _super ( ) ; this . uiDialog . addClass ( this . options . dialogClass ) ; } , _setOption : function ( key , value ) { if ( key === "dialogClass" ) { this . uiDialog . removeClass ( this . options . dialogClass ) . addClass ( value ) ; }
this . _superApply ( arguments ) ; } } ) ; }
var widgetsDialog = $ . ui . dialog ; / * !
* jQuery UI Droppable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.droppable" , { version : "1.12.1" , widgetEventPrefix : "drop" , options : { accept : "*" , addClasses : true , greedy : false , scope : "default" , tolerance : "intersect" , activate : null , deactivate : null , drop : null , out : null , over : null } , _create : function ( ) { var proportions , o = this . options , accept = o . accept ; this . isover = false ; this . isout = true ; this . accept = $ . isFunction ( accept ) ? accept : function ( d ) { return d . is ( accept ) ; } ; this . proportions = function ( ) { if ( arguments . length ) { proportions = arguments [ 0 ] ; } else { return proportions ? proportions : proportions = { width : this . element [ 0 ] . offsetWidth , height : this . element [ 0 ] . offsetHeight } ; } } ; this . _addToManager ( o . scope ) ; o . addClasses && this . _addClass ( "ui-droppable" ) ; } , _addToManager : function ( scope ) { $ . ui . ddmanager . droppables [ scope ] = $ . ui . ddmanager . droppables [ scope ] || [ ] ; $ . ui . ddmanager . droppables [ scope ] . push ( this ) ; } , _splice : function ( drop ) { var i = 0 ; for ( ; i < drop . length ; i ++ ) { if ( drop [ i ] === this ) { drop . splice ( i , 1 ) ; } } } , _destroy : function ( ) { var drop = $ . ui . ddmanager . droppables [ this . options . scope ] ; this . _splice ( drop ) ; } , _setOption : function ( key , value ) { if ( key === "accept" ) { this . accept = $ . isFunction ( value ) ? value : function ( d ) { return d . is ( value ) ; } ; } else if ( key === "scope" ) { var drop = $ . ui . ddmanager . droppables [ this . options . scope ] ; this . _splice ( drop ) ; this . _addToManager ( value ) ; }
this . _super ( key , value ) ; } , _activate : function ( event ) { var draggable = $ . ui . ddmanager . current ; this . _addActiveClass ( ) ; if ( draggable ) { this . _trigger ( "activate" , event , this . ui ( draggable ) ) ; } } , _deactivate : function ( event ) { var draggable = $ . ui . ddmanager . current ; this . _removeActiveClass ( ) ; if ( draggable ) { this . _trigger ( "deactivate" , event , this . ui ( draggable ) ) ; } } , _over : function ( event ) { var draggable = $ . ui . ddmanager . current ; if ( ! draggable || ( draggable . currentItem || draggable . element ) [ 0 ] === this . element [ 0 ] ) { return ; }
if ( this . accept . call ( this . element [ 0 ] , ( draggable . currentItem || draggable . element ) ) ) { this . _addHoverClass ( ) ; this . _trigger ( "over" , event , this . ui ( draggable ) ) ; } } , _out : function ( event ) { var draggable = $ . ui . ddmanager . current ; if ( ! draggable || ( draggable . currentItem || draggable . element ) [ 0 ] === this . element [ 0 ] ) { return ; }
if ( this . accept . call ( this . element [ 0 ] , ( draggable . currentItem || draggable . element ) ) ) { this . _removeHoverClass ( ) ; this . _trigger ( "out" , event , this . ui ( draggable ) ) ; } } , _drop : function ( event , custom ) { var draggable = custom || $ . ui . ddmanager . current , childrenIntersection = false ; if ( ! draggable || ( draggable . currentItem || draggable . element ) [ 0 ] === this . element [ 0 ] ) { return false ; }
this . element . find ( ":data(ui-droppable)" ) . not ( ".ui-draggable-dragging" ) . each ( function ( ) { var inst = $ ( this ) . droppable ( "instance" ) ; if ( inst . options . greedy && ! inst . options . disabled && inst . options . scope === draggable . options . scope && inst . accept . call ( inst . element [ 0 ] , ( draggable . currentItem || draggable . element ) ) && intersect ( draggable , $ . extend ( inst , { offset : inst . element . offset ( ) } ) , inst . options . tolerance , event ) ) { childrenIntersection = true ; return false ; } } ) ; if ( childrenIntersection ) { return false ; }
if ( this . accept . call ( this . element [ 0 ] , ( draggable . currentItem || draggable . element ) ) ) { this . _removeActiveClass ( ) ; this . _removeHoverClass ( ) ; this . _trigger ( "drop" , event , this . ui ( draggable ) ) ; return this . element ; }
return false ; } , ui : function ( c ) { return { draggable : ( c . currentItem || c . element ) , helper : c . helper , position : c . position , offset : c . positionAbs } ; } , _addHoverClass : function ( ) { this . _addClass ( "ui-droppable-hover" ) ; } , _removeHoverClass : function ( ) { this . _removeClass ( "ui-droppable-hover" ) ; } , _addActiveClass : function ( ) { this . _addClass ( "ui-droppable-active" ) ; } , _removeActiveClass : function ( ) { this . _removeClass ( "ui-droppable-active" ) ; } } ) ; var intersect = $ . ui . intersect = ( function ( ) { function isOverAxis ( x , reference , size ) { return ( x >= reference ) && ( x < ( reference + size ) ) ; }
return function ( draggable , droppable , toleranceMode , event ) { if ( ! droppable . offset ) { return false ; }
var x1 = ( draggable . positionAbs || draggable . position . absolute ) . left + draggable . margins . left , y1 = ( draggable . positionAbs || draggable . position . absolute ) . top + draggable . margins . top , x2 = x1 + draggable . helperProportions . width , y2 = y1 + draggable . helperProportions . height , l = droppable . offset . left , t = droppable . offset . top , r = l + droppable . proportions ( ) . width , b = t + droppable . proportions ( ) . height ; switch ( toleranceMode ) { case "fit" : return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b ) ; case "intersect" : return ( l < x1 + ( draggable . helperProportions . width / 2 ) && x2 - ( draggable . helperProportions . width / 2 ) < r && t < y1 + ( draggable . helperProportions . height / 2 ) && y2 - ( draggable . helperProportions . height / 2 ) < b ) ; case "pointer" : return isOverAxis ( event . pageY , t , droppable . proportions ( ) . height ) && isOverAxis ( event . pageX , l , droppable . proportions ( ) . width ) ; case "touch" : return ( ( y1 >= t && y1 <= b ) || ( y2 >= t && y2 <= b ) || ( y1 < t && y2 > b ) ) && ( ( x1 >= l && x1 <= r ) || ( x2 >= l && x2 <= r ) || ( x1 < l && x2 > r ) ) ; default : return false ; } } ; } ) ( ) ; $ . ui . ddmanager = { current : null , droppables : { "default" : [ ] } , prepareOffsets : function ( t , event ) { var i , j , m = $ . ui . ddmanager . droppables [ t . options . scope ] || [ ] , type = event ? event . type : null , list = ( t . currentItem || t . element ) . find ( ":data(ui-droppable)" ) . addBack ( ) ; droppablesLoop : for ( i = 0 ; i < m . length ; i ++ ) { if ( m [ i ] . options . disabled || ( t && ! m [ i ] . accept . call ( m [ i ] . element [ 0 ] , ( t . currentItem || t . element ) ) ) ) { continue ; }
for ( j = 0 ; j < list . length ; j ++ ) { if ( list [ j ] === m [ i ] . element [ 0 ] ) { m [ i ] . proportions ( ) . height = 0 ; continue droppablesLoop ; } }
m [ i ] . visible = m [ i ] . element . css ( "display" ) !== "none" ; if ( ! m [ i ] . visible ) { continue ; }
if ( type === "mousedown" ) { m [ i ] . _activate . call ( m [ i ] , event ) ; }
m [ i ] . offset = m [ i ] . element . offset ( ) ; m [ i ] . proportions ( { width : m [ i ] . element [ 0 ] . offsetWidth , height : m [ i ] . element [ 0 ] . offsetHeight } ) ; } } , drop : function ( draggable , event ) { var dropped = false ; $ . each ( ( $ . ui . ddmanager . droppables [ draggable . options . scope ] || [ ] ) . slice ( ) , function ( ) { if ( ! this . options ) { return ; }
if ( ! this . options . disabled && this . visible && intersect ( draggable , this , this . options . tolerance , event ) ) { dropped = this . _drop . call ( this , event ) || dropped ; }
if ( ! this . options . disabled && this . visible && this . accept . call ( this . element [ 0 ] , ( draggable . currentItem || draggable . element ) ) ) { this . isout = true ; this . isover = false ; this . _deactivate . call ( this , event ) ; } } ) ; return dropped ; } , dragStart : function ( draggable , event ) { draggable . element . parentsUntil ( "body" ) . on ( "scroll.droppable" , function ( ) { if ( ! draggable . options . refreshPositions ) { $ . ui . ddmanager . prepareOffsets ( draggable , event ) ; } } ) ; } , drag : function ( draggable , event ) { if ( draggable . options . refreshPositions ) { $ . ui . ddmanager . prepareOffsets ( draggable , event ) ; }
$ . each ( $ . ui . ddmanager . droppables [ draggable . options . scope ] || [ ] , function ( ) { if ( this . options . disabled || this . greedyChild || ! this . visible ) { return ; }
var parentInstance , scope , parent , intersects = intersect ( draggable , this , this . options . tolerance , event ) , c = ! intersects && this . isover ? "isout" : ( intersects && ! this . isover ? "isover" : null ) ; if ( ! c ) { return ; }
if ( this . options . greedy ) { scope = this . options . scope ; parent = this . element . parents ( ":data(ui-droppable)" ) . filter ( function ( ) { return $ ( this ) . droppable ( "instance" ) . options . scope === scope ; } ) ; if ( parent . length ) { parentInstance = $ ( parent [ 0 ] ) . droppable ( "instance" ) ; parentInstance . greedyChild = ( c === "isover" ) ; } }
if ( parentInstance && c === "isover" ) { parentInstance . isover = false ; parentInstance . isout = true ; parentInstance . _out . call ( parentInstance , event ) ; }
this [ c ] = true ; this [ c === "isout" ? "isover" : "isout" ] = false ; this [ c === "isover" ? "_over" : "_out" ] . call ( this , event ) ; if ( parentInstance && c === "isout" ) { parentInstance . isout = false ; parentInstance . isover = true ; parentInstance . _over . call ( parentInstance , event ) ; } } ) ; } , dragStop : function ( draggable , event ) { draggable . element . parentsUntil ( "body" ) . off ( "scroll.droppable" ) ; if ( ! draggable . options . refreshPositions ) { $ . ui . ddmanager . prepareOffsets ( draggable , event ) ; } } } ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.droppable" , $ . ui . droppable , { options : { hoverClass : false , activeClass : false } , _addActiveClass : function ( ) { this . _super ( ) ; if ( this . options . activeClass ) { this . element . addClass ( this . options . activeClass ) ; } } , _removeActiveClass : function ( ) { this . _super ( ) ; if ( this . options . activeClass ) { this . element . removeClass ( this . options . activeClass ) ; } } , _addHoverClass : function ( ) { this . _super ( ) ; if ( this . options . hoverClass ) { this . element . addClass ( this . options . hoverClass ) ; } } , _removeHoverClass : function ( ) { this . _super ( ) ; if ( this . options . hoverClass ) { this . element . removeClass ( this . options . hoverClass ) ; } } } ) ; }
var widgetsDroppable = $ . ui . droppable ; / * !
* jQuery UI Progressbar 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsProgressbar = $ . widget ( "ui.progressbar" , { version : "1.12.1" , options : { classes : { "ui-progressbar" : "ui-corner-all" , "ui-progressbar-value" : "ui-corner-left" , "ui-progressbar-complete" : "ui-corner-right" } , max : 100 , value : 0 , change : null , complete : null } , min : 0 , _create : function ( ) { this . oldValue = this . options . value = this . _constrainedValue ( ) ; this . element . attr ( { role : "progressbar" , "aria-valuemin" : this . min } ) ; this . _addClass ( "ui-progressbar" , "ui-widget ui-widget-content" ) ; this . valueDiv = $ ( "<div>" ) . appendTo ( this . element ) ; this . _addClass ( this . valueDiv , "ui-progressbar-value" , "ui-widget-header" ) ; this . _refreshValue ( ) ; } , _destroy : function ( ) { this . element . removeAttr ( "role aria-valuemin aria-valuemax aria-valuenow" ) ; this . valueDiv . remove ( ) ; } , value : function ( newValue ) { if ( newValue === undefined ) { return this . options . value ; }
this . options . value = this . _constrainedValue ( newValue ) ; this . _refreshValue ( ) ; } , _constrainedValue : function ( newValue ) { if ( newValue === undefined ) { newValue = this . options . value ; }
this . indeterminate = newValue === false ; if ( typeof newValue !== "number" ) { newValue = 0 ; }
return this . indeterminate ? false : Math . min ( this . options . max , Math . max ( this . min , newValue ) ) ; } , _setOptions : function ( options ) { var value = options . value ; delete options . value ; this . _super ( options ) ; this . options . value = this . _constrainedValue ( value ) ; this . _refreshValue ( ) ; } , _setOption : function ( key , value ) { if ( key === "max" ) { value = Math . max ( this . min , value ) ; }
this . _super ( key , value ) ; } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . element . attr ( "aria-disabled" , value ) ; this . _toggleClass ( null , "ui-state-disabled" , ! ! value ) ; } , _percentage : function ( ) { return this . indeterminate ? 100 : 100 * ( this . options . value - this . min ) / ( this . options . max - this . min ) ; } , _refreshValue : function ( ) { var value = this . options . value , percentage = this . _percentage ( ) ; this . valueDiv . toggle ( this . indeterminate || value > this . min ) . width ( percentage . toFixed ( 0 ) + "%" ) ; this . _toggleClass ( this . valueDiv , "ui-progressbar-complete" , null , value === this . options . max ) . _toggleClass ( "ui-progressbar-indeterminate" , null , this . indeterminate ) ; if ( this . indeterminate ) { this . element . removeAttr ( "aria-valuenow" ) ; if ( ! this . overlayDiv ) { this . overlayDiv = $ ( "<div>" ) . appendTo ( this . valueDiv ) ; this . _addClass ( this . overlayDiv , "ui-progressbar-overlay" ) ; } } else { this . element . attr ( { "aria-valuemax" : this . options . max , "aria-valuenow" : value } ) ; if ( this . overlayDiv ) { this . overlayDiv . remove ( ) ; this . overlayDiv = null ; } }
if ( this . oldValue !== value ) { this . oldValue = value ; this . _trigger ( "change" ) ; }
if ( value === this . options . max ) { this . _trigger ( "complete" ) ; } } } ) ; / * !
* jQuery UI Selectable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsSelectable = $ . widget ( "ui.selectable" , $ . ui . mouse , { version : "1.12.1" , options : { appendTo : "body" , autoRefresh : true , distance : 0 , filter : "*" , tolerance : "touch" , selected : null , selecting : null , start : null , stop : null , unselected : null , unselecting : null } , _create : function ( ) { var that = this ; this . _addClass ( "ui-selectable" ) ; this . dragged = false ; this . refresh = function ( ) { that . elementPos = $ ( that . element [ 0 ] ) . offset ( ) ; that . selectees = $ ( that . options . filter , that . element [ 0 ] ) ; that . _addClass ( that . selectees , "ui-selectee" ) ; that . selectees . each ( function ( ) { var $this = $ ( this ) , selecteeOffset = $this . offset ( ) , pos = { left : selecteeOffset . left - that . elementPos . left , top : selecteeOffset . top - that . elementPos . top } ; $ . data ( this , "selectable-item" , { element : this , $element : $this , left : pos . left , top : pos . top , right : pos . left + $this . outerWidth ( ) , bottom : pos . top + $this . outerHeight ( ) , startselected : false , selected : $this . hasClass ( "ui-selected" ) , selecting : $this . hasClass ( "ui-selecting" ) , unselecting : $this . hasClass ( "ui-unselecting" ) } ) ; } ) ; } ; this . refresh ( ) ; this . _mouseInit ( ) ; this . helper = $ ( "<div>" ) ; this . _addClass ( this . helper , "ui-selectable-helper" ) ; } , _destroy : function ( ) { this . selectees . removeData ( "selectable-item" ) ; this . _mouseDestroy ( ) ; } , _mouseStart : function ( event ) { var that = this , options = this . options ; this . opos = [ event . pageX , event . pageY ] ; this . elementPos = $ ( this . element [ 0 ] ) . offset ( ) ; if ( this . options . disabled ) { return ; }
this . selectees = $ ( options . filter , this . element [ 0 ] ) ; this . _trigger ( "start" , event ) ; $ ( options . appendTo ) . append ( this . helper ) ; this . helper . css ( { "left" : event . pageX , "top" : event . pageY , "width" : 0 , "height" : 0 } ) ; if ( options . autoRefresh ) { this . refresh ( ) ; }
this . selectees . filter ( ".ui-selected" ) . each ( function ( ) { var selectee = $ . data ( this , "selectable-item" ) ; selectee . startselected = true ; if ( ! event . metaKey && ! event . ctrlKey ) { that . _removeClass ( selectee . $element , "ui-selected" ) ; selectee . selected = false ; that . _addClass ( selectee . $element , "ui-unselecting" ) ; selectee . unselecting = true ; that . _trigger ( "unselecting" , event , { unselecting : selectee . element } ) ; } } ) ; $ ( event . target ) . parents ( ) . addBack ( ) . each ( function ( ) { var doSelect , selectee = $ . data ( this , "selectable-item" ) ; if ( selectee ) { doSelect = ( ! event . metaKey && ! event . ctrlKey ) || ! selectee . $element . hasClass ( "ui-selected" ) ; that . _removeClass ( selectee . $element , doSelect ? "ui-unselecting" : "ui-selected" ) . _addClass ( selectee . $element , doSelect ? "ui-selecting" : "ui-unselecting" ) ; selectee . unselecting = ! doSelect ; selectee . selecting = doSelect ; selectee . selected = doSelect ; if ( doSelect ) { that . _trigger ( "selecting" , event , { selecting : selectee . element } ) ; } else { that . _trigger ( "unselecting" , event , { unselecting : selectee . element } ) ; }
return false ; } } ) ; } , _mouseDrag : function ( event ) { this . dragged = true ; if ( this . options . disabled ) { return ; }
var tmp , that = this , options = this . options , x1 = this . opos [ 0 ] , y1 = this . opos [ 1 ] , x2 = event . pageX , y2 = event . pageY ; if ( x1 > x2 ) { tmp = x2 ; x2 = x1 ; x1 = tmp ; }
if ( y1 > y2 ) { tmp = y2 ; y2 = y1 ; y1 = tmp ; }
this . helper . css ( { left : x1 , top : y1 , width : x2 - x1 , height : y2 - y1 } ) ; this . selectees . each ( function ( ) { var selectee = $ . data ( this , "selectable-item" ) , hit = false , offset = { } ; if ( ! selectee || selectee . element === that . element [ 0 ] ) { return ; }
offset . left = selectee . left + that . elementPos . left ; offset . right = selectee . right + that . elementPos . left ; offset . top = selectee . top + that . elementPos . top ; offset . bottom = selectee . bottom + that . elementPos . top ; if ( options . tolerance === "touch" ) { hit = ( ! ( offset . left > x2 || offset . right < x1 || offset . top > y2 || offset . bottom < y1 ) ) ; } else if ( options . tolerance === "fit" ) { hit = ( offset . left > x1 && offset . right < x2 && offset . top > y1 && offset . bottom < y2 ) ; }
if ( hit ) { if ( selectee . selected ) { that . _removeClass ( selectee . $element , "ui-selected" ) ; selectee . selected = false ; }
if ( selectee . unselecting ) { that . _removeClass ( selectee . $element , "ui-unselecting" ) ; selectee . unselecting = false ; }
if ( ! selectee . selecting ) { that . _addClass ( selectee . $element , "ui-selecting" ) ; selectee . selecting = true ; that . _trigger ( "selecting" , event , { selecting : selectee . element } ) ; } } else { if ( selectee . selecting ) { if ( ( event . metaKey || event . ctrlKey ) && selectee . startselected ) { that . _removeClass ( selectee . $element , "ui-selecting" ) ; selectee . selecting = false ; that . _addClass ( selectee . $element , "ui-selected" ) ; selectee . selected = true ; } else { that . _removeClass ( selectee . $element , "ui-selecting" ) ; selectee . selecting = false ; if ( selectee . startselected ) { that . _addClass ( selectee . $element , "ui-unselecting" ) ; selectee . unselecting = true ; }
that . _trigger ( "unselecting" , event , { unselecting : selectee . element } ) ; } }
if ( selectee . selected ) { if ( ! event . metaKey && ! event . ctrlKey && ! selectee . startselected ) { that . _removeClass ( selectee . $element , "ui-selected" ) ; selectee . selected = false ; that . _addClass ( selectee . $element , "ui-unselecting" ) ; selectee . unselecting = true ; that . _trigger ( "unselecting" , event , { unselecting : selectee . element } ) ; } } } } ) ; return false ; } , _mouseStop : function ( event ) { var that = this ; this . dragged = false ; $ ( ".ui-unselecting" , this . element [ 0 ] ) . each ( function ( ) { var selectee = $ . data ( this , "selectable-item" ) ; that . _removeClass ( selectee . $element , "ui-unselecting" ) ; selectee . unselecting = false ; selectee . startselected = false ; that . _trigger ( "unselected" , event , { unselected : selectee . element } ) ; } ) ; $ ( ".ui-selecting" , this . element [ 0 ] ) . each ( function ( ) { var selectee = $ . data ( this , "selectable-item" ) ; that . _removeClass ( selectee . $element , "ui-selecting" ) . _addClass ( selectee . $element , "ui-selected" ) ; selectee . selecting = false ; selectee . selected = true ; selectee . startselected = true ; that . _trigger ( "selected" , event , { selected : selectee . element } ) ; } ) ; this . _trigger ( "stop" , event ) ; this . helper . remove ( ) ; return false ; } } ) ; / * !
* jQuery UI Selectmenu 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsSelectmenu = $ . widget ( "ui.selectmenu" , [ $ . ui . formResetMixin , { version : "1.12.1" , defaultElement : "<select>" , options : { appendTo : null , classes : { "ui-selectmenu-button-open" : "ui-corner-top" , "ui-selectmenu-button-closed" : "ui-corner-all" } , disabled : null , icons : { button : "ui-icon-triangle-1-s" } , position : { my : "left top" , at : "left bottom" , collision : "none" } , width : false , change : null , close : null , focus : null , open : null , select : null } , _create : function ( ) { var selectmenuId = this . element . uniqueId ( ) . attr ( "id" ) ; this . ids = { element : selectmenuId , button : selectmenuId + "-button" , menu : selectmenuId + "-menu" } ; this . _drawButton ( ) ; this . _drawMenu ( ) ; this . _bindFormResetHandler ( ) ; this . _rendered = false ; this . menuItems = $ ( ) ; } , _drawButton : function ( ) { var icon , that = this , item = this . _parseOption ( this . element . find ( "option:selected" ) , this . element [ 0 ] . selectedIndex ) ; this . labels = this . element . labels ( ) . attr ( "for" , this . ids . button ) ; this . _on ( this . labels , { click : function ( event ) { this . button . focus ( ) ; event . preventDefault ( ) ; } } ) ; this . element . hide ( ) ; this . button = $ ( "<span>" , { tabindex : this . options . disabled ? - 1 : 0 , id : this . ids . button , role : "combobox" , "aria-expanded" : "false" , "aria-autocomplete" : "list" , "aria-owns" : this . ids . menu , "aria-haspopup" : "true" , title : this . element . attr ( "title" ) } ) . insertAfter ( this . element ) ; this . _addClass ( this . button , "ui-selectmenu-button ui-selectmenu-button-closed" , "ui-button ui-widget" ) ; icon = $ ( "<span>" ) . appendTo ( this . button ) ; this . _addClass ( icon , "ui-selectmenu-icon" , "ui-icon " + this . options . icons . button ) ; this . buttonItem = this . _renderButtonItem ( item ) . appendTo ( this . button ) ; if ( this . options . width !== false ) { this . _resizeButton ( ) ; }
this . _on ( this . button , this . _buttonEvents ) ; this . button . one ( "focusin" , function ( ) { if ( ! that . _rendered ) { that . _refreshMenu ( ) ; } } ) ; } , _drawMenu : function ( ) { var that = this ; this . menu = $ ( "<ul>" , { "aria-hidden" : "true" , "aria-labelledby" : this . ids . button , id : this . ids . menu } ) ; this . menuWrap = $ ( "<div>" ) . append ( this . menu ) ; this . _addClass ( this . menuWrap , "ui-selectmenu-menu" , "ui-front" ) ; this . menuWrap . appendTo ( this . _appendTo ( ) ) ; this . menuInstance = this . menu . menu ( { classes : { "ui-menu" : "ui-corner-bottom" } , role : "listbox" , select : function ( event , ui ) { event . preventDefault ( ) ; that . _setSelection ( ) ; that . _select ( ui . item . data ( "ui-selectmenu-item" ) , event ) ; } , focus : function ( event , ui ) { var item = ui . item . data ( "ui-selectmenu-item" ) ; if ( that . focusIndex != null && item . index !== that . focusIndex ) { that . _trigger ( "focus" , event , { item : item } ) ; if ( ! that . isOpen ) { that . _select ( item , event ) ; } }
that . focusIndex = item . index ; that . button . attr ( "aria-activedescendant" , that . menuItems . eq ( item . index ) . attr ( "id" ) ) ; } } ) . menu ( "instance" ) ; this . menuInstance . _off ( this . menu , "mouseleave" ) ; this . menuInstance . _closeOnDocumentClick = function ( ) { return false ; } ; this . menuInstance . _isDivider = function ( ) { return false ; } ; } , refresh : function ( ) { this . _refreshMenu ( ) ; this . buttonItem . replaceWith ( this . buttonItem = this . _renderButtonItem ( this . _getSelectedItem ( ) . data ( "ui-selectmenu-item" ) || { } ) ) ; if ( this . options . width === null ) { this . _resizeButton ( ) ; } } , _refreshMenu : function ( ) { var item , options = this . element . find ( "option" ) ; this . menu . empty ( ) ; this . _parseOptions ( options ) ; this . _renderMenu ( this . menu , this . items ) ; this . menuInstance . refresh ( ) ; this . menuItems = this . menu . find ( "li" ) . not ( ".ui-selectmenu-optgroup" ) . find ( ".ui-menu-item-wrapper" ) ; this . _rendered = true ; if ( ! options . length ) { return ; }
item = this . _getSelectedItem ( ) ; this . menuInstance . focus ( null , item ) ; this . _setAria ( item . data ( "ui-selectmenu-item" ) ) ; this . _setOption ( "disabled" , this . element . prop ( "disabled" ) ) ; } , open : function ( event ) { if ( this . options . disabled ) { return ; }
if ( ! this . _rendered ) { this . _refreshMenu ( ) ; } else { this . _removeClass ( this . menu . find ( ".ui-state-active" ) , null , "ui-state-active" ) ; this . menuInstance . focus ( null , this . _getSelectedItem ( ) ) ; }
if ( ! this . menuItems . length ) { return ; }
this . isOpen = true ; this . _toggleAttr ( ) ; this . _resizeMenu ( ) ; this . _position ( ) ; this . _on ( this . document , this . _documentClick ) ; this . _trigger ( "open" , event ) ; } , _position : function ( ) { this . menuWrap . position ( $ . extend ( { of : this . button } , this . options . position ) ) ; } , close : function ( event ) { if ( ! this . isOpen ) { return ; }
this . isOpen = false ; this . _toggleAttr ( ) ; this . range = null ; this . _off ( this . document ) ; this . _trigger ( "close" , event ) ; } , widget : function ( ) { return this . button ; } , menuWidget : function ( ) { return this . menu ; } , _renderButtonItem : function ( item ) { var buttonItem = $ ( "<span>" ) ; this . _setText ( buttonItem , item . label ) ; this . _addClass ( buttonItem , "ui-selectmenu-text" ) ; return buttonItem ; } , _renderMenu : function ( ul , items ) { var that = this , currentOptgroup = "" ; $ . each ( items , function ( index , item ) { var li ; if ( item . optgroup !== currentOptgroup ) { li = $ ( "<li>" , { text : item . optgroup } ) ; that . _addClass ( li , "ui-selectmenu-optgroup" , "ui-menu-divider" +
( item . element . parent ( "optgroup" ) . prop ( "disabled" ) ? " ui-state-disabled" : "" ) ) ; li . appendTo ( ul ) ; currentOptgroup = item . optgroup ; }
that . _renderItemData ( ul , item ) ; } ) ; } , _renderItemData : function ( ul , item ) { return this . _renderItem ( ul , item ) . data ( "ui-selectmenu-item" , item ) ; } , _renderItem : function ( ul , item ) { var li = $ ( "<li>" ) , wrapper = $ ( "<div>" , { title : item . element . attr ( "title" ) } ) ; if ( item . disabled ) { this . _addClass ( li , null , "ui-state-disabled" ) ; }
this . _setText ( wrapper , item . label ) ; return li . append ( wrapper ) . appendTo ( ul ) ; } , _setText : function ( element , value ) { if ( value ) { element . text ( value ) ; } else { element . html ( " " ) ; } } , _move : function ( direction , event ) { var item , next , filter = ".ui-menu-item" ; if ( this . isOpen ) { item = this . menuItems . eq ( this . focusIndex ) . parent ( "li" ) ; } else { item = this . menuItems . eq ( this . element [ 0 ] . selectedIndex ) . parent ( "li" ) ; filter += ":not(.ui-state-disabled)" ; }
if ( direction === "first" || direction === "last" ) { next = item [ direction === "first" ? "prevAll" : "nextAll" ] ( filter ) . eq ( - 1 ) ; } else { next = item [ direction + "All" ] ( filter ) . eq ( 0 ) ; }
if ( next . length ) { this . menuInstance . focus ( event , next ) ; } } , _getSelectedItem : function ( ) { return this . menuItems . eq ( this . element [ 0 ] . selectedIndex ) . parent ( "li" ) ; } , _toggle : function ( event ) { this [ this . isOpen ? "close" : "open" ] ( event ) ; } , _setSelection : function ( ) { var selection ; if ( ! this . range ) { return ; }
if ( window . getSelection ) { selection = window . getSelection ( ) ; selection . removeAllRanges ( ) ; selection . addRange ( this . range ) ; } else { this . range . select ( ) ; }
this . button . focus ( ) ; } , _documentClick : { mousedown : function ( event ) { if ( ! this . isOpen ) { return ; }
if ( ! $ ( event . target ) . closest ( ".ui-selectmenu-menu, #" +
$ . ui . escapeSelector ( this . ids . button ) ) . length ) { this . close ( event ) ; } } } , _buttonEvents : { mousedown : function ( ) { var selection ; if ( window . getSelection ) { selection = window . getSelection ( ) ; if ( selection . rangeCount ) { this . range = selection . getRangeAt ( 0 ) ; }
} else { this . range = document . selection . createRange ( ) ; } } , click : function ( event ) { this . _setSelection ( ) ; this . _toggle ( event ) ; } , keydown : function ( event ) { var preventDefault = true ; switch ( event . keyCode ) { case $ . ui . keyCode . TAB : case $ . ui . keyCode . ESCAPE : this . close ( event ) ; preventDefault = false ; break ; case $ . ui . keyCode . ENTER : if ( this . isOpen ) { this . _selectFocusedItem ( event ) ; }
break ; case $ . ui . keyCode . UP : if ( event . altKey ) { this . _toggle ( event ) ; } else { this . _move ( "prev" , event ) ; }
break ; case $ . ui . keyCode . DOWN : if ( event . altKey ) { this . _toggle ( event ) ; } else { this . _move ( "next" , event ) ; }
break ; case $ . ui . keyCode . SPACE : if ( this . isOpen ) { this . _selectFocusedItem ( event ) ; } else { this . _toggle ( event ) ; }
break ; case $ . ui . keyCode . LEFT : this . _move ( "prev" , event ) ; break ; case $ . ui . keyCode . RIGHT : this . _move ( "next" , event ) ; break ; case $ . ui . keyCode . HOME : case $ . ui . keyCode . PAGE _UP : this . _move ( "first" , event ) ; break ; case $ . ui . keyCode . END : case $ . ui . keyCode . PAGE _DOWN : this . _move ( "last" , event ) ; break ; default : this . menu . trigger ( event ) ; preventDefault = false ; }
if ( preventDefault ) { event . preventDefault ( ) ; } } } , _selectFocusedItem : function ( event ) { var item = this . menuItems . eq ( this . focusIndex ) . parent ( "li" ) ; if ( ! item . hasClass ( "ui-state-disabled" ) ) { this . _select ( item . data ( "ui-selectmenu-item" ) , event ) ; } } , _select : function ( item , event ) { var oldIndex = this . element [ 0 ] . selectedIndex ; this . element [ 0 ] . selectedIndex = item . index ; this . buttonItem . replaceWith ( this . buttonItem = this . _renderButtonItem ( item ) ) ; this . _setAria ( item ) ; this . _trigger ( "select" , event , { item : item } ) ; if ( item . index !== oldIndex ) { this . _trigger ( "change" , event , { item : item } ) ; }
this . close ( event ) ; } , _setAria : function ( item ) { var id = this . menuItems . eq ( item . index ) . attr ( "id" ) ; this . button . attr ( { "aria-labelledby" : id , "aria-activedescendant" : id } ) ; this . menu . attr ( "aria-activedescendant" , id ) ; } , _setOption : function ( key , value ) { if ( key === "icons" ) { var icon = this . button . find ( "span.ui-icon" ) ; this . _removeClass ( icon , null , this . options . icons . button ) . _addClass ( icon , null , value . button ) ; }
this . _super ( key , value ) ; if ( key === "appendTo" ) { this . menuWrap . appendTo ( this . _appendTo ( ) ) ; }
if ( key === "width" ) { this . _resizeButton ( ) ; } } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . menuInstance . option ( "disabled" , value ) ; this . button . attr ( "aria-disabled" , value ) ; this . _toggleClass ( this . button , null , "ui-state-disabled" , value ) ; this . element . prop ( "disabled" , value ) ; if ( value ) { this . button . attr ( "tabindex" , - 1 ) ; this . close ( ) ; } else { this . button . attr ( "tabindex" , 0 ) ; } } , _appendTo : function ( ) { var element = this . options . appendTo ; if ( element ) { element = element . jquery || element . nodeType ? $ ( element ) : this . document . find ( element ) . eq ( 0 ) ; }
if ( ! element || ! element [ 0 ] ) { element = this . element . closest ( ".ui-front, dialog" ) ; }
if ( ! element . length ) { element = this . document [ 0 ] . body ; }
return element ; } , _toggleAttr : function ( ) { this . button . attr ( "aria-expanded" , this . isOpen ) ; this . _removeClass ( this . button , "ui-selectmenu-button-" +
( this . isOpen ? "closed" : "open" ) ) . _addClass ( this . button , "ui-selectmenu-button-" +
( this . isOpen ? "open" : "closed" ) ) . _toggleClass ( this . menuWrap , "ui-selectmenu-open" , null , this . isOpen ) ; this . menu . attr ( "aria-hidden" , ! this . isOpen ) ; } , _resizeButton : function ( ) { var width = this . options . width ; if ( width === false ) { this . button . css ( "width" , "" ) ; return ; }
if ( width === null ) { width = this . element . show ( ) . outerWidth ( ) ; this . element . hide ( ) ; }
this . button . outerWidth ( width ) ; } , _resizeMenu : function ( ) { this . menu . outerWidth ( Math . max ( this . button . outerWidth ( ) , this . menu . width ( "" ) . outerWidth ( ) + 1 ) ) ; } , _getCreateOptions : function ( ) { var options = this . _super ( ) ; options . disabled = this . element . prop ( "disabled" ) ; return options ; } , _parseOptions : function ( options ) { var that = this , data = [ ] ; options . each ( function ( index , item ) { data . push ( that . _parseOption ( $ ( item ) , index ) ) ; } ) ; this . items = data ; } , _parseOption : function ( option , index ) { var optgroup = option . parent ( "optgroup" ) ; return { element : option , index : index , value : option . val ( ) , label : option . text ( ) , optgroup : optgroup . attr ( "label" ) || "" , disabled : optgroup . prop ( "disabled" ) || option . prop ( "disabled" ) } ; } , _destroy : function ( ) { this . _unbindFormResetHandler ( ) ; this . menuWrap . remove ( ) ; this . button . remove ( ) ; this . element . show ( ) ; this . element . removeUniqueId ( ) ; this . labels . attr ( "for" , this . ids . element ) ; } } ] ) ; / * !
* jQuery UI Slider 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsSlider = $ . widget ( "ui.slider" , $ . ui . mouse , { version : "1.12.1" , widgetEventPrefix : "slide" , options : { animate : false , classes : { "ui-slider" : "ui-corner-all" , "ui-slider-handle" : "ui-corner-all" , "ui-slider-range" : "ui-corner-all ui-widget-header" } , distance : 0 , max : 100 , min : 0 , orientation : "horizontal" , range : false , step : 1 , value : 0 , values : null , change : null , slide : null , start : null , stop : null } , numPages : 5 , _create : function ( ) { this . _keySliding = false ; this . _mouseSliding = false ; this . _animateOff = true ; this . _handleIndex = null ; this . _detectOrientation ( ) ; this . _mouseInit ( ) ; this . _calculateNewMax ( ) ; this . _addClass ( "ui-slider ui-slider-" + this . orientation , "ui-widget ui-widget-content" ) ; this . _refresh ( ) ; this . _animateOff = false ; } , _refresh : function ( ) { this . _createRange ( ) ; this . _createHandles ( ) ; this . _setupEvents ( ) ; this . _refreshValue ( ) ; } , _createHandles : function ( ) { var i , handleCount , options = this . options , existingHandles = this . element . find ( ".ui-slider-handle" ) , handle = "<span tabindex='0'></span>" , handles = [ ] ; handleCount = ( options . values && options . values . length ) || 1 ; if ( existingHandles . length > handleCount ) { existingHandles . slice ( handleCount ) . remove ( ) ; existingHandles = existingHandles . slice ( 0 , handleCount ) ; }
for ( i = existingHandles . length ; i < handleCount ; i ++ ) { handles . push ( handle ) ; }
this . handles = existingHandles . add ( $ ( handles . join ( "" ) ) . appendTo ( this . element ) ) ; this . _addClass ( this . handles , "ui-slider-handle" , "ui-state-default" ) ; this . handle = this . handles . eq ( 0 ) ; this . handles . each ( function ( i ) { $ ( this ) . data ( "ui-slider-handle-index" , i ) . attr ( "tabIndex" , 0 ) ; } ) ; } , _createRange : function ( ) { var options = this . options ; if ( options . range ) { if ( options . range === true ) { if ( ! options . values ) { options . values = [ this . _valueMin ( ) , this . _valueMin ( ) ] ; } else if ( options . values . length && options . values . length !== 2 ) { options . values = [ options . values [ 0 ] , options . values [ 0 ] ] ; } else if ( $ . isArray ( options . values ) ) { options . values = options . values . slice ( 0 ) ; } }
if ( ! this . range || ! this . range . length ) { this . range = $ ( "<div>" ) . appendTo ( this . element ) ; this . _addClass ( this . range , "ui-slider-range" ) ; } else { this . _removeClass ( this . range , "ui-slider-range-min ui-slider-range-max" ) ; this . range . css ( { "left" : "" , "bottom" : "" } ) ; }
if ( options . range === "min" || options . range === "max" ) { this . _addClass ( this . range , "ui-slider-range-" + options . range ) ; } } else { if ( this . range ) { this . range . remove ( ) ; }
this . range = null ; } } , _setupEvents : function ( ) { this . _off ( this . handles ) ; this . _on ( this . handles , this . _handleEvents ) ; this . _hoverable ( this . handles ) ; this . _focusable ( this . handles ) ; } , _destroy : function ( ) { this . handles . remove ( ) ; if ( this . range ) { this . range . remove ( ) ; }
this . _mouseDestroy ( ) ; } , _mouseCapture : function ( event ) { var position , normValue , distance , closestHandle , index , allowed , offset , mouseOverHandle , that = this , o = this . options ; if ( o . disabled ) { return false ; }
this . elementSize = { width : this . element . outerWidth ( ) , height : this . element . outerHeight ( ) } ; this . elementOffset = this . element . offset ( ) ; position = { x : event . pageX , y : event . pageY } ; normValue = this . _normValueFromMouse ( position ) ; distance = this . _valueMax ( ) - this . _valueMin ( ) + 1 ; this . handles . each ( function ( i ) { var thisDistance = Math . abs ( normValue - that . values ( i ) ) ; if ( ( distance > thisDistance ) || ( distance === thisDistance && ( i === that . _lastChangedValue || that . values ( i ) === o . min ) ) ) { distance = thisDistance ; closestHandle = $ ( this ) ; index = i ; } } ) ; allowed = this . _start ( event , index ) ; if ( allowed === false ) { return false ; }
this . _mouseSliding = true ; this . _handleIndex = index ; this . _addClass ( closestHandle , null , "ui-state-active" ) ; closestHandle . trigger ( "focus" ) ; offset = closestHandle . offset ( ) ; mouseOverHandle = ! $ ( event . target ) . parents ( ) . addBack ( ) . is ( ".ui-slider-handle" ) ; this . _clickOffset = mouseOverHandle ? { left : 0 , top : 0 } : { left : event . pageX - offset . left - ( closestHandle . width ( ) / 2 ) , top : event . pageY - offset . top -
( closestHandle . height ( ) / 2 ) -
( parseInt ( closestHandle . css ( "borderTopWidth" ) , 10 ) || 0 ) -
( parseInt ( closestHandle . css ( "borderBottomWidth" ) , 10 ) || 0 ) +
( parseInt ( closestHandle . css ( "marginTop" ) , 10 ) || 0 ) } ; if ( ! this . handles . hasClass ( "ui-state-hover" ) ) { this . _slide ( event , index , normValue ) ; }
this . _animateOff = true ; return true ; } , _mouseStart : function ( ) { return true ; } , _mouseDrag : function ( event ) { var position = { x : event . pageX , y : event . pageY } , normValue = this . _normValueFromMouse ( position ) ; this . _slide ( event , this . _handleIndex , normValue ) ; return false ; } , _mouseStop : function ( event ) { this . _removeClass ( this . handles , null , "ui-state-active" ) ; this . _mouseSliding = false ; this . _stop ( event , this . _handleIndex ) ; this . _change ( event , this . _handleIndex ) ; this . _handleIndex = null ; this . _clickOffset = null ; this . _animateOff = false ; return false ; } , _detectOrientation : function ( ) { this . orientation = ( this . options . orientation === "vertical" ) ? "vertical" : "horizontal" ; } , _normValueFromMouse : function ( position ) { var pixelTotal , pixelMouse , percentMouse , valueTotal , valueMouse ; if ( this . orientation === "horizontal" ) { pixelTotal = this . elementSize . width ; pixelMouse = position . x - this . elementOffset . left -
( this . _clickOffset ? this . _clickOffset . left : 0 ) ; } else { pixelTotal = this . elementSize . height ; pixelMouse = position . y - this . elementOffset . top -
( this . _clickOffset ? this . _clickOffset . top : 0 ) ; }
percentMouse = ( pixelMouse / pixelTotal ) ; if ( percentMouse > 1 ) { percentMouse = 1 ; }
if ( percentMouse < 0 ) { percentMouse = 0 ; }
if ( this . orientation === "vertical" ) { percentMouse = 1 - percentMouse ; }
valueTotal = this . _valueMax ( ) - this . _valueMin ( ) ; valueMouse = this . _valueMin ( ) + percentMouse * valueTotal ; return this . _trimAlignValue ( valueMouse ) ; } , _uiHash : function ( index , value , values ) { var uiHash = { handle : this . handles [ index ] , handleIndex : index , value : value !== undefined ? value : this . value ( ) } ; if ( this . _hasMultipleValues ( ) ) { uiHash . value = value !== undefined ? value : this . values ( index ) ; uiHash . values = values || this . values ( ) ; }
return uiHash ; } , _hasMultipleValues : function ( ) { return this . options . values && this . options . values . length ; } , _start : function ( event , index ) { return this . _trigger ( "start" , event , this . _uiHash ( index ) ) ; } , _slide : function ( event , index , newVal ) { var allowed , otherVal , currentValue = this . value ( ) , newValues = this . values ( ) ; if ( this . _hasMultipleValues ( ) ) { otherVal = this . values ( index ? 0 : 1 ) ; currentValue = this . values ( index ) ; if ( this . options . values . length === 2 && this . options . range === true ) { newVal = index === 0 ? Math . min ( otherVal , newVal ) : Math . max ( otherVal , newVal ) ; }
newValues [ index ] = newVal ; }
if ( newVal === currentValue ) { return ; }
allowed = this . _trigger ( "slide" , event , this . _uiHash ( index , newVal , newValues ) ) ; if ( allowed === false ) { return ; }
if ( this . _hasMultipleValues ( ) ) { this . values ( index , newVal ) ; } else { this . value ( newVal ) ; } } , _stop : function ( event , index ) { this . _trigger ( "stop" , event , this . _uiHash ( index ) ) ; } , _change : function ( event , index ) { if ( ! this . _keySliding && ! this . _mouseSliding ) { this . _lastChangedValue = index ; this . _trigger ( "change" , event , this . _uiHash ( index ) ) ; } } , value : function ( newValue ) { if ( arguments . length ) { this . options . value = this . _trimAlignValue ( newValue ) ; this . _refreshValue ( ) ; this . _change ( null , 0 ) ; return ; }
return this . _value ( ) ; } , values : function ( index , newValue ) { var vals , newValues , i ; if ( arguments . length > 1 ) { this . options . values [ index ] = this . _trimAlignValue ( newValue ) ; this . _refreshValue ( ) ; this . _change ( null , index ) ; return ; }
if ( arguments . length ) { if ( $ . isArray ( arguments [ 0 ] ) ) { vals = this . options . values ; newValues = arguments [ 0 ] ; for ( i = 0 ; i < vals . length ; i += 1 ) { vals [ i ] = this . _trimAlignValue ( newValues [ i ] ) ; this . _change ( null , i ) ; }
this . _refreshValue ( ) ; } else { if ( this . _hasMultipleValues ( ) ) { return this . _values ( index ) ; } else { return this . value ( ) ; } } } else { return this . _values ( ) ; } } , _setOption : function ( key , value ) { var i , valsLength = 0 ; if ( key === "range" && this . options . range === true ) { if ( value === "min" ) { this . options . value = this . _values ( 0 ) ; this . options . values = null ; } else if ( value === "max" ) { this . options . value = this . _values ( this . options . values . length - 1 ) ; this . options . values = null ; } }
if ( $ . isArray ( this . options . values ) ) { valsLength = this . options . values . length ; }
this . _super ( key , value ) ; switch ( key ) { case "orientation" : this . _detectOrientation ( ) ; this . _removeClass ( "ui-slider-horizontal ui-slider-vertical" ) . _addClass ( "ui-slider-" + this . orientation ) ; this . _refreshValue ( ) ; if ( this . options . range ) { this . _refreshRange ( value ) ; }
this . handles . css ( value === "horizontal" ? "bottom" : "left" , "" ) ; break ; case "value" : this . _animateOff = true ; this . _refreshValue ( ) ; this . _change ( null , 0 ) ; this . _animateOff = false ; break ; case "values" : this . _animateOff = true ; this . _refreshValue ( ) ; for ( i = valsLength - 1 ; i >= 0 ; i -- ) { this . _change ( null , i ) ; }
this . _animateOff = false ; break ; case "step" : case "min" : case "max" : this . _animateOff = true ; this . _calculateNewMax ( ) ; this . _refreshValue ( ) ; this . _animateOff = false ; break ; case "range" : this . _animateOff = true ; this . _refresh ( ) ; this . _animateOff = false ; break ; } } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . _toggleClass ( null , "ui-state-disabled" , ! ! value ) ; } , _value : function ( ) { var val = this . options . value ; val = this . _trimAlignValue ( val ) ; return val ; } , _values : function ( index ) { var val , vals , i ; if ( arguments . length ) { val = this . options . values [ index ] ; val = this . _trimAlignValue ( val ) ; return val ; } else if ( this . _hasMultipleValues ( ) ) { vals = this . options . values . slice ( ) ; for ( i = 0 ; i < vals . length ; i += 1 ) { vals [ i ] = this . _trimAlignValue ( vals [ i ] ) ; }
return vals ; } else { return [ ] ; } } , _trimAlignValue : function ( val ) { if ( val <= this . _valueMin ( ) ) { return this . _valueMin ( ) ; }
if ( val >= this . _valueMax ( ) ) { return this . _valueMax ( ) ; }
var step = ( this . options . step > 0 ) ? this . options . step : 1 , valModStep = ( val - this . _valueMin ( ) ) % step , alignValue = val - valModStep ; if ( Math . abs ( valModStep ) * 2 >= step ) { alignValue += ( valModStep > 0 ) ? step : ( - step ) ; }
return parseFloat ( alignValue . toFixed ( 5 ) ) ; } , _calculateNewMax : function ( ) { var max = this . options . max , min = this . _valueMin ( ) , step = this . options . step , aboveMin = Math . round ( ( max - min ) / step ) * step ; max = aboveMin + min ; if ( max > this . options . max ) { max -= step ; }
this . max = parseFloat ( max . toFixed ( this . _precision ( ) ) ) ; } , _precision : function ( ) { var precision = this . _precisionOf ( this . options . step ) ; if ( this . options . min !== null ) { precision = Math . max ( precision , this . _precisionOf ( this . options . min ) ) ; }
return precision ; } , _precisionOf : function ( num ) { var str = num . toString ( ) , decimal = str . indexOf ( "." ) ; return decimal === - 1 ? 0 : str . length - decimal - 1 ; } , _valueMin : function ( ) { return this . options . min ; } , _valueMax : function ( ) { return this . max ; } , _refreshRange : function ( orientation ) { if ( orientation === "vertical" ) { this . range . css ( { "width" : "" , "left" : "" } ) ; }
if ( orientation === "horizontal" ) { this . range . css ( { "height" : "" , "bottom" : "" } ) ; } } , _refreshValue : function ( ) { var lastValPercent , valPercent , value , valueMin , valueMax , oRange = this . options . range , o = this . options , that = this , animate = ( ! this . _animateOff ) ? o . animate : false , _set = { } ; if ( this . _hasMultipleValues ( ) ) { this . handles . each ( function ( i ) { valPercent = ( that . values ( i ) - that . _valueMin ( ) ) / ( that . _valueMax ( ) -
that . _valueMin ( ) ) * 100 ; _set [ that . orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%" ; $ ( this ) . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( _set , o . animate ) ; if ( that . options . range === true ) { if ( that . orientation === "horizontal" ) { if ( i === 0 ) { that . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { left : valPercent + "%" } , o . animate ) ; }
if ( i === 1 ) { that . range [ animate ? "animate" : "css" ] ( { width : ( valPercent - lastValPercent ) + "%" } , { queue : false , duration : o . animate } ) ; } } else { if ( i === 0 ) { that . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { bottom : ( valPercent ) + "%" } , o . animate ) ; }
if ( i === 1 ) { that . range [ animate ? "animate" : "css" ] ( { height : ( valPercent - lastValPercent ) + "%" } , { queue : false , duration : o . animate } ) ; } } }
lastValPercent = valPercent ; } ) ; } else { value = this . value ( ) ; valueMin = this . _valueMin ( ) ; valueMax = this . _valueMax ( ) ; valPercent = ( valueMax !== valueMin ) ? ( value - valueMin ) / ( valueMax - valueMin ) * 100 : 0 ; _set [ this . orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%" ; this . handle . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( _set , o . animate ) ; if ( oRange === "min" && this . orientation === "horizontal" ) { this . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { width : valPercent + "%" } , o . animate ) ; }
if ( oRange === "max" && this . orientation === "horizontal" ) { this . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { width : ( 100 - valPercent ) + "%" } , o . animate ) ; }
if ( oRange === "min" && this . orientation === "vertical" ) { this . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { height : valPercent + "%" } , o . animate ) ; }
if ( oRange === "max" && this . orientation === "vertical" ) { this . range . stop ( 1 , 1 ) [ animate ? "animate" : "css" ] ( { height : ( 100 - valPercent ) + "%" } , o . animate ) ; } } } , _handleEvents : { keydown : function ( event ) { var allowed , curVal , newVal , step , index = $ ( event . target ) . data ( "ui-slider-handle-index" ) ; switch ( event . keyCode ) { case $ . ui . keyCode . HOME : case $ . ui . keyCode . END : case $ . ui . keyCode . PAGE _UP : case $ . ui . keyCode . PAGE _DOWN : case $ . ui . keyCode . UP : case $ . ui . keyCode . RIGHT : case $ . ui . keyCode . DOWN : case $ . ui . keyCode . LEFT : event . preventDefault ( ) ; if ( ! this . _keySliding ) { this . _keySliding = true ; this . _addClass ( $ ( event . target ) , null , "ui-state-active" ) ; allowed = this . _start ( event , index ) ; if ( allowed === false ) { return ; } }
break ; }
step = this . options . step ; if ( this . _hasMultipleValues ( ) ) { curVal = newVal = this . values ( index ) ; } else { curVal = newVal = this . value ( ) ; }
switch ( event . keyCode ) { case $ . ui . keyCode . HOME : newVal = this . _valueMin ( ) ; break ; case $ . ui . keyCode . END : newVal = this . _valueMax ( ) ; break ; case $ . ui . keyCode . PAGE _UP : newVal = this . _trimAlignValue ( curVal + ( ( this . _valueMax ( ) - this . _valueMin ( ) ) / this . numPages ) ) ; break ; case $ . ui . keyCode . PAGE _DOWN : newVal = this . _trimAlignValue ( curVal - ( ( this . _valueMax ( ) - this . _valueMin ( ) ) / this . numPages ) ) ; break ; case $ . ui . keyCode . UP : case $ . ui . keyCode . RIGHT : if ( curVal === this . _valueMax ( ) ) { return ; }
newVal = this . _trimAlignValue ( curVal + step ) ; break ; case $ . ui . keyCode . DOWN : case $ . ui . keyCode . LEFT : if ( curVal === this . _valueMin ( ) ) { return ; }
newVal = this . _trimAlignValue ( curVal - step ) ; break ; }
this . _slide ( event , index , newVal ) ; } , keyup : function ( event ) { var index = $ ( event . target ) . data ( "ui-slider-handle-index" ) ; if ( this . _keySliding ) { this . _keySliding = false ; this . _stop ( event , index ) ; this . _change ( event , index ) ; this . _removeClass ( $ ( event . target ) , null , "ui-state-active" ) ; } } } } ) ; / * !
* jQuery UI Sortable 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
var widgetsSortable = $ . widget ( "ui.sortable" , $ . ui . mouse , { version : "1.12.1" , widgetEventPrefix : "sort" , ready : false , options : { appendTo : "parent" , axis : false , connectWith : false , containment : false , cursor : "auto" , cursorAt : false , dropOnEmpty : true , forcePlaceholderSize : false , forceHelperSize : false , grid : false , handle : false , helper : "original" , items : "> *" , opacity : false , placeholder : false , revert : false , scroll : true , scrollSensitivity : 20 , scrollSpeed : 20 , scope : "default" , tolerance : "intersect" , zIndex : 1000 , activate : null , beforeStop : null , change : null , deactivate : null , out : null , over : null , receive : null , remove : null , sort : null , start : null , stop : null , update : null } , _isOverAxis : function ( x , reference , size ) { return ( x >= reference ) && ( x < ( reference + size ) ) ; } , _isFloating : function ( item ) { return ( /left|right/ ) . test ( item . css ( "float" ) ) || ( /inline|table-cell/ ) . test ( item . css ( "display" ) ) ; } , _create : function ( ) { this . containerCache = { } ; this . _addClass ( "ui-sortable" ) ; this . refresh ( ) ; this . offset = this . element . offset ( ) ; this . _mouseInit ( ) ; this . _setHandleClassName ( ) ; this . ready = true ; } , _setOption : function ( key , value ) { this . _super ( key , value ) ; if ( key === "handle" ) { this . _setHandleClassName ( ) ; } } , _setHandleClassName : function ( ) { var that = this ; this . _removeClass ( this . element . find ( ".ui-sortable-handle" ) , "ui-sortable-handle" ) ; $ . each ( this . items , function ( ) { that . _addClass ( this . instance . options . handle ? this . item . find ( this . instance . options . handle ) : this . item , "ui-sortable-handle" ) ; } ) ; } , _destroy : function ( ) { this . _mouseDestroy ( ) ; for ( var i = this . items . length - 1 ; i >= 0 ; i -- ) { this . items [ i ] . item . removeData ( this . widgetName + "-item" ) ; }
return this ; } , _mouseCapture : function ( event , overrideHandle ) { var currentItem = null , validHandle = false , that = this ; if ( this . reverting ) { return false ; }
if ( this . options . disabled || this . options . type === "static" ) { return false ; }
this . _refreshItems ( event ) ; $ ( event . target ) . parents ( ) . each ( function ( ) { if ( $ . data ( this , that . widgetName + "-item" ) === that ) { currentItem = $ ( this ) ; return false ; } } ) ; if ( $ . data ( event . target , that . widgetName + "-item" ) === that ) { currentItem = $ ( event . target ) ; }
if ( ! currentItem ) { return false ; }
if ( this . options . handle && ! overrideHandle ) { $ ( this . options . handle , currentItem ) . find ( "*" ) . addBack ( ) . each ( function ( ) { if ( this === event . target ) { validHandle = true ; } } ) ; if ( ! validHandle ) { return false ; } }
this . currentItem = currentItem ; this . _removeCurrentsFromItems ( ) ; return true ; } , _mouseStart : function ( event , overrideHandle , noActivation ) { var i , body , o = this . options ; this . currentContainer = this ; this . refreshPositions ( ) ; this . helper = this . _createHelper ( event ) ; this . _cacheHelperProportions ( ) ; this . _cacheMargins ( ) ; this . scrollParent = this . helper . scrollParent ( ) ; this . offset = this . currentItem . offset ( ) ; this . offset = { top : this . offset . top - this . margins . top , left : this . offset . left - this . margins . left } ; $ . extend ( this . offset , { click : { left : event . pageX - this . offset . left , top : event . pageY - this . offset . top } , parent : this . _getParentOffset ( ) , relative : this . _getRelativeOffset ( ) } ) ; this . helper . css ( "position" , "absolute" ) ; this . cssPosition = this . helper . css ( "position" ) ; this . originalPosition = this . _generatePosition ( event ) ; this . originalPageX = event . pageX ; this . originalPageY = event . pageY ; ( o . cursorAt && this . _adjustOffsetFromHelper ( o . cursorAt ) ) ; this . domPosition = { prev : this . currentItem . prev ( ) [ 0 ] , parent : this . currentItem . parent ( ) [ 0 ] } ; if ( this . helper [ 0 ] !== this . currentItem [ 0 ] ) { this . currentItem . hide ( ) ; }
this . _createPlaceholder ( ) ; if ( o . containment ) { this . _setContainment ( ) ; }
if ( o . cursor && o . cursor !== "auto" ) { body = this . document . find ( "body" ) ; this . storedCursor = body . css ( "cursor" ) ; body . css ( "cursor" , o . cursor ) ; this . storedStylesheet = $ ( "<style>*{ cursor: " + o . cursor + " !important; }</style>" ) . appendTo ( body ) ; }
if ( o . opacity ) { if ( this . helper . css ( "opacity" ) ) { this . _storedOpacity = this . helper . css ( "opacity" ) ; }
this . helper . css ( "opacity" , o . opacity ) ; }
if ( o . zIndex ) { if ( this . helper . css ( "zIndex" ) ) { this . _storedZIndex = this . helper . css ( "zIndex" ) ; }
this . helper . css ( "zIndex" , o . zIndex ) ; }
if ( this . scrollParent [ 0 ] !== this . document [ 0 ] && this . scrollParent [ 0 ] . tagName !== "HTML" ) { this . overflowOffset = this . scrollParent . offset ( ) ; }
this . _trigger ( "start" , event , this . _uiHash ( ) ) ; if ( ! this . _preserveHelperProportions ) { this . _cacheHelperProportions ( ) ; }
if ( ! noActivation ) { for ( i = this . containers . length - 1 ; i >= 0 ; i -- ) { this . containers [ i ] . _trigger ( "activate" , event , this . _uiHash ( this ) ) ; } }
if ( $ . ui . ddmanager ) { $ . ui . ddmanager . current = this ; }
if ( $ . ui . ddmanager && ! o . dropBehaviour ) { $ . ui . ddmanager . prepareOffsets ( this , event ) ; }
this . dragging = true ; this . _addClass ( this . helper , "ui-sortable-helper" ) ; this . _mouseDrag ( event ) ; return true ; } , _mouseDrag : function ( event ) { var i , item , itemElement , intersection , o = this . options , scrolled = false ; this . position = this . _generatePosition ( event ) ; this . positionAbs = this . _convertPositionTo ( "absolute" ) ; if ( ! this . lastPositionAbs ) { this . lastPositionAbs = this . positionAbs ; }
if ( this . options . scroll ) { if ( this . scrollParent [ 0 ] !== this . document [ 0 ] && this . scrollParent [ 0 ] . tagName !== "HTML" ) { if ( ( this . overflowOffset . top + this . scrollParent [ 0 ] . offsetHeight ) -
event . pageY < o . scrollSensitivity ) { this . scrollParent [ 0 ] . scrollTop = scrolled = this . scrollParent [ 0 ] . scrollTop + o . scrollSpeed ; } else if ( event . pageY - this . overflowOffset . top < o . scrollSensitivity ) { this . scrollParent [ 0 ] . scrollTop = scrolled = this . scrollParent [ 0 ] . scrollTop - o . scrollSpeed ; }
if ( ( this . overflowOffset . left + this . scrollParent [ 0 ] . offsetWidth ) -
event . pageX < o . scrollSensitivity ) { this . scrollParent [ 0 ] . scrollLeft = scrolled = this . scrollParent [ 0 ] . scrollLeft + o . scrollSpeed ; } else if ( event . pageX - this . overflowOffset . left < o . scrollSensitivity ) { this . scrollParent [ 0 ] . scrollLeft = scrolled = this . scrollParent [ 0 ] . scrollLeft - o . scrollSpeed ; } } else { if ( event . pageY - this . document . scrollTop ( ) < o . scrollSensitivity ) { scrolled = this . document . scrollTop ( this . document . scrollTop ( ) - o . scrollSpeed ) ; } else if ( this . window . height ( ) - ( event . pageY - this . document . scrollTop ( ) ) < o . scrollSensitivity ) { scrolled = this . document . scrollTop ( this . document . scrollTop ( ) + o . scrollSpeed ) ; }
if ( event . pageX - this . document . scrollLeft ( ) < o . scrollSensitivity ) { scrolled = this . document . scrollLeft ( this . document . scrollLeft ( ) - o . scrollSpeed ) ; } else if ( this . window . width ( ) - ( event . pageX - this . document . scrollLeft ( ) ) < o . scrollSensitivity ) { scrolled = this . document . scrollLeft ( this . document . scrollLeft ( ) + o . scrollSpeed ) ; } }
if ( scrolled !== false && $ . ui . ddmanager && ! o . dropBehaviour ) { $ . ui . ddmanager . prepareOffsets ( this , event ) ; } }
this . positionAbs = this . _convertPositionTo ( "absolute" ) ; if ( ! this . options . axis || this . options . axis !== "y" ) { this . helper [ 0 ] . style . left = this . position . left + "px" ; }
if ( ! this . options . axis || this . options . axis !== "x" ) { this . helper [ 0 ] . style . top = this . position . top + "px" ; }
for ( i = this . items . length - 1 ; i >= 0 ; i -- ) { item = this . items [ i ] ; itemElement = item . item [ 0 ] ; intersection = this . _intersectsWithPointer ( item ) ; if ( ! intersection ) { continue ; }
if ( item . instance !== this . currentContainer ) { continue ; }
if ( itemElement !== this . currentItem [ 0 ] && this . placeholder [ intersection === 1 ? "next" : "prev" ] ( ) [ 0 ] !== itemElement && ! $ . contains ( this . placeholder [ 0 ] , itemElement ) && ( this . options . type === "semi-dynamic" ? ! $ . contains ( this . element [ 0 ] , itemElement ) : true ) ) { this . direction = intersection === 1 ? "down" : "up" ; if ( this . options . tolerance === "pointer" || this . _intersectsWithSides ( item ) ) { this . _rearrange ( event , item ) ; } else { break ; }
this . _trigger ( "change" , event , this . _uiHash ( ) ) ; break ; } }
this . _contactContainers ( event ) ; if ( $ . ui . ddmanager ) { $ . ui . ddmanager . drag ( this , event ) ; }
this . _trigger ( "sort" , event , this . _uiHash ( ) ) ; this . lastPositionAbs = this . positionAbs ; return false ; } , _mouseStop : function ( event , noPropagation ) { if ( ! event ) { return ; }
if ( $ . ui . ddmanager && ! this . options . dropBehaviour ) { $ . ui . ddmanager . drop ( this , event ) ; }
if ( this . options . revert ) { var that = this , cur = this . placeholder . offset ( ) , axis = this . options . axis , animation = { } ; if ( ! axis || axis === "x" ) { animation . left = cur . left - this . offset . parent . left - this . margins . left +
( this . offsetParent [ 0 ] === this . document [ 0 ] . body ? 0 : this . offsetParent [ 0 ] . scrollLeft ) ; }
if ( ! axis || axis === "y" ) { animation . top = cur . top - this . offset . parent . top - this . margins . top +
( this . offsetParent [ 0 ] === this . document [ 0 ] . body ? 0 : this . offsetParent [ 0 ] . scrollTop ) ; }
this . reverting = true ; $ ( this . helper ) . animate ( animation , parseInt ( this . options . revert , 10 ) || 500 , function ( ) { that . _clear ( event ) ; } ) ; } else { this . _clear ( event , noPropagation ) ; }
return false ; } , cancel : function ( ) { if ( this . dragging ) { this . _mouseUp ( new $ . Event ( "mouseup" , { target : null } ) ) ; if ( this . options . helper === "original" ) { this . currentItem . css ( this . _storedCSS ) ; this . _removeClass ( this . currentItem , "ui-sortable-helper" ) ; } else { this . currentItem . show ( ) ; }
for ( var i = this . containers . length - 1 ; i >= 0 ; i -- ) { this . containers [ i ] . _trigger ( "deactivate" , null , this . _uiHash ( this ) ) ; if ( this . containers [ i ] . containerCache . over ) { this . containers [ i ] . _trigger ( "out" , null , this . _uiHash ( this ) ) ; this . containers [ i ] . containerCache . over = 0 ; } } }
if ( this . placeholder ) { if ( this . placeholder [ 0 ] . parentNode ) { this . placeholder [ 0 ] . parentNode . removeChild ( this . placeholder [ 0 ] ) ; }
if ( this . options . helper !== "original" && this . helper && this . helper [ 0 ] . parentNode ) { this . helper . remove ( ) ; }
$ . extend ( this , { helper : null , dragging : false , reverting : false , _noFinalSort : null } ) ; if ( this . domPosition . prev ) { $ ( this . domPosition . prev ) . after ( this . currentItem ) ; } else { $ ( this . domPosition . parent ) . prepend ( this . currentItem ) ; } }
return this ; } , serialize : function ( o ) { var items = this . _getItemsAsjQuery ( o && o . connected ) , str = [ ] ; o = o || { } ; $ ( items ) . each ( function ( ) { var res = ( $ ( o . item || this ) . attr ( o . attribute || "id" ) || "" ) . match ( o . expression || ( /(.+)[\-=_](.+)/ ) ) ; if ( res ) { str . push ( ( o . key || res [ 1 ] + "[]" ) +
"=" + ( o . key && o . expression ? res [ 1 ] : res [ 2 ] ) ) ; } } ) ; if ( ! str . length && o . key ) { str . push ( o . key + "=" ) ; }
return str . join ( "&" ) ; } , toArray : function ( o ) { var items = this . _getItemsAsjQuery ( o && o . connected ) , ret = [ ] ; o = o || { } ; items . each ( function ( ) { ret . push ( $ ( o . item || this ) . attr ( o . attribute || "id" ) || "" ) ; } ) ; return ret ; } , _intersectsWith : function ( item ) { var x1 = this . positionAbs . left , x2 = x1 + this . helperProportions . width , y1 = this . positionAbs . top , y2 = y1 + this . helperProportions . height , l = item . left , r = l + item . width , t = item . top , b = t + item . height , dyClick = this . offset . click . top , dxClick = this . offset . click . left , isOverElementHeight = ( this . options . axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ) , isOverElementWidth = ( this . options . axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ) , isOverElement = isOverElementHeight && isOverElementWidth ; if ( this . options . tolerance === "pointer" || this . options . forcePointerForContainers || ( this . options . tolerance !== "pointer" && this . helperProportions [ this . floating ? "width" : "height" ] > item [ this . floating ? "width" : "height" ] ) ) { return isOverElement ; } else { return ( l < x1 + ( this . helperProportions . width / 2 ) && x2 - ( this . helperProportions . width / 2 ) < r && t < y1 + ( this . helperProportions . height / 2 ) && y2 - ( this . helperProportions . height / 2 ) < b ) ; } } , _intersectsWithPointer : function ( item ) { var verticalDirection , horizontalDirection , isOverElementHeight = ( this . options . axis === "x" ) || this . _isOverAxis ( this . positionAbs . top + this . offset . click . top , item . top , item . height ) , isOverElementWidth = ( this . options . axis === "y" ) || this . _isOverAxis ( this . positionAbs . left + this . offset . click . left , item . left , item . width ) , isOverElement = isOverElementHeight && isOverElementWidth ; if ( ! isOverElement ) { return false ; }
verticalDirection = this . _getDragVerticalDirection ( ) ; horizontalDirection = this . _getDragHorizontalDirection ( ) ; return this . floating ? ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) ) ; } , _intersectsWithSides : function ( item ) { var isOverBottomHalf = this . _isOverAxis ( this . positionAbs . top +
this . offset . click . top , item . top + ( item . height / 2 ) , item . height ) , isOverRightHalf = this . _isOverAxis ( this . positionAbs . left +
this . offset . click . left , item . left + ( item . width / 2 ) , item . width ) , verticalDirection = this . _getDragVerticalDirection ( ) , horizontalDirection = this . _getDragHorizontalDirection ( ) ; if ( this . floating && horizontalDirection ) { return ( ( horizontalDirection === "right" && isOverRightHalf ) || ( horizontalDirection === "left" && ! isOverRightHalf ) ) ; } else { return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) || ( verticalDirection === "up" && ! isOverBottomHalf ) ) ; } } , _getDragVerticalDirection : function ( ) { var delta = this . positionAbs . top - this . lastPositionAbs . top ; return delta !== 0 && ( delta > 0 ? "down" : "up" ) ; } , _getDragHorizontalDirection : function ( ) { var delta = this . positionAbs . left - this . lastPositionAbs . left ; return delta !== 0 && ( delta > 0 ? "right" : "left" ) ; } , refresh : function ( event ) { this . _refreshItems ( event ) ; this . _setHandleClassName ( ) ; this . refreshPositions ( ) ; return this ; } , _connectWith : function ( ) { var options = this . options ; return options . connectWith . constructor === String ? [ options . connectWith ] : options . connectWith ; } , _getItemsAsjQuery : function ( connected ) { var i , j , cur , inst , items = [ ] , queries = [ ] , connectWith = this . _connectWith ( ) ; if ( connectWith && connected ) { for ( i = connectWith . length - 1 ; i >= 0 ; i -- ) { cur = $ ( connectWith [ i ] , this . document [ 0 ] ) ; for ( j = cur . length - 1 ; j >= 0 ; j -- ) { inst = $ . data ( cur [ j ] , this . widgetFullName ) ; if ( inst && inst !== this && ! inst . options . disabled ) { queries . push ( [ $ . isFunction ( inst . options . items ) ? inst . options . items . call ( inst . element ) : $ ( inst . options . items , inst . element ) . not ( ".ui-sortable-helper" ) . not ( ".ui-sortable-placeholder" ) , inst ] ) ; } } } }
queries . push ( [ $ . isFunction ( this . options . items ) ? this . options . items . call ( this . element , null , { options : this . options , item : this . currentItem } ) : $ ( this . options . items , this . element ) . not ( ".ui-sortable-helper" ) . not ( ".ui-sortable-placeholder" ) , this ] ) ; function addItems ( ) { items . push ( this ) ; }
for ( i = queries . length - 1 ; i >= 0 ; i -- ) { queries [ i ] [ 0 ] . each ( addItems ) ; }
return $ ( items ) ; } , _removeCurrentsFromItems : function ( ) { var list = this . currentItem . find ( ":data(" + this . widgetName + "-item)" ) ; this . items = $ . grep ( this . items , function ( item ) { for ( var j = 0 ; j < list . length ; j ++ ) { if ( list [ j ] === item . item [ 0 ] ) { return false ; } }
return true ; } ) ; } , _refreshItems : function ( event ) { this . items = [ ] ; this . containers = [ this ] ; var i , j , cur , inst , targetData , _queries , item , queriesLength , items = this . items , queries = [ [ $ . isFunction ( this . options . items ) ? this . options . items . call ( this . element [ 0 ] , event , { item : this . currentItem } ) : $ ( this . options . items , this . element ) , this ] ] , connectWith = this . _connectWith ( ) ; if ( connectWith && this . ready ) { for ( i = connectWith . length - 1 ; i >= 0 ; i -- ) { cur = $ ( connectWith [ i ] , this . document [ 0 ] ) ; for ( j = cur . length - 1 ; j >= 0 ; j -- ) { inst = $ . data ( cur [ j ] , this . widgetFullName ) ; if ( inst && inst !== this && ! inst . options . disabled ) { queries . push ( [ $ . isFunction ( inst . options . items ) ? inst . options . items . call ( inst . element [ 0 ] , event , { item : this . currentItem } ) : $ ( inst . options . items , inst . element ) , inst ] ) ; this . containers . push ( inst ) ; } } } }
for ( i = queries . length - 1 ; i >= 0 ; i -- ) { targetData = queries [ i ] [ 1 ] ; _queries = queries [ i ] [ 0 ] ; for ( j = 0 , queriesLength = _queries . length ; j < queriesLength ; j ++ ) { item = $ ( _queries [ j ] ) ; item . data ( this . widgetName + "-item" , targetData ) ; items . push ( { item : item , instance : targetData , width : 0 , height : 0 , left : 0 , top : 0 } ) ; } } } , refreshPositions : function ( fast ) { this . floating = this . items . length ? this . options . axis === "x" || this . _isFloating ( this . items [ 0 ] . item ) : false ; if ( this . offsetParent && this . helper ) { this . offset . parent = this . _getParentOffset ( ) ; }
var i , item , t , p ; for ( i = this . items . length - 1 ; i >= 0 ; i -- ) { item = this . items [ i ] ; if ( item . instance !== this . currentContainer && this . currentContainer && item . item [ 0 ] !== this . currentItem [ 0 ] ) { continue ; }
t = this . options . toleranceElement ? $ ( this . options . toleranceElement , item . item ) : item . item ; if ( ! fast ) { item . width = t . outerWidth ( ) ; item . height = t . outerHeight ( ) ; }
p = t . offset ( ) ; item . left = p . left ; item . top = p . top ; }
if ( this . options . custom && this . options . custom . refreshContainers ) { this . options . custom . refreshContainers . call ( this ) ; } else { for ( i = this . containers . length - 1 ; i >= 0 ; i -- ) { p = this . containers [ i ] . element . offset ( ) ; this . containers [ i ] . containerCache . left = p . left ; this . containers [ i ] . containerCache . top = p . top ; this . containers [ i ] . containerCache . width = this . containers [ i ] . element . outerWidth ( ) ; this . containers [ i ] . containerCache . height = this . containers [ i ] . element . outerHeight ( ) ; } }
return this ; } , _createPlaceholder : function ( that ) { that = that || this ; var className , o = that . options ; if ( ! o . placeholder || o . placeholder . constructor === String ) { className = o . placeholder ; o . placeholder = { element : function ( ) { var nodeName = that . currentItem [ 0 ] . nodeName . toLowerCase ( ) , element = $ ( "<" + nodeName + ">" , that . document [ 0 ] ) ; that . _addClass ( element , "ui-sortable-placeholder" , className || that . currentItem [ 0 ] . className ) . _removeClass ( element , "ui-sortable-helper" ) ; if ( nodeName === "tbody" ) { that . _createTrPlaceholder ( that . currentItem . find ( "tr" ) . eq ( 0 ) , $ ( "<tr>" , that . document [ 0 ] ) . appendTo ( element ) ) ; } else if ( nodeName === "tr" ) { that . _createTrPlaceholder ( that . currentItem , element ) ; } else if ( nodeName === "img" ) { element . attr ( "src" , that . currentItem . attr ( "src" ) ) ; }
if ( ! className ) { element . css ( "visibility" , "hidden" ) ; }
return element ; } , update : function ( container , p ) { if ( className && ! o . forcePlaceholderSize ) { return ; }
if ( ! p . height ( ) ) { p . height ( that . currentItem . innerHeight ( ) -
parseInt ( that . currentItem . css ( "paddingTop" ) || 0 , 10 ) -
parseInt ( that . currentItem . css ( "paddingBottom" ) || 0 , 10 ) ) ; }
if ( ! p . width ( ) ) { p . width ( that . currentItem . innerWidth ( ) -
parseInt ( that . currentItem . css ( "paddingLeft" ) || 0 , 10 ) -
parseInt ( that . currentItem . css ( "paddingRight" ) || 0 , 10 ) ) ; } } } ; }
that . placeholder = $ ( o . placeholder . element . call ( that . element , that . currentItem ) ) ; that . currentItem . after ( that . placeholder ) ; o . placeholder . update ( that , that . placeholder ) ; } , _createTrPlaceholder : function ( sourceTr , targetTr ) { var that = this ; sourceTr . children ( ) . each ( function ( ) { $ ( "<td> </td>" , that . document [ 0 ] ) . attr ( "colspan" , $ ( this ) . attr ( "colspan" ) || 1 ) . appendTo ( targetTr ) ; } ) ; } , _contactContainers : function ( event ) { var i , j , dist , itemWithLeastDistance , posProperty , sizeProperty , cur , nearBottom , floating , axis , innermostContainer = null , innermostIndex = null ; for ( i = this . containers . length - 1 ; i >= 0 ; i -- ) { if ( $ . contains ( this . currentItem [ 0 ] , this . containers [ i ] . element [ 0 ] ) ) { continue ; }
if ( this . _intersectsWith ( this . containers [ i ] . containerCache ) ) { if ( innermostContainer && $ . contains ( this . containers [ i ] . element [ 0 ] , innermostContainer . element [ 0 ] ) ) { continue ; }
innermostContainer = this . containers [ i ] ; innermostIndex = i ; } else { if ( this . containers [ i ] . containerCache . over ) { this . containers [ i ] . _trigger ( "out" , event , this . _uiHash ( this ) ) ; this . containers [ i ] . containerCache . over = 0 ; } } }
if ( ! innermostContainer ) { return ; }
if ( this . containers . length === 1 ) { if ( ! this . containers [ innermostIndex ] . containerCache . over ) { this . containers [ innermostIndex ] . _trigger ( "over" , event , this . _uiHash ( this ) ) ; this . containers [ innermostIndex ] . containerCache . over = 1 ; } } else { dist = 10000 ; itemWithLeastDistance = null ; floating = innermostContainer . floating || this . _isFloating ( this . currentItem ) ; posProperty = floating ? "left" : "top" ; sizeProperty = floating ? "width" : "height" ; axis = floating ? "pageX" : "pageY" ; for ( j = this . items . length - 1 ; j >= 0 ; j -- ) { if ( ! $ . contains ( this . containers [ innermostIndex ] . element [ 0 ] , this . items [ j ] . item [ 0 ] ) ) { continue ; }
if ( this . items [ j ] . item [ 0 ] === this . currentItem [ 0 ] ) { continue ; }
cur = this . items [ j ] . item . offset ( ) [ posProperty ] ; nearBottom = false ; if ( event [ axis ] - cur > this . items [ j ] [ sizeProperty ] / 2 ) { nearBottom = true ; }
if ( Math . abs ( event [ axis ] - cur ) < dist ) { dist = Math . abs ( event [ axis ] - cur ) ; itemWithLeastDistance = this . items [ j ] ; this . direction = nearBottom ? "up" : "down" ; } }
if ( ! itemWithLeastDistance && ! this . options . dropOnEmpty ) { return ; }
if ( this . currentContainer === this . containers [ innermostIndex ] ) { if ( ! this . currentContainer . containerCache . over ) { this . containers [ innermostIndex ] . _trigger ( "over" , event , this . _uiHash ( ) ) ; this . currentContainer . containerCache . over = 1 ; }
return ; }
itemWithLeastDistance ? this . _rearrange ( event , itemWithLeastDistance , null , true ) : this . _rearrange ( event , null , this . containers [ innermostIndex ] . element , true ) ; this . _trigger ( "change" , event , this . _uiHash ( ) ) ; this . containers [ innermostIndex ] . _trigger ( "change" , event , this . _uiHash ( this ) ) ; this . currentContainer = this . containers [ innermostIndex ] ; this . options . placeholder . update ( this . currentContainer , this . placeholder ) ; this . containers [ innermostIndex ] . _trigger ( "over" , event , this . _uiHash ( this ) ) ; this . containers [ innermostIndex ] . containerCache . over = 1 ; } } , _createHelper : function ( event ) { var o = this . options , helper = $ . isFunction ( o . helper ) ? $ ( o . helper . apply ( this . element [ 0 ] , [ event , this . currentItem ] ) ) : ( o . helper === "clone" ? this . currentItem . clone ( ) : this . currentItem ) ; if ( ! helper . parents ( "body" ) . length ) { $ ( o . appendTo !== "parent" ? o . appendTo : this . currentItem [ 0 ] . parentNode ) [ 0 ] . appendChild ( helper [ 0 ] ) ; }
if ( helper [ 0 ] === this . currentItem [ 0 ] ) { this . _storedCSS = { width : this . currentItem [ 0 ] . style . width , height : this . currentItem [ 0 ] . style . height , position : this . currentItem . css ( "position" ) , top : this . currentItem . css ( "top" ) , left : this . currentItem . css ( "left" ) } ; }
if ( ! helper [ 0 ] . style . width || o . forceHelperSize ) { helper . width ( this . currentItem . width ( ) ) ; }
if ( ! helper [ 0 ] . style . height || o . forceHelperSize ) { helper . height ( this . currentItem . height ( ) ) ; }
return helper ; } , _adjustOffsetFromHelper : function ( obj ) { if ( typeof obj === "string" ) { obj = obj . split ( " " ) ; }
if ( $ . isArray ( obj ) ) { obj = { left : + obj [ 0 ] , top : + obj [ 1 ] || 0 } ; }
if ( "left" in obj ) { this . offset . click . left = obj . left + this . margins . left ; }
if ( "right" in obj ) { this . offset . click . left = this . helperProportions . width - obj . right + this . margins . left ; }
if ( "top" in obj ) { this . offset . click . top = obj . top + this . margins . top ; }
if ( "bottom" in obj ) { this . offset . click . top = this . helperProportions . height - obj . bottom + this . margins . top ; } } , _getParentOffset : function ( ) { this . offsetParent = this . helper . offsetParent ( ) ; var po = this . offsetParent . offset ( ) ; if ( this . cssPosition === "absolute" && this . scrollParent [ 0 ] !== this . document [ 0 ] && $ . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) { po . left += this . scrollParent . scrollLeft ( ) ; po . top += this . scrollParent . scrollTop ( ) ; }
if ( this . offsetParent [ 0 ] === this . document [ 0 ] . body || ( this . offsetParent [ 0 ] . tagName && this . offsetParent [ 0 ] . tagName . toLowerCase ( ) === "html" && $ . ui . ie ) ) { po = { top : 0 , left : 0 } ; }
return { top : po . top + ( parseInt ( this . offsetParent . css ( "borderTopWidth" ) , 10 ) || 0 ) , left : po . left + ( parseInt ( this . offsetParent . css ( "borderLeftWidth" ) , 10 ) || 0 ) } ; } , _getRelativeOffset : function ( ) { if ( this . cssPosition === "relative" ) { var p = this . currentItem . position ( ) ; return { top : p . top - ( parseInt ( this . helper . css ( "top" ) , 10 ) || 0 ) +
this . scrollParent . scrollTop ( ) , left : p . left - ( parseInt ( this . helper . css ( "left" ) , 10 ) || 0 ) +
this . scrollParent . scrollLeft ( ) } ; } else { return { top : 0 , left : 0 } ; } } , _cacheMargins : function ( ) { this . margins = { left : ( parseInt ( this . currentItem . css ( "marginLeft" ) , 10 ) || 0 ) , top : ( parseInt ( this . currentItem . css ( "marginTop" ) , 10 ) || 0 ) } ; } , _cacheHelperProportions : function ( ) { this . helperProportions = { width : this . helper . outerWidth ( ) , height : this . helper . outerHeight ( ) } ; } , _setContainment : function ( ) { var ce , co , over , o = this . options ; if ( o . containment === "parent" ) { o . containment = this . helper [ 0 ] . parentNode ; }
if ( o . containment === "document" || o . containment === "window" ) { this . containment = [ 0 - this . offset . relative . left - this . offset . parent . left , 0 - this . offset . relative . top - this . offset . parent . top , o . containment === "document" ? this . document . width ( ) : this . window . width ( ) - this . helperProportions . width - this . margins . left , ( o . containment === "document" ? ( this . document . height ( ) || document . body . parentNode . scrollHeight ) : this . window . height ( ) || this . document [ 0 ] . body . parentNode . scrollHeight ) - this . helperProportions . height - this . margins . top ] ; }
if ( ! ( /^(document|window|parent)$/ ) . test ( o . containment ) ) { ce = $ ( o . containment ) [ 0 ] ; co = $ ( o . containment ) . offset ( ) ; over = ( $ ( ce ) . css ( "overflow" ) !== "hidden" ) ; this . containment = [ co . left + ( parseInt ( $ ( ce ) . css ( "borderLeftWidth" ) , 10 ) || 0 ) +
( parseInt ( $ ( ce ) . css ( "paddingLeft" ) , 10 ) || 0 ) - this . margins . left , co . top + ( parseInt ( $ ( ce ) . css ( "borderTopWidth" ) , 10 ) || 0 ) +
( parseInt ( $ ( ce ) . css ( "paddingTop" ) , 10 ) || 0 ) - this . margins . top , co . left + ( over ? Math . max ( ce . scrollWidth , ce . offsetWidth ) : ce . offsetWidth ) -
( parseInt ( $ ( ce ) . css ( "borderLeftWidth" ) , 10 ) || 0 ) -
( parseInt ( $ ( ce ) . css ( "paddingRight" ) , 10 ) || 0 ) -
this . helperProportions . width - this . margins . left , co . top + ( over ? Math . max ( ce . scrollHeight , ce . offsetHeight ) : ce . offsetHeight ) -
( parseInt ( $ ( ce ) . css ( "borderTopWidth" ) , 10 ) || 0 ) -
( parseInt ( $ ( ce ) . css ( "paddingBottom" ) , 10 ) || 0 ) -
this . helperProportions . height - this . margins . top ] ; } } , _convertPositionTo : function ( d , pos ) { if ( ! pos ) { pos = this . position ; }
var mod = d === "absolute" ? 1 : - 1 , scroll = this . cssPosition === "absolute" && ! ( this . scrollParent [ 0 ] !== this . document [ 0 ] && $ . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) ? this . offsetParent : this . scrollParent , scrollIsRootNode = ( /(html|body)/i ) . test ( scroll [ 0 ] . tagName ) ; return { top : ( pos . top +
this . offset . relative . top * mod +
this . offset . parent . top * mod -
( ( this . cssPosition === "fixed" ? - this . scrollParent . scrollTop ( ) : ( scrollIsRootNode ? 0 : scroll . scrollTop ( ) ) ) * mod ) ) , left : ( pos . left +
this . offset . relative . left * mod +
this . offset . parent . left * mod -
( ( this . cssPosition === "fixed" ? - this . scrollParent . scrollLeft ( ) : scrollIsRootNode ? 0 : scroll . scrollLeft ( ) ) * mod ) ) } ; } , _generatePosition : function ( event ) { var top , left , o = this . options , pageX = event . pageX , pageY = event . pageY , scroll = this . cssPosition === "absolute" && ! ( this . scrollParent [ 0 ] !== this . document [ 0 ] && $ . contains ( this . scrollParent [ 0 ] , this . offsetParent [ 0 ] ) ) ? this . offsetParent : this . scrollParent , scrollIsRootNode = ( /(html|body)/i ) . test ( scroll [ 0 ] . tagName ) ; if ( this . cssPosition === "relative" && ! ( this . scrollParent [ 0 ] !== this . document [ 0 ] && this . scrollParent [ 0 ] !== this . offsetParent [ 0 ] ) ) { this . offset . relative = this . _getRelativeOffset ( ) ; }
if ( this . originalPosition ) { if ( this . containment ) { if ( event . pageX - this . offset . click . left < this . containment [ 0 ] ) { pageX = this . containment [ 0 ] + this . offset . click . left ; }
if ( event . pageY - this . offset . click . top < this . containment [ 1 ] ) { pageY = this . containment [ 1 ] + this . offset . click . top ; }
if ( event . pageX - this . offset . click . left > this . containment [ 2 ] ) { pageX = this . containment [ 2 ] + this . offset . click . left ; }
if ( event . pageY - this . offset . click . top > this . containment [ 3 ] ) { pageY = this . containment [ 3 ] + this . offset . click . top ; } }
if ( o . grid ) { top = this . originalPageY + Math . round ( ( pageY - this . originalPageY ) /
o . grid [ 1 ] ) * o . grid [ 1 ] ; pageY = this . containment ? ( ( top - this . offset . click . top >= this . containment [ 1 ] && top - this . offset . click . top <= this . containment [ 3 ] ) ? top : ( ( top - this . offset . click . top >= this . containment [ 1 ] ) ? top - o . grid [ 1 ] : top + o . grid [ 1 ] ) ) : top ; left = this . originalPageX + Math . round ( ( pageX - this . originalPageX ) /
o . grid [ 0 ] ) * o . grid [ 0 ] ; pageX = this . containment ? ( ( left - this . offset . click . left >= this . containment [ 0 ] && left - this . offset . click . left <= this . containment [ 2 ] ) ? left : ( ( left - this . offset . click . left >= this . containment [ 0 ] ) ? left - o . grid [ 0 ] : left + o . grid [ 0 ] ) ) : left ; } }
return { top : ( pageY -
this . offset . click . top -
this . offset . relative . top -
this . offset . parent . top +
( ( this . cssPosition === "fixed" ? - this . scrollParent . scrollTop ( ) : ( scrollIsRootNode ? 0 : scroll . scrollTop ( ) ) ) ) ) , left : ( pageX -
this . offset . click . left -
this . offset . relative . left -
this . offset . parent . left +
( ( this . cssPosition === "fixed" ? - this . scrollParent . scrollLeft ( ) : scrollIsRootNode ? 0 : scroll . scrollLeft ( ) ) ) ) } ; } , _rearrange : function ( event , i , a , hardRefresh ) { a ? a [ 0 ] . appendChild ( this . placeholder [ 0 ] ) : i . item [ 0 ] . parentNode . insertBefore ( this . placeholder [ 0 ] , ( this . direction === "down" ? i . item [ 0 ] : i . item [ 0 ] . nextSibling ) ) ; this . counter = this . counter ? ++ this . counter : 1 ; var counter = this . counter ; this . _delay ( function ( ) { if ( counter === this . counter ) { this . refreshPositions ( ! hardRefresh ) ; } } ) ; } , _clear : function ( event , noPropagation ) { this . reverting = false ; var i , delayedTriggers = [ ] ; if ( ! this . _noFinalSort && this . currentItem . parent ( ) . length ) { this . placeholder . before ( this . currentItem ) ; }
this . _noFinalSort = null ; if ( this . helper [ 0 ] === this . currentItem [ 0 ] ) { for ( i in this . _storedCSS ) { if ( this . _storedCSS [ i ] === "auto" || this . _storedCSS [ i ] === "static" ) { this . _storedCSS [ i ] = "" ; } }
this . currentItem . css ( this . _storedCSS ) ; this . _removeClass ( this . currentItem , "ui-sortable-helper" ) ; } else { this . currentItem . show ( ) ; }
if ( this . fromOutside && ! noPropagation ) { delayedTriggers . push ( function ( event ) { this . _trigger ( "receive" , event , this . _uiHash ( this . fromOutside ) ) ; } ) ; }
if ( ( this . fromOutside || this . domPosition . prev !== this . currentItem . prev ( ) . not ( ".ui-sortable-helper" ) [ 0 ] || this . domPosition . parent !== this . currentItem . parent ( ) [ 0 ] ) && ! noPropagation ) { delayedTriggers . push ( function ( event ) { this . _trigger ( "update" , event , this . _uiHash ( ) ) ; } ) ; }
if ( this !== this . currentContainer ) { if ( ! noPropagation ) { delayedTriggers . push ( function ( event ) { this . _trigger ( "remove" , event , this . _uiHash ( ) ) ; } ) ; delayedTriggers . push ( ( function ( c ) { return function ( event ) { c . _trigger ( "receive" , event , this . _uiHash ( this ) ) ; } ; } ) . call ( this , this . currentContainer ) ) ; delayedTriggers . push ( ( function ( c ) { return function ( event ) { c . _trigger ( "update" , event , this . _uiHash ( this ) ) ; } ; } ) . call ( this , this . currentContainer ) ) ; } }
function delayEvent ( type , instance , container ) { return function ( event ) { container . _trigger ( type , event , instance . _uiHash ( instance ) ) ; } ; }
for ( i = this . containers . length - 1 ; i >= 0 ; i -- ) { if ( ! noPropagation ) { delayedTriggers . push ( delayEvent ( "deactivate" , this , this . containers [ i ] ) ) ; }
if ( this . containers [ i ] . containerCache . over ) { delayedTriggers . push ( delayEvent ( "out" , this , this . containers [ i ] ) ) ; this . containers [ i ] . containerCache . over = 0 ; } }
if ( this . storedCursor ) { this . document . find ( "body" ) . css ( "cursor" , this . storedCursor ) ; this . storedStylesheet . remove ( ) ; }
if ( this . _storedOpacity ) { this . helper . css ( "opacity" , this . _storedOpacity ) ; }
if ( this . _storedZIndex ) { this . helper . css ( "zIndex" , this . _storedZIndex === "auto" ? "" : this . _storedZIndex ) ; }
this . dragging = false ; if ( ! noPropagation ) { this . _trigger ( "beforeStop" , event , this . _uiHash ( ) ) ; }
this . placeholder [ 0 ] . parentNode . removeChild ( this . placeholder [ 0 ] ) ; if ( ! this . cancelHelperRemoval ) { if ( this . helper [ 0 ] !== this . currentItem [ 0 ] ) { this . helper . remove ( ) ; }
this . helper = null ; }
if ( ! noPropagation ) { for ( i = 0 ; i < delayedTriggers . length ; i ++ ) { delayedTriggers [ i ] . call ( this , event ) ; }
this . _trigger ( "stop" , event , this . _uiHash ( ) ) ; }
this . fromOutside = false ; return ! this . cancelHelperRemoval ; } , _trigger : function ( ) { if ( $ . Widget . prototype . _trigger . apply ( this , arguments ) === false ) { this . cancel ( ) ; } } , _uiHash : function ( _inst ) { var inst = _inst || this ; return { helper : inst . helper , placeholder : inst . placeholder || $ ( [ ] ) , position : inst . position , originalPosition : inst . originalPosition , offset : inst . positionAbs , item : inst . currentItem , sender : _inst ? _inst . element : null } ; } } ) ; / * !
* jQuery UI Spinner 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
function spinnerModifer ( fn ) { return function ( ) { var previous = this . element . val ( ) ; fn . apply ( this , arguments ) ; this . _refresh ( ) ; if ( previous !== this . element . val ( ) ) { this . _trigger ( "change" ) ; } } ; }
$ . widget ( "ui.spinner" , { version : "1.12.1" , defaultElement : "<input>" , widgetEventPrefix : "spin" , options : { classes : { "ui-spinner" : "ui-corner-all" , "ui-spinner-down" : "ui-corner-br" , "ui-spinner-up" : "ui-corner-tr" } , culture : null , icons : { down : "ui-icon-triangle-1-s" , up : "ui-icon-triangle-1-n" } , incremental : true , max : null , min : null , numberFormat : null , page : 10 , step : 1 , change : null , spin : null , start : null , stop : null } , _create : function ( ) { this . _setOption ( "max" , this . options . max ) ; this . _setOption ( "min" , this . options . min ) ; this . _setOption ( "step" , this . options . step ) ; if ( this . value ( ) !== "" ) { this . _value ( this . element . val ( ) , true ) ; }
this . _draw ( ) ; this . _on ( this . _events ) ; this . _refresh ( ) ; this . _on ( this . window , { beforeunload : function ( ) { this . element . removeAttr ( "autocomplete" ) ; } } ) ; } , _getCreateOptions : function ( ) { var options = this . _super ( ) ; var element = this . element ; $ . each ( [ "min" , "max" , "step" ] , function ( i , option ) { var value = element . attr ( option ) ; if ( value != null && value . length ) { options [ option ] = value ; } } ) ; return options ; } , _events : { keydown : function ( event ) { if ( this . _start ( event ) && this . _keydown ( event ) ) { event . preventDefault ( ) ; } } , keyup : "_stop" , focus : function ( ) { this . previous = this . element . val ( ) ; } , blur : function ( event ) { if ( this . cancelBlur ) { delete this . cancelBlur ; return ; }
this . _stop ( ) ; this . _refresh ( ) ; if ( this . previous !== this . element . val ( ) ) { this . _trigger ( "change" , event ) ; } } , mousewheel : function ( event , delta ) { if ( ! delta ) { return ; }
if ( ! this . spinning && ! this . _start ( event ) ) { return false ; }
this . _spin ( ( delta > 0 ? 1 : - 1 ) * this . options . step , event ) ; clearTimeout ( this . mousewheelTimer ) ; this . mousewheelTimer = this . _delay ( function ( ) { if ( this . spinning ) { this . _stop ( event ) ; } } , 100 ) ; event . preventDefault ( ) ; } , "mousedown .ui-spinner-button" : function ( event ) { var previous ; previous = this . element [ 0 ] === $ . ui . safeActiveElement ( this . document [ 0 ] ) ? this . previous : this . element . val ( ) ; function checkFocus ( ) { var isActive = this . element [ 0 ] === $ . ui . safeActiveElement ( this . document [ 0 ] ) ; if ( ! isActive ) { this . element . trigger ( "focus" ) ; this . previous = previous ; this . _delay ( function ( ) { this . previous = previous ; } ) ; } }
event . preventDefault ( ) ; checkFocus . call ( this ) ; this . cancelBlur = true ; this . _delay ( function ( ) { delete this . cancelBlur ; checkFocus . call ( this ) ; } ) ; if ( this . _start ( event ) === false ) { return ; }
this . _repeat ( null , $ ( event . currentTarget ) . hasClass ( "ui-spinner-up" ) ? 1 : - 1 , event ) ; } , "mouseup .ui-spinner-button" : "_stop" , "mouseenter .ui-spinner-button" : function ( event ) { if ( ! $ ( event . currentTarget ) . hasClass ( "ui-state-active" ) ) { return ; }
if ( this . _start ( event ) === false ) { return false ; }
this . _repeat ( null , $ ( event . currentTarget ) . hasClass ( "ui-spinner-up" ) ? 1 : - 1 , event ) ; } , "mouseleave .ui-spinner-button" : "_stop" } , _enhance : function ( ) { this . uiSpinner = this . element . attr ( "autocomplete" , "off" ) . wrap ( "<span>" ) . parent ( )
. append ( "<a></a><a></a>" ) ; } , _draw : function ( ) { this . _enhance ( ) ; this . _addClass ( this . uiSpinner , "ui-spinner" , "ui-widget ui-widget-content" ) ; this . _addClass ( "ui-spinner-input" ) ; this . element . attr ( "role" , "spinbutton" ) ; this . buttons = this . uiSpinner . children ( "a" ) . attr ( "tabIndex" , - 1 ) . attr ( "aria-hidden" , true ) . button ( { classes : { "ui-button" : "" } } ) ; this . _removeClass ( this . buttons , "ui-corner-all" ) ; this . _addClass ( this . buttons . first ( ) , "ui-spinner-button ui-spinner-up" ) ; this . _addClass ( this . buttons . last ( ) , "ui-spinner-button ui-spinner-down" ) ; this . buttons . first ( ) . button ( { "icon" : this . options . icons . up , "showLabel" : false } ) ; this . buttons . last ( ) . button ( { "icon" : this . options . icons . down , "showLabel" : false } ) ; if ( this . buttons . height ( ) > Math . ceil ( this . uiSpinner . height ( ) * 0.5 ) && this . uiSpinner . height ( ) > 0 ) { this . uiSpinner . height ( this . uiSpinner . height ( ) ) ; } } , _keydown : function ( event ) { var options = this . options , keyCode = $ . ui . keyCode ; switch ( event . keyCode ) { case keyCode . UP : this . _repeat ( null , 1 , event ) ; return true ; case keyCode . DOWN : this . _repeat ( null , - 1 , event ) ; return true ; case keyCode . PAGE _UP : this . _repeat ( null , options . page , event ) ; return true ; case keyCode . PAGE _DOWN : this . _repeat ( null , - options . page , event ) ; return true ; }
return false ; } , _start : function ( event ) { if ( ! this . spinning && this . _trigger ( "start" , event ) === false ) { return false ; }
if ( ! this . counter ) { this . counter = 1 ; }
this . spinning = true ; return true ; } , _repeat : function ( i , steps , event ) { i = i || 500 ; clearTimeout ( this . timer ) ; this . timer = this . _delay ( function ( ) { this . _repeat ( 40 , steps , event ) ; } , i ) ; this . _spin ( steps * this . options . step , event ) ; } , _spin : function ( step , event ) { var value = this . value ( ) || 0 ; if ( ! this . counter ) { this . counter = 1 ; }
value = this . _adjustValue ( value + step * this . _increment ( this . counter ) ) ; if ( ! this . spinning || this . _trigger ( "spin" , event , { value : value } ) !== false ) { this . _value ( value ) ; this . counter ++ ; } } , _increment : function ( i ) { var incremental = this . options . incremental ; if ( incremental ) { return $ . isFunction ( incremental ) ? incremental ( i ) : Math . floor ( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 ) ; }
return 1 ; } , _precision : function ( ) { var precision = this . _precisionOf ( this . options . step ) ; if ( this . options . min !== null ) { precision = Math . max ( precision , this . _precisionOf ( this . options . min ) ) ; }
return precision ; } , _precisionOf : function ( num ) { var str = num . toString ( ) , decimal = str . indexOf ( "." ) ; return decimal === - 1 ? 0 : str . length - decimal - 1 ; } , _adjustValue : function ( value ) { var base , aboveMin , options = this . options ; base = options . min !== null ? options . min : 0 ; aboveMin = value - base ; aboveMin = Math . round ( aboveMin / options . step ) * options . step ; value = base + aboveMin ; value = parseFloat ( value . toFixed ( this . _precision ( ) ) ) ; if ( options . max !== null && value > options . max ) { return options . max ; }
if ( options . min !== null && value < options . min ) { return options . min ; }
return value ; } , _stop : function ( event ) { if ( ! this . spinning ) { return ; }
clearTimeout ( this . timer ) ; clearTimeout ( this . mousewheelTimer ) ; this . counter = 0 ; this . spinning = false ; this . _trigger ( "stop" , event ) ; } , _setOption : function ( key , value ) { var prevValue , first , last ; if ( key === "culture" || key === "numberFormat" ) { prevValue = this . _parse ( this . element . val ( ) ) ; this . options [ key ] = value ; this . element . val ( this . _format ( prevValue ) ) ; return ; }
if ( key === "max" || key === "min" || key === "step" ) { if ( typeof value === "string" ) { value = this . _parse ( value ) ; } }
if ( key === "icons" ) { first = this . buttons . first ( ) . find ( ".ui-icon" ) ; this . _removeClass ( first , null , this . options . icons . up ) ; this . _addClass ( first , null , value . up ) ; last = this . buttons . last ( ) . find ( ".ui-icon" ) ; this . _removeClass ( last , null , this . options . icons . down ) ; this . _addClass ( last , null , value . down ) ; }
this . _super ( key , value ) ; } , _setOptionDisabled : function ( value ) { this . _super ( value ) ; this . _toggleClass ( this . uiSpinner , null , "ui-state-disabled" , ! ! value ) ; this . element . prop ( "disabled" , ! ! value ) ; this . buttons . button ( value ? "disable" : "enable" ) ; } , _setOptions : spinnerModifer ( function ( options ) { this . _super ( options ) ; } ) , _parse : function ( val ) { if ( typeof val === "string" && val !== "" ) { val = window . Globalize && this . options . numberFormat ? Globalize . parseFloat ( val , 10 , this . options . culture ) : + val ; }
return val === "" || isNaN ( val ) ? null : val ; } , _format : function ( value ) { if ( value === "" ) { return "" ; }
return window . Globalize && this . options . numberFormat ? Globalize . format ( value , this . options . numberFormat , this . options . culture ) : value ; } , _refresh : function ( ) { this . element . attr ( { "aria-valuemin" : this . options . min , "aria-valuemax" : this . options . max , "aria-valuenow" : this . _parse ( this . element . val ( ) ) } ) ; } , isValid : function ( ) { var value = this . value ( ) ; if ( value === null ) { return false ; }
return value === this . _adjustValue ( value ) ; } , _value : function ( value , allowAny ) { var parsed ; if ( value !== "" ) { parsed = this . _parse ( value ) ; if ( parsed !== null ) { if ( ! allowAny ) { parsed = this . _adjustValue ( parsed ) ; }
value = this . _format ( parsed ) ; } }
this . element . val ( value ) ; this . _refresh ( ) ; } , _destroy : function ( ) { this . element . prop ( "disabled" , false ) . removeAttr ( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" ) ; this . uiSpinner . replaceWith ( this . element ) ; } , stepUp : spinnerModifer ( function ( steps ) { this . _stepUp ( steps ) ; } ) , _stepUp : function ( steps ) { if ( this . _start ( ) ) { this . _spin ( ( steps || 1 ) * this . options . step ) ; this . _stop ( ) ; } } , stepDown : spinnerModifer ( function ( steps ) { this . _stepDown ( steps ) ; } ) , _stepDown : function ( steps ) { if ( this . _start ( ) ) { this . _spin ( ( steps || 1 ) * - this . options . step ) ; this . _stop ( ) ; } } , pageUp : spinnerModifer ( function ( pages ) { this . _stepUp ( ( pages || 1 ) * this . options . page ) ; } ) , pageDown : spinnerModifer ( function ( pages ) { this . _stepDown ( ( pages || 1 ) * this . options . page ) ; } ) , value : function ( newVal ) { if ( ! arguments . length ) { return this . _parse ( this . element . val ( ) ) ; }
spinnerModifer ( this . _value ) . call ( this , newVal ) ; } , widget : function ( ) { return this . uiSpinner ; } } ) ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.spinner" , $ . ui . spinner , { _enhance : function ( ) { this . uiSpinner = this . element . attr ( "autocomplete" , "off" ) . wrap ( this . _uiSpinnerHtml ( ) ) . parent ( )
. append ( this . _buttonHtml ( ) ) ; } , _uiSpinnerHtml : function ( ) { return "<span>" ; } , _buttonHtml : function ( ) { return "<a></a><a></a>" ; } } ) ; }
var widgetsSpinner = $ . ui . spinner ; / * !
* jQuery UI Tabs 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.tabs" , { version : "1.12.1" , delay : 300 , options : { active : null , classes : { "ui-tabs" : "ui-corner-all" , "ui-tabs-nav" : "ui-corner-all" , "ui-tabs-panel" : "ui-corner-bottom" , "ui-tabs-tab" : "ui-corner-top" } , collapsible : false , event : "click" , heightStyle : "content" , hide : null , show : null , activate : null , beforeActivate : null , beforeLoad : null , load : null } , _isLocal : ( function ( ) { var rhash = /#.*$/ ; return function ( anchor ) { var anchorUrl , locationUrl ; anchorUrl = anchor . href . replace ( rhash , "" ) ; locationUrl = location . href . replace ( rhash , "" ) ; try { anchorUrl = decodeURIComponent ( anchorUrl ) ; } catch ( error ) { }
try { locationUrl = decodeURIComponent ( locationUrl ) ; } catch ( error ) { }
return anchor . hash . length > 1 && anchorUrl === locationUrl ; } ; } ) ( ) , _create : function ( ) { var that = this , options = this . options ; this . running = false ; this . _addClass ( "ui-tabs" , "ui-widget ui-widget-content" ) ; this . _toggleClass ( "ui-tabs-collapsible" , null , options . collapsible ) ; this . _processTabs ( ) ; options . active = this . _initialActive ( ) ; if ( $ . isArray ( options . disabled ) ) { options . disabled = $ . unique ( options . disabled . concat ( $ . map ( this . tabs . filter ( ".ui-state-disabled" ) , function ( li ) { return that . tabs . index ( li ) ; } ) ) ) . sort ( ) ; }
if ( this . options . active !== false && this . anchors . length ) { this . active = this . _findActive ( options . active ) ; } else { this . active = $ ( ) ; }
this . _refresh ( ) ; if ( this . active . length ) { this . load ( options . active ) ; } } , _initialActive : function ( ) { var active = this . options . active , collapsible = this . options . collapsible , locationHash = location . hash . substring ( 1 ) ; if ( active === null ) { if ( locationHash ) { this . tabs . each ( function ( i , tab ) { if ( $ ( tab ) . attr ( "aria-controls" ) === locationHash ) { active = i ; return false ; } } ) ; }
if ( active === null ) { active = this . tabs . index ( this . tabs . filter ( ".ui-tabs-active" ) ) ; }
if ( active === null || active === - 1 ) { active = this . tabs . length ? 0 : false ; } }
if ( active !== false ) { active = this . tabs . index ( this . tabs . eq ( active ) ) ; if ( active === - 1 ) { active = collapsible ? false : 0 ; } }
if ( ! collapsible && active === false && this . anchors . length ) { active = 0 ; }
return active ; } , _getCreateEventData : function ( ) { return { tab : this . active , panel : ! this . active . length ? $ ( ) : this . _getPanelForTab ( this . active ) } ; } , _tabKeydown : function ( event ) { var focusedTab = $ ( $ . ui . safeActiveElement ( this . document [ 0 ] ) ) . closest ( "li" ) , selectedIndex = this . tabs . index ( focusedTab ) , goingForward = true ; if ( this . _handlePageNav ( event ) ) { return ; }
switch ( event . keyCode ) { case $ . ui . keyCode . RIGHT : case $ . ui . keyCode . DOWN : selectedIndex ++ ; break ; case $ . ui . keyCode . UP : case $ . ui . keyCode . LEFT : goingForward = false ; selectedIndex -- ; break ; case $ . ui . keyCode . END : selectedIndex = this . anchors . length - 1 ; break ; case $ . ui . keyCode . HOME : selectedIndex = 0 ; break ; case $ . ui . keyCode . SPACE : event . preventDefault ( ) ; clearTimeout ( this . activating ) ; this . _activate ( selectedIndex ) ; return ; case $ . ui . keyCode . ENTER : event . preventDefault ( ) ; clearTimeout ( this . activating ) ; this . _activate ( selectedIndex === this . options . active ? false : selectedIndex ) ; return ; default : return ; }
event . preventDefault ( ) ; clearTimeout ( this . activating ) ; selectedIndex = this . _focusNextTab ( selectedIndex , goingForward ) ; if ( ! event . ctrlKey && ! event . metaKey ) { focusedTab . attr ( "aria-selected" , "false" ) ; this . tabs . eq ( selectedIndex ) . attr ( "aria-selected" , "true" ) ; this . activating = this . _delay ( function ( ) { this . option ( "active" , selectedIndex ) ; } , this . delay ) ; } } , _panelKeydown : function ( event ) { if ( this . _handlePageNav ( event ) ) { return ; }
if ( event . ctrlKey && event . keyCode === $ . ui . keyCode . UP ) { event . preventDefault ( ) ; this . active . trigger ( "focus" ) ; } } , _handlePageNav : function ( event ) { if ( event . altKey && event . keyCode === $ . ui . keyCode . PAGE _UP ) { this . _activate ( this . _focusNextTab ( this . options . active - 1 , false ) ) ; return true ; }
if ( event . altKey && event . keyCode === $ . ui . keyCode . PAGE _DOWN ) { this . _activate ( this . _focusNextTab ( this . options . active + 1 , true ) ) ; return true ; } } , _findNextTab : function ( index , goingForward ) { var lastTabIndex = this . tabs . length - 1 ; function constrain ( ) { if ( index > lastTabIndex ) { index = 0 ; }
if ( index < 0 ) { index = lastTabIndex ; }
return index ; }
while ( $ . inArray ( constrain ( ) , this . options . disabled ) !== - 1 ) { index = goingForward ? index + 1 : index - 1 ; }
return index ; } , _focusNextTab : function ( index , goingForward ) { index = this . _findNextTab ( index , goingForward ) ; this . tabs . eq ( index ) . trigger ( "focus" ) ; return index ; } , _setOption : function ( key , value ) { if ( key === "active" ) { this . _activate ( value ) ; return ; }
this . _super ( key , value ) ; if ( key === "collapsible" ) { this . _toggleClass ( "ui-tabs-collapsible" , null , value ) ; if ( ! value && this . options . active === false ) { this . _activate ( 0 ) ; } }
if ( key === "event" ) { this . _setupEvents ( value ) ; }
if ( key === "heightStyle" ) { this . _setupHeightStyle ( value ) ; } } , _sanitizeSelector : function ( hash ) { return hash ? hash . replace ( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g , "\\$&" ) : "" ; } , refresh : function ( ) { var options = this . options , lis = this . tablist . children ( ":has(a[href])" ) ; options . disabled = $ . map ( lis . filter ( ".ui-state-disabled" ) , function ( tab ) { return lis . index ( tab ) ; } ) ; this . _processTabs ( ) ; if ( options . active === false || ! this . anchors . length ) { options . active = false ; this . active = $ ( ) ; } else if ( this . active . length && ! $ . contains ( this . tablist [ 0 ] , this . active [ 0 ] ) ) { if ( this . tabs . length === options . disabled . length ) { options . active = false ; this . active = $ ( ) ; } else { this . _activate ( this . _findNextTab ( Math . max ( 0 , options . active - 1 ) , false ) ) ; }
} else { options . active = this . tabs . index ( this . active ) ; }
this . _refresh ( ) ; } , _refresh : function ( ) { this . _setOptionDisabled ( this . options . disabled ) ; this . _setupEvents ( this . options . event ) ; this . _setupHeightStyle ( this . options . heightStyle ) ; this . tabs . not ( this . active ) . attr ( { "aria-selected" : "false" , "aria-expanded" : "false" , tabIndex : - 1 } ) ; this . panels . not ( this . _getPanelForTab ( this . active ) ) . hide ( ) . attr ( { "aria-hidden" : "true" } ) ; if ( ! this . active . length ) { this . tabs . eq ( 0 ) . attr ( "tabIndex" , 0 ) ; } else { this . active . attr ( { "aria-selected" : "true" , "aria-expanded" : "true" , tabIndex : 0 } ) ; this . _addClass ( this . active , "ui-tabs-active" , "ui-state-active" ) ; this . _getPanelForTab ( this . active ) . show ( ) . attr ( { "aria-hidden" : "false" } ) ; } } , _processTabs : function ( ) { var that = this , prevTabs = this . tabs , prevAnchors = this . anchors , prevPanels = this . panels ; this . tablist = this . _getList ( ) . attr ( "role" , "tablist" ) ; this . _addClass ( this . tablist , "ui-tabs-nav" , "ui-helper-reset ui-helper-clearfix ui-widget-header" ) ; this . tablist . on ( "mousedown" + this . eventNamespace , "> li" , function ( event ) { if ( $ ( this ) . is ( ".ui-state-disabled" ) ) { event . preventDefault ( ) ; } } )
. on ( "focus" + this . eventNamespace , ".ui-tabs-anchor" , function ( ) { if ( $ ( this ) . closest ( "li" ) . is ( ".ui-state-disabled" ) ) { this . blur ( ) ; } } ) ; this . tabs = this . tablist . find ( "> li:has(a[href])" ) . attr ( { role : "tab" , tabIndex : - 1 } ) ; this . _addClass ( this . tabs , "ui-tabs-tab" , "ui-state-default" ) ; this . anchors = this . tabs . map ( function ( ) { return $ ( "a" , this ) [ 0 ] ; } ) . attr ( { role : "presentation" , tabIndex : - 1 } ) ; this . _addClass ( this . anchors , "ui-tabs-anchor" ) ; this . panels = $ ( ) ; this . anchors . each ( function ( i , anchor ) { var selector , panel , panelId , anchorId = $ ( anchor ) . uniqueId ( ) . attr ( "id" ) , tab = $ ( anchor ) . closest ( "li" ) , originalAriaControls = tab . attr ( "aria-controls" ) ; if ( that . _isLocal ( anchor ) ) { selector = anchor . hash ; panelId = selector . substring ( 1 ) ; panel = that . element . find ( that . _sanitizeSelector ( selector ) ) ; } else { panelId = tab . attr ( "aria-controls" ) || $ ( { } ) . uniqueId ( ) [ 0 ] . id ; selector = "#" + panelId ; panel = that . element . find ( selector ) ; if ( ! panel . length ) { panel = that . _createPanel ( panelId ) ; panel . insertAfter ( that . panels [ i - 1 ] || that . tablist ) ; }
panel . attr ( "aria-live" , "polite" ) ; }
if ( panel . length ) { that . panels = that . panels . add ( panel ) ; }
if ( originalAriaControls ) { tab . data ( "ui-tabs-aria-controls" , originalAriaControls ) ; }
tab . attr ( { "aria-controls" : panelId , "aria-labelledby" : anchorId } ) ; panel . attr ( "aria-labelledby" , anchorId ) ; } ) ; this . panels . attr ( "role" , "tabpanel" ) ; this . _addClass ( this . panels , "ui-tabs-panel" , "ui-widget-content" ) ; if ( prevTabs ) { this . _off ( prevTabs . not ( this . tabs ) ) ; this . _off ( prevAnchors . not ( this . anchors ) ) ; this . _off ( prevPanels . not ( this . panels ) ) ; } } , _getList : function ( ) { return this . tablist || this . element . find ( "ol, ul" ) . eq ( 0 ) ; } , _createPanel : function ( id ) { return $ ( "<div>" ) . attr ( "id" , id ) . data ( "ui-tabs-destroy" , true ) ; } , _setOptionDisabled : function ( disabled ) { var currentItem , li , i ; if ( $ . isArray ( disabled ) ) { if ( ! disabled . length ) { disabled = false ; } else if ( disabled . length === this . anchors . length ) { disabled = true ; } }
for ( i = 0 ; ( li = this . tabs [ i ] ) ; i ++ ) { currentItem = $ ( li ) ; if ( disabled === true || $ . inArray ( i , disabled ) !== - 1 ) { currentItem . attr ( "aria-disabled" , "true" ) ; this . _addClass ( currentItem , null , "ui-state-disabled" ) ; } else { currentItem . removeAttr ( "aria-disabled" ) ; this . _removeClass ( currentItem , null , "ui-state-disabled" ) ; } }
this . options . disabled = disabled ; this . _toggleClass ( this . widget ( ) , this . widgetFullName + "-disabled" , null , disabled === true ) ; } , _setupEvents : function ( event ) { var events = { } ; if ( event ) { $ . each ( event . split ( " " ) , function ( index , eventName ) { events [ eventName ] = "_eventHandler" ; } ) ; }
this . _off ( this . anchors . add ( this . tabs ) . add ( this . panels ) ) ; this . _on ( true , this . anchors , { click : function ( event ) { event . preventDefault ( ) ; } } ) ; this . _on ( this . anchors , events ) ; this . _on ( this . tabs , { keydown : "_tabKeydown" } ) ; this . _on ( this . panels , { keydown : "_panelKeydown" } ) ; this . _focusable ( this . tabs ) ; this . _hoverable ( this . tabs ) ; } , _setupHeightStyle : function ( heightStyle ) { var maxHeight , parent = this . element . parent ( ) ; if ( heightStyle === "fill" ) { maxHeight = parent . height ( ) ; maxHeight -= this . element . outerHeight ( ) - this . element . height ( ) ; this . element . siblings ( ":visible" ) . each ( function ( ) { var elem = $ ( this ) , position = elem . css ( "position" ) ; if ( position === "absolute" || position === "fixed" ) { return ; }
maxHeight -= elem . outerHeight ( true ) ; } ) ; this . element . children ( ) . not ( this . panels ) . each ( function ( ) { maxHeight -= $ ( this ) . outerHeight ( true ) ; } ) ; this . panels . each ( function ( ) { $ ( this ) . height ( Math . max ( 0 , maxHeight -
$ ( this ) . innerHeight ( ) + $ ( this ) . height ( ) ) ) ; } ) . css ( "overflow" , "auto" ) ; } else if ( heightStyle === "auto" ) { maxHeight = 0 ; this . panels . each ( function ( ) { maxHeight = Math . max ( maxHeight , $ ( this ) . height ( "" ) . height ( ) ) ; } ) . height ( maxHeight ) ; } } , _eventHandler : function ( event ) { var options = this . options , active = this . active , anchor = $ ( event . currentTarget ) , tab = anchor . closest ( "li" ) , clickedIsActive = tab [ 0 ] === active [ 0 ] , collapsing = clickedIsActive && options . collapsible , toShow = collapsing ? $ ( ) : this . _getPanelForTab ( tab ) , toHide = ! active . length ? $ ( ) : this . _getPanelForTab ( active ) , eventData = { oldTab : active , oldPanel : toHide , newTab : collapsing ? $ ( ) : tab , newPanel : toShow } ; event . preventDefault ( ) ; if ( tab . hasClass ( "ui-state-disabled" ) || tab . hasClass ( "ui-tabs-loading" ) || this . running || ( clickedIsActive && ! options . collapsible ) || ( this . _trigger ( "beforeActivate" , event , eventData ) === false ) ) { return ; }
options . active = collapsing ? false : this . tabs . index ( tab ) ; this . active = clickedIsActive ? $ ( ) : tab ; if ( this . xhr ) { this . xhr . abort ( ) ; }
if ( ! toHide . length && ! toShow . length ) { $ . error ( "jQuery UI Tabs: Mismatching fragment identifier." ) ; }
if ( toShow . length ) { this . load ( this . tabs . index ( tab ) , event ) ; }
this . _toggle ( event , eventData ) ; } , _toggle : function ( event , eventData ) { var that = this , toShow = eventData . newPanel , toHide = eventData . oldPanel ; this . running = true ; function complete ( ) { that . running = false ; that . _trigger ( "activate" , event , eventData ) ; }
function show ( ) { that . _addClass ( eventData . newTab . closest ( "li" ) , "ui-tabs-active" , "ui-state-active" ) ; if ( toShow . length && that . options . show ) { that . _show ( toShow , that . options . show , complete ) ; } else { toShow . show ( ) ; complete ( ) ; } }
if ( toHide . length && this . options . hide ) { this . _hide ( toHide , this . options . hide , function ( ) { that . _removeClass ( eventData . oldTab . closest ( "li" ) , "ui-tabs-active" , "ui-state-active" ) ; show ( ) ; } ) ; } else { this . _removeClass ( eventData . oldTab . closest ( "li" ) , "ui-tabs-active" , "ui-state-active" ) ; toHide . hide ( ) ; show ( ) ; }
toHide . attr ( "aria-hidden" , "true" ) ; eventData . oldTab . attr ( { "aria-selected" : "false" , "aria-expanded" : "false" } ) ; if ( toShow . length && toHide . length ) { eventData . oldTab . attr ( "tabIndex" , - 1 ) ; } else if ( toShow . length ) { this . tabs . filter ( function ( ) { return $ ( this ) . attr ( "tabIndex" ) === 0 ; } ) . attr ( "tabIndex" , - 1 ) ; }
toShow . attr ( "aria-hidden" , "false" ) ; eventData . newTab . attr ( { "aria-selected" : "true" , "aria-expanded" : "true" , tabIndex : 0 } ) ; } , _activate : function ( index ) { var anchor , active = this . _findActive ( index ) ; if ( active [ 0 ] === this . active [ 0 ] ) { return ; }
if ( ! active . length ) { active = this . active ; }
anchor = active . find ( ".ui-tabs-anchor" ) [ 0 ] ; this . _eventHandler ( { target : anchor , currentTarget : anchor , preventDefault : $ . noop } ) ; } , _findActive : function ( index ) { return index === false ? $ ( ) : this . tabs . eq ( index ) ; } , _getIndex : function ( index ) { if ( typeof index === "string" ) { index = this . anchors . index ( this . anchors . filter ( "[href$='" +
$ . ui . escapeSelector ( index ) + "']" ) ) ; }
return index ; } , _destroy : function ( ) { if ( this . xhr ) { this . xhr . abort ( ) ; }
this . tablist . removeAttr ( "role" ) . off ( this . eventNamespace ) ; this . anchors . removeAttr ( "role tabIndex" ) . removeUniqueId ( ) ; this . tabs . add ( this . panels ) . each ( function ( ) { if ( $ . data ( this , "ui-tabs-destroy" ) ) { $ ( this ) . remove ( ) ; } else { $ ( this ) . removeAttr ( "role tabIndex " +
"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" ) ; } } ) ; this . tabs . each ( function ( ) { var li = $ ( this ) , prev = li . data ( "ui-tabs-aria-controls" ) ; if ( prev ) { li . attr ( "aria-controls" , prev ) . removeData ( "ui-tabs-aria-controls" ) ; } else { li . removeAttr ( "aria-controls" ) ; } } ) ; this . panels . show ( ) ; if ( this . options . heightStyle !== "content" ) { this . panels . css ( "height" , "" ) ; } } , enable : function ( index ) { var disabled = this . options . disabled ; if ( disabled === false ) { return ; }
if ( index === undefined ) { disabled = false ; } else { index = this . _getIndex ( index ) ; if ( $ . isArray ( disabled ) ) { disabled = $ . map ( disabled , function ( num ) { return num !== index ? num : null ; } ) ; } else { disabled = $ . map ( this . tabs , function ( li , num ) { return num !== index ? num : null ; } ) ; } }
this . _setOptionDisabled ( disabled ) ; } , disable : function ( index ) { var disabled = this . options . disabled ; if ( disabled === true ) { return ; }
if ( index === undefined ) { disabled = true ; } else { index = this . _getIndex ( index ) ; if ( $ . inArray ( index , disabled ) !== - 1 ) { return ; }
if ( $ . isArray ( disabled ) ) { disabled = $ . merge ( [ index ] , disabled ) . sort ( ) ; } else { disabled = [ index ] ; } }
this . _setOptionDisabled ( disabled ) ; } , load : function ( index , event ) { index = this . _getIndex ( index ) ; var that = this , tab = this . tabs . eq ( index ) , anchor = tab . find ( ".ui-tabs-anchor" ) , panel = this . _getPanelForTab ( tab ) , eventData = { tab : tab , panel : panel } , complete = function ( jqXHR , status ) { if ( status === "abort" ) { that . panels . stop ( false , true ) ; }
that . _removeClass ( tab , "ui-tabs-loading" ) ; panel . removeAttr ( "aria-busy" ) ; if ( jqXHR === that . xhr ) { delete that . xhr ; } } ; if ( this . _isLocal ( anchor [ 0 ] ) ) { return ; }
this . xhr = $ . ajax ( this . _ajaxSettings ( anchor , event , eventData ) ) ; if ( this . xhr && this . xhr . statusText !== "canceled" ) { this . _addClass ( tab , "ui-tabs-loading" ) ; panel . attr ( "aria-busy" , "true" ) ; this . xhr . done ( function ( response , status , jqXHR ) { setTimeout ( function ( ) { panel . html ( response ) ; that . _trigger ( "load" , event , eventData ) ; complete ( jqXHR , status ) ; } , 1 ) ; } ) . fail ( function ( jqXHR , status ) { setTimeout ( function ( ) { complete ( jqXHR , status ) ; } , 1 ) ; } ) ; } } , _ajaxSettings : function ( anchor , event , eventData ) { var that = this ; return { url : anchor . attr ( "href" ) . replace ( /#.*$/ , "" ) , beforeSend : function ( jqXHR , settings ) { return that . _trigger ( "beforeLoad" , event , $ . extend ( { jqXHR : jqXHR , ajaxSettings : settings } , eventData ) ) ; } } ; } , _getPanelForTab : function ( tab ) { var id = $ ( tab ) . attr ( "aria-controls" ) ; return this . element . find ( this . _sanitizeSelector ( "#" + id ) ) ; } } ) ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.tabs" , $ . ui . tabs , { _processTabs : function ( ) { this . _superApply ( arguments ) ; this . _addClass ( this . tabs , "ui-tab" ) ; } } ) ; }
var widgetsTabs = $ . ui . tabs ; / * !
* jQuery UI Tooltip 1.12 . 1
* http : //jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license .
* http : //jquery.org/license
* /
$ . widget ( "ui.tooltip" , { version : "1.12.1" , options : { classes : { "ui-tooltip" : "ui-corner-all ui-widget-shadow" } , content : function ( ) { var title = $ ( this ) . attr ( "title" ) || "" ; return $ ( "<a>" ) . text ( title ) . html ( ) ; } , hide : true , items : "[title]:not([disabled])" , position : { my : "left top+15" , at : "left bottom" , collision : "flipfit flip" } , show : true , track : false , close : null , open : null } , _addDescribedBy : function ( elem , id ) { var describedby = ( elem . attr ( "aria-describedby" ) || "" ) . split ( /\s+/ ) ; describedby . push ( id ) ; elem . data ( "ui-tooltip-id" , id ) . attr ( "aria-describedby" , $ . trim ( describedby . join ( " " ) ) ) ; } , _removeDescribedBy : function ( elem ) { var id = elem . data ( "ui-tooltip-id" ) , describedby = ( elem . attr ( "aria-describedby" ) || "" ) . split ( /\s+/ ) , index = $ . inArray ( id , describedby ) ; if ( index !== - 1 ) { describedby . splice ( index , 1 ) ; }
elem . removeData ( "ui-tooltip-id" ) ; describedby = $ . trim ( describedby . join ( " " ) ) ; if ( describedby ) { elem . attr ( "aria-describedby" , describedby ) ; } else { elem . removeAttr ( "aria-describedby" ) ; } } , _create : function ( ) { this . _on ( { mouseover : "open" , focusin : "open" } ) ; this . tooltips = { } ; this . parents = { } ; this . liveRegion = $ ( "<div>" ) . attr ( { role : "log" , "aria-live" : "assertive" , "aria-relevant" : "additions" } ) . appendTo ( this . document [ 0 ] . body ) ; this . _addClass ( this . liveRegion , null , "ui-helper-hidden-accessible" ) ; this . disabledTitles = $ ( [ ] ) ; } , _setOption : function ( key , value ) { var that = this ; this . _super ( key , value ) ; if ( key === "content" ) { $ . each ( this . tooltips , function ( id , tooltipData ) { that . _updateContent ( tooltipData . element ) ; } ) ; } } , _setOptionDisabled : function ( value ) { this [ value ? "_disable" : "_enable" ] ( ) ; } , _disable : function ( ) { var that = this ; $ . each ( this . tooltips , function ( id , tooltipData ) { var event = $ . Event ( "blur" ) ; event . target = event . currentTarget = tooltipData . element [ 0 ] ; that . close ( event , true ) ; } ) ; this . disabledTitles = this . disabledTitles . add ( this . element . find ( this . options . items ) . addBack ( ) . filter ( function ( ) { var element = $ ( this ) ; if ( element . is ( "[title]" ) ) { return element . data ( "ui-tooltip-title" , element . attr ( "title" ) ) . removeAttr ( "title" ) ; } } ) ) ; } , _enable : function ( ) { this . disabledTitles . each ( function ( ) { var element = $ ( this ) ; if ( element . data ( "ui-tooltip-title" ) ) { element . attr ( "title" , element . data ( "ui-tooltip-title" ) ) ; } } ) ; this . disabledTitles = $ ( [ ] ) ; } , open : function ( event ) { var that = this , target = $ ( event ? event . target : this . element )
. closest ( this . options . items ) ; if ( ! target . length || target . data ( "ui-tooltip-id" ) ) { return ; }
if ( target . attr ( "title" ) ) { target . data ( "ui-tooltip-title" , target . attr ( "title" ) ) ; }
target . data ( "ui-tooltip-open" , true ) ; if ( event && event . type === "mouseover" ) { target . parents ( ) . each ( function ( ) { var parent = $ ( this ) , blurEvent ; if ( parent . data ( "ui-tooltip-open" ) ) { blurEvent = $ . Event ( "blur" ) ; blurEvent . target = blurEvent . currentTarget = this ; that . close ( blurEvent , true ) ; }
if ( parent . attr ( "title" ) ) { parent . uniqueId ( ) ; that . parents [ this . id ] = { element : this , title : parent . attr ( "title" ) } ; parent . attr ( "title" , "" ) ; } } ) ; }
this . _registerCloseHandlers ( event , target ) ; this . _updateContent ( target , event ) ; } , _updateContent : function ( target , event ) { var content , contentOption = this . options . content , that = this , eventType = event ? event . type : null ; if ( typeof contentOption === "string" || contentOption . nodeType || contentOption . jquery ) { return this . _open ( event , target , contentOption ) ; }
content = contentOption . call ( target [ 0 ] , function ( response ) { that . _delay ( function ( ) { if ( ! target . data ( "ui-tooltip-open" ) ) { return ; }
if ( event ) { event . type = eventType ; }
this . _open ( event , target , response ) ; } ) ; } ) ; if ( content ) { this . _open ( event , target , content ) ; } } , _open : function ( event , target , content ) { var tooltipData , tooltip , delayedShow , a11yContent , positionOption = $ . extend ( { } , this . options . position ) ; if ( ! content ) { return ; }
tooltipData = this . _find ( target ) ; if ( tooltipData ) { tooltipData . tooltip . find ( ".ui-tooltip-content" ) . html ( content ) ; return ; }
if ( target . is ( "[title]" ) ) { if ( event && event . type === "mouseover" ) { target . attr ( "title" , "" ) ; } else { target . removeAttr ( "title" ) ; } }
tooltipData = this . _tooltip ( target ) ; tooltip = tooltipData . tooltip ; this . _addDescribedBy ( target , tooltip . attr ( "id" ) ) ; tooltip . find ( ".ui-tooltip-content" ) . html ( content ) ; this . liveRegion . children ( ) . hide ( ) ; a11yContent = $ ( "<div>" ) . html ( tooltip . find ( ".ui-tooltip-content" ) . html ( ) ) ; a11yContent . removeAttr ( "name" ) . find ( "[name]" ) . removeAttr ( "name" ) ; a11yContent . removeAttr ( "id" ) . find ( "[id]" ) . removeAttr ( "id" ) ; a11yContent . appendTo ( this . liveRegion ) ; function position ( event ) { positionOption . of = event ; if ( tooltip . is ( ":hidden" ) ) { return ; }
tooltip . position ( positionOption ) ; }
if ( this . options . track && event && /^mouse/ . test ( event . type ) ) { this . _on ( this . document , { mousemove : position } ) ; position ( event ) ; } else { tooltip . position ( $ . extend ( { of : target } , this . options . position ) ) ; }
tooltip . hide ( ) ; this . _show ( tooltip , this . options . show ) ; if ( this . options . track && this . options . show && this . options . show . delay ) { delayedShow = this . delayedShow = setInterval ( function ( ) { if ( tooltip . is ( ":visible" ) ) { position ( positionOption . of ) ; clearInterval ( delayedShow ) ; } } , $ . fx . interval ) ; }
this . _trigger ( "open" , event , { tooltip : tooltip } ) ; } , _registerCloseHandlers : function ( event , target ) { var events = { keyup : function ( event ) { if ( event . keyCode === $ . ui . keyCode . ESCAPE ) { var fakeEvent = $ . Event ( event ) ; fakeEvent . currentTarget = target [ 0 ] ; this . close ( fakeEvent , true ) ; } } } ; if ( target [ 0 ] !== this . element [ 0 ] ) { events . remove = function ( ) { this . _removeTooltip ( this . _find ( target ) . tooltip ) ; } ; }
if ( ! event || event . type === "mouseover" ) { events . mouseleave = "close" ; }
if ( ! event || event . type === "focusin" ) { events . focusout = "close" ; }
this . _on ( true , target , events ) ; } , close : function ( event ) { var tooltip , that = this , target = $ ( event ? event . currentTarget : this . element ) , tooltipData = this . _find ( target ) ; if ( ! tooltipData ) { target . removeData ( "ui-tooltip-open" ) ; return ; }
tooltip = tooltipData . tooltip ; if ( tooltipData . closing ) { return ; }
clearInterval ( this . delayedShow ) ; if ( target . data ( "ui-tooltip-title" ) && ! target . attr ( "title" ) ) { target . attr ( "title" , target . data ( "ui-tooltip-title" ) ) ; }
this . _removeDescribedBy ( target ) ; tooltipData . hiding = true ; tooltip . stop ( true ) ; this . _hide ( tooltip , this . options . hide , function ( ) { that . _removeTooltip ( $ ( this ) ) ; } ) ; target . removeData ( "ui-tooltip-open" ) ; this . _off ( target , "mouseleave focusout keyup" ) ; if ( target [ 0 ] !== this . element [ 0 ] ) { this . _off ( target , "remove" ) ; }
this . _off ( this . document , "mousemove" ) ; if ( event && event . type === "mouseleave" ) { $ . each ( this . parents , function ( id , parent ) { $ ( parent . element ) . attr ( "title" , parent . title ) ; delete that . parents [ id ] ; } ) ; }
tooltipData . closing = true ; this . _trigger ( "close" , event , { tooltip : tooltip } ) ; if ( ! tooltipData . hiding ) { tooltipData . closing = false ; } } , _tooltip : function ( element ) { var tooltip = $ ( "<div>" ) . attr ( "role" , "tooltip" ) , content = $ ( "<div>" ) . appendTo ( tooltip ) , id = tooltip . uniqueId ( ) . attr ( "id" ) ; this . _addClass ( content , "ui-tooltip-content" ) ; this . _addClass ( tooltip , "ui-tooltip" , "ui-widget ui-widget-content" ) ; tooltip . appendTo ( this . _appendTo ( element ) ) ; return this . tooltips [ id ] = { element : element , tooltip : tooltip } ; } , _find : function ( target ) { var id = target . data ( "ui-tooltip-id" ) ; return id ? this . tooltips [ id ] : null ; } , _removeTooltip : function ( tooltip ) { tooltip . remove ( ) ; delete this . tooltips [ tooltip . attr ( "id" ) ] ; } , _appendTo : function ( target ) { var element = target . closest ( ".ui-front, dialog" ) ; if ( ! element . length ) { element = this . document [ 0 ] . body ; }
return element ; } , _destroy : function ( ) { var that = this ; $ . each ( this . tooltips , function ( id , tooltipData ) { var event = $ . Event ( "blur" ) , element = tooltipData . element ; event . target = event . currentTarget = element [ 0 ] ; that . close ( event , true ) ; $ ( "#" + id ) . remove ( ) ; if ( element . data ( "ui-tooltip-title" ) ) { if ( ! element . attr ( "title" ) ) { element . attr ( "title" , element . data ( "ui-tooltip-title" ) ) ; }
element . removeData ( "ui-tooltip-title" ) ; } } ) ; this . liveRegion . remove ( ) ; } } ) ; if ( $ . uiBackCompat !== false ) { $ . widget ( "ui.tooltip" , $ . ui . tooltip , { options : { tooltipClass : null } , _tooltip : function ( ) { var tooltipData = this . _superApply ( arguments ) ; if ( this . options . tooltipClass ) { tooltipData . tooltip . addClass ( this . options . tooltipClass ) ; }
return tooltipData ; } } ) ; }
var widgetsTooltip = $ . ui . tooltip ; } ) ) ; ; / * !
* Bootstrap v3 . 4.1 ( https : //getbootstrap.com/)
* Copyright 2011 - 2019 Twitter , Inc .
* Licensed under the MIT license
* /
if ( typeof jQuery === 'undefined' ) { throw new Error ( 'Bootstrap\'s JavaScript requires jQuery' ) }
+ function ( $ ) { 'use strict' ; var version = $ . fn . jquery . split ( ' ' ) [ 0 ] . split ( '.' )
if ( ( version [ 0 ] < 2 && version [ 1 ] < 9 ) || ( version [ 0 ] == 1 && version [ 1 ] == 9 && version [ 2 ] < 1 ) || ( version [ 0 ] > 3 ) ) { throw new Error ( 'Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4' ) } } ( jQuery ) ; + function ( $ ) { 'use strict' ; function transitionEnd ( ) { var el = document . createElement ( 'bootstrap' )
var transEndEventNames = { WebkitTransition : 'webkitTransitionEnd' , MozTransition : 'transitionend' , OTransition : 'oTransitionEnd otransitionend' , transition : 'transitionend' }
for ( var name in transEndEventNames ) { if ( el . style [ name ] !== undefined ) { return { end : transEndEventNames [ name ] } } }
return false }
$ . fn . emulateTransitionEnd = function ( duration ) { var called = false
var $el = this
$ ( this ) . one ( 'bsTransitionEnd' , function ( ) { called = true } )
var callback = function ( ) { if ( ! called ) $ ( $el ) . trigger ( $ . support . transition . end ) }
setTimeout ( callback , duration )
return this }
$ ( function ( ) { $ . support . transition = transitionEnd ( )
if ( ! $ . support . transition ) return
$ . event . special . bsTransitionEnd = { bindType : $ . support . transition . end , delegateType : $ . support . transition . end , handle : function ( e ) { if ( $ ( e . target ) . is ( this ) ) return e . handleObj . handler . apply ( this , arguments ) } } } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var dismiss = '[data-dismiss="alert"]'
var Alert = function ( el ) { $ ( el ) . on ( 'click' , dismiss , this . close ) }
Alert . VERSION = '3.4.1'
Alert . TRANSITION _DURATION = 150
Alert . prototype . close = function ( e ) { var $this = $ ( this )
var selector = $this . attr ( 'data-target' )
if ( ! selector ) { selector = $this . attr ( 'href' )
selector = selector && selector . replace ( /.*(?=#[^\s]*$)/ , '' ) }
selector = selector === '#' ? [ ] : selector
var $parent = $ ( document ) . find ( selector )
if ( e ) e . preventDefault ( )
if ( ! $parent . length ) { $parent = $this . closest ( '.alert' ) }
$parent . trigger ( e = $ . Event ( 'close.bs.alert' ) )
if ( e . isDefaultPrevented ( ) ) return
$parent . removeClass ( 'in' )
function removeElement ( ) { $parent . detach ( ) . trigger ( 'closed.bs.alert' ) . remove ( ) }
$ . support . transition && $parent . hasClass ( 'fade' ) ? $parent . one ( 'bsTransitionEnd' , removeElement ) . emulateTransitionEnd ( Alert . TRANSITION _DURATION ) : removeElement ( ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.alert' )
if ( ! data ) $this . data ( 'bs.alert' , ( data = new Alert ( this ) ) )
if ( typeof option == 'string' ) data [ option ] . call ( $this ) } ) }
var old = $ . fn . alert
$ . fn . alert = Plugin
$ . fn . alert . Constructor = Alert
$ . fn . alert . noConflict = function ( ) { $ . fn . alert = old
return this }
$ ( document ) . on ( 'click.bs.alert.data-api' , dismiss , Alert . prototype . close ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Button = function ( element , options ) { this . $element = $ ( element )
this . options = $ . extend ( { } , Button . DEFAULTS , options )
this . isLoading = false }
Button . VERSION = '3.4.1'
Button . DEFAULTS = { loadingText : 'loading...' }
Button . prototype . setState = function ( state ) { var d = 'disabled'
var $el = this . $element
var val = $el . is ( 'input' ) ? 'val' : 'html'
var data = $el . data ( )
state += 'Text'
if ( data . resetText == null ) $el . data ( 'resetText' , $el [ val ] ( ) )
setTimeout ( $ . proxy ( function ( ) { $el [ val ] ( data [ state ] == null ? this . options [ state ] : data [ state ] )
if ( state == 'loadingText' ) { this . isLoading = true
$el . addClass ( d ) . attr ( d , d ) . prop ( d , true ) } else if ( this . isLoading ) { this . isLoading = false
$el . removeClass ( d ) . removeAttr ( d ) . prop ( d , false ) } } , this ) , 0 ) }
Button . prototype . toggle = function ( ) { var changed = true
var $parent = this . $element . closest ( '[data-toggle="buttons"]' )
if ( $parent . length ) { var $input = this . $element . find ( 'input' )
if ( $input . prop ( 'type' ) == 'radio' ) { if ( $input . prop ( 'checked' ) ) changed = false
$parent . find ( '.active' ) . removeClass ( 'active' )
this . $element . addClass ( 'active' ) } else if ( $input . prop ( 'type' ) == 'checkbox' ) { if ( ( $input . prop ( 'checked' ) ) !== this . $element . hasClass ( 'active' ) ) changed = false
this . $element . toggleClass ( 'active' ) }
$input . prop ( 'checked' , this . $element . hasClass ( 'active' ) )
if ( changed ) $input . trigger ( 'change' ) } else { this . $element . attr ( 'aria-pressed' , ! this . $element . hasClass ( 'active' ) )
this . $element . toggleClass ( 'active' ) } }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.button' )
var options = typeof option == 'object' && option
if ( ! data ) $this . data ( 'bs.button' , ( data = new Button ( this , options ) ) )
if ( option == 'toggle' ) data . toggle ( )
else if ( option ) data . setState ( option ) } ) }
var old = $ . fn . button
$ . fn . button = Plugin
$ . fn . button . Constructor = Button
$ . fn . button . noConflict = function ( ) { $ . fn . button = old
return this }
$ ( document ) . on ( 'click.bs.button.data-api' , '[data-toggle^="button"]' , function ( e ) { var $btn = $ ( e . target ) . closest ( '.btn' )
Plugin . call ( $btn , 'toggle' )
if ( ! ( $ ( e . target ) . is ( 'input[type="radio"], input[type="checkbox"]' ) ) ) { e . preventDefault ( )
if ( $btn . is ( 'input,button' ) ) $btn . trigger ( 'focus' )
else $btn . find ( 'input:visible,button:visible' ) . first ( ) . trigger ( 'focus' ) } } ) . on ( 'focus.bs.button.data-api blur.bs.button.data-api' , '[data-toggle^="button"]' , function ( e ) { $ ( e . target ) . closest ( '.btn' ) . toggleClass ( 'focus' , /^focus(in)?$/ . test ( e . type ) ) } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Carousel = function ( element , options ) { this . $element = $ ( element )
this . $indicators = this . $element . find ( '.carousel-indicators' )
this . options = options
this . paused = null
this . sliding = null
this . interval = null
this . $active = null
this . $items = null
this . options . keyboard && this . $element . on ( 'keydown.bs.carousel' , $ . proxy ( this . keydown , this ) )
this . options . pause == 'hover' && ! ( 'ontouchstart' in document . documentElement ) && this . $element . on ( 'mouseenter.bs.carousel' , $ . proxy ( this . pause , this ) ) . on ( 'mouseleave.bs.carousel' , $ . proxy ( this . cycle , this ) ) }
Carousel . VERSION = '3.4.1'
Carousel . TRANSITION _DURATION = 600
Carousel . DEFAULTS = { interval : 5000 , pause : 'hover' , wrap : true , keyboard : true }
Carousel . prototype . keydown = function ( e ) { if ( /input|textarea/i . test ( e . target . tagName ) ) return
switch ( e . which ) { case 37 : this . prev ( ) ; break
case 39 : this . next ( ) ; break
default : return }
e . preventDefault ( ) }
Carousel . prototype . cycle = function ( e ) { e || ( this . paused = false )
this . interval && clearInterval ( this . interval )
this . options . interval && ! this . paused && ( this . interval = setInterval ( $ . proxy ( this . next , this ) , this . options . interval ) )
return this }
Carousel . prototype . getItemIndex = function ( item ) { this . $items = item . parent ( ) . children ( '.item' )
return this . $items . index ( item || this . $active ) }
Carousel . prototype . getItemForDirection = function ( direction , active ) { var activeIndex = this . getItemIndex ( active )
var willWrap = ( direction == 'prev' && activeIndex === 0 ) || ( direction == 'next' && activeIndex == ( this . $items . length - 1 ) )
if ( willWrap && ! this . options . wrap ) return active
var delta = direction == 'prev' ? - 1 : 1
var itemIndex = ( activeIndex + delta ) % this . $items . length
return this . $items . eq ( itemIndex ) }
Carousel . prototype . to = function ( pos ) { var that = this
var activeIndex = this . getItemIndex ( this . $active = this . $element . find ( '.item.active' ) )
if ( pos > ( this . $items . length - 1 ) || pos < 0 ) return
if ( this . sliding ) return this . $element . one ( 'slid.bs.carousel' , function ( ) { that . to ( pos ) } )
if ( activeIndex == pos ) return this . pause ( ) . cycle ( )
return this . slide ( pos > activeIndex ? 'next' : 'prev' , this . $items . eq ( pos ) ) }
Carousel . prototype . pause = function ( e ) { e || ( this . paused = true )
if ( this . $element . find ( '.next, .prev' ) . length && $ . support . transition ) { this . $element . trigger ( $ . support . transition . end )
this . cycle ( true ) }
this . interval = clearInterval ( this . interval )
return this }
Carousel . prototype . next = function ( ) { if ( this . sliding ) return
return this . slide ( 'next' ) }
Carousel . prototype . prev = function ( ) { if ( this . sliding ) return
return this . slide ( 'prev' ) }
Carousel . prototype . slide = function ( type , next ) { var $active = this . $element . find ( '.item.active' )
var $next = next || this . getItemForDirection ( type , $active )
var isCycling = this . interval
var direction = type == 'next' ? 'left' : 'right'
var that = this
if ( $next . hasClass ( 'active' ) ) return ( this . sliding = false )
var relatedTarget = $next [ 0 ]
var slideEvent = $ . Event ( 'slide.bs.carousel' , { relatedTarget : relatedTarget , direction : direction } )
this . $element . trigger ( slideEvent )
if ( slideEvent . isDefaultPrevented ( ) ) return
this . sliding = true
isCycling && this . pause ( )
if ( this . $indicators . length ) { this . $indicators . find ( '.active' ) . removeClass ( 'active' )
var $nextIndicator = $ ( this . $indicators . children ( ) [ this . getItemIndex ( $next ) ] )
$nextIndicator && $nextIndicator . addClass ( 'active' ) }
var slidEvent = $ . Event ( 'slid.bs.carousel' , { relatedTarget : relatedTarget , direction : direction } )
if ( $ . support . transition && this . $element . hasClass ( 'slide' ) ) { $next . addClass ( type )
if ( typeof $next === 'object' && $next . length ) { $next [ 0 ] . offsetWidth }
$active . addClass ( direction )
$next . addClass ( direction )
$active . one ( 'bsTransitionEnd' , function ( ) { $next . removeClass ( [ type , direction ] . join ( ' ' ) ) . addClass ( 'active' )
$active . removeClass ( [ 'active' , direction ] . join ( ' ' ) )
that . sliding = false
setTimeout ( function ( ) { that . $element . trigger ( slidEvent ) } , 0 ) } ) . emulateTransitionEnd ( Carousel . TRANSITION _DURATION ) } else { $active . removeClass ( 'active' )
$next . addClass ( 'active' )
this . sliding = false
this . $element . trigger ( slidEvent ) }
isCycling && this . cycle ( )
return this }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.carousel' )
var options = $ . extend ( { } , Carousel . DEFAULTS , $this . data ( ) , typeof option == 'object' && option )
var action = typeof option == 'string' ? option : options . slide
if ( ! data ) $this . data ( 'bs.carousel' , ( data = new Carousel ( this , options ) ) )
if ( typeof option == 'number' ) data . to ( option )
else if ( action ) data [ action ] ( )
else if ( options . interval ) data . pause ( ) . cycle ( ) } ) }
var old = $ . fn . carousel
$ . fn . carousel = Plugin
$ . fn . carousel . Constructor = Carousel
$ . fn . carousel . noConflict = function ( ) { $ . fn . carousel = old
return this }
var clickHandler = function ( e ) { var $this = $ ( this )
var href = $this . attr ( 'href' )
if ( href ) { href = href . replace ( /.*(?=#[^\s]+$)/ , '' ) }
var target = $this . attr ( 'data-target' ) || href
var $target = $ ( document ) . find ( target )
if ( ! $target . hasClass ( 'carousel' ) ) return
var options = $ . extend ( { } , $target . data ( ) , $this . data ( ) )
var slideIndex = $this . attr ( 'data-slide-to' )
if ( slideIndex ) options . interval = false
Plugin . call ( $target , options )
if ( slideIndex ) { $target . data ( 'bs.carousel' ) . to ( slideIndex ) }
e . preventDefault ( ) }
$ ( document ) . on ( 'click.bs.carousel.data-api' , '[data-slide]' , clickHandler ) . on ( 'click.bs.carousel.data-api' , '[data-slide-to]' , clickHandler )
$ ( window ) . on ( 'load' , function ( ) { $ ( '[data-ride="carousel"]' ) . each ( function ( ) { var $carousel = $ ( this )
Plugin . call ( $carousel , $carousel . data ( ) ) } ) } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Collapse = function ( element , options ) { this . $element = $ ( element )
this . options = $ . extend ( { } , Collapse . DEFAULTS , options )
this . $trigger = $ ( '[data-toggle="collapse"][href="#' + element . id + '"],' +
'[data-toggle="collapse"][data-target="#' + element . id + '"]' )
this . transitioning = null
if ( this . options . parent ) { this . $parent = this . getParent ( ) } else { this . addAriaAndCollapsedClass ( this . $element , this . $trigger ) }
if ( this . options . toggle ) this . toggle ( ) }
Collapse . VERSION = '3.4.1'
Collapse . TRANSITION _DURATION = 350
Collapse . DEFAULTS = { toggle : true }
Collapse . prototype . dimension = function ( ) { var hasWidth = this . $element . hasClass ( 'width' )
return hasWidth ? 'width' : 'height' }
Collapse . prototype . show = function ( ) { if ( this . transitioning || this . $element . hasClass ( 'in' ) ) return
var activesData
var actives = this . $parent && this . $parent . children ( '.panel' ) . children ( '.in, .collapsing' )
if ( actives && actives . length ) { activesData = actives . data ( 'bs.collapse' )
if ( activesData && activesData . transitioning ) return }
var startEvent = $ . Event ( 'show.bs.collapse' )
this . $element . trigger ( startEvent )
if ( startEvent . isDefaultPrevented ( ) ) return
if ( actives && actives . length ) { Plugin . call ( actives , 'hide' )
activesData || actives . data ( 'bs.collapse' , null ) }
var dimension = this . dimension ( )
this . $element . removeClass ( 'collapse' ) . addClass ( 'collapsing' ) [ dimension ] ( 0 ) . attr ( 'aria-expanded' , true )
this . $trigger . removeClass ( 'collapsed' ) . attr ( 'aria-expanded' , true )
this . transitioning = 1
var complete = function ( ) { this . $element . removeClass ( 'collapsing' ) . addClass ( 'collapse in' ) [ dimension ] ( '' )
this . transitioning = 0
this . $element . trigger ( 'shown.bs.collapse' ) }
if ( ! $ . support . transition ) return complete . call ( this )
var scrollSize = $ . camelCase ( [ 'scroll' , dimension ] . join ( '-' ) )
this . $element . one ( 'bsTransitionEnd' , $ . proxy ( complete , this ) ) . emulateTransitionEnd ( Collapse . TRANSITION _DURATION ) [ dimension ] ( this . $element [ 0 ] [ scrollSize ] ) }
Collapse . prototype . hide = function ( ) { if ( this . transitioning || ! this . $element . hasClass ( 'in' ) ) return
var startEvent = $ . Event ( 'hide.bs.collapse' )
this . $element . trigger ( startEvent )
if ( startEvent . isDefaultPrevented ( ) ) return
var dimension = this . dimension ( )
this . $element [ dimension ] ( this . $element [ dimension ] ( ) ) [ 0 ] . offsetHeight
this . $element . addClass ( 'collapsing' ) . removeClass ( 'collapse in' ) . attr ( 'aria-expanded' , false )
this . $trigger . addClass ( 'collapsed' ) . attr ( 'aria-expanded' , false )
this . transitioning = 1
var complete = function ( ) { this . transitioning = 0
this . $element . removeClass ( 'collapsing' ) . addClass ( 'collapse' ) . trigger ( 'hidden.bs.collapse' ) }
if ( ! $ . support . transition ) return complete . call ( this )
this . $element
[ dimension ] ( 0 ) . one ( 'bsTransitionEnd' , $ . proxy ( complete , this ) ) . emulateTransitionEnd ( Collapse . TRANSITION _DURATION ) }
Collapse . prototype . toggle = function ( ) { this [ this . $element . hasClass ( 'in' ) ? 'hide' : 'show' ] ( ) }
Collapse . prototype . getParent = function ( ) { return $ ( document ) . find ( this . options . parent ) . find ( '[data-toggle="collapse"][data-parent="' + this . options . parent + '"]' ) . each ( $ . proxy ( function ( i , element ) { var $element = $ ( element )
this . addAriaAndCollapsedClass ( getTargetFromTrigger ( $element ) , $element ) } , this ) ) . end ( ) }
Collapse . prototype . addAriaAndCollapsedClass = function ( $element , $trigger ) { var isOpen = $element . hasClass ( 'in' )
$element . attr ( 'aria-expanded' , isOpen )
$trigger . toggleClass ( 'collapsed' , ! isOpen ) . attr ( 'aria-expanded' , isOpen ) }
function getTargetFromTrigger ( $trigger ) { var href
var target = $trigger . attr ( 'data-target' ) || ( href = $trigger . attr ( 'href' ) ) && href . replace ( /.*(?=#[^\s]+$)/ , '' )
return $ ( document ) . find ( target ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.collapse' )
var options = $ . extend ( { } , Collapse . DEFAULTS , $this . data ( ) , typeof option == 'object' && option )
if ( ! data && options . toggle && /show|hide/ . test ( option ) ) options . toggle = false
if ( ! data ) $this . data ( 'bs.collapse' , ( data = new Collapse ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . collapse
$ . fn . collapse = Plugin
$ . fn . collapse . Constructor = Collapse
$ . fn . collapse . noConflict = function ( ) { $ . fn . collapse = old
return this }
$ ( document ) . on ( 'click.bs.collapse.data-api' , '[data-toggle="collapse"]' , function ( e ) { var $this = $ ( this )
if ( ! $this . attr ( 'data-target' ) ) e . preventDefault ( )
var $target = getTargetFromTrigger ( $this )
var data = $target . data ( 'bs.collapse' )
var option = data ? 'toggle' : $this . data ( )
Plugin . call ( $target , option ) } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle="dropdown"]'
var Dropdown = function ( element ) { $ ( element ) . on ( 'click.bs.dropdown' , this . toggle ) }
Dropdown . VERSION = '3.4.1'
function getParent ( $this ) { var selector = $this . attr ( 'data-target' )
if ( ! selector ) { selector = $this . attr ( 'href' )
selector = selector && /#[A-Za-z]/ . test ( selector ) && selector . replace ( /.*(?=#[^\s]*$)/ , '' ) }
var $parent = selector !== '#' ? $ ( document ) . find ( selector ) : null
return $parent && $parent . length ? $parent : $this . parent ( ) }
function clearMenus ( e ) { if ( e && e . which === 3 ) return
$ ( backdrop ) . remove ( )
$ ( toggle ) . each ( function ( ) { var $this = $ ( this )
var $parent = getParent ( $this )
var relatedTarget = { relatedTarget : this }
if ( ! $parent . hasClass ( 'open' ) ) return
if ( e && e . type == 'click' && /input|textarea/i . test ( e . target . tagName ) && $ . contains ( $parent [ 0 ] , e . target ) ) return
$parent . trigger ( e = $ . Event ( 'hide.bs.dropdown' , relatedTarget ) )
if ( e . isDefaultPrevented ( ) ) return
$this . attr ( 'aria-expanded' , 'false' )
$parent . removeClass ( 'open' ) . trigger ( $ . Event ( 'hidden.bs.dropdown' , relatedTarget ) ) } ) }
Dropdown . prototype . toggle = function ( e ) { var $this = $ ( this )
if ( $this . is ( '.disabled, :disabled' ) ) return
var $parent = getParent ( $this )
var isActive = $parent . hasClass ( 'open' )
clearMenus ( )
if ( ! isActive ) { if ( 'ontouchstart' in document . documentElement && ! $parent . closest ( '.navbar-nav' ) . length ) { $ ( document . createElement ( 'div' ) ) . addClass ( 'dropdown-backdrop' ) . insertAfter ( $ ( this ) ) . on ( 'click' , clearMenus ) }
var relatedTarget = { relatedTarget : this }
$parent . trigger ( e = $ . Event ( 'show.bs.dropdown' , relatedTarget ) )
if ( e . isDefaultPrevented ( ) ) return
$this . trigger ( 'focus' ) . attr ( 'aria-expanded' , 'true' )
$parent . toggleClass ( 'open' ) . trigger ( $ . Event ( 'shown.bs.dropdown' , relatedTarget ) ) }
return false }
Dropdown . prototype . keydown = function ( e ) { if ( ! /(38|40|27|32)/ . test ( e . which ) || /input|textarea/i . test ( e . target . tagName ) ) return
var $this = $ ( this )
e . preventDefault ( )
e . stopPropagation ( )
if ( $this . is ( '.disabled, :disabled' ) ) return
var $parent = getParent ( $this )
var isActive = $parent . hasClass ( 'open' )
if ( ! isActive && e . which != 27 || isActive && e . which == 27 ) { if ( e . which == 27 ) $parent . find ( toggle ) . trigger ( 'focus' )
return $this . trigger ( 'click' ) }
var desc = ' li:not(.disabled):visible a'
var $items = $parent . find ( '.dropdown-menu' + desc )
if ( ! $items . length ) return
var index = $items . index ( e . target )
if ( e . which == 38 && index > 0 ) index --
if ( e . which == 40 && index < $items . length - 1 ) index ++
if ( ! ~ index ) index = 0
$items . eq ( index ) . trigger ( 'focus' ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.dropdown' )
if ( ! data ) $this . data ( 'bs.dropdown' , ( data = new Dropdown ( this ) ) )
if ( typeof option == 'string' ) data [ option ] . call ( $this ) } ) }
var old = $ . fn . dropdown
$ . fn . dropdown = Plugin
$ . fn . dropdown . Constructor = Dropdown
$ . fn . dropdown . noConflict = function ( ) { $ . fn . dropdown = old
return this }
$ ( document ) . on ( 'click.bs.dropdown.data-api' , clearMenus ) . on ( 'click.bs.dropdown.data-api' , '.dropdown form' , function ( e ) { e . stopPropagation ( ) } ) . on ( 'click.bs.dropdown.data-api' , toggle , Dropdown . prototype . toggle ) . on ( 'keydown.bs.dropdown.data-api' , toggle , Dropdown . prototype . keydown ) . on ( 'keydown.bs.dropdown.data-api' , '.dropdown-menu' , Dropdown . prototype . keydown ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Modal = function ( element , options ) { this . options = options
this . $body = $ ( document . body )
this . $element = $ ( element )
this . $dialog = this . $element . find ( '.modal-dialog' )
this . $backdrop = null
this . isShown = null
this . originalBodyPad = null
this . scrollbarWidth = 0
this . ignoreBackdropClick = false
this . fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if ( this . options . remote ) { this . $element . find ( '.modal-content' ) . load ( this . options . remote , $ . proxy ( function ( ) { this . $element . trigger ( 'loaded.bs.modal' ) } , this ) ) } }
Modal . VERSION = '3.4.1'
Modal . TRANSITION _DURATION = 300
Modal . BACKDROP _TRANSITION _DURATION = 150
Modal . DEFAULTS = { backdrop : true , keyboard : true , show : true }
Modal . prototype . toggle = function ( _relatedTarget ) { return this . isShown ? this . hide ( ) : this . show ( _relatedTarget ) }
Modal . prototype . show = function ( _relatedTarget ) { var that = this
var e = $ . Event ( 'show.bs.modal' , { relatedTarget : _relatedTarget } )
this . $element . trigger ( e )
if ( this . isShown || e . isDefaultPrevented ( ) ) return
this . isShown = true
this . checkScrollbar ( )
this . setScrollbar ( )
this . $body . addClass ( 'modal-open' )
this . escape ( )
this . resize ( )
this . $element . on ( 'click.dismiss.bs.modal' , '[data-dismiss="modal"]' , $ . proxy ( this . hide , this ) )
this . $dialog . on ( 'mousedown.dismiss.bs.modal' , function ( ) { that . $element . one ( 'mouseup.dismiss.bs.modal' , function ( e ) { if ( $ ( e . target ) . is ( that . $element ) ) that . ignoreBackdropClick = true } ) } )
this . backdrop ( function ( ) { var transition = $ . support . transition && that . $element . hasClass ( 'fade' )
if ( ! that . $element . parent ( ) . length ) { that . $element . appendTo ( that . $body ) }
that . $element . show ( ) . scrollTop ( 0 )
that . adjustDialog ( )
if ( transition ) { that . $element [ 0 ] . offsetWidth }
that . $element . addClass ( 'in' )
that . enforceFocus ( )
var e = $ . Event ( 'shown.bs.modal' , { relatedTarget : _relatedTarget } )
transition ? that . $dialog . one ( 'bsTransitionEnd' , function ( ) { that . $element . trigger ( 'focus' ) . trigger ( e ) } ) . emulateTransitionEnd ( Modal . TRANSITION _DURATION ) : that . $element . trigger ( 'focus' ) . trigger ( e ) } ) }
Modal . prototype . hide = function ( e ) { if ( e ) e . preventDefault ( )
e = $ . Event ( 'hide.bs.modal' )
this . $element . trigger ( e )
if ( ! this . isShown || e . isDefaultPrevented ( ) ) return
this . isShown = false
this . escape ( )
this . resize ( )
$ ( document ) . off ( 'focusin.bs.modal' )
this . $element . removeClass ( 'in' ) . off ( 'click.dismiss.bs.modal' ) . off ( 'mouseup.dismiss.bs.modal' )
this . $dialog . off ( 'mousedown.dismiss.bs.modal' )
$ . support . transition && this . $element . hasClass ( 'fade' ) ? this . $element . one ( 'bsTransitionEnd' , $ . proxy ( this . hideModal , this ) ) . emulateTransitionEnd ( Modal . TRANSITION _DURATION ) : this . hideModal ( ) }
Modal . prototype . enforceFocus = function ( ) { $ ( document ) . off ( 'focusin.bs.modal' ) . on ( 'focusin.bs.modal' , $ . proxy ( function ( e ) { if ( document !== e . target && this . $element [ 0 ] !== e . target && ! this . $element . has ( e . target ) . length ) { this . $element . trigger ( 'focus' ) } } , this ) ) }
Modal . prototype . escape = function ( ) { if ( this . isShown && this . options . keyboard ) { this . $element . on ( 'keydown.dismiss.bs.modal' , $ . proxy ( function ( e ) { e . which == 27 && this . hide ( ) } , this ) ) } else if ( ! this . isShown ) { this . $element . off ( 'keydown.dismiss.bs.modal' ) } }
Modal . prototype . resize = function ( ) { if ( this . isShown ) { $ ( window ) . on ( 'resize.bs.modal' , $ . proxy ( this . handleUpdate , this ) ) } else { $ ( window ) . off ( 'resize.bs.modal' ) } }
Modal . prototype . hideModal = function ( ) { var that = this
this . $element . hide ( )
this . backdrop ( function ( ) { that . $body . removeClass ( 'modal-open' )
that . resetAdjustments ( )
that . resetScrollbar ( )
that . $element . trigger ( 'hidden.bs.modal' ) } ) }
Modal . prototype . removeBackdrop = function ( ) { this . $backdrop && this . $backdrop . remove ( )
this . $backdrop = null }
Modal . prototype . backdrop = function ( callback ) { var that = this
var animate = this . $element . hasClass ( 'fade' ) ? 'fade' : ''
if ( this . isShown && this . options . backdrop ) { var doAnimate = $ . support . transition && animate
this . $backdrop = $ ( document . createElement ( 'div' ) ) . addClass ( 'modal-backdrop ' + animate ) . appendTo ( this . $body )
this . $element . on ( 'click.dismiss.bs.modal' , $ . proxy ( function ( e ) { if ( this . ignoreBackdropClick ) { this . ignoreBackdropClick = false
return }
if ( e . target !== e . currentTarget ) return
this . options . backdrop == 'static' ? this . $element [ 0 ] . focus ( ) : this . hide ( ) } , this ) )
if ( doAnimate ) this . $backdrop [ 0 ] . offsetWidth
this . $backdrop . addClass ( 'in' )
if ( ! callback ) return
doAnimate ? this . $backdrop . one ( 'bsTransitionEnd' , callback ) . emulateTransitionEnd ( Modal . BACKDROP _TRANSITION _DURATION ) : callback ( ) } else if ( ! this . isShown && this . $backdrop ) { this . $backdrop . removeClass ( 'in' )
var callbackRemove = function ( ) { that . removeBackdrop ( )
callback && callback ( ) }
$ . support . transition && this . $element . hasClass ( 'fade' ) ? this . $backdrop . one ( 'bsTransitionEnd' , callbackRemove ) . emulateTransitionEnd ( Modal . BACKDROP _TRANSITION _DURATION ) : callbackRemove ( ) } else if ( callback ) { callback ( ) } }
Modal . prototype . handleUpdate = function ( ) { this . adjustDialog ( ) }
Modal . prototype . adjustDialog = function ( ) { var modalIsOverflowing = this . $element [ 0 ] . scrollHeight > document . documentElement . clientHeight
this . $element . css ( { paddingLeft : ! this . bodyIsOverflowing && modalIsOverflowing ? this . scrollbarWidth : '' , paddingRight : this . bodyIsOverflowing && ! modalIsOverflowing ? this . scrollbarWidth : '' } ) }
Modal . prototype . resetAdjustments = function ( ) { this . $element . css ( { paddingLeft : '' , paddingRight : '' } ) }
Modal . prototype . checkScrollbar = function ( ) { var fullWindowWidth = window . innerWidth
if ( ! fullWindowWidth ) { var documentElementRect = document . documentElement . getBoundingClientRect ( )
fullWindowWidth = documentElementRect . right - Math . abs ( documentElementRect . left ) }
this . bodyIsOverflowing = document . body . clientWidth < fullWindowWidth
this . scrollbarWidth = this . measureScrollbar ( ) }
Modal . prototype . setScrollbar = function ( ) { var bodyPad = parseInt ( ( this . $body . css ( 'padding-right' ) || 0 ) , 10 )
this . originalBodyPad = document . body . style . paddingRight || ''
var scrollbarWidth = this . scrollbarWidth
if ( this . bodyIsOverflowing ) { this . $body . css ( 'padding-right' , bodyPad + scrollbarWidth )
$ ( this . fixedContent ) . each ( function ( index , element ) { var actualPadding = element . style . paddingRight
var calculatedPadding = $ ( element ) . css ( 'padding-right' )
$ ( element ) . data ( 'padding-right' , actualPadding ) . css ( 'padding-right' , parseFloat ( calculatedPadding ) + scrollbarWidth + 'px' ) } ) } }
Modal . prototype . resetScrollbar = function ( ) { this . $body . css ( 'padding-right' , this . originalBodyPad )
$ ( this . fixedContent ) . each ( function ( index , element ) { var padding = $ ( element ) . data ( 'padding-right' )
$ ( element ) . removeData ( 'padding-right' )
element . style . paddingRight = padding ? padding : '' } ) }
Modal . prototype . measureScrollbar = function ( ) { var scrollDiv = document . createElement ( 'div' )
scrollDiv . className = 'modal-scrollbar-measure'
this . $body . append ( scrollDiv )
var scrollbarWidth = scrollDiv . offsetWidth - scrollDiv . clientWidth
this . $body [ 0 ] . removeChild ( scrollDiv )
return scrollbarWidth }
function Plugin ( option , _relatedTarget ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.modal' )
var options = $ . extend ( { } , Modal . DEFAULTS , $this . data ( ) , typeof option == 'object' && option )
if ( ! data ) $this . data ( 'bs.modal' , ( data = new Modal ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( _relatedTarget )
else if ( options . show ) data . show ( _relatedTarget ) } ) }
var old = $ . fn . modal
$ . fn . modal = Plugin
$ . fn . modal . Constructor = Modal
$ . fn . modal . noConflict = function ( ) { $ . fn . modal = old
return this }
$ ( document ) . on ( 'click.bs.modal.data-api' , '[data-toggle="modal"]' , function ( e ) { var $this = $ ( this )
var href = $this . attr ( 'href' )
var target = $this . attr ( 'data-target' ) || ( href && href . replace ( /.*(?=#[^\s]+$)/ , '' ) )
var $target = $ ( document ) . find ( target )
var option = $target . data ( 'bs.modal' ) ? 'toggle' : $ . extend ( { remote : ! /#/ . test ( href ) && href } , $target . data ( ) , $this . data ( ) )
if ( $this . is ( 'a' ) ) e . preventDefault ( )
$target . one ( 'show.bs.modal' , function ( showEvent ) { if ( showEvent . isDefaultPrevented ( ) ) return
$target . one ( 'hidden.bs.modal' , function ( ) { $this . is ( ':visible' ) && $this . trigger ( 'focus' ) } ) } )
Plugin . call ( $target , option , this ) } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DISALLOWED _ATTRIBUTES = [ 'sanitize' , 'whiteList' , 'sanitizeFn' ]
var uriAttrs = [ 'background' , 'cite' , 'href' , 'itemtype' , 'longdesc' , 'poster' , 'src' , 'xlink:href' ]
var ARIA _ATTRIBUTE _PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = { '*' : [ 'class' , 'dir' , 'id' , 'lang' , 'role' , ARIA _ATTRIBUTE _PATTERN ] , a : [ 'target' , 'href' , 'title' , 'rel' ] , area : [ ] , b : [ ] , br : [ ] , col : [ ] , code : [ ] , div : [ ] , em : [ ] , hr : [ ] , h1 : [ ] , h2 : [ ] , h3 : [ ] , h4 : [ ] , h5 : [ ] , h6 : [ ] , i : [ ] , img : [ 'src' , 'alt' , 'title' , 'width' , 'height' ] , li : [ ] , ol : [ ] , p : [ ] , pre : [ ] , s : [ ] , small : [ ] , span : [ ] , sub : [ ] , sup : [ ] , strong : [ ] , u : [ ] , ul : [ ] }
var SAFE _URL _PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
var DATA _URL _PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute ( attr , allowedAttributeList ) { var attrName = attr . nodeName . toLowerCase ( )
if ( $ . inArray ( attrName , allowedAttributeList ) !== - 1 ) { if ( $ . inArray ( attrName , uriAttrs ) !== - 1 ) { return Boolean ( attr . nodeValue . match ( SAFE _URL _PATTERN ) || attr . nodeValue . match ( DATA _URL _PATTERN ) ) }
return true }
var regExp = $ ( allowedAttributeList ) . filter ( function ( index , value ) { return value instanceof RegExp } )
for ( var i = 0 , l = regExp . length ; i < l ; i ++ ) { if ( attrName . match ( regExp [ i ] ) ) { return true } }
return false }
function sanitizeHtml ( unsafeHtml , whiteList , sanitizeFn ) { if ( unsafeHtml . length === 0 ) { return unsafeHtml }
if ( sanitizeFn && typeof sanitizeFn === 'function' ) { return sanitizeFn ( unsafeHtml ) }
if ( ! document . implementation || ! document . implementation . createHTMLDocument ) { return unsafeHtml }
var createdDocument = document . implementation . createHTMLDocument ( 'sanitization' )
createdDocument . body . innerHTML = unsafeHtml
var whitelistKeys = $ . map ( whiteList , function ( el , i ) { return i } )
var elements = $ ( createdDocument . body ) . find ( '*' )
for ( var i = 0 , len = elements . length ; i < len ; i ++ ) { var el = elements [ i ]
var elName = el . nodeName . toLowerCase ( )
if ( $ . inArray ( elName , whitelistKeys ) === - 1 ) { el . parentNode . removeChild ( el )
continue }
var attributeList = $ . map ( el . attributes , function ( el ) { return el } )
var whitelistedAttributes = [ ] . concat ( whiteList [ '*' ] || [ ] , whiteList [ elName ] || [ ] )
for ( var j = 0 , len2 = attributeList . length ; j < len2 ; j ++ ) { if ( ! allowedAttribute ( attributeList [ j ] , whitelistedAttributes ) ) { el . removeAttribute ( attributeList [ j ] . nodeName ) } } }
return createdDocument . body . innerHTML }
var Tooltip = function ( element , options ) { this . type = null
this . options = null
this . enabled = null
this . timeout = null
this . hoverState = null
this . $element = null
this . inState = null
this . init ( 'tooltip' , element , options ) }
Tooltip . VERSION = '3.4.1'
Tooltip . TRANSITION _DURATION = 150
Tooltip . DEFAULTS = { animation : true , placement : 'top' , selector : false , template : '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' , trigger : 'hover focus' , title : '' , delay : 0 , html : false , container : false , viewport : { selector : 'body' , padding : 0 } , sanitize : true , sanitizeFn : null , whiteList : DefaultWhitelist }
Tooltip . prototype . init = function ( type , element , options ) { this . enabled = true
this . type = type
this . $element = $ ( element )
this . options = this . getOptions ( options )
this . $viewport = this . options . viewport && $ ( document ) . find ( $ . isFunction ( this . options . viewport ) ? this . options . viewport . call ( this , this . $element ) : ( this . options . viewport . selector || this . options . viewport ) )
this . inState = { click : false , hover : false , focus : false }
if ( this . $element [ 0 ] instanceof document . constructor && ! this . options . selector ) { throw new Error ( '`selector` option must be specified when initializing ' + this . type + ' on the window.document object!' ) }
var triggers = this . options . trigger . split ( ' ' )
for ( var i = triggers . length ; i -- ; ) { var trigger = triggers [ i ]
if ( trigger == 'click' ) { this . $element . on ( 'click.' + this . type , this . options . selector , $ . proxy ( this . toggle , this ) ) } else if ( trigger != 'manual' ) { var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
this . $element . on ( eventIn + '.' + this . type , this . options . selector , $ . proxy ( this . enter , this ) )
this . $element . on ( eventOut + '.' + this . type , this . options . selector , $ . proxy ( this . leave , this ) ) } }
this . options . selector ? ( this . _options = $ . extend ( { } , this . options , { trigger : 'manual' , selector : '' } ) ) : this . fixTitle ( ) }
Tooltip . prototype . getDefaults = function ( ) { return Tooltip . DEFAULTS }
Tooltip . prototype . getOptions = function ( options ) { var dataAttributes = this . $element . data ( )
for ( var dataAttr in dataAttributes ) { if ( dataAttributes . hasOwnProperty ( dataAttr ) && $ . inArray ( dataAttr , DISALLOWED _ATTRIBUTES ) !== - 1 ) { delete dataAttributes [ dataAttr ] } }
options = $ . extend ( { } , this . getDefaults ( ) , dataAttributes , options )
if ( options . delay && typeof options . delay == 'number' ) { options . delay = { show : options . delay , hide : options . delay } }
if ( options . sanitize ) { options . template = sanitizeHtml ( options . template , options . whiteList , options . sanitizeFn ) }
return options }
Tooltip . prototype . getDelegateOptions = function ( ) { var options = { }
var defaults = this . getDefaults ( )
this . _options && $ . each ( this . _options , function ( key , value ) { if ( defaults [ key ] != value ) options [ key ] = value } )
return options }
Tooltip . prototype . enter = function ( obj ) { var self = obj instanceof this . constructor ? obj : $ ( obj . currentTarget ) . data ( 'bs.' + this . type )
if ( ! self ) { self = new this . constructor ( obj . currentTarget , this . getDelegateOptions ( ) )
$ ( obj . currentTarget ) . data ( 'bs.' + this . type , self ) }
if ( obj instanceof $ . Event ) { self . inState [ obj . type == 'focusin' ? 'focus' : 'hover' ] = true }
if ( self . tip ( ) . hasClass ( 'in' ) || self . hoverState == 'in' ) { self . hoverState = 'in'
return }
clearTimeout ( self . timeout )
self . hoverState = 'in'
if ( ! self . options . delay || ! self . options . delay . show ) return self . show ( )
self . timeout = setTimeout ( function ( ) { if ( self . hoverState == 'in' ) self . show ( ) } , self . options . delay . show ) }
Tooltip . prototype . isInStateTrue = function ( ) { for ( var key in this . inState ) { if ( this . inState [ key ] ) return true }
return false }
Tooltip . prototype . leave = function ( obj ) { var self = obj instanceof this . constructor ? obj : $ ( obj . currentTarget ) . data ( 'bs.' + this . type )
if ( ! self ) { self = new this . constructor ( obj . currentTarget , this . getDelegateOptions ( ) )
$ ( obj . currentTarget ) . data ( 'bs.' + this . type , self ) }
if ( obj instanceof $ . Event ) { self . inState [ obj . type == 'focusout' ? 'focus' : 'hover' ] = false }
if ( self . isInStateTrue ( ) ) return
clearTimeout ( self . timeout )
self . hoverState = 'out'
if ( ! self . options . delay || ! self . options . delay . hide ) return self . hide ( )
self . timeout = setTimeout ( function ( ) { if ( self . hoverState == 'out' ) self . hide ( ) } , self . options . delay . hide ) }
Tooltip . prototype . show = function ( ) { var e = $ . Event ( 'show.bs.' + this . type )
if ( this . hasContent ( ) && this . enabled ) { this . $element . trigger ( e )
var inDom = $ . contains ( this . $element [ 0 ] . ownerDocument . documentElement , this . $element [ 0 ] )
if ( e . isDefaultPrevented ( ) || ! inDom ) return
var that = this
var $tip = this . tip ( )
var tipId = this . getUID ( this . type )
this . setContent ( )
$tip . attr ( 'id' , tipId )
this . $element . attr ( 'aria-describedby' , tipId )
if ( this . options . animation ) $tip . addClass ( 'fade' )
var placement = typeof this . options . placement == 'function' ? this . options . placement . call ( this , $tip [ 0 ] , this . $element [ 0 ] ) : this . options . placement
var autoToken = /\s?auto?\s?/i
var autoPlace = autoToken . test ( placement )
if ( autoPlace ) placement = placement . replace ( autoToken , '' ) || 'top'
$tip . detach ( ) . css ( { top : 0 , left : 0 , display : 'block' } ) . addClass ( placement ) . data ( 'bs.' + this . type , this )
this . options . container ? $tip . appendTo ( $ ( document ) . find ( this . options . container ) ) : $tip . insertAfter ( this . $element )
this . $element . trigger ( 'inserted.bs.' + this . type )
var pos = this . getPosition ( )
var actualWidth = $tip [ 0 ] . offsetWidth
var actualHeight = $tip [ 0 ] . offsetHeight
if ( autoPlace ) { var orgPlacement = placement
var viewportDim = this . getPosition ( this . $viewport )
placement = placement == 'bottom' && pos . bottom + actualHeight > viewportDim . bottom ? 'top' : placement == 'top' && pos . top - actualHeight < viewportDim . top ? 'bottom' : placement == 'right' && pos . right + actualWidth > viewportDim . width ? 'left' : placement == 'left' && pos . left - actualWidth < viewportDim . left ? 'right' : placement
$tip . removeClass ( orgPlacement ) . addClass ( placement ) }
var calculatedOffset = this . getCalculatedOffset ( placement , pos , actualWidth , actualHeight )
this . applyPlacement ( calculatedOffset , placement )
var complete = function ( ) { var prevHoverState = that . hoverState
that . $element . trigger ( 'shown.bs.' + that . type )
that . hoverState = null
if ( prevHoverState == 'out' ) that . leave ( that ) }
$ . support . transition && this . $tip . hasClass ( 'fade' ) ? $tip . one ( 'bsTransitionEnd' , complete ) . emulateTransitionEnd ( Tooltip . TRANSITION _DURATION ) : complete ( ) } }
Tooltip . prototype . applyPlacement = function ( offset , placement ) { var $tip = this . tip ( )
var width = $tip [ 0 ] . offsetWidth
var height = $tip [ 0 ] . offsetHeight
var marginTop = parseInt ( $tip . css ( 'margin-top' ) , 10 )
var marginLeft = parseInt ( $tip . css ( 'margin-left' ) , 10 )
if ( isNaN ( marginTop ) ) marginTop = 0
if ( isNaN ( marginLeft ) ) marginLeft = 0
offset . top += marginTop
offset . left += marginLeft
$ . offset . setOffset ( $tip [ 0 ] , $ . extend ( { using : function ( props ) { $tip . css ( { top : Math . round ( props . top ) , left : Math . round ( props . left ) } ) } } , offset ) , 0 )
$tip . addClass ( 'in' )
var actualWidth = $tip [ 0 ] . offsetWidth
var actualHeight = $tip [ 0 ] . offsetHeight
if ( placement == 'top' && actualHeight != height ) { offset . top = offset . top + height - actualHeight }
var delta = this . getViewportAdjustedDelta ( placement , offset , actualWidth , actualHeight )
if ( delta . left ) offset . left += delta . left
else offset . top += delta . top
var isVertical = /top|bottom/ . test ( placement )
var arrowDelta = isVertical ? delta . left * 2 - width + actualWidth : delta . top * 2 - height + actualHeight
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
$tip . offset ( offset )
this . replaceArrow ( arrowDelta , $tip [ 0 ] [ arrowOffsetPosition ] , isVertical ) }
Tooltip . prototype . replaceArrow = function ( delta , dimension , isVertical ) { this . arrow ( ) . css ( isVertical ? 'left' : 'top' , 50 * ( 1 - delta / dimension ) + '%' ) . css ( isVertical ? 'top' : 'left' , '' ) }
Tooltip . prototype . setContent = function ( ) { var $tip = this . tip ( )
var title = this . getTitle ( )
if ( this . options . html ) { if ( this . options . sanitize ) { title = sanitizeHtml ( title , this . options . whiteList , this . options . sanitizeFn ) }
$tip . find ( '.tooltip-inner' ) . html ( title ) } else { $tip . find ( '.tooltip-inner' ) . text ( title ) }
$tip . removeClass ( 'fade in top bottom left right' ) }
Tooltip . prototype . hide = function ( callback ) { var that = this
var $tip = $ ( this . $tip )
var e = $ . Event ( 'hide.bs.' + this . type )
function complete ( ) { if ( that . hoverState != 'in' ) $tip . detach ( )
if ( that . $element ) { that . $element . removeAttr ( 'aria-describedby' ) . trigger ( 'hidden.bs.' + that . type ) }
callback && callback ( ) }
this . $element . trigger ( e )
if ( e . isDefaultPrevented ( ) ) return
$tip . removeClass ( 'in' )
$ . support . transition && $tip . hasClass ( 'fade' ) ? $tip . one ( 'bsTransitionEnd' , complete ) . emulateTransitionEnd ( Tooltip . TRANSITION _DURATION ) : complete ( )
this . hoverState = null
return this }
Tooltip . prototype . fixTitle = function ( ) { var $e = this . $element
if ( $e . attr ( 'title' ) || typeof $e . attr ( 'data-original-title' ) != 'string' ) { $e . attr ( 'data-original-title' , $e . attr ( 'title' ) || '' ) . attr ( 'title' , '' ) } }
Tooltip . prototype . hasContent = function ( ) { return this . getTitle ( ) }
Tooltip . prototype . getPosition = function ( $element ) { $element = $element || this . $element
var el = $element [ 0 ]
var isBody = el . tagName == 'BODY'
var elRect = el . getBoundingClientRect ( )
if ( elRect . width == null ) { elRect = $ . extend ( { } , elRect , { width : elRect . right - elRect . left , height : elRect . bottom - elRect . top } ) }
var isSvg = window . SVGElement && el instanceof window . SVGElement
var elOffset = isBody ? { top : 0 , left : 0 } : ( isSvg ? null : $element . offset ( ) )
var scroll = { scroll : isBody ? document . documentElement . scrollTop || document . body . scrollTop : $element . scrollTop ( ) }
var outerDims = isBody ? { width : $ ( window ) . width ( ) , height : $ ( window ) . height ( ) } : null
return $ . extend ( { } , elRect , scroll , outerDims , elOffset ) }
Tooltip . prototype . getCalculatedOffset = function ( placement , pos , actualWidth , actualHeight ) { return placement == 'bottom' ? { top : pos . top + pos . height , left : pos . left + pos . width / 2 - actualWidth / 2 } : placement == 'top' ? { top : pos . top - actualHeight , left : pos . left + pos . width / 2 - actualWidth / 2 } : placement == 'left' ? { top : pos . top + pos . height / 2 - actualHeight / 2 , left : pos . left - actualWidth } : { top : pos . top + pos . height / 2 - actualHeight / 2 , left : pos . left + pos . width } }
Tooltip . prototype . getViewportAdjustedDelta = function ( placement , pos , actualWidth , actualHeight ) { var delta = { top : 0 , left : 0 }
if ( ! this . $viewport ) return delta
var viewportPadding = this . options . viewport && this . options . viewport . padding || 0
var viewportDimensions = this . getPosition ( this . $viewport )
if ( /right|left/ . test ( placement ) ) { var topEdgeOffset = pos . top - viewportPadding - viewportDimensions . scroll
var bottomEdgeOffset = pos . top + viewportPadding - viewportDimensions . scroll + actualHeight
if ( topEdgeOffset < viewportDimensions . top ) { delta . top = viewportDimensions . top - topEdgeOffset } else if ( bottomEdgeOffset > viewportDimensions . top + viewportDimensions . height ) { delta . top = viewportDimensions . top + viewportDimensions . height - bottomEdgeOffset } } else { var leftEdgeOffset = pos . left - viewportPadding
var rightEdgeOffset = pos . left + viewportPadding + actualWidth
if ( leftEdgeOffset < viewportDimensions . left ) { delta . left = viewportDimensions . left - leftEdgeOffset } else if ( rightEdgeOffset > viewportDimensions . right ) { delta . left = viewportDimensions . left + viewportDimensions . width - rightEdgeOffset } }
return delta }
Tooltip . prototype . getTitle = function ( ) { var title
var $e = this . $element
var o = this . options
title = $e . attr ( 'data-original-title' ) || ( typeof o . title == 'function' ? o . title . call ( $e [ 0 ] ) : o . title )
return title }
Tooltip . prototype . getUID = function ( prefix ) { do prefix += ~ ~ ( Math . random ( ) * 1000000 )
while ( document . getElementById ( prefix ) )
return prefix }
Tooltip . prototype . tip = function ( ) { if ( ! this . $tip ) { this . $tip = $ ( this . options . template )
if ( this . $tip . length != 1 ) { throw new Error ( this . type + ' `template` option must consist of exactly 1 top-level element!' ) } }
return this . $tip }
Tooltip . prototype . arrow = function ( ) { return ( this . $arrow = this . $arrow || this . tip ( ) . find ( '.tooltip-arrow' ) ) }
Tooltip . prototype . enable = function ( ) { this . enabled = true }
Tooltip . prototype . disable = function ( ) { this . enabled = false }
Tooltip . prototype . toggleEnabled = function ( ) { this . enabled = ! this . enabled }
Tooltip . prototype . toggle = function ( e ) { var self = this
if ( e ) { self = $ ( e . currentTarget ) . data ( 'bs.' + this . type )
if ( ! self ) { self = new this . constructor ( e . currentTarget , this . getDelegateOptions ( ) )
$ ( e . currentTarget ) . data ( 'bs.' + this . type , self ) } }
if ( e ) { self . inState . click = ! self . inState . click
if ( self . isInStateTrue ( ) ) self . enter ( self )
else self . leave ( self ) } else { self . tip ( ) . hasClass ( 'in' ) ? self . leave ( self ) : self . enter ( self ) } }
Tooltip . prototype . destroy = function ( ) { var that = this
clearTimeout ( this . timeout )
this . hide ( function ( ) { that . $element . off ( '.' + that . type ) . removeData ( 'bs.' + that . type )
if ( that . $tip ) { that . $tip . detach ( ) }
that . $tip = null
that . $arrow = null
that . $viewport = null
that . $element = null } ) }
Tooltip . prototype . sanitizeHtml = function ( unsafeHtml ) { return sanitizeHtml ( unsafeHtml , this . options . whiteList , this . options . sanitizeFn ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.tooltip' )
var options = typeof option == 'object' && option
if ( ! data && /destroy|hide/ . test ( option ) ) return
if ( ! data ) $this . data ( 'bs.tooltip' , ( data = new Tooltip ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . tooltip
$ . fn . tooltip = Plugin
$ . fn . tooltip . Constructor = Tooltip
$ . fn . tooltip . noConflict = function ( ) { $ . fn . tooltip = old
return this } } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Popover = function ( element , options ) { this . init ( 'popover' , element , options ) }
if ( ! $ . fn . tooltip ) throw new Error ( 'Popover requires tooltip.js' )
Popover . VERSION = '3.4.1'
Popover . DEFAULTS = $ . extend ( { } , $ . fn . tooltip . Constructor . DEFAULTS , { placement : 'right' , trigger : 'click' , content : '' , template : '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' } )
Popover . prototype = $ . extend ( { } , $ . fn . tooltip . Constructor . prototype )
Popover . prototype . constructor = Popover
Popover . prototype . getDefaults = function ( ) { return Popover . DEFAULTS }
Popover . prototype . setContent = function ( ) { var $tip = this . tip ( )
var title = this . getTitle ( )
var content = this . getContent ( )
if ( this . options . html ) { var typeContent = typeof content
if ( this . options . sanitize ) { title = this . sanitizeHtml ( title )
if ( typeContent === 'string' ) { content = this . sanitizeHtml ( content ) } }
$tip . find ( '.popover-title' ) . html ( title )
$tip . find ( '.popover-content' ) . children ( ) . detach ( ) . end ( ) [ typeContent === 'string' ? 'html' : 'append' ] ( content ) } else { $tip . find ( '.popover-title' ) . text ( title )
$tip . find ( '.popover-content' ) . children ( ) . detach ( ) . end ( ) . text ( content ) }
$tip . removeClass ( 'fade top bottom left right in' )
if ( ! $tip . find ( '.popover-title' ) . html ( ) ) $tip . find ( '.popover-title' ) . hide ( ) }
Popover . prototype . hasContent = function ( ) { return this . getTitle ( ) || this . getContent ( ) }
Popover . prototype . getContent = function ( ) { var $e = this . $element
var o = this . options
return $e . attr ( 'data-content' ) || ( typeof o . content == 'function' ? o . content . call ( $e [ 0 ] ) : o . content ) }
Popover . prototype . arrow = function ( ) { return ( this . $arrow = this . $arrow || this . tip ( ) . find ( '.arrow' ) ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.popover' )
var options = typeof option == 'object' && option
if ( ! data && /destroy|hide/ . test ( option ) ) return
if ( ! data ) $this . data ( 'bs.popover' , ( data = new Popover ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . popover
$ . fn . popover = Plugin
$ . fn . popover . Constructor = Popover
$ . fn . popover . noConflict = function ( ) { $ . fn . popover = old
return this } } ( jQuery ) ; + function ( $ ) { 'use strict' ; function ScrollSpy ( element , options ) { this . $body = $ ( document . body )
this . $scrollElement = $ ( element ) . is ( document . body ) ? $ ( window ) : $ ( element )
this . options = $ . extend ( { } , ScrollSpy . DEFAULTS , options )
this . selector = ( this . options . target || '' ) + ' .nav li > a'
this . offsets = [ ]
this . targets = [ ]
this . activeTarget = null
this . scrollHeight = 0
this . $scrollElement . on ( 'scroll.bs.scrollspy' , $ . proxy ( this . process , this ) )
this . refresh ( )
this . process ( ) }
ScrollSpy . VERSION = '3.4.1'
ScrollSpy . DEFAULTS = { offset : 10 }
ScrollSpy . prototype . getScrollHeight = function ( ) { return this . $scrollElement [ 0 ] . scrollHeight || Math . max ( this . $body [ 0 ] . scrollHeight , document . documentElement . scrollHeight ) }
ScrollSpy . prototype . refresh = function ( ) { var that = this
var offsetMethod = 'offset'
var offsetBase = 0
this . offsets = [ ]
this . targets = [ ]
this . scrollHeight = this . getScrollHeight ( )
if ( ! $ . isWindow ( this . $scrollElement [ 0 ] ) ) { offsetMethod = 'position'
offsetBase = this . $scrollElement . scrollTop ( ) }
this . $body . find ( this . selector ) . map ( function ( ) { var $el = $ ( this )
var href = $el . data ( 'target' ) || $el . attr ( 'href' )
var $href = /^#./ . test ( href ) && $ ( href )
return ( $href && $href . length && $href . is ( ':visible' ) && [ [ $href [ offsetMethod ] ( ) . top + offsetBase , href ] ] ) || null } ) . sort ( function ( a , b ) { return a [ 0 ] - b [ 0 ] } ) . each ( function ( ) { that . offsets . push ( this [ 0 ] )
that . targets . push ( this [ 1 ] ) } ) }
ScrollSpy . prototype . process = function ( ) { var scrollTop = this . $scrollElement . scrollTop ( ) + this . options . offset
var scrollHeight = this . getScrollHeight ( )
var maxScroll = this . options . offset + scrollHeight - this . $scrollElement . height ( )
var offsets = this . offsets
var targets = this . targets
var activeTarget = this . activeTarget
var i
if ( this . scrollHeight != scrollHeight ) { this . refresh ( ) }
if ( scrollTop >= maxScroll ) { return activeTarget != ( i = targets [ targets . length - 1 ] ) && this . activate ( i ) }
if ( activeTarget && scrollTop < offsets [ 0 ] ) { this . activeTarget = null
return this . clear ( ) }
for ( i = offsets . length ; i -- ; ) { activeTarget != targets [ i ] && scrollTop >= offsets [ i ] && ( offsets [ i + 1 ] === undefined || scrollTop < offsets [ i + 1 ] ) && this . activate ( targets [ i ] ) } }
ScrollSpy . prototype . activate = function ( target ) { this . activeTarget = target
this . clear ( )
var selector = this . selector +
'[data-target="' + target + '"],' +
this . selector + '[href="' + target + '"]'
var active = $ ( selector ) . parents ( 'li' ) . addClass ( 'active' )
if ( active . parent ( '.dropdown-menu' ) . length ) { active = active . closest ( 'li.dropdown' ) . addClass ( 'active' ) }
active . trigger ( 'activate.bs.scrollspy' ) }
ScrollSpy . prototype . clear = function ( ) { $ ( this . selector ) . parentsUntil ( this . options . target , '.active' ) . removeClass ( 'active' ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.scrollspy' )
var options = typeof option == 'object' && option
if ( ! data ) $this . data ( 'bs.scrollspy' , ( data = new ScrollSpy ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . scrollspy
$ . fn . scrollspy = Plugin
$ . fn . scrollspy . Constructor = ScrollSpy
$ . fn . scrollspy . noConflict = function ( ) { $ . fn . scrollspy = old
return this }
$ ( window ) . on ( 'load.bs.scrollspy.data-api' , function ( ) { $ ( '[data-spy="scroll"]' ) . each ( function ( ) { var $spy = $ ( this )
Plugin . call ( $spy , $spy . data ( ) ) } ) } ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Tab = function ( element ) { this . element = $ ( element )
}
Tab . VERSION = '3.4.1'
Tab . TRANSITION _DURATION = 150
Tab . prototype . show = function ( ) { var $this = this . element
var $ul = $this . closest ( 'ul:not(.dropdown-menu)' )
var selector = $this . data ( 'target' )
if ( ! selector ) { selector = $this . attr ( 'href' )
selector = selector && selector . replace ( /.*(?=#[^\s]*$)/ , '' ) }
if ( $this . parent ( 'li' ) . hasClass ( 'active' ) ) return
var $previous = $ul . find ( '.active:last a' )
var hideEvent = $ . Event ( 'hide.bs.tab' , { relatedTarget : $this [ 0 ] } )
var showEvent = $ . Event ( 'show.bs.tab' , { relatedTarget : $previous [ 0 ] } )
$previous . trigger ( hideEvent )
$this . trigger ( showEvent )
if ( showEvent . isDefaultPrevented ( ) || hideEvent . isDefaultPrevented ( ) ) return
var $target = $ ( document ) . find ( selector )
this . activate ( $this . closest ( 'li' ) , $ul )
this . activate ( $target , $target . parent ( ) , function ( ) { $previous . trigger ( { type : 'hidden.bs.tab' , relatedTarget : $this [ 0 ] } )
$this . trigger ( { type : 'shown.bs.tab' , relatedTarget : $previous [ 0 ] } ) } ) }
Tab . prototype . activate = function ( element , container , callback ) { var $active = container . find ( '> .active' )
var transition = callback && $ . support . transition && ( $active . length && $active . hasClass ( 'fade' ) || ! ! container . find ( '> .fade' ) . length )
function next ( ) { $active . removeClass ( 'active' ) . find ( '> .dropdown-menu > .active' ) . removeClass ( 'active' ) . end ( ) . find ( '[data-toggle="tab"]' ) . attr ( 'aria-expanded' , false )
element . addClass ( 'active' ) . find ( '[data-toggle="tab"]' ) . attr ( 'aria-expanded' , true )
if ( transition ) { element [ 0 ] . offsetWidth
element . addClass ( 'in' ) } else { element . removeClass ( 'fade' ) }
if ( element . parent ( '.dropdown-menu' ) . length ) { element . closest ( 'li.dropdown' ) . addClass ( 'active' ) . end ( ) . find ( '[data-toggle="tab"]' ) . attr ( 'aria-expanded' , true ) }
callback && callback ( ) }
$active . length && transition ? $active . one ( 'bsTransitionEnd' , next ) . emulateTransitionEnd ( Tab . TRANSITION _DURATION ) : next ( )
$active . removeClass ( 'in' ) }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.tab' )
if ( ! data ) $this . data ( 'bs.tab' , ( data = new Tab ( this ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . tab
$ . fn . tab = Plugin
$ . fn . tab . Constructor = Tab
$ . fn . tab . noConflict = function ( ) { $ . fn . tab = old
return this }
var clickHandler = function ( e ) { e . preventDefault ( )
Plugin . call ( $ ( this ) , 'show' ) }
$ ( document ) . on ( 'click.bs.tab.data-api' , '[data-toggle="tab"]' , clickHandler ) . on ( 'click.bs.tab.data-api' , '[data-toggle="pill"]' , clickHandler ) } ( jQuery ) ; + function ( $ ) { 'use strict' ; var Affix = function ( element , options ) { this . options = $ . extend ( { } , Affix . DEFAULTS , options )
var target = this . options . target === Affix . DEFAULTS . target ? $ ( this . options . target ) : $ ( document ) . find ( this . options . target )
this . $target = target . on ( 'scroll.bs.affix.data-api' , $ . proxy ( this . checkPosition , this ) ) . on ( 'click.bs.affix.data-api' , $ . proxy ( this . checkPositionWithEventLoop , this ) )
this . $element = $ ( element )
this . affixed = null
this . unpin = null
this . pinnedOffset = null
this . checkPosition ( ) }
Affix . VERSION = '3.4.1'
Affix . RESET = 'affix affix-top affix-bottom'
Affix . DEFAULTS = { offset : 0 , target : window }
Affix . prototype . getState = function ( scrollHeight , height , offsetTop , offsetBottom ) { var scrollTop = this . $target . scrollTop ( )
var position = this . $element . offset ( )
var targetHeight = this . $target . height ( )
if ( offsetTop != null && this . affixed == 'top' ) return scrollTop < offsetTop ? 'top' : false
if ( this . affixed == 'bottom' ) { if ( offsetTop != null ) return ( scrollTop + this . unpin <= position . top ) ? false : 'bottom'
return ( scrollTop + targetHeight <= scrollHeight - offsetBottom ) ? false : 'bottom' }
var initializing = this . affixed == null
var colliderTop = initializing ? scrollTop : position . top
var colliderHeight = initializing ? targetHeight : height
if ( offsetTop != null && scrollTop <= offsetTop ) return 'top'
if ( offsetBottom != null && ( colliderTop + colliderHeight >= scrollHeight - offsetBottom ) ) return 'bottom'
return false }
Affix . prototype . getPinnedOffset = function ( ) { if ( this . pinnedOffset ) return this . pinnedOffset
this . $element . removeClass ( Affix . RESET ) . addClass ( 'affix' )
var scrollTop = this . $target . scrollTop ( )
var position = this . $element . offset ( )
return ( this . pinnedOffset = position . top - scrollTop ) }
Affix . prototype . checkPositionWithEventLoop = function ( ) { setTimeout ( $ . proxy ( this . checkPosition , this ) , 1 ) }
Affix . prototype . checkPosition = function ( ) { if ( ! this . $element . is ( ':visible' ) ) return
var height = this . $element . height ( )
var offset = this . options . offset
var offsetTop = offset . top
var offsetBottom = offset . bottom
var scrollHeight = Math . max ( $ ( document ) . height ( ) , $ ( document . body ) . height ( ) )
if ( typeof offset != 'object' ) offsetBottom = offsetTop = offset
if ( typeof offsetTop == 'function' ) offsetTop = offset . top ( this . $element )
if ( typeof offsetBottom == 'function' ) offsetBottom = offset . bottom ( this . $element )
var affix = this . getState ( scrollHeight , height , offsetTop , offsetBottom )
if ( this . affixed != affix ) { if ( this . unpin != null ) this . $element . css ( 'top' , '' )
var affixType = 'affix' + ( affix ? '-' + affix : '' )
var e = $ . Event ( affixType + '.bs.affix' )
this . $element . trigger ( e )
if ( e . isDefaultPrevented ( ) ) return
this . affixed = affix
this . unpin = affix == 'bottom' ? this . getPinnedOffset ( ) : null
this . $element . removeClass ( Affix . RESET ) . addClass ( affixType ) . trigger ( affixType . replace ( 'affix' , 'affixed' ) + '.bs.affix' ) }
if ( affix == 'bottom' ) { this . $element . offset ( { top : scrollHeight - height - offsetBottom } ) } }
function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this )
var data = $this . data ( 'bs.affix' )
var options = typeof option == 'object' && option
if ( ! data ) $this . data ( 'bs.affix' , ( data = new Affix ( this , options ) ) )
if ( typeof option == 'string' ) data [ option ] ( ) } ) }
var old = $ . fn . affix
$ . fn . affix = Plugin
$ . fn . affix . Constructor = Affix
$ . fn . affix . noConflict = function ( ) { $ . fn . affix = old
return this }
$ ( window ) . on ( 'load' , function ( ) { $ ( '[data-spy="affix"]' ) . each ( function ( ) { var $spy = $ ( this )
var data = $spy . data ( )
data . offset = data . offset || { }
if ( data . offsetBottom != null ) data . offset . bottom = data . offsetBottom
if ( data . offsetTop != null ) data . offset . top = data . offsetTop
Plugin . call ( $spy , data ) } ) } ) } ( jQuery ) ; ; / * ! D a t a T a b l e s 1 . 1 0 . 1 9
* © 2008 - 2018 SpryMedia Ltd - datatables . net / license
* /
( function ( factory ) { "use strict" ; if ( typeof define === 'function' && define . amd ) { define ( [ 'jquery' ] , function ( $ ) { return factory ( $ , window , document ) ; } ) ; }
else if ( typeof exports === 'object' ) { module . exports = function ( root , $ ) { if ( ! root ) { root = window ; }
if ( ! $ ) { $ = typeof window !== 'undefined' ? require ( 'jquery' ) : require ( 'jquery' ) ( root ) ; }
return factory ( $ , root , root . document ) ; } ; }
else { factory ( jQuery , window , document ) ; } }
( function ( $ , window , document , undefined ) { "use strict" ; var DataTable = function ( options )
{ this . $ = function ( sSelector , oOpts )
{ return this . api ( true ) . $ ( sSelector , oOpts ) ; } ; this . _ = function ( sSelector , oOpts )
{ return this . api ( true ) . rows ( sSelector , oOpts ) . data ( ) ; } ; this . api = function ( traditional )
{ return traditional ? new _Api ( _fnSettingsFromNode ( this [ _ext . iApiIndex ] ) ) : new _Api ( this ) ; } ; this . fnAddData = function ( data , redraw )
{ var api = this . api ( true ) ; var rows = $ . isArray ( data ) && ( $ . isArray ( data [ 0 ] ) || $ . isPlainObject ( data [ 0 ] ) ) ? api . rows . add ( data ) : api . row . add ( data ) ; if ( redraw === undefined || redraw ) { api . draw ( ) ; }
return rows . flatten ( ) . toArray ( ) ; } ; this . fnAdjustColumnSizing = function ( bRedraw )
{ var api = this . api ( true ) . columns . adjust ( ) ; var settings = api . settings ( ) [ 0 ] ; var scroll = settings . oScroll ; if ( bRedraw === undefined || bRedraw ) { api . draw ( false ) ; }
else if ( scroll . sX !== "" || scroll . sY !== "" ) { _fnScrollDraw ( settings ) ; } } ; this . fnClearTable = function ( bRedraw )
{ var api = this . api ( true ) . clear ( ) ; if ( bRedraw === undefined || bRedraw ) { api . draw ( ) ; } } ; this . fnClose = function ( nTr )
{ this . api ( true ) . row ( nTr ) . child . hide ( ) ; } ; this . fnDeleteRow = function ( target , callback , redraw )
{ var api = this . api ( true ) ; var rows = api . rows ( target ) ; var settings = rows . settings ( ) [ 0 ] ; var data = settings . aoData [ rows [ 0 ] [ 0 ] ] ; rows . remove ( ) ; if ( callback ) { callback . call ( this , settings , data ) ; }
if ( redraw === undefined || redraw ) { api . draw ( ) ; }
return data ; } ; this . fnDestroy = function ( remove )
{ this . api ( true ) . destroy ( remove ) ; } ; this . fnDraw = function ( complete )
{ this . api ( true ) . draw ( complete ) ; } ; this . fnFilter = function ( sInput , iColumn , bRegex , bSmart , bShowGlobal , bCaseInsensitive )
{ var api = this . api ( true ) ; if ( iColumn === null || iColumn === undefined ) { api . search ( sInput , bRegex , bSmart , bCaseInsensitive ) ; }
else { api . column ( iColumn ) . search ( sInput , bRegex , bSmart , bCaseInsensitive ) ; }
api . draw ( ) ; } ; this . fnGetData = function ( src , col )
{ var api = this . api ( true ) ; if ( src !== undefined ) { var type = src . nodeName ? src . nodeName . toLowerCase ( ) : '' ; return col !== undefined || type == 'td' || type == 'th' ? api . cell ( src , col ) . data ( ) : api . row ( src ) . data ( ) || null ; }
return api . data ( ) . toArray ( ) ; } ; this . fnGetNodes = function ( iRow )
{ var api = this . api ( true ) ; return iRow !== undefined ? api . row ( iRow ) . node ( ) : api . rows ( ) . nodes ( ) . flatten ( ) . toArray ( ) ; } ; this . fnGetPosition = function ( node )
{ var api = this . api ( true ) ; var nodeName = node . nodeName . toUpperCase ( ) ; if ( nodeName == 'TR' ) { return api . row ( node ) . index ( ) ; }
else if ( nodeName == 'TD' || nodeName == 'TH' ) { var cell = api . cell ( node ) . index ( ) ; return [ cell . row , cell . columnVisible , cell . column ] ; }
return null ; } ; this . fnIsOpen = function ( nTr )
{ return this . api ( true ) . row ( nTr ) . child . isShown ( ) ; } ; this . fnOpen = function ( nTr , mHtml , sClass )
{ return this . api ( true ) . row ( nTr ) . child ( mHtml , sClass ) . show ( ) . child ( ) [ 0 ] ; } ; this . fnPageChange = function ( mAction , bRedraw )
{ var api = this . api ( true ) . page ( mAction ) ; if ( bRedraw === undefined || bRedraw ) { api . draw ( false ) ; } } ; this . fnSetColumnVis = function ( iCol , bShow , bRedraw )
{ var api = this . api ( true ) . column ( iCol ) . visible ( bShow ) ; if ( bRedraw === undefined || bRedraw ) { api . columns . adjust ( ) . draw ( ) ; } } ; this . fnSettings = function ( )
{ return _fnSettingsFromNode ( this [ _ext . iApiIndex ] ) ; } ; this . fnSort = function ( aaSort )
{ this . api ( true ) . order ( aaSort ) . draw ( ) ; } ; this . fnSortListener = function ( nNode , iColumn , fnCallback )
{ this . api ( true ) . order . listener ( nNode , iColumn , fnCallback ) ; } ; this . fnUpdate = function ( mData , mRow , iColumn , bRedraw , bAction )
{ var api = this . api ( true ) ; if ( iColumn === undefined || iColumn === null ) { api . row ( mRow ) . data ( mData ) ; }
else { api . cell ( mRow , iColumn ) . data ( mData ) ; }
if ( bAction === undefined || bAction ) { api . columns . adjust ( ) ; }
if ( bRedraw === undefined || bRedraw ) { api . draw ( ) ; }
return 0 ; } ; this . fnVersionCheck = _ext . fnVersionCheck ; var _that = this ; var emptyInit = options === undefined ; var len = this . length ; if ( emptyInit ) { options = { } ; }
this . oApi = this . internal = _ext . internal ; for ( var fn in DataTable . ext . internal ) { if ( fn ) { this [ fn ] = _fnExternApiFunc ( fn ) ; } }
this . each ( function ( ) { var o = { } ; var oInit = len > 1 ? _fnExtend ( o , options , true ) : options ; var i = 0 , iLen , j , jLen , k , kLen ; var sId = this . getAttribute ( 'id' ) ; var bInitHandedOff = false ; var defaults = DataTable . defaults ; var $this = $ ( this ) ; if ( this . nodeName . toLowerCase ( ) != 'table' )
{ _fnLog ( null , 0 , 'Non-table node initialisation (' + this . nodeName + ')' , 2 ) ; return ; }
_fnCompatOpts ( defaults ) ; _fnCompatCols ( defaults . column ) ; _fnCamelToHungarian ( defaults , defaults , true ) ; _fnCamelToHungarian ( defaults . column , defaults . column , true ) ; _fnCamelToHungarian ( defaults , $ . extend ( oInit , $this . data ( ) ) ) ; var allSettings = DataTable . settings ; for ( i = 0 , iLen = allSettings . length ; i < iLen ; i ++ )
{ var s = allSettings [ i ] ; if ( s . nTable == this || ( s . nTHead && s . nTHead . parentNode == this ) || ( s . nTFoot && s . nTFoot . parentNode == this ) ) { var bRetrieve = oInit . bRetrieve !== undefined ? oInit . bRetrieve : defaults . bRetrieve ; var bDestroy = oInit . bDestroy !== undefined ? oInit . bDestroy : defaults . bDestroy ; if ( emptyInit || bRetrieve )
{ return s . oInstance ; }
else if ( bDestroy )
{ s . oInstance . fnDestroy ( ) ; break ; }
else
{ _fnLog ( s , 0 , 'Cannot reinitialise DataTable' , 3 ) ; return ; } }
if ( s . sTableId == this . id )
{ allSettings . splice ( i , 1 ) ; break ; } }
if ( sId === null || sId === "" )
{ sId = "DataTables_Table_" + ( DataTable . ext . _unique ++ ) ; this . id = sId ; }
var oSettings = $ . extend ( true , { } , DataTable . models . oSettings , { "sDestroyWidth" : $this [ 0 ] . style . width , "sInstance" : sId , "sTableId" : sId } ) ; oSettings . nTable = this ; oSettings . oApi = _that . internal ; oSettings . oInit = oInit ; allSettings . push ( oSettings ) ; oSettings . oInstance = ( _that . length === 1 ) ? _that : $this . dataTable ( ) ; _fnCompatOpts ( oInit ) ; _fnLanguageCompat ( oInit . oLanguage ) ; if ( oInit . aLengthMenu && ! oInit . iDisplayLength )
{ oInit . iDisplayLength = $ . isArray ( oInit . aLengthMenu [ 0 ] ) ? oInit . aLengthMenu [ 0 ] [ 0 ] : oInit . aLengthMenu [ 0 ] ; }
oInit = _fnExtend ( $ . extend ( true , { } , defaults ) , oInit ) ; _fnMap ( oSettings . oFeatures , oInit , [ "bPaginate" , "bLengthChange" , "bFilter" , "bSort" , "bSortMulti" , "bInfo" , "bProcessing" , "bAutoWidth" , "bSortClasses" , "bServerSide" , "bDeferRender" ] ) ; _fnMap ( oSettings , oInit , [ "asStripeClasses" , "ajax" , "fnServerData" , "fnFormatNumber" , "sServerMethod" , "aaSorting" , "aaSortingFixed" , "aLengthMenu" , "sPaginationType" , "sAjaxSource" , "sAjaxDataProp" , "iStateDuration" , "sDom" , "bSortCellsTop" , "iTabIndex" , "fnStateLoadCallback" , "fnStateSaveCallback" , "renderer" , "searchDelay" , "rowId" , [ "iCookieDuration" , "iStateDuration" ] , [ "oSearch" , "oPreviousSearch" ] , [ "aoSearchCols" , "aoPreSearchCols" ] , [ "iDisplayLength" , "_iDisplayLength" ] ] ) ; _fnMap ( oSettings . oScroll , oInit , [ [ "sScrollX" , "sX" ] , [ "sScrollXInner" , "sXInner" ] , [ "sScrollY" , "sY" ] , [ "bScrollCollapse" , "bCollapse" ] ] ) ; _fnMap ( oSettings . oLanguage , oInit , "fnInfoCallback" ) ; _fnCallbackReg ( oSettings , 'aoDrawCallback' , oInit . fnDrawCallback , 'user' ) ; _fnCallbackReg ( oSettings , 'aoServerParams' , oInit . fnServerParams , 'user' ) ; _fnCallbackReg ( oSettings , 'aoStateSaveParams' , oInit . fnStateSaveParams , 'user' ) ; _fnCallbackReg ( oSettings , 'aoStateLoadParams' , oInit . fnStateLoadParams , 'user' ) ; _fnCallbackReg ( oSettings , 'aoStateLoaded' , oInit . fnStateLoaded , 'user' ) ; _fnCallbackReg ( oSettings , 'aoRowCallback' , oInit . fnRowCallback , 'user' ) ; _fnCallbackReg ( oSettings , 'aoRowCreatedCallback' , oInit . fnCreatedRow , 'user' ) ; _fnCallbackReg ( oSettings , 'aoHeaderCallback' , oInit . fnHeaderCallback , 'user' ) ; _fnCallbackReg ( oSettings , 'aoFooterCallback' , oInit . fnFooterCallback , 'user' ) ; _fnCallbackReg ( oSettings , 'aoInitComplete' , oInit . fnInitComplete , 'user' ) ; _fnCallbackReg ( oSettings , 'aoPreDrawCallback' , oInit . fnPreDrawCallback , 'user' ) ; oSettings . rowIdFn = _fnGetObjectDataFn ( oInit . rowId ) ; _fnBrowserDetect ( oSettings ) ; var oClasses = oSettings . oClasses ; $ . extend ( oClasses , DataTable . ext . classes , oInit . oClasses ) ; $this . addClass ( oClasses . sTable ) ; if ( oSettings . iInitDisplayStart === undefined )
{ oSettings . iInitDisplayStart = oInit . iDisplayStart ; oSettings . _iDisplayStart = oInit . iDisplayStart ; }
if ( oInit . iDeferLoading !== null )
{ oSettings . bDeferLoading = true ; var tmp = $ . isArray ( oInit . iDeferLoading ) ; oSettings . _iRecordsDisplay = tmp ? oInit . iDeferLoading [ 0 ] : oInit . iDeferLoading ; oSettings . _iRecordsTotal = tmp ? oInit . iDeferLoading [ 1 ] : oInit . iDeferLoading ; }
var oLanguage = oSettings . oLanguage ; $ . extend ( true , oLanguage , oInit . oLanguage ) ; if ( oLanguage . sUrl )
{ $ . ajax ( { dataType : 'json' , url : oLanguage . sUrl , success : function ( json ) { _fnLanguageCompat ( json ) ; _fnCamelToHungarian ( defaults . oLanguage , json ) ; $ . extend ( true , oLanguage , json ) ; _fnInitialise ( oSettings ) ; } , error : function ( ) { _fnInitialise ( oSettings ) ; } } ) ; bInitHandedOff = true ; }
if ( oInit . asStripeClasses === null )
{ oSettings . asStripeClasses = [ oClasses . sStripeOdd , oClasses . sStripeEven ] ; }
var stripeClasses = oSettings . asStripeClasses ; var rowOne = $this . children ( 'tbody' ) . find ( 'tr' ) . eq ( 0 ) ; if ( $ . inArray ( true , $ . map ( stripeClasses , function ( el , i ) { return rowOne . hasClass ( el ) ; } ) ) !== - 1 ) { $ ( 'tbody tr' , this ) . removeClass ( stripeClasses . join ( ' ' ) ) ; oSettings . asDestroyStripes = stripeClasses . slice ( ) ; }
var anThs = [ ] ; var aoColumnsInit ; var nThead = this . getElementsByTagName ( 'thead' ) ; if ( nThead . length !== 0 )
{ _fnDetectHeader ( oSettings . aoHeader , nThead [ 0 ] ) ; anThs = _fnGetUniqueThs ( oSettings ) ; }
if ( oInit . aoColumns === null )
{ aoColumnsInit = [ ] ; for ( i = 0 , iLen = anThs . length ; i < iLen ; i ++ )
{ aoColumnsInit . push ( null ) ; } }
else
{ aoColumnsInit = oInit . aoColumns ; }
for ( i = 0 , iLen = aoColumnsInit . length ; i < iLen ; i ++ )
{ _fnAddColumn ( oSettings , anThs ? anThs [ i ] : null ) ; }
_fnApplyColumnDefs ( oSettings , oInit . aoColumnDefs , aoColumnsInit , function ( iCol , oDef ) { _fnColumnOptions ( oSettings , iCol , oDef ) ; } ) ; if ( rowOne . length ) { var a = function ( cell , name ) { return cell . getAttribute ( 'data-' + name ) !== null ? name : null ; } ; $ ( rowOne [ 0 ] ) . children ( 'th, td' ) . each ( function ( i , cell ) { var col = oSettings . aoColumns [ i ] ; if ( col . mData === i ) { var sort = a ( cell , 'sort' ) || a ( cell , 'order' ) ; var filter = a ( cell , 'filter' ) || a ( cell , 'search' ) ; if ( sort !== null || filter !== null ) { col . mData = { _ : i + '.display' , sort : sort !== null ? i + '.@data-' + sort : undefined , type : sort !== null ? i + '.@data-' + sort : undefined , filter : filter !== null ? i + '.@data-' + filter : undefined } ; _fnColumnOptions ( oSettings , i ) ; } } } ) ; }
var features = oSettings . oFeatures ; var loadedInit = function ( ) { if ( oInit . aaSorting === undefined ) { var sorting = oSettings . aaSorting ; for ( i = 0 , iLen = sorting . length ; i < iLen ; i ++ ) { sorting [ i ] [ 1 ] = oSettings . aoColumns [ i ] . asSorting [ 0 ] ; } }
_fnSortingClasses ( oSettings ) ; if ( features . bSort ) { _fnCallbackReg ( oSettings , 'aoDrawCallback' , function ( ) { if ( oSettings . bSorted ) { var aSort = _fnSortFlatten ( oSettings ) ; var sortedColumns = { } ; $ . each ( aSort , function ( i , val ) { sortedColumns [ val . src ] = val . dir ; } ) ; _fnCallbackFire ( oSettings , null , 'order' , [ oSettings , aSort , sortedColumns ] ) ; _fnSortAria ( oSettings ) ; } } ) ; }
_fnCallbackReg ( oSettings , 'aoDrawCallback' , function ( ) { if ( oSettings . bSorted || _fnDataSource ( oSettings ) === 'ssp' || features . bDeferRender ) { _fnSortingClasses ( oSettings ) ; } } , 'sc' ) ; var captions = $this . children ( 'caption' ) . each ( function ( ) { this . _captionSide = $ ( this ) . css ( 'caption-side' ) ; } ) ; var thead = $this . children ( 'thead' ) ; if ( thead . length === 0 ) { thead = $ ( '<thead/>' ) . appendTo ( $this ) ; }
oSettings . nTHead = thead [ 0 ] ; var tbody = $this . children ( 'tbody' ) ; if ( tbody . length === 0 ) { tbody = $ ( '<tbody/>' ) . appendTo ( $this ) ; }
oSettings . nTBody = tbody [ 0 ] ; var tfoot = $this . children ( 'tfoot' ) ; if ( tfoot . length === 0 && captions . length > 0 && ( oSettings . oScroll . sX !== "" || oSettings . oScroll . sY !== "" ) ) { tfoot = $ ( '<tfoot/>' ) . appendTo ( $this ) ; }
if ( tfoot . length === 0 || tfoot . children ( ) . length === 0 ) { $this . addClass ( oClasses . sNoFooter ) ; }
else if ( tfoot . length > 0 ) { oSettings . nTFoot = tfoot [ 0 ] ; _fnDetectHeader ( oSettings . aoFooter , oSettings . nTFoot ) ; }
if ( oInit . aaData ) { for ( i = 0 ; i < oInit . aaData . length ; i ++ ) { _fnAddData ( oSettings , oInit . aaData [ i ] ) ; } }
else if ( oSettings . bDeferLoading || _fnDataSource ( oSettings ) == 'dom' ) { _fnAddTr ( oSettings , $ ( oSettings . nTBody ) . children ( 'tr' ) ) ; }
oSettings . aiDisplay = oSettings . aiDisplayMaster . slice ( ) ; oSettings . bInitialised = true ; if ( bInitHandedOff === false ) { _fnInitialise ( oSettings ) ; } } ; if ( oInit . bStateSave )
{ features . bStateSave = true ; _fnCallbackReg ( oSettings , 'aoDrawCallback' , _fnSaveState , 'state_save' ) ; _fnLoadState ( oSettings , oInit , loadedInit ) ; }
else { loadedInit ( ) ; } } ) ; _that = null ; return this ; } ; var _ext ; var _Api ; var _api _register ; var _api _registerPlural ; var _re _dic = { } ; var _re _new _lines = /[\r\n]/g ; var _re _html = /<.*?>/g ; var _re _date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/ ; var _re _escape _regex = new RegExp ( '(\\' + [ '/' , '.' , '*' , '+' , '?' , '|' , '(' , ')' , '[' , ']' , '{' , '}' , '\\' , '$' , '^' , '-' ] . join ( '|\\' ) + ')' , 'g' ) ; var _re _formatted _numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi ; var _empty = function ( d ) { return ! d || d === true || d === '-' ? true : false ; } ; var _intVal = function ( s ) { var integer = parseInt ( s , 10 ) ; return ! isNaN ( integer ) && isFinite ( s ) ? integer : null ; } ; var _numToDecimal = function ( num , decimalPoint ) { if ( ! _re _dic [ decimalPoint ] ) { _re _dic [ decimalPoint ] = new RegExp ( _fnEscapeRegex ( decimalPoint ) , 'g' ) ; }
return typeof num === 'string' && decimalPoint !== '.' ? num . replace ( /\./g , '' ) . replace ( _re _dic [ decimalPoint ] , '.' ) : num ; } ; var _isNumber = function ( d , decimalPoint , formatted ) { var strType = typeof d === 'string' ; if ( _empty ( d ) ) { return true ; }
if ( decimalPoint && strType ) { d = _numToDecimal ( d , decimalPoint ) ; }
if ( formatted && strType ) { d = d . replace ( _re _formatted _numeric , '' ) ; }
return ! isNaN ( parseFloat ( d ) ) && isFinite ( d ) ; } ; var _isHtml = function ( d ) { return _empty ( d ) || typeof d === 'string' ; } ; var _htmlNumeric = function ( d , decimalPoint , formatted ) { if ( _empty ( d ) ) { return true ; }
var html = _isHtml ( d ) ; return ! html ? null : _isNumber ( _stripHtml ( d ) , decimalPoint , formatted ) ? true : null ; } ; var _pluck = function ( a , prop , prop2 ) { var out = [ ] ; var i = 0 , ien = a . length ; if ( prop2 !== undefined ) { for ( ; i < ien ; i ++ ) { if ( a [ i ] && a [ i ] [ prop ] ) { out . push ( a [ i ] [ prop ] [ prop2 ] ) ; } } }
else { for ( ; i < ien ; i ++ ) { if ( a [ i ] ) { out . push ( a [ i ] [ prop ] ) ; } } }
return out ; } ; var _pluck _order = function ( a , order , prop , prop2 )
{ var out = [ ] ; var i = 0 , ien = order . length ; if ( prop2 !== undefined ) { for ( ; i < ien ; i ++ ) { if ( a [ order [ i ] ] [ prop ] ) { out . push ( a [ order [ i ] ] [ prop ] [ prop2 ] ) ; } } }
else { for ( ; i < ien ; i ++ ) { out . push ( a [ order [ i ] ] [ prop ] ) ; } }
return out ; } ; var _range = function ( len , start )
{ var out = [ ] ; var end ; if ( start === undefined ) { start = 0 ; end = len ; }
else { end = start ; start = len ; }
for ( var i = start ; i < end ; i ++ ) { out . push ( i ) ; }
return out ; } ; var _removeEmpty = function ( a )
{ var out = [ ] ; for ( var i = 0 , ien = a . length ; i < ien ; i ++ ) { if ( a [ i ] ) { out . push ( a [ i ] ) ; } }
return out ; } ; var _stripHtml = function ( d ) { return d . replace ( _re _html , '' ) ; } ; var _areAllUnique = function ( src ) { if ( src . length < 2 ) { return true ; }
var sorted = src . slice ( ) . sort ( ) ; var last = sorted [ 0 ] ; for ( var i = 1 , ien = sorted . length ; i < ien ; i ++ ) { if ( sorted [ i ] === last ) { return false ; }
last = sorted [ i ] ; }
return true ; } ; var _unique = function ( src )
{ if ( _areAllUnique ( src ) ) { return src . slice ( ) ; }
var
out = [ ] , val , i , ien = src . length , j , k = 0 ; again : for ( i = 0 ; i < ien ; i ++ ) { val = src [ i ] ; for ( j = 0 ; j < k ; j ++ ) { if ( out [ j ] === val ) { continue again ; } }
out . push ( val ) ; k ++ ; }
return out ; } ; DataTable . util = { throttle : function ( fn , freq ) { var
frequency = freq !== undefined ? freq : 200 , last , timer ; return function ( ) { var
that = this , now = + new Date ( ) , args = arguments ; if ( last && now < last + frequency ) { clearTimeout ( timer ) ; timer = setTimeout ( function ( ) { last = undefined ; fn . apply ( that , args ) ; } , frequency ) ; }
else { last = now ; fn . apply ( that , args ) ; } } ; } , escapeRegex : function ( val ) { return val . replace ( _re _escape _regex , '\\$1' ) ; } } ; function _fnHungarianMap ( o )
{ var
hungarian = 'a aa ai ao as b fn i m o s ' , match , newKey , map = { } ; $ . each ( o , function ( key , val ) { match = key . match ( /^([^A-Z]+?)([A-Z])/ ) ; if ( match && hungarian . indexOf ( match [ 1 ] + ' ' ) !== - 1 )
{ newKey = key . replace ( match [ 0 ] , match [ 2 ] . toLowerCase ( ) ) ; map [ newKey ] = key ; if ( match [ 1 ] === 'o' )
{ _fnHungarianMap ( o [ key ] ) ; } } } ) ; o . _hungarianMap = map ; }
function _fnCamelToHungarian ( src , user , force )
{ if ( ! src . _hungarianMap ) { _fnHungarianMap ( src ) ; }
var hungarianKey ; $ . each ( user , function ( key , val ) { hungarianKey = src . _hungarianMap [ key ] ; if ( hungarianKey !== undefined && ( force || user [ hungarianKey ] === undefined ) )
{ if ( hungarianKey . charAt ( 0 ) === 'o' )
{ if ( ! user [ hungarianKey ] ) { user [ hungarianKey ] = { } ; }
$ . extend ( true , user [ hungarianKey ] , user [ key ] ) ; _fnCamelToHungarian ( src [ hungarianKey ] , user [ hungarianKey ] , force ) ; }
else { user [ hungarianKey ] = user [ key ] ; } } } ) ; }
function _fnLanguageCompat ( lang )
{ var defaults = DataTable . defaults . oLanguage ; var defaultDecimal = defaults . sDecimal ; if ( defaultDecimal ) { _addNumericSort ( defaultDecimal ) ; }
if ( lang ) { var zeroRecords = lang . sZeroRecords ; if ( ! lang . sEmptyTable && zeroRecords && defaults . sEmptyTable === "No data available in table" )
{ _fnMap ( lang , lang , 'sZeroRecords' , 'sEmptyTable' ) ; }
if ( ! lang . sLoadingRecords && zeroRecords && defaults . sLoadingRecords === "Loading..." )
{ _fnMap ( lang , lang , 'sZeroRecords' , 'sLoadingRecords' ) ; }
if ( lang . sInfoThousands ) { lang . sThousands = lang . sInfoThousands ; }
var decimal = lang . sDecimal ; if ( decimal && defaultDecimal !== decimal ) { _addNumericSort ( decimal ) ; } } }
var _fnCompatMap = function ( o , knew , old ) { if ( o [ knew ] !== undefined ) { o [ old ] = o [ knew ] ; } } ; function _fnCompatOpts ( init )
{ _fnCompatMap ( init , 'ordering' , 'bSort' ) ; _fnCompatMap ( init , 'orderMulti' , 'bSortMulti' ) ; _fnCompatMap ( init , 'orderClasses' , 'bSortClasses' ) ; _fnCompatMap ( init , 'orderCellsTop' , 'bSortCellsTop' ) ; _fnCompatMap ( init , 'order' , 'aaSorting' ) ; _fnCompatMap ( init , 'orderFixed' , 'aaSortingFixed' ) ; _fnCompatMap ( init , 'paging' , 'bPaginate' ) ; _fnCompatMap ( init , 'pagingType' , 'sPaginationType' ) ; _fnCompatMap ( init , 'pageLength' , 'iDisplayLength' ) ; _fnCompatMap ( init , 'searching' , 'bFilter' ) ; if ( typeof init . sScrollX === 'boolean' ) { init . sScrollX = init . sScrollX ? '100%' : '' ; }
if ( typeof init . scrollX === 'boolean' ) { init . scrollX = init . scrollX ? '100%' : '' ; }
var searchCols = init . aoSearchCols ; if ( searchCols ) { for ( var i = 0 , ien = searchCols . length ; i < ien ; i ++ ) { if ( searchCols [ i ] ) { _fnCamelToHungarian ( DataTable . models . oSearch , searchCols [ i ] ) ; } } } }
function _fnCompatCols ( init )
{ _fnCompatMap ( init , 'orderable' , 'bSortable' ) ; _fnCompatMap ( init , 'orderData' , 'aDataSort' ) ; _fnCompatMap ( init , 'orderSequence' , 'asSorting' ) ; _fnCompatMap ( init , 'orderDataType' , 'sortDataType' ) ; var dataSort = init . aDataSort ; if ( typeof dataSort === 'number' && ! $ . isArray ( dataSort ) ) { init . aDataSort = [ dataSort ] ; } }
function _fnBrowserDetect ( settings )
{ if ( ! DataTable . _ _browser ) { var browser = { } ; DataTable . _ _browser = browser ; var n = $ ( '<div/>' ) . css ( { position : 'fixed' , top : 0 , left : $ ( window ) . scrollLeft ( ) * - 1 , height : 1 , width : 1 , overflow : 'hidden' } ) . append ( $ ( '<div/>' ) . css ( { position : 'absolute' , top : 1 , left : 1 , width : 100 , overflow : 'scroll' } ) . append ( $ ( '<div/>' ) . css ( { width : '100%' , height : 10 } ) ) ) . appendTo ( 'body' ) ; var outer = n . children ( ) ; var inner = outer . children ( ) ; browser . barWidth = outer [ 0 ] . offsetWidth - outer [ 0 ] . clientWidth ; browser . bScrollOversize = inner [ 0 ] . offsetWidth === 100 && outer [ 0 ] . clientWidth !== 100 ; browser . bScrollbarLeft = Math . round ( inner . offset ( ) . left ) !== 1 ; browser . bBounding = n [ 0 ] . getBoundingClientRect ( ) . width ? true : false ; n . remove ( ) ; }
$ . extend ( settings . oBrowser , DataTable . _ _browser ) ; settings . oScroll . iBarWidth = DataTable . _ _browser . barWidth ; }
function _fnReduce ( that , fn , init , start , end , inc )
{ var
i = start , value , isSet = false ; if ( init !== undefined ) { value = init ; isSet = true ; }
while ( i !== end ) { if ( ! that . hasOwnProperty ( i ) ) { continue ; }
value = isSet ? fn ( value , that [ i ] , i , that ) : that [ i ] ; isSet = true ; i += inc ; }
return value ; }
function _fnAddColumn ( oSettings , nTh )
{ var oDefaults = DataTable . defaults . column ; var iCol = oSettings . aoColumns . length ; var oCol = $ . extend ( { } , DataTable . models . oColumn , oDefaults , { "nTh" : nTh ? nTh : document . createElement ( 'th' ) , "sTitle" : oDefaults . sTitle ? oDefaults . sTitle : nTh ? nTh . innerHTML : '' , "aDataSort" : oDefaults . aDataSort ? oDefaults . aDataSort : [ iCol ] , "mData" : oDefaults . mData ? oDefaults . mData : iCol , idx : iCol } ) ; oSettings . aoColumns . push ( oCol ) ; var searchCols = oSettings . aoPreSearchCols ; searchCols [ iCol ] = $ . extend ( { } , DataTable . models . oSearch , searchCols [ iCol ] ) ; _fnColumnOptions ( oSettings , iCol , $ ( nTh ) . data ( ) ) ; }
function _fnColumnOptions ( oSettings , iCol , oOptions )
{ var oCol = oSettings . aoColumns [ iCol ] ; var oClasses = oSettings . oClasses ; var th = $ ( oCol . nTh ) ; if ( ! oCol . sWidthOrig ) { oCol . sWidthOrig = th . attr ( 'width' ) || null ; var t = ( th . attr ( 'style' ) || '' ) . match ( /width:\s*(\d+[pxem%]+)/ ) ; if ( t ) { oCol . sWidthOrig = t [ 1 ] ; } }
if ( oOptions !== undefined && oOptions !== null )
{ _fnCompatCols ( oOptions ) ; _fnCamelToHungarian ( DataTable . defaults . column , oOptions ) ; if ( oOptions . mDataProp !== undefined && ! oOptions . mData )
{ oOptions . mData = oOptions . mDataProp ; }
if ( oOptions . sType )
{ oCol . _sManualType = oOptions . sType ; }
if ( oOptions . className && ! oOptions . sClass )
{ oOptions . sClass = oOptions . className ; }
if ( oOptions . sClass ) { th . addClass ( oOptions . sClass ) ; }
$ . extend ( oCol , oOptions ) ; _fnMap ( oCol , oOptions , "sWidth" , "sWidthOrig" ) ; if ( oOptions . iDataSort !== undefined )
{ oCol . aDataSort = [ oOptions . iDataSort ] ; }
_fnMap ( oCol , oOptions , "aDataSort" ) ; }
var mDataSrc = oCol . mData ; var mData = _fnGetObjectDataFn ( mDataSrc ) ; var mRender = oCol . mRender ? _fnGetObjectDataFn ( oCol . mRender ) : null ; var attrTest = function ( src ) { return typeof src === 'string' && src . indexOf ( '@' ) !== - 1 ; } ; oCol . _bAttrSrc = $ . isPlainObject ( mDataSrc ) && ( attrTest ( mDataSrc . sort ) || attrTest ( mDataSrc . type ) || attrTest ( mDataSrc . filter ) ) ; oCol . _setter = null ; oCol . fnGetData = function ( rowData , type , meta ) { var innerData = mData ( rowData , type , undefined , meta ) ; return mRender && type ? mRender ( innerData , type , rowData , meta ) : innerData ; } ; oCol . fnSetData = function ( rowData , val , meta ) { return _fnSetObjectDataFn ( mDataSrc ) ( rowData , val , meta ) ; } ; if ( typeof mDataSrc !== 'number' ) { oSettings . _rowReadObject = true ; }
if ( ! oSettings . oFeatures . bSort )
{ oCol . bSortable = false ; th . addClass ( oClasses . sSortableNone ) ; }
var bAsc = $ . inArray ( 'asc' , oCol . asSorting ) !== - 1 ; var bDesc = $ . inArray ( 'desc' , oCol . asSorting ) !== - 1 ; if ( ! oCol . bSortable || ( ! bAsc && ! bDesc ) )
{ oCol . sSortingClass = oClasses . sSortableNone ; oCol . sSortingClassJUI = "" ; }
else if ( bAsc && ! bDesc )
{ oCol . sSortingClass = oClasses . sSortableAsc ; oCol . sSortingClassJUI = oClasses . sSortJUIAscAllowed ; }
else if ( ! bAsc && bDesc )
{ oCol . sSortingClass = oClasses . sSortableDesc ; oCol . sSortingClassJUI = oClasses . sSortJUIDescAllowed ; }
else
{ oCol . sSortingClass = oClasses . sSortable ; oCol . sSortingClassJUI = oClasses . sSortJUI ; } }
function _fnAdjustColumnSizing ( settings )
{ if ( settings . oFeatures . bAutoWidth !== false )
{ var columns = settings . aoColumns ; _fnCalculateColumnWidths ( settings ) ; for ( var i = 0 , iLen = columns . length ; i < iLen ; i ++ )
{ columns [ i ] . nTh . style . width = columns [ i ] . sWidth ; } }
var scroll = settings . oScroll ; if ( scroll . sY !== '' || scroll . sX !== '' )
{ _fnScrollDraw ( settings ) ; }
_fnCallbackFire ( settings , null , 'column-sizing' , [ settings ] ) ; }
function _fnVisibleToColumnIndex ( oSettings , iMatch )
{ var aiVis = _fnGetColumns ( oSettings , 'bVisible' ) ; return typeof aiVis [ iMatch ] === 'number' ? aiVis [ iMatch ] : null ; }
function _fnColumnIndexToVisible ( oSettings , iMatch )
{ var aiVis = _fnGetColumns ( oSettings , 'bVisible' ) ; var iPos = $ . inArray ( iMatch , aiVis ) ; return iPos !== - 1 ? iPos : null ; }
function _fnVisbleColumns ( oSettings )
{ var vis = 0 ; $ . each ( oSettings . aoColumns , function ( i , col ) { if ( col . bVisible && $ ( col . nTh ) . css ( 'display' ) !== 'none' ) { vis ++ ; } } ) ; return vis ; }
function _fnGetColumns ( oSettings , sParam )
{ var a = [ ] ; $ . map ( oSettings . aoColumns , function ( val , i ) { if ( val [ sParam ] ) { a . push ( i ) ; } } ) ; return a ; }
function _fnColumnTypes ( settings )
{ var columns = settings . aoColumns ; var data = settings . aoData ; var types = DataTable . ext . type . detect ; var i , ien , j , jen , k , ken ; var col , cell , detectedType , cache ; for ( i = 0 , ien = columns . length ; i < ien ; i ++ ) { col = columns [ i ] ; cache = [ ] ; if ( ! col . sType && col . _sManualType ) { col . sType = col . _sManualType ; }
else if ( ! col . sType ) { for ( j = 0 , jen = types . length ; j < jen ; j ++ ) { for ( k = 0 , ken = data . length ; k < ken ; k ++ ) { if ( cache [ k ] === undefined ) { cache [ k ] = _fnGetCellData ( settings , k , i , 'type' ) ; }
detectedType = types [ j ] ( cache [ k ] , settings ) ; if ( ! detectedType && j !== types . length - 1 ) { break ; }
if ( detectedType === 'html' ) { break ; } }
if ( detectedType ) { col . sType = detectedType ; break ; } }
if ( ! col . sType ) { col . sType = 'string' ; } } } }
function _fnApplyColumnDefs ( oSettings , aoColDefs , aoCols , fn )
{ var i , iLen , j , jLen , k , kLen , def ; var columns = oSettings . aoColumns ; if ( aoColDefs )
{ for ( i = aoColDefs . length - 1 ; i >= 0 ; i -- )
{ def = aoColDefs [ i ] ; var aTargets = def . targets !== undefined ? def . targets : def . aTargets ; if ( ! $ . isArray ( aTargets ) )
{ aTargets = [ aTargets ] ; }
for ( j = 0 , jLen = aTargets . length ; j < jLen ; j ++ )
{ if ( typeof aTargets [ j ] === 'number' && aTargets [ j ] >= 0 )
{ while ( columns . length <= aTargets [ j ] )
{ _fnAddColumn ( oSettings ) ; }
fn ( aTargets [ j ] , def ) ; }
else if ( typeof aTargets [ j ] === 'number' && aTargets [ j ] < 0 )
{ fn ( columns . length + aTargets [ j ] , def ) ; }
else if ( typeof aTargets [ j ] === 'string' )
{ for ( k = 0 , kLen = columns . length ; k < kLen ; k ++ )
{ if ( aTargets [ j ] == "_all" || $ ( columns [ k ] . nTh ) . hasClass ( aTargets [ j ] ) )
{ fn ( k , def ) ; } } } } } }
if ( aoCols )
{ for ( i = 0 , iLen = aoCols . length ; i < iLen ; i ++ )
{ fn ( i , aoCols [ i ] ) ; } } }
function _fnAddData ( oSettings , aDataIn , nTr , anTds )
{ var iRow = oSettings . aoData . length ; var oData = $ . extend ( true , { } , DataTable . models . oRow , { src : nTr ? 'dom' : 'data' , idx : iRow } ) ; oData . _aData = aDataIn ; oSettings . aoData . push ( oData ) ; var nTd , sThisType ; var columns = oSettings . aoColumns ; for ( var i = 0 , iLen = columns . length ; i < iLen ; i ++ )
{ columns [ i ] . sType = null ; }
oSettings . aiDisplayMaster . push ( iRow ) ; var id = oSettings . rowIdFn ( aDataIn ) ; if ( id !== undefined ) { oSettings . aIds [ id ] = oData ; }
if ( nTr || ! oSettings . oFeatures . bDeferRender )
{ _fnCreateTr ( oSettings , iRow , nTr , anTds ) ; }
return iRow ; }
function _fnAddTr ( settings , trs )
{ var row ; if ( ! ( trs instanceof $ ) ) { trs = $ ( trs ) ; }
return trs . map ( function ( i , el ) { row = _fnGetRowElements ( settings , el ) ; return _fnAddData ( settings , row . data , el , row . cells ) ; } ) ; }
function _fnNodeToDataIndex ( oSettings , n )
{ return ( n . _DT _RowIndex !== undefined ) ? n . _DT _RowIndex : null ; }
function _fnNodeToColumnIndex ( oSettings , iRow , n )
{ return $ . inArray ( n , oSettings . aoData [ iRow ] . anCells ) ; }
function _fnGetCellData ( settings , rowIdx , colIdx , type )
{ var draw = settings . iDraw ; var col = settings . aoColumns [ colIdx ] ; var rowData = settings . aoData [ rowIdx ] . _aData ; var defaultContent = col . sDefaultContent ; var cellData = col . fnGetData ( rowData , type , { settings : settings , row : rowIdx , col : colIdx } ) ; if ( cellData === undefined ) { if ( settings . iDrawError != draw && defaultContent === null ) { _fnLog ( settings , 0 , "Requested unknown parameter " +
( typeof col . mData == 'function' ? '{function}' : "'" + col . mData + "'" ) +
" for row " + rowIdx + ", column " + colIdx , 4 ) ; settings . iDrawError = draw ; }
return defaultContent ; }
if ( ( cellData === rowData || cellData === null ) && defaultContent !== null && type !== undefined ) { cellData = defaultContent ; }
else if ( typeof cellData === 'function' ) { return cellData . call ( rowData ) ; }
if ( cellData === null && type == 'display' ) { return '' ; }
return cellData ; }
function _fnSetCellData ( settings , rowIdx , colIdx , val )
{ var col = settings . aoColumns [ colIdx ] ; var rowData = settings . aoData [ rowIdx ] . _aData ; col . fnSetData ( rowData , val , { settings : settings , row : rowIdx , col : colIdx } ) ; }
var _ _reArray = /\[.*?\]$/ ; var _ _reFn = /\(\)$/ ; function _fnSplitObjNotation ( str )
{ return $ . map ( str . match ( /(\\.|[^\.])+/g ) || [ '' ] , function ( s ) { return s . replace ( /\\\./g , '.' ) ; } ) ; }
function _fnGetObjectDataFn ( mSource )
{ if ( $ . isPlainObject ( mSource ) )
{ var o = { } ; $ . each ( mSource , function ( key , val ) { if ( val ) { o [ key ] = _fnGetObjectDataFn ( val ) ; } } ) ; return function ( data , type , row , meta ) { var t = o [ type ] || o . _ ; return t !== undefined ? t ( data , type , row , meta ) : data ; } ; }
else if ( mSource === null )
{ return function ( data ) { return data ; } ; }
else if ( typeof mSource === 'function' )
{ return function ( data , type , row , meta ) { return mSource ( data , type , row , meta ) ; } ; }
else if ( typeof mSource === 'string' && ( mSource . indexOf ( '.' ) !== - 1 || mSource . indexOf ( '[' ) !== - 1 || mSource . indexOf ( '(' ) !== - 1 ) )
{ var fetchData = function ( data , type , src ) { var arrayNotation , funcNotation , out , innerSrc ; if ( src !== "" )
{ var a = _fnSplitObjNotation ( src ) ; for ( var i = 0 , iLen = a . length ; i < iLen ; i ++ )
{ arrayNotation = a [ i ] . match ( _ _reArray ) ; funcNotation = a [ i ] . match ( _ _reFn ) ; if ( arrayNotation )
{ a [ i ] = a [ i ] . replace ( _ _reArray , '' ) ; if ( a [ i ] !== "" ) { data = data [ a [ i ] ] ; }
out = [ ] ; a . splice ( 0 , i + 1 ) ; innerSrc = a . join ( '.' ) ; if ( $ . isArray ( data ) ) { for ( var j = 0 , jLen = data . length ; j < jLen ; j ++ ) { out . push ( fetchData ( data [ j ] , type , innerSrc ) ) ; } }
var join = arrayNotation [ 0 ] . substring ( 1 , arrayNotation [ 0 ] . length - 1 ) ; data = ( join === "" ) ? out : out . join ( join ) ; break ; }
else if ( funcNotation )
{ a [ i ] = a [ i ] . replace ( _ _reFn , '' ) ; data = data [ a [ i ] ] ( ) ; continue ; }
if ( data === null || data [ a [ i ] ] === undefined )
{ return undefined ; }
data = data [ a [ i ] ] ; } }
return data ; } ; return function ( data , type ) { return fetchData ( data , type , mSource ) ; } ; }
else
{ return function ( data , type ) { return data [ mSource ] ; } ; } }
function _fnSetObjectDataFn ( mSource )
{ if ( $ . isPlainObject ( mSource ) )
{ return _fnSetObjectDataFn ( mSource . _ ) ; }
else if ( mSource === null )
{ return function ( ) { } ; }
else if ( typeof mSource === 'function' )
{ return function ( data , val , meta ) { mSource ( data , 'set' , val , meta ) ; } ; }
else if ( typeof mSource === 'string' && ( mSource . indexOf ( '.' ) !== - 1 || mSource . indexOf ( '[' ) !== - 1 || mSource . indexOf ( '(' ) !== - 1 ) )
{ var setData = function ( data , val , src ) { var a = _fnSplitObjNotation ( src ) , b ; var aLast = a [ a . length - 1 ] ; var arrayNotation , funcNotation , o , innerSrc ; for ( var i = 0 , iLen = a . length - 1 ; i < iLen ; i ++ )
{ arrayNotation = a [ i ] . match ( _ _reArray ) ; funcNotation = a [ i ] . match ( _ _reFn ) ; if ( arrayNotation )
{ a [ i ] = a [ i ] . replace ( _ _reArray , '' ) ; data [ a [ i ] ] = [ ] ; b = a . slice ( ) ; b . splice ( 0 , i + 1 ) ; innerSrc = b . join ( '.' ) ; if ( $ . isArray ( val ) )
{ for ( var j = 0 , jLen = val . length ; j < jLen ; j ++ )
{ o = { } ; setData ( o , val [ j ] , innerSrc ) ; data [ a [ i ] ] . push ( o ) ; } }
else
{ data [ a [ i ] ] = val ; }
return ; }
else if ( funcNotation )
{ a [ i ] = a [ i ] . replace ( _ _reFn , '' ) ; data = data [ a [ i ] ] ( val ) ; }
if ( data [ a [ i ] ] === null || data [ a [ i ] ] === undefined )
{ data [ a [ i ] ] = { } ; }
data = data [ a [ i ] ] ; }
if ( aLast . match ( _ _reFn ) )
{ data = data [ aLast . replace ( _ _reFn , '' ) ] ( val ) ; }
else
{ data [ aLast . replace ( _ _reArray , '' ) ] = val ; } } ; return function ( data , val ) { return setData ( data , val , mSource ) ; } ; }
else
{ return function ( data , val ) { data [ mSource ] = val ; } ; } }
function _fnGetDataMaster ( settings )
{ return _pluck ( settings . aoData , '_aData' ) ; }
function _fnClearTable ( settings )
{ settings . aoData . length = 0 ; settings . aiDisplayMaster . length = 0 ; settings . aiDisplay . length = 0 ; settings . aIds = { } ; }
function _fnDeleteIndex ( a , iTarget , splice )
{ var iTargetIndex = - 1 ; for ( var i = 0 , iLen = a . length ; i < iLen ; i ++ )
{ if ( a [ i ] == iTarget )
{ iTargetIndex = i ; }
else if ( a [ i ] > iTarget )
{ a [ i ] -- ; } }
if ( iTargetIndex != - 1 && splice === undefined )
{ a . splice ( iTargetIndex , 1 ) ; } }
function _fnInvalidate ( settings , rowIdx , src , colIdx )
{ var row = settings . aoData [ rowIdx ] ; var i , ien ; var cellWrite = function ( cell , col ) { while ( cell . childNodes . length ) { cell . removeChild ( cell . firstChild ) ; }
cell . innerHTML = _fnGetCellData ( settings , rowIdx , col , 'display' ) ; } ; if ( src === 'dom' || ( ( ! src || src === 'auto' ) && row . src === 'dom' ) ) { row . _aData = _fnGetRowElements ( settings , row , colIdx , colIdx === undefined ? undefined : row . _aData ) . data ; }
else { var cells = row . anCells ; if ( cells ) { if ( colIdx !== undefined ) { cellWrite ( cells [ colIdx ] , colIdx ) ; }
else { for ( i = 0 , ien = cells . length ; i < ien ; i ++ ) { cellWrite ( cells [ i ] , i ) ; } } } }
row . _aSortData = null ; row . _aFilterData = null ; var cols = settings . aoColumns ; if ( colIdx !== undefined ) { cols [ colIdx ] . sType = null ; }
else { for ( i = 0 , ien = cols . length ; i < ien ; i ++ ) { cols [ i ] . sType = null ; }
_fnRowAttributes ( settings , row ) ; } }
function _fnGetRowElements ( settings , row , colIdx , d )
{ var
tds = [ ] , td = row . firstChild , name , col , o , i = 0 , contents , columns = settings . aoColumns , objectRead = settings . _rowReadObject ; d = d !== undefined ? d : objectRead ? { } : [ ] ; var attr = function ( str , td ) { if ( typeof str === 'string' ) { var idx = str . indexOf ( '@' ) ; if ( idx !== - 1 ) { var attr = str . substring ( idx + 1 ) ; var setter = _fnSetObjectDataFn ( str ) ; setter ( d , td . getAttribute ( attr ) ) ; } } } ; var cellProcess = function ( cell ) { if ( colIdx === undefined || colIdx === i ) { col = columns [ i ] ; contents = $ . trim ( cell . innerHTML ) ; if ( col && col . _bAttrSrc ) { var setter = _fnSetObjectDataFn ( col . mData . _ ) ; setter ( d , contents ) ; attr ( col . mData . sort , cell ) ; attr ( col . mData . type , cell ) ; attr ( col . mData . filter , cell ) ; }
else { if ( objectRead ) { if ( ! col . _setter ) { col . _setter = _fnSetObjectDataFn ( col . mData ) ; }
col . _setter ( d , contents ) ; }
else { d [ i ] = contents ; } } }
i ++ ; } ; if ( td ) { while ( td ) { name = td . nodeName . toUpperCase ( ) ; if ( name == "TD" || name == "TH" ) { cellProcess ( td ) ; tds . push ( td ) ; }
td = td . nextSibling ; } }
else { tds = row . anCells ; for ( var j = 0 , jen = tds . length ; j < jen ; j ++ ) { cellProcess ( tds [ j ] ) ; } }
var rowNode = row . firstChild ? row : row . nTr ; if ( rowNode ) { var id = rowNode . getAttribute ( 'id' ) ; if ( id ) { _fnSetObjectDataFn ( settings . rowId ) ( d , id ) ; } }
return { data : d , cells : tds } ; }
function _fnCreateTr ( oSettings , iRow , nTrIn , anTds )
{ var
row = oSettings . aoData [ iRow ] , rowData = row . _aData , cells = [ ] , nTr , nTd , oCol , i , iLen ; if ( row . nTr === null )
{ nTr = nTrIn || document . createElement ( 'tr' ) ; row . nTr = nTr ; row . anCells = cells ; nTr . _DT _RowIndex = iRow ; _fnRowAttributes ( oSettings , row ) ; for ( i = 0 , iLen = oSettings . aoColumns . length ; i < iLen ; i ++ )
{ oCol = oSettings . aoColumns [ i ] ; nTd = nTrIn ? anTds [ i ] : document . createElement ( oCol . sCellType ) ; nTd . _DT _CellIndex = { row : iRow , column : i } ; cells . push ( nTd ) ; if ( ( ! nTrIn || oCol . mRender || oCol . mData !== i ) && ( ! $ . isPlainObject ( oCol . mData ) || oCol . mData . _ !== i + '.display' ) ) { nTd . innerHTML = _fnGetCellData ( oSettings , iRow , i , 'display' ) ; }
if ( oCol . sClass )
{ nTd . className += ' ' + oCol . sClass ; }
if ( oCol . bVisible && ! nTrIn )
{ nTr . appendChild ( nTd ) ; }
else if ( ! oCol . bVisible && nTrIn )
{ nTd . parentNode . removeChild ( nTd ) ; }
if ( oCol . fnCreatedCell )
{ oCol . fnCreatedCell . call ( oSettings . oInstance , nTd , _fnGetCellData ( oSettings , iRow , i ) , rowData , iRow , i ) ; } }
_fnCallbackFire ( oSettings , 'aoRowCreatedCallback' , null , [ nTr , rowData , iRow , cells ] ) ; }
row . nTr . setAttribute ( 'role' , 'row' ) ; }
function _fnRowAttributes ( settings , row )
{ var tr = row . nTr ; var data = row . _aData ; if ( tr ) { var id = settings . rowIdFn ( data ) ; if ( id ) { tr . id = id ; }
if ( data . DT _RowClass ) { var a = data . DT _RowClass . split ( ' ' ) ; row . _ _rowc = row . _ _rowc ? _unique ( row . _ _rowc . concat ( a ) ) : a ; $ ( tr ) . removeClass ( row . _ _rowc . join ( ' ' ) ) . addClass ( data . DT _RowClass ) ; }
if ( data . DT _RowAttr ) { $ ( tr ) . attr ( data . DT _RowAttr ) ; }
if ( data . DT _RowData ) { $ ( tr ) . data ( data . DT _RowData ) ; } } }
function _fnBuildHead ( oSettings )
{ var i , ien , cell , row , column ; var thead = oSettings . nTHead ; var tfoot = oSettings . nTFoot ; var createHeader = $ ( 'th, td' , thead ) . length === 0 ; var classes = oSettings . oClasses ; var columns = oSettings . aoColumns ; if ( createHeader ) { row = $ ( '<tr/>' ) . appendTo ( thead ) ; }
for ( i = 0 , ien = columns . length ; i < ien ; i ++ ) { column = columns [ i ] ; cell = $ ( column . nTh ) . addClass ( column . sClass ) ; if ( createHeader ) { cell . appendTo ( row ) ; }
if ( oSettings . oFeatures . bSort ) { cell . addClass ( column . sSortingClass ) ; if ( column . bSortable !== false ) { cell . attr ( 'tabindex' , oSettings . iTabIndex ) . attr ( 'aria-controls' , oSettings . sTableId ) ; _fnSortAttachListener ( oSettings , column . nTh , i ) ; } }
if ( column . sTitle != cell [ 0 ] . innerHTML ) { cell . html ( column . sTitle ) ; }
_fnRenderer ( oSettings , 'header' ) ( oSettings , cell , column , classes ) ; }
if ( createHeader ) { _fnDetectHeader ( oSettings . aoHeader , thead ) ; }
$ ( thead ) . find ( '>tr' ) . attr ( 'role' , 'row' ) ; $ ( thead ) . find ( '>tr>th, >tr>td' ) . addClass ( classes . sHeaderTH ) ; $ ( tfoot ) . find ( '>tr>th, >tr>td' ) . addClass ( classes . sFooterTH ) ; if ( tfoot !== null ) { var cells = oSettings . aoFooter [ 0 ] ; for ( i = 0 , ien = cells . length ; i < ien ; i ++ ) { column = columns [ i ] ; column . nTf = cells [ i ] . cell ; if ( column . sClass ) { $ ( column . nTf ) . addClass ( column . sClass ) ; } } } }
function _fnDrawHead ( oSettings , aoSource , bIncludeHidden )
{ var i , iLen , j , jLen , k , kLen , n , nLocalTr ; var aoLocal = [ ] ; var aApplied = [ ] ; var iColumns = oSettings . aoColumns . length ; var iRowspan , iColspan ; if ( ! aoSource )
{ return ; }
if ( bIncludeHidden === undefined )
{ bIncludeHidden = false ; }
for ( i = 0 , iLen = aoSource . length ; i < iLen ; i ++ )
{ aoLocal [ i ] = aoSource [ i ] . slice ( ) ; aoLocal [ i ] . nTr = aoSource [ i ] . nTr ; for ( j = iColumns - 1 ; j >= 0 ; j -- )
{ if ( ! oSettings . aoColumns [ j ] . bVisible && ! bIncludeHidden )
{ aoLocal [ i ] . splice ( j , 1 ) ; } }
aApplied . push ( [ ] ) ; }
for ( i = 0 , iLen = aoLocal . length ; i < iLen ; i ++ )
{ nLocalTr = aoLocal [ i ] . nTr ; if ( nLocalTr )
{ while ( ( n = nLocalTr . firstChild ) )
{ nLocalTr . removeChild ( n ) ; } }
for ( j = 0 , jLen = aoLocal [ i ] . length ; j < jLen ; j ++ )
{ iRowspan = 1 ; iColspan = 1 ; if ( aApplied [ i ] [ j ] === undefined )
{ nLocalTr . appendChild ( aoLocal [ i ] [ j ] . cell ) ; aApplied [ i ] [ j ] = 1 ; while ( aoLocal [ i + iRowspan ] !== undefined && aoLocal [ i ] [ j ] . cell == aoLocal [ i + iRowspan ] [ j ] . cell )
{ aApplied [ i + iRowspan ] [ j ] = 1 ; iRowspan ++ ; }
while ( aoLocal [ i ] [ j + iColspan ] !== undefined && aoLocal [ i ] [ j ] . cell == aoLocal [ i ] [ j + iColspan ] . cell )
{ for ( k = 0 ; k < iRowspan ; k ++ )
{ aApplied [ i + k ] [ j + iColspan ] = 1 ; }
iColspan ++ ; }
$ ( aoLocal [ i ] [ j ] . cell ) . attr ( 'rowspan' , iRowspan ) . attr ( 'colspan' , iColspan ) ; } } } }
function _fnDraw ( oSettings )
{ var aPreDraw = _fnCallbackFire ( oSettings , 'aoPreDrawCallback' , 'preDraw' , [ oSettings ] ) ; if ( $ . inArray ( false , aPreDraw ) !== - 1 )
{ _fnProcessingDisplay ( oSettings , false ) ; return ; }
var i , iLen , n ; var anRows = [ ] ; var iRowCount = 0 ; var asStripeClasses = oSettings . asStripeClasses ; var iStripes = asStripeClasses . length ; var iOpenRows = oSettings . aoOpenRows . length ; var oLang = oSettings . oLanguage ; var iInitDisplayStart = oSettings . iInitDisplayStart ; var bServerSide = _fnDataSource ( oSettings ) == 'ssp' ; var aiDisplay = oSettings . aiDisplay ; oSettings . bDrawing = true ; if ( iInitDisplayStart !== undefined && iInitDisplayStart !== - 1 )
{ oSettings . _iDisplayStart = bServerSide ? iInitDisplayStart : iInitDisplayStart >= oSettings . fnRecordsDisplay ( ) ? 0 : iInitDisplayStart ; oSettings . iInitDisplayStart = - 1 ; }
var iDisplayStart = oSettings . _iDisplayStart ; var iDisplayEnd = oSettings . fnDisplayEnd ( ) ; if ( oSettings . bDeferLoading )
{ oSettings . bDeferLoading = false ; oSettings . iDraw ++ ; _fnProcessingDisplay ( oSettings , false ) ; }
else if ( ! bServerSide )
{ oSettings . iDraw ++ ; }
else if ( ! oSettings . bDestroying && ! _fnAjaxUpdate ( oSettings ) )
{ return ; }
if ( aiDisplay . length !== 0 )
{ var iStart = bServerSide ? 0 : iDisplayStart ; var iEnd = bServerSide ? oSettings . aoData . length : iDisplayEnd ; for ( var j = iStart ; j < iEnd ; j ++ )
{ var iDataIndex = aiDisplay [ j ] ; var aoData = oSettings . aoData [ iDataIndex ] ; if ( aoData . nTr === null )
{ _fnCreateTr ( oSettings , iDataIndex ) ; }
var nRow = aoData . nTr ; if ( iStripes !== 0 )
{ var sStripe = asStripeClasses [ iRowCount % iStripes ] ; if ( aoData . _sRowStripe != sStripe )
{ $ ( nRow ) . removeClass ( aoData . _sRowStripe ) . addClass ( sStripe ) ; aoData . _sRowStripe = sStripe ; } }
_fnCallbackFire ( oSettings , 'aoRowCallback' , null , [ nRow , aoData . _aData , iRowCount , j , iDataIndex ] ) ; anRows . push ( nRow ) ; iRowCount ++ ; } }
else
{ var sZero = oLang . sZeroRecords ; if ( oSettings . iDraw == 1 && _fnDataSource ( oSettings ) == 'ajax' )
{ sZero = oLang . sLoadingRecords ; }
else if ( oLang . sEmptyTable && oSettings . fnRecordsTotal ( ) === 0 )
{ sZero = oLang . sEmptyTable ; }
anRows [ 0 ] = $ ( '<tr/>' , { 'class' : iStripes ? asStripeClasses [ 0 ] : '' } ) . append ( $ ( '<td />' , { 'valign' : 'top' , 'colSpan' : _fnVisbleColumns ( oSettings ) , 'class' : oSettings . oClasses . sRowEmpty } ) . html ( sZero ) ) [ 0 ] ; }
_fnCallbackFire ( oSettings , 'aoHeaderCallback' , 'header' , [ $ ( oSettings . nTHead ) . children ( 'tr' ) [ 0 ] , _fnGetDataMaster ( oSettings ) , iDisplayStart , iDisplayEnd , aiDisplay ] ) ; _fnCallbackFire ( oSettings , 'aoFooterCallback' , 'footer' , [ $ ( oSettings . nTFoot ) . children ( 'tr' ) [ 0 ] , _fnGetDataMaster ( oSettings ) , iDisplayStart , iDisplayEnd , aiDisplay ] ) ; var body = $ ( oSettings . nTBody ) ; body . children ( ) . detach ( ) ; body . append ( $ ( anRows ) ) ; _fnCallbackFire ( oSettings , 'aoDrawCallback' , 'draw' , [ oSettings ] ) ; oSettings . bSorted = false ; oSettings . bFiltered = false ; oSettings . bDrawing = false ; }
function _fnReDraw ( settings , holdPosition )
{ var
features = settings . oFeatures , sort = features . bSort , filter = features . bFilter ; if ( sort ) { _fnSort ( settings ) ; }
if ( filter ) { _fnFilterComplete ( settings , settings . oPreviousSearch ) ; }
else { settings . aiDisplay = settings . aiDisplayMaster . slice ( ) ; }
if ( holdPosition !== true ) { settings . _iDisplayStart = 0 ; }
settings . _drawHold = holdPosition ; _fnDraw ( settings ) ; settings . _drawHold = false ; }
function _fnAddOptionsHtml ( oSettings )
{ var classes = oSettings . oClasses ; var table = $ ( oSettings . nTable ) ; var holding = $ ( '<div/>' ) . insertBefore ( table ) ; var features = oSettings . oFeatures ; var insert = $ ( '<div/>' , { id : oSettings . sTableId + '_wrapper' , 'class' : classes . sWrapper + ( oSettings . nTFoot ? '' : ' ' + classes . sNoFooter ) } ) ; oSettings . nHolding = holding [ 0 ] ; oSettings . nTableWrapper = insert [ 0 ] ; oSettings . nTableReinsertBefore = oSettings . nTable . nextSibling ; var aDom = oSettings . sDom . split ( '' ) ; var featureNode , cOption , nNewNode , cNext , sAttr , j ; for ( var i = 0 ; i < aDom . length ; i ++ )
{ featureNode = null ; cOption = aDom [ i ] ; if ( cOption == '<' )
{ nNewNode = $ ( '<div/>' ) [ 0 ] ; cNext = aDom [ i + 1 ] ; if ( cNext == "'" || cNext == '"' )
{ sAttr = "" ; j = 2 ; while ( aDom [ i + j ] != cNext )
{ sAttr += aDom [ i + j ] ; j ++ ; }
if ( sAttr == "H" )
{ sAttr = classes . sJUIHeader ; }
else if ( sAttr == "F" )
{ sAttr = classes . sJUIFooter ; }
if ( sAttr . indexOf ( '.' ) != - 1 )
{ var aSplit = sAttr . split ( '.' ) ; nNewNode . id = aSplit [ 0 ] . substr ( 1 , aSplit [ 0 ] . length - 1 ) ; nNewNode . className = aSplit [ 1 ] ; }
else if ( sAttr . charAt ( 0 ) == "#" )
{ nNewNode . id = sAttr . substr ( 1 , sAttr . length - 1 ) ; }
else
{ nNewNode . className = sAttr ; }
i += j ; }
insert . append ( nNewNode ) ; insert = $ ( nNewNode ) ; }
else if ( cOption == '>' )
{ insert = insert . parent ( ) ; }
else if ( cOption == 'l' && features . bPaginate && features . bLengthChange )
{ featureNode = _fnFeatureHtmlLength ( oSettings ) ; }
else if ( cOption == 'f' && features . bFilter )
{ featureNode = _fnFeatureHtmlFilter ( oSettings ) ; }
else if ( cOption == 'r' && features . bProcessing )
{ featureNode = _fnFeatureHtmlProcessing ( oSettings ) ; }
else if ( cOption == 't' )
{ featureNode = _fnFeatureHtmlTable ( oSettings ) ; }
else if ( cOption == 'i' && features . bInfo )
{ featureNode = _fnFeatureHtmlInfo ( oSettings ) ; }
else if ( cOption == 'p' && features . bPaginate )
{ featureNode = _fnFeatureHtmlPaginate ( oSettings ) ; }
else if ( DataTable . ext . feature . length !== 0 )
{ var aoFeatures = DataTable . ext . feature ; for ( var k = 0 , kLen = aoFeatures . length ; k < kLen ; k ++ )
{ if ( cOption == aoFeatures [ k ] . cFeature )
{ featureNode = aoFeatures [ k ] . fnInit ( oSettings ) ; break ; } } }
if ( featureNode )
{ var aanFeatures = oSettings . aanFeatures ; if ( ! aanFeatures [ cOption ] )
{ aanFeatures [ cOption ] = [ ] ; }
aanFeatures [ cOption ] . push ( featureNode ) ; insert . append ( featureNode ) ; } }
holding . replaceWith ( insert ) ; oSettings . nHolding = null ; }
function _fnDetectHeader ( aLayout , nThead )
{ var nTrs = $ ( nThead ) . children ( 'tr' ) ; var nTr , nCell ; var i , k , l , iLen , jLen , iColShifted , iColumn , iColspan , iRowspan ; var bUnique ; var fnShiftCol = function ( a , i , j ) { var k = a [ i ] ; while ( k [ j ] ) { j ++ ; }
return j ; } ; aLayout . splice ( 0 , aLayout . length ) ; for ( i = 0 , iLen = nTrs . length ; i < iLen ; i ++ )
{ aLayout . push ( [ ] ) ; }
for ( i = 0 , iLen = nTrs . length ; i < iLen ; i ++ )
{ nTr = nTrs [ i ] ; iColumn = 0 ; nCell = nTr . firstChild ; while ( nCell ) { if ( nCell . nodeName . toUpperCase ( ) == "TD" || nCell . nodeName . toUpperCase ( ) == "TH" )
{ iColspan = nCell . getAttribute ( 'colspan' ) * 1 ; iRowspan = nCell . getAttribute ( 'rowspan' ) * 1 ; iColspan = ( ! iColspan || iColspan === 0 || iColspan === 1 ) ? 1 : iColspan ; iRowspan = ( ! iRowspan || iRowspan === 0 || iRowspan === 1 ) ? 1 : iRowspan ; iColShifted = fnShiftCol ( aLayout , i , iColumn ) ; bUnique = iColspan === 1 ? true : false ; for ( l = 0 ; l < iColspan ; l ++ )
{ for ( k = 0 ; k < iRowspan ; k ++ )
{ aLayout [ i + k ] [ iColShifted + l ] = { "cell" : nCell , "unique" : bUnique } ; aLayout [ i + k ] . nTr = nTr ; } } }
nCell = nCell . nextSibling ; } } }
function _fnGetUniqueThs ( oSettings , nHeader , aLayout )
{ var aReturn = [ ] ; if ( ! aLayout )
{ aLayout = oSettings . aoHeader ; if ( nHeader )
{ aLayout = [ ] ; _fnDetectHeader ( aLayout , nHeader ) ; } }
for ( var i = 0 , iLen = aLayout . length ; i < iLen ; i ++ )
{ for ( var j = 0 , jLen = aLayout [ i ] . length ; j < jLen ; j ++ )
{ if ( aLayout [ i ] [ j ] . unique && ( ! aReturn [ j ] || ! oSettings . bSortCellsTop ) )
{ aReturn [ j ] = aLayout [ i ] [ j ] . cell ; } } }
return aReturn ; }
function _fnBuildAjax ( oSettings , data , fn )
{ _fnCallbackFire ( oSettings , 'aoServerParams' , 'serverParams' , [ data ] ) ; if ( data && $ . isArray ( data ) ) { var tmp = { } ; var rbracket = /(.*?)\[\]$/ ; $ . each ( data , function ( key , val ) { var match = val . name . match ( rbracket ) ; if ( match ) { var name = match [ 0 ] ; if ( ! tmp [ name ] ) { tmp [ name ] = [ ] ; }
tmp [ name ] . push ( val . value ) ; }
else { tmp [ val . name ] = val . value ; } } ) ; data = tmp ; }
var ajaxData ; var ajax = oSettings . ajax ; var instance = oSettings . oInstance ; var callback = function ( json ) { _fnCallbackFire ( oSettings , null , 'xhr' , [ oSettings , json , oSettings . jqXHR ] ) ; fn ( json ) ; } ; if ( $ . isPlainObject ( ajax ) && ajax . data )
{ ajaxData = ajax . data ; var newData = typeof ajaxData === 'function' ? ajaxData ( data , oSettings ) : ajaxData ; data = typeof ajaxData === 'function' && newData ? newData : $ . extend ( true , data , newData ) ; delete ajax . data ; }
var baseAjax = { "data" : data , "success" : function ( json ) { var error = json . error || json . sError ; if ( error ) { _fnLog ( oSettings , 0 , error ) ; }
oSettings . json = json ; callback ( json ) ; } , "dataType" : "json" , "cache" : false , "type" : oSettings . sServerMethod , "error" : function ( xhr , error , thrown ) { var ret = _fnCallbackFire ( oSettings , null , 'xhr' , [ oSettings , null , oSettings . jqXHR ] ) ; if ( $ . inArray ( true , ret ) === - 1 ) { if ( error == "parsererror" ) { _fnLog ( oSettings , 0 , 'Invalid JSON response' , 1 ) ; }
else if ( xhr . readyState === 4 ) { _fnLog ( oSettings , 0 , 'Ajax error' , 7 ) ; } }
_fnProcessingDisplay ( oSettings , false ) ; } } ; oSettings . oAjaxData = data ; _fnCallbackFire ( oSettings , null , 'preXhr' , [ oSettings , data ] ) ; if ( oSettings . fnServerData )
{ oSettings . fnServerData . call ( instance , oSettings . sAjaxSource , $ . map ( data , function ( val , key ) { return { name : key , value : val } ; } ) , callback , oSettings ) ; }
else if ( oSettings . sAjaxSource || typeof ajax === 'string' )
{ oSettings . jqXHR = $ . ajax ( $ . extend ( baseAjax , { url : ajax || oSettings . sAjaxSource } ) ) ; }
else if ( typeof ajax === 'function' )
{ oSettings . jqXHR = ajax . call ( instance , data , callback , oSettings ) ; }
else
{ oSettings . jqXHR = $ . ajax ( $ . extend ( baseAjax , ajax ) ) ; ajax . data = ajaxData ; } }
function _fnAjaxUpdate ( settings )
{ if ( settings . bAjaxDataGet ) { settings . iDraw ++ ; _fnProcessingDisplay ( settings , true ) ; _fnBuildAjax ( settings , _fnAjaxParameters ( settings ) , function ( json ) { _fnAjaxUpdateDraw ( settings , json ) ; } ) ; return false ; }
return true ; }
function _fnAjaxParameters ( settings )
{ var
columns = settings . aoColumns , columnCount = columns . length , features = settings . oFeatures , preSearch = settings . oPreviousSearch , preColSearch = settings . aoPreSearchCols , i , data = [ ] , dataProp , column , columnSearch , sort = _fnSortFlatten ( settings ) , displayStart = settings . _iDisplayStart , displayLength = features . bPaginate !== false ? settings . _iDisplayLength : - 1 ; var param = function ( name , value ) { data . push ( { 'name' : name , 'value' : value } ) ; } ; param ( 'sEcho' , settings . iDraw ) ; param ( 'iColumns' , columnCount ) ; param ( 'sColumns' , _pluck ( columns , 'sName' ) . join ( ',' ) ) ; param ( 'iDisplayStart' , displayStart ) ; param ( 'iDisplayLength' , displayLength ) ; var d = { draw : settings . iDraw , columns : [ ] , order : [ ] , start : displayStart , length : displayLength , search : { value : preSearch . sSearch , regex : preSearch . bRegex } } ; for ( i = 0 ; i < columnCount ; i ++ ) { column = columns [ i ] ; columnSearch = preColSearch [ i ] ; dataProp = typeof column . mData == "function" ? 'function' : column . mData ; d . columns . push ( { data : dataProp , name : column . sName , searchable : column . bSearchable , orderable : column . bSortable , search : { value : columnSearch . sSearch , regex : columnSearch . bRegex } } ) ; param ( "mDataProp_" + i , dataProp ) ; if ( features . bFilter ) { param ( 'sSearch_' + i , columnSearch . sSearch ) ; param ( 'bRegex_' + i , columnSearch . bRegex ) ; param ( 'bSearchable_' + i , column . bSearchable ) ; }
if ( features . bSort ) { param ( 'bSortable_' + i , column . bSortable ) ; } }
if ( features . bFilter ) { param ( 'sSearch' , preSearch . sSearch ) ; param ( 'bRegex' , preSearch . bRegex ) ; }
if ( features . bSort ) { $ . each ( sort , function ( i , val ) { d . order . push ( { column : val . col , dir : val . dir } ) ; param ( 'iSortCol_' + i , val . col ) ; param ( 'sSortDir_' + i , val . dir ) ; } ) ; param ( 'iSortingCols' , sort . length ) ; }
var legacy = DataTable . ext . legacy . ajax ; if ( legacy === null ) { return settings . sAjaxSource ? data : d ; }
return legacy ? data : d ; }
function _fnAjaxUpdateDraw ( settings , json )
{ var compat = function ( old , modern ) { return json [ old ] !== undefined ? json [ old ] : json [ modern ] ; } ; var data = _fnAjaxDataSrc ( settings , json ) ; var draw = compat ( 'sEcho' , 'draw' ) ; var recordsTotal = compat ( 'iTotalRecords' , 'recordsTotal' ) ; var recordsFiltered = compat ( 'iTotalDisplayRecords' , 'recordsFiltered' ) ; if ( draw ) { if ( draw * 1 < settings . iDraw ) { return ; }
settings . iDraw = draw * 1 ; }
_fnClearTable ( settings ) ; settings . _iRecordsTotal = parseInt ( recordsTotal , 10 ) ; settings . _iRecordsDisplay = parseInt ( recordsFiltered , 10 ) ; for ( var i = 0 , ien = data . length ; i < ien ; i ++ ) { _fnAddData ( settings , data [ i ] ) ; }
settings . aiDisplay = settings . aiDisplayMaster . slice ( ) ; settings . bAjaxDataGet = false ; _fnDraw ( settings ) ; if ( ! settings . _bInitComplete ) { _fnInitComplete ( settings , json ) ; }
settings . bAjaxDataGet = true ; _fnProcessingDisplay ( settings , false ) ; }
function _fnAjaxDataSrc ( oSettings , json )
{ var dataSrc = $ . isPlainObject ( oSettings . ajax ) && oSettings . ajax . dataSrc !== undefined ? oSettings . ajax . dataSrc : oSettings . sAjaxDataProp ; if ( dataSrc === 'data' ) { return json . aaData || json [ dataSrc ] ; }
return dataSrc !== "" ? _fnGetObjectDataFn ( dataSrc ) ( json ) : json ; }
function _fnFeatureHtmlFilter ( settings )
{ var classes = settings . oClasses ; var tableId = settings . sTableId ; var language = settings . oLanguage ; var previousSearch = settings . oPreviousSearch ; var features = settings . aanFeatures ; var input = '<input type="search" class="' + classes . sFilterInput + '"/>' ; var str = language . sSearch ; str = str . match ( /_INPUT_/ ) ? str . replace ( '_INPUT_' , input ) : str + input ; var filter = $ ( '<div/>' , { 'id' : ! features . f ? tableId + '_filter' : null , 'class' : classes . sFilter } ) . append ( $ ( '<label/>' ) . append ( str ) ) ; var searchFn = function ( ) { var n = features . f ; var val = ! this . value ? "" : this . value ; if ( val != previousSearch . sSearch ) { _fnFilterComplete ( settings , { "sSearch" : val , "bRegex" : previousSearch . bRegex , "bSmart" : previousSearch . bSmart , "bCaseInsensitive" : previousSearch . bCaseInsensitive } ) ; settings . _iDisplayStart = 0 ; _fnDraw ( settings ) ; } } ; var searchDelay = settings . searchDelay !== null ? settings . searchDelay : _fnDataSource ( settings ) === 'ssp' ? 400 : 0 ; var jqFilter = $ ( 'input' , filter ) . val ( previousSearch . sSearch ) . attr ( 'placeholder' , language . sSearchPlaceholder ) . on ( 'keyup.DT search.DT input.DT paste.DT cut.DT' , searchDelay ? _fnThrottle ( searchFn , searchDelay ) : searchFn ) . on ( 'keypress.DT' , function ( e ) { if ( e . keyCode == 13 ) { return false ; } } ) . attr ( 'aria-controls' , tableId ) ; $ ( settings . nTable ) . on ( 'search.dt.DT' , function ( ev , s ) { if ( settings === s ) { try { if ( jqFilter [ 0 ] !== document . activeElement ) { jqFilter . val ( previousSearch . sSearch ) ; } }
catch ( e ) { } } } ) ; return filter [ 0 ] ; }
function _fnFilterComplete ( oSettings , oInput , iForce )
{ var oPrevSearch = oSettings . oPreviousSearch ; var aoPrevSearch = oSettings . aoPreSearchCols ; var fnSaveFilter = function ( oFilter ) { oPrevSearch . sSearch = oFilter . sSearch ; oPrevSearch . bRegex = oFilter . bRegex ; oPrevSearch . bSmart = oFilter . bSmart ; oPrevSearch . bCaseInsensitive = oFilter . bCaseInsensitive ; } ; var fnRegex = function ( o ) { return o . bEscapeRegex !== undefined ? ! o . bEscapeRegex : o . bRegex ; } ; _fnColumnTypes ( oSettings ) ; if ( _fnDataSource ( oSettings ) != 'ssp' )
{ _fnFilter ( oSettings , oInput . sSearch , iForce , fnRegex ( oInput ) , oInput . bSmart , oInput . bCaseInsensitive ) ; fnSaveFilter ( oInput ) ; for ( var i = 0 ; i < aoPrevSearch . length ; i ++ )
{ _fnFilterColumn ( oSettings , aoPrevSearch [ i ] . sSearch , i , fnRegex ( aoPrevSearch [ i ] ) , aoPrevSearch [ i ] . bSmart , aoPrevSearch [ i ] . bCaseInsensitive ) ; }
_fnFilterCustom ( oSettings ) ; }
else
{ fnSaveFilter ( oInput ) ; }
oSettings . bFiltered = true ; _fnCallbackFire ( oSettings , null , 'search' , [ oSettings ] ) ; }
function _fnFilterCustom ( settings )
{ var filters = DataTable . ext . search ; var displayRows = settings . aiDisplay ; var row , rowIdx ; for ( var i = 0 , ien = filters . length ; i < ien ; i ++ ) { var rows = [ ] ; for ( var j = 0 , jen = displayRows . length ; j < jen ; j ++ ) { rowIdx = displayRows [ j ] ; row = settings . aoData [ rowIdx ] ; if ( filters [ i ] ( settings , row . _aFilterData , rowIdx , row . _aData , j ) ) { rows . push ( rowIdx ) ; } }
displayRows . length = 0 ; $ . merge ( displayRows , rows ) ; } }
function _fnFilterColumn ( settings , searchStr , colIdx , regex , smart , caseInsensitive )
{ if ( searchStr === '' ) { return ; }
var data ; var out = [ ] ; var display = settings . aiDisplay ; var rpSearch = _fnFilterCreateSearch ( searchStr , regex , smart , caseInsensitive ) ; for ( var i = 0 ; i < display . length ; i ++ ) { data = settings . aoData [ display [ i ] ] . _aFilterData [ colIdx ] ; if ( rpSearch . test ( data ) ) { out . push ( display [ i ] ) ; } }
settings . aiDisplay = out ; }
function _fnFilter ( settings , input , force , regex , smart , caseInsensitive )
{ var rpSearch = _fnFilterCreateSearch ( input , regex , smart , caseInsensitive ) ; var prevSearch = settings . oPreviousSearch . sSearch ; var displayMaster = settings . aiDisplayMaster ; var display , invalidated , i ; var filtered = [ ] ; if ( DataTable . ext . search . length !== 0 ) { force = true ; }
invalidated = _fnFilterData ( settings ) ; if ( input . length <= 0 ) { settings . aiDisplay = displayMaster . slice ( ) ; }
else { if ( invalidated || force || prevSearch . length > input . length || input . indexOf ( prevSearch ) !== 0 || settings . bSorted
) { settings . aiDisplay = displayMaster . slice ( ) ; }
display = settings . aiDisplay ; for ( i = 0 ; i < display . length ; i ++ ) { if ( rpSearch . test ( settings . aoData [ display [ i ] ] . _sFilterRow ) ) { filtered . push ( display [ i ] ) ; } }
settings . aiDisplay = filtered ; } }
function _fnFilterCreateSearch ( search , regex , smart , caseInsensitive )
{ search = regex ? search : _fnEscapeRegex ( search ) ; if ( smart ) { var a = $ . map ( search . match ( /"[^"]+"|[^ ]+/g ) || [ '' ] , function ( word ) { if ( word . charAt ( 0 ) === '"' ) { var m = word . match ( /^"(.*)"$/ ) ; word = m ? m [ 1 ] : word ; }
return word . replace ( '"' , '' ) ; } ) ; search = '^(?=.*?' + a . join ( ')(?=.*?' ) + ').*$' ; }
return new RegExp ( search , caseInsensitive ? 'i' : '' ) ; }
var _fnEscapeRegex = DataTable . util . escapeRegex ; var _ _filter _div = $ ( '<div>' ) [ 0 ] ; var _ _filter _div _textContent = _ _filter _div . textContent !== undefined ; function _fnFilterData ( settings )
{ var columns = settings . aoColumns ; var column ; var i , j , ien , jen , filterData , cellData , row ; var fomatters = DataTable . ext . type . search ; var wasInvalidated = false ; for ( i = 0 , ien = settings . aoData . length ; i < ien ; i ++ ) { row = settings . aoData [ i ] ; if ( ! row . _aFilterData ) { filterData = [ ] ; for ( j = 0 , jen = columns . length ; j < jen ; j ++ ) { column = columns [ j ] ; if ( column . bSearchable ) { cellData = _fnGetCellData ( settings , i , j , 'filter' ) ; if ( fomatters [ column . sType ] ) { cellData = fomatters [ column . sType ] ( cellData ) ; }
if ( cellData === null ) { cellData = '' ; }
if ( typeof cellData !== 'string' && cellData . toString ) { cellData = cellData . toString ( ) ; } }
else { cellData = '' ; }
if ( cellData . indexOf && cellData . indexOf ( '&' ) !== - 1 ) { _ _filter _div . innerHTML = cellData ; cellData = _ _filter _div _textContent ? _ _filter _div . textContent : _ _filter _div . innerText ; }
if ( cellData . replace ) { cellData = cellData . replace ( /[\r\n]/g , '' ) ; }
filterData . push ( cellData ) ; }
row . _aFilterData = filterData ; row . _sFilterRow = filterData . join ( ' ' ) ; wasInvalidated = true ; } }
return wasInvalidated ; }
function _fnSearchToCamel ( obj )
{ return { search : obj . sSearch , smart : obj . bSmart , regex : obj . bRegex , caseInsensitive : obj . bCaseInsensitive } ; }
function _fnSearchToHung ( obj )
{ return { sSearch : obj . search , bSmart : obj . smart , bRegex : obj . regex , bCaseInsensitive : obj . caseInsensitive } ; }
function _fnFeatureHtmlInfo ( settings )
{ var
tid = settings . sTableId , nodes = settings . aanFeatures . i , n = $ ( '<div/>' , { 'class' : settings . oClasses . sInfo , 'id' : ! nodes ? tid + '_info' : null } ) ; if ( ! nodes ) { settings . aoDrawCallback . push ( { "fn" : _fnUpdateInfo , "sName" : "information" } ) ; n . attr ( 'role' , 'status' ) . attr ( 'aria-live' , 'polite' ) ; $ ( settings . nTable ) . attr ( 'aria-describedby' , tid + '_info' ) ; }
return n [ 0 ] ; }
function _fnUpdateInfo ( settings )
{ var nodes = settings . aanFeatures . i ; if ( nodes . length === 0 ) { return ; }
var
lang = settings . oLanguage , start = settings . _iDisplayStart + 1 , end = settings . fnDisplayEnd ( ) , max = settings . fnRecordsTotal ( ) , total = settings . fnRecordsDisplay ( ) , out = total ? lang . sInfo : lang . sInfoEmpty ; if ( total !== max ) { out += ' ' + lang . sInfoFiltered ; }
out += lang . sInfoPostFix ; out = _fnInfoMacros ( settings , out ) ; var callback = lang . fnInfoCallback ; if ( callback !== null ) { out = callback . call ( settings . oInstance , settings , start , end , max , total , out ) ; }
$ ( nodes ) . html ( out ) ; }
function _fnInfoMacros ( settings , str )
{ var
formatter = settings . fnFormatNumber , start = settings . _iDisplayStart + 1 , len = settings . _iDisplayLength , vis = settings . fnRecordsDisplay ( ) , all = len === - 1 ; return str . replace ( /_START_/g , formatter . call ( settings , start ) ) . replace ( /_END_/g , formatter . call ( settings , settings . fnDisplayEnd ( ) ) ) . replace ( /_MAX_/g , formatter . call ( settings , settings . fnRecordsTotal ( ) ) ) . replace ( /_TOTAL_/g , formatter . call ( settings , vis ) ) . replace ( /_PAGE_/g , formatter . call ( settings , all ? 1 : Math . ceil ( start / len ) ) ) . replace ( /_PAGES_/g , formatter . call ( settings , all ? 1 : Math . ceil ( vis / len ) ) ) ; }
function _fnInitialise ( settings )
{ var i , iLen , iAjaxStart = settings . iInitDisplayStart ; var columns = settings . aoColumns , column ; var features = settings . oFeatures ; var deferLoading = settings . bDeferLoading ; if ( ! settings . bInitialised ) { setTimeout ( function ( ) { _fnInitialise ( settings ) ; } , 200 ) ; return ; }
_fnAddOptionsHtml ( settings ) ; _fnBuildHead ( settings ) ; _fnDrawHead ( settings , settings . aoHeader ) ; _fnDrawHead ( settings , settings . aoFooter ) ; _fnProcessingDisplay ( settings , true ) ; if ( features . bAutoWidth ) { _fnCalculateColumnWidths ( settings ) ; }
for ( i = 0 , iLen = columns . length ; i < iLen ; i ++ ) { column = columns [ i ] ; if ( column . sWidth ) { column . nTh . style . width = _fnStringToCss ( column . sWidth ) ; } }
_fnCallbackFire ( settings , null , 'preInit' , [ settings ] ) ; _fnReDraw ( settings ) ; var dataSrc = _fnDataSource ( settings ) ; if ( dataSrc != 'ssp' || deferLoading ) { if ( dataSrc == 'ajax' ) { _fnBuildAjax ( settings , [ ] , function ( json ) { var aData = _fnAjaxDataSrc ( settings , json ) ; for ( i = 0 ; i < aData . length ; i ++ ) { _fnAddData ( settings , aData [ i ] ) ; }
settings . iInitDisplayStart = iAjaxStart ; _fnReDraw ( settings ) ; _fnProcessingDisplay ( settings , false ) ; _fnInitComplete ( settings , json ) ; } , settings ) ; }
else { _fnProcessingDisplay ( settings , false ) ; _fnInitComplete ( settings ) ; } } }
function _fnInitComplete ( settings , json )
{ settings . _bInitComplete = true ; if ( json || settings . oInit . aaData ) { _fnAdjustColumnSizing ( settings ) ; }
_fnCallbackFire ( settings , null , 'plugin-init' , [ settings , json ] ) ; _fnCallbackFire ( settings , 'aoInitComplete' , 'init' , [ settings , json ] ) ; }
function _fnLengthChange ( settings , val )
{ var len = parseInt ( val , 10 ) ; settings . _iDisplayLength = len ; _fnLengthOverflow ( settings ) ; _fnCallbackFire ( settings , null , 'length' , [ settings , len ] ) ; }
function _fnFeatureHtmlLength ( settings )
{ var
classes = settings . oClasses , tableId = settings . sTableId , menu = settings . aLengthMenu , d2 = $ . isArray ( menu [ 0 ] ) , lengths = d2 ? menu [ 0 ] : menu , language = d2 ? menu [ 1 ] : menu ; var select = $ ( '<select/>' , { 'name' : tableId + '_length' , 'aria-controls' : tableId , 'class' : classes . sLengthSelect } ) ; for ( var i = 0 , ien = lengths . length ; i < ien ; i ++ ) { select [ 0 ] [ i ] = new Option ( typeof language [ i ] === 'number' ? settings . fnFormatNumber ( language [ i ] ) : language [ i ] , lengths [ i ] ) ; }
var div = $ ( '<div><label/></div>' ) . addClass ( classes . sLength ) ; if ( ! settings . aanFeatures . l ) { div [ 0 ] . id = tableId + '_length' ; }
div . children ( ) . append ( settings . oLanguage . sLengthMenu . replace ( '_MENU_' , select [ 0 ] . outerHTML ) ) ; $ ( 'select' , div ) . val ( settings . _iDisplayLength ) . on ( 'change.DT' , function ( e ) { _fnLengthChange ( settings , $ ( this ) . val ( ) ) ; _fnDraw ( settings ) ; } ) ; $ ( settings . nTable ) . on ( 'length.dt.DT' , function ( e , s , len ) { if ( settings === s ) { $ ( 'select' , div ) . val ( len ) ; } } ) ; return div [ 0 ] ; }
function _fnFeatureHtmlPaginate ( settings )
{ var
type = settings . sPaginationType , plugin = DataTable . ext . pager [ type ] , modern = typeof plugin === 'function' , redraw = function ( settings ) { _fnDraw ( settings ) ; } , node = $ ( '<div/>' ) . addClass ( settings . oClasses . sPaging + type ) [ 0 ] , features = settings . aanFeatures ; if ( ! modern ) { plugin . fnInit ( settings , node , redraw ) ; }
if ( ! features . p )
{ node . id = settings . sTableId + '_paginate' ; settings . aoDrawCallback . push ( { "fn" : function ( settings ) { if ( modern ) { var
start = settings . _iDisplayStart , len = settings . _iDisplayLength , visRecords = settings . fnRecordsDisplay ( ) , all = len === - 1 , page = all ? 0 : Math . ceil ( start / len ) , pages = all ? 1 : Math . ceil ( visRecords / len ) , buttons = plugin ( page , pages ) , i , ien ; for ( i = 0 , ien = features . p . length ; i < ien ; i ++ ) { _fnRenderer ( settings , 'pageButton' ) ( settings , features . p [ i ] , i , buttons , page , pages ) ; } }
else { plugin . fnUpdate ( settings , redraw ) ; } } , "sName" : "pagination" } ) ; }
return node ; }
function _fnPageChange ( settings , action , redraw )
{ var
start = settings . _iDisplayStart , len = settings . _iDisplayLength , records = settings . fnRecordsDisplay ( ) ; if ( records === 0 || len === - 1 )
{ start = 0 ; }
else if ( typeof action === "number" )
{ start = action * len ; if ( start > records )
{ start = 0 ; } }
else if ( action == "first" )
{ start = 0 ; }
else if ( action == "previous" )
{ start = len >= 0 ? start - len : 0 ; if ( start < 0 )
{ start = 0 ; } }
else if ( action == "next" )
{ if ( start + len < records )
{ start += len ; } }
else if ( action == "last" )
{ start = Math . floor ( ( records - 1 ) / len ) * len ; }
else
{ _fnLog ( settings , 0 , "Unknown paging action: " + action , 5 ) ; }
var changed = settings . _iDisplayStart !== start ; settings . _iDisplayStart = start ; if ( changed ) { _fnCallbackFire ( settings , null , 'page' , [ settings ] ) ; if ( redraw ) { _fnDraw ( settings ) ; } }
return changed ; }
function _fnFeatureHtmlProcessing ( settings )
{ return $ ( '<div/>' , { 'id' : ! settings . aanFeatures . r ? settings . sTableId + '_processing' : null , 'class' : settings . oClasses . sProcessing } ) . html ( settings . oLanguage . sProcessing ) . insertBefore ( settings . nTable ) [ 0 ] ; }
function _fnProcessingDisplay ( settings , show )
{ if ( settings . oFeatures . bProcessing ) { $ ( settings . aanFeatures . r ) . css ( 'display' , show ? 'block' : 'none' ) ; }
_fnCallbackFire ( settings , null , 'processing' , [ settings , show ] ) ; }
function _fnFeatureHtmlTable ( settings )
{ var table = $ ( settings . nTable ) ; table . attr ( 'role' , 'grid' ) ; var scroll = settings . oScroll ; if ( scroll . sX === '' && scroll . sY === '' ) { return settings . nTable ; }
var scrollX = scroll . sX ; var scrollY = scroll . sY ; var classes = settings . oClasses ; var caption = table . children ( 'caption' ) ; var captionSide = caption . length ? caption [ 0 ] . _captionSide : null ; var headerClone = $ ( table [ 0 ] . cloneNode ( false ) ) ; var footerClone = $ ( table [ 0 ] . cloneNode ( false ) ) ; var footer = table . children ( 'tfoot' ) ; var _div = '<div/>' ; var size = function ( s ) { return ! s ? null : _fnStringToCss ( s ) ; } ; if ( ! footer . length ) { footer = null ; }
var scroller = $ ( _div , { 'class' : classes . sScrollWrapper } ) . append ( $ ( _div , { 'class' : classes . sScrollHead } ) . css ( { overflow : 'hidden' , position : 'relative' , border : 0 , width : scrollX ? size ( scrollX ) : '100%' } ) . append ( $ ( _div , { 'class' : classes . sScrollHeadInner } ) . css ( { 'box-sizing' : 'content-box' , width : scroll . sXInner || '100%' } ) . append ( headerClone . removeAttr ( 'id' ) . css ( 'margin-left' , 0 ) . append ( captionSide === 'top' ? caption : null ) . append ( table . children ( 'thead' ) ) ) ) ) . append ( $ ( _div , { 'class' : classes . sScrollBody } ) . css ( { position : 'relative' , overflow : 'auto' , width : size ( scrollX ) } ) . append ( table ) ) ; if ( footer ) { scroller . append ( $ ( _div , { 'class' : classes . sScrollFoot } ) . css ( { overflow : 'hidden' , border : 0 , width : scrollX ? size ( scrollX ) : '100%' } ) . append ( $ ( _div , { 'class' : classes . sScrollFootInner } ) . append ( footerClone . removeAttr ( 'id' ) . css ( 'margin-left' , 0 ) . append ( captionSide === 'bottom' ? caption : null ) . append ( table . children ( 'tfoot' ) ) ) ) ) ; }
var children = scroller . children ( ) ; var scrollHead = children [ 0 ] ; var scrollBody = children [ 1 ] ; var scrollFoot = footer ? children [ 2 ] : null ; if ( scrollX ) { $ ( scrollBody ) . on ( 'scroll.DT' , function ( e ) { var scrollLeft = this . scrollLeft ; scrollHead . scrollLeft = scrollLeft ; if ( footer ) { scrollFoot . scrollLeft = scrollLeft ; } } ) ; }
$ ( scrollBody ) . css ( scrollY && scroll . bCollapse ? 'max-height' : 'height' , scrollY ) ; settings . nScrollHead = scrollHead ; settings . nScrollBody = scrollBody ; settings . nScrollFoot = scrollFoot ; settings . aoDrawCallback . push ( { "fn" : _fnScrollDraw , "sName" : "scrolling" } ) ; return scroller [ 0 ] ; }
function _fnScrollDraw ( settings )
{ var
scroll = settings . oScroll , scrollX = scroll . sX , scrollXInner = scroll . sXInner , scrollY = scroll . sY , barWidth = scroll . iBarWidth , divHeader = $ ( settings . nScrollHead ) , divHeaderStyle = divHeader [ 0 ] . style , divHeaderInner = divHeader . children ( 'div' ) , divHeaderInnerStyle = divHeaderInner [ 0 ] . style , divHeaderTable = divHeaderInner . children ( 'table' ) , divBodyEl = settings . nScrollBody , divBody = $ ( divBodyEl ) , divBodyStyle = divBodyEl . style , divFooter = $ ( settings . nScrollFoot ) , divFooterInner = divFooter . children ( 'div' ) , divFooterTable = divFooterInner . children ( 'table' ) , header = $ ( settings . nTHead ) , table = $ ( settings . nTable ) , tableEl = table [ 0 ] , tableStyle = tableEl . style , footer = settings . nTFoot ? $ ( settings . nTFoot ) : null , browser = settings . oBrowser , ie67 = browser . bScrollOversize , dtHeaderCells = _pluck ( settings . aoColumns , 'nTh' ) , headerTrgEls , footerTrgEls , headerSrcEls , footerSrcEls , headerCopy , footerCopy , headerWidths = [ ] , footerWidths = [ ] , headerContent = [ ] , footerContent = [ ] , idx , correction , sanityWidth , zeroOut = function ( nSizer ) { var style = nSizer . style ; style . paddingTop = "0" ; style . paddingBottom = "0" ; style . borderTopWidth = "0" ; style . borderBottomWidth = "0" ; style . height = 0 ; } ; var scrollBarVis = divBodyEl . scrollHeight > divBodyEl . clientHeight ; if ( settings . scrollBarVis !== scrollBarVis && settings . scrollBarVis !== undefined ) { settings . scrollBarVis = scrollBarVis ; _fnAdjustColumnSizing ( settings ) ; return ; }
else { settings . scrollBarVis = scrollBarVis ; }
table . children ( 'thead, tfoot' ) . remove ( ) ; if ( footer ) { footerCopy = footer . clone ( ) . prependTo ( table ) ; footerTrgEls = footer . find ( 'tr' ) ; footerSrcEls = footerCopy . find ( 'tr' ) ; }
headerCopy = header . clone ( ) . prependTo ( table ) ; headerTrgEls = header . find ( 'tr' ) ; headerSrcEls = headerCopy . find ( 'tr' ) ; headerCopy . find ( 'th, td' ) . removeAttr ( 'tabindex' ) ; if ( ! scrollX )
{ divBodyStyle . width = '100%' ; divHeader [ 0 ] . style . width = '100%' ; }
$ . each ( _fnGetUniqueThs ( settings , headerCopy ) , function ( i , el ) { idx = _fnVisibleToColumnIndex ( settings , i ) ; el . style . width = settings . aoColumns [ idx ] . sWidth ; } ) ; if ( footer ) { _fnApplyToChildren ( function ( n ) { n . style . width = "" ; } , footerSrcEls ) ; }
sanityWidth = table . outerWidth ( ) ; if ( scrollX === "" ) { tableStyle . width = "100%" ; if ( ie67 && ( table . find ( 'tbody' ) . height ( ) > divBodyEl . offsetHeight || divBody . css ( 'overflow-y' ) == "scroll" ) ) { tableStyle . width = _fnStringToCss ( table . outerWidth ( ) - barWidth ) ; }
sanityWidth = table . outerWidth ( ) ; }
else if ( scrollXInner !== "" ) { tableStyle . width = _fnStringToCss ( scrollXInner ) ; sanityWidth = table . outerWidth ( ) ; }
_fnApplyToChildren ( zeroOut , headerSrcEls ) ; _fnApplyToChildren ( function ( nSizer ) { headerContent . push ( nSizer . innerHTML ) ; headerWidths . push ( _fnStringToCss ( $ ( nSizer ) . css ( 'width' ) ) ) ; } , headerSrcEls ) ; _fnApplyToChildren ( function ( nToSize , i ) { if ( $ . inArray ( nToSize , dtHeaderCells ) !== - 1 ) { nToSize . style . width = headerWidths [ i ] ; } } , headerTrgEls ) ; $ ( headerSrcEls ) . height ( 0 ) ; if ( footer )
{ _fnApplyToChildren ( zeroOut , footerSrcEls ) ; _fnApplyToChildren ( function ( nSizer ) { footerContent . push ( nSizer . innerHTML ) ; footerWidths . push ( _fnStringToCss ( $ ( nSizer ) . css ( 'width' ) ) ) ; } , footerSrcEls ) ; _fnApplyToChildren ( function ( nToSize , i ) { nToSize . style . width = footerWidths [ i ] ; } , footerTrgEls ) ; $ ( footerSrcEls ) . height ( 0 ) ; }
_fnApplyToChildren ( function ( nSizer , i ) { nSizer . innerHTML = '<div class="dataTables_sizing">' + headerContent [ i ] + '</div>' ; nSizer . childNodes [ 0 ] . style . height = "0" ; nSizer . childNodes [ 0 ] . style . overflow = "hidden" ; nSizer . style . width = headerWidths [ i ] ; } , headerSrcEls ) ; if ( footer )
{ _fnApplyToChildren ( function ( nSizer , i ) { nSizer . innerHTML = '<div class="dataTables_sizing">' + footerContent [ i ] + '</div>' ; nSizer . childNodes [ 0 ] . style . height = "0" ; nSizer . childNodes [ 0 ] . style . overflow = "hidden" ; nSizer . style . width = footerWidths [ i ] ; } , footerSrcEls ) ; }
if ( table . outerWidth ( ) < sanityWidth )
{ correction = ( ( divBodyEl . scrollHeight > divBodyEl . offsetHeight || divBody . css ( 'overflow-y' ) == "scroll" ) ) ? sanityWidth + barWidth : sanityWidth ; if ( ie67 && ( divBodyEl . scrollHeight > divBodyEl . offsetHeight || divBody . css ( 'overflow-y' ) == "scroll" ) ) { tableStyle . width = _fnStringToCss ( correction - barWidth ) ; }
if ( scrollX === "" || scrollXInner !== "" ) { _fnLog ( settings , 1 , 'Possible column misalignment' , 6 ) ; } }
else
{ correction = '100%' ; }
divBodyStyle . width = _fnStringToCss ( correction ) ; divHeaderStyle . width = _fnStringToCss ( correction ) ; if ( footer ) { settings . nScrollFoot . style . width = _fnStringToCss ( correction ) ; }
if ( ! scrollY ) { if ( ie67 ) { divBodyStyle . height = _fnStringToCss ( tableEl . offsetHeight + barWidth ) ; } }
var iOuterWidth = table . outerWidth ( ) ; divHeaderTable [ 0 ] . style . width = _fnStringToCss ( iOuterWidth ) ; divHeaderInnerStyle . width = _fnStringToCss ( iOuterWidth ) ; var bScrolling = table . height ( ) > divBodyEl . clientHeight || divBody . css ( 'overflow-y' ) == "scroll" ; var padding = 'padding' + ( browser . bScrollbarLeft ? 'Left' : 'Right' ) ; divHeaderInnerStyle [ padding ] = bScrolling ? barWidth + "px" : "0px" ; if ( footer ) { divFooterTable [ 0 ] . style . width = _fnStringToCss ( iOuterWidth ) ; divFooterInner [ 0 ] . style . width = _fnStringToCss ( iOuterWidth ) ; divFooterInner [ 0 ] . style [ padding ] = bScrolling ? barWidth + "px" : "0px" ; }
table . children ( 'colgroup' ) . insertBefore ( table . children ( 'thead' ) ) ; divBody . scroll ( ) ; if ( ( settings . bSorted || settings . bFiltered ) && ! settings . _drawHold ) { divBodyEl . scrollTop = 0 ; } }
function _fnApplyToChildren ( fn , an1 , an2 )
{ var index = 0 , i = 0 , iLen = an1 . length ; var nNode1 , nNode2 ; while ( i < iLen ) { nNode1 = an1 [ i ] . firstChild ; nNode2 = an2 ? an2 [ i ] . firstChild : null ; while ( nNode1 ) { if ( nNode1 . nodeType === 1 ) { if ( an2 ) { fn ( nNode1 , nNode2 , index ) ; }
else { fn ( nNode1 , index ) ; }
index ++ ; }
nNode1 = nNode1 . nextSibling ; nNode2 = an2 ? nNode2 . nextSibling : null ; }
i ++ ; } }
var _ _re _html _remove = /<.*?>/g ; function _fnCalculateColumnWidths ( oSettings )
{ var
table = oSettings . nTable , columns = oSettings . aoColumns , scroll = oSettings . oScroll , scrollY = scroll . sY , scrollX = scroll . sX , scrollXInner = scroll . sXInner , columnCount = columns . length , visibleColumns = _fnGetColumns ( oSettings , 'bVisible' ) , headerCells = $ ( 'th' , oSettings . nTHead ) , tableWidthAttr = table . getAttribute ( 'width' ) , tableContainer = table . parentNode , userInputs = false , i , column , columnIdx , width , outerWidth , browser = oSettings . oBrowser , ie67 = browser . bScrollOversize ; var styleWidth = table . style . width ; if ( styleWidth && styleWidth . indexOf ( '%' ) !== - 1 ) { tableWidthAttr = styleWidth ; }
for ( i = 0 ; i < visibleColumns . length ; i ++ ) { column = columns [ visibleColumns [ i ] ] ; if ( column . sWidth !== null ) { column . sWidth = _fnConvertToWidth ( column . sWidthOrig , tableContainer ) ; userInputs = true ; } }
if ( ie67 || ! userInputs && ! scrollX && ! scrollY && columnCount == _fnVisbleColumns ( oSettings ) && columnCount == headerCells . length ) { for ( i = 0 ; i < columnCount ; i ++ ) { var colIdx = _fnVisibleToColumnIndex ( oSettings , i ) ; if ( colIdx !== null ) { columns [ colIdx ] . sWidth = _fnStringToCss ( headerCells . eq ( i ) . width ( ) ) ; } } }
else
{ var tmpTable = $ ( table ) . clone ( ) . css ( 'visibility' , 'hidden' ) . removeAttr ( 'id' ) ; tmpTable . find ( 'tbody tr' ) . remove ( ) ; var tr = $ ( '<tr/>' ) . appendTo ( tmpTable . find ( 'tbody' ) ) ; tmpTable . find ( 'thead, tfoot' ) . remove ( ) ; tmpTable . append ( $ ( oSettings . nTHead ) . clone ( ) ) . append ( $ ( oSettings . nTFoot ) . clone ( ) ) ; tmpTable . find ( 'tfoot th, tfoot td' ) . css ( 'width' , '' ) ; headerCells = _fnGetUniqueThs ( oSettings , tmpTable . find ( 'thead' ) [ 0 ] ) ; for ( i = 0 ; i < visibleColumns . length ; i ++ ) { column = columns [ visibleColumns [ i ] ] ; headerCells [ i ] . style . width = column . sWidthOrig !== null && column . sWidthOrig !== '' ? _fnStringToCss ( column . sWidthOrig ) : '' ; if ( column . sWidthOrig && scrollX ) { $ ( headerCells [ i ] ) . append ( $ ( '<div/>' ) . css ( { width : column . sWidthOrig , margin : 0 , padding : 0 , border : 0 , height : 1 } ) ) ; } }
if ( oSettings . aoData . length ) { for ( i = 0 ; i < visibleColumns . length ; i ++ ) { columnIdx = visibleColumns [ i ] ; column = columns [ columnIdx ] ; $ ( _fnGetWidestNode ( oSettings , columnIdx ) ) . clone ( false ) . append ( column . sContentPadding ) . appendTo ( tr ) ; } }
$ ( '[name]' , tmpTable ) . removeAttr ( 'name' ) ; var holder = $ ( '<div/>' ) . css ( scrollX || scrollY ? { position : 'absolute' , top : 0 , left : 0 , height : 1 , right : 0 , overflow : 'hidden' } : { } ) . append ( tmpTable ) . appendTo ( tableContainer ) ; if ( scrollX && scrollXInner ) { tmpTable . width ( scrollXInner ) ; }
else if ( scrollX ) { tmpTable . css ( 'width' , 'auto' ) ; tmpTable . removeAttr ( 'width' ) ; if ( tmpTable . width ( ) < tableContainer . clientWidth && tableWidthAttr ) { tmpTable . width ( tableContainer . clientWidth ) ; } }
else if ( scrollY ) { tmpTable . width ( tableContainer . clientWidth ) ; }
else if ( tableWidthAttr ) { tmpTable . width ( tableWidthAttr ) ; }
var total = 0 ; for ( i = 0 ; i < visibleColumns . length ; i ++ ) { var cell = $ ( headerCells [ i ] ) ; var border = cell . outerWidth ( ) - cell . width ( ) ; var bounding = browser . bBounding ? Math . ceil ( headerCells [ i ] . getBoundingClientRect ( ) . width ) : cell . outerWidth ( ) ; total += bounding ; columns [ visibleColumns [ i ] ] . sWidth = _fnStringToCss ( bounding - border ) ; }
table . style . width = _fnStringToCss ( total ) ; holder . remove ( ) ; }
if ( tableWidthAttr ) { table . style . width = _fnStringToCss ( tableWidthAttr ) ; }
if ( ( tableWidthAttr || scrollX ) && ! oSettings . _reszEvt ) { var bindResize = function ( ) { $ ( window ) . on ( 'resize.DT-' + oSettings . sInstance , _fnThrottle ( function ( ) { _fnAdjustColumnSizing ( oSettings ) ; } ) ) ; } ; if ( ie67 ) { setTimeout ( bindResize , 1000 ) ; }
else { bindResize ( ) ; }
oSettings . _reszEvt = true ; } }
var _fnThrottle = DataTable . util . throttle ; function _fnConvertToWidth ( width , parent )
{ if ( ! width ) { return 0 ; }
var n = $ ( '<div/>' ) . css ( 'width' , _fnStringToCss ( width ) ) . appendTo ( parent || document . body ) ; var val = n [ 0 ] . offsetWidth ; n . remove ( ) ; return val ; }
function _fnGetWidestNode ( settings , colIdx )
{ var idx = _fnGetMaxLenString ( settings , colIdx ) ; if ( idx < 0 ) { return null ; }
var data = settings . aoData [ idx ] ; return ! data . nTr ? $ ( '<td/>' ) . html ( _fnGetCellData ( settings , idx , colIdx , 'display' ) ) [ 0 ] : data . anCells [ colIdx ] ; }
function _fnGetMaxLenString ( settings , colIdx )
{ var s , max = - 1 , maxIdx = - 1 ; for ( var i = 0 , ien = settings . aoData . length ; i < ien ; i ++ ) { s = _fnGetCellData ( settings , i , colIdx , 'display' ) + '' ; s = s . replace ( _ _re _html _remove , '' ) ; s = s . replace ( / /g , ' ' ) ; if ( s . length > max ) { max = s . length ; maxIdx = i ; } }
return maxIdx ; }
function _fnStringToCss ( s )
{ if ( s === null ) { return '0px' ; }
if ( typeof s == 'number' ) { return s < 0 ? '0px' : s + 'px' ; }
return s . match ( /\d$/ ) ? s + 'px' : s ; }
function _fnSortFlatten ( settings )
{ var
i , iLen , k , kLen , aSort = [ ] , aiOrig = [ ] , aoColumns = settings . aoColumns , aDataSort , iCol , sType , srcCol , fixed = settings . aaSortingFixed , fixedObj = $ . isPlainObject ( fixed ) , nestedSort = [ ] , add = function ( a ) { if ( a . length && ! $ . isArray ( a [ 0 ] ) ) { nestedSort . push ( a ) ; }
else { $ . merge ( nestedSort , a ) ; } } ; if ( $ . isArray ( fixed ) ) { add ( fixed ) ; }
if ( fixedObj && fixed . pre ) { add ( fixed . pre ) ; }
add ( settings . aaSorting ) ; if ( fixedObj && fixed . post ) { add ( fixed . post ) ; }
for ( i = 0 ; i < nestedSort . length ; i ++ )
{ srcCol = nestedSort [ i ] [ 0 ] ; aDataSort = aoColumns [ srcCol ] . aDataSort ; for ( k = 0 , kLen = aDataSort . length ; k < kLen ; k ++ )
{ iCol = aDataSort [ k ] ; sType = aoColumns [ iCol ] . sType || 'string' ; if ( nestedSort [ i ] . _idx === undefined ) { nestedSort [ i ] . _idx = $ . inArray ( nestedSort [ i ] [ 1 ] , aoColumns [ iCol ] . asSorting ) ; }
aSort . push ( { src : srcCol , col : iCol , dir : nestedSort [ i ] [ 1 ] , index : nestedSort [ i ] . _idx , type : sType , formatter : DataTable . ext . type . order [ sType + "-pre" ] } ) ; } }
return aSort ; }
function _fnSort ( oSettings )
{ var
i , ien , iLen , j , jLen , k , kLen , sDataType , nTh , aiOrig = [ ] , oExtSort = DataTable . ext . type . order , aoData = oSettings . aoData , aoColumns = oSettings . aoColumns , aDataSort , data , iCol , sType , oSort , formatters = 0 , sortCol , displayMaster = oSettings . aiDisplayMaster , aSort ; _fnColumnTypes ( oSettings ) ; aSort = _fnSortFlatten ( oSettings ) ; for ( i = 0 , ien = aSort . length ; i < ien ; i ++ ) { sortCol = aSort [ i ] ; if ( sortCol . formatter ) { formatters ++ ; }
_fnSortData ( oSettings , sortCol . col ) ; }
if ( _fnDataSource ( oSettings ) != 'ssp' && aSort . length !== 0 )
{ for ( i = 0 , iLen = displayMaster . length ; i < iLen ; i ++ ) { aiOrig [ displayMaster [ i ] ] = i ; }
if ( formatters === aSort . length ) { displayMaster . sort ( function ( a , b ) { var
x , y , k , test , sort , len = aSort . length , dataA = aoData [ a ] . _aSortData , dataB = aoData [ b ] . _aSortData ; for ( k = 0 ; k < len ; k ++ ) { sort = aSort [ k ] ; x = dataA [ sort . col ] ; y = dataB [ sort . col ] ; test = x < y ? - 1 : x > y ? 1 : 0 ; if ( test !== 0 ) { return sort . dir === 'asc' ? test : - test ; } }
x = aiOrig [ a ] ; y = aiOrig [ b ] ; return x < y ? - 1 : x > y ? 1 : 0 ; } ) ; }
else { displayMaster . sort ( function ( a , b ) { var
x , y , k , l , test , sort , fn , len = aSort . length , dataA = aoData [ a ] . _aSortData , dataB = aoData [ b ] . _aSortData ; for ( k = 0 ; k < len ; k ++ ) { sort = aSort [ k ] ; x = dataA [ sort . col ] ; y = dataB [ sort . col ] ; fn = oExtSort [ sort . type + "-" + sort . dir ] || oExtSort [ "string-" + sort . dir ] ; test = fn ( x , y ) ; if ( test !== 0 ) { return test ; } }
x = aiOrig [ a ] ; y = aiOrig [ b ] ; return x < y ? - 1 : x > y ? 1 : 0 ; } ) ; } }
oSettings . bSorted = true ; }
function _fnSortAria ( settings )
{ var label ; var nextSort ; var columns = settings . aoColumns ; var aSort = _fnSortFlatten ( settings ) ; var oAria = settings . oLanguage . oAria ; for ( var i = 0 , iLen = columns . length ; i < iLen ; i ++ )
{ var col = columns [ i ] ; var asSorting = col . asSorting ; var sTitle = col . sTitle . replace ( /<.*?>/g , "" ) ; var th = col . nTh ; th . removeAttribute ( 'aria-sort' ) ; if ( col . bSortable ) { if ( aSort . length > 0 && aSort [ 0 ] . col == i ) { th . setAttribute ( 'aria-sort' , aSort [ 0 ] . dir == "asc" ? "ascending" : "descending" ) ; nextSort = asSorting [ aSort [ 0 ] . index + 1 ] || asSorting [ 0 ] ; }
else { nextSort = asSorting [ 0 ] ; }
label = sTitle + ( nextSort === "asc" ? oAria . sSortAscending : oAria . sSortDescending ) ; }
else { label = sTitle ; }
th . setAttribute ( 'aria-label' , label ) ; } }
function _fnSortListener ( settings , colIdx , append , callback )
{ var col = settings . aoColumns [ colIdx ] ; var sorting = settings . aaSorting ; var asSorting = col . asSorting ; var nextSortIdx ; var next = function ( a , overflow ) { var idx = a . _idx ; if ( idx === undefined ) { idx = $ . inArray ( a [ 1 ] , asSorting ) ; }
return idx + 1 < asSorting . length ? idx + 1 : overflow ? null : 0 ; } ; if ( typeof sorting [ 0 ] === 'number' ) { sorting = settings . aaSorting = [ sorting ] ; }
if ( append && settings . oFeatures . bSortMulti ) { var sortIdx = $ . inArray ( colIdx , _pluck ( sorting , '0' ) ) ; if ( sortIdx !== - 1 ) { nextSortIdx = next ( sorting [ sortIdx ] , true ) ; if ( nextSortIdx === null && sorting . length === 1 ) { nextSortIdx = 0 ; }
if ( nextSortIdx === null ) { sorting . splice ( sortIdx , 1 ) ; }
else { sorting [ sortIdx ] [ 1 ] = asSorting [ nextSortIdx ] ; sorting [ sortIdx ] . _idx = nextSortIdx ; } }
else { sorting . push ( [ colIdx , asSorting [ 0 ] , 0 ] ) ; sorting [ sorting . length - 1 ] . _idx = 0 ; } }
else if ( sorting . length && sorting [ 0 ] [ 0 ] == colIdx ) { nextSortIdx = next ( sorting [ 0 ] ) ; sorting . length = 1 ; sorting [ 0 ] [ 1 ] = asSorting [ nextSortIdx ] ; sorting [ 0 ] . _idx = nextSortIdx ; }
else { sorting . length = 0 ; sorting . push ( [ colIdx , asSorting [ 0 ] ] ) ; sorting [ 0 ] . _idx = 0 ; }
_fnReDraw ( settings ) ; if ( typeof callback == 'function' ) { callback ( settings ) ; } }
function _fnSortAttachListener ( settings , attachTo , colIdx , callback )
{ var col = settings . aoColumns [ colIdx ] ; _fnBindAction ( attachTo , { } , function ( e ) { if ( col . bSortable === false ) { return ; }
if ( settings . oFeatures . bProcessing ) { _fnProcessingDisplay ( settings , true ) ; setTimeout ( function ( ) { _fnSortListener ( settings , colIdx , e . shiftKey , callback ) ; if ( _fnDataSource ( settings ) !== 'ssp' ) { _fnProcessingDisplay ( settings , false ) ; } } , 0 ) ; }
else { _fnSortListener ( settings , colIdx , e . shiftKey , callback ) ; } } ) ; }
function _fnSortingClasses ( settings )
{ var oldSort = settings . aLastSort ; var sortClass = settings . oClasses . sSortColumn ; var sort = _fnSortFlatten ( settings ) ; var features = settings . oFeatures ; var i , ien , colIdx ; if ( features . bSort && features . bSortClasses ) { for ( i = 0 , ien = oldSort . length ; i < ien ; i ++ ) { colIdx = oldSort [ i ] . src ; $ ( _pluck ( settings . aoData , 'anCells' , colIdx ) ) . removeClass ( sortClass + ( i < 2 ? i + 1 : 3 ) ) ; }
for ( i = 0 , ien = sort . length ; i < ien ; i ++ ) { colIdx = sort [ i ] . src ; $ ( _pluck ( settings . aoData , 'anCells' , colIdx ) ) . addClass ( sortClass + ( i < 2 ? i + 1 : 3 ) ) ; } }
settings . aLastSort = sort ; }
function _fnSortData ( settings , idx )
{ var column = settings . aoColumns [ idx ] ; var customSort = DataTable . ext . order [ column . sSortDataType ] ; var customData ; if ( customSort ) { customData = customSort . call ( settings . oInstance , settings , idx , _fnColumnIndexToVisible ( settings , idx ) ) ; }
var row , cellData ; var formatter = DataTable . ext . type . order [ column . sType + "-pre" ] ; for ( var i = 0 , ien = settings . aoData . length ; i < ien ; i ++ ) { row = settings . aoData [ i ] ; if ( ! row . _aSortData ) { row . _aSortData = [ ] ; }
if ( ! row . _aSortData [ idx ] || customSort ) { cellData = customSort ? customData [ i ] : _fnGetCellData ( settings , i , idx , 'sort' ) ; row . _aSortData [ idx ] = formatter ? formatter ( cellData ) : cellData ; } } }
function _fnSaveState ( settings )
{ if ( ! settings . oFeatures . bStateSave || settings . bDestroying )
{ return ; }
var state = { time : + new Date ( ) , start : settings . _iDisplayStart , length : settings . _iDisplayLength , order : $ . extend ( true , [ ] , settings . aaSorting ) , search : _fnSearchToCamel ( settings . oPreviousSearch ) , columns : $ . map ( settings . aoColumns , function ( col , i ) { return { visible : col . bVisible , search : _fnSearchToCamel ( settings . aoPreSearchCols [ i ] ) } ; } ) } ; _fnCallbackFire ( settings , "aoStateSaveParams" , 'stateSaveParams' , [ settings , state ] ) ; settings . oSavedState = state ; settings . fnStateSaveCallback . call ( settings . oInstance , settings , state ) ; }
function _fnLoadState ( settings , oInit , callback )
{ var i , ien ; var columns = settings . aoColumns ; var loaded = function ( s ) { if ( ! s || ! s . time ) { callback ( ) ; return ; }
var abStateLoad = _fnCallbackFire ( settings , 'aoStateLoadParams' , 'stateLoadParams' , [ settings , s ] ) ; if ( $ . inArray ( false , abStateLoad ) !== - 1 ) { callback ( ) ; return ; }
var duration = settings . iStateDuration ; if ( duration > 0 && s . time < + new Date ( ) - ( duration * 1000 ) ) { callback ( ) ; return ; }
if ( s . columns && columns . length !== s . columns . length ) { callback ( ) ; return ; }
settings . oLoadedState = $ . extend ( true , { } , s ) ; if ( s . start !== undefined ) { settings . _iDisplayStart = s . start ; settings . iInitDisplayStart = s . start ; }
if ( s . length !== undefined ) { settings . _iDisplayLength = s . length ; }
if ( s . order !== undefined ) { settings . aaSorting = [ ] ; $ . each ( s . order , function ( i , col ) { settings . aaSorting . push ( col [ 0 ] >= columns . length ? [ 0 , col [ 1 ] ] : col ) ; } ) ; }
if ( s . search !== undefined ) { $ . extend ( settings . oPreviousSearch , _fnSearchToHung ( s . search ) ) ; }
if ( s . columns ) { for ( i = 0 , ien = s . columns . length ; i < ien ; i ++ ) { var col = s . columns [ i ] ; if ( col . visible !== undefined ) { columns [ i ] . bVisible = col . visible ; }
if ( col . search !== undefined ) { $ . extend ( settings . aoPreSearchCols [ i ] , _fnSearchToHung ( col . search ) ) ; } } }
_fnCallbackFire ( settings , 'aoStateLoaded' , 'stateLoaded' , [ settings , s ] ) ; callback ( ) ; }
if ( ! settings . oFeatures . bStateSave ) { callback ( ) ; return ; }
var state = settings . fnStateLoadCallback . call ( settings . oInstance , settings , loaded ) ; if ( state !== undefined ) { loaded ( state ) ; }
}
function _fnSettingsFromNode ( table )
{ var settings = DataTable . settings ; var idx = $ . inArray ( table , _pluck ( settings , 'nTable' ) ) ; return idx !== - 1 ? settings [ idx ] : null ; }
function _fnLog ( settings , level , msg , tn )
{ msg = 'DataTables warning: ' +
( settings ? 'table id=' + settings . sTableId + ' - ' : '' ) + msg ; if ( tn ) { msg += '. For more information about this error, please see ' +
'http://datatables.net/tn/' + tn ; }
if ( ! level ) { var ext = DataTable . ext ; var type = ext . sErrMode || ext . errMode ; if ( settings ) { _fnCallbackFire ( settings , null , 'error' , [ settings , tn , msg ] ) ; }
if ( type == 'alert' ) { alert ( msg ) ; }
else if ( type == 'throw' ) { throw new Error ( msg ) ; }
else if ( typeof type == 'function' ) { type ( settings , tn , msg ) ; } }
else if ( window . console && console . log ) { console . log ( msg ) ; } }
function _fnMap ( ret , src , name , mappedName )
{ if ( $ . isArray ( name ) ) { $ . each ( name , function ( i , val ) { if ( $ . isArray ( val ) ) { _fnMap ( ret , src , val [ 0 ] , val [ 1 ] ) ; }
else { _fnMap ( ret , src , val ) ; } } ) ; return ; }
if ( mappedName === undefined ) { mappedName = name ; }
if ( src [ name ] !== undefined ) { ret [ mappedName ] = src [ name ] ; } }
function _fnExtend ( out , extender , breakRefs )
{ var val ; for ( var prop in extender ) { if ( extender . hasOwnProperty ( prop ) ) { val = extender [ prop ] ; if ( $ . isPlainObject ( val ) ) { if ( ! $ . isPlainObject ( out [ prop ] ) ) { out [ prop ] = { } ; }
$ . extend ( true , out [ prop ] , val ) ; }
else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $ . isArray ( val ) ) { out [ prop ] = val . slice ( ) ; }
else { out [ prop ] = val ; } } }
return out ; }
function _fnBindAction ( n , oData , fn )
{ $ ( n ) . on ( 'click.DT' , oData , function ( e ) { $ ( n ) . blur ( ) ; fn ( e ) ; } ) . on ( 'keypress.DT' , oData , function ( e ) { if ( e . which === 13 ) { e . preventDefault ( ) ; fn ( e ) ; } } ) . on ( 'selectstart.DT' , function ( ) { return false ; } ) ; }
function _fnCallbackReg ( oSettings , sStore , fn , sName )
{ if ( fn )
{ oSettings [ sStore ] . push ( { "fn" : fn , "sName" : sName } ) ; } }
function _fnCallbackFire ( settings , callbackArr , eventName , args )
{ var ret = [ ] ; if ( callbackArr ) { ret = $ . map ( settings [ callbackArr ] . slice ( ) . reverse ( ) , function ( val , i ) { return val . fn . apply ( settings . oInstance , args ) ; } ) ; }
if ( eventName !== null ) { var e = $ . Event ( eventName + '.dt' ) ; $ ( settings . nTable ) . trigger ( e , args ) ; ret . push ( e . result ) ; }
return ret ; }
function _fnLengthOverflow ( settings )
{ var
start = settings . _iDisplayStart , end = settings . fnDisplayEnd ( ) , len = settings . _iDisplayLength ; if ( start >= end )
{ start = end - len ; }
start -= ( start % len ) ; if ( len === - 1 || start < 0 )
{ start = 0 ; }
settings . _iDisplayStart = start ; }
function _fnRenderer ( settings , type )
{ var renderer = settings . renderer ; var host = DataTable . ext . renderer [ type ] ; if ( $ . isPlainObject ( renderer ) && renderer [ type ] ) { return host [ renderer [ type ] ] || host . _ ; }
else if ( typeof renderer === 'string' ) { return host [ renderer ] || host . _ ; }
return host . _ ; }
function _fnDataSource ( settings )
{ if ( settings . oFeatures . bServerSide ) { return 'ssp' ; }
else if ( settings . ajax || settings . sAjaxSource ) { return 'ajax' ; }
return 'dom' ; }
var _ _apiStruct = [ ] ; var _ _arrayProto = Array . prototype ; var _toSettings = function ( mixed )
{ var idx , jq ; var settings = DataTable . settings ; var tables = $ . map ( settings , function ( el , i ) { return el . nTable ; } ) ; if ( ! mixed ) { return [ ] ; }
else if ( mixed . nTable && mixed . oApi ) { return [ mixed ] ; }
else if ( mixed . nodeName && mixed . nodeName . toLowerCase ( ) === 'table' ) { idx = $ . inArray ( mixed , tables ) ; return idx !== - 1 ? [ settings [ idx ] ] : null ; }
else if ( mixed && typeof mixed . settings === 'function' ) { return mixed . settings ( ) . toArray ( ) ; }
else if ( typeof mixed === 'string' ) { jq = $ ( mixed ) ; }
else if ( mixed instanceof $ ) { jq = mixed ; }
if ( jq ) { return jq . map ( function ( i ) { idx = $ . inArray ( this , tables ) ; return idx !== - 1 ? settings [ idx ] : null ; } ) . toArray ( ) ; } } ; _Api = function ( context , data )
{ if ( ! ( this instanceof _Api ) ) { return new _Api ( context , data ) ; }
var settings = [ ] ; var ctxSettings = function ( o ) { var a = _toSettings ( o ) ; if ( a ) { settings = settings . concat ( a ) ; } } ; if ( $ . isArray ( context ) ) { for ( var i = 0 , ien = context . length ; i < ien ; i ++ ) { ctxSettings ( context [ i ] ) ; } }
else { ctxSettings ( context ) ; }
this . context = _unique ( settings ) ; if ( data ) { $ . merge ( this , data ) ; }
this . selector = { rows : null , cols : null , opts : null } ; _Api . extend ( this , this , _ _apiStruct ) ; } ; DataTable . Api = _Api ; $ . extend ( _Api . prototype , { any : function ( )
{ return this . count ( ) !== 0 ; } , concat : _ _arrayProto . concat , context : [ ] , count : function ( )
{ return this . flatten ( ) . length ; } , each : function ( fn )
{ for ( var i = 0 , ien = this . length ; i < ien ; i ++ ) { fn . call ( this , this [ i ] , i , this ) ; }
return this ; } , eq : function ( idx )
{ var ctx = this . context ; return ctx . length > idx ? new _Api ( ctx [ idx ] , this [ idx ] ) : null ; } , filter : function ( fn )
{ var a = [ ] ; if ( _ _arrayProto . filter ) { a = _ _arrayProto . filter . call ( this , fn , this ) ; }
else { for ( var i = 0 , ien = this . length ; i < ien ; i ++ ) { if ( fn . call ( this , this [ i ] , i , this ) ) { a . push ( this [ i ] ) ; } } }
return new _Api ( this . context , a ) ; } , flatten : function ( )
{ var a = [ ] ; return new _Api ( this . context , a . concat . apply ( a , this . toArray ( ) ) ) ; } , join : _ _arrayProto . join , indexOf : _ _arrayProto . indexOf || function ( obj , start )
{ for ( var i = ( start || 0 ) , ien = this . length ; i < ien ; i ++ ) { if ( this [ i ] === obj ) { return i ; } }
return - 1 ; } , iterator : function ( flatten , type , fn , alwaysNew ) { var
a = [ ] , ret , i , ien , j , jen , context = this . context , rows , items , item , selector = this . selector ; if ( typeof flatten === 'string' ) { alwaysNew = fn ; fn = type ; type = flatten ; flatten = false ; }
for ( i = 0 , ien = context . length ; i < ien ; i ++ ) { var apiInst = new _Api ( context [ i ] ) ; if ( type === 'table' ) { ret = fn . call ( apiInst , context [ i ] , i ) ; if ( ret !== undefined ) { a . push ( ret ) ; } }
else if ( type === 'columns' || type === 'rows' ) { ret = fn . call ( apiInst , context [ i ] , this [ i ] , i ) ; if ( ret !== undefined ) { a . push ( ret ) ; } }
else if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) { items = this [ i ] ; if ( type === 'column-rows' ) { rows = _selector _row _indexes ( context [ i ] , selector . opts ) ; }
for ( j = 0 , jen = items . length ; j < jen ; j ++ ) { item = items [ j ] ; if ( type === 'cell' ) { ret = fn . call ( apiInst , context [ i ] , item . row , item . column , i , j ) ; }
else { ret = fn . call ( apiInst , context [ i ] , item , i , j , rows ) ; }
if ( ret !== undefined ) { a . push ( ret ) ; } } } }
if ( a . length || alwaysNew ) { var api = new _Api ( context , flatten ? a . concat . apply ( [ ] , a ) : a ) ; var apiSelector = api . selector ; apiSelector . rows = selector . rows ; apiSelector . cols = selector . cols ; apiSelector . opts = selector . opts ; return api ; }
return this ; } , lastIndexOf : _ _arrayProto . lastIndexOf || function ( obj , start )
{ return this . indexOf . apply ( this . toArray . reverse ( ) , arguments ) ; } , length : 0 , map : function ( fn )
{ var a = [ ] ; if ( _ _arrayProto . map ) { a = _ _arrayProto . map . call ( this , fn , this ) ; }
else { for ( var i = 0 , ien = this . length ; i < ien ; i ++ ) { a . push ( fn . call ( this , this [ i ] , i ) ) ; } }
return new _Api ( this . context , a ) ; } , pluck : function ( prop )
{ return this . map ( function ( el ) { return el [ prop ] ; } ) ; } , pop : _ _arrayProto . pop , push : _ _arrayProto . push , reduce : _ _arrayProto . reduce || function ( fn , init )
{ return _fnReduce ( this , fn , init , 0 , this . length , 1 ) ; } , reduceRight : _ _arrayProto . reduceRight || function ( fn , init )
{ return _fnReduce ( this , fn , init , this . length - 1 , - 1 , - 1 ) ; } , reverse : _ _arrayProto . reverse , selector : null , shift : _ _arrayProto . shift , slice : function ( ) { return new _Api ( this . context , this ) ; } , sort : _ _arrayProto . sort , splice : _ _arrayProto . splice , toArray : function ( )
{ return _ _arrayProto . slice . call ( this ) ; } , to$ : function ( )
{ return $ ( this ) ; } , toJQuery : function ( )
{ return $ ( this ) ; } , unique : function ( )
{ return new _Api ( this . context , _unique ( this ) ) ; } , unshift : _ _arrayProto . unshift } ) ; _Api . extend = function ( scope , obj , ext )
{ if ( ! ext . length || ! obj || ( ! ( obj instanceof _Api ) && ! obj . _ _dt _wrapper ) ) { return ; }
var
i , ien , j , jen , struct , inner , methodScoping = function ( scope , fn , struc ) { return function ( ) { var ret = fn . apply ( scope , arguments ) ; _Api . extend ( ret , ret , struc . methodExt ) ; return ret ; } ; } ; for ( i = 0 , ien = ext . length ; i < ien ; i ++ ) { struct = ext [ i ] ; obj [ struct . name ] = typeof struct . val === 'function' ? methodScoping ( scope , struct . val , struct ) : $ . isPlainObject ( struct . val ) ? { } : struct . val ; obj [ struct . name ] . _ _dt _wrapper = true ; _Api . extend ( scope , obj [ struct . name ] , struct . propExt ) ; } } ; _Api . register = _api _register = function ( name , val )
{ if ( $ . isArray ( name ) ) { for ( var j = 0 , jen = name . length ; j < jen ; j ++ ) { _Api . register ( name [ j ] , val ) ; }
return ; }
var
i , ien , heir = name . split ( '.' ) , struct = _ _apiStruct , key , method ; var find = function ( src , name ) { for ( var i = 0 , ien = src . length ; i < ien ; i ++ ) { if ( src [ i ] . name === name ) { return src [ i ] ; } }
return null ; } ; for ( i = 0 , ien = heir . length ; i < ien ; i ++ ) { method = heir [ i ] . indexOf ( '()' ) !== - 1 ; key = method ? heir [ i ] . replace ( '()' , '' ) : heir [ i ] ; var src = find ( struct , key ) ; if ( ! src ) { src = { name : key , val : { } , methodExt : [ ] , propExt : [ ] } ; struct . push ( src ) ; }
if ( i === ien - 1 ) { src . val = val ; }
else { struct = method ? src . methodExt : src . propExt ; } } } ; _Api . registerPlural = _api _registerPlural = function ( pluralName , singularName , val ) { _Api . register ( pluralName , val ) ; _Api . register ( singularName , function ( ) { var ret = val . apply ( this , arguments ) ; if ( ret === this ) { return this ; }
else if ( ret instanceof _Api ) { return ret . length ? $ . isArray ( ret [ 0 ] ) ? new _Api ( ret . context , ret [ 0 ] ) : ret [ 0 ] : undefined ; }
return ret ; } ) ; } ; var _ _table _selector = function ( selector , a )
{ if ( typeof selector === 'number' ) { return [ a [ selector ] ] ; }
var nodes = $ . map ( a , function ( el , i ) { return el . nTable ; } ) ; return $ ( nodes ) . filter ( selector ) . map ( function ( i ) { var idx = $ . inArray ( this , nodes ) ; return a [ idx ] ; } ) . toArray ( ) ; } ; _api _register ( 'tables()' , function ( selector ) { return selector ? new _Api ( _ _table _selector ( selector , this . context ) ) : this ; } ) ; _api _register ( 'table()' , function ( selector ) { var tables = this . tables ( selector ) ; var ctx = tables . context ; return ctx . length ? new _Api ( ctx [ 0 ] ) : tables ; } ) ; _api _registerPlural ( 'tables().nodes()' , 'table().node()' , function ( ) { return this . iterator ( 'table' , function ( ctx ) { return ctx . nTable ; } , 1 ) ; } ) ; _api _registerPlural ( 'tables().body()' , 'table().body()' , function ( ) { return this . iterator ( 'table' , function ( ctx ) { return ctx . nTBody ; } , 1 ) ; } ) ; _api _registerPlural ( 'tables().header()' , 'table().header()' , function ( ) { return this . iterator ( 'table' , function ( ctx ) { return ctx . nTHead ; } , 1 ) ; } ) ; _api _registerPlural ( 'tables().footer()' , 'table().footer()' , function ( ) { return this . iterator ( 'table' , function ( ctx ) { return ctx . nTFoot ; } , 1 ) ; } ) ; _api _registerPlural ( 'tables().containers()' , 'table().container()' , function ( ) { return this . iterator ( 'table' , function ( ctx ) { return ctx . nTableWrapper ; } , 1 ) ; } ) ; _api _register ( 'draw()' , function ( paging ) { return this . iterator ( 'table' , function ( settings ) { if ( paging === 'page' ) { _fnDraw ( settings ) ; }
else { if ( typeof paging === 'string' ) { paging = paging === 'full-hold' ? false : true ; }
_fnReDraw ( settings , paging === false ) ; } } ) ; } ) ; _api _register ( 'page()' , function ( action ) { if ( action === undefined ) { return this . page . info ( ) . page ; }
return this . iterator ( 'table' , function ( settings ) { _fnPageChange ( settings , action ) ; } ) ; } ) ; _api _register ( 'page.info()' , function ( action ) { if ( this . context . length === 0 ) { return undefined ; }
var
settings = this . context [ 0 ] , start = settings . _iDisplayStart , len = settings . oFeatures . bPaginate ? settings . _iDisplayLength : - 1 , visRecords = settings . fnRecordsDisplay ( ) , all = len === - 1 ; return { "page" : all ? 0 : Math . floor ( start / len ) , "pages" : all ? 1 : Math . ceil ( visRecords / len ) , "start" : start , "end" : settings . fnDisplayEnd ( ) , "length" : len , "recordsTotal" : settings . fnRecordsTotal ( ) , "recordsDisplay" : visRecords , "serverSide" : _fnDataSource ( settings ) === 'ssp' } ; } ) ; _api _register ( 'page.len()' , function ( len ) { if ( len === undefined ) { return this . context . length !== 0 ? this . context [ 0 ] . _iDisplayLength : undefined ; }
return this . iterator ( 'table' , function ( settings ) { _fnLengthChange ( settings , len ) ; } ) ; } ) ; var _ _reload = function ( settings , holdPosition , callback ) { if ( callback ) { var api = new _Api ( settings ) ; api . one ( 'draw' , function ( ) { callback ( api . ajax . json ( ) ) ; } ) ; }
if ( _fnDataSource ( settings ) == 'ssp' ) { _fnReDraw ( settings , holdPosition ) ; }
else { _fnProcessingDisplay ( settings , true ) ; var xhr = settings . jqXHR ; if ( xhr && xhr . readyState !== 4 ) { xhr . abort ( ) ; }
_fnBuildAjax ( settings , [ ] , function ( json ) { _fnClearTable ( settings ) ; var data = _fnAjaxDataSrc ( settings , json ) ; for ( var i = 0 , ien = data . length ; i < ien ; i ++ ) { _fnAddData ( settings , data [ i ] ) ; }
_fnReDraw ( settings , holdPosition ) ; _fnProcessingDisplay ( settings , false ) ; } ) ; } } ; _api _register ( 'ajax.json()' , function ( ) { var ctx = this . context ; if ( ctx . length > 0 ) { return ctx [ 0 ] . json ; }
} ) ; _api _register ( 'ajax.params()' , function ( ) { var ctx = this . context ; if ( ctx . length > 0 ) { return ctx [ 0 ] . oAjaxData ; }
} ) ; _api _register ( 'ajax.reload()' , function ( callback , resetPaging ) { return this . iterator ( 'table' , function ( settings ) { _ _reload ( settings , resetPaging === false , callback ) ; } ) ; } ) ; _api _register ( 'ajax.url()' , function ( url ) { var ctx = this . context ; if ( url === undefined ) { if ( ctx . length === 0 ) { return undefined ; }
ctx = ctx [ 0 ] ; return ctx . ajax ? $ . isPlainObject ( ctx . ajax ) ? ctx . ajax . url : ctx . ajax : ctx . sAjaxSource ; }
return this . iterator ( 'table' , function ( settings ) { if ( $ . isPlainObject ( settings . ajax ) ) { settings . ajax . url = url ; }
else { settings . ajax = url ; }
} ) ; } ) ; _api _register ( 'ajax.url().load()' , function ( callback , resetPaging ) { return this . iterator ( 'table' , function ( ctx ) { _ _reload ( ctx , resetPaging === false , callback ) ; } ) ; } ) ; var _selector _run = function ( type , selector , selectFn , settings , opts )
{ var
out = [ ] , res , a , i , ien , j , jen , selectorType = typeof selector ; if ( ! selector || selectorType === 'string' || selectorType === 'function' || selector . length === undefined ) { selector = [ selector ] ; }
for ( i = 0 , ien = selector . length ; i < ien ; i ++ ) { a = selector [ i ] && selector [ i ] . split && ! selector [ i ] . match ( /[\[\(:]/ ) ? selector [ i ] . split ( ',' ) : [ selector [ i ] ] ; for ( j = 0 , jen = a . length ; j < jen ; j ++ ) { res = selectFn ( typeof a [ j ] === 'string' ? $ . trim ( a [ j ] ) : a [ j ] ) ; if ( res && res . length ) { out = out . concat ( res ) ; } } }
var ext = _ext . selector [ type ] ; if ( ext . length ) { for ( i = 0 , ien = ext . length ; i < ien ; i ++ ) { out = ext [ i ] ( settings , opts , out ) ; } }
return _unique ( out ) ; } ; var _selector _opts = function ( opts )
{ if ( ! opts ) { opts = { } ; }
if ( opts . filter && opts . search === undefined ) { opts . search = opts . filter ; }
return $ . extend ( { search : 'none' , order : 'current' , page : 'all' } , opts ) ; } ; var _selector _first = function ( inst )
{ for ( var i = 0 , ien = inst . length ; i < ien ; i ++ ) { if ( inst [ i ] . length > 0 ) { inst [ 0 ] = inst [ i ] ; inst [ 0 ] . length = 1 ; inst . length = 1 ; inst . context = [ inst . context [ i ] ] ; return inst ; } }
inst . length = 0 ; return inst ; } ; var _selector _row _indexes = function ( settings , opts )
{ var
i , ien , tmp , a = [ ] , displayFiltered = settings . aiDisplay , displayMaster = settings . aiDisplayMaster ; var
search = opts . search , order = opts . order , page = opts . page ; if ( _fnDataSource ( settings ) == 'ssp' ) { return search === 'removed' ? [ ] : _range ( 0 , displayMaster . length ) ; }
else if ( page == 'current' ) { for ( i = settings . _iDisplayStart , ien = settings . fnDisplayEnd ( ) ; i < ien ; i ++ ) { a . push ( displayFiltered [ i ] ) ; } }
else if ( order == 'current' || order == 'applied' ) { if ( search == 'none' ) { a = displayMaster . slice ( ) ; }
else if ( search == 'applied' ) { a = displayFiltered . slice ( ) ; }
else if ( search == 'removed' ) { var displayFilteredMap = { } ; for ( var i = 0 , ien = displayFiltered . length ; i < ien ; i ++ ) { displayFilteredMap [ displayFiltered [ i ] ] = null ; }
a = $ . map ( displayMaster , function ( el ) { return ! displayFilteredMap . hasOwnProperty ( el ) ? el : null ; } ) ; } }
else if ( order == 'index' || order == 'original' ) { for ( i = 0 , ien = settings . aoData . length ; i < ien ; i ++ ) { if ( search == 'none' ) { a . push ( i ) ; }
else { tmp = $ . inArray ( i , displayFiltered ) ; if ( ( tmp === - 1 && search == 'removed' ) || ( tmp >= 0 && search == 'applied' ) )
{ a . push ( i ) ; } } } }
return a ; } ; var _ _row _selector = function ( settings , selector , opts )
{ var rows ; var run = function ( sel ) { var selInt = _intVal ( sel ) ; var i , ien ; var aoData = settings . aoData ; if ( selInt !== null && ! opts ) { return [ selInt ] ; }
if ( ! rows ) { rows = _selector _row _indexes ( settings , opts ) ; }
if ( selInt !== null && $ . inArray ( selInt , rows ) !== - 1 ) { return [ selInt ] ; }
else if ( sel === null || sel === undefined || sel === '' ) { return rows ; }
if ( typeof sel === 'function' ) { return $ . map ( rows , function ( idx ) { var row = aoData [ idx ] ; return sel ( idx , row . _aData , row . nTr ) ? idx : null ; } ) ; }
if ( sel . nodeName ) { var rowIdx = sel . _DT _RowIndex ; var cellIdx = sel . _DT _CellIndex ; if ( rowIdx !== undefined ) { return aoData [ rowIdx ] && aoData [ rowIdx ] . nTr === sel ? [ rowIdx ] : [ ] ; }
else if ( cellIdx ) { return aoData [ cellIdx . row ] && aoData [ cellIdx . row ] . nTr === sel ? [ cellIdx . row ] : [ ] ; }
else { var host = $ ( sel ) . closest ( '*[data-dt-row]' ) ; return host . length ? [ host . data ( 'dt-row' ) ] : [ ] ; } }
if ( typeof sel === 'string' && sel . charAt ( 0 ) === '#' ) { var rowObj = settings . aIds [ sel . replace ( /^#/ , '' ) ] ; if ( rowObj !== undefined ) { return [ rowObj . idx ] ; }
}
var nodes = _removeEmpty ( _pluck _order ( settings . aoData , rows , 'nTr' ) ) ; return $ ( nodes ) . filter ( sel ) . map ( function ( ) { return this . _DT _RowIndex ; } ) . toArray ( ) ; } ; return _selector _run ( 'row' , selector , run , settings , opts ) ; } ; _api _register ( 'rows()' , function ( selector , opts ) { if ( selector === undefined ) { selector = '' ; }
else if ( $ . isPlainObject ( selector ) ) { opts = selector ; selector = '' ; }
opts = _selector _opts ( opts ) ; var inst = this . iterator ( 'table' , function ( settings ) { return _ _row _selector ( settings , selector , opts ) ; } , 1 ) ; inst . selector . rows = selector ; inst . selector . opts = opts ; return inst ; } ) ; _api _register ( 'rows().nodes()' , function ( ) { return this . iterator ( 'row' , function ( settings , row ) { return settings . aoData [ row ] . nTr || undefined ; } , 1 ) ; } ) ; _api _register ( 'rows().data()' , function ( ) { return this . iterator ( true , 'rows' , function ( settings , rows ) { return _pluck _order ( settings . aoData , rows , '_aData' ) ; } , 1 ) ; } ) ; _api _registerPlural ( 'rows().cache()' , 'row().cache()' , function ( type ) { return this . iterator ( 'row' , function ( settings , row ) { var r = settings . aoData [ row ] ; return type === 'search' ? r . _aFilterData : r . _aSortData ; } , 1 ) ; } ) ; _api _registerPlural ( 'rows().invalidate()' , 'row().invalidate()' , function ( src ) { return this . iterator ( 'row' , function ( settings , row ) { _fnInvalidate ( settings , row , src ) ; } ) ; } ) ; _api _registerPlural ( 'rows().indexes()' , 'row().index()' , function ( ) { return this . iterator ( 'row' , function ( settings , row ) { return row ; } , 1 ) ; } ) ; _api _registerPlural ( 'rows().ids()' , 'row().id()' , function ( hash ) { var a = [ ] ; var context = this . context ; for ( var i = 0 , ien = context . length ; i < ien ; i ++ ) { for ( var j = 0 , jen = this [ i ] . length ; j < jen ; j ++ ) { var id = context [ i ] . rowIdFn ( context [ i ] . aoData [ this [ i ] [ j ] ] . _aData ) ; a . push ( ( hash === true ? '#' : '' ) + id ) ; } }
return new _Api ( context , a ) ; } ) ; _api _registerPlural ( 'rows().remove()' , 'row().remove()' , function ( ) { var that = this ; this . iterator ( 'row' , function ( settings , row , thatIdx ) { var data = settings . aoData ; var rowData = data [ row ] ; var i , ien , j , jen ; var loopRow , loopCells ; data . splice ( row , 1 ) ; for ( i = 0 , ien = data . length ; i < ien ; i ++ ) { loopRow = data [ i ] ; loopCells = loopRow . anCells ; if ( loopRow . nTr !== null ) { loopRow . nTr . _DT _RowIndex = i ; }
if ( loopCells !== null ) { for ( j = 0 , jen = loopCells . length ; j < jen ; j ++ ) { loopCells [ j ] . _DT _CellIndex . row = i ; } } }
_fnDeleteIndex ( settings . aiDisplayMaster , row ) ; _fnDeleteIndex ( settings . aiDisplay , row ) ; _fnDeleteIndex ( that [ thatIdx ] , row , false ) ; if ( settings . _iRecordsDisplay > 0 ) { settings . _iRecordsDisplay -- ; }
_fnLengthOverflow ( settings ) ; var id = settings . rowIdFn ( rowData . _aData ) ; if ( id !== undefined ) { delete settings . aIds [ id ] ; } } ) ; this . iterator ( 'table' , function ( settings ) { for ( var i = 0 , ien = settings . aoData . length ; i < ien ; i ++ ) { settings . aoData [ i ] . idx = i ; } } ) ; return this ; } ) ; _api _register ( 'rows.add()' , function ( rows ) { var newRows = this . iterator ( 'table' , function ( settings ) { var row , i , ien ; var out = [ ] ; for ( i = 0 , ien = rows . length ; i < ien ; i ++ ) { row = rows [ i ] ; if ( row . nodeName && row . nodeName . toUpperCase ( ) === 'TR' ) { out . push ( _fnAddTr ( settings , row ) [ 0 ] ) ; }
else { out . push ( _fnAddData ( settings , row ) ) ; } }
return out ; } , 1 ) ; var modRows = this . rows ( - 1 ) ; modRows . pop ( ) ; $ . merge ( modRows , newRows ) ; return modRows ; } ) ; _api _register ( 'row()' , function ( selector , opts ) { return _selector _first ( this . rows ( selector , opts ) ) ; } ) ; _api _register ( 'row().data()' , function ( data ) { var ctx = this . context ; if ( data === undefined ) { return ctx . length && this . length ? ctx [ 0 ] . aoData [ this [ 0 ] ] . _aData : undefined ; }
var row = ctx [ 0 ] . aoData [ this [ 0 ] ] ; row . _aData = data ; if ( $ . isArray ( data ) && row . nTr . id ) { _fnSetObjectDataFn ( ctx [ 0 ] . rowId ) ( data , row . nTr . id ) ; }
_fnInvalidate ( ctx [ 0 ] , this [ 0 ] , 'data' ) ; return this ; } ) ; _api _register ( 'row().node()' , function ( ) { var ctx = this . context ; return ctx . length && this . length ? ctx [ 0 ] . aoData [ this [ 0 ] ] . nTr || null : null ; } ) ; _api _register ( 'row.add()' , function ( row ) { if ( row instanceof $ && row . length ) { row = row [ 0 ] ; }
var rows = this . iterator ( 'table' , function ( settings ) { if ( row . nodeName && row . nodeName . toUpperCase ( ) === 'TR' ) { return _fnAddTr ( settings , row ) [ 0 ] ; }
return _fnAddData ( settings , row ) ; } ) ; return this . row ( rows [ 0 ] ) ; } ) ; var _ _details _add = function ( ctx , row , data , klass )
{ var rows = [ ] ; var addRow = function ( r , k ) { if ( $ . isArray ( r ) || r instanceof $ ) { for ( var i = 0 , ien = r . length ; i < ien ; i ++ ) { addRow ( r [ i ] , k ) ; }
return ; }
if ( r . nodeName && r . nodeName . toLowerCase ( ) === 'tr' ) { rows . push ( r ) ; }
else { var created = $ ( '<tr><td/></tr>' ) . addClass ( k ) ; $ ( 'td' , created ) . addClass ( k ) . html ( r )
[ 0 ] . colSpan = _fnVisbleColumns ( ctx ) ; rows . push ( created [ 0 ] ) ; } } ; addRow ( data , klass ) ; if ( row . _details ) { row . _details . detach ( ) ; }
row . _details = $ ( rows ) ; if ( row . _detailsShow ) { row . _details . insertAfter ( row . nTr ) ; } } ; var _ _details _remove = function ( api , idx )
{ var ctx = api . context ; if ( ctx . length ) { var row = ctx [ 0 ] . aoData [ idx !== undefined ? idx : api [ 0 ] ] ; if ( row && row . _details ) { row . _details . remove ( ) ; row . _detailsShow = undefined ; row . _details = undefined ; } } } ; var _ _details _display = function ( api , show ) { var ctx = api . context ; if ( ctx . length && api . length ) { var row = ctx [ 0 ] . aoData [ api [ 0 ] ] ; if ( row . _details ) { row . _detailsShow = show ; if ( show ) { row . _details . insertAfter ( row . nTr ) ; }
else { row . _details . detach ( ) ; }
_ _details _events ( ctx [ 0 ] ) ; } } } ; var _ _details _events = function ( settings )
{ var api = new _Api ( settings ) ; var namespace = '.dt.DT_details' ; var drawEvent = 'draw' + namespace ; var colvisEvent = 'column-visibility' + namespace ; var destroyEvent = 'destroy' + namespace ; var data = settings . aoData ; api . off ( drawEvent + ' ' + colvisEvent + ' ' + destroyEvent ) ; if ( _pluck ( data , '_details' ) . length > 0 ) { api . on ( drawEvent , function ( e , ctx ) { if ( settings !== ctx ) { return ; }
api . rows ( { page : 'current' } ) . eq ( 0 ) . each ( function ( idx ) { var row = data [ idx ] ; if ( row . _detailsShow ) { row . _details . insertAfter ( row . nTr ) ; } } ) ; } ) ; api . on ( colvisEvent , function ( e , ctx , idx , vis ) { if ( settings !== ctx ) { return ; }
var row , visible = _fnVisbleColumns ( ctx ) ; for ( var i = 0 , ien = data . length ; i < ien ; i ++ ) { row = data [ i ] ; if ( row . _details ) { row . _details . children ( 'td[colspan]' ) . attr ( 'colspan' , visible ) ; } } } ) ; api . on ( destroyEvent , function ( e , ctx ) { if ( settings !== ctx ) { return ; }
for ( var i = 0 , ien = data . length ; i < ien ; i ++ ) { if ( data [ i ] . _details ) { _ _details _remove ( api , i ) ; } } } ) ; } } ; var _emp = '' ; var _child _obj = _emp + 'row().child' ; var _child _mth = _child _obj + '()' ; _api _register ( _child _mth , function ( data , klass ) { var ctx = this . context ; if ( data === undefined ) { return ctx . length && this . length ? ctx [ 0 ] . aoData [ this [ 0 ] ] . _details : undefined ; }
else if ( data === true ) { this . child . show ( ) ; }
else if ( data === false ) { _ _details _remove ( this ) ; }
else if ( ctx . length && this . length ) { _ _details _add ( ctx [ 0 ] , ctx [ 0 ] . aoData [ this [ 0 ] ] , data , klass ) ; }
return this ; } ) ; _api _register ( [ _child _obj + '.show()' , _child _mth + '.show()' ] , function ( show ) { _ _details _display ( this , true ) ; return this ; } ) ; _api _register ( [ _child _obj + '.hide()' , _child _mth + '.hide()' ] , function ( ) { _ _details _display ( this , false ) ; return this ; } ) ; _api _register ( [ _child _obj + '.remove()' , _child _mth + '.remove()' ] , function ( ) { _ _details _remove ( this ) ; return this ; } ) ; _api _register ( _child _obj + '.isShown()' , function ( ) { var ctx = this . context ; if ( ctx . length && this . length ) { return ctx [ 0 ] . aoData [ this [ 0 ] ] . _detailsShow || false ; }
return false ; } ) ; var _ _re _column _selector = /^([^:]+):(name|visIdx|visible)$/ ; var _ _columnData = function ( settings , column , r1 , r2 , rows ) { var a = [ ] ; for ( var row = 0 , ien = rows . length ; row < ien ; row ++ ) { a . push ( _fnGetCellData ( settings , rows [ row ] , column ) ) ; }
return a ; } ; var _ _column _selector = function ( settings , selector , opts )
{ var
columns = settings . aoColumns , names = _pluck ( columns , 'sName' ) , nodes = _pluck ( columns , 'nTh' ) ; var run = function ( s ) { var selInt = _intVal ( s ) ; if ( s === '' ) { return _range ( columns . length ) ; }
if ( selInt !== null ) { return [ selInt >= 0 ? selInt : columns . length + selInt ] ; }
if ( typeof s === 'function' ) { var rows = _selector _row _indexes ( settings , opts ) ; return $ . map ( columns , function ( col , idx ) { return s ( idx , _ _columnData ( settings , idx , 0 , 0 , rows ) , nodes [ idx ] ) ? idx : null ; } ) ; }
var match = typeof s === 'string' ? s . match ( _ _re _column _selector ) : '' ; if ( match ) { switch ( match [ 2 ] ) { case 'visIdx' : case 'visible' : var idx = parseInt ( match [ 1 ] , 10 ) ; if ( idx < 0 ) { var visColumns = $ . map ( columns , function ( col , i ) { return col . bVisible ? i : null ; } ) ; return [ visColumns [ visColumns . length + idx ] ] ; }
return [ _fnVisibleToColumnIndex ( settings , idx ) ] ; case 'name' : return $ . map ( names , function ( name , i ) { return name === match [ 1 ] ? i : null ; } ) ; default : return [ ] ; } }
if ( s . nodeName && s . _DT _CellIndex ) { return [ s . _DT _CellIndex . column ] ; }
var jqResult = $ ( nodes ) . filter ( s ) . map ( function ( ) { return $ . inArray ( this , nodes ) ; } ) . toArray ( ) ; if ( jqResult . length || ! s . nodeName ) { return jqResult ; }
var host = $ ( s ) . closest ( '*[data-dt-column]' ) ; return host . length ? [ host . data ( 'dt-column' ) ] : [ ] ; } ; return _selector _run ( 'column' , selector , run , settings , opts ) ; } ; var _ _setColumnVis = function ( settings , column , vis ) { var
cols = settings . aoColumns , col = cols [ column ] , data = settings . aoData , row , cells , i , ien , tr ; if ( vis === undefined ) { return col . bVisible ; }
if ( col . bVisible === vis ) { return ; }
if ( vis ) { var insertBefore = $ . inArray ( true , _pluck ( cols , 'bVisible' ) , column + 1 ) ; for ( i = 0 , ien = data . length ; i < ien ; i ++ ) { tr = data [ i ] . nTr ; cells = data [ i ] . anCells ; if ( tr ) { tr . insertBefore ( cells [ column ] , cells [ insertBefore ] || null ) ; } } }
else { $ ( _pluck ( settings . aoData , 'anCells' , column ) ) . detach ( ) ; }
col . bVisible = vis ; _fnDrawHead ( settings , settings . aoHeader ) ; _fnDrawHead ( settings , settings . aoFooter ) ; if ( ! settings . aiDisplay . length ) { $ ( settings . nTBody ) . find ( 'td[colspan]' ) . attr ( 'colspan' , _fnVisbleColumns ( settings ) ) ; }
_fnSaveState ( settings ) ; } ; _api _register ( 'columns()' , function ( selector , opts ) { if ( selector === undefined ) { selector = '' ; }
else if ( $ . isPlainObject ( selector ) ) { opts = selector ; selector = '' ; }
opts = _selector _opts ( opts ) ; var inst = this . iterator ( 'table' , function ( settings ) { return _ _column _selector ( settings , selector , opts ) ; } , 1 ) ; inst . selector . cols = selector ; inst . selector . opts = opts ; return inst ; } ) ; _api _registerPlural ( 'columns().header()' , 'column().header()' , function ( selector , opts ) { return this . iterator ( 'column' , function ( settings , column ) { return settings . aoColumns [ column ] . nTh ; } , 1 ) ; } ) ; _api _registerPlural ( 'columns().footer()' , 'column().footer()' , function ( selector , opts ) { return this . iterator ( 'column' , function ( settings , column ) { return settings . aoColumns [ column ] . nTf ; } , 1 ) ; } ) ; _api _registerPlural ( 'columns().data()' , 'column().data()' , function ( ) { return this . iterator ( 'column-rows' , _ _columnData , 1 ) ; } ) ; _api _registerPlural ( 'columns().dataSrc()' , 'column().dataSrc()' , function ( ) { return this . iterator ( 'column' , function ( settings , column ) { return settings . aoColumns [ column ] . mData ; } , 1 ) ; } ) ; _api _registerPlural ( 'columns().cache()' , 'column().cache()' , function ( type ) { return this . iterator ( 'column-rows' , function ( settings , column , i , j , rows ) { return _pluck _order ( settings . aoData , rows , type === 'search' ? '_aFilterData' : '_aSortData' , column ) ; } , 1 ) ; } ) ; _api _registerPlural ( 'columns().nodes()' , 'column().nodes()' , function ( ) { return this . iterator ( 'column-rows' , function ( settings , column , i , j , rows ) { return _pluck _order ( settings . aoData , rows , 'anCells' , column ) ; } , 1 ) ; } ) ; _api _registerPlural ( 'columns().visible()' , 'column().visible()' , function ( vis , calc ) { var ret = this . iterator ( 'column' , function ( settings , column ) { if ( vis === undefined ) { return settings . aoColumns [ column ] . bVisible ; }
_ _setColumnVis ( settings , column , vis ) ; } ) ; if ( vis !== undefined ) { this . iterator ( 'column' , function ( settings , column ) { _fnCallbackFire ( settings , null , 'column-visibility' , [ settings , column , vis , calc ] ) ; } ) ; if ( calc === undefined || calc ) { this . columns . adjust ( ) ; } }
return ret ; } ) ; _api _registerPlural ( 'columns().indexes()' , 'column().index()' , function ( type ) { return this . iterator ( 'column' , function ( settings , column ) { return type === 'visible' ? _fnColumnIndexToVisible ( settings , column ) : column ; } , 1 ) ; } ) ; _api _register ( 'columns.adjust()' , function ( ) { return this . iterator ( 'table' , function ( settings ) { _fnAdjustColumnSizing ( settings ) ; } , 1 ) ; } ) ; _api _register ( 'column.index()' , function ( type , idx ) { if ( this . context . length !== 0 ) { var ctx = this . context [ 0 ] ; if ( type === 'fromVisible' || type === 'toData' ) { return _fnVisibleToColumnIndex ( ctx , idx ) ; }
else if ( type === 'fromData' || type === 'toVisible' ) { return _fnColumnIndexToVisible ( ctx , idx ) ; } } } ) ; _api _register ( 'column()' , function ( selector , opts ) { return _selector _first ( this . columns ( selector , opts ) ) ; } ) ; var _ _cell _selector = function ( settings , selector , opts )
{ var data = settings . aoData ; var rows = _selector _row _indexes ( settings , opts ) ; var cells = _removeEmpty ( _pluck _order ( data , rows , 'anCells' ) ) ; var allCells = $ ( [ ] . concat . apply ( [ ] , cells ) ) ; var row ; var columns = settings . aoColumns . length ; var a , i , ien , j , o , host ; var run = function ( s ) { var fnSelector = typeof s === 'function' ; if ( s === null || s === undefined || fnSelector ) { a = [ ] ; for ( i = 0 , ien = rows . length ; i < ien ; i ++ ) { row = rows [ i ] ; for ( j = 0 ; j < columns ; j ++ ) { o = { row : row , column : j } ; if ( fnSelector ) { host = data [ row ] ; if ( s ( o , _fnGetCellData ( settings , row , j ) , host . anCells ? host . anCells [ j ] : null ) ) { a . push ( o ) ; } }
else { a . push ( o ) ; } } }
return a ; }
if ( $ . isPlainObject ( s ) ) { return s . column !== undefined && s . row !== undefined && $ . inArray ( s . row , rows ) !== - 1 ? [ s ] : [ ] ; }
var jqResult = allCells . filter ( s ) . map ( function ( i , el ) { return { row : el . _DT _CellIndex . row , column : el . _DT _CellIndex . column } ; } ) . toArray ( ) ; if ( jqResult . length || ! s . nodeName ) { return jqResult ; }
host = $ ( s ) . closest ( '*[data-dt-row]' ) ; return host . length ? [ { row : host . data ( 'dt-row' ) , column : host . data ( 'dt-column' ) } ] : [ ] ; } ; return _selector _run ( 'cell' , selector , run , settings , opts ) ; } ; _api _register ( 'cells()' , function ( rowSelector , columnSelector , opts ) { if ( $ . isPlainObject ( rowSelector ) ) { if ( rowSelector . row === undefined ) { opts = rowSelector ; rowSelector = null ; }
else { opts = columnSelector ; columnSelector = null ; } }
if ( $ . isPlainObject ( columnSelector ) ) { opts = columnSelector ; columnSelector = null ; }
if ( columnSelector === null || columnSelector === undefined ) { return this . iterator ( 'table' , function ( settings ) { return _ _cell _selector ( settings , rowSelector , _selector _opts ( opts ) ) ; } ) ; }
var columns = this . columns ( columnSelector ) ; var rows = this . rows ( rowSelector ) ; var a , i , ien , j , jen ; this . iterator ( 'table' , function ( settings , idx ) { a = [ ] ; for ( i = 0 , ien = rows [ idx ] . length ; i < ien ; i ++ ) { for ( j = 0 , jen = columns [ idx ] . length ; j < jen ; j ++ ) { a . push ( { row : rows [ idx ] [ i ] , column : columns [ idx ] [ j ] } ) ; } } } , 1 ) ; var cells = this . cells ( a , opts ) ; $ . extend ( cells . selector , { cols : columnSelector , rows : rowSelector , opts : opts } ) ; return cells ; } ) ; _api _registerPlural ( 'cells().nodes()' , 'cell().node()' , function ( ) { return this . iterator ( 'cell' , function ( settings , row , column ) { var data = settings . aoData [ row ] ; return data && data . anCells ? data . anCells [ column ] : undefined ; } , 1 ) ; } ) ; _api _register ( 'cells().data()' , function ( ) { return this . iterator ( 'cell' , function ( settings , row , column ) { return _fnGetCellData ( settings , row , column ) ; } , 1 ) ; } ) ; _api _registerPlural ( 'cells().cache()' , 'cell().cache()' , function ( type ) { type = type === 'search' ? '_aFilterData' : '_aSortData' ; return this . iterator ( 'cell' , function ( settings , row , column ) { return settings . aoData [ row ] [ type ] [ column ] ; } , 1 ) ; } ) ; _api _registerPlural ( 'cells().render()' , 'cell().render()' , function ( type ) { return this . iterator ( 'cell' , function ( settings , row , column ) { return _fnGetCellData ( settings , row , column , type ) ; } , 1 ) ; } ) ; _api _registerPlural ( 'cells().indexes()' , 'cell().index()' , function ( ) { return this . iterator ( 'cell' , function ( settings , row , column ) { return { row : row , column : column , columnVisible : _fnColumnIndexToVisible ( settings , column ) } ; } , 1 ) ; } ) ; _api _registerPlural ( 'cells().invalidate()' , 'cell().invalidate()' , function ( src ) { return this . iterator ( 'cell' , function ( settings , row , column ) { _fnInvalidate ( settings , row , src , column ) ; } ) ; } ) ; _api _register ( 'cell()' , function ( rowSelector , columnSelector , opts ) { return _selector _first ( this . cells ( rowSelector , columnSelector , opts ) ) ; } ) ; _api _register ( 'cell().data()' , function ( data ) { var ctx = this . context ; var cell = this [ 0 ] ; if ( data === undefined ) { return ctx . length && cell . length ? _fnGetCellData ( ctx [ 0 ] , cell [ 0 ] . row , cell [ 0 ] . column ) : undefined ; }
_fnSetCellData ( ctx [ 0 ] , cell [ 0 ] . row , cell [ 0 ] . column , data ) ; _fnInvalidate ( ctx [ 0 ] , cell [ 0 ] . row , 'data' , cell [ 0 ] . column ) ; return this ; } ) ; _api _register ( 'order()' , function ( order , dir ) { var ctx = this . context ; if ( order === undefined ) { return ctx . length !== 0 ? ctx [ 0 ] . aaSorting : undefined ; }
if ( typeof order === 'number' ) { order = [ [ order , dir ] ] ; }
else if ( order . length && ! $ . isArray ( order [ 0 ] ) ) { order = Array . prototype . slice . call ( arguments ) ; }
return this . iterator ( 'table' , function ( settings ) { settings . aaSorting = order . slice ( ) ; } ) ; } ) ; _api _register ( 'order.listener()' , function ( node , column , callback ) { return this . iterator ( 'table' , function ( settings ) { _fnSortAttachListener ( settings , node , column , callback ) ; } ) ; } ) ; _api _register ( 'order.fixed()' , function ( set ) { if ( ! set ) { var ctx = this . context ; var fixed = ctx . length ? ctx [ 0 ] . aaSortingFixed : undefined ; return $ . isArray ( fixed ) ? { pre : fixed } : fixed ; }
return this . iterator ( 'table' , function ( settings ) { settings . aaSortingFixed = $ . extend ( true , { } , set ) ; } ) ; } ) ; _api _register ( [ 'columns().order()' , 'column().order()' ] , function ( dir ) { var that = this ; return this . iterator ( 'table' , function ( settings , i ) { var sort = [ ] ; $ . each ( that [ i ] , function ( j , col ) { sort . push ( [ col , dir ] ) ; } ) ; settings . aaSorting = sort ; } ) ; } ) ; _api _register ( 'search()' , function ( input , regex , smart , caseInsen ) { var ctx = this . context ; if ( input === undefined ) { return ctx . length !== 0 ? ctx [ 0 ] . oPreviousSearch . sSearch : undefined ; }
return this . iterator ( 'table' , function ( settings ) { if ( ! settings . oFeatures . bFilter ) { return ; }
_fnFilterComplete ( settings , $ . extend ( { } , settings . oPreviousSearch , { "sSearch" : input + "" , "bRegex" : regex === null ? false : regex , "bSmart" : smart === null ? true : smart , "bCaseInsensitive" : caseInsen === null ? true : caseInsen } ) , 1 ) ; } ) ; } ) ; _api _registerPlural ( 'columns().search()' , 'column().search()' , function ( input , regex , smart , caseInsen ) { return this . iterator ( 'column' , function ( settings , column ) { var preSearch = settings . aoPreSearchCols ; if ( input === undefined ) { return preSearch [ column ] . sSearch ; }
if ( ! settings . oFeatures . bFilter ) { return ; }
$ . extend ( preSearch [ column ] , { "sSearch" : input + "" , "bRegex" : regex === null ? false : regex , "bSmart" : smart === null ? true : smart , "bCaseInsensitive" : caseInsen === null ? true : caseInsen } ) ; _fnFilterComplete ( settings , settings . oPreviousSearch , 1 ) ; } ) ; } ) ; _api _register ( 'state()' , function ( ) { return this . context . length ? this . context [ 0 ] . oSavedState : null ; } ) ; _api _register ( 'state.clear()' , function ( ) { return this . iterator ( 'table' , function ( settings ) { settings . fnStateSaveCallback . call ( settings . oInstance , settings , { } ) ; } ) ; } ) ; _api _register ( 'state.loaded()' , function ( ) { return this . context . length ? this . context [ 0 ] . oLoadedState : null ; } ) ; _api _register ( 'state.save()' , function ( ) { return this . iterator ( 'table' , function ( settings ) { _fnSaveState ( settings ) ; } ) ; } ) ; DataTable . versionCheck = DataTable . fnVersionCheck = function ( version )
{ var aThis = DataTable . version . split ( '.' ) ; var aThat = version . split ( '.' ) ; var iThis , iThat ; for ( var i = 0 , iLen = aThat . length ; i < iLen ; i ++ ) { iThis = parseInt ( aThis [ i ] , 10 ) || 0 ; iThat = parseInt ( aThat [ i ] , 10 ) || 0 ; if ( iThis === iThat ) { continue ; }
return iThis > iThat ; }
return true ; } ; DataTable . isDataTable = DataTable . fnIsDataTable = function ( table )
{ var t = $ ( table ) . get ( 0 ) ; var is = false ; if ( table instanceof DataTable . Api ) { return true ; }
$ . each ( DataTable . settings , function ( i , o ) { var head = o . nScrollHead ? $ ( 'table' , o . nScrollHead ) [ 0 ] : null ; var foot = o . nScrollFoot ? $ ( 'table' , o . nScrollFoot ) [ 0 ] : null ; if ( o . nTable === t || head === t || foot === t ) { is = true ; } } ) ; return is ; } ; DataTable . tables = DataTable . fnTables = function ( visible )
{ var api = false ; if ( $ . isPlainObject ( visible ) ) { api = visible . api ; visible = visible . visible ; }
var a = $ . map ( DataTable . settings , function ( o ) { if ( ! visible || ( visible && $ ( o . nTable ) . is ( ':visible' ) ) ) { return o . nTable ; } } ) ; return api ? new _Api ( a ) : a ; } ; DataTable . camelToHungarian = _fnCamelToHungarian ; _api _register ( '$()' , function ( selector , opts ) { var
rows = this . rows ( opts ) . nodes ( ) , jqRows = $ ( rows ) ; return $ ( [ ] . concat ( jqRows . filter ( selector ) . toArray ( ) , jqRows . find ( selector ) . toArray ( ) ) ) ; } ) ; $ . each ( [ 'on' , 'one' , 'off' ] , function ( i , key ) { _api _register ( key + '()' , function ( ) { var args = Array . prototype . slice . call ( arguments ) ; args [ 0 ] = $ . map ( args [ 0 ] . split ( /\s/ ) , function ( e ) { return ! e . match ( /\.dt\b/ ) ? e + '.dt' : e ; } ) . join ( ' ' ) ; var inst = $ ( this . tables ( ) . nodes ( ) ) ; inst [ key ] . apply ( inst , args ) ; return this ; } ) ; } ) ; _api _register ( 'clear()' , function ( ) { return this . iterator ( 'table' , function ( settings ) { _fnClearTable ( settings ) ; } ) ; } ) ; _api _register ( 'settings()' , function ( ) { return new _Api ( this . context , this . context ) ; } ) ; _api _register ( 'init()' , function ( ) { var ctx = this . context ; return ctx . length ? ctx [ 0 ] . oInit : null ; } ) ; _api _register ( 'data()' , function ( ) { return this . iterator ( 'table' , function ( settings ) { return _pluck ( settings . aoData , '_aData' ) ; } ) . flatten ( ) ; } ) ; _api _register ( 'destroy()' , function ( remove ) { remove = remove || false ; return this . iterator ( 'table' , function ( settings ) { var orig = settings . nTableWrapper . parentNode ; var classes = settings . oClasses ; var table = settings . nTable ; var tbody = settings . nTBody ; var thead = settings . nTHead ; var tfoot = settings . nTFoot ; var jqTable = $ ( table ) ; var jqTbody = $ ( tbody ) ; var jqWrapper = $ ( settings . nTableWrapper ) ; var rows = $ . map ( settings . aoData , function ( r ) { return r . nTr ; } ) ; var i , ien ; settings . bDestroying = true ; _fnCallbackFire ( settings , "aoDestroyCallback" , "destroy" , [ settings ] ) ; if ( ! remove ) { new _Api ( settings ) . columns ( ) . visible ( true ) ; }
jqWrapper . off ( '.DT' ) . find ( ':not(tbody *)' ) . off ( '.DT' ) ; $ ( window ) . off ( '.DT-' + settings . sInstance ) ; if ( table != thead . parentNode ) { jqTable . children ( 'thead' ) . detach ( ) ; jqTable . append ( thead ) ; }
if ( tfoot && table != tfoot . parentNode ) { jqTable . children ( 'tfoot' ) . detach ( ) ; jqTable . append ( tfoot ) ; }
settings . aaSorting = [ ] ; settings . aaSortingFixed = [ ] ; _fnSortingClasses ( settings ) ; $ ( rows ) . removeClass ( settings . asStripeClasses . join ( ' ' ) ) ; $ ( 'th, td' , thead ) . removeClass ( classes . sSortable + ' ' +
classes . sSortableAsc + ' ' + classes . sSortableDesc + ' ' + classes . sSortableNone ) ; jqTbody . children ( ) . detach ( ) ; jqTbody . append ( rows ) ; var removedMethod = remove ? 'remove' : 'detach' ; jqTable [ removedMethod ] ( ) ; jqWrapper [ removedMethod ] ( ) ; if ( ! remove && orig ) { orig . insertBefore ( table , settings . nTableReinsertBefore ) ; jqTable . css ( 'width' , settings . sDestroyWidth ) . removeClass ( classes . sTable ) ; ien = settings . asDestroyStripes . length ; if ( ien ) { jqTbody . children ( ) . each ( function ( i ) { $ ( this ) . addClass ( settings . asDestroyStripes [ i % ien ] ) ; } ) ; } }
var idx = $ . inArray ( settings , DataTable . settings ) ; if ( idx !== - 1 ) { DataTable . settings . splice ( idx , 1 ) ; } } ) ; } ) ; $ . each ( [ 'column' , 'row' , 'cell' ] , function ( i , type ) { _api _register ( type + 's().every()' , function ( fn ) { var opts = this . selector . opts ; var api = this ; return this . iterator ( type , function ( settings , arg1 , arg2 , arg3 , arg4 ) { fn . call ( api [ type ] ( arg1 , type === 'cell' ? arg2 : opts , type === 'cell' ? opts : undefined ) , arg1 , arg2 , arg3 , arg4 ) ; } ) ; } ) ; } ) ; _api _register ( 'i18n()' , function ( token , def , plural ) { var ctx = this . context [ 0 ] ; var resolved = _fnGetObjectDataFn ( token ) ( ctx . oLanguage ) ; if ( resolved === undefined ) { resolved = def ; }
if ( plural !== undefined && $ . isPlainObject ( resolved ) ) { resolved = resolved [ plural ] !== undefined ? resolved [ plural ] : resolved . _ ; }
return resolved . replace ( '%d' , plural ) ; } ) ; DataTable . version = "1.10.19" ; DataTable . settings = [ ] ; DataTable . models = { } ; DataTable . models . oSearch = { "bCaseInsensitive" : true , "sSearch" : "" , "bRegex" : false , "bSmart" : true } ; DataTable . models . oRow = { "nTr" : null , "anCells" : null , "_aData" : [ ] , "_aSortData" : null , "_aFilterData" : null , "_sFilterRow" : null , "_sRowStripe" : "" , "src" : null , "idx" : - 1 } ; DataTable . models . oColumn = { "idx" : null , "aDataSort" : null , "asSorting" : null , "bSearchable" : null , "bSortable" : null , "bVisible" : null , "_sManualType" : null , "_bAttrSrc" : false , "fnCreatedCell" : null , "fnGetData" : null , "fnSetData" : null , "mData" : null , "mRender" : null , "nTh" : null , "nTf" : null , "sClass" : null , "sContentPadding" : null , "sDefaultContent" : null , "sName" : null , "sSortDataType" : 'std' , "sSortingClass" : null , "sSortingClassJUI" : null , "sTitle" : null , "sType" : null , "sWidth" : null , "sWidthOrig" : null } ; DataTable . defaults = { "aaData" : null , "aaSorting" : [ [ 0 , 'asc' ] ] , "aaSortingFixed" : [ ] , "ajax" : null , "aLengthMenu" : [ 10 , 25 , 50 , 100 ] , "aoColumns" : null , "aoColumnDefs" : null , "aoSearchCols" : [ ] , "asStripeClasses" : null , "bAutoWidth" : true , "bDeferRender" : false , "bDestroy" : false , "bFilter" : true , "bInfo" : true , "bLengthChange" : true , "bPaginate" : true , "bProcessing" : false , "bRetrieve" : false , "bScrollCollapse" : false , "bServerSide" : false , "bSort" : true , "bSortMulti" : true , "bSortCellsTop" : false , "bSortClasses" : true , "bStateSave" : false , "fnCreatedRow" : null , "fnDrawCallback" : null , "fnFooterCallback" : null , "fnFormatNumber" : function ( toFormat ) { return toFormat . toString ( ) . replace ( /\B(?=(\d{3})+(?!\d))/g , this . oLanguage . sThousands ) ; } , "fnHeaderCallback" : null , "fnInfoCallback" : null , "fnInitComplete" : null , "fnPreDrawCallback" : null , "fnRowCallback" : null , "fnServerData" : null , "fnServerParams" : null , "fnStateLoadCallback" : function ( settings ) { try { return JSON . parse ( ( settings . iStateDuration === - 1 ? sessionStorage : localStorage ) . getItem ( 'DataTables_' + settings . sInstance + '_' + location . pathname ) ) ; } catch ( e ) { } } , "fnStateLoadParams" : null , "fnStateLoaded" : null , "fnStateSaveCallback" : function ( settings , data ) { try { ( settings . iStateDuration === - 1 ? sessionStorage : localStorage ) . setItem ( 'DataTables_' + settings . sInstance + '_' + location . pathname , JSON . stringify ( data ) ) ; } catch ( e ) { } } , "fnStateSaveParams" : null , "iStateDuration" : 7200 , "iDeferLoading" : null , "iDisplayLength" : 10 , "iDisplayStart" : 0 , "iTabIndex" : 0 , "oClasses" : { } , "oLanguage" : { "oAria" : { "sSortAscending" : ": activate to sort column ascending" , "sSortDescending" : ": activate to sort column descending" } , "oPaginate" : { "sFirst" : "First" , "sLast" : "Last" , "sNext" : "Next" , "sPrevious" : "Previous" } , "sEmptyTable" : "No data available in table" , "sInfo" : "Showing _START_ to _END_ of _TOTAL_ entries" , "sInfoEmpty" : "Showing 0 to 0 of 0 entries" , "sInfoFiltered" : "(filtered from _MAX_ total entries)" , "sInfoPostFix" : "" , "sDecimal" : "" , "sThousands" : "," , "sLengthMenu" : "Show _MENU_ entries" , "sLoadingRecords" : "Loading..." , "sProcessing" : "Processing..." , "sSearch" : "Search:" , "sSearchPlaceholder" : "" , "sUrl" : "" , "sZeroRecords" : "No matching records found" } , "oSearch" : $ . extend ( { } , DataTable . models . oSearch ) , "sAjaxDataProp" : "data" , "sAjaxSource" : null , "sDom" : "lfrtip" , "searchDelay" : null , "sPaginationType" : "simple_numbers" , "sScrollX" : "" , "sScrollXInner" : "" , "sScrollY" : "" , "sServerMethod" : "GET" , "renderer" : null , "rowId" : "DT_RowId" } ; _fnHungarianMap ( DataTable . defaults ) ; DataTable . defaults . column = { "aDataSort" : null , "iDataSort" : - 1 , "asSorting" : [ 'asc' , 'desc' ] , "bSearchable" : true , "bSortable" : true , "bVisible" : true , "fnCreatedCell" : null , "mData" : null , "mRender" : null , "sCellType" : "td" , "sClass" : "" , "sContentPadding" : "" , "sDefaultContent" : null , "sName" : "" , "sSortDataType" : "std" , "sTitle" : null , "sType" : null , "sWidth" : null } ; _fnHungarianMap ( DataTable . defaults . column ) ; DataTable . models . oSettings = { "oFeatures" : { "bAutoWidth" : null , "bDeferRender" : null , "bFilter" : null , "bInfo" : null , "bLengthChange" : null , "bPaginate" : null , "bProcessing" : null , "bServerSide" : null , "bSort" : null , "bSortMulti" : null , "bSortClasses" : null , "bStateSave" : null } , "oScroll" : { "bCollapse" : null , "iBarWidth" : 0 , "sX" : null , "sXInner" : null , "sY" : null } , "oLanguage" : { "fnInfoCallback" : null } , "oBrowser" : { "bScrollOversize" : false , "bScrollbarLeft" : false , "bBounding" : false , "barWidth" : 0 } , "ajax" : null , "aanFeatures" : [ ] , "aoData" : [ ] , " aiDispla
{ return _fnDataSource ( this ) == 'ssp' ? this . _iRecordsTotal * 1 : this . aiDisplayMaster . length ; } , "fnRecordsDisplay" : function ( )
{ return _fnDataSource ( this ) == 'ssp' ? this . _iRecordsDisplay * 1 : this . aiDisplay . length ; } , "fnDisplayEnd" : function ( )
{ var
len = this . _iDisplayLength , start = this . _iDisplayStart , calc = start + len , records = this . aiDisplay . length , features = this . oFeatures , paginate = features . bPaginate ; if ( features . bServerSide ) { return paginate === false || len === - 1 ? start + records : Math . min ( start + len , this . _iRecordsDisplay ) ; }
else { return ! paginate || calc > records || len === - 1 ? records : calc ; } } , "oInstance" : null , "sInstance" : null , "iTabIndex" : 0 , "nScrollHead" : null , "nScrollFoot" : null , "aLastSort" : [ ] , "oPlugins" : { } , "rowIdFn" : null , "rowId" : null } ; DataTable . ext = _ext = { buttons : { } , classes : { } , builder : "-source-" , errMode : "alert" , feature : [ ] , search : [ ] , selector : { cell : [ ] , column : [ ] , row : [ ] } , internal : { } , legacy : { ajax : null } , pager : { } , renderer : { pageButton : { } , header : { } } , order : { } , type : { detect : [ ] , search : { } , order : { } } , _unique : 0 , fnVersionCheck : DataTable . fnVersionCheck , iApiIndex : 0 , oJUIClasses : { } , sVersion : DataTable . version } ; $ . extend ( _ext , { afnFiltering : _ext . search , aTypes : _ext . type . detect , ofnSearch : _ext . type . search , oSort : _ext . type . order , afnSortData : _ext . order , aoFeatures : _ext . feature , oApi : _ext . internal , oStdClasses : _ext . classes , oPagination : _ext . pager } ) ; $ . extend ( DataTable . ext . classes , { "sTable" : "dataTable" , "sNoFooter" : "no-footer" , "sPageButton" : "paginate_button" , "sPageButtonActive" : "current" , "sPageButtonDisabled" : "disabled" , "sStripeOdd" : "odd" , "sStripeEven" : "even" , "sRowEmpty" : "dataTables_empty" , "sWrapper" : "dataTables_wrapper" , "sFilter" : "dataTables_filter" , "sInfo" : "dataTables_info" , "sPaging" : "dataTables_paginate paging_" , "sLength" : "dataTables_length" , "sProcessing" : "dataTables_processing" , "sSortAsc" : "sorting_asc" , "sSortDesc" : "sorting_desc" , "sSortable" : "sorting" , "sSortableAsc" : "sorting_asc_disabled" , "sSortableDesc" : "sorting_desc_disabled" , "sSortableNone" : "sorting_disabled" , "sSortColumn" : "sorting_" , "sFilterInput" : "" , "sLengthSelect" : "" , "sScrollWrapper" : "dataTables_scroll" , "sScrollHead" : "dataTables_scrollHead" , "sScrollHeadInner" : "dataTables_scrollHeadInner" , "sScrollBody" : "dataTables_scrollBody" , "sScrollFoot" : "dataTables_scrollFoot" , "sScrollFootInner" : "dataTables_scrollFootInner" , "sHeaderTH" : "" , "sFooterTH" : "" , "sSortJUIAsc" : "" , "sSortJUIDesc" : "" , "sSortJUI" : "" , "sSortJUIAscAllowed" : "" , "sSortJUIDescAllowed" : "" , "sSortJUIWrapper" : "" , "sSortIcon" : "" , "sJUIHeader" : "" , "sJUIFooter" : "" } ) ; var extPagination = DataTable . ext . pager ; function _numbers ( page , pages ) { var
numbers = [ ] , buttons = extPagination . numbers _length , half = Math . floor ( buttons / 2 ) , i = 1 ; if ( pages <= buttons ) { numbers = _range ( 0 , pages ) ; }
else if ( page <= half ) { numbers = _range ( 0 , buttons - 2 ) ; numbers . push ( 'ellipsis' ) ; numbers . push ( pages - 1 ) ; }
else if ( page >= pages - 1 - half ) { numbers = _range ( pages - ( buttons - 2 ) , pages ) ; numbers . splice ( 0 , 0 , 'ellipsis' ) ; numbers . splice ( 0 , 0 , 0 ) ; }
else { numbers = _range ( page - half + 2 , page + half - 1 ) ; numbers . push ( 'ellipsis' ) ; numbers . push ( pages - 1 ) ; numbers . splice ( 0 , 0 , 'ellipsis' ) ; numbers . splice ( 0 , 0 , 0 ) ; }
numbers . DT _el = 'span' ; return numbers ; }
$ . extend ( extPagination , { simple : function ( page , pages ) { return [ 'previous' , 'next' ] ; } , full : function ( page , pages ) { return [ 'first' , 'previous' , 'next' , 'last' ] ; } , numbers : function ( page , pages ) { return [ _numbers ( page , pages ) ] ; } , simple _numbers : function ( page , pages ) { return [ 'previous' , _numbers ( page , pages ) , 'next' ] ; } , full _numbers : function ( page , pages ) { return [ 'first' , 'previous' , _numbers ( page , pages ) , 'next' , 'last' ] ; } , first _last _numbers : function ( page , pages ) { return [ 'first' , _numbers ( page , pages ) , 'last' ] ; } , _numbers : _numbers , numbers _length : 7 } ) ; $ . extend ( true , DataTable . ext . renderer , { pageButton : { _ : function ( settings , host , idx , buttons , page , pages ) { var classes = settings . oClasses ; var lang = settings . oLanguage . oPaginate ; var aria = settings . oLanguage . oAria . paginate || { } ; var btnDisplay , btnClass , counter = 0 ; var attach = function ( container , buttons ) { var i , ien , node , button ; var clickHandler = function ( e ) { _fnPageChange ( settings , e . data . action , true ) ; } ; for ( i = 0 , ien = buttons . length ; i < ien ; i ++ ) { button = buttons [ i ] ; if ( $ . isArray ( button ) ) { var inner = $ ( '<' + ( button . DT _el || 'div' ) + '/>' ) . appendTo ( container ) ; attach ( inner , button ) ; }
else { btnDisplay = null ; btnClass = '' ; switch ( button ) { case 'ellipsis' : container . append ( '<span class="ellipsis">…</span>' ) ; break ; case 'first' : btnDisplay = lang . sFirst ; btnClass = button + ( page > 0 ? '' : ' ' + classes . sPageButtonDisabled ) ; break ; case 'previous' : btnDisplay = lang . sPrevious ; btnClass = button + ( page > 0 ? '' : ' ' + classes . sPageButtonDisabled ) ; break ; case 'next' : btnDisplay = lang . sNext ; btnClass = button + ( page < pages - 1 ? '' : ' ' + classes . sPageButtonDisabled ) ; break ; case 'last' : btnDisplay = lang . sLast ; btnClass = button + ( page < pages - 1 ? '' : ' ' + classes . sPageButtonDisabled ) ; break ; default : btnDisplay = button + 1 ; btnClass = page === button ? classes . sPageButtonActive : '' ; break ; }
if ( btnDisplay !== null ) { node = $ ( '<a>' , { 'class' : classes . sPageButton + ' ' + btnClass , 'aria-controls' : settings . sTableId , 'aria-label' : aria [ button ] , 'data-dt-idx' : counter , 'tabindex' : settings . iTabIndex , 'id' : idx === 0 && typeof button === 'string' ? settings . sTableId + '_' + button : null } ) . html ( btnDisplay ) . appendTo ( container ) ; _fnBindAction ( node , { action : button } , clickHandler ) ; counter ++ ; } } } } ; var activeEl ; try { activeEl = $ ( host ) . find ( document . activeElement ) . data ( 'dt-idx' ) ; }
catch ( e ) { }
attach ( $ ( host ) . empty ( ) , buttons ) ; if ( activeEl !== undefined ) { $ ( host ) . find ( '[data-dt-idx=' + activeEl + ']' ) . focus ( ) ; } } } } ) ; $ . extend ( DataTable . ext . type . detect , [ function ( d , settings )
{ var decimal = settings . oLanguage . sDecimal ; return _isNumber ( d , decimal ) ? 'num' + decimal : null ; } , function ( d , settings )
{ if ( d && ! ( d instanceof Date ) && ! _re _date . test ( d ) ) { return null ; }
var parsed = Date . parse ( d ) ; return ( parsed !== null && ! isNaN ( parsed ) ) || _empty ( d ) ? 'date' : null ; } , function ( d , settings )
{ var decimal = settings . oLanguage . sDecimal ; return _isNumber ( d , decimal , true ) ? 'num-fmt' + decimal : null ; } , function ( d , settings )
{ var decimal = settings . oLanguage . sDecimal ; return _htmlNumeric ( d , decimal ) ? 'html-num' + decimal : null ; } , function ( d , settings )
{ var decimal = settings . oLanguage . sDecimal ; return _htmlNumeric ( d , decimal , true ) ? 'html-num-fmt' + decimal : null ; } , function ( d , settings )
{ return _empty ( d ) || ( typeof d === 'string' && d . indexOf ( '<' ) !== - 1 ) ? 'html' : null ; } ] ) ; $ . extend ( DataTable . ext . type . search , { html : function ( data ) { return _empty ( data ) ? data : typeof data === 'string' ? data . replace ( _re _new _lines , " " ) . replace ( _re _html , "" ) : '' ; } , string : function ( data ) { return _empty ( data ) ? data : typeof data === 'string' ? data . replace ( _re _new _lines , " " ) : data ; } } ) ; var _ _numericReplace = function ( d , decimalPlace , re1 , re2 ) { if ( d !== 0 && ( ! d || d === '-' ) ) { return - Infinity ; }
if ( decimalPlace ) { d = _numToDecimal ( d , decimalPlace ) ; }
if ( d . replace ) { if ( re1 ) { d = d . replace ( re1 , '' ) ; }
if ( re2 ) { d = d . replace ( re2 , '' ) ; } }
return d * 1 ; } ; function _addNumericSort ( decimalPlace ) { $ . each ( { "num" : function ( d ) { return _ _numericReplace ( d , decimalPlace ) ; } , "num-fmt" : function ( d ) { return _ _numericReplace ( d , decimalPlace , _re _formatted _numeric ) ; } , "html-num" : function ( d ) { return _ _numericReplace ( d , decimalPlace , _re _html ) ; } , "html-num-fmt" : function ( d ) { return _ _numericReplace ( d , decimalPlace , _re _html , _re _formatted _numeric ) ; } } , function ( key , fn ) { _ext . type . order [ key + decimalPlace + '-pre' ] = fn ; if ( key . match ( /^html\-/ ) ) { _ext . type . search [ key + decimalPlace ] = _ext . type . search . html ; } } ) ; }
$ . extend ( _ext . type . order , { "date-pre" : function ( d ) { var ts = Date . parse ( d ) ; return isNaN ( ts ) ? - Infinity : ts ; } , "html-pre" : function ( a ) { return _empty ( a ) ? '' : a . replace ? a . replace ( /<.*?>/g , "" ) . toLowerCase ( ) : a + '' ; } , "string-pre" : function ( a ) { return _empty ( a ) ? '' : typeof a === 'string' ? a . toLowerCase ( ) : ! a . toString ? '' : a . toString ( ) ; } , "string-asc" : function ( x , y ) { return ( ( x < y ) ? - 1 : ( ( x > y ) ? 1 : 0 ) ) ; } , "string-desc" : function ( x , y ) { return ( ( x < y ) ? 1 : ( ( x > y ) ? - 1 : 0 ) ) ; } } ) ; _addNumericSort ( '' ) ; $ . extend ( true , DataTable . ext . renderer , { header : { _ : function ( settings , cell , column , classes ) { $ ( settings . nTable ) . on ( 'order.dt.DT' , function ( e , ctx , sorting , columns ) { if ( settings !== ctx ) { return ; }
var colIdx = column . idx ; cell . removeClass ( column . sSortingClass + ' ' +
classes . sSortAsc + ' ' +
classes . sSortDesc ) . addClass ( columns [ colIdx ] == 'asc' ? classes . sSortAsc : columns [ colIdx ] == 'desc' ? classes . sSortDesc : column . sSortingClass ) ; } ) ; } , jqueryui : function ( settings , cell , column , classes ) { $ ( '<div/>' ) . addClass ( classes . sSortJUIWrapper ) . append ( cell . contents ( ) ) . append ( $ ( '<span/>' ) . addClass ( classes . sSortIcon + ' ' + column . sSortingClassJUI ) ) . appendTo ( cell ) ; $ ( settings . nTable ) . on ( 'order.dt.DT' , function ( e , ctx , sorting , columns ) { if ( settings !== ctx ) { return ; }
var colIdx = column . idx ; cell . removeClass ( classes . sSortAsc + " " + classes . sSortDesc ) . addClass ( columns [ colIdx ] == 'asc' ? classes . sSortAsc : columns [ colIdx ] == 'desc' ? classes . sSortDesc : column . sSortingClass ) ; cell . find ( 'span.' + classes . sSortIcon ) . removeClass ( classes . sSortJUIAsc + " " +
classes . sSortJUIDesc + " " +
classes . sSortJUI + " " +
classes . sSortJUIAscAllowed + " " +
classes . sSortJUIDescAllowed ) . addClass ( columns [ colIdx ] == 'asc' ? classes . sSortJUIAsc : columns [ colIdx ] == 'desc' ? classes . sSortJUIDesc : column . sSortingClassJUI ) ; } ) ; } } } ) ; var _ _htmlEscapeEntities = function ( d ) { return typeof d === 'string' ? d . replace ( /</g , '<' ) . replace ( />/g , '>' ) . replace ( /"/g , '"' ) : d ; } ; DataTable . render = { number : function ( thousands , decimal , precision , prefix , postfix ) { return { display : function ( d ) { if ( typeof d !== 'number' && typeof d !== 'string' ) { return d ; }
var negative = d < 0 ? '-' : '' ; var flo = parseFloat ( d ) ; if ( isNaN ( flo ) ) { return _ _htmlEscapeEntities ( d ) ; }
flo = flo . toFixed ( precision ) ; d = Math . abs ( flo ) ; var intPart = parseInt ( d , 10 ) ; var floatPart = precision ? decimal + ( d - intPart ) . toFixed ( precision ) . substring ( 2 ) : '' ; return negative + ( prefix || '' ) +
intPart . toString ( ) . replace ( /\B(?=(\d{3})+(?!\d))/g , thousands ) +
floatPart +
( postfix || '' ) ; } } ; } , text : function ( ) { return { display : _ _htmlEscapeEntities , filter : _ _htmlEscapeEntities } ; } } ; function _fnExternApiFunc ( fn )
{ return function ( ) { var args = [ _fnSettingsFromNode ( this [ DataTable . ext . iApiIndex ] ) ] . concat ( Array . prototype . slice . call ( arguments ) ) ; return DataTable . ext . internal [ fn ] . apply ( this , args ) ; } ; }
$ . extend ( DataTable . ext . internal , { _fnExternApiFunc : _fnExternApiFunc , _fnBuildAjax : _fnBuildAjax , _fnAjaxUpdate : _fnAjaxUpdate , _fnAjaxParameters : _fnAjaxParameters , _fnAjaxUpdateDraw : _fnAjaxUpdateDraw , _fnAjaxDataSrc : _fnAjaxDataSrc , _fnAddColumn : _fnAddColumn , _fnColumnOptions : _fnColumnOptions , _fnAdjustColumnSizing : _fnAdjustColumnSizing , _fnVisibleToColumnIndex : _fnVisibleToColumnIndex , _fnColumnIndexToVisible : _fnColumnIndexToVisible , _fnVisbleColumns : _fnVisbleColumns , _fnGetColumns : _fnGetColumns , _fnColumnTypes : _fnColumnTypes , _fnApplyColumnDefs : _fnApplyColumnDefs , _fnHungarianMap : _fnHungarianMap , _fnCamelToHungarian : _fnCamelToHungarian , _fnLanguageCompat : _fnLanguageCompat , _fnBrowserDetect : _fnBrowserDetect , _fnAddData : _fnAddData , _fnAddTr : _fnAddTr , _fnNodeToDataIndex : _fnNodeToDataIndex , _fnNodeToColumnIndex : _fnNodeToColumnIndex , _fnGetCellData : _fnGetCellData , _fnSetCellData : _fnSetCellData , _fnSplitObjNotation : _fnSplitObjNotation , _fnGetObjectDataFn : _fnGetObjectDataFn , _fnSetObjectDataFn : _fnSetObjectDataFn , _fnGetDataMaster : _fnGetDataMaster , _fnClearTable : _fnClearTable , _fnDeleteIndex : _fnDeleteIndex , _fnInvalidate : _fnInvalidate , _fnGetRowElements : _fnGetRowElements , _fnCreateTr : _fnCreateTr , _fnBuildHead : _fnBuildHead , _fnDrawHead : _fnDrawHead , _fnDraw : _fnDraw , _fnReDraw : _fnReDraw , _fnAddOptionsHtml : _fnAddOptionsHtml , _fnDetectHeader : _fnDetectHeader , _fnGetUniqueThs : _fnGetUniqueThs , _fnFeatureHtmlFilter : _fnFeatureHtmlFilter , _fnFilterComplete : _fnFilterComplete , _fnFilterCustom : _fnFilterCustom , _fnFilterColumn : _fnFilterColumn , _fnFilter : _fnFilter , _fnFilterCreateSearch : _fnFilterCreateSearch , _fnEscapeRegex : _fnEscapeRegex , _fnFilterData : _fnFilterData , _fnFeatureHtmlInfo : _fnFeatureHtmlInfo , _fnUpdateInfo : _fnUpdateInfo , _fnInfoMacros : _fnInfoMacros , _fnInitialise : _fnInitialise , _fnInitComplete : _fnInitComplete , _fnLengthChange : _fnLengthChange , _fnFeatureHtmlLength : _fnFeatureHtmlLength , _fnFeatureHtmlPaginate : _fnFeatureHtmlPaginate , _fnPageChange : _fnPageChange , _fnFeatureHtmlProcessing : _fnFeatureHtmlProcessing , _fnProcessingDisplay : _fnProcessingDisplay , _fnFeatureHtmlTable : _fnFeatureHtmlTable , _fnScrollDraw : _fnScrollDraw , _fnApplyToChildren : _fnApplyToChildren , _fnCalculateColumnWidths : _fnCalculateColumnWidths , _fnThrottle : _fnThrottle , _fnConvertToWidth : _fnConvertToWidth , _fnGetWidestNode : _fnGetWidestNode , _fnGetMaxLenString : _fnGetMaxLenString , _fnStringToCss : _fnStringToCss , _fnSortFlatten : _fnSortFlatten , _fnSort : _fnSort , _fnSortAria : _fnSortAria , _fnSortListener : _fnSortListener , _fnSortAttachListener : _fnSortAttachListener , _fnSortingClasses : _fnSortingClasses , _fnSortData : _fnSortData , _fnSaveState : _fnSaveState , _fnLoadState : _fnLoadState , _fnSettingsFromNode : _fnSettingsFromNode , _fnLog : _fnLog , _fnMap : _fnMap , _fnBindAction : _fnBindAction , _fnCallbackReg : _fnCallbackReg , _fnCallbackFire : _fnCallbackFire , _fnLengthOverflow : _fnLengthOverflow , _fnRenderer : _fnRenderer , _fnDataSource : _fnDataSource , _fnRowAttributes : _fnRowAttributes , _fnExtend : _fnExtend , _fnCalculateEnd : function ( ) { }
} ) ; $ . fn . dataTable = DataTable ; DataTable . $ = $ ; $ . fn . dataTableSettings = DataTable . settings ; $ . fn . dataTableExt = DataTable . ext ; $ . fn . DataTable = function ( opts ) { return $ ( this ) . dataTable ( opts ) . api ( ) ; } ; $ . each ( DataTable , function ( prop , val ) { $ . fn . DataTable [ prop ] = val ; } ) ; return $ . fn . dataTable ; } ) ) ; ; / * ! D a t a T a b l e s B o o t s t r a p 3 i n t e g r a t i o n
* © 2011 - 2015 SpryMedia Ltd - datatables . net / license
* /
( function ( factory ) { if ( typeof define === 'function' && define . amd ) { define ( [ 'jquery' , 'datatables.net' ] , function ( $ ) { return factory ( $ , window , document ) ; } ) ; }
else if ( typeof exports === 'object' ) { module . exports = function ( root , $ ) { if ( ! root ) { root = window ; }
if ( ! $ || ! $ . fn . dataTable ) { $ = require ( 'datatables.net' ) ( root , $ ) . $ ; }
return factory ( $ , root , root . document ) ; } ; }
else { factory ( jQuery , window , document ) ; } } ( function ( $ , window , document , undefined ) { 'use strict' ; var DataTable = $ . fn . dataTable ; $ . extend ( true , DataTable . defaults , { dom : "<'row'<'col-sm-6'l><'col-sm-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>" , renderer : 'bootstrap' } ) ; $ . extend ( DataTable . ext . classes , { sWrapper : "dataTables_wrapper form-inline dt-bootstrap" , sFilterInput : "form-control input-sm" , sLengthSelect : "form-control input-sm" , sProcessing : "dataTables_processing panel panel-default" } ) ; DataTable . ext . renderer . pageButton . bootstrap = function ( settings , host , idx , buttons , page , pages ) { var api = new DataTable . Api ( settings ) ; var classes = settings . oClasses ; var lang = settings . oLanguage . oPaginate ; var aria = settings . oLanguage . oAria . paginate || { } ; var btnDisplay , btnClass , counter = 0 ; var attach = function ( container , buttons ) { var i , ien , node , button ; var clickHandler = function ( e ) { e . preventDefault ( ) ; if ( ! $ ( e . currentTarget ) . hasClass ( 'disabled' ) && api . page ( ) != e . data . action ) { api . page ( e . data . action ) . draw ( 'page' ) ; } } ; for ( i = 0 , ien = buttons . length ; i < ien ; i ++ ) { button = buttons [ i ] ; if ( $ . isArray ( button ) ) { attach ( container , button ) ; }
else { btnDisplay = '' ; btnClass = '' ; switch ( button ) { case 'ellipsis' : btnDisplay = '…' ; btnClass = 'disabled' ; break ; case 'first' : btnDisplay = lang . sFirst ; btnClass = button + ( page > 0 ? '' : ' disabled' ) ; break ; case 'previous' : btnDisplay = lang . sPrevious ; btnClass = button + ( page > 0 ? '' : ' disabled' ) ; break ; case 'next' : btnDisplay = lang . sNext ; btnClass = button + ( page < pages - 1 ? '' : ' disabled' ) ; break ; case 'last' : btnDisplay = lang . sLast ; btnClass = button + ( page < pages - 1 ? '' : ' disabled' ) ; break ; default : btnDisplay = button + 1 ; btnClass = page === button ? 'active' : '' ; break ; }
if ( btnDisplay ) { node = $ ( '<li>' , { 'class' : classes . sPageButton + ' ' + btnClass , 'id' : idx === 0 && typeof button === 'string' ? settings . sTableId + '_' + button : null } ) . append ( $ ( '<a>' , { 'href' : '#' , 'aria-controls' : settings . sTableId , 'aria-label' : aria [ button ] , 'data-dt-idx' : counter , 'tabindex' : settings . iTabIndex } ) . html ( btnDisplay ) ) . appendTo ( container ) ; settings . oApi . _fnBindAction ( node , { action : button } , clickHandler ) ; counter ++ ; } } } } ; var activeEl ; try { activeEl = $ ( host ) . find ( document . activeElement ) . data ( 'dt-idx' ) ; }
catch ( e ) { }
attach ( $ ( host ) . empty ( ) . html ( '<ul class="pagination"/>' ) . children ( 'ul' ) , buttons ) ; if ( activeEl !== undefined ) { $ ( host ) . find ( '[data-dt-idx=' + activeEl + ']' ) . focus ( ) ; } } ; return DataTable ; } ) ) ; ; ( function ( document , Math , undefined ) { ( function ( factory ) { if ( typeof define === 'function' && define . amd ) { define ( [ 'jquery' ] , factory ) ; } else if ( jQuery && ! jQuery . fn . sparkline ) { factory ( jQuery ) ; } }
( function ( $ ) { 'use strict' ; var UNSET _OPTION = { } , getDefaults , createClass , SPFormat , clipval , quartile , normalizeValue , normalizeValues , remove , isNumber , all , sum , addCSS , ensureArray , formatNumber , RangeMap , MouseHandler , Tooltip , barHighlightMixin , line , bar , tristate , discrete , bullet , pie , box , defaultStyles , initStyles , VShape , VCanvas _base , VCanvas _canvas , VCanvas _vml , pending , shapeCount = 0 ; getDefaults = function ( ) { return { common : { type : 'line' , lineColor : '#00f' , fillColor : '#cdf' , defaultPixelsPerValue : 3 , width : 'auto' , height : 'auto' , composite : false , tagValuesAttribute : 'values' , tagOptionsPrefix : 'spark' , enableTagOptions : false , enableHighlight : true , highlightLighten : 1.4 , tooltipSkipNull : true , tooltipPrefix : '' , tooltipSuffix : '' , disableHiddenCheck : false , numberFormatter : false , numberDigitGroupCount : 3 , numberDigitGroupSep : ',' , numberDecimalMark : '.' , disableTooltips : false , disableInteraction : false } , line : { spotColor : '#f80' , highlightSpotColor : '#5f5' , highlightLineColor : '#f22' , spotRadius : 1.5 , minSpotColor : '#f80' , maxSpotColor : '#f80' , lineWidth : 1 , normalRangeMin : undefined , normalRangeMax : undefined , normalRangeColor : '#ccc' , drawNormalOnTop : false , chartRangeMin : undefined , chartRangeMax : undefined , chartRangeMinX : undefined , chartRangeMaxX : undefined , tooltipFormat : new SPFormat ( '<span style="color: {{color}}">●</span> {{prefix}}{{y}}{{suffix}}' ) } , bar : { barColor : '#3366cc' , negBarColor : '#f44' , stackedBarColor : [ '#3366cc' , '#dc3912' , '#ff9900' , '#109618' , '#66aa00' , '#dd4477' , '#0099c6' , '#990099' ] , zeroColor : undefined , nullColor : undefined , zeroAxis : true , barWidth : 4 , barSpacing : 1 , chartRangeMax : undefined , chartRangeMin : undefined , chartRangeClip : false , colorMap : undefined , tooltipFormat : new SPFormat ( '<span style="color: {{color}}">●</span> {{prefix}}{{value}}{{suffix}}' ) } , tristate : { barWidth : 4 , barSpacing : 1 , posBarColor : '#6f6' , negBarColor : '#f44' , zeroBarColor : '#999' , colorMap : { } , tooltipFormat : new SPFormat ( '<span style="color: {{color}}">●</span> {{value:map}}' ) , tooltipValueLookups : { map : { '-1' : 'Loss' , '0' : 'Draw' , '1' : 'Win' } } } , discrete : { lineHeight : 'auto' , thresholdColor : undefined , thresholdValue : 0 , chartRangeMax : undefined , chartRangeMin : undefined , chartRangeClip : false , tooltipFormat : new SPFormat ( '{{prefix}}{{value}}{{suffix}}' ) } , bullet : { targetColor : '#f33' , targetWidth : 3 , performanceColor : '#33f' , rangeColors : [ '#d3dafe' , '#a8b6ff' , '#7f94ff' ] , base : undefined , tooltipFormat : new SPFormat ( '{{fieldkey:fields}} - {{value}}' ) , tooltipValueLookups : { fields : { r : 'Range' , p : 'Performance' , t : 'Target' } } } , pie : { offset : 0 , sliceColors : [ '#3366cc' , '#dc3912' , '#ff9900' , '#109618' , '#66aa00' , '#dd4477' , '#0099c6' , '#990099' ] , borderWidth : 0 , borderColor : '#000' , tooltipFormat : new SPFormat ( '<span style="color: {{color}}">●</span> {{value}} ({{percent.1}}%)' ) } , box : { raw : false , boxLineColor : '#000' , boxFillColor : '#cdf' , whiskerColor : '#000' , outlierLineColor : '#333' , outlierFillColor : '#fff' , medianColor : '#f00' , showOutliers : true , outlierIQR : 1.5 , spotRadius : 1.5 , target : undefined , targetColor : '#4a2' , chartRangeMax : undefined , chartRangeMin : undefined , tooltipFormat : new SPFormat ( '{{field:fields}}: {{value}}' ) , tooltipFormatFieldlistKey : 'field' , tooltipValueLookups : { fields : { lq : 'Lower Quartile' , med : 'Median' , uq : 'Upper Quartile' , lo : 'Left Outlier' , ro : 'Right Outlier' , lw : 'Left Whisker' , rw : 'Right Whisker' } } } } ; } ; defaultStyles = '.jqstooltip { ' +
'position: absolute;' +
'left: 0px;' +
'top: 0px;' +
'visibility: hidden;' +
'background: rgb(0, 0, 0) transparent;' +
'background-color: rgba(0,0,0,0.6);' +
'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +
'-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' +
'color: white;' +
'font: 10px arial, san serif;' +
'text-align: left;' +
'white-space: nowrap;' +
'padding: 5px;' +
'border: 1px solid white;' +
'box-sizing: content-box;' +
'z-index: 10000;' +
'}' +
'.jqsfield { ' +
'color: white;' +
'font: 10px arial, san serif;' +
'text-align: left;' +
'}' ; createClass = function ( ) { var Class , args ; Class = function ( ) { this . init . apply ( this , arguments ) ; } ; if ( arguments . length > 1 ) { if ( arguments [ 0 ] ) { Class . prototype = $ . extend ( new arguments [ 0 ] ( ) , arguments [ arguments . length - 1 ] ) ; Class . _super = arguments [ 0 ] . prototype ; } else { Class . prototype = arguments [ arguments . length - 1 ] ; }
if ( arguments . length > 2 ) { args = Array . prototype . slice . call ( arguments , 1 , - 1 ) ; args . unshift ( Class . prototype ) ; $ . extend . apply ( $ , args ) ; } } else { Class . prototype = arguments [ 0 ] ; }
Class . prototype . cls = Class ; return Class ; } ; $ . SPFormatClass = SPFormat = createClass ( { fre : /\{\{([\w.]+?)(:(.+?))?\}\}/g , precre : /(\w+)\.(\d+)/ , init : function ( format , fclass ) { this . format = format ; this . fclass = fclass ; } , render : function ( fieldset , lookups , options ) { var self = this , fields = fieldset , match , token , lookupkey , fieldvalue , prec ; return this . format . replace ( this . fre , function ( ) { var lookup ; token = arguments [ 1 ] ; lookupkey = arguments [ 3 ] ; match = self . precre . exec ( token ) ; if ( match ) { prec = match [ 2 ] ; token = match [ 1 ] ; } else { prec = false ; }
fieldvalue = fields [ token ] ; if ( fieldvalue === undefined ) { return '' ; }
if ( lookupkey && lookups && lookups [ lookupkey ] ) { lookup = lookups [ lookupkey ] ; if ( lookup . get ) { return lookups [ lookupkey ] . get ( fieldvalue ) || fieldvalue ; } else { return lookups [ lookupkey ] [ fieldvalue ] || fieldvalue ; } }
if ( isNumber ( fieldvalue ) ) { if ( options . get ( 'numberFormatter' ) ) { fieldvalue = options . get ( 'numberFormatter' ) ( fieldvalue ) ; } else { fieldvalue = formatNumber ( fieldvalue , prec , options . get ( 'numberDigitGroupCount' ) , options . get ( 'numberDigitGroupSep' ) , options . get ( 'numberDecimalMark' ) ) ; } }
return fieldvalue ; } ) ; } } ) ; $ . spformat = function ( format , fclass ) { return new SPFormat ( format , fclass ) ; } ; clipval = function ( val , min , max ) { if ( val < min ) { return min ; }
if ( val > max ) { return max ; }
return val ; } ; quartile = function ( values , q ) { var vl ; if ( q === 2 ) { vl = Math . floor ( values . length / 2 ) ; return values . length % 2 ? values [ vl ] : ( values [ vl - 1 ] + values [ vl ] ) / 2 ; } else { if ( values . length % 2 ) { vl = ( values . length * q + q ) / 4 ; return vl % 1 ? ( values [ Math . floor ( vl ) ] + values [ Math . floor ( vl ) - 1 ] ) / 2 : values [ vl - 1 ] ; } else { vl = ( values . length * q + 2 ) / 4 ; return vl % 1 ? ( values [ Math . floor ( vl ) ] + values [ Math . floor ( vl ) - 1 ] ) / 2 : values [ vl - 1 ] ; } } } ; normalizeValue = function ( val ) { var nf ; switch ( val ) { case 'undefined' : val = undefined ; break ; case 'null' : val = null ; break ; case 'true' : val = true ; break ; case 'false' : val = false ; break ; default : nf = parseFloat ( val ) ; if ( val == nf ) { val = nf ; } }
return val ; } ; normalizeValues = function ( vals ) { var i , result = [ ] ; for ( i = vals . length ; i -- ; ) { result [ i ] = normalizeValue ( vals [ i ] ) ; }
return result ; } ; remove = function ( vals , filter ) { var i , vl , result = [ ] ; for ( i = 0 , vl = vals . length ; i < vl ; i ++ ) { if ( vals [ i ] !== filter ) { result . push ( vals [ i ] ) ; } }
return result ; } ; isNumber = function ( num ) { return ! isNaN ( parseFloat ( num ) ) && isFinite ( num ) ; } ; formatNumber = function ( num , prec , groupsize , groupsep , decsep ) { var p , i ; num = ( prec === false ? parseFloat ( num ) . toString ( ) : num . toFixed ( prec ) ) . split ( '' ) ; p = ( p = $ . inArray ( '.' , num ) ) < 0 ? num . length : p ; if ( p < num . length ) { num [ p ] = decsep ; }
for ( i = p - groupsize ; i > 0 ; i -= groupsize ) { num . splice ( i , 0 , groupsep ) ; }
return num . join ( '' ) ; } ; all = function ( val , arr , ignoreNull ) { var i ; for ( i = arr . length ; i -- ; ) { if ( ignoreNull && arr [ i ] === null ) continue ; if ( arr [ i ] !== val ) { return false ; } }
return true ; } ; sum = function ( vals ) { var total = 0 , i ; for ( i = vals . length ; i -- ; ) { total += typeof vals [ i ] === 'number' ? vals [ i ] : 0 ; }
return total ; } ; ensureArray = function ( val ) { return $ . isArray ( val ) ? val : [ val ] ; } ; addCSS = function ( css ) { var tag , iefail ; if ( document . createStyleSheet ) { try { document . createStyleSheet ( ) . cssText = css ; return ; } catch ( e ) { iefail = true ; } }
tag = document . createElement ( 'style' ) ; tag . type = 'text/css' ; document . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( tag ) ; if ( iefail ) { document . styleSheets [ document . styleSheets . length - 1 ] . cssText = css ; } else { tag [ ( typeof document . body . style . WebkitAppearance == 'string' ) ? 'innerText' : 'innerHTML' ] = css ; } } ; $ . fn . simpledraw = function ( width , height , useExisting , interact ) { var target , mhandler ; if ( useExisting && ( target = this . data ( '_jqs_vcanvas' ) ) ) { return target ; }
if ( $ . fn . sparkline . canvas === false ) { return false ; } else if ( $ . fn . sparkline . canvas === undefined ) { var el = document . createElement ( 'canvas' ) ; if ( ! ! ( el . getContext && el . getContext ( '2d' ) ) ) { $ . fn . sparkline . canvas = function ( width , height , target , interact ) { return new VCanvas _canvas ( width , height , target , interact ) ; } ; } else if ( document . namespaces && ! document . namespaces . v ) { document . namespaces . add ( 'v' , 'urn:schemas-microsoft-com:vml' , '#default#VML' ) ; $ . fn . sparkline . canvas = function ( width , height , target , interact ) { return new VCanvas _vml ( width , height , target ) ; } ; } else { $ . fn . sparkline . canvas = false ; return false ; } }
if ( width === undefined ) { width = $ ( this ) . innerWidth ( ) ; }
if ( height === undefined ) { height = $ ( this ) . innerHeight ( ) ; }
target = $ . fn . sparkline . canvas ( width , height , this , interact ) ; mhandler = $ ( this ) . data ( '_jqs_mhandler' ) ; if ( mhandler ) { mhandler . registerCanvas ( target ) ; }
return target ; } ; $ . fn . cleardraw = function ( ) { var target = this . data ( '_jqs_vcanvas' ) ; if ( target ) { target . reset ( ) ; } } ; $ . RangeMapClass = RangeMap = createClass ( { init : function ( map ) { var key , range , rangelist = [ ] ; for ( key in map ) { if ( map . hasOwnProperty ( key ) && typeof key === 'string' && key . indexOf ( ':' ) > - 1 ) { range = key . split ( ':' ) ; range [ 0 ] = range [ 0 ] . length === 0 ? - Infinity : parseFloat ( range [ 0 ] ) ; range [ 1 ] = range [ 1 ] . length === 0 ? Infinity : parseFloat ( range [ 1 ] ) ; range [ 2 ] = map [ key ] ; rangelist . push ( range ) ; } }
this . map = map ; this . rangelist = rangelist || false ; } , get : function ( value ) { var rangelist = this . rangelist , i , range , result ; if ( ( result = this . map [ value ] ) !== undefined ) { return result ; }
if ( rangelist ) { for ( i = rangelist . length ; i -- ; ) { range = rangelist [ i ] ; if ( range [ 0 ] <= value && range [ 1 ] >= value ) { return range [ 2 ] ; } } }
return undefined ; } } ) ; $ . range _map = function ( map ) { return new RangeMap ( map ) ; } ; MouseHandler = createClass ( { init : function ( el , options ) { var $el = $ ( el ) ; this . $el = $el ; this . options = options ; this . currentPageX = 0 ; this . currentPageY = 0 ; this . el = el ; this . splist = [ ] ; this . tooltip = null ; this . over = false ; this . displayTooltips = ! options . get ( 'disableTooltips' ) ; this . highlightEnabled = ! options . get ( 'disableHighlight' ) ; } , registerSparkline : function ( sp ) { this . splist . push ( sp ) ; if ( this . over ) { this . updateDisplay ( ) ; } } , registerCanvas : function ( canvas ) { var $canvas = $ ( canvas . canvas ) ; this . canvas = canvas ; this . $canvas = $canvas ; $canvas . mouseenter ( $ . proxy ( this . mouseenter , this ) ) ; $canvas . mouseleave ( $ . proxy ( this . mouseleave , this ) ) ; $canvas . click ( $ . proxy ( this . mouseclick , this ) ) ; } , reset : function ( removeTooltip ) { this . splist = [ ] ; if ( this . tooltip && removeTooltip ) { this . tooltip . remove ( ) ; this . tooltip = undefined ; } } , mouseclick : function ( e ) { var clickEvent = $ . Event ( 'sparklineClick' ) ; clickEvent . originalEvent = e ; clickEvent . sparklines = this . splist ; this . $el . trigger ( clickEvent ) ; } , mouseenter : function ( e ) { $ ( document . body ) . unbind ( 'mousemove.jqs' ) ; $ ( document . body ) . bind ( 'mousemove.jqs' , $ . proxy ( this . mousemove , this ) ) ; this . over = true ; this . currentPageX = e . pageX ; this . currentPageY = e . pageY ; this . currentEl = e . target ; if ( ! this . tooltip && this . displayTooltips ) { this . tooltip = new Tooltip ( this . options ) ; this . tooltip . updatePosition ( e . pageX , e . pageY ) ; }
this . updateDisplay ( ) ; } , mouseleave : function ( ) { $ ( document . body ) . unbind ( 'mousemove.jqs' ) ; var splist = this . splist , spcount = splist . length , needsRefresh = false , sp , i ; this . over = false ; this . currentEl = null ; if ( this . tooltip ) { this . tooltip . remove ( ) ; this . tooltip = null ; }
for ( i = 0 ; i < spcount ; i ++ ) { sp = splist [ i ] ; if ( sp . clearRegionHighlight ( ) ) { needsRefresh = true ; } }
if ( needsRefresh ) { this . canvas . render ( ) ; } } , mousemove : function ( e ) { this . currentPageX = e . pageX ; this . currentPageY = e . pageY ; this . currentEl = e . target ; if ( this . tooltip ) { this . tooltip . updatePosition ( e . pageX , e . pageY ) ; }
this . updateDisplay ( ) ; } , updateDisplay : function ( ) { var splist = this . splist , spcount = splist . length , needsRefresh = false , offset = this . $canvas . offset ( ) , localX = this . currentPageX - offset . left , localY = this . currentPageY - offset . top , tooltiphtml , sp , i , result , changeEvent ; if ( ! this . over ) { return ; }
for ( i = 0 ; i < spcount ; i ++ ) { sp = splist [ i ] ; result = sp . setRegionHighlight ( this . currentEl , localX , localY ) ; if ( result ) { needsRefresh = true ; } }
if ( needsRefresh ) { changeEvent = $ . Event ( 'sparklineRegionChange' ) ; changeEvent . sparklines = this . splist ; this . $el . trigger ( changeEvent ) ; if ( this . tooltip ) { tooltiphtml = '' ; for ( i = 0 ; i < spcount ; i ++ ) { sp = splist [ i ] ; tooltiphtml += sp . getCurrentRegionTooltip ( ) ; }
this . tooltip . setContent ( tooltiphtml ) ; }
if ( ! this . disableHighlight ) { this . canvas . render ( ) ; } }
if ( result === null ) { this . mouseleave ( ) ; } } } ) ; Tooltip = createClass ( { sizeStyle : 'position: static !important;' +
'display: block !important;' +
'visibility: hidden !important;' +
'float: left !important;' , init : function ( options ) { var tooltipClassname = options . get ( 'tooltipClassname' , 'jqstooltip' ) , sizetipStyle = this . sizeStyle , offset ; this . container = options . get ( 'tooltipContainer' ) || document . body ; this . tooltipOffsetX = options . get ( 'tooltipOffsetX' , 10 ) ; this . tooltipOffsetY = options . get ( 'tooltipOffsetY' , 12 ) ; $ ( '#jqssizetip' ) . remove ( ) ; $ ( '#jqstooltip' ) . remove ( ) ; this . sizetip = $ ( '<div/>' , { id : 'jqssizetip' , style : sizetipStyle , 'class' : tooltipClassname } ) ; this . tooltip = $ ( '<div/>' , { id : 'jqstooltip' , 'class' : tooltipClassname } ) . appendTo ( this . container ) ; offset = this . tooltip . offset ( ) ; this . offsetLeft = offset . left ; this . offsetTop = offset . top ; this . hidden = true ; $ ( window ) . unbind ( 'resize.jqs scroll.jqs' ) ; $ ( window ) . bind ( 'resize.jqs scroll.jqs' , $ . proxy ( this . updateWindowDims , this ) ) ; this . updateWindowDims ( ) ; } , updateWindowDims : function ( ) { this . scrollTop = $ ( window ) . scrollTop ( ) ; this . scrollLeft = $ ( window ) . scrollLeft ( ) ; this . scrollRight = this . scrollLeft + $ ( window ) . width ( ) ; this . updatePosition ( ) ; } , getSize : function ( content ) { this . sizetip . html ( content ) . appendTo ( this . container ) ; this . width = this . sizetip . width ( ) + 1 ; this . height = this . sizetip . height ( ) ; this . sizetip . remove ( ) ; } , setContent : function ( content ) { if ( ! content ) { this . tooltip . css ( 'visibility' , 'hidden' ) ; this . hidden = true ; return ; }
this . getSize ( content ) ; this . tooltip . html ( content ) . css ( { 'width' : this . width , 'height' : this . height , 'visibility' : 'visible' } ) ; if ( this . hidden ) { this . hidden = false ; this . updatePosition ( ) ; } } , updatePosition : function ( x , y ) { if ( x === undefined ) { if ( this . mousex === undefined ) { return ; }
x = this . mousex - this . offsetLeft ; y = this . mousey - this . offsetTop ; } else { this . mousex = x = x - this . offsetLeft ; this . mousey = y = y - this . offsetTop ; }
if ( ! this . height || ! this . width || this . hidden ) { return ; }
y -= this . height + this . tooltipOffsetY ; x += this . tooltipOffsetX ; if ( y < this . scrollTop ) { y = this . scrollTop ; }
if ( x < this . scrollLeft ) { x = this . scrollLeft ; } else if ( x + this . width > this . scrollRight ) { x = this . scrollRight - this . width ; }
this . tooltip . css ( { 'left' : x , 'top' : y } ) ; } , remove : function ( ) { this . tooltip . remove ( ) ; this . sizetip . remove ( ) ; this . sizetip = this . tooltip = undefined ; $ ( window ) . unbind ( 'resize.jqs scroll.jqs' ) ; } } ) ; initStyles = function ( ) { addCSS ( defaultStyles ) ; } ; $ ( initStyles ) ; pending = [ ] ; $ . fn . sparkline = function ( userValues , userOptions ) { return this . each ( function ( ) { var options = new $ . fn . sparkline . options ( this , userOptions ) , $this = $ ( this ) , render , i ; render = function ( ) { var values , width , height , tmp , mhandler , sp , vals ; if ( userValues === 'html' || userValues === undefined ) { vals = this . getAttribute ( options . get ( 'tagValuesAttribute' ) ) ; if ( vals === undefined || vals === null ) { vals = $this . html ( ) ; }
values = vals . replace ( /(^\s*<!--)|(-->\s*$)|\s+/g , '' ) . split ( ',' ) ; } else { values = userValues ; }
width = options . get ( 'width' ) === 'auto' ? values . length * options . get ( 'defaultPixelsPerValue' ) : options . get ( 'width' ) ; if ( options . get ( 'height' ) === 'auto' ) { if ( ! options . get ( 'composite' ) || ! $ . data ( this , '_jqs_vcanvas' ) ) { tmp = document . createElement ( 'span' ) ; tmp . innerHTML = 'a' ; $this . html ( tmp ) ; height = $ ( tmp ) . innerHeight ( ) || $ ( tmp ) . height ( ) ; $ ( tmp ) . remove ( ) ; tmp = null ; } } else { height = options . get ( 'height' ) ; }
if ( ! options . get ( 'disableInteraction' ) ) { mhandler = $ . data ( this , '_jqs_mhandler' ) ; if ( ! mhandler ) { mhandler = new MouseHandler ( this , options ) ; $ . data ( this , '_jqs_mhandler' , mhandler ) ; } else if ( ! options . get ( 'composite' ) ) { mhandler . reset ( ) ; } } else { mhandler = false ; }
if ( options . get ( 'composite' ) && ! $ . data ( this , '_jqs_vcanvas' ) ) { if ( ! $ . data ( this , '_jqs_errnotify' ) ) { alert ( 'Attempted to attach a composite sparkline to an element with no existing sparkline' ) ; $ . data ( this , '_jqs_errnotify' , true ) ; }
return ; }
sp = new $ . fn . sparkline [ options . get ( 'type' ) ] ( this , values , options , width , height ) ; sp . render ( ) ; if ( mhandler ) { mhandler . registerSparkline ( sp ) ; } } ; if ( ( $ ( this ) . html ( ) && ! options . get ( 'disableHiddenCheck' ) && $ ( this ) . is ( ':hidden' ) ) || ! $ ( this ) . parents ( 'body' ) . length ) { if ( ! options . get ( 'composite' ) && $ . data ( this , '_jqs_pending' ) ) { for ( i = pending . length ; i ; i -- ) { if ( pending [ i - 1 ] [ 0 ] == this ) { pending . splice ( i - 1 , 1 ) ; } } }
pending . push ( [ this , render ] ) ; $ . data ( this , '_jqs_pending' , true ) ; } else { render . call ( this ) ; } } ) ; } ; $ . fn . sparkline . defaults = getDefaults ( ) ; $ . sparkline _display _visible = function ( ) { var el , i , pl ; var done = [ ] ; for ( i = 0 , pl = pending . length ; i < pl ; i ++ ) { el = pending [ i ] [ 0 ] ; if ( $ ( el ) . is ( ':visible' ) && ! $ ( el ) . parents ( ) . is ( ':hidden' ) ) { pending [ i ] [ 1 ] . call ( el ) ; $ . data ( pending [ i ] [ 0 ] , '_jqs_pending' , false ) ; done . push ( i ) ; } else if ( ! $ ( el ) . closest ( 'html' ) . length && ! $ . data ( el , '_jqs_pending' ) ) { $ . data ( pending [ i ] [ 0 ] , '_jqs_pending' , false ) ; done . push ( i ) ; } }
for ( i = done . length ; i ; i -- ) { pending . splice ( done [ i - 1 ] , 1 ) ; } } ; $ . fn . sparkline . options = createClass ( { init : function ( tag , userOptions ) { var extendedOptions , defaults , base , tagOptionType ; this . userOptions = userOptions = userOptions || { } ; this . tag = tag ; this . tagValCache = { } ; defaults = $ . fn . sparkline . defaults ; base = defaults . common ; this . tagOptionsPrefix = userOptions . enableTagOptions && ( userOptions . tagOptionsPrefix || base . tagOptionsPrefix ) ; tagOptionType = this . getTagSetting ( 'type' ) ; if ( tagOptionType === UNSET _OPTION ) { extendedOptions = defaults [ userOptions . type || base . type ] ; } else { extendedOptions = defaults [ tagOptionType ] ; }
this . mergedOptions = $ . extend ( { } , base , extendedOptions , userOptions ) ; } , getTagSetting : function ( key ) { var prefix = this . tagOptionsPrefix , val , i , pairs , keyval ; if ( prefix === false || prefix === undefined ) { return UNSET _OPTION ; }
if ( this . tagValCache . hasOwnProperty ( key ) ) { val = this . tagValCache . key ; } else { val = this . tag . getAttribute ( prefix + key ) ; if ( val === undefined || val === null ) { val = UNSET _OPTION ; } else if ( val . substr ( 0 , 1 ) === '[' ) { val = val . substr ( 1 , val . length - 2 ) . split ( ',' ) ; for ( i = val . length ; i -- ; ) { val [ i ] = normalizeValue ( val [ i ] . replace ( /(^\s*)|(\s*$)/g , '' ) ) ; } } else if ( val . substr ( 0 , 1 ) === '{' ) { pairs = val . substr ( 1 , val . length - 2 ) . split ( ',' ) ; val = { } ; for ( i = pairs . length ; i -- ; ) { keyval = pairs [ i ] . split ( ':' , 2 ) ; val [ keyval [ 0 ] . replace ( /(^\s*)|(\s*$)/g , '' ) ] = normalizeValue ( keyval [ 1 ] . replace ( /(^\s*)|(\s*$)/g , '' ) ) ; } } else { val = normalizeValue ( val ) ; }
this . tagValCache . key = val ; }
return val ; } , get : function ( key , defaultval ) { var tagOption = this . getTagSetting ( key ) , result ; if ( tagOption !== UNSET _OPTION ) { return tagOption ; }
return ( result = this . mergedOptions [ key ] ) === undefined ? defaultval : result ; } } ) ; $ . fn . sparkline . _base = createClass ( { disabled : false , init : function ( el , values , options , width , height ) { this . el = el ; this . $el = $ ( el ) ; this . values = values ; this . options = options ; this . width = width ; this . height = height ; this . currentRegion = undefined ; } , initTarget : function ( ) { var interactive = ! this . options . get ( 'disableInteraction' ) ; if ( ! ( this . target = this . $el . simpledraw ( this . width , this . height , this . options . get ( 'composite' ) , interactive ) ) ) { this . disabled = true ; } else { this . canvasWidth = this . target . pixelWidth ; this . canvasHeight = this . target . pixelHeight ; } } , render : function ( ) { if ( this . disabled ) { this . el . innerHTML = '' ; return false ; }
return true ; } , getRegion : function ( x , y ) { } , setRegionHighlight : function ( el , x , y ) { var currentRegion = this . currentRegion , highlightEnabled = ! this . options . get ( 'disableHighlight' ) , newRegion ; if ( x > this . canvasWidth || y > this . canvasHeight || x < 0 || y < 0 ) { return null ; }
newRegion = this . getRegion ( el , x , y ) ; if ( currentRegion !== newRegion ) { if ( currentRegion !== undefined && highlightEnabled ) { this . removeHighlight ( ) ; }
this . currentRegion = newRegion ; if ( newRegion !== undefined && highlightEnabled ) { this . renderHighlight ( ) ; }
return true ; }
return false ; } , clearRegionHighlight : function ( ) { if ( this . currentRegion !== undefined ) { this . removeHighlight ( ) ; this . currentRegion = undefined ; return true ; }
return false ; } , renderHighlight : function ( ) { this . changeHighlight ( true ) ; } , removeHighlight : function ( ) { this . changeHighlight ( false ) ; } , changeHighlight : function ( highlight ) { } , getCurrentRegionTooltip : function ( ) { var options = this . options , header = '' , entries = [ ] , fields , formats , formatlen , fclass , text , i , showFields , showFieldsKey , newFields , fv , formatter , format , fieldlen , j ; if ( this . currentRegion === undefined ) { return '' ; }
fields = this . getCurrentRegionFields ( ) ; formatter = options . get ( 'tooltipFormatter' ) ; if ( formatter ) { return formatter ( this , options , fields ) ; }
if ( options . get ( 'tooltipChartTitle' ) ) { header += '<div class="jqs jqstitle">' + options . get ( 'tooltipChartTitle' ) + '</div>\n' ; }
formats = this . options . get ( 'tooltipFormat' ) ; if ( ! formats ) { return '' ; }
if ( ! $ . isArray ( formats ) ) { formats = [ formats ] ; }
if ( ! $ . isArray ( fields ) ) { fields = [ fields ] ; }
showFields = this . options . get ( 'tooltipFormatFieldlist' ) ; showFieldsKey = this . options . get ( 'tooltipFormatFieldlistKey' ) ; if ( showFields && showFieldsKey ) { newFields = [ ] ; for ( i = fields . length ; i -- ; ) { fv = fields [ i ] [ showFieldsKey ] ; if ( ( j = $ . inArray ( fv , showFields ) ) != - 1 ) { newFields [ j ] = fields [ i ] ; } }
fields = newFields ; }
formatlen = formats . length ; fieldlen = fields . length ; for ( i = 0 ; i < formatlen ; i ++ ) { format = formats [ i ] ; if ( typeof format === 'string' ) { format = new SPFormat ( format ) ; }
fclass = format . fclass || 'jqsfield' ; for ( j = 0 ; j < fieldlen ; j ++ ) { if ( ! fields [ j ] . isNull || ! options . get ( 'tooltipSkipNull' ) ) { $ . extend ( fields [ j ] , { prefix : options . get ( 'tooltipPrefix' ) , suffix : options . get ( 'tooltipSuffix' ) } ) ; text = format . render ( fields [ j ] , options . get ( 'tooltipValueLookups' ) , options ) ; entries . push ( '<div class="' + fclass + '">' + text + '</div>' ) ; } } }
if ( entries . length ) { return header + entries . join ( '\n' ) ; }
return '' ; } , getCurrentRegionFields : function ( ) { } , calcHighlightColor : function ( color , options ) { var highlightColor = options . get ( 'highlightColor' ) , lighten = options . get ( 'highlightLighten' ) , parse , mult , rgbnew , i ; if ( highlightColor ) { return highlightColor ; }
if ( lighten ) { parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i . exec ( color ) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i . exec ( color ) ; if ( parse ) { rgbnew = [ ] ; mult = color . length === 4 ? 16 : 1 ; for ( i = 0 ; i < 3 ; i ++ ) { rgbnew [ i ] = clipval ( Math . round ( parseInt ( parse [ i + 1 ] , 16 ) * mult * lighten ) , 0 , 255 ) ; }
return 'rgb(' + rgbnew . join ( ',' ) + ')' ; } }
return color ; } } ) ; barHighlightMixin = { changeHighlight : function ( highlight ) { var currentRegion = this . currentRegion , target = this . target , shapeids = this . regionShapes [ currentRegion ] , newShapes ; if ( shapeids ) { newShapes = this . renderRegion ( currentRegion , highlight ) ; if ( $ . isArray ( newShapes ) || $ . isArray ( shapeids ) ) { target . replaceWithShapes ( shapeids , newShapes ) ; this . regionShapes [ currentRegion ] = $ . map ( newShapes , function ( newShape ) { return newShape . id ; } ) ; } else { target . replaceWithShape ( shapeids , newShapes ) ; this . regionShapes [ currentRegion ] = newShapes . id ; } } } , render : function ( ) { var values = this . values , target = this . target , regionShapes = this . regionShapes , shapes , ids , i , j ; if ( ! this . cls . _super . render . call ( this ) ) { return ; }
for ( i = values . length ; i -- ; ) { shapes = this . renderRegion ( i ) ; if ( shapes ) { if ( $ . isArray ( shapes ) ) { ids = [ ] ; for ( j = shapes . length ; j -- ; ) { shapes [ j ] . append ( ) ; ids . push ( shapes [ j ] . id ) ; }
regionShapes [ i ] = ids ; } else { shapes . append ( ) ; regionShapes [ i ] = shapes . id ; } } else { regionShapes [ i ] = null ; } }
target . render ( ) ; } } ; $ . fn . sparkline . line = line = createClass ( $ . fn . sparkline . _base , { type : 'line' , init : function ( el , values , options , width , height ) { line . _super . init . call ( this , el , values , options , width , height ) ; this . vertices = [ ] ; this . regionMap = [ ] ; this . xvalues = [ ] ; this . yvalues = [ ] ; this . yminmax = [ ] ; this . hightlightSpotId = null ; this . lastShapeId = null ; this . initTarget ( ) ; } , getRegion : function ( el , x , y ) { var i , regionMap = this . regionMap ; for ( i = regionMap . length ; i -- ; ) { if ( regionMap [ i ] !== null && x >= regionMap [ i ] [ 0 ] && x <= regionMap [ i ] [ 1 ] ) { return regionMap [ i ] [ 2 ] ; } }
return undefined ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion ; return { isNull : this . yvalues [ currentRegion ] === null , x : this . xvalues [ currentRegion ] , y : this . yvalues [ currentRegion ] , color : this . options . get ( 'lineColor' ) , fillColor : this . options . get ( 'fillColor' ) , offset : currentRegion } ; } , renderHighlight : function ( ) { var currentRegion = this . currentRegion , target = this . target , vertex = this . vertices [ currentRegion ] , options = this . options , spotRadius = options . get ( 'spotRadius' ) , highlightSpotColor = options . get ( 'highlightSpotColor' ) , highlightLineColor = options . get ( 'highlightLineColor' ) , highlightSpot , highlightLine ; if ( ! vertex ) { return ; }
if ( spotRadius && highlightSpotColor ) { highlightSpot = target . drawCircle ( vertex [ 0 ] , vertex [ 1 ] , spotRadius , undefined , highlightSpotColor ) ; this . highlightSpotId = highlightSpot . id ; target . insertAfterShape ( this . lastShapeId , highlightSpot ) ; }
if ( highlightLineColor ) { highlightLine = target . drawLine ( vertex [ 0 ] , this . canvasTop , vertex [ 0 ] , this . canvasTop + this . canvasHeight , highlightLineColor ) ; this . highlightLineId = highlightLine . id ; target . insertAfterShape ( this . lastShapeId , highlightLine ) ; } } , removeHighlight : function ( ) { var target = this . target ; if ( this . highlightSpotId ) { target . removeShapeId ( this . highlightSpotId ) ; this . highlightSpotId = null ; }
if ( this . highlightLineId ) { target . removeShapeId ( this . highlightLineId ) ; this . highlightLineId = null ; } } , scanValues : function ( ) { var values = this . values , valcount = values . length , xvalues = this . xvalues , yvalues = this . yvalues , yminmax = this . yminmax , i , val , isStr , isArray , sp ; for ( i = 0 ; i < valcount ; i ++ ) { val = values [ i ] ; isStr = typeof ( values [ i ] ) === 'string' ; isArray = typeof ( values [ i ] ) === 'object' && values [ i ] instanceof Array ; sp = isStr && values [ i ] . split ( ':' ) ; if ( isStr && sp . length === 2 ) { xvalues . push ( Number ( sp [ 0 ] ) ) ; yvalues . push ( Number ( sp [ 1 ] ) ) ; yminmax . push ( Number ( sp [ 1 ] ) ) ; } else if ( isArray ) { xvalues . push ( val [ 0 ] ) ; yvalues . push ( val [ 1 ] ) ; yminmax . push ( val [ 1 ] ) ; } else { xvalues . push ( i ) ; if ( values [ i ] === null || values [ i ] === 'null' ) { yvalues . push ( null ) ; } else { yvalues . push ( Number ( val ) ) ; yminmax . push ( Number ( val ) ) ; } } }
if ( this . options . get ( 'xvalues' ) ) { xvalues = this . options . get ( 'xvalues' ) ; }
this . maxy = this . maxyorg = Math . max . apply ( Math , yminmax ) ; this . miny = this . minyorg = Math . min . apply ( Math , yminmax ) ; this . maxx = Math . max . apply ( Math , xvalues ) ; this . minx = Math . min . apply ( Math , xvalues ) ; this . xvalues = xvalues ; this . yvalues = yvalues ; this . yminmax = yminmax ; } , processRangeOptions : function ( ) { var options = this . options , normalRangeMin = options . get ( 'normalRangeMin' ) , normalRangeMax = options . get ( 'normalRangeMax' ) ; if ( normalRangeMin !== undefined ) { if ( normalRangeMin < this . miny ) { this . miny = normalRangeMin ; }
if ( normalRangeMax > this . maxy ) { this . maxy = normalRangeMax ; } }
if ( options . get ( 'chartRangeMin' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMin' ) < this . miny ) ) { this . miny = options . get ( 'chartRangeMin' ) ; }
if ( options . get ( 'chartRangeMax' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMax' ) > this . maxy ) ) { this . maxy = options . get ( 'chartRangeMax' ) ; }
if ( options . get ( 'chartRangeMinX' ) !== undefined && ( options . get ( 'chartRangeClipX' ) || options . get ( 'chartRangeMinX' ) < this . minx ) ) { this . minx = options . get ( 'chartRangeMinX' ) ; }
if ( options . get ( 'chartRangeMaxX' ) !== undefined && ( options . get ( 'chartRangeClipX' ) || options . get ( 'chartRangeMaxX' ) > this . maxx ) ) { this . maxx = options . get ( 'chartRangeMaxX' ) ; } } , drawNormalRange : function ( canvasLeft , canvasTop , canvasHeight , canvasWidth , rangey ) { var normalRangeMin = this . options . get ( 'normalRangeMin' ) , normalRangeMax = this . options . get ( 'normalRangeMax' ) , ytop = canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( normalRangeMax - this . miny ) / rangey ) ) ) , height = Math . round ( ( canvasHeight * ( normalRangeMax - normalRangeMin ) ) / rangey ) ; this . target . drawRect ( canvasLeft , ytop , canvasWidth , height , undefined , this . options . get ( 'normalRangeColor' ) ) . append ( ) ; } , render : function ( ) { var options = this . options , target = this . target , canvasWidth = this . canvasWidth , canvasHeight = this . canvasHeight , vertices = this . vertices , spotRadius = options . get ( 'spotRadius' ) , regionMap = this . regionMap , rangex , rangey , yvallast , canvasTop , canvasLeft , vertex , path , paths , x , y , xnext , xpos , xposnext , last , next , yvalcount , lineShapes , fillShapes , plen , valueSpots , hlSpotsEnabled , color , xvalues , yvalues , i ; if ( ! line . _super . render . call ( this ) ) { return ; }
this . scanValues ( ) ; this . processRangeOptions ( ) ; xvalues = this . xvalues ; yvalues = this . yvalues ; if ( ! this . yminmax . length || this . yvalues . length < 2 ) { return ; }
canvasTop = canvasLeft = 0 ; rangex = this . maxx - this . minx === 0 ? 1 : this . maxx - this . minx ; rangey = this . maxy - this . miny === 0 ? 1 : this . maxy - this . miny ; yvallast = this . yvalues . length - 1 ; if ( spotRadius && ( canvasWidth < ( spotRadius * 4 ) || canvasHeight < ( spotRadius * 4 ) ) ) { spotRadius = 0 ; }
if ( spotRadius ) { hlSpotsEnabled = options . get ( 'highlightSpotColor' ) && ! options . get ( 'disableInteraction' ) ; if ( hlSpotsEnabled || options . get ( 'minSpotColor' ) || ( options . get ( 'spotColor' ) && yvalues [ yvallast ] === this . miny ) ) { canvasHeight -= Math . ceil ( spotRadius ) ; }
if ( hlSpotsEnabled || options . get ( 'maxSpotColor' ) || ( options . get ( 'spotColor' ) && yvalues [ yvallast ] === this . maxy ) ) { canvasHeight -= Math . ceil ( spotRadius ) ; canvasTop += Math . ceil ( spotRadius ) ; }
if ( hlSpotsEnabled || ( ( options . get ( 'minSpotColor' ) || options . get ( 'maxSpotColor' ) ) && ( yvalues [ 0 ] === this . miny || yvalues [ 0 ] === this . maxy ) ) ) { canvasLeft += Math . ceil ( spotRadius ) ; canvasWidth -= Math . ceil ( spotRadius ) ; }
if ( hlSpotsEnabled || options . get ( 'spotColor' ) || ( options . get ( 'minSpotColor' ) || options . get ( 'maxSpotColor' ) && ( yvalues [ yvallast ] === this . miny || yvalues [ yvallast ] === this . maxy ) ) ) { canvasWidth -= Math . ceil ( spotRadius ) ; } }
canvasHeight -- ; if ( options . get ( 'normalRangeMin' ) !== undefined && ! options . get ( 'drawNormalOnTop' ) ) { this . drawNormalRange ( canvasLeft , canvasTop , canvasHeight , canvasWidth , rangey ) ; }
path = [ ] ; paths = [ path ] ; last = next = null ; yvalcount = yvalues . length ; for ( i = 0 ; i < yvalcount ; i ++ ) { x = xvalues [ i ] ; xnext = xvalues [ i + 1 ] ; y = yvalues [ i ] ; xpos = canvasLeft + Math . round ( ( x - this . minx ) * ( canvasWidth / rangex ) ) ; xposnext = i < yvalcount - 1 ? canvasLeft + Math . round ( ( xnext - this . minx ) * ( canvasWidth / rangex ) ) : canvasWidth ; next = xpos + ( ( xposnext - xpos ) / 2 ) ; regionMap [ i ] = [ last || 0 , next , i ] ; last = next ; if ( y === null ) { if ( i ) { if ( yvalues [ i - 1 ] !== null ) { path = [ ] ; paths . push ( path ) ; }
vertices . push ( null ) ; } } else { if ( y < this . miny ) { y = this . miny ; }
if ( y > this . maxy ) { y = this . maxy ; }
if ( ! path . length ) { path . push ( [ xpos , canvasTop + canvasHeight ] ) ; }
vertex = [ xpos , canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( y - this . miny ) / rangey ) ) ) ] ; path . push ( vertex ) ; vertices . push ( vertex ) ; } }
lineShapes = [ ] ; fillShapes = [ ] ; plen = paths . length ; for ( i = 0 ; i < plen ; i ++ ) { path = paths [ i ] ; if ( path . length ) { if ( options . get ( 'fillColor' ) ) { path . push ( [ path [ path . length - 1 ] [ 0 ] , ( canvasTop + canvasHeight ) ] ) ; fillShapes . push ( path . slice ( 0 ) ) ; path . pop ( ) ; }
if ( path . length > 2 ) { path [ 0 ] = [ path [ 0 ] [ 0 ] , path [ 1 ] [ 1 ] ] ; }
lineShapes . push ( path ) ; } }
plen = fillShapes . length ; for ( i = 0 ; i < plen ; i ++ ) { target . drawShape ( fillShapes [ i ] , options . get ( 'fillColor' ) , options . get ( 'fillColor' ) ) . append ( ) ; }
if ( options . get ( 'normalRangeMin' ) !== undefined && options . get ( 'drawNormalOnTop' ) ) { this . drawNormalRange ( canvasLeft , canvasTop , canvasHeight , canvasWidth , rangey ) ; }
plen = lineShapes . length ; for ( i = 0 ; i < plen ; i ++ ) { target . drawShape ( lineShapes [ i ] , options . get ( 'lineColor' ) , undefined , options . get ( 'lineWidth' ) ) . append ( ) ; }
if ( spotRadius && options . get ( 'valueSpots' ) ) { valueSpots = options . get ( 'valueSpots' ) ; if ( valueSpots . get === undefined ) { valueSpots = new RangeMap ( valueSpots ) ; }
for ( i = 0 ; i < yvalcount ; i ++ ) { color = valueSpots . get ( yvalues [ i ] ) ; if ( color ) { target . drawCircle ( canvasLeft + Math . round ( ( xvalues [ i ] - this . minx ) * ( canvasWidth / rangex ) ) , canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( yvalues [ i ] - this . miny ) / rangey ) ) ) , spotRadius , undefined , color ) . append ( ) ; } } }
if ( spotRadius && options . get ( 'spotColor' ) && yvalues [ yvallast ] !== null ) { target . drawCircle ( canvasLeft + Math . round ( ( xvalues [ xvalues . length - 1 ] - this . minx ) * ( canvasWidth / rangex ) ) , canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( yvalues [ yvallast ] - this . miny ) / rangey ) ) ) , spotRadius , undefined , options . get ( 'spotColor' ) ) . append ( ) ; }
if ( this . maxy !== this . minyorg ) { if ( spotRadius && options . get ( 'minSpotColor' ) ) { x = xvalues [ $ . inArray ( this . minyorg , yvalues ) ] ; target . drawCircle ( canvasLeft + Math . round ( ( x - this . minx ) * ( canvasWidth / rangex ) ) , canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( this . minyorg - this . miny ) / rangey ) ) ) , spotRadius , undefined , options . get ( 'minSpotColor' ) ) . append ( ) ; }
if ( spotRadius && options . get ( 'maxSpotColor' ) ) { x = xvalues [ $ . inArray ( this . maxyorg , yvalues ) ] ; target . drawCircle ( canvasLeft + Math . round ( ( x - this . minx ) * ( canvasWidth / rangex ) ) , canvasTop + Math . round ( canvasHeight - ( canvasHeight * ( ( this . maxyorg - this . miny ) / rangey ) ) ) , spotRadius , undefined , options . get ( 'maxSpotColor' ) ) . append ( ) ; } }
this . lastShapeId = target . getLastShapeId ( ) ; this . canvasTop = canvasTop ; target . render ( ) ; } } ) ; $ . fn . sparkline . bar = bar = createClass ( $ . fn . sparkline . _base , barHighlightMixin , { type : 'bar' , init : function ( el , values , options , width , height ) { var barWidth = parseInt ( options . get ( 'barWidth' ) , 10 ) , barSpacing = parseInt ( options . get ( 'barSpacing' ) , 10 ) , chartRangeMin = options . get ( 'chartRangeMin' ) , chartRangeMax = options . get ( 'chartRangeMax' ) , chartRangeClip = options . get ( 'chartRangeClip' ) , stackMin = Infinity , stackMax = - Infinity , isStackString , groupMin , groupMax , stackRanges , numValues , i , vlen , range , zeroAxis , xaxisOffset , min , max , clipMin , clipMax , stacked , vlist , j , slen , svals , val , yoffset , yMaxCalc , canvasHeightEf ; bar . _super . init . call ( this , el , values , options , width , height ) ; for ( i = 0 , vlen = values . length ; i < vlen ; i ++ ) { val = values [ i ] ; isStackString = typeof ( val ) === 'string' && val . indexOf ( ':' ) > - 1 ; if ( isStackString || $ . isArray ( val ) ) { stacked = true ; if ( isStackString ) { val = values [ i ] = normalizeValues ( val . split ( ':' ) ) ; }
val = remove ( val , null ) ; groupMin = Math . min . apply ( Math , val ) ; groupMax = Math . max . apply ( Math , val ) ; if ( groupMin < stackMin ) { stackMin = groupMin ; }
if ( groupMax > stackMax ) { stackMax = groupMax ; } } }
this . stacked = stacked ; this . regionShapes = { } ; this . barWidth = barWidth ; this . barSpacing = barSpacing ; this . totalBarWidth = barWidth + barSpacing ; this . width = width = ( values . length * barWidth ) + ( ( values . length - 1 ) * barSpacing ) ; this . initTarget ( ) ; if ( chartRangeClip ) { clipMin = chartRangeMin === undefined ? - Infinity : chartRangeMin ; clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax ; }
numValues = [ ] ; stackRanges = stacked ? [ ] : numValues ; var stackTotals = [ ] ; var stackRangesNeg = [ ] ; for ( i = 0 , vlen = values . length ; i < vlen ; i ++ ) { if ( stacked ) { vlist = values [ i ] ; values [ i ] = svals = [ ] ; stackTotals [ i ] = 0 ; stackRanges [ i ] = stackRangesNeg [ i ] = 0 ; for ( j = 0 , slen = vlist . length ; j < slen ; j ++ ) { val = svals [ j ] = chartRangeClip ? clipval ( vlist [ j ] , clipMin , clipMax ) : vlist [ j ] ; if ( val !== null ) { if ( val > 0 ) { stackTotals [ i ] += val ; }
if ( stackMin < 0 && stackMax > 0 ) { if ( val < 0 ) { stackRangesNeg [ i ] += Math . abs ( val ) ; } else { stackRanges [ i ] += val ; } } else { stackRanges [ i ] += Math . abs ( val - ( val < 0 ? stackMax : stackMin ) ) ; }
numValues . push ( val ) ; } } } else { val = chartRangeClip ? clipval ( values [ i ] , clipMin , clipMax ) : values [ i ] ; val = values [ i ] = normalizeValue ( val ) ; if ( val !== null ) { numValues . push ( val ) ; } } }
this . max = max = Math . max . apply ( Math , numValues ) ; this . min = min = Math . min . apply ( Math , numValues ) ; this . stackMax = stackMax = stacked ? Math . max . apply ( Math , stackTotals ) : max ; this . stackMin = stackMin = stacked ? Math . min . apply ( Math , numValues ) : min ; if ( options . get ( 'chartRangeMin' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMin' ) < min ) ) { min = options . get ( 'chartRangeMin' ) ; }
if ( options . get ( 'chartRangeMax' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMax' ) > max ) ) { max = options . get ( 'chartRangeMax' ) ; }
this . zeroAxis = zeroAxis = options . get ( 'zeroAxis' , true ) ; if ( min <= 0 && max >= 0 && zeroAxis ) { xaxisOffset = 0 ; } else if ( zeroAxis == false ) { xaxisOffset = min ; } else if ( min > 0 ) { xaxisOffset = min ; } else { xaxisOffset = max ; }
this . xaxisOffset = xaxisOffset ; range = stacked ? ( Math . max . apply ( Math , stackRanges ) + Math . max . apply ( Math , stackRangesNeg ) ) : max - min ; this . canvasHeightEf = ( zeroAxis && min < 0 ) ? this . canvasHeight - 2 : this . canvasHeight - 1 ; if ( min < xaxisOffset ) { yMaxCalc = ( stacked && max >= 0 ) ? stackMax : max ; yoffset = ( yMaxCalc - xaxisOffset ) / range * this . canvasHeight ; if ( yoffset !== Math . ceil ( yoffset ) ) { this . canvasHeightEf -= 2 ; yoffset = Math . ceil ( yoffset ) ; } } else { yoffset = this . canvasHeight ; }
this . yoffset = yoffset ; if ( $ . isArray ( options . get ( 'colorMap' ) ) ) { this . colorMapByIndex = options . get ( 'colorMap' ) ; this . colorMapByValue = null ; } else { this . colorMapByIndex = null ; this . colorMapByValue = options . get ( 'colorMap' ) ; if ( this . colorMapByValue && this . colorMapByValue . get === undefined ) { this . colorMapByValue = new RangeMap ( this . colorMapByValue ) ; } }
this . range = range ; } , getRegion : function ( el , x , y ) { var result = Math . floor ( x / this . totalBarWidth ) ; return ( result < 0 || result >= this . values . length ) ? undefined : result ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion , values = ensureArray ( this . values [ currentRegion ] ) , result = [ ] , value , i ; for ( i = values . length ; i -- ; ) { value = values [ i ] ; result . push ( { isNull : value === null , value : value , color : this . calcColor ( i , value , currentRegion ) , offset : currentRegion } ) ; }
return result ; } , calcColor : function ( stacknum , value , valuenum ) { var colorMapByIndex = this . colorMapByIndex , colorMapByValue = this . colorMapByValue , options = this . options , color , newColor ; if ( this . stacked ) { color = options . get ( 'stackedBarColor' ) ; } else { color = ( value < 0 ) ? options . get ( 'negBarColor' ) : options . get ( 'barColor' ) ; }
if ( value === 0 && options . get ( 'zeroColor' ) !== undefined ) { color = options . get ( 'zeroColor' ) ; }
if ( colorMapByValue && ( newColor = colorMapByValue . get ( value ) ) ) { color = newColor ; } else if ( colorMapByIndex && colorMapByIndex . length > valuenum ) { color = colorMapByIndex [ valuenum ] ; }
return $ . isArray ( color ) ? color [ stacknum % color . length ] : color ; } , renderRegion : function ( valuenum , highlight ) { var vals = this . values [ valuenum ] , options = this . options , xaxisOffset = this . xaxisOffset , result = [ ] , range = this . range , stacked = this . stacked , target = this . target , x = valuenum * this . totalBarWidth , canvasHeightEf = this . canvasHeightEf , yoffset = this . yoffset , y , height , color , isNull , yoffsetNeg , i , valcount , val , minPlotted , allMin ; vals = $ . isArray ( vals ) ? vals : [ vals ] ; valcount = vals . length ; val = vals [ 0 ] ; isNull = all ( null , vals ) ; allMin = all ( xaxisOffset , vals , true ) ; if ( isNull ) { if ( options . get ( 'nullColor' ) ) { color = highlight ? options . get ( 'nullColor' ) : this . calcHighlightColor ( options . get ( 'nullColor' ) , options ) ; y = ( yoffset > 0 ) ? yoffset - 1 : yoffset ; return target . drawRect ( x , y , this . barWidth - 1 , 0 , color , color ) ; } else { return undefined ; } }
yoffsetNeg = yoffset ; for ( i = 0 ; i < valcount ; i ++ ) { val = vals [ i ] ; if ( stacked && val === xaxisOffset ) { if ( ! allMin || minPlotted ) { continue ; }
minPlotted = true ; }
if ( range > 0 ) { height = Math . floor ( canvasHeightEf * ( ( Math . abs ( val - xaxisOffset ) / range ) ) ) + 1 ; } else { height = 1 ; }
if ( val < xaxisOffset || ( val === xaxisOffset && yoffset === 0 ) ) { y = yoffsetNeg ; yoffsetNeg += height ; } else { y = yoffset - height ; yoffset -= height ; }
color = this . calcColor ( i , val , valuenum ) ; if ( highlight ) { color = this . calcHighlightColor ( color , options ) ; }
result . push ( target . drawRect ( x , y , this . barWidth - 1 , height - 1 , color , color ) ) ; }
if ( result . length === 1 ) { return result [ 0 ] ; }
return result ; } } ) ; $ . fn . sparkline . tristate = tristate = createClass ( $ . fn . sparkline . _base , barHighlightMixin , { type : 'tristate' , init : function ( el , values , options , width , height ) { var barWidth = parseInt ( options . get ( 'barWidth' ) , 10 ) , barSpacing = parseInt ( options . get ( 'barSpacing' ) , 10 ) ; tristate . _super . init . call ( this , el , values , options , width , height ) ; this . regionShapes = { } ; this . barWidth = barWidth ; this . barSpacing = barSpacing ; this . totalBarWidth = barWidth + barSpacing ; this . values = $ . map ( values , Number ) ; this . width = width = ( values . length * barWidth ) + ( ( values . length - 1 ) * barSpacing ) ; if ( $ . isArray ( options . get ( 'colorMap' ) ) ) { this . colorMapByIndex = options . get ( 'colorMap' ) ; this . colorMapByValue = null ; } else { this . colorMapByIndex = null ; this . colorMapByValue = options . get ( 'colorMap' ) ; if ( this . colorMapByValue && this . colorMapByValue . get === undefined ) { this . colorMapByValue = new RangeMap ( this . colorMapByValue ) ; } }
this . initTarget ( ) ; } , getRegion : function ( el , x , y ) { return Math . floor ( x / this . totalBarWidth ) ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion ; return { isNull : this . values [ currentRegion ] === undefined , value : this . values [ currentRegion ] , color : this . calcColor ( this . values [ currentRegion ] , currentRegion ) , offset : currentRegion } ; } , calcColor : function ( value , valuenum ) { var values = this . values , options = this . options , colorMapByIndex = this . colorMapByIndex , colorMapByValue = this . colorMapByValue , color , newColor ; if ( colorMapByValue && ( newColor = colorMapByValue . get ( value ) ) ) { color = newColor ; } else if ( colorMapByIndex && colorMapByIndex . length > valuenum ) { color = colorMapByIndex [ valuenum ] ; } else if ( values [ valuenum ] < 0 ) { color = options . get ( 'negBarColor' ) ; } else if ( values [ valuenum ] > 0 ) { color = options . get ( 'posBarColor' ) ; } else { color = options . get ( 'zeroBarColor' ) ; }
return color ; } , renderRegion : function ( valuenum , highlight ) { var values = this . values , options = this . options , target = this . target , canvasHeight , height , halfHeight , x , y , color ; canvasHeight = target . pixelHeight ; halfHeight = Math . round ( canvasHeight / 2 ) ; x = valuenum * this . totalBarWidth ; if ( values [ valuenum ] < 0 ) { y = halfHeight ; height = halfHeight - 1 ; } else if ( values [ valuenum ] > 0 ) { y = 0 ; height = halfHeight - 1 ; } else { y = halfHeight - 1 ; height = 2 ; }
color = this . calcColor ( values [ valuenum ] , valuenum ) ; if ( color === null ) { return ; }
if ( highlight ) { color = this . calcHighlightColor ( color , options ) ; }
return target . drawRect ( x , y , this . barWidth - 1 , height - 1 , color , color ) ; } } ) ; $ . fn . sparkline . discrete = discrete = createClass ( $ . fn . sparkline . _base , barHighlightMixin , { type : 'discrete' , init : function ( el , values , options , width , height ) { discrete . _super . init . call ( this , el , values , options , width , height ) ; this . regionShapes = { } ; this . values = values = $ . map ( values , Number ) ; this . min = Math . min . apply ( Math , values ) ; this . max = Math . max . apply ( Math , values ) ; this . range = this . max - this . min ; this . width = width = options . get ( 'width' ) === 'auto' ? values . length * 2 : this . width ; this . interval = Math . floor ( width / values . length ) ; this . itemWidth = width / values . length ; if ( options . get ( 'chartRangeMin' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMin' ) < this . min ) ) { this . min = options . get ( 'chartRangeMin' ) ; }
if ( options . get ( 'chartRangeMax' ) !== undefined && ( options . get ( 'chartRangeClip' ) || options . get ( 'chartRangeMax' ) > this . max ) ) { this . max = options . get ( 'chartRangeMax' ) ; }
this . initTarget ( ) ; if ( this . target ) { this . lineHeight = options . get ( 'lineHeight' ) === 'auto' ? Math . round ( this . canvasHeight * 0.3 ) : options . get ( 'lineHeight' ) ; } } , getRegion : function ( el , x , y ) { return Math . floor ( x / this . itemWidth ) ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion ; return { isNull : this . values [ currentRegion ] === undefined , value : this . values [ currentRegion ] , offset : currentRegion } ; } , renderRegion : function ( valuenum , highlight ) { var values = this . values , options = this . options , min = this . min , max = this . max , range = this . range , interval = this . interval , target = this . target , canvasHeight = this . canvasHeight , lineHeight = this . lineHeight , pheight = canvasHeight - lineHeight , ytop , val , color , x ; val = clipval ( values [ valuenum ] , min , max ) ; x = valuenum * interval ; ytop = Math . round ( pheight - pheight * ( ( val - min ) / range ) ) ; color = ( options . get ( 'thresholdColor' ) && val < options . get ( 'thresholdValue' ) ) ? options . get ( 'thresholdColor' ) : options . get ( 'lineColor' ) ; if ( highlight ) { color = this . calcHighlightColor ( color , options ) ; }
return target . drawLine ( x , ytop , x , ytop + lineHeight , color ) ; } } ) ; $ . fn . sparkline . bullet = bullet = createClass ( $ . fn . sparkline . _base , { type : 'bullet' , init : function ( el , values , options , width , height ) { var min , max , vals ; bullet . _super . init . call ( this , el , values , options , width , height ) ; this . values = values = normalizeValues ( values ) ; vals = values . slice ( ) ; vals [ 0 ] = vals [ 0 ] === null ? vals [ 2 ] : vals [ 0 ] ; vals [ 1 ] = values [ 1 ] === null ? vals [ 2 ] : vals [ 1 ] ; min = Math . min . apply ( Math , values ) ; max = Math . max . apply ( Math , values ) ; if ( options . get ( 'base' ) === undefined ) { min = min < 0 ? min : 0 ; } else { min = options . get ( 'base' ) ; }
this . min = min ; this . max = max ; this . range = max - min ; this . shapes = { } ; this . valueShapes = { } ; this . regiondata = { } ; this . width = width = options . get ( 'width' ) === 'auto' ? '4.0em' : width ; this . target = this . $el . simpledraw ( width , height , options . get ( 'composite' ) ) ; if ( ! values . length ) { this . disabled = true ; }
this . initTarget ( ) ; } , getRegion : function ( el , x , y ) { var shapeid = this . target . getShapeAt ( el , x , y ) ; return ( shapeid !== undefined && this . shapes [ shapeid ] !== undefined ) ? this . shapes [ shapeid ] : undefined ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion ; return { fieldkey : currentRegion . substr ( 0 , 1 ) , value : this . values [ currentRegion . substr ( 1 ) ] , region : currentRegion } ; } , changeHighlight : function ( highlight ) { var currentRegion = this . currentRegion , shapeid = this . valueShapes [ currentRegion ] , shape ; delete this . shapes [ shapeid ] ; switch ( currentRegion . substr ( 0 , 1 ) ) { case 'r' : shape = this . renderRange ( currentRegion . substr ( 1 ) , highlight ) ; break ; case 'p' : shape = this . renderPerformance ( highlight ) ; break ; case 't' : shape = this . renderTarget ( highlight ) ; break ; }
this . valueShapes [ currentRegion ] = shape . id ; this . shapes [ shape . id ] = currentRegion ; this . target . replaceWithShape ( shapeid , shape ) ; } , renderRange : function ( rn , highlight ) { var rangeval = this . values [ rn ] , rangewidth = Math . round ( this . canvasWidth * ( ( rangeval - this . min ) / this . range ) ) , color = this . options . get ( 'rangeColors' ) [ rn - 2 ] ; if ( highlight ) { color = this . calcHighlightColor ( color , this . options ) ; }
return this . target . drawRect ( 0 , 0 , rangewidth - 1 , this . canvasHeight - 1 , color , color ) ; } , renderPerformance : function ( highlight ) { var perfval = this . values [ 1 ] , perfwidth = Math . round ( this . canvasWidth * ( ( perfval - this . min ) / this . range ) ) , color = this . options . get ( 'performanceColor' ) ; if ( highlight ) { color = this . calcHighlightColor ( color , this . options ) ; }
return this . target . drawRect ( 0 , Math . round ( this . canvasHeight * 0.3 ) , perfwidth - 1 , Math . round ( this . canvasHeight * 0.4 ) - 1 , color , color ) ; } , renderTarget : function ( highlight ) { var targetval = this . values [ 0 ] , x = Math . round ( this . canvasWidth * ( ( targetval - this . min ) / this . range ) - ( this . options . get ( 'targetWidth' ) / 2 ) ) , targettop = Math . round ( this . canvasHeight * 0.10 ) , targetheight = this . canvasHeight - ( targettop * 2 ) , color = this . options . get ( 'targetColor' ) ; if ( highlight ) { color = this . calcHighlightColor ( color , this . options ) ; }
return this . target . drawRect ( x , targettop , this . options . get ( 'targetWidth' ) - 1 , targetheight - 1 , color , color ) ; } , render : function ( ) { var vlen = this . values . length , target = this . target , i , shape ; if ( ! bullet . _super . render . call ( this ) ) { return ; }
for ( i = 2 ; i < vlen ; i ++ ) { shape = this . renderRange ( i ) . append ( ) ; this . shapes [ shape . id ] = 'r' + i ; this . valueShapes [ 'r' + i ] = shape . id ; }
if ( this . values [ 1 ] !== null ) { shape = this . renderPerformance ( ) . append ( ) ; this . shapes [ shape . id ] = 'p1' ; this . valueShapes . p1 = shape . id ; }
if ( this . values [ 0 ] !== null ) { shape = this . renderTarget ( ) . append ( ) ; this . shapes [ shape . id ] = 't0' ; this . valueShapes . t0 = shape . id ; }
target . render ( ) ; } } ) ; $ . fn . sparkline . pie = pie = createClass ( $ . fn . sparkline . _base , { type : 'pie' , init : function ( el , values , options , width , height ) { var total = 0 , i ; pie . _super . init . call ( this , el , values , options , width , height ) ; this . shapes = { } ; this . valueShapes = { } ; this . values = values = $ . map ( values , Number ) ; if ( options . get ( 'width' ) === 'auto' ) { this . width = this . height ; }
if ( values . length > 0 ) { for ( i = values . length ; i -- ; ) { total += values [ i ] ; } }
this . total = total ; this . initTarget ( ) ; this . radius = Math . floor ( Math . min ( this . canvasWidth , this . canvasHeight ) / 2 ) ; } , getRegion : function ( el , x , y ) { var shapeid = this . target . getShapeAt ( el , x , y ) ; return ( shapeid !== undefined && this . shapes [ shapeid ] !== undefined ) ? this . shapes [ shapeid ] : undefined ; } , getCurrentRegionFields : function ( ) { var currentRegion = this . currentRegion ; return { isNull : this . values [ currentRegion ] === undefined , value : this . values [ currentRegion ] , percent : this . values [ currentRegion ] / this . total * 100 , color : this . options . get ( 'sliceColors' ) [ currentRegion % this . options . get ( 'sliceColors' ) . length ] , offset : currentRegion } ; } , changeHighlight : function ( highlight ) { var currentRegion = this . currentRegion , newslice = this . renderSlice ( currentRegion , highlight ) , shapeid = this . valueShapes [ currentRegion ] ; delete this . shapes [ shapeid ] ; this . target . replaceWithShape ( shapeid , newslice ) ; this . valueShapes [ currentRegion ] = newslice . id ; this . shapes [ newslice . id ] = currentRegion ; } , renderSlice : function ( valuenum , highlight ) { var target = this . target , options = this . options , radius = this . radius , borderWidth = options . get ( 'borderWidth' ) , offset = options . get ( 'offset' ) , circle = 2 * Math . PI , values = this . values , total = this . total , next = offset ? ( 2 * Math . PI ) * ( offset / 360 ) : 0 , start , end , i , vlen , color ; vlen = values . length ; for ( i = 0 ; i < vlen ; i ++ ) { start = next ; end = next ; if ( total > 0 ) { end = next + ( circle * ( values [ i ] / total ) ) ; }
if ( valuenum === i ) { color = options . get ( 'sliceColors' ) [ i % options . get ( 'sliceColors' ) . length ] ; if ( highlight ) { color = this . calcHighlightColor ( color , options ) ; }
return target . drawPieSlice ( radius , radius , radius - borderWidth , start , end , undefined , color ) ; }
next = end ; } } , render : function ( ) { var target = this . target , values = this . values , options = this . options , radius = this . radius , borderWidth = options . get ( 'borderWidth' ) , donutWidth = options . get ( 'donutWidth' ) , shape , i ; if ( ! pie . _super . render . call ( this ) ) { return ; }
if ( borderWidth ) { target . drawCircle ( radius , radius , Math . floor ( radius - ( borderWidth / 2 ) ) , options . get ( 'borderColor' ) , undefined , borderWidth ) . append ( ) ; }
for ( i = values . length ; i -- ; ) { if ( values [ i ] ) { shape = this . renderSlice ( i ) . append ( ) ; this . valueShapes [ i ] = shape . id ; this . shapes [ shape . id ] = i ; } }
if ( donutWidth ) { target . drawCircle ( radius , radius , radius - donutWidth , options . get ( 'donutColor' ) , options . get ( 'donutColor' ) , 0 ) . append ( ) ; }
target . render ( ) ; } } ) ; $ . fn . sparkline . box = box = createClass ( $ . fn . sparkline . _base , { type : 'box' , init : function ( el , values , options , width , height ) { box . _super . init . call ( this , el , values , options , width , height ) ; this . values = $ . map ( values , Number ) ; this . width = options . get ( 'width' ) === 'auto' ? '4.0em' : width ; this . initTarget ( ) ; if ( ! this . values . length ) { this . disabled = 1 ; } } , getRegion : function ( ) { return 1 ; } , getCurrentRegionFields : function ( ) { var result = [ { field : 'lq' , value : this . quartiles [ 0 ] } , { field : 'med' , value : this . quartiles [ 1 ] } , { field : 'uq' , value : this . quartiles [ 2 ] } ] ; if ( this . loutlier !== undefined ) { result . push ( { field : 'lo' , value : this . loutlier } ) ; }
if ( this . routlier !== undefined ) { result . push ( { field : 'ro' , value : this . routlier } ) ; }
if ( this . lwhisker !== undefined ) { result . push ( { field : 'lw' , value : this . lwhisker } ) ; }
if ( this . rwhisker !== undefined ) { result . push ( { field : 'rw' , value : this . rwhisker } ) ; }
return result ; } , render : function ( ) { var target = this . target , values = this . values , vlen = values . length , options = this . options , canvasWidth = this . canvasWidth , canvasHeight = this . canvasHeight , minValue = options . get ( 'chartRangeMin' ) === undefined ? Math . min . apply ( Math , values ) : options . get ( 'chartRangeMin' ) , maxValue = options . get ( 'chartRangeMax' ) === undefined ? Math . max . apply ( Math , values ) : options . get ( 'chartRangeMax' ) , canvasLeft = 0 , lwhisker , loutlier , iqr , q1 , q2 , q3 , rwhisker , routlier , i , size , unitSize ; if ( ! box . _super . render . call ( this ) ) { return ; }
if ( options . get ( 'raw' ) ) { if ( options . get ( 'showOutliers' ) && values . length > 5 ) { loutlier = values [ 0 ] ; lwhisker = values [ 1 ] ; q1 = values [ 2 ] ; q2 = values [ 3 ] ; q3 = values [ 4 ] ; rwhisker = values [ 5 ] ; routlier = values [ 6 ] ; } else { lwhisker = values [ 0 ] ; q1 = values [ 1 ] ; q2 = values [ 2 ] ; q3 = values [ 3 ] ; rwhisker = values [ 4 ] ; } } else { values . sort ( function ( a , b ) { return a - b ; } ) ; q1 = quartile ( values , 1 ) ; q2 = quartile ( values , 2 ) ; q3 = quartile ( values , 3 ) ; iqr = q3 - q1 ; if ( options . get ( 'showOutliers' ) ) { lwhisker = rwhisker = undefined ; for ( i = 0 ; i < vlen ; i ++ ) { if ( lwhisker === undefined && values [ i ] > q1 - ( iqr * options . get ( 'outlierIQR' ) ) ) { lwhisker = values [ i ] ; }
if ( values [ i ] < q3 + ( iqr * options . get ( 'outlierIQR' ) ) ) { rwhisker = values [ i ] ; } }
loutlier = values [ 0 ] ; routlier = values [ vlen - 1 ] ; } else { lwhisker = values [ 0 ] ; rwhisker = values [ vlen - 1 ] ; } }
this . quartiles = [ q1 , q2 , q3 ] ; this . lwhisker = lwhisker ; this . rwhisker = rwhisker ; this . loutlier = loutlier ; this . routlier = routlier ; unitSize = canvasWidth / ( maxValue - minValue + 1 ) ; if ( options . get ( 'showOutliers' ) ) { canvasLeft = Math . ceil ( options . get ( 'spotRadius' ) ) ; canvasWidth -= 2 * Math . ceil ( options . get ( 'spotRadius' ) ) ; unitSize = canvasWidth / ( maxValue - minValue + 1 ) ; if ( loutlier < lwhisker ) { target . drawCircle ( ( loutlier - minValue ) * unitSize + canvasLeft , canvasHeight / 2 , options . get ( 'spotRadius' ) , options . get ( 'outlierLineColor' ) , options . get ( 'outlierFillColor' ) ) . append ( ) ; }
if ( routlier > rwhisker ) { target . drawCircle ( ( routlier - minValue ) * unitSize + canvasLeft , canvasHeight / 2 , options . get ( 'spotRadius' ) , options . get ( 'outlierLineColor' ) , options . get ( 'outlierFillColor' ) ) . append ( ) ; } }
target . drawRect ( Math . round ( ( q1 - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight * 0.1 ) , Math . round ( ( q3 - q1 ) * unitSize ) , Math . round ( canvasHeight * 0.8 ) , options . get ( 'boxLineColor' ) , options . get ( 'boxFillColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( lwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 2 ) , Math . round ( ( q1 - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 2 ) , options . get ( 'lineColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( lwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 4 ) , Math . round ( ( lwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight - canvasHeight / 4 ) , options . get ( 'whiskerColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( rwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 2 ) , Math . round ( ( q3 - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 2 ) , options . get ( 'lineColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( rwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight / 4 ) , Math . round ( ( rwhisker - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight - canvasHeight / 4 ) , options . get ( 'whiskerColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( q2 - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight * 0.1 ) , Math . round ( ( q2 - minValue ) * unitSize + canvasLeft ) , Math . round ( canvasHeight * 0.9 ) , options . get ( 'medianColor' ) ) . append ( ) ; if ( options . get ( 'target' ) ) { size = Math . ceil ( options . get ( 'spotRadius' ) ) ; target . drawLine ( Math . round ( ( options . get ( 'target' ) - minValue ) * unitSize + canvasLeft ) , Math . round ( ( canvasHeight / 2 ) - size ) , Math . round ( ( options . get ( 'target' ) - minValue ) * unitSize + canvasLeft ) , Math . round ( ( canvasHeight / 2 ) + size ) , options . get ( 'targetColor' ) ) . append ( ) ; target . drawLine ( Math . round ( ( options . get ( 'target' ) - minValue ) * unitSize + canvasLeft - size ) , Math . round ( canvasHeight / 2 ) , Math . round ( ( options . get ( 'target' ) - minValue ) * unitSize + canvasLeft + size ) , Math . round ( canvasHeight / 2 ) , options . get ( 'targetColor' ) ) . append ( ) ; }
target . render ( ) ; } } ) ; VShape = createClass ( { init : function ( target , id , type , args ) { this . target = target ; this . id = id ; this . type = type ; this . args = args ; } , append : function ( ) { this . target . appendShape ( this ) ; return this ; } } ) ; VCanvas _base = createClass ( { _pxregex : /(\d+)(px)?\s*$/i , init : function ( width , height , target ) { if ( ! width ) { return ; }
this . width = width ; this . height = height ; this . target = target ; this . lastShapeId = null ; if ( target [ 0 ] ) { target = target [ 0 ] ; }
$ . data ( target , '_jqs_vcanvas' , this ) ; } , drawLine : function ( x1 , y1 , x2 , y2 , lineColor , lineWidth ) { return this . drawShape ( [ [ x1 , y1 ] , [ x2 , y2 ] ] , lineColor , lineWidth ) ; } , drawShape : function ( path , lineColor , fillColor , lineWidth ) { return this . _genShape ( 'Shape' , [ path , lineColor , fillColor , lineWidth ] ) ; } , drawCircle : function ( x , y , radius , lineColor , fillColor , lineWidth ) { return this . _genShape ( 'Circle' , [ x , y , radius , lineColor , fillColor , lineWidth ] ) ; } , drawPieSlice : function ( x , y , radius , startAngle , endAngle , lineColor , fillColor ) { return this . _genShape ( 'PieSlice' , [ x , y , radius , startAngle , endAngle , lineColor , fillColor ] ) ; } , drawRect : function ( x , y , width , height , lineColor , fillColor ) { return this . _genShape ( 'Rect' , [ x , y , width , height , lineColor , fillColor ] ) ; } , getElement : function ( ) { return this . canvas ; } , getLastShapeId : function ( ) { return this . lastShapeId ; } , reset : function ( ) { alert ( 'reset not implemented' ) ; } , _insert : function ( el , target ) { $ ( target ) . html ( el ) ; } , _calculatePixelDims : function ( width , height , canvas ) { var match ; match = this . _pxregex . exec ( height ) ; if ( match ) { this . pixelHeight = match [ 1 ] ; } else { this . pixelHeight = $ ( canvas ) . height ( ) ; }
match = this . _pxregex . exec ( width ) ; if ( match ) { this . pixelWidth = match [ 1 ] ; } else { this . pixelWidth = $ ( canvas ) . width ( ) ; } } , _genShape : function ( shapetype , shapeargs ) { var id = shapeCount ++ ; shapeargs . unshift ( id ) ; return new VShape ( this , id , shapetype , shapeargs ) ; } , appendShape : function ( shape ) { alert ( 'appendShape not implemented' ) ; } , replaceWithShape : function ( shapeid , shape ) { alert ( 'replaceWithShape not implemented' ) ; } , insertAfterShape : function ( shapeid , shape ) { alert ( 'insertAfterShape not implemented' ) ; } , removeShapeId : function ( shapeid ) { alert ( 'removeShapeId not implemented' ) ; } , getShapeAt : function ( el , x , y ) { alert ( 'getShapeAt not implemented' ) ; } , render : function ( ) { alert ( 'render not implemented' ) ; } } ) ; VCanvas _canvas = createClass ( VCanvas _base , { init : function ( width , height , target , interact ) { VCanvas _canvas . _super . init . call ( this , width , height , target ) ; this . canvas = document . createElement ( 'canvas' ) ; if ( target [ 0 ] ) { target = target [ 0 ] ; }
$ . data ( target , '_jqs_vcanvas' , this ) ; $ ( this . canvas ) . css ( { display : 'inline-block' , width : width , height : height , verticalAlign : 'top' } ) ; this . _insert ( this . canvas , target ) ; this . _calculatePixelDims ( width , height , this . canvas ) ; this . canvas . width = this . pixelWidth ; this . canvas . height = this . pixelHeight ; this . interact = interact ; this . shapes = { } ; this . shapeseq = [ ] ; this . currentTargetShapeId = undefined ; $ ( this . canvas ) . css ( { width : this . pixelWidth , height : this . pixelHeight } ) ; } , _getContext : function ( lineColor , fillColor , lineWidth ) { var context = this . canvas . getContext ( '2d' ) ; if ( lineColor !== undefined ) { context . strokeStyle = lineColor ; }
context . lineWidth = lineWidth === undefined ? 1 : lineWidth ; if ( fillColor !== undefined ) { context . fillStyle = fillColor ; }
return context ; } , reset : function ( ) { var context = this . _getContext ( ) ; context . clearRect ( 0 , 0 , this . pixelWidth , this . pixelHeight ) ; this . shapes = { } ; this . shapeseq = [ ] ; this . currentTargetShapeId = undefined ; } , _drawShape : function ( shapeid , path , lineColor , fillColor , lineWidth ) { var context = this . _getContext ( lineColor , fillColor , lineWidth ) , i , plen ; context . beginPath ( ) ; context . moveTo ( path [ 0 ] [ 0 ] + 0.5 , path [ 0 ] [ 1 ] + 0.5 ) ; for ( i = 1 , plen = path . length ; i < plen ; i ++ ) { context . lineTo ( path [ i ] [ 0 ] + 0.5 , path [ i ] [ 1 ] + 0.5 ) ; }
if ( lineColor !== undefined ) { context . stroke ( ) ; }
if ( fillColor !== undefined ) { context . fill ( ) ; }
if ( this . targetX !== undefined && this . targetY !== undefined && context . isPointInPath ( this . targetX , this . targetY ) ) { this . currentTargetShapeId = shapeid ; } } , _drawCircle : function ( shapeid , x , y , radius , lineColor , fillColor , lineWidth ) { var context = this . _getContext ( lineColor , fillColor , lineWidth ) ; context . beginPath ( ) ; context . arc ( x , y , radius , 0 , 2 * Math . PI , false ) ; if ( this . targetX !== undefined && this . targetY !== undefined && context . isPointInPath ( this . targetX , this . targetY ) ) { this . currentTargetShapeId = shapeid ; }
if ( lineColor !== undefined ) { context . stroke ( ) ; }
if ( fillColor !== undefined ) { context . fill ( ) ; } } , _drawPieSlice : function ( shapeid , x , y , radius , startAngle , endAngle , lineColor , fillColor ) { var context = this . _getContext ( lineColor , fillColor ) ; context . beginPath ( ) ; context . moveTo ( x , y ) ; context . arc ( x , y , radius , startAngle , endAngle , false ) ; context . lineTo ( x , y ) ; context . closePath ( ) ; if ( lineColor !== undefined ) { context . stroke ( ) ; }
if ( fillColor ) { context . fill ( ) ; }
if ( this . targetX !== undefined && this . targetY !== undefined && context . isPointInPath ( this . targetX , this . targetY ) ) { this . currentTargetShapeId = shapeid ; } } , _drawRect : function ( shapeid , x , y , width , height , lineColor , fillColor ) { return this . _drawShape ( shapeid , [ [ x , y ] , [ x + width , y ] , [ x + width , y + height ] , [ x , y + height ] , [ x , y ] ] , lineColor , fillColor ) ; } , appendShape : function ( shape ) { this . shapes [ shape . id ] = shape ; this . shapeseq . push ( shape . id ) ; this . lastShapeId = shape . id ; return shape . id ; } , replaceWithShape : function ( shapeid , shape ) { var shapeseq = this . shapeseq , i ; this . shapes [ shape . id ] = shape ; for ( i = shapeseq . length ; i -- ; ) { if ( shapeseq [ i ] == shapeid ) { shapeseq [ i ] = shape . id ; } }
delete this . shapes [ shapeid ] ; } , replaceWithShapes : function ( shapeids , shapes ) { var shapeseq = this . shapeseq , shapemap = { } , sid , i , first ; for ( i = shapeids . length ; i -- ; ) { shapemap [ shapeids [ i ] ] = true ; }
for ( i = shapeseq . length ; i -- ; ) { sid = shapeseq [ i ] ; if ( shapemap [ sid ] ) { shapeseq . splice ( i , 1 ) ; delete this . shapes [ sid ] ; first = i ; } }
for ( i = shapes . length ; i -- ; ) { shapeseq . splice ( first , 0 , shapes [ i ] . id ) ; this . shapes [ shapes [ i ] . id ] = shapes [ i ] ; } } , insertAfterShape : function ( shapeid , shape ) { var shapeseq = this . shapeseq , i ; for ( i = shapeseq . length ; i -- ; ) { if ( shapeseq [ i ] === shapeid ) { shapeseq . splice ( i + 1 , 0 , shape . id ) ; this . shapes [ shape . id ] = shape ; return ; } } } , removeShapeId : function ( shapeid ) { var shapeseq = this . shapeseq , i ; for ( i = shapeseq . length ; i -- ; ) { if ( shapeseq [ i ] === shapeid ) { shapeseq . splice ( i , 1 ) ; break ; } }
delete this . shapes [ shapeid ] ; } , getShapeAt : function ( el , x , y ) { this . targetX = x ; this . targetY = y ; this . render ( ) ; return this . currentTargetShapeId ; } , render : function ( ) { var shapeseq = this . shapeseq , shapes = this . shapes , shapeCount = shapeseq . length , context = this . _getContext ( ) , shapeid , shape , i ; context . clearRect ( 0 , 0 , this . pixelWidth , this . pixelHeight ) ; for ( i = 0 ; i < shapeCount ; i ++ ) { shapeid = shapeseq [ i ] ; shape = shapes [ shapeid ] ; this [ '_draw' + shape . type ] . apply ( this , shape . args ) ; }
if ( ! this . interact ) { this . shapes = { } ; this . shapeseq = [ ] ; } } } ) ; VCanvas _vml = createClass ( VCanvas _base , { init : function ( width , height , target ) { var groupel ; VCanvas _vml . _super . init . call ( this , width , height , target ) ; if ( target [ 0 ] ) { target = target [ 0 ] ; }
$ . data ( target , '_jqs_vcanvas' , this ) ; this . canvas = document . createElement ( 'span' ) ; $ ( this . canvas ) . css ( { display : 'inline-block' , position : 'relative' , overflow : 'hidden' , width : width , height : height , margin : '0px' , padding : '0px' , verticalAlign : 'top' } ) ; this . _insert ( this . canvas , target ) ; this . _calculatePixelDims ( width , height , this . canvas ) ; this . canvas . width = this . pixelWidth ; this . canvas . height = this . pixelHeight ; groupel = '<v:group coordorigin="0 0" coordsize="' + this . pixelWidth + ' ' + this . pixelHeight + '"' +
' style="position:absolute;top:0;left:0;width:' + this . pixelWidth + 'px;height=' + this . pixelHeight + 'px;"></v:group>' ; this . canvas . insertAdjacentHTML ( 'beforeEnd' , groupel ) ; this . group = $ ( this . canvas ) . children ( ) [ 0 ] ; this . rendered = false ; this . prerender = '' ; } , _drawShape : function ( shapeid , path , lineColor , fillColor , lineWidth ) { var vpath = [ ] , initial , stroke , fill , closed , vel , plen , i ; for ( i = 0 , plen = path . length ; i < plen ; i ++ ) { vpath [ i ] = '' + ( path [ i ] [ 0 ] ) + ',' + ( path [ i ] [ 1 ] ) ; }
initial = vpath . splice ( 0 , 1 ) ; lineWidth = lineWidth === undefined ? 1 : lineWidth ; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ' ; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ' ; closed = vpath [ 0 ] === vpath [ vpath . length - 1 ] ? 'x ' : '' ; vel = '<v:shape coordorigin="0 0" coordsize="' + this . pixelWidth + ' ' + this . pixelHeight + '" ' +
' id="jqsshape' + shapeid + '" ' +
stroke +
fill +
' style="position:absolute;left:0px;top:0px;height:' + this . pixelHeight + 'px;width:' + this . pixelWidth + 'px;padding:0px;margin:0px;" ' +
' path="m ' + initial + ' l ' + vpath . join ( ', ' ) + ' ' + closed + 'e">' +
' </v:shape>' ; return vel ; } , _drawCircle : function ( shapeid , x , y , radius , lineColor , fillColor , lineWidth ) { var stroke , fill , vel ; x -= radius ; y -= radius ; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ' ; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ' ; vel = '<v:oval ' +
' id="jqsshape' + shapeid + '" ' +
stroke +
fill +
' style="position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + ( radius * 2 ) + 'px; height:' + ( radius * 2 ) + 'px"></v:oval>' ; return vel ; } , _drawPieSlice : function ( shapeid , x , y , radius , startAngle , endAngle , lineColor , fillColor ) { var vpath , startx , starty , endx , endy , stroke , fill , vel ; if ( startAngle === endAngle ) { return '' ; }
if ( ( endAngle - startAngle ) === ( 2 * Math . PI ) ) { startAngle = 0.0 ; endAngle = ( 2 * Math . PI ) ; }
startx = x + Math . round ( Math . cos ( startAngle ) * radius ) ; starty = y + Math . round ( Math . sin ( startAngle ) * radius ) ; endx = x + Math . round ( Math . cos ( endAngle ) * radius ) ; endy = y + Math . round ( Math . sin ( endAngle ) * radius ) ; if ( startx === endx && starty === endy ) { if ( ( endAngle - startAngle ) < Math . PI ) { return '' ; }
startx = endx = x + radius ; starty = endy = y ; }
if ( startx === endx && starty === endy && ( endAngle - startAngle ) < Math . PI ) { return '' ; }
vpath = [ x - radius , y - radius , x + radius , y + radius , startx , starty , endx , endy ] ; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" ' ; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ' ; vel = '<v:shape coordorigin="0 0" coordsize="' + this . pixelWidth + ' ' + this . pixelHeight + '" ' +
' id="jqsshape' + shapeid + '" ' +
stroke +
fill +
' style="position:absolute;left:0px;top:0px;height:' + this . pixelHeight + 'px;width:' + this . pixelWidth + 'px;padding:0px;margin:0px;" ' +
' path="m ' + x + ',' + y + ' wa ' + vpath . join ( ', ' ) + ' x e">' +
' </v:shape>' ; return vel ; } , _drawRect : function ( shapeid , x , y , width , height , lineColor , fillColor ) { return this . _drawShape ( shapeid , [ [ x , y ] , [ x , y + height ] , [ x + width , y + height ] , [ x + width , y ] , [ x , y ] ] , lineColor , fillColor ) ; } , reset : function ( ) { this . group . innerHTML = '' ; } , appendShape : function ( shape ) { var vel = this [ '_draw' + shape . type ] . apply ( this , shape . args ) ; if ( this . rendered ) { this . group . insertAdjacentHTML ( 'beforeEnd' , vel ) ; } else { this . prerender += vel ; }
this . lastShapeId = shape . id ; return shape . id ; } , replaceWithShape : function ( shapeid , shape ) { var existing = $ ( '#jqsshape' + shapeid ) , vel = this [ '_draw' + shape . type ] . apply ( this , shape . args ) ; existing [ 0 ] . outerHTML = vel ; } , replaceWithShapes : function ( shapeids , shapes ) { var existing = $ ( '#jqsshape' + shapeids [ 0 ] ) , replace = '' , slen = shapes . length , i ; for ( i = 0 ; i < slen ; i ++ ) { replace += this [ '_draw' + shapes [ i ] . type ] . apply ( this , shapes [ i ] . args ) ; }
existing [ 0 ] . outerHTML = replace ; for ( i = 1 ; i < shapeids . length ; i ++ ) { $ ( '#jqsshape' + shapeids [ i ] ) . remove ( ) ; } } , insertAfterShape : function ( shapeid , shape ) { var existing = $ ( '#jqsshape' + shapeid ) , vel = this [ '_draw' + shape . type ] . apply ( this , shape . args ) ; existing [ 0 ] . insertAdjacentHTML ( 'afterEnd' , vel ) ; } , removeShapeId : function ( shapeid ) { var existing = $ ( '#jqsshape' + shapeid ) ; this . group . removeChild ( existing [ 0 ] ) ; } , getShapeAt : function ( el , x , y ) { var shapeid = el . id . substr ( 8 ) ; return shapeid ; } , render : function ( ) { if ( ! this . rendered ) { this . group . innerHTML = this . prerender ; this . rendered = true ; } } } ) ; } ) ) } ( document , Math ) ) ; ; /*! Copyright (c) 2011 Piotr Rochala (http:/ / rocha . la )
* Dual licensed under the MIT ( http : //www.opensource.org/licenses/mit-license.php)
* and GPL ( http : //www.opensource.org/licenses/gpl-license.php) licenses.
*
* Version : 1.3 . 8
*
* /
( function ( $ ) { $ . fn . extend ( { slimScroll : function ( options ) { var defaults = { width : 'auto' , height : '250px' , size : '7px' , color : '#000' , position : 'right' , distance : '1px' , start : 'top' , opacity : . 4 , alwaysVisible : false , disableFadeOut : false , railVisible : false , railColor : '#333' , railOpacity : . 2 , railDraggable : true , railClass : 'slimScrollRail' , barClass : 'slimScrollBar' , wrapperClass : 'slimScrollDiv' , allowPageScroll : false , wheelStep : 20 , touchScrollStep : 200 , borderRadius : '7px' , railBorderRadius : '7px' } ; var o = $ . extend ( defaults , options ) ; this . each ( function ( ) { var isOverPanel , isOverBar , isDragg , queueHide , touchDif , barHeight , percentScroll , lastScroll , divS = '<div></div>' , minBarHeight = 30 , releaseScroll = false ; var me = $ ( this ) ; if ( me . parent ( ) . hasClass ( o . wrapperClass ) )
{ var offset = me . scrollTop ( ) ; bar = me . siblings ( '.' + o . barClass ) ; rail = me . siblings ( '.' + o . railClass ) ; getBarHeight ( ) ; if ( $ . isPlainObject ( options ) )
{ if ( 'height' in options && options . height == 'auto' ) { me . parent ( ) . css ( 'height' , 'auto' ) ; me . css ( 'height' , 'auto' ) ; var height = me . parent ( ) . parent ( ) . height ( ) ; me . parent ( ) . css ( 'height' , height ) ; me . css ( 'height' , height ) ; } else if ( 'height' in options ) { var h = options . height ; me . parent ( ) . css ( 'height' , h ) ; me . css ( 'height' , h ) ; }
if ( 'scrollTo' in options )
{ offset = parseInt ( o . scrollTo ) ; }
else if ( 'scrollBy' in options )
{ offset += parseInt ( o . scrollBy ) ; }
else if ( 'destroy' in options )
{ bar . remove ( ) ; rail . remove ( ) ; me . unwrap ( ) ; return ; }
scrollContent ( offset , false , true ) ; }
return ; }
else if ( $ . isPlainObject ( options ) )
{ if ( 'destroy' in options )
{ return ; } }
o . height = ( o . height == 'auto' ) ? me . parent ( ) . height ( ) : o . height ; var wrapper = $ ( divS ) . addClass ( o . wrapperClass ) . css ( { position : 'relative' , overflow : 'hidden' , width : o . width , height : o . height } ) ; me . css ( { overflow : 'hidden' , width : o . width , height : o . height } ) ; var rail = $ ( divS ) . addClass ( o . railClass ) . css ( { width : o . size , height : '100%' , position : 'absolute' , top : 0 , display : ( o . alwaysVisible && o . railVisible ) ? 'block' : 'none' , 'border-radius' : o . railBorderRadius , background : o . railColor , opacity : o . railOpacity , zIndex : 90 } ) ; var bar = $ ( divS ) . addClass ( o . barClass ) . css ( { background : o . color , width : o . size , position : 'absolute' , top : 0 , opacity : o . opacity , display : o . alwaysVisible ? 'block' : 'none' , 'border-radius' : o . borderRadius , BorderRadius : o . borderRadius , MozBorderRadius : o . borderRadius , WebkitBorderRadius : o . borderRadius , zIndex : 99 } ) ; var posCss = ( o . position == 'right' ) ? { right : o . distance } : { left : o . distance } ; rail . css ( posCss ) ; bar . css ( posCss ) ; me . wrap ( wrapper ) ; me . parent ( ) . append ( bar ) ; me . parent ( ) . append ( rail ) ; if ( o . railDraggable ) { bar . bind ( "mousedown" , function ( e ) { var $doc = $ ( document ) ; isDragg = true ; t = parseFloat ( bar . css ( 'top' ) ) ; pageY = e . pageY ; $doc . bind ( "mousemove.slimscroll" , function ( e ) { currTop = t + e . pageY - pageY ; bar . css ( 'top' , currTop ) ; scrollContent ( 0 , bar . position ( ) . top , false ) ; } ) ; $doc . bind ( "mouseup.slimscroll" , function ( e ) { isDragg = false ; hideBar ( ) ; $doc . unbind ( '.slimscroll' ) ; } ) ; return false ; } ) . bind ( "selectstart.slimscroll" , function ( e ) { e . stopPropagation ( ) ; e . preventDefault ( ) ; return false ; } ) ; }
rail . hover ( function ( ) { showBar ( ) ; } , function ( ) { hideBar ( ) ; } ) ; bar . hover ( function ( ) { isOverBar = true ; } , function ( ) { isOverBar = false ; } ) ; me . hover ( function ( ) { isOverPanel = true ; showBar ( ) ; hideBar ( ) ; } , function ( ) { isOverPanel = false ; hideBar ( ) ; } ) ; me . bind ( 'touchstart' , function ( e , b ) { if ( e . originalEvent . touches . length )
{ touchDif = e . originalEvent . touches [ 0 ] . pageY ; } } ) ; me . bind ( 'touchmove' , function ( e ) { if ( ! releaseScroll )
{ e . originalEvent . preventDefault ( ) ; }
if ( e . originalEvent . touches . length )
{ var diff = ( touchDif - e . originalEvent . touches [ 0 ] . pageY ) / o . touchScrollStep ; scrollContent ( diff , true ) ; touchDif = e . originalEvent . touches [ 0 ] . pageY ; } } ) ; getBarHeight ( ) ; if ( o . start === 'bottom' )
{ bar . css ( { top : me . outerHeight ( ) - bar . outerHeight ( ) } ) ; scrollContent ( 0 , true ) ; }
else if ( o . start !== 'top' )
{ scrollContent ( $ ( o . start ) . position ( ) . top , null , true ) ; if ( ! o . alwaysVisible ) { bar . hide ( ) ; } }
attachWheel ( this ) ; function _onWheel ( e )
{ if ( ! isOverPanel ) { return ; }
var e = e || window . event ; var delta = 0 ; if ( e . wheelDelta ) { delta = - e . wheelDelta / 120 ; }
if ( e . detail ) { delta = e . detail / 3 ; }
var target = e . target || e . srcTarget || e . srcElement ; if ( $ ( target ) . closest ( '.' + o . wrapperClass ) . is ( me . parent ( ) ) ) { scrollContent ( delta , true ) ; }
if ( e . preventDefault && ! releaseScroll ) { e . preventDefault ( ) ; }
if ( ! releaseScroll ) { e . returnValue = false ; } }
function scrollContent ( y , isWheel , isJump )
{ releaseScroll = false ; var delta = y ; var maxTop = me . outerHeight ( ) - bar . outerHeight ( ) ; if ( isWheel )
{ delta = parseInt ( bar . css ( 'top' ) ) + y * parseInt ( o . wheelStep ) / 100 * bar . outerHeight ( ) ; delta = Math . min ( Math . max ( delta , 0 ) , maxTop ) ; delta = ( y > 0 ) ? Math . ceil ( delta ) : Math . floor ( delta ) ; bar . css ( { top : delta + 'px' } ) ; }
percentScroll = parseInt ( bar . css ( 'top' ) ) / ( me . outerHeight ( ) - bar . outerHeight ( ) ) ; delta = percentScroll * ( me [ 0 ] . scrollHeight - me . outerHeight ( ) ) ; if ( isJump )
{ delta = y ; var offsetTop = delta / me [ 0 ] . scrollHeight * me . outerHeight ( ) ; offsetTop = Math . min ( Math . max ( offsetTop , 0 ) , maxTop ) ; bar . css ( { top : offsetTop + 'px' } ) ; }
me . scrollTop ( delta ) ; me . trigger ( 'slimscrolling' , ~ ~ delta ) ; showBar ( ) ; hideBar ( ) ; }
function attachWheel ( target )
{ if ( window . addEventListener )
{ target . addEventListener ( 'DOMMouseScroll' , _onWheel , false ) ; target . addEventListener ( 'mousewheel' , _onWheel , false ) ; }
else
{ document . attachEvent ( "onmousewheel" , _onWheel ) } }
function getBarHeight ( )
{ barHeight = Math . max ( ( me . outerHeight ( ) / me [ 0 ] . scrollHeight ) * me . outerHeight ( ) , minBarHeight ) ; bar . css ( { height : barHeight + 'px' } ) ; var display = barHeight == me . outerHeight ( ) ? 'none' : 'block' ; bar . css ( { display : display } ) ; }
function showBar ( )
{ getBarHeight ( ) ; clearTimeout ( queueHide ) ; if ( percentScroll == ~ ~ percentScroll )
{ releaseScroll = o . allowPageScroll ; if ( lastScroll != percentScroll )
{ var msg = ( ~ ~ percentScroll == 0 ) ? 'top' : 'bottom' ; me . trigger ( 'slimscroll' , msg ) ; } }
else
{ releaseScroll = false ; }
lastScroll = percentScroll ; if ( barHeight >= me . outerHeight ( ) ) { releaseScroll = true ; return ; }
bar . stop ( true , true ) . fadeIn ( 'fast' ) ; if ( o . railVisible ) { rail . stop ( true , true ) . fadeIn ( 'fast' ) ; } }
function hideBar ( )
{ if ( ! o . alwaysVisible )
{ queueHide = setTimeout ( function ( ) { if ( ! ( o . disableFadeOut && isOverPanel ) && ! isOverBar && ! isDragg )
{ bar . fadeOut ( 'slow' ) ; rail . fadeOut ( 'slow' ) ; } } , 1000 ) ; } } } ) ; return this ; } } ) ; $ . fn . extend ( { slimscroll : $ . fn . slimScroll } ) ; } ) ( jQuery ) ; ; / * !
* iCheck v1 . 0.2 , http : //git.io/arlzeA
* === === === === === === === === === === === ==
* Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization
*
* ( c ) 2013 Damir Sultanov , http : //fronteed.com
* MIT Licensed
* /
( function ( $ ) { var _iCheck = 'iCheck' , _iCheckHelper = _iCheck + '-helper' , _checkbox = 'checkbox' , _radio = 'radio' , _checked = 'checked' , _unchecked = 'un' + _checked , _disabled = 'disabled' , _determinate = 'determinate' , _indeterminate = 'in' + _determinate , _update = 'update' , _type = 'type' , _click = 'click' , _touch = 'touchbegin.i touchend.i' , _add = 'addClass' , _remove = 'removeClass' , _callback = 'trigger' , _label = 'label' , _cursor = 'cursor' , _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i . test ( navigator . userAgent ) ; $ . fn [ _iCheck ] = function ( options , fire ) { var handle = 'input[type="' + _checkbox + '"], input[type="' + _radio + '"]' , stack = $ ( ) , walker = function ( object ) { object . each ( function ( ) { var self = $ ( this ) ; if ( self . is ( handle ) ) { stack = stack . add ( self ) ; } else { stack = stack . add ( self . find ( handle ) ) ; } } ) ; } ; if ( /^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i . test ( options ) ) { options = options . toLowerCase ( ) ; walker ( this ) ; return stack . each ( function ( ) { var self = $ ( this ) ; if ( options == 'destroy' ) { tidy ( self , 'ifDestroyed' ) ; } else { operate ( self , true , options ) ; }
if ( $ . isFunction ( fire ) ) { fire ( ) ; } } ) ; } else if ( typeof options == 'object' || ! options ) { var settings = $ . extend ( { checkedClass : _checked , disabledClass : _disabled , indeterminateClass : _indeterminate , labelHover : true } , options ) , selector = settings . handle , hoverClass = settings . hoverClass || 'hover' , focusClass = settings . focusClass || 'focus' , activeClass = settings . activeClass || 'active' , labelHover = ! ! settings . labelHover , labelHoverClass = settings . labelHoverClass || 'hover' , area = ( '' + settings . increaseArea ) . replace ( '%' , '' ) | 0 ; if ( selector == _checkbox || selector == _radio ) { handle = 'input[type="' + selector + '"]' ; }
if ( area < - 50 ) { area = - 50 ; }
walker ( this ) ; return stack . each ( function ( ) { var self = $ ( this ) ; tidy ( self ) ; var node = this , id = node . id , offset = - area + '%' , size = 100 + ( area * 2 ) + '%' , layer = { position : 'absolute' , top : offset , left : offset , display : 'block' , width : size , height : size , margin : 0 , padding : 0 , background : '#fff' , border : 0 , opacity : 0 } , hide = _mobile ? { position : 'absolute' , visibility : 'hidden' } : area ? layer : { position : 'absolute' , opacity : 0 } , className = node [ _type ] == _checkbox ? settings . checkboxClass || 'i' + _checkbox : settings . radioClass || 'i' + _radio , label = $ ( _label + '[for="' + id + '"]' ) . add ( self . closest ( _label ) ) , aria = ! ! settings . aria , ariaID = _iCheck + '-' + Math . random ( ) . toString ( 36 ) . substr ( 2 , 6 ) , parent = '<div class="' + className + '" ' + ( aria ? 'role="' + node [ _type ] + '" ' : '' ) , helper ; if ( aria ) { label . each ( function ( ) { parent += 'aria-labelledby="' ; if ( this . id ) { parent += this . id ; } else { this . id = ariaID ; parent += ariaID ; }
parent += '"' ; } ) ; }
parent = self . wrap ( parent + '/>' ) [ _callback ] ( 'ifCreated' ) . parent ( ) . append ( settings . insert ) ; helper = $ ( '<ins class="' + _iCheckHelper + '"/>' ) . css ( layer ) . appendTo ( parent ) ; self . data ( _iCheck , { o : settings , s : self . attr ( 'style' ) } ) . css ( hide ) ; ! ! settings . inheritClass && parent [ _add ] ( node . className || '' ) ; ! ! settings . inheritID && id && parent . attr ( 'id' , _iCheck + '-' + id ) ; parent . css ( 'position' ) == 'static' && parent . css ( 'position' , 'relative' ) ; operate ( self , true , _update ) ; if ( label . length ) { label . on ( _click + '.i mouseover.i mouseout.i ' + _touch , function ( event ) { var type = event [ _type ] , item = $ ( this ) ; if ( ! node [ _disabled ] ) { if ( type == _click ) { if ( $ ( event . target ) . is ( 'a' ) ) { return ; }
operate ( self , false , true ) ; } else if ( labelHover ) { if ( /ut|nd/ . test ( type ) ) { parent [ _remove ] ( hoverClass ) ; item [ _remove ] ( labelHoverClass ) ; } else { parent [ _add ] ( hoverClass ) ; item [ _add ] ( labelHoverClass ) ; } }
if ( _mobile ) { event . stopPropagation ( ) ; } else { return false ; } } } ) ; }
self . on ( _click + '.i focus.i blur.i keyup.i keydown.i keypress.i' , function ( event ) { var type = event [ _type ] , key = event . keyCode ; if ( type == _click ) { return false ; } else if ( type == 'keydown' && key == 32 ) { if ( ! ( node [ _type ] == _radio && node [ _checked ] ) ) { if ( node [ _checked ] ) { off ( self , _checked ) ; } else { on ( self , _checked ) ; } }
return false ; } else if ( type == 'keyup' && node [ _type ] == _radio ) { ! node [ _checked ] && on ( self , _checked ) ; } else if ( /us|ur/ . test ( type ) ) { parent [ type == 'blur' ? _remove : _add ] ( focusClass ) ; } } ) ; helper . on ( _click + ' mousedown mouseup mouseover mouseout ' + _touch , function ( event ) { var type = event [ _type ] , toggle = /wn|up/ . test ( type ) ? activeClass : hoverClass ; if ( ! node [ _disabled ] ) { if ( type == _click ) { operate ( self , false , true ) ; } else { if ( /wn|er|in/ . test ( type ) ) { parent [ _add ] ( toggle ) ; } else { parent [ _remove ] ( toggle + ' ' + activeClass ) ; }
if ( label . length && labelHover && toggle == hoverClass ) { label [ /ut|nd/ . test ( type ) ? _remove : _add ] ( labelHoverClass ) ; } }
if ( _mobile ) { event . stopPropagation ( ) ; } else { return false ; } } } ) ; } ) ; } else { return this ; } } ; function operate ( input , direct , method ) { var node = input [ 0 ] , state = /er/ . test ( method ) ? _indeterminate : /bl/ . test ( method ) ? _disabled : _checked , active = method == _update ? { checked : node [ _checked ] , disabled : node [ _disabled ] , indeterminate : input . attr ( _indeterminate ) == 'true' || input . attr ( _determinate ) == 'false' } : node [ state ] ; if ( /^(ch|di|in)/ . test ( method ) && ! active ) { on ( input , state ) ; } else if ( /^(un|en|de)/ . test ( method ) && active ) { off ( input , state ) ; } else if ( method == _update ) { for ( var each in active ) { if ( active [ each ] ) { on ( input , each , true ) ; } else { off ( input , each , true ) ; } } } else if ( ! direct || method == 'toggle' ) { if ( ! direct ) { input [ _callback ] ( 'ifClicked' ) ; }
if ( active ) { if ( node [ _type ] !== _radio ) { off ( input , state ) ; } } else { on ( input , state ) ; } } }
function on ( input , state , keep ) { var node = input [ 0 ] , parent = input . parent ( ) , checked = state == _checked , indeterminate = state == _indeterminate , disabled = state == _disabled , callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled' , regular = option ( input , callback + capitalize ( node [ _type ] ) ) , specific = option ( input , state + capitalize ( node [ _type ] ) ) ; if ( node [ state ] !== true ) { if ( ! keep && state == _checked && node [ _type ] == _radio && node . name ) { var form = input . closest ( 'form' ) , inputs = 'input[name="' + node . name + '"]' ; inputs = form . length ? form . find ( inputs ) : $ ( inputs ) ; inputs . each ( function ( ) { if ( this !== node && $ ( this ) . data ( _iCheck ) ) { off ( $ ( this ) , state ) ; } } ) ; }
if ( indeterminate ) { node [ state ] = true ; if ( node [ _checked ] ) { off ( input , _checked , 'force' ) ; }
} else { if ( ! keep ) { node [ state ] = true ; }
if ( checked && node [ _indeterminate ] ) { off ( input , _indeterminate , false ) ; } }
callbacks ( input , checked , state , keep ) ; }
if ( node [ _disabled ] && ! ! option ( input , _cursor , true ) ) { parent . find ( '.' + _iCheckHelper ) . css ( _cursor , 'default' ) ; }
parent [ _add ] ( specific || option ( input , state ) || '' ) ; if ( ! ! parent . attr ( 'role' ) && ! indeterminate ) { parent . attr ( 'aria-' + ( disabled ? _disabled : _checked ) , 'true' ) ; }
parent [ _remove ] ( regular || option ( input , callback ) || '' ) ; }
function off ( input , state , keep ) { var node = input [ 0 ] , parent = input . parent ( ) , checked = state == _checked , indeterminate = state == _indeterminate , disabled = state == _disabled , callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled' , regular = option ( input , callback + capitalize ( node [ _type ] ) ) , specific = option ( input , state + capitalize ( node [ _type ] ) ) ; if ( node [ state ] !== false ) { if ( indeterminate || ! keep || keep == 'force' ) { node [ state ] = false ; }
callbacks ( input , checked , callback , keep ) ; }
if ( ! node [ _disabled ] && ! ! option ( input , _cursor , true ) ) { parent . find ( '.' + _iCheckHelper ) . css ( _cursor , 'pointer' ) ; }
parent [ _remove ] ( specific || option ( input , state ) || '' ) ; if ( ! ! parent . attr ( 'role' ) && ! indeterminate ) { parent . attr ( 'aria-' + ( disabled ? _disabled : _checked ) , 'false' ) ; }
parent [ _add ] ( regular || option ( input , callback ) || '' ) ; }
function tidy ( input , callback ) { if ( input . data ( _iCheck ) ) { input . parent ( ) . html ( input . attr ( 'style' , input . data ( _iCheck ) . s || '' ) ) ; if ( callback ) { input [ _callback ] ( callback ) ; }
input . off ( '.i' ) . unwrap ( ) ; $ ( _label + '[for="' + input [ 0 ] . id + '"]' ) . add ( input . closest ( _label ) ) . off ( '.i' ) ; } }
function option ( input , state , regular ) { if ( input . data ( _iCheck ) ) { return input . data ( _iCheck ) . o [ state + ( regular ? '' : 'Class' ) ] ; } }
function capitalize ( string ) { return string . charAt ( 0 ) . toUpperCase ( ) + string . slice ( 1 ) ; }
function callbacks ( input , checked , callback , keep ) { if ( ! keep ) { if ( checked ) { input [ _callback ] ( 'ifToggled' ) ; }
input [ _callback ] ( 'ifChanged' ) [ _callback ] ( 'if' + capitalize ( callback ) ) ; } } } ) ( window . jQuery || window . Zepto ) ; ; ; ( function ( ) { 'use strict' ; function FastClick ( layer , options ) { var oldOnClick ; options = options || { } ; this . trackingClick = false ; this . trackingClickStart = 0 ; this . targetElement = null ; this . touchStartX = 0 ; this . touchStartY = 0 ; this . lastTouchIdentifier = 0 ; this . touchBoundary = options . touchBoundary || 10 ; this . layer = layer ; this . tapDelay = options . tapDelay || 200 ; this . tapTimeout = options . tapTimeout || 700 ; if ( FastClick . notNeeded ( layer ) ) { return ; }
function bind ( method , context ) { return function ( ) { return method . apply ( context , arguments ) ; } ; }
var methods = [ 'onMouse' , 'onClick' , 'onTouchStart' , 'onTouchMove' , 'onTouchEnd' , 'onTouchCancel' ] ; var context = this ; for ( var i = 0 , l = methods . length ; i < l ; i ++ ) { context [ methods [ i ] ] = bind ( context [ methods [ i ] ] , context ) ; }
if ( deviceIsAndroid ) { layer . addEventListener ( 'mouseover' , this . onMouse , true ) ; layer . addEventListener ( 'mousedown' , this . onMouse , true ) ; layer . addEventListener ( 'mouseup' , this . onMouse , true ) ; }
layer . addEventListener ( 'click' , this . onClick , true ) ; layer . addEventListener ( 'touchstart' , this . onTouchStart , false ) ; layer . addEventListener ( 'touchmove' , this . onTouchMove , false ) ; layer . addEventListener ( 'touchend' , this . onTouchEnd , false ) ; layer . addEventListener ( 'touchcancel' , this . onTouchCancel , false ) ; if ( ! Event . prototype . stopImmediatePropagation ) { layer . removeEventListener = function ( type , callback , capture ) { var rmv = Node . prototype . removeEventListener ; if ( type === 'click' ) { rmv . call ( layer , type , callback . hijacked || callback , capture ) ; } else { rmv . call ( layer , type , callback , capture ) ; } } ; layer . addEventListener = function ( type , callback , capture ) { var adv = Node . prototype . addEventListener ; if ( type === 'click' ) { adv . call ( layer , type , callback . hijacked || ( callback . hijacked = function ( event ) { if ( ! event . propagationStopped ) { callback ( event ) ; } } ) , capture ) ; } else { adv . call ( layer , type , callback , capture ) ; } } ; }
if ( typeof layer . onclick === 'function' ) { oldOnClick = layer . onclick ; layer . addEventListener ( 'click' , function ( event ) { oldOnClick ( event ) ; } , false ) ; layer . onclick = null ; } }
var deviceIsWindowsPhone = navigator . userAgent . indexOf ( "Windows Phone" ) >= 0 ; var deviceIsAndroid = navigator . userAgent . indexOf ( 'Android' ) > 0 && ! deviceIsWindowsPhone ; var deviceIsIOS = /iP(ad|hone|od)/ . test ( navigator . userAgent ) && ! deviceIsWindowsPhone ; var deviceIsIOS4 = deviceIsIOS && ( /OS 4_\d(_\d)?/ ) . test ( navigator . userAgent ) ; var deviceIsIOSWithBadTarget = deviceIsIOS && ( /OS [6-7]_\d/ ) . test ( navigator . userAgent ) ; var deviceIsBlackBerry10 = navigator . userAgent . indexOf ( 'BB10' ) > 0 ; FastClick . prototype . needsClick = function ( target ) { switch ( target . nodeName . toLowerCase ( ) ) { case 'button' : case 'select' : case 'textarea' : if ( target . disabled ) { return true ; }
break ; case 'input' : if ( ( deviceIsIOS && target . type === 'file' ) || target . disabled ) { return true ; }
break ; case 'label' : case 'iframe' : case 'video' : return true ; }
return ( /\bneedsclick\b/ ) . test ( target . className ) ; } ; FastClick . prototype . needsFocus = function ( target ) { switch ( target . nodeName . toLowerCase ( ) ) { case 'textarea' : return true ; case 'select' : return ! deviceIsAndroid ; case 'input' : switch ( target . type ) { case 'button' : case 'checkbox' : case 'file' : case 'image' : case 'radio' : case 'submit' : return false ; }
return ! target . disabled && ! target . readOnly ; default : return ( /\bneedsfocus\b/ ) . test ( target . className ) ; } } ; FastClick . prototype . sendClick = function ( targetElement , event ) { var clickEvent , touch ; if ( document . activeElement && document . activeElement !== targetElement ) { document . activeElement . blur ( ) ; }
touch = event . changedTouches [ 0 ] ; clickEvent = document . createEvent ( 'MouseEvents' ) ; clickEvent . initMouseEvent ( this . determineEventType ( targetElement ) , true , true , window , 1 , touch . screenX , touch . screenY , touch . clientX , touch . clientY , false , false , false , false , 0 , null ) ; clickEvent . forwardedTouchEvent = true ; targetElement . dispatchEvent ( clickEvent ) ; } ; FastClick . prototype . determineEventType = function ( targetElement ) { if ( deviceIsAndroid && targetElement . tagName . toLowerCase ( ) === 'select' ) { return 'mousedown' ; }
return 'click' ; } ; FastClick . prototype . focus = function ( targetElement ) { var length ; if ( deviceIsIOS && targetElement . setSelectionRange && targetElement . type . indexOf ( 'date' ) !== 0 && targetElement . type !== 'time' && targetElement . type !== 'month' ) { length = targetElement . value . length ; targetElement . setSelectionRange ( length , length ) ; } else { targetElement . focus ( ) ; } } ; FastClick . prototype . updateScrollParent = function ( targetElement ) { var scrollParent , parentElement ; scrollParent = targetElement . fastClickScrollParent ; if ( ! scrollParent || ! scrollParent . contains ( targetElement ) ) { parentElement = targetElement ; do { if ( parentElement . scrollHeight > parentElement . offsetHeight ) { scrollParent = parentElement ; targetElement . fastClickScrollParent = parentElement ; break ; }
parentElement = parentElement . parentElement ; } while ( parentElement ) ; }
if ( scrollParent ) { scrollParent . fastClickLastScrollTop = scrollParent . scrollTop ; } } ; FastClick . prototype . getTargetElementFromEventTarget = function ( eventTarget ) { if ( eventTarget . nodeType === Node . TEXT _NODE ) { return eventTarget . parentNode ; }
return eventTarget ; } ; FastClick . prototype . onTouchStart = function ( event ) { var targetElement , touch , selection ; if ( event . targetTouches . length > 1 ) { return true ; }
targetElement = this . getTargetElementFromEventTarget ( event . target ) ; touch = event . targetTouches [ 0 ] ; if ( deviceIsIOS ) { selection = window . getSelection ( ) ; if ( selection . rangeCount && ! selection . isCollapsed ) { return true ; }
if ( ! deviceIsIOS4 ) { if ( touch . identifier && touch . identifier === this . lastTouchIdentifier ) { event . preventDefault ( ) ; return false ; }
this . lastTouchIdentifier = touch . identifier ; this . updateScrollParent ( targetElement ) ; } }
this . trackingClick = true ; this . trackingClickStart = event . timeStamp ; this . targetElement = targetElement ; this . touchStartX = touch . pageX ; this . touchStartY = touch . pageY ; if ( ( event . timeStamp - this . lastClickTime ) < this . tapDelay ) { event . preventDefault ( ) ; }
return true ; } ; FastClick . prototype . touchHasMoved = function ( event ) { var touch = event . changedTouches [ 0 ] , boundary = this . touchBoundary ; if ( Math . abs ( touch . pageX - this . touchStartX ) > boundary || Math . abs ( touch . pageY - this . touchStartY ) > boundary ) { return true ; }
return false ; } ; FastClick . prototype . onTouchMove = function ( event ) { if ( ! this . trackingClick ) { return true ; }
if ( this . targetElement !== this . getTargetElementFromEventTarget ( event . target ) || this . touchHasMoved ( event ) ) { this . trackingClick = false ; this . targetElement = null ; }
return true ; } ; FastClick . prototype . findControl = function ( labelElement ) { if ( labelElement . control !== undefined ) { return labelElement . control ; }
if ( labelElement . htmlFor ) { return document . getElementById ( labelElement . htmlFor ) ; }
return labelElement . querySelector ( 'button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea' ) ; } ; FastClick . prototype . onTouchEnd = function ( event ) { var forElement , trackingClickStart , targetTagName , scrollParent , touch , targetElement = this . targetElement ; if ( ! this . trackingClick ) { return true ; }
if ( ( event . timeStamp - this . lastClickTime ) < this . tapDelay ) { this . cancelNextClick = true ; return true ; }
if ( ( event . timeStamp - this . trackingClickStart ) > this . tapTimeout ) { return true ; }
this . cancelNextClick = false ; this . lastClickTime = event . timeStamp ; trackingClickStart = this . trackingClickStart ; this . trackingClick = false ; this . trackingClickStart = 0 ; if ( deviceIsIOSWithBadTarget ) { touch = event . changedTouches [ 0 ] ; targetElement = document . elementFromPoint ( touch . pageX - window . pageXOffset , touch . pageY - window . pageYOffset ) || targetElement ; targetElement . fastClickScrollParent = this . targetElement . fastClickScrollParent ; }
targetTagName = targetElement . tagName . toLowerCase ( ) ; if ( targetTagName === 'label' ) { forElement = this . findControl ( targetElement ) ; if ( forElement ) { this . focus ( targetElement ) ; if ( deviceIsAndroid ) { return false ; }
targetElement = forElement ; } } else if ( this . needsFocus ( targetElement ) ) { if ( ( event . timeStamp - trackingClickStart ) > 100 || ( deviceIsIOS && window . top !== window && targetTagName === 'input' ) ) { this . targetElement = null ; return false ; }
this . focus ( targetElement ) ; this . sendClick ( targetElement , event ) ; if ( ! deviceIsIOS || targetTagName !== 'select' ) { this . targetElement = null ; event . preventDefault ( ) ; }
return false ; }
if ( deviceIsIOS && ! deviceIsIOS4 ) { scrollParent = targetElement . fastClickScrollParent ; if ( scrollParent && scrollParent . fastClickLastScrollTop !== scrollParent . scrollTop ) { return true ; } }
if ( ! this . needsClick ( targetElement ) ) { event . preventDefault ( ) ; this . sendClick ( targetElement , event ) ; }
return false ; } ; FastClick . prototype . onTouchCancel = function ( ) { this . trackingClick = false ; this . targetElement = null ; } ; FastClick . prototype . onMouse = function ( event ) { if ( ! this . targetElement ) { return true ; }
if ( event . forwardedTouchEvent ) { return true ; }
if ( ! event . cancelable ) { return true ; }
if ( ! this . needsClick ( this . targetElement ) || this . cancelNextClick ) { if ( event . stopImmediatePropagation ) { event . stopImmediatePropagation ( ) ; } else { event . propagationStopped = true ; }
event . stopPropagation ( ) ; event . preventDefault ( ) ; return false ; }
return true ; } ; FastClick . prototype . onClick = function ( event ) { var permitted ; if ( this . trackingClick ) { this . targetElement = null ; this . trackingClick = false ; return true ; }
if ( event . target . type === 'submit' && event . detail === 0 ) { return true ; }
permitted = this . onMouse ( event ) ; if ( ! permitted ) { this . targetElement = null ; }
return permitted ; } ; FastClick . prototype . destroy = function ( ) { var layer = this . layer ; if ( deviceIsAndroid ) { layer . removeEventListener ( 'mouseover' , this . onMouse , true ) ; layer . removeEventListener ( 'mousedown' , this . onMouse , true ) ; layer . removeEventListener ( 'mouseup' , this . onMouse , true ) ; }
layer . removeEventListener ( 'click' , this . onClick , true ) ; layer . removeEventListener ( 'touchstart' , this . onTouchStart , false ) ; layer . removeEventListener ( 'touchmove' , this . onTouchMove , false ) ; layer . removeEventListener ( 'touchend' , this . onTouchEnd , false ) ; layer . removeEventListener ( 'touchcancel' , this . onTouchCancel , false ) ; } ; FastClick . notNeeded = function ( layer ) { var metaViewport ; var chromeVersion ; var blackberryVersion ; var firefoxVersion ; if ( typeof window . ontouchstart === 'undefined' ) { return true ; }
chromeVersion = + ( /Chrome\/([0-9]+)/ . exec ( navigator . userAgent ) || [ , 0 ] ) [ 1 ] ; if ( chromeVersion ) { if ( deviceIsAndroid ) { metaViewport = document . querySelector ( 'meta[name=viewport]' ) ; if ( metaViewport ) { if ( metaViewport . content . indexOf ( 'user-scalable=no' ) !== - 1 ) { return true ; }
if ( chromeVersion > 31 && document . documentElement . scrollWidth <= window . outerWidth ) { return true ; } }
} else { return true ; } }
if ( deviceIsBlackBerry10 ) { blackberryVersion = navigator . userAgent . match ( /Version\/([0-9]*)\.([0-9]*)/ ) ; if ( blackberryVersion [ 1 ] >= 10 && blackberryVersion [ 2 ] >= 3 ) { metaViewport = document . querySelector ( 'meta[name=viewport]' ) ; if ( metaViewport ) { if ( metaViewport . content . indexOf ( 'user-scalable=no' ) !== - 1 ) { return true ; }
if ( document . documentElement . scrollWidth <= window . outerWidth ) { return true ; } } } }
if ( layer . style . msTouchAction === 'none' || layer . style . touchAction === 'manipulation' ) { return true ; }
firefoxVersion = + ( /Firefox\/([0-9]+)/ . exec ( navigator . userAgent ) || [ , 0 ] ) [ 1 ] ; if ( firefoxVersion >= 27 ) { metaViewport = document . querySelector ( 'meta[name=viewport]' ) ; if ( metaViewport && ( metaViewport . content . indexOf ( 'user-scalable=no' ) !== - 1 || document . documentElement . scrollWidth <= window . outerWidth ) ) { return true ; } }
if ( layer . style . touchAction === 'none' || layer . style . touchAction === 'manipulation' ) { return true ; }
return false ; } ; FastClick . attach = function ( layer , options ) { return new FastClick ( layer , options ) ; } ; if ( typeof define === 'function' && typeof define . amd === 'object' && define . amd ) { define ( function ( ) { return FastClick ; } ) ; } else if ( typeof module !== 'undefined' && module . exports ) { module . exports = FastClick . attach ; module . exports . FastClick = FastClick ; } else { window . FastClick = FastClick ; } } ( ) ) ; ; ; ( function ( global , factory ) { typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( ) : typeof define === 'function' && define . amd ? define ( factory ) : global . moment = factory ( ) } ( this , ( function ( ) { 'use strict' ; var hookCallback ; function hooks ( ) { return hookCallback . apply ( null , arguments ) ; }
function setHookCallback ( callback ) { hookCallback = callback ; }
function isArray ( input ) { return input instanceof Array || Object . prototype . toString . call ( input ) === '[object Array]' ; }
function isObject ( input ) { return input != null && Object . prototype . toString . call ( input ) === '[object Object]' ; }
function isObjectEmpty ( obj ) { if ( Object . getOwnPropertyNames ) { return ( Object . getOwnPropertyNames ( obj ) . length === 0 ) ; } else { var k ; for ( k in obj ) { if ( obj . hasOwnProperty ( k ) ) { return false ; } }
return true ; } }
function isUndefined ( input ) { return input === void 0 ; }
function isNumber ( input ) { return typeof input === 'number' || Object . prototype . toString . call ( input ) === '[object Number]' ; }
function isDate ( input ) { return input instanceof Date || Object . prototype . toString . call ( input ) === '[object Date]' ; }
function map ( arr , fn ) { var res = [ ] , i ; for ( i = 0 ; i < arr . length ; ++ i ) { res . push ( fn ( arr [ i ] , i ) ) ; }
return res ; }
function hasOwnProp ( a , b ) { return Object . prototype . hasOwnProperty . call ( a , b ) ; }
function extend ( a , b ) { for ( var i in b ) { if ( hasOwnProp ( b , i ) ) { a [ i ] = b [ i ] ; } }
if ( hasOwnProp ( b , 'toString' ) ) { a . toString = b . toString ; }
if ( hasOwnProp ( b , 'valueOf' ) ) { a . valueOf = b . valueOf ; }
return a ; }
function createUTC ( input , format , locale , strict ) { return createLocalOrUTC ( input , format , locale , strict , true ) . utc ( ) ; }
function defaultParsingFlags ( ) { return { empty : false , unusedTokens : [ ] , unusedInput : [ ] , overflow : - 2 , charsLeftOver : 0 , nullInput : false , invalidMonth : null , invalidFormat : false , userInvalidated : false , iso : false , parsedDateParts : [ ] , meridiem : null , rfc2822 : false , weekdayMismatch : false } ; }
function getParsingFlags ( m ) { if ( m . _pf == null ) { m . _pf = defaultParsingFlags ( ) ; }
return m . _pf ; }
var some ; if ( Array . prototype . some ) { some = Array . prototype . some ; } else { some = function ( fun ) { var t = Object ( this ) ; var len = t . length >>> 0 ; for ( var i = 0 ; i < len ; i ++ ) { if ( i in t && fun . call ( this , t [ i ] , i , t ) ) { return true ; } }
return false ; } ; }
function isValid ( m ) { if ( m . _isValid == null ) { var flags = getParsingFlags ( m ) ; var parsedParts = some . call ( flags . parsedDateParts , function ( i ) { return i != null ; } ) ; var isNowValid = ! isNaN ( m . _d . getTime ( ) ) && flags . overflow < 0 && ! flags . empty && ! flags . invalidMonth && ! flags . invalidWeekday && ! flags . weekdayMismatch && ! flags . nullInput && ! flags . invalidFormat && ! flags . userInvalidated && ( ! flags . meridiem || ( flags . meridiem && parsedParts ) ) ; if ( m . _strict ) { isNowValid = isNowValid && flags . charsLeftOver === 0 && flags . unusedTokens . length === 0 && flags . bigHour === undefined ; }
if ( Object . isFrozen == null || ! Object . isFrozen ( m ) ) { m . _isValid = isNowValid ; }
else { return isNowValid ; } }
return m . _isValid ; }
function createInvalid ( flags ) { var m = createUTC ( NaN ) ; if ( flags != null ) { extend ( getParsingFlags ( m ) , flags ) ; }
else { getParsingFlags ( m ) . userInvalidated = true ; }
return m ; }
var momentProperties = hooks . momentProperties = [ ] ; function copyConfig ( to , from ) { var i , prop , val ; if ( ! isUndefined ( from . _isAMomentObject ) ) { to . _isAMomentObject = from . _isAMomentObject ; }
if ( ! isUndefined ( from . _i ) ) { to . _i = from . _i ; }
if ( ! isUndefined ( from . _f ) ) { to . _f = from . _f ; }
if ( ! isUndefined ( from . _l ) ) { to . _l = from . _l ; }
if ( ! isUndefined ( from . _strict ) ) { to . _strict = from . _strict ; }
if ( ! isUndefined ( from . _tzm ) ) { to . _tzm = from . _tzm ; }
if ( ! isUndefined ( from . _isUTC ) ) { to . _isUTC = from . _isUTC ; }
if ( ! isUndefined ( from . _offset ) ) { to . _offset = from . _offset ; }
if ( ! isUndefined ( from . _pf ) ) { to . _pf = getParsingFlags ( from ) ; }
if ( ! isUndefined ( from . _locale ) ) { to . _locale = from . _locale ; }
if ( momentProperties . length > 0 ) { for ( i = 0 ; i < momentProperties . length ; i ++ ) { prop = momentProperties [ i ] ; val = from [ prop ] ; if ( ! isUndefined ( val ) ) { to [ prop ] = val ; } } }
return to ; }
var updateInProgress = false ; function Moment ( config ) { copyConfig ( this , config ) ; this . _d = new Date ( config . _d != null ? config . _d . getTime ( ) : NaN ) ; if ( ! this . isValid ( ) ) { this . _d = new Date ( NaN ) ; }
if ( updateInProgress === false ) { updateInProgress = true ; hooks . updateOffset ( this ) ; updateInProgress = false ; } }
function isMoment ( obj ) { return obj instanceof Moment || ( obj != null && obj . _isAMomentObject != null ) ; }
function absFloor ( number ) { if ( number < 0 ) { return Math . ceil ( number ) || 0 ; } else { return Math . floor ( number ) ; } }
function toInt ( argumentForCoercion ) { var coercedNumber = + argumentForCoercion , value = 0 ; if ( coercedNumber !== 0 && isFinite ( coercedNumber ) ) { value = absFloor ( coercedNumber ) ; }
return value ; }
function compareArrays ( array1 , array2 , dontConvert ) { var len = Math . min ( array1 . length , array2 . length ) , lengthDiff = Math . abs ( array1 . length - array2 . length ) , diffs = 0 , i ; for ( i = 0 ; i < len ; i ++ ) { if ( ( dontConvert && array1 [ i ] !== array2 [ i ] ) || ( ! dontConvert && toInt ( array1 [ i ] ) !== toInt ( array2 [ i ] ) ) ) { diffs ++ ; } }
return diffs + lengthDiff ; }
function warn ( msg ) { if ( hooks . suppressDeprecationWarnings === false && ( typeof console !== 'undefined' ) && console . warn ) { console . warn ( 'Deprecation warning: ' + msg ) ; } }
function deprecate ( msg , fn ) { var firstTime = true ; return extend ( function ( ) { if ( hooks . deprecationHandler != null ) { hooks . deprecationHandler ( null , msg ) ; }
if ( firstTime ) { var args = [ ] ; var arg ; for ( var i = 0 ; i < arguments . length ; i ++ ) { arg = '' ; if ( typeof arguments [ i ] === 'object' ) { arg += '\n[' + i + '] ' ; for ( var key in arguments [ 0 ] ) { arg += key + ': ' + arguments [ 0 ] [ key ] + ', ' ; }
arg = arg . slice ( 0 , - 2 ) ; } else { arg = arguments [ i ] ; }
args . push ( arg ) ; }
warn ( msg + '\nArguments: ' + Array . prototype . slice . call ( args ) . join ( '' ) + '\n' + ( new Error ( ) ) . stack ) ; firstTime = false ; }
return fn . apply ( this , arguments ) ; } , fn ) ; }
var deprecations = { } ; function deprecateSimple ( name , msg ) { if ( hooks . deprecationHandler != null ) { hooks . deprecationHandler ( name , msg ) ; }
if ( ! deprecations [ name ] ) { warn ( msg ) ; deprecations [ name ] = true ; } }
hooks . suppressDeprecationWarnings = false ; hooks . deprecationHandler = null ; function isFunction ( input ) { return input instanceof Function || Object . prototype . toString . call ( input ) === '[object Function]' ; }
function set ( config ) { var prop , i ; for ( i in config ) { prop = config [ i ] ; if ( isFunction ( prop ) ) { this [ i ] = prop ; } else { this [ '_' + i ] = prop ; } }
this . _config = config ; this . _dayOfMonthOrdinalParseLenient = new RegExp ( ( this . _dayOfMonthOrdinalParse . source || this . _ordinalParse . source ) +
'|' + ( /\d{1,2}/ ) . source ) ; }
function mergeConfigs ( parentConfig , childConfig ) { var res = extend ( { } , parentConfig ) , prop ; for ( prop in childConfig ) { if ( hasOwnProp ( childConfig , prop ) ) { if ( isObject ( parentConfig [ prop ] ) && isObject ( childConfig [ prop ] ) ) { res [ prop ] = { } ; extend ( res [ prop ] , parentConfig [ prop ] ) ; extend ( res [ prop ] , childConfig [ prop ] ) ; } else if ( childConfig [ prop ] != null ) { res [ prop ] = childConfig [ prop ] ; } else { delete res [ prop ] ; } } }
for ( prop in parentConfig ) { if ( hasOwnProp ( parentConfig , prop ) && ! hasOwnProp ( childConfig , prop ) && isObject ( parentConfig [ prop ] ) ) { res [ prop ] = extend ( { } , res [ prop ] ) ; } }
return res ; }
function Locale ( config ) { if ( config != null ) { this . set ( config ) ; } }
var keys ; if ( Object . keys ) { keys = Object . keys ; } else { keys = function ( obj ) { var i , res = [ ] ; for ( i in obj ) { if ( hasOwnProp ( obj , i ) ) { res . push ( i ) ; } }
return res ; } ; }
var defaultCalendar = { sameDay : '[Today at] LT' , nextDay : '[Tomorrow at] LT' , nextWeek : 'dddd [at] LT' , lastDay : '[Yesterday at] LT' , lastWeek : '[Last] dddd [at] LT' , sameElse : 'L' } ; function calendar ( key , mom , now ) { var output = this . _calendar [ key ] || this . _calendar [ 'sameElse' ] ; return isFunction ( output ) ? output . call ( mom , now ) : output ; }
var defaultLongDateFormat = { LTS : 'h:mm:ss A' , LT : 'h:mm A' , L : 'MM/DD/YYYY' , LL : 'MMMM D, YYYY' , LLL : 'MMMM D, YYYY h:mm A' , LLLL : 'dddd, MMMM D, YYYY h:mm A' } ; function longDateFormat ( key ) { var format = this . _longDateFormat [ key ] , formatUpper = this . _longDateFormat [ key . toUpperCase ( ) ] ; if ( format || ! formatUpper ) { return format ; }
this . _longDateFormat [ key ] = formatUpper . replace ( /MMMM|MM|DD|dddd/g , function ( val ) { return val . slice ( 1 ) ; } ) ; return this . _longDateFormat [ key ] ; }
var defaultInvalidDate = 'Invalid date' ; function invalidDate ( ) { return this . _invalidDate ; }
var defaultOrdinal = '%d' ; var defaultDayOfMonthOrdinalParse = /\d{1,2}/ ; function ordinal ( number ) { return this . _ordinal . replace ( '%d' , number ) ; }
var defaultRelativeTime = { future : 'in %s' , past : '%s ago' , s : 'a few seconds' , ss : '%d seconds' , m : 'a minute' , mm : '%d minutes' , h : 'an hour' , hh : '%d hours' , d : 'a day' , dd : '%d days' , M : 'a month' , MM : '%d months' , y : 'a year' , yy : '%d years' } ; function relativeTime ( number , withoutSuffix , string , isFuture ) { var output = this . _relativeTime [ string ] ; return ( isFunction ( output ) ) ? output ( number , withoutSuffix , string , isFuture ) : output . replace ( /%d/i , number ) ; }
function pastFuture ( diff , output ) { var format = this . _relativeTime [ diff > 0 ? 'future' : 'past' ] ; return isFunction ( format ) ? format ( output ) : format . replace ( /%s/i , output ) ; }
var aliases = { } ; function addUnitAlias ( unit , shorthand ) { var lowerCase = unit . toLowerCase ( ) ; aliases [ lowerCase ] = aliases [ lowerCase + 's' ] = aliases [ shorthand ] = unit ; }
function normalizeUnits ( units ) { return typeof units === 'string' ? aliases [ units ] || aliases [ units . toLowerCase ( ) ] : undefined ; }
function normalizeObjectUnits ( inputObject ) { var normalizedInput = { } , normalizedProp , prop ; for ( prop in inputObject ) { if ( hasOwnProp ( inputObject , prop ) ) { normalizedProp = normalizeUnits ( prop ) ; if ( normalizedProp ) { normalizedInput [ normalizedProp ] = inputObject [ prop ] ; } } }
return normalizedInput ; }
var priorities = { } ; function addUnitPriority ( unit , priority ) { priorities [ unit ] = priority ; }
function getPrioritizedUnits ( unitsObj ) { var units = [ ] ; for ( var u in unitsObj ) { units . push ( { unit : u , priority : priorities [ u ] } ) ; }
units . sort ( function ( a , b ) { return a . priority - b . priority ; } ) ; return units ; }
function zeroFill ( number , targetLength , forceSign ) { var absNumber = '' + Math . abs ( number ) , zerosToFill = targetLength - absNumber . length , sign = number >= 0 ; return ( sign ? ( forceSign ? '+' : '' ) : '-' ) +
Math . pow ( 10 , Math . max ( 0 , zerosToFill ) ) . toString ( ) . substr ( 1 ) + absNumber ; }
var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g ; var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g ; var formatFunctions = { } ; var formatTokenFunctions = { } ; function addFormatToken ( token , padded , ordinal , callback ) { var func = callback ; if ( typeof callback === 'string' ) { func = function ( ) { return this [ callback ] ( ) ; } ; }
if ( token ) { formatTokenFunctions [ token ] = func ; }
if ( padded ) { formatTokenFunctions [ padded [ 0 ] ] = function ( ) { return zeroFill ( func . apply ( this , arguments ) , padded [ 1 ] , padded [ 2 ] ) ; } ; }
if ( ordinal ) { formatTokenFunctions [ ordinal ] = function ( ) { return this . localeData ( ) . ordinal ( func . apply ( this , arguments ) , token ) ; } ; } }
function removeFormattingTokens ( input ) { if ( input . match ( /\[[\s\S]/ ) ) { return input . replace ( /^\[|\]$/g , '' ) ; }
return input . replace ( /\\/g , '' ) ; }
function makeFormatFunction ( format ) { var array = format . match ( formattingTokens ) , i , length ; for ( i = 0 , length = array . length ; i < length ; i ++ ) { if ( formatTokenFunctions [ array [ i ] ] ) { array [ i ] = formatTokenFunctions [ array [ i ] ] ; } else { array [ i ] = removeFormattingTokens ( array [ i ] ) ; } }
return function ( mom ) { var output = '' , i ; for ( i = 0 ; i < length ; i ++ ) { output += isFunction ( array [ i ] ) ? array [ i ] . call ( mom , format ) : array [ i ] ; }
return output ; } ; }
function formatMoment ( m , format ) { if ( ! m . isValid ( ) ) { return m . localeData ( ) . invalidDate ( ) ; }
format = expandFormat ( format , m . localeData ( ) ) ; formatFunctions [ format ] = formatFunctions [ format ] || makeFormatFunction ( format ) ; return formatFunctions [ format ] ( m ) ; }
function expandFormat ( format , locale ) { var i = 5 ; function replaceLongDateFormatTokens ( input ) { return locale . longDateFormat ( input ) || input ; }
localFormattingTokens . lastIndex = 0 ; while ( i >= 0 && localFormattingTokens . test ( format ) ) { format = format . replace ( localFormattingTokens , replaceLongDateFormatTokens ) ; localFormattingTokens . lastIndex = 0 ; i -= 1 ; }
return format ; }
var match1 = /\d/ ; var match2 = /\d\d/ ; var match3 = /\d{3}/ ; var match4 = /\d{4}/ ; var match6 = /[+-]?\d{6}/ ; var match1to2 = /\d\d?/ ; var match3to4 = /\d\d\d\d?/ ; var match5to6 = /\d\d\d\d\d\d?/ ; var match1to3 = /\d{1,3}/ ; var match1to4 = /\d{1,4}/ ; var match1to6 = /[+-]?\d{1,6}/ ; var matchUnsigned = /\d+/ ; var matchSigned = /[+-]?\d+/ ; var matchOffset = /Z|[+-]\d\d:?\d\d/gi ; var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi ; var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/ ; var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i ; var regexes = { } ; function addRegexToken ( token , regex , strictRegex ) { regexes [ token ] = isFunction ( regex ) ? regex : function ( isStrict , localeData ) { return ( isStrict && strictRegex ) ? strictRegex : regex ; } ; }
function getParseRegexForToken ( token , config ) { if ( ! hasOwnProp ( regexes , token ) ) { return new RegExp ( unescapeFormat ( token ) ) ; }
return regexes [ token ] ( config . _strict , config . _locale ) ; }
function unescapeFormat ( s ) { return regexEscape ( s . replace ( '\\' , '' ) . replace ( /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g , function ( matched , p1 , p2 , p3 , p4 ) { return p1 || p2 || p3 || p4 ; } ) ) ; }
function regexEscape ( s ) { return s . replace ( /[-\/\\^$*+?.()|[\]{}]/g , '\\$&' ) ; }
var tokens = { } ; function addParseToken ( token , callback ) { var i , func = callback ; if ( typeof token === 'string' ) { token = [ token ] ; }
if ( isNumber ( callback ) ) { func = function ( input , array ) { array [ callback ] = toInt ( input ) ; } ; }
for ( i = 0 ; i < token . length ; i ++ ) { tokens [ token [ i ] ] = func ; } }
function addWeekParseToken ( token , callback ) { addParseToken ( token , function ( input , array , config , token ) { config . _w = config . _w || { } ; callback ( input , config . _w , config , token ) ; } ) ; }
function addTimeToArrayFromToken ( token , input , config ) { if ( input != null && hasOwnProp ( tokens , token ) ) { tokens [ token ] ( input , config . _a , config , token ) ; } }
var YEAR = 0 ; var MONTH = 1 ; var DATE = 2 ; var HOUR = 3 ; var MINUTE = 4 ; var SECOND = 5 ; var MILLISECOND = 6 ; var WEEK = 7 ; var WEEKDAY = 8 ; addFormatToken ( 'Y' , 0 , 0 , function ( ) { var y = this . year ( ) ; return y <= 9999 ? '' + y : '+' + y ; } ) ; addFormatToken ( 0 , [ 'YY' , 2 ] , 0 , function ( ) { return this . year ( ) % 100 ; } ) ; addFormatToken ( 0 , [ 'YYYY' , 4 ] , 0 , 'year' ) ; addFormatToken ( 0 , [ 'YYYYY' , 5 ] , 0 , 'year' ) ; addFormatToken ( 0 , [ 'YYYYYY' , 6 , true ] , 0 , 'year' ) ; addUnitAlias ( 'year' , 'y' ) ; addUnitPriority ( 'year' , 1 ) ; addRegexToken ( 'Y' , matchSigned ) ; addRegexToken ( 'YY' , match1to2 , match2 ) ; addRegexToken ( 'YYYY' , match1to4 , match4 ) ; addRegexToken ( 'YYYYY' , match1to6 , match6 ) ; addRegexToken ( 'YYYYYY' , match1to6 , match6 ) ; addParseToken ( [ 'YYYYY' , 'YYYYYY' ] , YEAR ) ; addParseToken ( 'YYYY' , function ( input , array ) { array [ YEAR ] = input . length === 2 ? hooks . parseTwoDigitYear ( input ) : toInt ( input ) ; } ) ; addParseToken ( 'YY' , function ( input , array ) { array [ YEAR ] = hooks . parseTwoDigitYear ( input ) ; } ) ; addParseToken ( 'Y' , function ( input , array ) { array [ YEAR ] = parseInt ( input , 10 ) ; } ) ; function daysInYear ( year ) { return isLeapYear ( year ) ? 366 : 365 ; }
function isLeapYear ( year ) { return ( year % 4 === 0 && year % 100 !== 0 ) || year % 400 === 0 ; }
hooks . parseTwoDigitYear = function ( input ) { return toInt ( input ) + ( toInt ( input ) > 68 ? 1900 : 2000 ) ; } ; var getSetYear = makeGetSet ( 'FullYear' , true ) ; function getIsLeapYear ( ) { return isLeapYear ( this . year ( ) ) ; }
function makeGetSet ( unit , keepTime ) { return function ( value ) { if ( value != null ) { set$1 ( this , unit , value ) ; hooks . updateOffset ( this , keepTime ) ; return this ; } else { return get ( this , unit ) ; } } ; }
function get ( mom , unit ) { return mom . isValid ( ) ? mom . _d [ 'get' + ( mom . _isUTC ? 'UTC' : '' ) + unit ] ( ) : NaN ; }
function set$1 ( mom , unit , value ) { if ( mom . isValid ( ) && ! isNaN ( value ) ) { if ( unit === 'FullYear' && isLeapYear ( mom . year ( ) ) && mom . month ( ) === 1 && mom . date ( ) === 29 ) { mom . _d [ 'set' + ( mom . _isUTC ? 'UTC' : '' ) + unit ] ( value , mom . month ( ) , daysInMonth ( value , mom . month ( ) ) ) ; }
else { mom . _d [ 'set' + ( mom . _isUTC ? 'UTC' : '' ) + unit ] ( value ) ; } } }
function stringGet ( units ) { units = normalizeUnits ( units ) ; if ( isFunction ( this [ units ] ) ) { return this [ units ] ( ) ; }
return this ; }
function stringSet ( units , value ) { if ( typeof units === 'object' ) { units = normalizeObjectUnits ( units ) ; var prioritized = getPrioritizedUnits ( units ) ; for ( var i = 0 ; i < prioritized . length ; i ++ ) { this [ prioritized [ i ] . unit ] ( units [ prioritized [ i ] . unit ] ) ; } } else { units = normalizeUnits ( units ) ; if ( isFunction ( this [ units ] ) ) { return this [ units ] ( value ) ; } }
return this ; }
function mod ( n , x ) { return ( ( n % x ) + x ) % x ; }
var indexOf ; if ( Array . prototype . indexOf ) { indexOf = Array . prototype . indexOf ; } else { indexOf = function ( o ) { var i ; for ( i = 0 ; i < this . length ; ++ i ) { if ( this [ i ] === o ) { return i ; } }
return - 1 ; } ; }
function daysInMonth ( year , month ) { if ( isNaN ( year ) || isNaN ( month ) ) { return NaN ; }
var modMonth = mod ( month , 12 ) ; year += ( month - modMonth ) / 12 ; return modMonth === 1 ? ( isLeapYear ( year ) ? 29 : 28 ) : ( 31 - modMonth % 7 % 2 ) ; }
addFormatToken ( 'M' , [ 'MM' , 2 ] , 'Mo' , function ( ) { return this . month ( ) + 1 ; } ) ; addFormatToken ( 'MMM' , 0 , 0 , function ( format ) { return this . localeData ( ) . monthsShort ( this , format ) ; } ) ; addFormatToken ( 'MMMM' , 0 , 0 , function ( format ) { return this . localeData ( ) . months ( this , format ) ; } ) ; addUnitAlias ( 'month' , 'M' ) ; addUnitPriority ( 'month' , 8 ) ; addRegexToken ( 'M' , match1to2 ) ; addRegexToken ( 'MM' , match1to2 , match2 ) ; addRegexToken ( 'MMM' , function ( isStrict , locale ) { return locale . monthsShortRegex ( isStrict ) ; } ) ; addRegexToken ( 'MMMM' , function ( isStrict , locale ) { return locale . monthsRegex ( isStrict ) ; } ) ; addParseToken ( [ 'M' , 'MM' ] , function ( input , array ) { array [ MONTH ] = toInt ( input ) - 1 ; } ) ; addParseToken ( [ 'MMM' , 'MMMM' ] , function ( input , array , config , token ) { var month = config . _locale . monthsParse ( input , token , config . _strict ) ; if ( month != null ) { array [ MONTH ] = month ; } else { getParsingFlags ( config ) . invalidMonth = input ; } } ) ; var MONTHS _IN _FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/ ; var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December' . split ( '_' ) ; function localeMonths ( m , format ) { if ( ! m ) { return isArray ( this . _months ) ? this . _months : this . _months [ 'standalone' ] ; }
return isArray ( this . _months ) ? this . _months [ m . month ( ) ] : this . _months [ ( this . _months . isFormat || MONTHS _IN _FORMAT ) . test ( format ) ? 'format' : 'standalone' ] [ m . month ( ) ] ; }
var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec' . split ( '_' ) ; function localeMonthsShort ( m , format ) { if ( ! m ) { return isArray ( this . _monthsShort ) ? this . _monthsShort : this . _monthsShort [ 'standalone' ] ; }
return isArray ( this . _monthsShort ) ? this . _monthsShort [ m . month ( ) ] : this . _monthsShort [ MONTHS _IN _FORMAT . test ( format ) ? 'format' : 'standalone' ] [ m . month ( ) ] ; }
function handleStrictParse ( monthName , format , strict ) { var i , ii , mom , llc = monthName . toLocaleLowerCase ( ) ; if ( ! this . _monthsParse ) { this . _monthsParse = [ ] ; this . _longMonthsParse = [ ] ; this . _shortMonthsParse = [ ] ; for ( i = 0 ; i < 12 ; ++ i ) { mom = createUTC ( [ 2000 , i ] ) ; this . _shortMonthsParse [ i ] = this . monthsShort ( mom , '' ) . toLocaleLowerCase ( ) ; this . _longMonthsParse [ i ] = this . months ( mom , '' ) . toLocaleLowerCase ( ) ; } }
if ( strict ) { if ( format === 'MMM' ) { ii = indexOf . call ( this . _shortMonthsParse , llc ) ; return ii !== - 1 ? ii : null ; } else { ii = indexOf . call ( this . _longMonthsParse , llc ) ; return ii !== - 1 ? ii : null ; } } else { if ( format === 'MMM' ) { ii = indexOf . call ( this . _shortMonthsParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _longMonthsParse , llc ) ; return ii !== - 1 ? ii : null ; } else { ii = indexOf . call ( this . _longMonthsParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _shortMonthsParse , llc ) ; return ii !== - 1 ? ii : null ; } } }
function localeMonthsParse ( monthName , format , strict ) { var i , mom , regex ; if ( this . _monthsParseExact ) { return handleStrictParse . call ( this , monthName , format , strict ) ; }
if ( ! this . _monthsParse ) { this . _monthsParse = [ ] ; this . _longMonthsParse = [ ] ; this . _shortMonthsParse = [ ] ; }
for ( i = 0 ; i < 12 ; i ++ ) { mom = createUTC ( [ 2000 , i ] ) ; if ( strict && ! this . _longMonthsParse [ i ] ) { this . _longMonthsParse [ i ] = new RegExp ( '^' + this . months ( mom , '' ) . replace ( '.' , '' ) + '$' , 'i' ) ; this . _shortMonthsParse [ i ] = new RegExp ( '^' + this . monthsShort ( mom , '' ) . replace ( '.' , '' ) + '$' , 'i' ) ; }
if ( ! strict && ! this . _monthsParse [ i ] ) { regex = '^' + this . months ( mom , '' ) + '|^' + this . monthsShort ( mom , '' ) ; this . _monthsParse [ i ] = new RegExp ( regex . replace ( '.' , '' ) , 'i' ) ; }
if ( strict && format === 'MMMM' && this . _longMonthsParse [ i ] . test ( monthName ) ) { return i ; } else if ( strict && format === 'MMM' && this . _shortMonthsParse [ i ] . test ( monthName ) ) { return i ; } else if ( ! strict && this . _monthsParse [ i ] . test ( monthName ) ) { return i ; } } }
function setMonth ( mom , value ) { var dayOfMonth ; if ( ! mom . isValid ( ) ) { return mom ; }
if ( typeof value === 'string' ) { if ( /^\d+$/ . test ( value ) ) { value = toInt ( value ) ; } else { value = mom . localeData ( ) . monthsParse ( value ) ; if ( ! isNumber ( value ) ) { return mom ; } } }
dayOfMonth = Math . min ( mom . date ( ) , daysInMonth ( mom . year ( ) , value ) ) ; mom . _d [ 'set' + ( mom . _isUTC ? 'UTC' : '' ) + 'Month' ] ( value , dayOfMonth ) ; return mom ; }
function getSetMonth ( value ) { if ( value != null ) { setMonth ( this , value ) ; hooks . updateOffset ( this , true ) ; return this ; } else { return get ( this , 'Month' ) ; } }
function getDaysInMonth ( ) { return daysInMonth ( this . year ( ) , this . month ( ) ) ; }
var defaultMonthsShortRegex = matchWord ; function monthsShortRegex ( isStrict ) { if ( this . _monthsParseExact ) { if ( ! hasOwnProp ( this , '_monthsRegex' ) ) { computeMonthsParse . call ( this ) ; }
if ( isStrict ) { return this . _monthsShortStrictRegex ; } else { return this . _monthsShortRegex ; } } else { if ( ! hasOwnProp ( this , '_monthsShortRegex' ) ) { this . _monthsShortRegex = defaultMonthsShortRegex ; }
return this . _monthsShortStrictRegex && isStrict ? this . _monthsShortStrictRegex : this . _monthsShortRegex ; } }
var defaultMonthsRegex = matchWord ; function monthsRegex ( isStrict ) { if ( this . _monthsParseExact ) { if ( ! hasOwnProp ( this , '_monthsRegex' ) ) { computeMonthsParse . call ( this ) ; }
if ( isStrict ) { return this . _monthsStrictRegex ; } else { return this . _monthsRegex ; } } else { if ( ! hasOwnProp ( this , '_monthsRegex' ) ) { this . _monthsRegex = defaultMonthsRegex ; }
return this . _monthsStrictRegex && isStrict ? this . _monthsStrictRegex : this . _monthsRegex ; } }
function computeMonthsParse ( ) { function cmpLenRev ( a , b ) { return b . length - a . length ; }
var shortPieces = [ ] , longPieces = [ ] , mixedPieces = [ ] , i , mom ; for ( i = 0 ; i < 12 ; i ++ ) { mom = createUTC ( [ 2000 , i ] ) ; shortPieces . push ( this . monthsShort ( mom , '' ) ) ; longPieces . push ( this . months ( mom , '' ) ) ; mixedPieces . push ( this . months ( mom , '' ) ) ; mixedPieces . push ( this . monthsShort ( mom , '' ) ) ; }
shortPieces . sort ( cmpLenRev ) ; longPieces . sort ( cmpLenRev ) ; mixedPieces . sort ( cmpLenRev ) ; for ( i = 0 ; i < 12 ; i ++ ) { shortPieces [ i ] = regexEscape ( shortPieces [ i ] ) ; longPieces [ i ] = regexEscape ( longPieces [ i ] ) ; }
for ( i = 0 ; i < 24 ; i ++ ) { mixedPieces [ i ] = regexEscape ( mixedPieces [ i ] ) ; }
this . _monthsRegex = new RegExp ( '^(' + mixedPieces . join ( '|' ) + ')' , 'i' ) ; this . _monthsShortRegex = this . _monthsRegex ; this . _monthsStrictRegex = new RegExp ( '^(' + longPieces . join ( '|' ) + ')' , 'i' ) ; this . _monthsShortStrictRegex = new RegExp ( '^(' + shortPieces . join ( '|' ) + ')' , 'i' ) ; }
function createDate ( y , m , d , h , M , s , ms ) { var date ; if ( y < 100 && y >= 0 ) { date = new Date ( y + 400 , m , d , h , M , s , ms ) ; if ( isFinite ( date . getFullYear ( ) ) ) { date . setFullYear ( y ) ; } } else { date = new Date ( y , m , d , h , M , s , ms ) ; }
return date ; }
function createUTCDate ( y ) { var date ; if ( y < 100 && y >= 0 ) { var args = Array . prototype . slice . call ( arguments ) ; args [ 0 ] = y + 400 ; date = new Date ( Date . UTC . apply ( null , args ) ) ; if ( isFinite ( date . getUTCFullYear ( ) ) ) { date . setUTCFullYear ( y ) ; } } else { date = new Date ( Date . UTC . apply ( null , arguments ) ) ; }
return date ; }
function firstWeekOffset ( year , dow , doy ) { var
fwd = 7 + dow - doy , fwdlw = ( 7 + createUTCDate ( year , 0 , fwd ) . getUTCDay ( ) - dow ) % 7 ; return - fwdlw + fwd - 1 ; }
function dayOfYearFromWeeks ( year , week , weekday , dow , doy ) { var localWeekday = ( 7 + weekday - dow ) % 7 , weekOffset = firstWeekOffset ( year , dow , doy ) , dayOfYear = 1 + 7 * ( week - 1 ) + localWeekday + weekOffset , resYear , resDayOfYear ; if ( dayOfYear <= 0 ) { resYear = year - 1 ; resDayOfYear = daysInYear ( resYear ) + dayOfYear ; } else if ( dayOfYear > daysInYear ( year ) ) { resYear = year + 1 ; resDayOfYear = dayOfYear - daysInYear ( year ) ; } else { resYear = year ; resDayOfYear = dayOfYear ; }
return { year : resYear , dayOfYear : resDayOfYear } ; }
function weekOfYear ( mom , dow , doy ) { var weekOffset = firstWeekOffset ( mom . year ( ) , dow , doy ) , week = Math . floor ( ( mom . dayOfYear ( ) - weekOffset - 1 ) / 7 ) + 1 , resWeek , resYear ; if ( week < 1 ) { resYear = mom . year ( ) - 1 ; resWeek = week + weeksInYear ( resYear , dow , doy ) ; } else if ( week > weeksInYear ( mom . year ( ) , dow , doy ) ) { resWeek = week - weeksInYear ( mom . year ( ) , dow , doy ) ; resYear = mom . year ( ) + 1 ; } else { resYear = mom . year ( ) ; resWeek = week ; }
return { week : resWeek , year : resYear } ; }
function weeksInYear ( year , dow , doy ) { var weekOffset = firstWeekOffset ( year , dow , doy ) , weekOffsetNext = firstWeekOffset ( year + 1 , dow , doy ) ; return ( daysInYear ( year ) - weekOffset + weekOffsetNext ) / 7 ; }
addFormatToken ( 'w' , [ 'ww' , 2 ] , 'wo' , 'week' ) ; addFormatToken ( 'W' , [ 'WW' , 2 ] , 'Wo' , 'isoWeek' ) ; addUnitAlias ( 'week' , 'w' ) ; addUnitAlias ( 'isoWeek' , 'W' ) ; addUnitPriority ( 'week' , 5 ) ; addUnitPriority ( 'isoWeek' , 5 ) ; addRegexToken ( 'w' , match1to2 ) ; addRegexToken ( 'ww' , match1to2 , match2 ) ; addRegexToken ( 'W' , match1to2 ) ; addRegexToken ( 'WW' , match1to2 , match2 ) ; addWeekParseToken ( [ 'w' , 'ww' , 'W' , 'WW' ] , function ( input , week , config , token ) { week [ token . substr ( 0 , 1 ) ] = toInt ( input ) ; } ) ; function localeWeek ( mom ) { return weekOfYear ( mom , this . _week . dow , this . _week . doy ) . week ; }
var defaultLocaleWeek = { dow : 0 , doy : 6 } ; function localeFirstDayOfWeek ( ) { return this . _week . dow ; }
function localeFirstDayOfYear ( ) { return this . _week . doy ; }
function getSetWeek ( input ) { var week = this . localeData ( ) . week ( this ) ; return input == null ? week : this . add ( ( input - week ) * 7 , 'd' ) ; }
function getSetISOWeek ( input ) { var week = weekOfYear ( this , 1 , 4 ) . week ; return input == null ? week : this . add ( ( input - week ) * 7 , 'd' ) ; }
addFormatToken ( 'd' , 0 , 'do' , 'day' ) ; addFormatToken ( 'dd' , 0 , 0 , function ( format ) { return this . localeData ( ) . weekdaysMin ( this , format ) ; } ) ; addFormatToken ( 'ddd' , 0 , 0 , function ( format ) { return this . localeData ( ) . weekdaysShort ( this , format ) ; } ) ; addFormatToken ( 'dddd' , 0 , 0 , function ( format ) { return this . localeData ( ) . weekdays ( this , format ) ; } ) ; addFormatToken ( 'e' , 0 , 0 , 'weekday' ) ; addFormatToken ( 'E' , 0 , 0 , 'isoWeekday' ) ; addUnitAlias ( 'day' , 'd' ) ; addUnitAlias ( 'weekday' , 'e' ) ; addUnitAlias ( 'isoWeekday' , 'E' ) ; addUnitPriority ( 'day' , 11 ) ; addUnitPriority ( 'weekday' , 11 ) ; addUnitPriority ( 'isoWeekday' , 11 ) ; addRegexToken ( 'd' , match1to2 ) ; addRegexToken ( 'e' , match1to2 ) ; addRegexToken ( 'E' , match1to2 ) ; addRegexToken ( 'dd' , function ( isStrict , locale ) { return locale . weekdaysMinRegex ( isStrict ) ; } ) ; addRegexToken ( 'ddd' , function ( isStrict , locale ) { return locale . weekdaysShortRegex ( isStrict ) ; } ) ; addRegexToken ( 'dddd' , function ( isStrict , locale ) { return locale . weekdaysRegex ( isStrict ) ; } ) ; addWeekParseToken ( [ 'dd' , 'ddd' , 'dddd' ] , function ( input , week , config , token ) { var weekday = config . _locale . weekdaysParse ( input , token , config . _strict ) ; if ( weekday != null ) { week . d = weekday ; } else { getParsingFlags ( config ) . invalidWeekday = input ; } } ) ; addWeekParseToken ( [ 'd' , 'e' , 'E' ] , function ( input , week , config , token ) { week [ token ] = toInt ( input ) ; } ) ; function parseWeekday ( input , locale ) { if ( typeof input !== 'string' ) { return input ; }
if ( ! isNaN ( input ) ) { return parseInt ( input , 10 ) ; }
input = locale . weekdaysParse ( input ) ; if ( typeof input === 'number' ) { return input ; }
return null ; }
function parseIsoWeekday ( input , locale ) { if ( typeof input === 'string' ) { return locale . weekdaysParse ( input ) % 7 || 7 ; }
return isNaN ( input ) ? null : input ; }
function shiftWeekdays ( ws , n ) { return ws . slice ( n , 7 ) . concat ( ws . slice ( 0 , n ) ) ; }
var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday' . split ( '_' ) ; function localeWeekdays ( m , format ) { var weekdays = isArray ( this . _weekdays ) ? this . _weekdays : this . _weekdays [ ( m && m !== true && this . _weekdays . isFormat . test ( format ) ) ? 'format' : 'standalone' ] ; return ( m === true ) ? shiftWeekdays ( weekdays , this . _week . dow ) : ( m ) ? weekdays [ m . day ( ) ] : weekdays ; }
var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat' . split ( '_' ) ; function localeWeekdaysShort ( m ) { return ( m === true ) ? shiftWeekdays ( this . _weekdaysShort , this . _week . dow ) : ( m ) ? this . _weekdaysShort [ m . day ( ) ] : this . _weekdaysShort ; }
var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa' . split ( '_' ) ; function localeWeekdaysMin ( m ) { return ( m === true ) ? shiftWeekdays ( this . _weekdaysMin , this . _week . dow ) : ( m ) ? this . _weekdaysMin [ m . day ( ) ] : this . _weekdaysMin ; }
function handleStrictParse$1 ( weekdayName , format , strict ) { var i , ii , mom , llc = weekdayName . toLocaleLowerCase ( ) ; if ( ! this . _weekdaysParse ) { this . _weekdaysParse = [ ] ; this . _shortWeekdaysParse = [ ] ; this . _minWeekdaysParse = [ ] ; for ( i = 0 ; i < 7 ; ++ i ) { mom = createUTC ( [ 2000 , 1 ] ) . day ( i ) ; this . _minWeekdaysParse [ i ] = this . weekdaysMin ( mom , '' ) . toLocaleLowerCase ( ) ; this . _shortWeekdaysParse [ i ] = this . weekdaysShort ( mom , '' ) . toLocaleLowerCase ( ) ; this . _weekdaysParse [ i ] = this . weekdays ( mom , '' ) . toLocaleLowerCase ( ) ; } }
if ( strict ) { if ( format === 'dddd' ) { ii = indexOf . call ( this . _weekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } else if ( format === 'ddd' ) { ii = indexOf . call ( this . _shortWeekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } else { ii = indexOf . call ( this . _minWeekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } } else { if ( format === 'dddd' ) { ii = indexOf . call ( this . _weekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _shortWeekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _minWeekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } else if ( format === 'ddd' ) { ii = indexOf . call ( this . _shortWeekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _weekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _minWeekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } else { ii = indexOf . call ( this . _minWeekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _weekdaysParse , llc ) ; if ( ii !== - 1 ) { return ii ; }
ii = indexOf . call ( this . _shortWeekdaysParse , llc ) ; return ii !== - 1 ? ii : null ; } } }
function localeWeekdaysParse ( weekdayName , format , strict ) { var i , mom , regex ; if ( this . _weekdaysParseExact ) { return handleStrictParse$1 . call ( this , weekdayName , format , strict ) ; }
if ( ! this . _weekdaysParse ) { this . _weekdaysParse = [ ] ; this . _minWeekdaysParse = [ ] ; this . _shortWeekdaysParse = [ ] ; this . _fullWeekdaysParse = [ ] ; }
for ( i = 0 ; i < 7 ; i ++ ) { mom = createUTC ( [ 2000 , 1 ] ) . day ( i ) ; if ( strict && ! this . _fullWeekdaysParse [ i ] ) { this . _fullWeekdaysParse [ i ] = new RegExp ( '^' + this . weekdays ( mom , '' ) . replace ( '.' , '\\.?' ) + '$' , 'i' ) ; this . _shortWeekdaysParse [ i ] = new RegExp ( '^' + this . weekdaysShort ( mom , '' ) . replace ( '.' , '\\.?' ) + '$' , 'i' ) ; this . _minWeekdaysParse [ i ] = new RegExp ( '^' + this . weekdaysMin ( mom , '' ) . replace ( '.' , '\\.?' ) + '$' , 'i' ) ; }
if ( ! this . _weekdaysParse [ i ] ) { regex = '^' + this . weekdays ( mom , '' ) + '|^' + this . weekdaysShort ( mom , '' ) + '|^' + this . weekdaysMin ( mom , '' ) ; this . _weekdaysParse [ i ] = new RegExp ( regex . replace ( '.' , '' ) , 'i' ) ; }
if ( strict && format === 'dddd' && this . _fullWeekdaysParse [ i ] . test ( weekdayName ) ) { return i ; } else if ( strict && format === 'ddd' && this . _shortWeekdaysParse [ i ] . test ( weekdayName ) ) { return i ; } else if ( strict && format === 'dd' && this . _minWeekdaysParse [ i ] . test ( weekdayName ) ) { return i ; } else if ( ! strict && this . _weekdaysParse [ i ] . test ( weekdayName ) ) { return i ; } } }
function getSetDayOfWeek ( input ) { if ( ! this . isValid ( ) ) { return input != null ? this : NaN ; }
var day = this . _isUTC ? this . _d . getUTCDay ( ) : this . _d . getDay ( ) ; if ( input != null ) { input = parseWeekday ( input , this . localeData ( ) ) ; return this . add ( input - day , 'd' ) ; } else { return day ; } }
function getSetLocaleDayOfWeek ( input ) { if ( ! this . isValid ( ) ) { return input != null ? this : NaN ; }
var weekday = ( this . day ( ) + 7 - this . localeData ( ) . _week . dow ) % 7 ; return input == null ? weekday : this . add ( input - weekday , 'd' ) ; }
function getSetISODayOfWeek ( input ) { if ( ! this . isValid ( ) ) { return input != null ? this : NaN ; }
if ( input != null ) { var weekday = parseIsoWeekday ( input , this . localeData ( ) ) ; return this . day ( this . day ( ) % 7 ? weekday : weekday - 7 ) ; } else { return this . day ( ) || 7 ; } }
var defaultWeekdaysRegex = matchWord ; function weekdaysRegex ( isStrict ) { if ( this . _weekdaysParseExact ) { if ( ! hasOwnProp ( this , '_weekdaysRegex' ) ) { computeWeekdaysParse . call ( this ) ; }
if ( isStrict ) { return this . _weekdaysStrictRegex ; } else { return this . _weekdaysRegex ; } } else { if ( ! hasOwnProp ( this , '_weekdaysRegex' ) ) { this . _weekdaysRegex = defaultWeekdaysRegex ; }
return this . _weekdaysStrictRegex && isStrict ? this . _weekdaysStrictRegex : this . _weekdaysRegex ; } }
var defaultWeekdaysShortRegex = matchWord ; function weekdaysShortRegex ( isStrict ) { if ( this . _weekdaysParseExact ) { if ( ! hasOwnProp ( this , '_weekdaysRegex' ) ) { computeWeekdaysParse . call ( this ) ; }
if ( isStrict ) { return this . _weekdaysShortStrictRegex ; } else { return this . _weekdaysShortRegex ; } } else { if ( ! hasOwnProp ( this , '_weekdaysShortRegex' ) ) { this . _weekdaysShortRegex = defaultWeekdaysShortRegex ; }
return this . _weekdaysShortStrictRegex && isStrict ? this . _weekdaysShortStrictRegex : this . _weekdaysShortRegex ; } }
var defaultWeekdaysMinRegex = matchWord ; function weekdaysMinRegex ( isStrict ) { if ( this . _weekdaysParseExact ) { if ( ! hasOwnProp ( this , '_weekdaysRegex' ) ) { computeWeekdaysParse . call ( this ) ; }
if ( isStrict ) { return this . _weekdaysMinStrictRegex ; } else { return this . _weekdaysMinRegex ; } } else { if ( ! hasOwnProp ( this , '_weekdaysMinRegex' ) ) { this . _weekdaysMinRegex = defaultWeekdaysMinRegex ; }
return this . _weekdaysMinStrictRegex && isStrict ? this . _weekdaysMinStrictRegex : this . _weekdaysMinRegex ; } }
function computeWeekdaysParse ( ) { function cmpLenRev ( a , b ) { return b . length - a . length ; }
var minPieces = [ ] , shortPieces = [ ] , longPieces = [ ] , mixedPieces = [ ] , i , mom , minp , shortp , longp ; for ( i = 0 ; i < 7 ; i ++ ) { mom = createUTC ( [ 2000 , 1 ] ) . day ( i ) ; minp = this . weekdaysMin ( mom , '' ) ; shortp = this . weekdaysShort ( mom , '' ) ; longp = this . weekdays ( mom , '' ) ; minPieces . push ( minp ) ; shortPieces . push ( shortp ) ; longPieces . push ( longp ) ; mixedPieces . push ( minp ) ; mixedPieces . push ( shortp ) ; mixedPieces . push ( longp ) ; }
minPieces . sort ( cmpLenRev ) ; shortPieces . sort ( cmpLenRev ) ; longPieces . sort ( cmpLenRev ) ; mixedPieces . sort ( cmpLenRev ) ; for ( i = 0 ; i < 7 ; i ++ ) { shortPieces [ i ] = regexEscape ( shortPieces [ i ] ) ; longPieces [ i ] = regexEscape ( longPieces [ i ] ) ; mixedPieces [ i ] = regexEscape ( mixedPieces [ i ] ) ; }
this . _weekdaysRegex = new RegExp ( '^(' + mixedPieces . join ( '|' ) + ')' , 'i' ) ; this . _weekdaysShortRegex = this . _weekdaysRegex ; this . _weekdaysMinRegex = this . _weekdaysRegex ; this . _weekdaysStrictRegex = new RegExp ( '^(' + longPieces . join ( '|' ) + ')' , 'i' ) ; this . _weekdaysShortStrictRegex = new RegExp ( '^(' + shortPieces . join ( '|' ) + ')' , 'i' ) ; this . _weekdaysMinStrictRegex = new RegExp ( '^(' + minPieces . join ( '|' ) + ')' , 'i' ) ; }
function hFormat ( ) { return this . hours ( ) % 12 || 12 ; }
function kFormat ( ) { return this . hours ( ) || 24 ; }
addFormatToken ( 'H' , [ 'HH' , 2 ] , 0 , 'hour' ) ; addFormatToken ( 'h' , [ 'hh' , 2 ] , 0 , hFormat ) ; addFormatToken ( 'k' , [ 'kk' , 2 ] , 0 , kFormat ) ; addFormatToken ( 'hmm' , 0 , 0 , function ( ) { return '' + hFormat . apply ( this ) + zeroFill ( this . minutes ( ) , 2 ) ; } ) ; addFormatToken ( 'hmmss' , 0 , 0 , function ( ) { return '' + hFormat . apply ( this ) + zeroFill ( this . minutes ( ) , 2 ) +
zeroFill ( this . seconds ( ) , 2 ) ; } ) ; addFormatToken ( 'Hmm' , 0 , 0 , function ( ) { return '' + this . hours ( ) + zeroFill ( this . minutes ( ) , 2 ) ; } ) ; addFormatToken ( 'Hmmss' , 0 , 0 , function ( ) { return '' + this . hours ( ) + zeroFill ( this . minutes ( ) , 2 ) +
zeroFill ( this . seconds ( ) , 2 ) ; } ) ; function meridiem ( token , lowercase ) { addFormatToken ( token , 0 , 0 , function ( ) { return this . localeData ( ) . meridiem ( this . hours ( ) , this . minutes ( ) , lowercase ) ; } ) ; }
meridiem ( 'a' , true ) ; meridiem ( 'A' , false ) ; addUnitAlias ( 'hour' , 'h' ) ; addUnitPriority ( 'hour' , 13 ) ; function matchMeridiem ( isStrict , locale ) { return locale . _meridiemParse ; }
addRegexToken ( 'a' , matchMeridiem ) ; addRegexToken ( 'A' , matchMeridiem ) ; addRegexToken ( 'H' , match1to2 ) ; addRegexToken ( 'h' , match1to2 ) ; addRegexToken ( 'k' , match1to2 ) ; addRegexToken ( 'HH' , match1to2 , match2 ) ; addRegexToken ( 'hh' , match1to2 , match2 ) ; addRegexToken ( 'kk' , match1to2 , match2 ) ; addRegexToken ( 'hmm' , match3to4 ) ; addRegexToken ( 'hmmss' , match5to6 ) ; addRegexToken ( 'Hmm' , match3to4 ) ; addRegexToken ( 'Hmmss' , match5to6 ) ; addParseToken ( [ 'H' , 'HH' ] , HOUR ) ; addParseToken ( [ 'k' , 'kk' ] , function ( input , array , config ) { var kInput = toInt ( input ) ; array [ HOUR ] = kInput === 24 ? 0 : kInput ; } ) ; addParseToken ( [ 'a' , 'A' ] , function ( input , array , config ) { config . _isPm = config . _locale . isPM ( input ) ; config . _meridiem = input ; } ) ; addParseToken ( [ 'h' , 'hh' ] , function ( input , array , config ) { array [ HOUR ] = toInt ( input ) ; getParsingFlags ( config ) . bigHour = true ; } ) ; addParseToken ( 'hmm' , function ( input , array , config ) { var pos = input . length - 2 ; array [ HOUR ] = toInt ( input . substr ( 0 , pos ) ) ; array [ MINUTE ] = toInt ( input . substr ( pos ) ) ; getParsingFlags ( config ) . bigHour = true ; } ) ; addParseToken ( 'hmmss' , function ( input , array , config ) { var pos1 = input . length - 4 ; var pos2 = input . length - 2 ; array [ HOUR ] = toInt ( input . substr ( 0 , pos1 ) ) ; array [ MINUTE ] = toInt ( input . substr ( pos1 , 2 ) ) ; array [ SECOND ] = toInt ( input . substr ( pos2 ) ) ; getParsingFlags ( config ) . bigHour = true ; } ) ; addParseToken ( 'Hmm' , function ( input , array , config ) { var pos = input . length - 2 ; array [ HOUR ] = toInt ( input . substr ( 0 , pos ) ) ; array [ MINUTE ] = toInt ( input . substr ( pos ) ) ; } ) ; addParseToken ( 'Hmmss' , function ( input , array , config ) { var pos1 = input . length - 4 ; var pos2 = input . length - 2 ; array [ HOUR ] = toInt ( input . substr ( 0 , pos1 ) ) ; array [ MINUTE ] = toInt ( input . substr ( pos1 , 2 ) ) ; array [ SECOND ] = toInt ( input . substr ( pos2 ) ) ; } ) ; function localeIsPM ( input ) { return ( ( input + '' ) . toLowerCase ( ) . charAt ( 0 ) === 'p' ) ; }
var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i ; function localeMeridiem ( hours , minutes , isLower ) { if ( hours > 11 ) { return isLower ? 'pm' : 'PM' ; } else { return isLower ? 'am' : 'AM' ; } }
var getSetHour = makeGetSet ( 'Hours' , true ) ; var baseConfig = { calendar : defaultCalendar , longDateFormat : defaultLongDateFormat , invalidDate : defaultInvalidDate , ordinal : defaultOrdinal , dayOfMonthOrdinalParse : defaultDayOfMonthOrdinalParse , relativeTime : defaultRelativeTime , months : defaultLocaleMonths , monthsShort : defaultLocaleMonthsShort , week : defaultLocaleWeek , weekdays : defaultLocaleWeekdays , weekdaysMin : defaultLocaleWeekdaysMin , weekdaysShort : defaultLocaleWeekdaysShort , meridiemParse : defaultLocaleMeridiemParse } ; var locales = { } ; var localeFamilies = { } ; var globalLocale ; function normalizeLocale ( key ) { return key ? key . toLowerCase ( ) . replace ( '_' , '-' ) : key ; }
function chooseLocale ( names ) { var i = 0 , j , next , locale , split ; while ( i < names . length ) { split = normalizeLocale ( names [ i ] ) . split ( '-' ) ; j = split . length ; next = normalizeLocale ( names [ i + 1 ] ) ; next = next ? next . split ( '-' ) : null ; while ( j > 0 ) { locale = loadLocale ( split . slice ( 0 , j ) . join ( '-' ) ) ; if ( locale ) { return locale ; }
if ( next && next . length >= j && compareArrays ( split , next , true ) >= j - 1 ) { break ; }
j -- ; }
i ++ ; }
return globalLocale ; }
function loadLocale ( name ) { var oldLocale = null ; if ( ! locales [ name ] && ( typeof module !== 'undefined' ) && module && module . exports ) { try { oldLocale = globalLocale . _abbr ; var aliasedRequire = require ; aliasedRequire ( './locale/' + name ) ; getSetGlobalLocale ( oldLocale ) ; } catch ( e ) { } }
return locales [ name ] ; }
function getSetGlobalLocale ( key , values ) { var data ; if ( key ) { if ( isUndefined ( values ) ) { data = getLocale ( key ) ; }
else { data = defineLocale ( key , values ) ; }
if ( data ) { globalLocale = data ; }
else { if ( ( typeof console !== 'undefined' ) && console . warn ) { console . warn ( 'Locale ' + key + ' not found. Did you forget to load it?' ) ; } } }
return globalLocale . _abbr ; }
function defineLocale ( name , config ) { if ( config !== null ) { var locale , parentConfig = baseConfig ; config . abbr = name ; if ( locales [ name ] != null ) { deprecateSimple ( 'defineLocaleOverride' , 'use moment.updateLocale(localeName, config) to change ' +
'an existing locale. moment.defineLocale(localeName, ' +
'config) should only be used for creating a new locale ' +
'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' ) ; parentConfig = locales [ name ] . _config ; } else if ( config . parentLocale != null ) { if ( locales [ config . parentLocale ] != null ) { parentConfig = locales [ config . parentLocale ] . _config ; } else { locale = loadLocale ( config . parentLocale ) ; if ( locale != null ) { parentConfig = locale . _config ; } else { if ( ! localeFamilies [ config . parentLocale ] ) { localeFamilies [ config . parentLocale ] = [ ] ; }
localeFamilies [ config . parentLocale ] . push ( { name : name , config : config } ) ; return null ; } } }
locales [ name ] = new Locale ( mergeConfigs ( parentConfig , config ) ) ; if ( localeFamilies [ name ] ) { localeFamilies [ name ] . forEach ( function ( x ) { defineLocale ( x . name , x . config ) ; } ) ; }
getSetGlobalLocale ( name ) ; return locales [ name ] ; } else { delete locales [ name ] ; return null ; } }
function updateLocale ( name , config ) { if ( config != null ) { var locale , tmpLocale , parentConfig = baseConfig ; tmpLocale = loadLocale ( name ) ; if ( tmpLocale != null ) { parentConfig = tmpLocale . _config ; }
config = mergeConfigs ( parentConfig , config ) ; locale = new Locale ( config ) ; locale . parentLocale = locales [ name ] ; locales [ name ] = locale ; getSetGlobalLocale ( name ) ; } else { if ( locales [ name ] != null ) { if ( locales [ name ] . parentLocale != null ) { locales [ name ] = locales [ name ] . parentLocale ; } else if ( locales [ name ] != null ) { delete locales [ name ] ; } } }
return locales [ name ] ; }
function getLocale ( key ) { var locale ; if ( key && key . _locale && key . _locale . _abbr ) { key = key . _locale . _abbr ; }
if ( ! key ) { return globalLocale ; }
if ( ! isArray ( key ) ) { locale = loadLocale ( key ) ; if ( locale ) { return locale ; }
key = [ key ] ; }
return chooseLocale ( key ) ; }
function listLocales ( ) { return keys ( locales ) ; }
function checkOverflow ( m ) { var overflow ; var a = m . _a ; if ( a && getParsingFlags ( m ) . overflow === - 2 ) { overflow = a [ MONTH ] < 0 || a [ MONTH ] > 11 ? MONTH : a [ DATE ] < 1 || a [ DATE ] > daysInMonth ( a [ YEAR ] , a [ MONTH ] ) ? DATE : a [ HOUR ] < 0 || a [ HOUR ] > 24 || ( a [ HOUR ] === 24 && ( a [ MINUTE ] !== 0 || a [ SECOND ] !== 0 || a [ MILLISECOND ] !== 0 ) ) ? HOUR : a [ MINUTE ] < 0 || a [ MINUTE ] > 59 ? MINUTE : a [ SECOND ] < 0 || a [ SECOND ] > 59 ? SECOND : a [ MILLISECOND ] < 0 || a [ MILLISECOND ] > 999 ? MILLISECOND : - 1 ; if ( getParsingFlags ( m ) . _overflowDayOfYear && ( overflow < YEAR || overflow > DATE ) ) { overflow = DATE ; }
if ( getParsingFlags ( m ) . _overflowWeeks && overflow === - 1 ) { overflow = WEEK ; }
if ( getParsingFlags ( m ) . _overflowWeekday && overflow === - 1 ) { overflow = WEEKDAY ; }
getParsingFlags ( m ) . overflow = overflow ; }
return m ; }
function defaults ( a , b , c ) { if ( a != null ) { return a ; }
if ( b != null ) { return b ; }
return c ; }
function currentDateArray ( config ) { var nowValue = new Date ( hooks . now ( ) ) ; if ( config . _useUTC ) { return [ nowValue . getUTCFullYear ( ) , nowValue . getUTCMonth ( ) , nowValue . getUTCDate ( ) ] ; }
return [ nowValue . getFullYear ( ) , nowValue . getMonth ( ) , nowValue . getDate ( ) ] ; }
function configFromArray ( config ) { var i , date , input = [ ] , currentDate , expectedWeekday , yearToUse ; if ( config . _d ) { return ; }
currentDate = currentDateArray ( config ) ; if ( config . _w && config . _a [ DATE ] == null && config . _a [ MONTH ] == null ) { dayOfYearFromWeekInfo ( config ) ; }
if ( config . _dayOfYear != null ) { yearToUse = defaults ( config . _a [ YEAR ] , currentDate [ YEAR ] ) ; if ( config . _dayOfYear > daysInYear ( yearToUse ) || config . _dayOfYear === 0 ) { getParsingFlags ( config ) . _overflowDayOfYear = true ; }
date = createUTCDate ( yearToUse , 0 , config . _dayOfYear ) ; config . _a [ MONTH ] = date . getUTCMonth ( ) ; config . _a [ DATE ] = date . getUTCDate ( ) ; }
for ( i = 0 ; i < 3 && config . _a [ i ] == null ; ++ i ) { config . _a [ i ] = input [ i ] = currentDate [ i ] ; }
for ( ; i < 7 ; i ++ ) { config . _a [ i ] = input [ i ] = ( config . _a [ i ] == null ) ? ( i === 2 ? 1 : 0 ) : config . _a [ i ] ; }
if ( config . _a [ HOUR ] === 24 && config . _a [ MINUTE ] === 0 && config . _a [ SECOND ] === 0 && config . _a [ MILLISECOND ] === 0 ) { config . _nextDay = true ; config . _a [ HOUR ] = 0 ; }
config . _d = ( config . _useUTC ? createUTCDate : createDate ) . apply ( null , input ) ; expectedWeekday = config . _useUTC ? config . _d . getUTCDay ( ) : config . _d . getDay ( ) ; if ( config . _tzm != null ) { config . _d . setUTCMinutes ( config . _d . getUTCMinutes ( ) - config . _tzm ) ; }
if ( config . _nextDay ) { config . _a [ HOUR ] = 24 ; }
if ( config . _w && typeof config . _w . d !== 'undefined' && config . _w . d !== expectedWeekday ) { getParsingFlags ( config ) . weekdayMismatch = true ; } }
function dayOfYearFromWeekInfo ( config ) { var w , weekYear , week , weekday , dow , doy , temp , weekdayOverflow ; w = config . _w ; if ( w . GG != null || w . W != null || w . E != null ) { dow = 1 ; doy = 4 ; weekYear = defaults ( w . GG , config . _a [ YEAR ] , weekOfYear ( createLocal ( ) , 1 , 4 ) . year ) ; week = defaults ( w . W , 1 ) ; weekday = defaults ( w . E , 1 ) ; if ( weekday < 1 || weekday > 7 ) { weekdayOverflow = true ; } } else { dow = config . _locale . _week . dow ; doy = config . _locale . _week . doy ; var curWeek = weekOfYear ( createLocal ( ) , dow , doy ) ; weekYear = defaults ( w . gg , config . _a [ YEAR ] , curWeek . year ) ; week = defaults ( w . w , curWeek . week ) ; if ( w . d != null ) { weekday = w . d ; if ( weekday < 0 || weekday > 6 ) { weekdayOverflow = true ; } } else if ( w . e != null ) { weekday = w . e + dow ; if ( w . e < 0 || w . e > 6 ) { weekdayOverflow = true ; } } else { weekday = dow ; } }
if ( week < 1 || week > weeksInYear ( weekYear , dow , doy ) ) { getParsingFlags ( config ) . _overflowWeeks = true ; } else if ( weekdayOverflow != null ) { getParsingFlags ( config ) . _overflowWeekday = true ; } else { temp = dayOfYearFromWeeks ( weekYear , week , weekday , dow , doy ) ; config . _a [ YEAR ] = temp . year ; config . _dayOfYear = temp . dayOfYear ; } }
var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/ ; var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/ ; var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/ ; var isoDates = [ [ 'YYYYYY-MM-DD' , /[+-]\d{6}-\d\d-\d\d/ ] , [ 'YYYY-MM-DD' , /\d{4}-\d\d-\d\d/ ] , [ 'GGGG-[W]WW-E' , /\d{4}-W\d\d-\d/ ] , [ 'GGGG-[W]WW' , /\d{4}-W\d\d/ , false ] , [ 'YYYY-DDD' , /\d{4}-\d{3}/ ] , [ 'YYYY-MM' , /\d{4}-\d\d/ , false ] , [ 'YYYYYYMMDD' , /[+-]\d{10}/ ] , [ 'YYYYMMDD' , /\d{8}/ ] , [ 'GGGG[W]WWE' , /\d{4}W\d{3}/ ] , [ 'GGGG[W]WW' , /\d{4}W\d{2}/ , false ] , [ 'YYYYDDD' , /\d{7}/ ] ] ; var isoTimes = [ [ 'HH:mm:ss.SSSS' , /\d\d:\d\d:\d\d\.\d+/ ] , [ 'HH:mm:ss,SSSS' , /\d\d:\d\d:\d\d,\d+/ ] , [ 'HH:mm:ss' , /\d\d:\d\d:\d\d/ ] , [ 'HH:mm' , /\d\d:\d\d/ ] , [ 'HHmmss.SSSS' , /\d\d\d\d\d\d\.\d+/ ] , [ 'HHmmss,SSSS' , /\d\d\d\d\d\d,\d+/ ] , [ 'HHmmss' , /\d\d\d\d\d\d/ ] , [ 'HHmm' , /\d\d\d\d/ ] , [ 'HH' , /\d\d/ ] ] ; var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i ; function configFromISO ( config ) { var i , l , string = config . _i , match = extendedIsoRegex . exec ( string ) || basicIsoRegex . exec ( string ) , allowTime , dateFormat , timeFormat , tzFormat ; if ( match ) { getParsingFlags ( config ) . iso = true ; for ( i = 0 , l = isoDates . length ; i < l ; i ++ ) { if ( isoDates [ i ] [ 1 ] . exec ( match [ 1 ] ) ) { dateFormat = isoDates [ i ] [ 0 ] ; allowTime = isoDates [ i ] [ 2 ] !== false ; break ; } }
if ( dateFormat == null ) { config . _isValid = false ; return ; }
if ( match [ 3 ] ) { for ( i = 0 , l = isoTimes . length ; i < l ; i ++ ) { if ( isoTimes [ i ] [ 1 ] . exec ( match [ 3 ] ) ) { timeFormat = ( match [ 2 ] || ' ' ) + isoTimes [ i ] [ 0 ] ; break ; } }
if ( timeFormat == null ) { config . _isValid = false ; return ; } }
if ( ! allowTime && timeFormat != null ) { config . _isValid = false ; return ; }
if ( match [ 4 ] ) { if ( tzRegex . exec ( match [ 4 ] ) ) { tzFormat = 'Z' ; } else { config . _isValid = false ; return ; } }
config . _f = dateFormat + ( timeFormat || '' ) + ( tzFormat || '' ) ; configFromStringAndFormat ( config ) ; } else { config . _isValid = false ; } }
var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/ ; function extractFromRFC2822Strings ( yearStr , monthStr , dayStr , hourStr , minuteStr , secondStr ) { var result = [ untruncateYear ( yearStr ) , defaultLocaleMonthsShort . indexOf ( monthStr ) , parseInt ( dayStr , 10 ) , parseInt ( hourStr , 10 ) , parseInt ( minuteStr , 10 ) ] ; if ( secondStr ) { result . push ( parseInt ( secondStr , 10 ) ) ; }
return result ; }
function untruncateYear ( yearStr ) { var year = parseInt ( yearStr , 10 ) ; if ( year <= 49 ) { return 2000 + year ; } else if ( year <= 999 ) { return 1900 + year ; }
return year ; }
function preprocessRFC2822 ( s ) { return s . replace ( /\([^)]*\)|[\n\t]/g , ' ' ) . replace ( /(\s\s+)/g , ' ' ) . replace ( /^\s\s*/ , '' ) . replace ( /\s\s*$/ , '' ) ; }
function checkWeekday ( weekdayStr , parsedInput , config ) { if ( weekdayStr ) { var weekdayProvided = defaultLocaleWeekdaysShort . indexOf ( weekdayStr ) , weekdayActual = new Date ( parsedInput [ 0 ] , parsedInput [ 1 ] , parsedInput [ 2 ] ) . getDay ( ) ; if ( weekdayProvided !== weekdayActual ) { getParsingFlags ( config ) . weekdayMismatch = true ; config . _isValid = false ; return false ; } }
return true ; }
var obsOffsets = { UT : 0 , GMT : 0 , EDT : - 4 * 60 , EST : - 5 * 60 , CDT : - 5 * 60 , CST : - 6 * 60 , MDT : - 6 * 60 , MST : - 7 * 60 , PDT : - 7 * 60 , PST : - 8 * 60 } ; function calculateOffset ( obsOffset , militaryOffset , numOffset ) { if ( obsOffset ) { return obsOffsets [ obsOffset ] ; } else if ( militaryOffset ) { return 0 ; } else { var hm = parseInt ( numOffset , 10 ) ; var m = hm % 100 , h = ( hm - m ) / 100 ; return h * 60 + m ; } }
function configFromRFC2822 ( config ) { var match = rfc2822 . exec ( preprocessRFC2822 ( config . _i ) ) ; if ( match ) { var parsedArray = extractFromRFC2822Strings ( match [ 4 ] , match [ 3 ] , match [ 2 ] , match [ 5 ] , match [ 6 ] , match [ 7 ] ) ; if ( ! checkWeekday ( match [ 1 ] , parsedArray , config ) ) { return ; }
config . _a = parsedArray ; config . _tzm = calculateOffset ( match [ 8 ] , match [ 9 ] , match [ 10 ] ) ; config . _d = createUTCDate . apply ( null , config . _a ) ; config . _d . setUTCMinutes ( config . _d . getUTCMinutes ( ) - config . _tzm ) ; getParsingFlags ( config ) . rfc2822 = true ; } else { config . _isValid = false ; } }
function configFromString ( config ) { var matched = aspNetJsonRegex . exec ( config . _i ) ; if ( matched !== null ) { config . _d = new Date ( + matched [ 1 ] ) ; return ; }
configFromISO ( config ) ; if ( config . _isValid === false ) { delete config . _isValid ; } else { return ; }
configFromRFC2822 ( config ) ; if ( config . _isValid === false ) { delete config . _isValid ; } else { return ; }
hooks . createFromInputFallback ( config ) ; }
hooks . createFromInputFallback = deprecate ( 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
'discouraged and will be removed in an upcoming major release. Please refer to ' +
'http://momentjs.com/guides/#/warnings/js-date/ for more info.' , function ( config ) { config . _d = new Date ( config . _i + ( config . _useUTC ? ' UTC' : '' ) ) ; } ) ; hooks . ISO _8601 = function ( ) { } ; hooks . RFC _2822 = function ( ) { } ; function configFromStringAndFormat ( config ) { if ( config . _f === hooks . ISO _8601 ) { configFromISO ( config ) ; return ; }
if ( config . _f === hooks . RFC _2822 ) { configFromRFC2822 ( config ) ; return ; }
config . _a = [ ] ; getParsingFlags ( config ) . empty = true ; var string = '' + config . _i , i , parsedInput , tokens , token , skipped , stringLength = string . length , totalParsedInputLength = 0 ; tokens = expandFormat ( config . _f , config . _locale ) . match ( formattingTokens ) || [ ] ; for ( i = 0 ; i < tokens . length ; i ++ ) { token = tokens [ i ] ; parsedInput = ( string . match ( getParseRegexForToken ( token , config ) ) || [ ] ) [ 0 ] ; if ( parsedInput ) { skipped = string . substr ( 0 , string . indexOf ( parsedInput ) ) ; if ( skipped . length > 0 ) { getParsingFlags ( config ) . unusedInput . push ( skipped ) ; }
string = string . slice ( string . indexOf ( parsedInput ) + parsedInput . length ) ; totalParsedInputLength += parsedInput . length ; }
if ( formatTokenFunctions [ token ] ) { if ( parsedInput ) { getParsingFlags ( config ) . empty = false ; }
else { getParsingFlags ( config ) . unusedTokens . push ( token ) ; }
addTimeToArrayFromToken ( token , parsedInput , config ) ; }
else if ( config . _strict && ! parsedInput ) { getParsingFlags ( config ) . unusedTokens . push ( token ) ; } }
getParsingFlags ( config ) . charsLeftOver = stringLength - totalParsedInputLength ; if ( string . length > 0 ) { getParsingFlags ( config ) . unusedInput . push ( string ) ; }
if ( config . _a [ HOUR ] <= 12 && getParsingFlags ( config ) . bigHour === true && config . _a [ HOUR ] > 0 ) { getParsingFlags ( config ) . bigHour = undefined ; }
getParsingFlags ( config ) . parsedDateParts = config . _a . slice ( 0 ) ; getParsingFlags ( config ) . meridiem = config . _meridiem ; config . _a [ HOUR ] = meridiemFixWrap ( config . _locale , config . _a [ HOUR ] , config . _meridiem ) ; configFromArray ( config ) ; checkOverflow ( config ) ; }
function meridiemFixWrap ( locale , hour , meridiem ) { var isPm ; if ( meridiem == null ) { return hour ; }
if ( locale . meridiemHour != null ) { return locale . meridiemHour ( hour , meridiem ) ; } else if ( locale . isPM != null ) { isPm = locale . isPM ( meridiem ) ; if ( isPm && hour < 12 ) { hour += 12 ; }
if ( ! isPm && hour === 12 ) { hour = 0 ; }
return hour ; } else { return hour ; } }
function configFromStringAndArray ( config ) { var tempConfig , bestMoment , scoreToBeat , i , currentScore ; if ( config . _f . length === 0 ) { getParsingFlags ( config ) . invalidFormat = true ; config . _d = new Date ( NaN ) ; return ; }
for ( i = 0 ; i < config . _f . length ; i ++ ) { currentScore = 0 ; tempConfig = copyConfig ( { } , config ) ; if ( config . _useUTC != null ) { tempConfig . _useUTC = config . _useUTC ; }
tempConfig . _f = config . _f [ i ] ; configFromStringAndFormat ( tempConfig ) ; if ( ! isValid ( tempConfig ) ) { continue ; }
currentScore += getParsingFlags ( tempConfig ) . charsLeftOver ; currentScore += getParsingFlags ( tempConfig ) . unusedTokens . length * 10 ; getParsingFlags ( tempConfig ) . score = currentScore ; if ( scoreToBeat == null || currentScore < scoreToBeat ) { scoreToBeat = currentScore ; bestMoment = tempConfig ; } }
extend ( config , bestMoment || tempConfig ) ; }
function configFromObject ( config ) { if ( config . _d ) { return ; }
var i = normalizeObjectUnits ( config . _i ) ; config . _a = map ( [ i . year , i . month , i . day || i . date , i . hour , i . minute , i . second , i . millisecond ] , function ( obj ) { return obj && parseInt ( obj , 10 ) ; } ) ; configFromArray ( config ) ; }
function createFromConfig ( config ) { var res = new Moment ( checkOverflow ( prepareConfig ( config ) ) ) ; if ( res . _nextDay ) { res . add ( 1 , 'd' ) ; res . _nextDay = undefined ; }
return res ; }
function prepareConfig ( config ) { var input = config . _i , format = config . _f ; config . _locale = config . _locale || getLocale ( config . _l ) ; if ( input === null || ( format === undefined && input === '' ) ) { return createInvalid ( { nullInput : true } ) ; }
if ( typeof input === 'string' ) { config . _i = input = config . _locale . preparse ( input ) ; }
if ( isMoment ( input ) ) { return new Moment ( checkOverflow ( input ) ) ; } else if ( isDate ( input ) ) { config . _d = input ; } else if ( isArray ( format ) ) { configFromStringAndArray ( config ) ; } else if ( format ) { configFromStringAndFormat ( config ) ; } else { configFromInput ( config ) ; }
if ( ! isValid ( config ) ) { config . _d = null ; }
return config ; }
function configFromInput ( config ) { var input = config . _i ; if ( isUndefined ( input ) ) { config . _d = new Date ( hooks . now ( ) ) ; } else if ( isDate ( input ) ) { config . _d = new Date ( input . valueOf ( ) ) ; } else if ( typeof input === 'string' ) { configFromString ( config ) ; } else if ( isArray ( input ) ) { config . _a = map ( input . slice ( 0 ) , function ( obj ) { return parseInt ( obj , 10 ) ; } ) ; configFromArray ( config ) ; } else if ( isObject ( input ) ) { configFromObject ( config ) ; } else if ( isNumber ( input ) ) { config . _d = new Date ( input ) ; } else { hooks . createFromInputFallback ( config ) ; } }
function createLocalOrUTC ( input , format , locale , strict , isUTC ) { var c = { } ; if ( locale === true || locale === false ) { strict = locale ; locale = undefined ; }
if ( ( isObject ( input ) && isObjectEmpty ( input ) ) || ( isArray ( input ) && input . length === 0 ) ) { input = undefined ; }
c . _isAMomentObject = true ; c . _useUTC = c . _isUTC = isUTC ; c . _l = locale ; c . _i = input ; c . _f = format ; c . _strict = strict ; return createFromConfig ( c ) ; }
function createLocal ( input , format , locale , strict ) { return createLocalOrUTC ( input , format , locale , strict , false ) ; }
var prototypeMin = deprecate ( 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/' , function ( ) { var other = createLocal . apply ( null , arguments ) ; if ( this . isValid ( ) && other . isValid ( ) ) { return other < this ? this : other ; } else { return createInvalid ( ) ; } } ) ; var prototypeMax = deprecate ( 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/' , function ( ) { var other = createLocal . apply ( null , arguments ) ; if ( this . isValid ( ) && other . isValid ( ) ) { return other > this ? this : other ; } else { return createInvalid ( ) ; } } ) ; function pickBy ( fn , moments ) { var res , i ; if ( moments . length === 1 && isArray ( moments [ 0 ] ) ) { moments = moments [ 0 ] ; }
if ( ! moments . length ) { return createLocal ( ) ; }
res = moments [ 0 ] ; for ( i = 1 ; i < moments . length ; ++ i ) { if ( ! moments [ i ] . isValid ( ) || moments [ i ] [ fn ] ( res ) ) { res = moments [ i ] ; } }
return res ; }
function min ( ) { var args = [ ] . slice . call ( arguments , 0 ) ; return pickBy ( 'isBefore' , args ) ; }
function max ( ) { var args = [ ] . slice . call ( arguments , 0 ) ; return pickBy ( 'isAfter' , args ) ; }
var now = function ( ) { return Date . now ? Date . now ( ) : + ( new Date ( ) ) ; } ; var ordering = [ 'year' , 'quarter' , 'month' , 'week' , 'day' , 'hour' , 'minute' , 'second' , 'millisecond' ] ; function isDurationValid ( m ) { for ( var key in m ) { if ( ! ( indexOf . call ( ordering , key ) !== - 1 && ( m [ key ] == null || ! isNaN ( m [ key ] ) ) ) ) { return false ; } }
var unitHasDecimal = false ; for ( var i = 0 ; i < ordering . length ; ++ i ) { if ( m [ ordering [ i ] ] ) { if ( unitHasDecimal ) { return false ; }
if ( parseFloat ( m [ ordering [ i ] ] ) !== toInt ( m [ ordering [ i ] ] ) ) { unitHasDecimal = true ; } } }
return true ; }
function isValid$1 ( ) { return this . _isValid ; }
function createInvalid$1 ( ) { return createDuration ( NaN ) ; }
function Duration ( duration ) { var normalizedInput = normalizeObjectUnits ( duration ) , years = normalizedInput . year || 0 , quarters = normalizedInput . quarter || 0 , months = normalizedInput . month || 0 , weeks = normalizedInput . week || normalizedInput . isoWeek || 0 , days = normalizedInput . day || 0 , hours = normalizedInput . hour || 0 , minutes = normalizedInput . minute || 0 , seconds = normalizedInput . second || 0 , milliseconds = normalizedInput . millisecond || 0 ; this . _isValid = isDurationValid ( normalizedInput ) ; this . _milliseconds = + milliseconds +
seconds * 1e3 +
minutes * 6e4 +
hours * 1000 * 60 * 60 ; this . _days = + days +
weeks * 7 ; this . _months = + months +
quarters * 3 +
years * 12 ; this . _data = { } ; this . _locale = getLocale ( ) ; this . _bubble ( ) ; }
function isDuration ( obj ) { return obj instanceof Duration ; }
function absRound ( number ) { if ( number < 0 ) { return Math . round ( - 1 * number ) * - 1 ; } else { return Math . round ( number ) ; } }
function offset ( token , separator ) { addFormatToken ( token , 0 , 0 , function ( ) { var offset = this . utcOffset ( ) ; var sign = '+' ; if ( offset < 0 ) { offset = - offset ; sign = '-' ; }
return sign + zeroFill ( ~ ~ ( offset / 60 ) , 2 ) + separator + zeroFill ( ~ ~ ( offset ) % 60 , 2 ) ; } ) ; }
offset ( 'Z' , ':' ) ; offset ( 'ZZ' , '' ) ; addRegexToken ( 'Z' , matchShortOffset ) ; addRegexToken ( 'ZZ' , matchShortOffset ) ; addParseToken ( [ 'Z' , 'ZZ' ] , function ( input , array , config ) { config . _useUTC = true ; config . _tzm = offsetFromString ( matchShortOffset , input ) ; } ) ; var chunkOffset = /([\+\-]|\d\d)/gi ; function offsetFromString ( matcher , string ) { var matches = ( string || '' ) . match ( matcher ) ; if ( matches === null ) { return null ; }
var chunk = matches [ matches . length - 1 ] || [ ] ; var parts = ( chunk + '' ) . match ( chunkOffset ) || [ '-' , 0 , 0 ] ; var minutes = + ( parts [ 1 ] * 60 ) + toInt ( parts [ 2 ] ) ; return minutes === 0 ? 0 : parts [ 0 ] === '+' ? minutes : - minutes ; }
function cloneWithOffset ( input , model ) { var res , diff ; if ( model . _isUTC ) { res = model . clone ( ) ; diff = ( isMoment ( input ) || isDate ( input ) ? input . valueOf ( ) : createLocal ( input ) . valueOf ( ) ) - res . valueOf ( ) ; res . _d . setTime ( res . _d . valueOf ( ) + diff ) ; hooks . updateOffset ( res , false ) ; return res ; } else { return createLocal ( input ) . local ( ) ; } }
function getDateOffset ( m ) { return - Math . round ( m . _d . getTimezoneOffset ( ) / 15 ) * 15 ; }
hooks . updateOffset = function ( ) { } ; function getSetOffset ( input , keepLocalTime , keepMinutes ) { var offset = this . _offset || 0 , localAdjust ; if ( ! this . isValid ( ) ) { return input != null ? this : NaN ; }
if ( input != null ) { if ( typeof input === 'string' ) { input = offsetFromString ( matchShortOffset , input ) ; if ( input === null ) { return this ; } } else if ( Math . abs ( input ) < 16 && ! keepMinutes ) { input = input * 60 ; }
if ( ! this . _isUTC && keepLocalTime ) { localAdjust = getDateOffset ( this ) ; }
this . _offset = input ; this . _isUTC = true ; if ( localAdjust != null ) { this . add ( localAdjust , 'm' ) ; }
if ( offset !== input ) { if ( ! keepLocalTime || this . _changeInProgress ) { addSubtract ( this , createDuration ( input - offset , 'm' ) , 1 , false ) ; } else if ( ! this . _changeInProgress ) { this . _changeInProgress = true ; hooks . updateOffset ( this , true ) ; this . _changeInProgress = null ; } }
return this ; } else { return this . _isUTC ? offset : getDateOffset ( this ) ; } }
function getSetZone ( input , keepLocalTime ) { if ( input != null ) { if ( typeof input !== 'string' ) { input = - input ; }
this . utcOffset ( input , keepLocalTime ) ; return this ; } else { return - this . utcOffset ( ) ; } }
function setOffsetToUTC ( keepLocalTime ) { return this . utcOffset ( 0 , keepLocalTime ) ; }
function setOffsetToLocal ( keepLocalTime ) { if ( this . _isUTC ) { this . utcOffset ( 0 , keepLocalTime ) ; this . _isUTC = false ; if ( keepLocalTime ) { this . subtract ( getDateOffset ( this ) , 'm' ) ; } }
return this ; }
function setOffsetToParsedOffset ( ) { if ( this . _tzm != null ) { this . utcOffset ( this . _tzm , false , true ) ; } else if ( typeof this . _i === 'string' ) { var tZone = offsetFromString ( matchOffset , this . _i ) ; if ( tZone != null ) { this . utcOffset ( tZone ) ; }
else { this . utcOffset ( 0 , true ) ; } }
return this ; }
function hasAlignedHourOffset ( input ) { if ( ! this . isValid ( ) ) { return false ; }
input = input ? createLocal ( input ) . utcOffset ( ) : 0 ; return ( this . utcOffset ( ) - input ) % 60 === 0 ; }
function isDaylightSavingTime ( ) { return ( this . utcOffset ( ) > this . clone ( ) . month ( 0 ) . utcOffset ( ) || this . utcOffset ( ) > this . clone ( ) . month ( 5 ) . utcOffset ( ) ) ; }
function isDaylightSavingTimeShifted ( ) { if ( ! isUndefined ( this . _isDSTShifted ) ) { return this . _isDSTShifted ; }
var c = { } ; copyConfig ( c , this ) ; c = prepareConfig ( c ) ; if ( c . _a ) { var other = c . _isUTC ? createUTC ( c . _a ) : createLocal ( c . _a ) ; this . _isDSTShifted = this . isValid ( ) && compareArrays ( c . _a , other . toArray ( ) ) > 0 ; } else { this . _isDSTShifted = false ; }
return this . _isDSTShifted ; }
function isLocal ( ) { return this . isValid ( ) ? ! this . _isUTC : false ; }
function isUtcOffset ( ) { return this . isValid ( ) ? this . _isUTC : false ; }
function isUtc ( ) { return this . isValid ( ) ? this . _isUTC && this . _offset === 0 : false ; }
var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/ ; var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/ ; function createDuration ( input , key ) { var duration = input , match = null , sign , ret , diffRes ; if ( isDuration ( input ) ) { duration = { ms : input . _milliseconds , d : input . _days , M : input . _months } ; } else if ( isNumber ( input ) ) { duration = { } ; if ( key ) { duration [ key ] = input ; } else { duration . milliseconds = input ; } } else if ( ! ! ( match = aspNetRegex . exec ( input ) ) ) { sign = ( match [ 1 ] === '-' ) ? - 1 : 1 ; duration = { y : 0 , d : toInt ( match [ DATE ] ) * sign , h : toInt ( match [ HOUR ] ) * sign , m : toInt ( match [ MINUTE ] ) * sign , s : toInt ( match [ SECOND ] ) * sign , ms : toInt ( absRound ( match [ MILLISECOND ] * 1000 ) ) * sign } ; } else if ( ! ! ( match = isoRegex . exec ( input ) ) ) { sign = ( match [ 1 ] === '-' ) ? - 1 : 1 ; duration = { y : parseIso ( match [ 2 ] , sign ) , M : parseIso ( match [ 3 ] , sign ) , w : parseIso ( match [ 4 ] , sign ) , d : parseIso ( match [ 5 ] , sign ) , h : parseIso ( match [ 6 ] , sign ) , m : parseIso ( match [ 7 ] , sign ) , s : parseIso ( match [ 8 ] , sign ) } ; } else if ( duration == null ) { duration = { } ; } else if ( typeof duration === 'object' && ( 'from' in duration || 'to' in duration ) ) { diffRes = momentsDifference ( createLocal ( duration . from ) , createLocal ( duration . to ) ) ; duration = { } ; duration . ms = diffRes . milliseconds ; duration . M = diffRes . months ; }
ret = new Duration ( duration ) ; if ( isDuration ( input ) && hasOwnProp ( input , '_locale' ) ) { ret . _locale = input . _locale ; }
return ret ; }
createDuration . fn = Duration . prototype ; createDuration . invalid = createInvalid$1 ; function parseIso ( inp , sign ) { var res = inp && parseFloat ( inp . replace ( ',' , '.' ) ) ; return ( isNaN ( res ) ? 0 : res ) * sign ; }
function positiveMomentsDifference ( base , other ) { var res = { } ; res . months = other . month ( ) - base . month ( ) +
( other . year ( ) - base . year ( ) ) * 12 ; if ( base . clone ( ) . add ( res . months , 'M' ) . isAfter ( other ) ) { -- res . months ; }
res . milliseconds = + other - + ( base . clone ( ) . add ( res . months , 'M' ) ) ; return res ; }
function momentsDifference ( base , other ) { var res ; if ( ! ( base . isValid ( ) && other . isValid ( ) ) ) { return { milliseconds : 0 , months : 0 } ; }
other = cloneWithOffset ( other , base ) ; if ( base . isBefore ( other ) ) { res = positiveMomentsDifference ( base , other ) ; } else { res = positiveMomentsDifference ( other , base ) ; res . milliseconds = - res . milliseconds ; res . months = - res . months ; }
return res ; }
function createAdder ( direction , name ) { return function ( val , period ) { var dur , tmp ; if ( period !== null && ! isNaN ( + period ) ) { deprecateSimple ( name , 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' ) ; tmp = val ; val = period ; period = tmp ; }
val = typeof val === 'string' ? + val : val ; dur = createDuration ( val , period ) ; addSubtract ( this , dur , direction ) ; return this ; } ; }
function addSubtract ( mom , duration , isAdding , updateOffset ) { var milliseconds = duration . _milliseconds , days = absRound ( duration . _days ) , months = absRound ( duration . _months ) ; if ( ! mom . isValid ( ) ) { return ; }
updateOffset = updateOffset == null ? true : updateOffset ; if ( months ) { setMonth ( mom , get ( mom , 'Month' ) + months * isAdding ) ; }
if ( days ) { set$1 ( mom , 'Date' , get ( mom , 'Date' ) + days * isAdding ) ; }
if ( milliseconds ) { mom . _d . setTime ( mom . _d . valueOf ( ) + milliseconds * isAdding ) ; }
if ( updateOffset ) { hooks . updateOffset ( mom , days || months ) ; } }
var add = createAdder ( 1 , 'add' ) ; var subtract = createAdder ( - 1 , 'subtract' ) ; function getCalendarFormat ( myMoment , now ) { var diff = myMoment . diff ( now , 'days' , true ) ; return diff < - 6 ? 'sameElse' : diff < - 1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse' ; }
function calendar$1 ( time , formats ) { var now = time || createLocal ( ) , sod = cloneWithOffset ( now , this ) . startOf ( 'day' ) , format = hooks . calendarFormat ( this , sod ) || 'sameElse' ; var output = formats && ( isFunction ( formats [ format ] ) ? formats [ format ] . call ( this , now ) : formats [ format ] ) ; return this . format ( output || this . localeData ( ) . calendar ( format , this , createLocal ( now ) ) ) ; }
function clone ( ) { return new Moment ( this ) ; }
function isAfter ( input , units ) { var localInput = isMoment ( input ) ? input : createLocal ( input ) ; if ( ! ( this . isValid ( ) && localInput . isValid ( ) ) ) { return false ; }
units = normalizeUnits ( units ) || 'millisecond' ; if ( units === 'millisecond' ) { return this . valueOf ( ) > localInput . valueOf ( ) ; } else { return localInput . valueOf ( ) < this . clone ( ) . startOf ( units ) . valueOf ( ) ; } }
function isBefore ( input , units ) { var localInput = isMoment ( input ) ? input : createLocal ( input ) ; if ( ! ( this . isValid ( ) && localInput . isValid ( ) ) ) { return false ; }
units = normalizeUnits ( units ) || 'millisecond' ; if ( units === 'millisecond' ) { return this . valueOf ( ) < localInput . valueOf ( ) ; } else { return this . clone ( ) . endOf ( units ) . valueOf ( ) < localInput . valueOf ( ) ; } }
function isBetween ( from , to , units , inclusivity ) { var localFrom = isMoment ( from ) ? from : createLocal ( from ) , localTo = isMoment ( to ) ? to : createLocal ( to ) ; if ( ! ( this . isValid ( ) && localFrom . isValid ( ) && localTo . isValid ( ) ) ) { return false ; }
inclusivity = inclusivity || '()' ; return ( inclusivity [ 0 ] === '(' ? this . isAfter ( localFrom , units ) : ! this . isBefore ( localFrom , units ) ) && ( inclusivity [ 1 ] === ')' ? this . isBefore ( localTo , units ) : ! this . isAfter ( localTo , units ) ) ; }
function isSame ( input , units ) { var localInput = isMoment ( input ) ? input : createLocal ( input ) , inputMs ; if ( ! ( this . isValid ( ) && localInput . isValid ( ) ) ) { return false ; }
units = normalizeUnits ( units ) || 'millisecond' ; if ( units === 'millisecond' ) { return this . valueOf ( ) === localInput . valueOf ( ) ; } else { inputMs = localInput . valueOf ( ) ; return this . clone ( ) . startOf ( units ) . valueOf ( ) <= inputMs && inputMs <= this . clone ( ) . endOf ( units ) . valueOf ( ) ; } }
function isSameOrAfter ( input , units ) { return this . isSame ( input , units ) || this . isAfter ( input , units ) ; }
function isSameOrBefore ( input , units ) { return this . isSame ( input , units ) || this . isBefore ( input , units ) ; }
function diff ( input , units , asFloat ) { var that , zoneDelta , output ; if ( ! this . isValid ( ) ) { return NaN ; }
that = cloneWithOffset ( input , this ) ; if ( ! that . isValid ( ) ) { return NaN ; }
zoneDelta = ( that . utcOffset ( ) - this . utcOffset ( ) ) * 6e4 ; units = normalizeUnits ( units ) ; switch ( units ) { case 'year' : output = monthDiff ( this , that ) / 12 ; break ; case 'month' : output = monthDiff ( this , that ) ; break ; case 'quarter' : output = monthDiff ( this , that ) / 3 ; break ; case 'second' : output = ( this - that ) / 1e3 ; break ; case 'minute' : output = ( this - that ) / 6e4 ; break ; case 'hour' : output = ( this - that ) / 36e5 ; break ; case 'day' : output = ( this - that - zoneDelta ) / 864e5 ; break ; case 'week' : output = ( this - that - zoneDelta ) / 6048e5 ; break ; default : output = this - that ; }
return asFloat ? output : absFloor ( output ) ; }
function monthDiff ( a , b ) { var wholeMonthDiff = ( ( b . year ( ) - a . year ( ) ) * 12 ) + ( b . month ( ) - a . month ( ) ) , anchor = a . clone ( ) . add ( wholeMonthDiff , 'months' ) , anchor2 , adjust ; if ( b - anchor < 0 ) { anchor2 = a . clone ( ) . add ( wholeMonthDiff - 1 , 'months' ) ; adjust = ( b - anchor ) / ( anchor - anchor2 ) ; } else { anchor2 = a . clone ( ) . add ( wholeMonthDiff + 1 , 'months' ) ; adjust = ( b - anchor ) / ( anchor2 - anchor ) ; }
return - ( wholeMonthDiff + adjust ) || 0 ; }
hooks . defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ' ; hooks . defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]' ; function toString ( ) { return this . clone ( ) . locale ( 'en' ) . format ( 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ' ) ; }
function toISOString ( keepOffset ) { if ( ! this . isValid ( ) ) { return null ; }
var utc = keepOffset !== true ; var m = utc ? this . clone ( ) . utc ( ) : this ; if ( m . year ( ) < 0 || m . year ( ) > 9999 ) { return formatMoment ( m , utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' ) ; }
if ( isFunction ( Date . prototype . toISOString ) ) { if ( utc ) { return this . toDate ( ) . toISOString ( ) ; } else { return new Date ( this . valueOf ( ) + this . utcOffset ( ) * 60 * 1000 ) . toISOString ( ) . replace ( 'Z' , formatMoment ( m , 'Z' ) ) ; } }
return formatMoment ( m , utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' ) ; }
function inspect ( ) { if ( ! this . isValid ( ) ) { return 'moment.invalid(/* ' + this . _i + ' */)' ; }
var func = 'moment' ; var zone = '' ; if ( ! this . isLocal ( ) ) { func = this . utcOffset ( ) === 0 ? 'moment.utc' : 'moment.parseZone' ; zone = 'Z' ; }
var prefix = '[' + func + '("]' ; var year = ( 0 <= this . year ( ) && this . year ( ) <= 9999 ) ? 'YYYY' : 'YYYYYY' ; var datetime = '-MM-DD[T]HH:mm:ss.SSS' ; var suffix = zone + '[")]' ; return this . format ( prefix + year + datetime + suffix ) ; }
function format ( inputString ) { if ( ! inputString ) { inputString = this . isUtc ( ) ? hooks . defaultFormatUtc : hooks . defaultFormat ; }
var output = formatMoment ( this , inputString ) ; return this . localeData ( ) . postformat ( output ) ; }
function from ( time , withoutSuffix ) { if ( this . isValid ( ) && ( ( isMoment ( time ) && time . isValid ( ) ) || createLocal ( time ) . isValid ( ) ) ) { return createDuration ( { to : this , from : time } ) . locale ( this . locale ( ) ) . humanize ( ! withoutSuffix ) ; } else { return this . localeData ( ) . invalidDate ( ) ; } }
function fromNow ( withoutSuffix ) { return this . from ( createLocal ( ) , withoutSuffix ) ; }
function to ( time , withoutSuffix ) { if ( this . isValid ( ) && ( ( isMoment ( time ) && time . isValid ( ) ) || createLocal ( time ) . isValid ( ) ) ) { return createDuration ( { from : this , to : time } ) . locale ( this . locale ( ) ) . humanize ( ! withoutSuffix ) ; } else { return this . localeData ( ) . invalidDate ( ) ; } }
function toNow ( withoutSuffix ) { return this . to ( createLocal ( ) , withoutSuffix ) ; }
function locale ( key ) { var newLocaleData ; if ( key === undefined ) { return this . _locale . _abbr ; } else { newLocaleData = getLocale ( key ) ; if ( newLocaleData != null ) { this . _locale = newLocaleData ; }
return this ; } }
var lang = deprecate ( 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.' , function ( key ) { if ( key === undefined ) { return this . localeData ( ) ; } else { return this . locale ( key ) ; } } ) ; function localeData ( ) { return this . _locale ; }
var MS _PER _SECOND = 1000 ; var MS _PER _MINUTE = 60 * MS _PER _SECOND ; var MS _PER _HOUR = 60 * MS _PER _MINUTE ; var MS _PER _400 _YEARS = ( 365 * 400 + 97 ) * 24 * MS _PER _HOUR ; function mod$1 ( dividend , divisor ) { return ( dividend % divisor + divisor ) % divisor ; }
function localStartOfDate ( y , m , d ) { if ( y < 100 && y >= 0 ) { return new Date ( y + 400 , m , d ) - MS _PER _400 _YEARS ; } else { return new Date ( y , m , d ) . valueOf ( ) ; } }
function utcStartOfDate ( y , m , d ) { if ( y < 100 && y >= 0 ) { return Date . UTC ( y + 400 , m , d ) - MS _PER _400 _YEARS ; } else { return Date . UTC ( y , m , d ) ; } }
function startOf ( units ) { var time ; units = normalizeUnits ( units ) ; if ( units === undefined || units === 'millisecond' || ! this . isValid ( ) ) { return this ; }
var startOfDate = this . _isUTC ? utcStartOfDate : localStartOfDate ; switch ( units ) { case 'year' : time = startOfDate ( this . year ( ) , 0 , 1 ) ; break ; case 'quarter' : time = startOfDate ( this . year ( ) , this . month ( ) - this . month ( ) % 3 , 1 ) ; break ; case 'month' : time = startOfDate ( this . year ( ) , this . month ( ) , 1 ) ; break ; case 'week' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) - this . weekday ( ) ) ; break ; case 'isoWeek' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) - ( this . isoWeekday ( ) - 1 ) ) ; break ; case 'day' : case 'date' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) ) ; break ; case 'hour' : time = this . _d . valueOf ( ) ; time -= mod$1 ( time + ( this . _isUTC ? 0 : this . utcOffset ( ) * MS _PER _MINUTE ) , MS _PER _HOUR ) ; break ; case 'minute' : time = this . _d . valueOf ( ) ; time -= mod$1 ( time , MS _PER _MINUTE ) ; break ; case 'second' : time = this . _d . valueOf ( ) ; time -= mod$1 ( time , MS _PER _SECOND ) ; break ; }
this . _d . setTime ( time ) ; hooks . updateOffset ( this , true ) ; return this ; }
function endOf ( units ) { var time ; units = normalizeUnits ( units ) ; if ( units === undefined || units === 'millisecond' || ! this . isValid ( ) ) { return this ; }
var startOfDate = this . _isUTC ? utcStartOfDate : localStartOfDate ; switch ( units ) { case 'year' : time = startOfDate ( this . year ( ) + 1 , 0 , 1 ) - 1 ; break ; case 'quarter' : time = startOfDate ( this . year ( ) , this . month ( ) - this . month ( ) % 3 + 3 , 1 ) - 1 ; break ; case 'month' : time = startOfDate ( this . year ( ) , this . month ( ) + 1 , 1 ) - 1 ; break ; case 'week' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) - this . weekday ( ) + 7 ) - 1 ; break ; case 'isoWeek' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) - ( this . isoWeekday ( ) - 1 ) + 7 ) - 1 ; break ; case 'day' : case 'date' : time = startOfDate ( this . year ( ) , this . month ( ) , this . date ( ) + 1 ) - 1 ; break ; case 'hour' : time = this . _d . valueOf ( ) ; time += MS _PER _HOUR - mod$1 ( time + ( this . _isUTC ? 0 : this . utcOffset ( ) * MS _PER _MINUTE ) , MS _PER _HOUR ) - 1 ; break ; case 'minute' : time = this . _d . valueOf ( ) ; time += MS _PER _MINUTE - mod$1 ( time , MS _PER _MINUTE ) - 1 ; break ; case 'second' : time = this . _d . valueOf ( ) ; time += MS _PER _SECOND - mod$1 ( time , MS _PER _SECOND ) - 1 ; break ; }
this . _d . setTime ( time ) ; hooks . updateOffset ( this , true ) ; return this ; }
function valueOf ( ) { return this . _d . valueOf ( ) - ( ( this . _offset || 0 ) * 60000 ) ; }
function unix ( ) { return Math . floor ( this . valueOf ( ) / 1000 ) ; }
function toDate ( ) { return new Date ( this . valueOf ( ) ) ; }
function toArray ( ) { var m = this ; return [ m . year ( ) , m . month ( ) , m . date ( ) , m . hour ( ) , m . minute ( ) , m . second ( ) , m . millisecond ( ) ] ; }
function toObject ( ) { var m = this ; return { years : m . year ( ) , months : m . month ( ) , date : m . date ( ) , hours : m . hours ( ) , minutes : m . minutes ( ) , seconds : m . seconds ( ) , milliseconds : m . milliseconds ( ) } ; }
function toJSON ( ) { return this . isValid ( ) ? this . toISOString ( ) : null ; }
function isValid$2 ( ) { return isValid ( this ) ; }
function parsingFlags ( ) { return extend ( { } , getParsingFlags ( this ) ) ; }
function invalidAt ( ) { return getParsingFlags ( this ) . overflow ; }
function creationData ( ) { return { input : this . _i , format : this . _f , locale : this . _locale , isUTC : this . _isUTC , strict : this . _strict } ; }
addFormatToken ( 0 , [ 'gg' , 2 ] , 0 , function ( ) { return this . weekYear ( ) % 100 ; } ) ; addFormatToken ( 0 , [ 'GG' , 2 ] , 0 , function ( ) { return this . isoWeekYear ( ) % 100 ; } ) ; function addWeekYearFormatToken ( token , getter ) { addFormatToken ( 0 , [ token , token . length ] , 0 , getter ) ; }
addWeekYearFormatToken ( 'gggg' , 'weekYear' ) ; addWeekYearFormatToken ( 'ggggg' , 'weekYear' ) ; addWeekYearFormatToken ( 'GGGG' , 'isoWeekYear' ) ; addWeekYearFormatToken ( 'GGGGG' , 'isoWeekYear' ) ; addUnitAlias ( 'weekYear' , 'gg' ) ; addUnitAlias ( 'isoWeekYear' , 'GG' ) ; addUnitPriority ( 'weekYear' , 1 ) ; addUnitPriority ( 'isoWeekYear' , 1 ) ; addRegexToken ( 'G' , matchSigned ) ; addRegexToken ( 'g' , matchSigned ) ; addRegexToken ( 'GG' , match1to2 , match2 ) ; addRegexToken ( 'gg' , match1to2 , match2 ) ; addRegexToken ( 'GGGG' , match1to4 , match4 ) ; addRegexToken ( 'gggg' , match1to4 , match4 ) ; addRegexToken ( 'GGGGG' , match1to6 , match6 ) ; addRegexToken ( 'ggggg' , match1to6 , match6 ) ; addWeekParseToken ( [ 'gggg' , 'ggggg' , 'GGGG' , 'GGGGG' ] , function ( input , week , config , token ) { week [ token . substr ( 0 , 2 ) ] = toInt ( input ) ; } ) ; addWeekParseToken ( [ 'gg' , 'GG' ] , function ( input , week , config , token ) { week [ token ] = hooks . parseTwoDigitYear ( input ) ; } ) ; function getSetWeekYear ( input ) { return getSetWeekYearHelper . call ( this , input , this . week ( ) , this . weekday ( ) , this . localeData ( ) . _week . dow , this . localeData ( ) . _week . doy ) ; }
function getSetISOWeekYear ( input ) { return getSetWeekYearHelper . call ( this , input , this . isoWeek ( ) , this . isoWeekday ( ) , 1 , 4 ) ; }
function getISOWeeksInYear ( ) { return weeksInYear ( this . year ( ) , 1 , 4 ) ; }
function getWeeksInYear ( ) { var weekInfo = this . localeData ( ) . _week ; return weeksInYear ( this . year ( ) , weekInfo . dow , weekInfo . doy ) ; }
function getSetWeekYearHelper ( input , week , weekday , dow , doy ) { var weeksTarget ; if ( input == null ) { return weekOfYear ( this , dow , doy ) . year ; } else { weeksTarget = weeksInYear ( input , dow , doy ) ; if ( week > weeksTarget ) { week = weeksTarget ; }
return setWeekAll . call ( this , input , week , weekday , dow , doy ) ; } }
function setWeekAll ( weekYear , week , weekday , dow , doy ) { var dayOfYearData = dayOfYearFromWeeks ( weekYear , week , weekday , dow , doy ) , date = createUTCDate ( dayOfYearData . year , 0 , dayOfYearData . dayOfYear ) ; this . year ( date . getUTCFullYear ( ) ) ; this . month ( date . getUTCMonth ( ) ) ; this . date ( date . getUTCDate ( ) ) ; return this ; }
addFormatToken ( 'Q' , 0 , 'Qo' , 'quarter' ) ; addUnitAlias ( 'quarter' , 'Q' ) ; addUnitPriority ( 'quarter' , 7 ) ; addRegexToken ( 'Q' , match1 ) ; addParseToken ( 'Q' , function ( input , array ) { array [ MONTH ] = ( toInt ( input ) - 1 ) * 3 ; } ) ; function getSetQuarter ( input ) { return input == null ? Math . ceil ( ( this . month ( ) + 1 ) / 3 ) : this . month ( ( input - 1 ) * 3 + this . month ( ) % 3 ) ; }
addFormatToken ( 'D' , [ 'DD' , 2 ] , 'Do' , 'date' ) ; addUnitAlias ( 'date' , 'D' ) ; addUnitPriority ( 'date' , 9 ) ; addRegexToken ( 'D' , match1to2 ) ; addRegexToken ( 'DD' , match1to2 , match2 ) ; addRegexToken ( 'Do' , function ( isStrict , locale ) { return isStrict ? ( locale . _dayOfMonthOrdinalParse || locale . _ordinalParse ) : locale . _dayOfMonthOrdinalParseLenient ; } ) ; addParseToken ( [ 'D' , 'DD' ] , DATE ) ; addParseToken ( 'Do' , function ( input , array ) { array [ DATE ] = toInt ( input . match ( match1to2 ) [ 0 ] ) ; } ) ; var getSetDayOfMonth = makeGetSet ( 'Date' , true ) ; addFormatToken ( 'DDD' , [ 'DDDD' , 3 ] , 'DDDo' , 'dayOfYear' ) ; addUnitAlias ( 'dayOfYear' , 'DDD' ) ; addUnitPriority ( 'dayOfYear' , 4 ) ; addRegexToken ( 'DDD' , match1to3 ) ; addRegexToken ( 'DDDD' , match3 ) ; addParseToken ( [ 'DDD' , 'DDDD' ] , function ( input , array , config ) { config . _dayOfYear = toInt ( input ) ; } ) ; function getSetDayOfYear ( input ) { var dayOfYear = Math . round ( ( this . clone ( ) . startOf ( 'day' ) - this . clone ( ) . startOf ( 'year' ) ) / 864e5 ) + 1 ; return input == null ? dayOfYear : this . add ( ( input - dayOfYear ) , 'd' ) ; }
addFormatToken ( 'm' , [ 'mm' , 2 ] , 0 , 'minute' ) ; addUnitAlias ( 'minute' , 'm' ) ; addUnitPriority ( 'minute' , 14 ) ; addRegexToken ( 'm' , match1to2 ) ; addRegexToken ( 'mm' , match1to2 , match2 ) ; addParseToken ( [ 'm' , 'mm' ] , MINUTE ) ; var getSetMinute = makeGetSet ( 'Minutes' , false ) ; addFormatToken ( 's' , [ 'ss' , 2 ] , 0 , 'second' ) ; addUnitAlias ( 'second' , 's' ) ; addUnitPriority ( 'second' , 15 ) ; addRegexToken ( 's' , match1to2 ) ; addRegexToken ( 'ss' , match1to2 , match2 ) ; addParseToken ( [ 's' , 'ss' ] , SECOND ) ; var getSetSecond = makeGetSet ( 'Seconds' , false ) ; addFormatToken ( 'S' , 0 , 0 , function ( ) { return ~ ~ ( this . millisecond ( ) / 100 ) ; } ) ; addFormatToken ( 0 , [ 'SS' , 2 ] , 0 , function ( ) { return ~ ~ ( this . millisecond ( ) / 10 ) ; } ) ; addFormatToken ( 0 , [ 'SSS' , 3 ] , 0 , 'millisecond' ) ; addFormatToken ( 0 , [ 'SSSS' , 4 ] , 0 , function ( ) { return this . millisecond ( ) * 10 ; } ) ; addFormatToken ( 0 , [ 'SSSSS' , 5 ] , 0 , function ( ) { return this . millisecond ( ) * 100 ; } ) ; addFormatToken ( 0 , [ 'SSSSSS' , 6 ] , 0 , function ( ) { return this . millisecond ( ) * 1000 ; } ) ; addFormatToken ( 0 , [ 'SSSSSSS' , 7 ] , 0 , function ( ) { return this . millisecond ( ) * 10000 ; } ) ; addFormatToken ( 0 , [ 'SSSSSSSS' , 8 ] , 0 , function ( ) { return this . millisecond ( ) * 100000 ; } ) ; addFormatToken ( 0 , [ 'SSSSSSSSS' , 9 ] , 0 , function ( ) { return this . millisecond ( ) * 1000000 ; } ) ; addUnitAlias ( 'millisecond' , 'ms' ) ; addUnitPriority ( 'millisecond' , 16 ) ; addRegexToken ( 'S' , match1to3 , match1 ) ; addRegexToken ( 'SS' , match1to3 , match2 ) ; addRegexToken ( 'SSS' , match1to3 , match3 ) ; var token ; for ( token = 'SSSS' ; token . length <= 9 ; token += 'S' ) { addRegexToken ( token , matchUnsigned ) ; }
function parseMs ( input , array ) { array [ MILLISECOND ] = toInt ( ( '0.' + input ) * 1000 ) ; }
for ( token = 'S' ; token . length <= 9 ; token += 'S' ) { addParseToken ( token , parseMs ) ; }
var getSetMillisecond = makeGetSet ( 'Milliseconds' , false ) ; addFormatToken ( 'z' , 0 , 0 , 'zoneAbbr' ) ; addFormatToken ( 'zz' , 0 , 0 , 'zoneName' ) ; function getZoneAbbr ( ) { return this . _isUTC ? 'UTC' : '' ; }
function getZoneName ( ) { return this . _isUTC ? 'Coordinated Universal Time' : '' ; }
var proto = Moment . prototype ; proto . add = add ; proto . calendar = calendar$1 ; proto . clone = clone ; proto . diff = diff ; proto . endOf = endOf ; proto . format = format ; proto . from = from ; proto . fromNow = fromNow ; proto . to = to ; proto . toNow = toNow ; proto . get = stringGet ; proto . invalidAt = invalidAt ; proto . isAfter = isAfter ; proto . isBefore = isBefore ; proto . isBetween = isBetween ; proto . isSame = isSame ; proto . isSameOrAfter = isSameOrAfter ; proto . isSameOrBefore = isSameOrBefore ; proto . isValid = isValid$2 ; proto . lang = lang ; proto . locale = locale ; proto . localeData = localeData ; proto . max = prototypeMax ; proto . min = prototypeMin ; proto . parsingFlags = parsingFlags ; proto . set = stringSet ; proto . startOf = startOf ; proto . subtract = subtract ; proto . toArray = toArray ; proto . toObject = toObject ; proto . toDate = toDate ; proto . toISOString = toISOString ; proto . inspect = inspect ; proto . toJSON = toJSON ; proto . toString = toString ; proto . unix = unix ; proto . valueOf = valueOf ; proto . creationData = creationData ; proto . year = getSetYear ; proto . isLeapYear = getIsLeapYear ; proto . weekYear = getSetWeekYear ; proto . isoWeekYear = getSetISOWeekYear ; proto . quarter = proto . quarters = getSetQuarter ; proto . month = getSetMonth ; proto . daysInMonth = getDaysInMonth ; proto . week = proto . weeks = getSetWeek ; proto . isoWeek = proto . isoWeeks = getSetISOWeek ; proto . weeksInYear = getWeeksInYear ; proto . isoWeeksInYear = getISOWeeksInYear ; proto . date = getSetDayOfMonth ; proto . day = proto . days = getSetDayOfWeek ; proto . weekday = getSetLocaleDayOfWeek ; proto . isoWeekday = getSetISODayOfWeek ; proto . dayOfYear = getSetDayOfYear ; proto . hour = proto . hours = getSetHour ; proto . minute = proto . minutes = getSetMinute ; proto . second = proto . seconds = getSetSecond ; proto . millisecond = proto . milliseconds = getSetMillisecond ; proto . utcOffset = getSetOffset ; proto . utc = setOffsetToUTC ; proto . local = setOffsetToLocal ; proto . parseZone = setOffsetToParsedOffset ; proto . hasAlignedHourOffset = hasAlignedHourOffset ; proto . isDST = isDaylightSavingTime ; proto . isLocal = isLocal ; proto . isUtcOffset = isUtcOffset ; proto . isUtc = isUtc ; proto . isUTC = isUtc ; proto . zoneAbbr = getZoneAbbr ; proto . zoneName = getZoneName ; proto . dates = deprecate ( 'dates accessor is deprecated. Use date instead.' , getSetDayOfMonth ) ; proto . months = deprecate ( 'months accessor is deprecated. Use month instead' , getSetMonth ) ; proto . years = deprecate ( 'years accessor is deprecated. Use year instead' , getSetYear ) ; proto . zone = deprecate ( 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/' , getSetZone ) ; proto . isDSTShifted = deprecate ( 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information' , isDaylightSavingTimeShifted ) ; function createUnix ( input ) { return createLocal ( input * 1000 ) ; }
function createInZone ( ) { return createLocal . apply ( null , arguments ) . parseZone ( ) ; }
function preParsePostFormat ( string ) { return string ; }
var proto$1 = Locale . prototype ; proto$1 . calendar = calendar ; proto$1 . longDateFormat = longDateFormat ; proto$1 . invalidDate = invalidDate ; proto$1 . ordinal = ordinal ; proto$1 . preparse = preParsePostFormat ; proto$1 . postformat = preParsePostFormat ; proto$1 . relativeTime = relativeTime ; proto$1 . pastFuture = pastFuture ; proto$1 . set = set ; proto$1 . months = localeMonths ; proto$1 . monthsShort = localeMonthsShort ; proto$1 . monthsParse = localeMonthsParse ; proto$1 . monthsRegex = monthsRegex ; proto$1 . monthsShortRegex = monthsShortRegex ; proto$1 . week = localeWeek ; proto$1 . firstDayOfYear = localeFirstDayOfYear ; proto$1 . firstDayOfWeek = localeFirstDayOfWeek ; proto$1 . weekdays = localeWeekdays ; proto$1 . weekdaysMin = localeWeekdaysMin ; proto$1 . weekdaysShort = localeWeekdaysShort ; proto$1 . weekdaysParse = localeWeekdaysParse ; proto$1 . weekdaysRegex = weekdaysRegex ; proto$1 . weekdaysShortRegex = weekdaysShortRegex ; proto$1 . weekdaysMinRegex = weekdaysMinRegex ; proto$1 . isPM = localeIsPM ; proto$1 . meridiem = localeMeridiem ; function get$1 ( format , index , field , setter ) { var locale = getLocale ( ) ; var utc = createUTC ( ) . set ( setter , index ) ; return locale [ field ] ( utc , format ) ; }
function listMonthsImpl ( format , index , field ) { if ( isNumber ( format ) ) { index = format ; format = undefined ; }
format = format || '' ; if ( index != null ) { return get$1 ( format , index , field , 'month' ) ; }
var i ; var out = [ ] ; for ( i = 0 ; i < 12 ; i ++ ) { out [ i ] = get$1 ( format , i , field , 'month' ) ; }
return out ; }
function listWeekdaysImpl ( localeSorted , format , index , field ) { if ( typeof localeSorted === 'boolean' ) { if ( isNumber ( format ) ) { index = format ; format = undefined ; }
format = format || '' ; } else { format = localeSorted ; index = format ; localeSorted = false ; if ( isNumber ( format ) ) { index = format ; format = undefined ; }
format = format || '' ; }
var locale = getLocale ( ) , shift = localeSorted ? locale . _week . dow : 0 ; if ( index != null ) { return get$1 ( format , ( index + shift ) % 7 , field , 'day' ) ; }
var i ; var out = [ ] ; for ( i = 0 ; i < 7 ; i ++ ) { out [ i ] = get$1 ( format , ( i + shift ) % 7 , field , 'day' ) ; }
return out ; }
function listMonths ( format , index ) { return listMonthsImpl ( format , index , 'months' ) ; }
function listMonthsShort ( format , index ) { return listMonthsImpl ( format , index , 'monthsShort' ) ; }
function listWeekdays ( localeSorted , format , index ) { return listWeekdaysImpl ( localeSorted , format , index , 'weekdays' ) ; }
function listWeekdaysShort ( localeSorted , format , index ) { return listWeekdaysImpl ( localeSorted , format , index , 'weekdaysShort' ) ; }
function listWeekdaysMin ( localeSorted , format , index ) { return listWeekdaysImpl ( localeSorted , format , index , 'weekdaysMin' ) ; }
getSetGlobalLocale ( 'en' , { dayOfMonthOrdinalParse : /\d{1,2}(th|st|nd|rd)/ , ordinal : function ( number ) { var b = number % 10 , output = ( toInt ( number % 100 / 10 ) === 1 ) ? 'th' : ( b === 1 ) ? 'st' : ( b === 2 ) ? 'nd' : ( b === 3 ) ? 'rd' : 'th' ; return number + output ; } } ) ; hooks . lang = deprecate ( 'moment.lang is deprecated. Use moment.locale instead.' , getSetGlobalLocale ) ; hooks . langData = deprecate ( 'moment.langData is deprecated. Use moment.localeData instead.' , getLocale ) ; var mathAbs = Math . abs ; function abs ( ) { var data = this . _data ; this . _milliseconds = mathAbs ( this . _milliseconds ) ; this . _days = mathAbs ( this . _days ) ; this . _months = mathAbs ( this . _months ) ; data . milliseconds = mathAbs ( data . milliseconds ) ; data . seconds = mathAbs ( data . seconds ) ; data . minutes = mathAbs ( data . minutes ) ; data . hours = mathAbs ( data . hours ) ; data . months = mathAbs ( data . months ) ; data . years = mathAbs ( data . years ) ; return this ; }
function addSubtract$1 ( duration , input , value , direction ) { var other = createDuration ( input , value ) ; duration . _milliseconds += direction * other . _milliseconds ; duration . _days += direction * other . _days ; duration . _months += direction * other . _months ; return duration . _bubble ( ) ; }
function add$1 ( input , value ) { return addSubtract$1 ( this , input , value , 1 ) ; }
function subtract$1 ( input , value ) { return addSubtract$1 ( this , input , value , - 1 ) ; }
function absCeil ( number ) { if ( number < 0 ) { return Math . floor ( number ) ; } else { return Math . ceil ( number ) ; } }
function bubble ( ) { var milliseconds = this . _milliseconds ; var days = this . _days ; var months = this . _months ; var data = this . _data ; var seconds , minutes , hours , years , monthsFromDays ; if ( ! ( ( milliseconds >= 0 && days >= 0 && months >= 0 ) || ( milliseconds <= 0 && days <= 0 && months <= 0 ) ) ) { milliseconds += absCeil ( monthsToDays ( months ) + days ) * 864e5 ; days = 0 ; months = 0 ; }
data . milliseconds = milliseconds % 1000 ; seconds = absFloor ( milliseconds / 1000 ) ; data . seconds = seconds % 60 ; minutes = absFloor ( seconds / 60 ) ; data . minutes = minutes % 60 ; hours = absFloor ( minutes / 60 ) ; data . hours = hours % 24 ; days += absFloor ( hours / 24 ) ; monthsFromDays = absFloor ( daysToMonths ( days ) ) ; months += monthsFromDays ; days -= absCeil ( monthsToDays ( monthsFromDays ) ) ; years = absFloor ( months / 12 ) ; months %= 12 ; data . days = days ; data . months = months ; data . years = years ; return this ; }
function daysToMonths ( days ) { return days * 4800 / 146097 ; }
function monthsToDays ( months ) { return months * 146097 / 4800 ; }
function as ( units ) { if ( ! this . isValid ( ) ) { return NaN ; }
var days ; var months ; var milliseconds = this . _milliseconds ; units = normalizeUnits ( units ) ; if ( units === 'month' || units === 'quarter' || units === 'year' ) { days = this . _days + milliseconds / 864e5 ; months = this . _months + daysToMonths ( days ) ; switch ( units ) { case 'month' : return months ; case 'quarter' : return months / 3 ; case 'year' : return months / 12 ; } } else { days = this . _days + Math . round ( monthsToDays ( this . _months ) ) ; switch ( units ) { case 'week' : return days / 7 + milliseconds / 6048e5 ; case 'day' : return days + milliseconds / 864e5 ; case 'hour' : return days * 24 + milliseconds / 36e5 ; case 'minute' : return days * 1440 + milliseconds / 6e4 ; case 'second' : return days * 86400 + milliseconds / 1000 ; case 'millisecond' : return Math . floor ( days * 864e5 ) + milliseconds ; default : throw new Error ( 'Unknown unit ' + units ) ; } } }
function valueOf$1 ( ) { if ( ! this . isValid ( ) ) { return NaN ; }
return ( this . _milliseconds +
this . _days * 864e5 +
( this . _months % 12 ) * 2592e6 +
toInt ( this . _months / 12 ) * 31536e6 ) ; }
function makeAs ( alias ) { return function ( ) { return this . as ( alias ) ; } ; }
var asMilliseconds = makeAs ( 'ms' ) ; var asSeconds = makeAs ( 's' ) ; var asMinutes = makeAs ( 'm' ) ; var asHours = makeAs ( 'h' ) ; var asDays = makeAs ( 'd' ) ; var asWeeks = makeAs ( 'w' ) ; var asMonths = makeAs ( 'M' ) ; var asQuarters = makeAs ( 'Q' ) ; var asYears = makeAs ( 'y' ) ; function clone$1 ( ) { return createDuration ( this ) ; }
function get$2 ( units ) { units = normalizeUnits ( units ) ; return this . isValid ( ) ? this [ units + 's' ] ( ) : NaN ; }
function makeGetter ( name ) { return function ( ) { return this . isValid ( ) ? this . _data [ name ] : NaN ; } ; }
var milliseconds = makeGetter ( 'milliseconds' ) ; var seconds = makeGetter ( 'seconds' ) ; var minutes = makeGetter ( 'minutes' ) ; var hours = makeGetter ( 'hours' ) ; var days = makeGetter ( 'days' ) ; var months = makeGetter ( 'months' ) ; var years = makeGetter ( 'years' ) ; function weeks ( ) { return absFloor ( this . days ( ) / 7 ) ; }
var round = Math . round ; var thresholds = { ss : 44 , s : 45 , m : 45 , h : 22 , d : 26 , M : 11 } ; function substituteTimeAgo ( string , number , withoutSuffix , isFuture , locale ) { return locale . relativeTime ( number || 1 , ! ! withoutSuffix , string , isFuture ) ; }
function relativeTime$1 ( posNegDuration , withoutSuffix , locale ) { var duration = createDuration ( posNegDuration ) . abs ( ) ; var seconds = round ( duration . as ( 's' ) ) ; var minutes = round ( duration . as ( 'm' ) ) ; var hours = round ( duration . as ( 'h' ) ) ; var days = round ( duration . as ( 'd' ) ) ; var months = round ( duration . as ( 'M' ) ) ; var years = round ( duration . as ( 'y' ) ) ; var a = seconds <= thresholds . ss && [ 's' , seconds ] || seconds < thresholds . s && [ 'ss' , seconds ] || minutes <= 1 && [ 'm' ] || minutes < thresholds . m && [ 'mm' , minutes ] || hours <= 1 && [ 'h' ] || hours < thresholds . h && [ 'hh' , hours ] || days <= 1 && [ 'd' ] || days < thresholds . d && [ 'dd' , days ] || months <= 1 && [ 'M' ] || months < thresholds . M && [ 'MM' , months ] || years <= 1 && [ 'y' ] || [ 'yy' , years ] ; a [ 2 ] = withoutSuffix ; a [ 3 ] = + posNegDuration > 0 ; a [ 4 ] = locale ; return substituteTimeAgo . apply ( null , a ) ; }
function getSetRelativeTimeRounding ( roundingFunction ) { if ( roundingFunction === undefined ) { return round ; }
if ( typeof ( roundingFunction ) === 'function' ) { round = roundingFunction ; return true ; }
return false ; }
function getSetRelativeTimeThreshold ( threshold , limit ) { if ( thresholds [ threshold ] === undefined ) { return false ; }
if ( limit === undefined ) { return thresholds [ threshold ] ; }
thresholds [ threshold ] = limit ; if ( threshold === 's' ) { thresholds . ss = limit - 1 ; }
return true ; }
function humanize ( withSuffix ) { if ( ! this . isValid ( ) ) { return this . localeData ( ) . invalidDate ( ) ; }
var locale = this . localeData ( ) ; var output = relativeTime$1 ( this , ! withSuffix , locale ) ; if ( withSuffix ) { output = locale . pastFuture ( + this , output ) ; }
return locale . postformat ( output ) ; }
var abs$1 = Math . abs ; function sign ( x ) { return ( ( x > 0 ) - ( x < 0 ) ) || + x ; }
function toISOString$1 ( ) { if ( ! this . isValid ( ) ) { return this . localeData ( ) . invalidDate ( ) ; }
var seconds = abs$1 ( this . _milliseconds ) / 1000 ; var days = abs$1 ( this . _days ) ; var months = abs$1 ( this . _months ) ; var minutes , hours , years ; minutes = absFloor ( seconds / 60 ) ; hours = absFloor ( minutes / 60 ) ; seconds %= 60 ; minutes %= 60 ; years = absFloor ( months / 12 ) ; months %= 12 ; var Y = years ; var M = months ; var D = days ; var h = hours ; var m = minutes ; var s = seconds ? seconds . toFixed ( 3 ) . replace ( /\.?0+$/ , '' ) : '' ; var total = this . asSeconds ( ) ; if ( ! total ) { return 'P0D' ; }
var totalSign = total < 0 ? '-' : '' ; var ymSign = sign ( this . _months ) !== sign ( total ) ? '-' : '' ; var daysSign = sign ( this . _days ) !== sign ( total ) ? '-' : '' ; var hmsSign = sign ( this . _milliseconds ) !== sign ( total ) ? '-' : '' ; return totalSign + 'P' +
( Y ? ymSign + Y + 'Y' : '' ) +
( M ? ymSign + M + 'M' : '' ) +
( D ? daysSign + D + 'D' : '' ) +
( ( h || m || s ) ? 'T' : '' ) +
( h ? hmsSign + h + 'H' : '' ) +
( m ? hmsSign + m + 'M' : '' ) +
( s ? hmsSign + s + 'S' : '' ) ; }
var proto$2 = Duration . prototype ; proto$2 . isValid = isValid$1 ; proto$2 . abs = abs ; proto$2 . add = add$1 ; proto$2 . subtract = subtract$1 ; proto$2 . as = as ; proto$2 . asMilliseconds = asMilliseconds ; proto$2 . asSeconds = asSeconds ; proto$2 . asMinutes = asMinutes ; proto$2 . asHours = asHours ; proto$2 . asDays = asDays ; proto$2 . asWeeks = asWeeks ; proto$2 . asMonths = asMonths ; proto$2 . asQuarters = asQuarters ; proto$2 . asYears = asYears ; proto$2 . valueOf = valueOf$1 ; proto$2 . _bubble = bubble ; proto$2 . clone = clone$1 ; proto$2 . get = get$2 ; proto$2 . milliseconds = milliseconds ; proto$2 . seconds = seconds ; proto$2 . minutes = minutes ; proto$2 . hours = hours ; proto$2 . days = days ; proto$2 . weeks = weeks ; proto$2 . months = months ; proto$2 . years = years ; proto$2 . humanize = humanize ; proto$2 . toISOString = toISOString$1 ; proto$2 . toString = toISOString$1 ; proto$2 . toJSON = toISOString$1 ; proto$2 . locale = locale ; proto$2 . localeData = localeData ; proto$2 . toIsoString = deprecate ( 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)' , toISOString$1 ) ; proto$2 . lang = lang ; addFormatToken ( 'X' , 0 , 0 , 'unix' ) ; addFormatToken ( 'x' , 0 , 0 , 'valueOf' ) ; addRegexToken ( 'x' , matchSigned ) ; addRegexToken ( 'X' , matchTimestamp ) ; addParseToken ( 'X' , function ( input , array , config ) { config . _d = new Date ( parseFloat ( input , 10 ) * 1000 ) ; } ) ; addParseToken ( 'x' , function ( input , array , config ) { config . _d = new Date ( toInt ( input ) ) ; } ) ; hooks . version = '2.24.0' ; setHookCallback ( createLocal ) ; hooks . fn = proto ; hooks . min = min ; hooks . max = max ; hooks . now = now ; hooks . utc = createUTC ; hooks . unix = createUnix ; hooks . months = listMonths ; hooks . isDate = isDate ; hooks . locale = getSetGlobalLocale ; hooks . invalid = createInvalid ; hooks . duration = createDuration ; hooks . isMoment = isMoment ; hooks . weekdays = listWeekdays ; hooks . parseZone = createInZone ; hooks . localeData = getLocale ; hooks . isDuration = isDuration ; hooks . monthsShort = listMonthsShort ; hooks . weekdaysMin = listWeekdaysMin ; hooks . defineLocale = defineLocale ; hooks . updateLocale = updateLocale ; hooks . locales = listLocales ; hooks . weekdaysShort = listWeekdaysShort ; hooks . normalizeUnits = normalizeUnits ; hooks . relativeTimeRounding = getSetRelativeTimeRounding ; hooks . relativeTimeThreshold = getSetRelativeTimeThreshold ; hooks . calendarFormat = getCalendarFormat ; hooks . prototype = proto ; hooks . HTML5 _FMT = { DATETIME _LOCAL : 'YYYY-MM-DDTHH:mm' , DATETIME _LOCAL _SECONDS : 'YYYY-MM-DDTHH:mm:ss' , DATETIME _LOCAL _MS : 'YYYY-MM-DDTHH:mm:ss.SSS' , DATE : 'YYYY-MM-DD' , TIME : 'HH:mm' , TIME _SECONDS : 'HH:mm:ss' , TIME _MS : 'HH:mm:ss.SSS' , WEEK : 'GGGG-[W]WW' , MONTH : 'YYYY-MM' } ; return hooks ; } ) ) ) ; ; / * ! A d m i n L T E a p p . j s
* === === === === === =
* Main JS application file for AdminLTE v2 . This file
* should be included in all pages . It controls some layout
* options and implements exclusive AdminLTE plugins .
*
* @ Author Almsaeed Studio
* @ Support < https : //www.almsaeedstudio.com>
* @ Email < abdullah @ almsaeedstudio . com >
* @ version 2.4 . 8
* @ repository git : //github.com/almasaeed2010/AdminLTE.git
* @ license MIT < http : //opensource.org/licenses/MIT>
* /
if ( typeof jQuery === 'undefined' ) { throw new Error ( 'AdminLTE requires jQuery' ) }
+ function ( $ ) { 'use strict' ; var DataKey = 'lte.boxrefresh' ; var Default = { source : '' , params : { } , trigger : '.refresh-btn' , content : '.box-body' , loadInContent : true , responseType : '' , overlayTemplate : '<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>' , onLoadStart : function ( ) { } , onLoadDone : function ( response ) { return response ; } } ; var Selector = { data : '[data-widget="box-refresh"]' } ; var BoxRefresh = function ( element , options ) { this . element = element ; this . options = options ; this . $overlay = $ ( options . overlayTemplate ) ; if ( options . source === '' ) { throw new Error ( 'Source url was not defined. Please specify a url in your BoxRefresh source option.' ) ; }
this . _setUpListeners ( ) ; this . load ( ) ; } ; BoxRefresh . prototype . load = function ( ) { this . _addOverlay ( ) ; this . options . onLoadStart . call ( $ ( this ) ) ; $ . get ( this . options . source , this . options . params , function ( response ) { if ( this . options . loadInContent ) { $ ( this . element ) . find ( this . options . content ) . html ( response ) ; }
this . options . onLoadDone . call ( $ ( this ) , response ) ; this . _removeOverlay ( ) ; } . bind ( this ) , this . options . responseType !== '' && this . options . responseType ) ; } ; BoxRefresh . prototype . _setUpListeners = function ( ) { $ ( this . element ) . on ( 'click' , this . options . trigger , function ( event ) { if ( event ) event . preventDefault ( ) ; this . load ( ) ; } . bind ( this ) ) ; } ; BoxRefresh . prototype . _addOverlay = function ( ) { $ ( this . element ) . append ( this . $overlay ) ; } ; BoxRefresh . prototype . _removeOverlay = function ( ) { $ ( this . $overlay ) . remove ( ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , ( data = new BoxRefresh ( $this , options ) ) ) ; }
if ( typeof data == 'string' ) { if ( typeof data [ option ] == 'undefined' ) { throw new Error ( 'No method named ' + option ) ; }
data [ option ] ( ) ; } } ) ; }
var old = $ . fn . boxRefresh ; $ . fn . boxRefresh = Plugin ; $ . fn . boxRefresh . Constructor = BoxRefresh ; $ . fn . boxRefresh . noConflict = function ( ) { $ . fn . boxRefresh = old ; return this ; } ; $ ( window ) . on ( 'load' , function ( ) { $ ( Selector . data ) . each ( function ( ) { Plugin . call ( $ ( this ) ) ; } ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.boxwidget' ; var Default = { animationSpeed : 500 , collapseTrigger : '[data-widget="collapse"]' , removeTrigger : '[data-widget="remove"]' , collapseIcon : 'fa-minus' , expandIcon : 'fa-plus' , removeIcon : 'fa-times' } ; var Selector = { data : '.box' , collapsed : '.collapsed-box' , header : '.box-header' , body : '.box-body' , footer : '.box-footer' , tools : '.box-tools' } ; var ClassName = { collapsed : 'collapsed-box' } ; var Event = { collapsing : 'collapsing.boxwidget' , collapsed : 'collapsed.boxwidget' , expanding : 'expanding.boxwidget' , expanded : 'expanded.boxwidget' , removing : 'removing.boxwidget' , removed : 'removed.boxwidget' } ; var BoxWidget = function ( element , options ) { this . element = element ; this . options = options ; this . _setUpListeners ( ) ; } ; BoxWidget . prototype . toggle = function ( ) { var isOpen = ! $ ( this . element ) . is ( Selector . collapsed ) ; if ( isOpen ) { this . collapse ( ) ; } else { this . expand ( ) ; } } ; BoxWidget . prototype . expand = function ( ) { var expandedEvent = $ . Event ( Event . expanded ) ; var expandingEvent = $ . Event ( Event . expanding ) ; var collapseIcon = this . options . collapseIcon ; var expandIcon = this . options . expandIcon ; $ ( this . element ) . removeClass ( ClassName . collapsed ) ; $ ( this . element ) . children ( Selector . header + ', ' + Selector . body + ', ' + Selector . footer ) . children ( Selector . tools ) . find ( '.' + expandIcon ) . removeClass ( expandIcon ) . addClass ( collapseIcon ) ; $ ( this . element ) . children ( Selector . body + ', ' + Selector . footer ) . slideDown ( this . options . animationSpeed , function ( ) { $ ( this . element ) . trigger ( expandedEvent ) ; } . bind ( this ) ) . trigger ( expandingEvent ) ; } ; BoxWidget . prototype . collapse = function ( ) { var collapsedEvent = $ . Event ( Event . collapsed ) ; var collapsingEvent = $ . Event ( Event . collapsing ) ; var collapseIcon = this . options . collapseIcon ; var expandIcon = this . options . expandIcon ; $ ( this . element ) . children ( Selector . header + ', ' + Selector . body + ', ' + Selector . footer ) . children ( Selector . tools ) . find ( '.' + collapseIcon ) . removeClass ( collapseIcon ) . addClass ( expandIcon ) ; $ ( this . element ) . children ( Selector . body + ', ' + Selector . footer ) . slideUp ( this . options . animationSpeed , function ( ) { $ ( this . element ) . addClass ( ClassName . collapsed ) ; $ ( this . element ) . trigger ( collapsedEvent ) ; } . bind ( this ) ) . trigger ( expandingEvent ) ; } ; BoxWidget . prototype . remove = function ( ) { var removedEvent = $ . Event ( Event . removed ) ; var removingEvent = $ . Event ( Event . removing ) ; $ ( this . element ) . slideUp ( this . options . animationSpeed , function ( ) { $ ( this . element ) . trigger ( removedEvent ) ; $ ( this . element ) . remove ( ) ; } . bind ( this ) ) . trigger ( removingEvent ) ; } ; BoxWidget . prototype . _setUpListeners = function ( ) { var that = this ; $ ( this . element ) . on ( 'click' , this . options . collapseTrigger , function ( event ) { if ( event ) event . preventDefault ( ) ; that . toggle ( $ ( this ) ) ; return false ; } ) ; $ ( this . element ) . on ( 'click' , this . options . removeTrigger , function ( event ) { if ( event ) event . preventDefault ( ) ; that . remove ( $ ( this ) ) ; return false ; } ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , ( data = new BoxWidget ( $this , options ) ) ) ; }
if ( typeof option == 'string' ) { if ( typeof data [ option ] == 'undefined' ) { throw new Error ( 'No method named ' + option ) ; }
data [ option ] ( ) ; } } ) ; }
var old = $ . fn . boxWidget ; $ . fn . boxWidget = Plugin ; $ . fn . boxWidget . Constructor = BoxWidget ; $ . fn . boxWidget . noConflict = function ( ) { $ . fn . boxWidget = old ; return this ; } ; $ ( window ) . on ( 'load' , function ( ) { $ ( Selector . data ) . each ( function ( ) { Plugin . call ( $ ( this ) ) ; } ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.controlsidebar' ; var Default = { slide : true } ; var Selector = { sidebar : '.control-sidebar' , data : '[data-toggle="control-sidebar"]' , open : '.control-sidebar-open' , bg : '.control-sidebar-bg' , wrapper : '.wrapper' , content : '.content-wrapper' , boxed : '.layout-boxed' } ; var ClassName = { open : 'control-sidebar-open' , fixed : 'fixed' } ; var Event = { collapsed : 'collapsed.controlsidebar' , expanded : 'expanded.controlsidebar' } ; var ControlSidebar = function ( element , options ) { this . element = element ; this . options = options ; this . hasBindedResize = false ; this . init ( ) ; } ; ControlSidebar . prototype . init = function ( ) { if ( ! $ ( this . element ) . is ( Selector . data ) ) { $ ( this ) . on ( 'click' , this . toggle ) ; }
this . fix ( ) ; $ ( window ) . resize ( function ( ) { this . fix ( ) ; } . bind ( this ) ) ; } ; ControlSidebar . prototype . toggle = function ( event ) { if ( event ) event . preventDefault ( ) ; this . fix ( ) ; if ( ! $ ( Selector . sidebar ) . is ( Selector . open ) && ! $ ( 'body' ) . is ( Selector . open ) ) { this . expand ( ) ; } else { this . collapse ( ) ; } } ; ControlSidebar . prototype . expand = function ( ) { if ( ! this . options . slide ) { $ ( 'body' ) . addClass ( ClassName . open ) ; } else { $ ( Selector . sidebar ) . addClass ( ClassName . open ) ; }
$ ( this . element ) . trigger ( $ . Event ( Event . expanded ) ) ; } ; ControlSidebar . prototype . collapse = function ( ) { $ ( 'body, ' + Selector . sidebar ) . removeClass ( ClassName . open ) ; $ ( this . element ) . trigger ( $ . Event ( Event . collapsed ) ) ; } ; ControlSidebar . prototype . fix = function ( ) { if ( $ ( 'body' ) . is ( Selector . boxed ) ) { this . _fixForBoxed ( $ ( Selector . bg ) ) ; } } ; ControlSidebar . prototype . _fixForBoxed = function ( bg ) { bg . css ( { position : 'absolute' , height : $ ( Selector . wrapper ) . height ( ) } ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , ( data = new ControlSidebar ( $this , options ) ) ) ; }
if ( typeof option == 'string' ) data . toggle ( ) ; } ) ; }
var old = $ . fn . controlSidebar ; $ . fn . controlSidebar = Plugin ; $ . fn . controlSidebar . Constructor = ControlSidebar ; $ . fn . controlSidebar . noConflict = function ( ) { $ . fn . controlSidebar = old ; return this ; } ; $ ( document ) . on ( 'click' , Selector . data , function ( event ) { if ( event ) event . preventDefault ( ) ; Plugin . call ( $ ( this ) , 'toggle' ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.directchat' ; var Selector = { data : '[data-widget="chat-pane-toggle"]' , box : '.direct-chat' } ; var ClassName = { open : 'direct-chat-contacts-open' } ; var DirectChat = function ( element ) { this . element = element ; } ; DirectChat . prototype . toggle = function ( $trigger ) { $trigger . parents ( Selector . box ) . first ( ) . toggleClass ( ClassName . open ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { $this . data ( DataKey , ( data = new DirectChat ( $this ) ) ) ; }
if ( typeof option == 'string' ) data . toggle ( $this ) ; } ) ; }
var old = $ . fn . directChat ; $ . fn . directChat = Plugin ; $ . fn . directChat . Constructor = DirectChat ; $ . fn . directChat . noConflict = function ( ) { $ . fn . directChat = old ; return this ; } ; $ ( document ) . on ( 'click' , Selector . data , function ( event ) { if ( event ) event . preventDefault ( ) ; Plugin . call ( $ ( this ) , 'toggle' ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.layout' ; var Default = { slimscroll : true , resetHeight : true } ; var Selector = { wrapper : '.wrapper' , contentWrapper : '.content-wrapper' , layoutBoxed : '.layout-boxed' , mainFooter : '.main-footer' , mainHeader : '.main-header' , sidebar : '.sidebar' , controlSidebar : '.control-sidebar' , fixed : '.fixed' , sidebarMenu : '.sidebar-menu' , logo : '.main-header .logo' } ; var ClassName = { fixed : 'fixed' , holdTransition : 'hold-transition' } ; var Layout = function ( options ) { this . options = options ; this . bindedResize = false ; this . activate ( ) ; } ; Layout . prototype . activate = function ( ) { this . fix ( ) ; this . fixSidebar ( ) ; $ ( 'body' ) . removeClass ( ClassName . holdTransition ) ; if ( this . options . resetHeight ) { $ ( 'body, html, ' + Selector . wrapper ) . css ( { 'height' : 'auto' , 'min-height' : '100%' } ) ; }
if ( ! this . bindedResize ) { $ ( window ) . resize ( function ( ) { this . fix ( ) ; this . fixSidebar ( ) ; $ ( Selector . logo + ', ' + Selector . sidebar ) . one ( 'webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend' , function ( ) { this . fix ( ) ; this . fixSidebar ( ) ; } . bind ( this ) ) ; } . bind ( this ) ) ; this . bindedResize = true ; }
$ ( Selector . sidebarMenu ) . on ( 'expanded.tree' , function ( ) { this . fix ( ) ; this . fixSidebar ( ) ; } . bind ( this ) ) ; $ ( Selector . sidebarMenu ) . on ( 'collapsed.tree' , function ( ) { this . fix ( ) ; this . fixSidebar ( ) ; } . bind ( this ) ) ; } ; Layout . prototype . fix = function ( ) { $ ( Selector . layoutBoxed + ' > ' + Selector . wrapper ) . css ( 'overflow' , 'hidden' ) ; var footerHeight = $ ( Selector . mainFooter ) . outerHeight ( ) || 0 ; var headerHeight = $ ( Selector . mainHeader ) . outerHeight ( ) || 0 ; var neg = headerHeight + footerHeight ; var windowHeight = $ ( window ) . height ( ) ; var sidebarHeight = $ ( Selector . sidebar ) . height ( ) || 0 ; if ( $ ( 'body' ) . hasClass ( ClassName . fixed ) ) { $ ( Selector . contentWrapper ) . css ( 'min-height' , windowHeight - footerHeight ) ; } else { var postSetHeight ; if ( windowHeight >= sidebarHeight + headerHeight ) { $ ( Selector . contentWrapper ) . css ( 'min-height' , windowHeight - neg ) ; postSetHeight = windowHeight - neg ; } else { $ ( Selector . contentWrapper ) . css ( 'min-height' , sidebarHeight ) ; postSetHeight = sidebarHeight ; }
var $controlSidebar = $ ( Selector . controlSidebar ) ; if ( typeof $controlSidebar !== 'undefined' ) { if ( $controlSidebar . height ( ) > postSetHeight )
$ ( Selector . contentWrapper ) . css ( 'min-height' , $controlSidebar . height ( ) ) ; } } } ; Layout . prototype . fixSidebar = function ( ) { if ( ! $ ( 'body' ) . hasClass ( ClassName . fixed ) ) { if ( typeof $ . fn . slimScroll !== 'undefined' ) { $ ( Selector . sidebar ) . slimScroll ( { destroy : true } ) . height ( 'auto' ) ; }
return ; }
if ( this . options . slimscroll ) { if ( typeof $ . fn . slimScroll !== 'undefined' ) { $ ( Selector . sidebar ) . slimScroll ( { height : ( $ ( window ) . height ( ) - $ ( Selector . mainHeader ) . height ( ) ) + 'px' } ) ; } } } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option === 'object' && option ) ; $this . data ( DataKey , ( data = new Layout ( options ) ) ) ; }
if ( typeof option === 'string' ) { if ( typeof data [ option ] === 'undefined' ) { throw new Error ( 'No method named ' + option ) ; }
data [ option ] ( ) ; } } ) ; }
var old = $ . fn . layout ; $ . fn . layout = Plugin ; $ . fn . layout . Constuctor = Layout ; $ . fn . layout . noConflict = function ( ) { $ . fn . layout = old ; return this ; } ; $ ( window ) . on ( 'load' , function ( ) { Plugin . call ( $ ( 'body' ) ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.pushmenu' ; var Default = { collapseScreenSize : 767 , expandOnHover : false , expandTransitionDelay : 200 } ; var Selector = { collapsed : '.sidebar-collapse' , open : '.sidebar-open' , mainSidebar : '.main-sidebar' , contentWrapper : '.content-wrapper' , searchInput : '.sidebar-form .form-control' , button : '[data-toggle="push-menu"]' , mini : '.sidebar-mini' , expanded : '.sidebar-expanded-on-hover' , layoutFixed : '.fixed' } ; var ClassName = { collapsed : 'sidebar-collapse' , open : 'sidebar-open' , mini : 'sidebar-mini' , expanded : 'sidebar-expanded-on-hover' , expandFeature : 'sidebar-mini-expand-feature' , layoutFixed : 'fixed' } ; var Event = { expanded : 'expanded.pushMenu' , collapsed : 'collapsed.pushMenu' } ; var PushMenu = function ( options ) { this . options = options ; this . init ( ) ; } ; PushMenu . prototype . init = function ( ) { if ( this . options . expandOnHover || ( $ ( 'body' ) . is ( Selector . mini + Selector . layoutFixed ) ) ) { this . expandOnHover ( ) ; $ ( 'body' ) . addClass ( ClassName . expandFeature ) ; }
$ ( Selector . contentWrapper ) . click ( function ( ) { if ( $ ( window ) . width ( ) <= this . options . collapseScreenSize && $ ( 'body' ) . hasClass ( ClassName . open ) ) { this . close ( ) ; } } . bind ( this ) ) ; $ ( Selector . searchInput ) . click ( function ( e ) { e . stopPropagation ( ) ; } ) ; } ; PushMenu . prototype . toggle = function ( ) { var windowWidth = $ ( window ) . width ( ) ; var isOpen = ! $ ( 'body' ) . hasClass ( ClassName . collapsed ) ; if ( windowWidth <= this . options . collapseScreenSize ) { isOpen = $ ( 'body' ) . hasClass ( ClassName . open ) ; }
if ( ! isOpen ) { this . open ( ) ; } else { this . close ( ) ; } } ; PushMenu . prototype . open = function ( ) { var windowWidth = $ ( window ) . width ( ) ; if ( windowWidth > this . options . collapseScreenSize ) { $ ( 'body' ) . removeClass ( ClassName . collapsed ) . trigger ( $ . Event ( Event . expanded ) ) ; }
else { $ ( 'body' ) . addClass ( ClassName . open ) . trigger ( $ . Event ( Event . expanded ) ) ; } } ; PushMenu . prototype . close = function ( ) { var windowWidth = $ ( window ) . width ( ) ; if ( windowWidth > this . options . collapseScreenSize ) { $ ( 'body' ) . addClass ( ClassName . collapsed ) . trigger ( $ . Event ( Event . collapsed ) ) ; } else { $ ( 'body' ) . removeClass ( ClassName . open + ' ' + ClassName . collapsed ) . trigger ( $ . Event ( Event . collapsed ) ) ; } } ; PushMenu . prototype . expandOnHover = function ( ) { $ ( Selector . mainSidebar ) . hover ( function ( ) { if ( $ ( 'body' ) . is ( Selector . mini + Selector . collapsed ) && $ ( window ) . width ( ) > this . options . collapseScreenSize ) { this . expand ( ) ; } } . bind ( this ) , function ( ) { if ( $ ( 'body' ) . is ( Selector . expanded ) ) { this . collapse ( ) ; } } . bind ( this ) ) ; } ; PushMenu . prototype . expand = function ( ) { setTimeout ( function ( ) { $ ( 'body' ) . removeClass ( ClassName . collapsed ) . addClass ( ClassName . expanded ) ; } , this . options . expandTransitionDelay ) ; } ; PushMenu . prototype . collapse = function ( ) { setTimeout ( function ( ) { $ ( 'body' ) . removeClass ( ClassName . expanded ) . addClass ( ClassName . collapsed ) ; } , this . options . expandTransitionDelay ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , ( data = new PushMenu ( options ) ) ) ; }
if ( option === 'toggle' ) data . toggle ( ) ; } ) ; }
var old = $ . fn . pushMenu ; $ . fn . pushMenu = Plugin ; $ . fn . pushMenu . Constructor = PushMenu ; $ . fn . pushMenu . noConflict = function ( ) { $ . fn . pushMenu = old ; return this ; } ; $ ( document ) . on ( 'click' , Selector . button , function ( e ) { e . preventDefault ( ) ; Plugin . call ( $ ( this ) , 'toggle' ) ; } ) ; $ ( window ) . on ( 'load' , function ( ) { Plugin . call ( $ ( Selector . button ) ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.todolist' ; var Default = { onCheck : function ( item ) { return item ; } , onUnCheck : function ( item ) { return item ; } } ; var Selector = { data : '[data-widget="todo-list"]' } ; var ClassName = { done : 'done' } ; var TodoList = function ( element , options ) { this . element = element ; this . options = options ; this . _setUpListeners ( ) ; } ; TodoList . prototype . toggle = function ( item ) { item . parents ( Selector . li ) . first ( ) . toggleClass ( ClassName . done ) ; if ( ! item . prop ( 'checked' ) ) { this . unCheck ( item ) ; return ; }
this . check ( item ) ; } ; TodoList . prototype . check = function ( item ) { this . options . onCheck . call ( item ) ; } ; TodoList . prototype . unCheck = function ( item ) { this . options . onUnCheck . call ( item ) ; } ; TodoList . prototype . _setUpListeners = function ( ) { var that = this ; $ ( this . element ) . on ( 'change ifChanged' , 'input:checkbox' , function ( ) { that . toggle ( $ ( this ) ) ; } ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , ( data = new TodoList ( $this , options ) ) ) ; }
if ( typeof data == 'string' ) { if ( typeof data [ option ] == 'undefined' ) { throw new Error ( 'No method named ' + option ) ; }
data [ option ] ( ) ; } } ) ; }
var old = $ . fn . todoList ; $ . fn . todoList = Plugin ; $ . fn . todoList . Constructor = TodoList ; $ . fn . todoList . noConflict = function ( ) { $ . fn . todoList = old ; return this ; } ; $ ( window ) . on ( 'load' , function ( ) { $ ( Selector . data ) . each ( function ( ) { Plugin . call ( $ ( this ) ) ; } ) ; } ) ; } ( jQuery ) ; + function ( $ ) { 'use strict' ; var DataKey = 'lte.tree' ; var Default = { animationSpeed : 500 , accordion : true , followLink : false , trigger : '.treeview a' } ; var Selector = { tree : '.tree' , treeview : '.treeview' , treeviewMenu : '.treeview-menu' , open : '.menu-open, .active' , li : 'li' , data : '[data-widget="tree"]' , active : '.active' } ; var ClassName = { open : 'menu-open' , tree : 'tree' } ; var Event = { collapsed : 'collapsed.tree' , expanded : 'expanded.tree' } ; var Tree = function ( element , options ) { this . element = element ; this . options = options ; $ ( this . element ) . addClass ( ClassName . tree ) ; $ ( Selector . treeview + Selector . active , this . element ) . addClass ( ClassName . open ) ; this . _setUpListeners ( ) ; } ; Tree . prototype . toggle = function ( link , event ) { var treeviewMenu = link . next ( Selector . treeviewMenu ) ; var parentLi = link . parent ( ) ; var isOpen = parentLi . hasClass ( ClassName . open ) ; if ( ! parentLi . is ( Selector . treeview ) ) { return ; }
if ( ! this . options . followLink || link . attr ( 'href' ) === '#' ) { event . preventDefault ( ) ; }
if ( isOpen ) { this . collapse ( treeviewMenu , parentLi ) ; } else { this . expand ( treeviewMenu , parentLi ) ; } } ; Tree . prototype . expand = function ( tree , parent ) { var expandedEvent = $ . Event ( Event . expanded ) ; if ( this . options . accordion ) { var openMenuLi = parent . siblings ( Selector . open ) ; var openTree = openMenuLi . children ( Selector . treeviewMenu ) ; this . collapse ( openTree , openMenuLi ) ; }
parent . addClass ( ClassName . open ) ; tree . slideDown ( this . options . animationSpeed , function ( ) { $ ( this . element ) . trigger ( expandedEvent ) ; } . bind ( this ) ) ; } ; Tree . prototype . collapse = function ( tree , parentLi ) { var collapsedEvent = $ . Event ( Event . collapsed ) ; parentLi . removeClass ( ClassName . open ) ; tree . slideUp ( this . options . animationSpeed , function ( ) { $ ( this . element ) . trigger ( collapsedEvent ) ; } . bind ( this ) ) ; } ; Tree . prototype . _setUpListeners = function ( ) { var that = this ; $ ( this . element ) . on ( 'click' , this . options . trigger , function ( event ) { that . toggle ( $ ( this ) , event ) ; } ) ; } ; function Plugin ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( DataKey ) ; if ( ! data ) { var options = $ . extend ( { } , Default , $this . data ( ) , typeof option == 'object' && option ) ; $this . data ( DataKey , new Tree ( $this , options ) ) ; } } ) ; }
var old = $ . fn . tree ; $ . fn . tree = Plugin ; $ . fn . tree . Constructor = Tree ; $ . fn . tree . noConflict = function ( ) { $ . fn . tree = old ; return this ; } ; $ ( window ) . on ( 'load' , function ( ) { $ ( Selector . data ) . each ( function ( ) { Plugin . call ( $ ( this ) ) ; } ) ; } ) ; } ( jQuery ) ; ; ! function ( $ ) { "use strict" ; var MultiSelect = function ( element , options ) { this . options = options ; this . $element = $ ( element ) ; this . $container = $ ( '<div/>' , { 'class' : "ms-container" } ) ; this . $selectableContainer = $ ( '<div/>' , { 'class' : 'ms-selectable' } ) ; this . $selectionContainer = $ ( '<div/>' , { 'class' : 'ms-selection' } ) ; this . $selectableUl = $ ( '<ul/>' , { 'class' : "ms-list" , 'tabindex' : '-1' } ) ; this . $selectionUl = $ ( '<ul/>' , { 'class' : "ms-list" , 'tabindex' : '-1' } ) ; this . scrollTo = 0 ; this . elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.' + options . disabledClass + ')' ; } ; MultiSelect . prototype = { constructor : MultiSelect , init : function ( ) { var that = this , ms = this . $element ; if ( ms . next ( '.ms-container' ) . length === 0 ) { ms . css ( { position : 'absolute' , left : '-9999px' } ) ; ms . attr ( 'id' , ms . attr ( 'id' ) ? ms . attr ( 'id' ) : Math . ceil ( Math . random ( ) * 1000 ) + 'multiselect' ) ; this . $container . attr ( 'id' , 'ms-' + ms . attr ( 'id' ) ) ; this . $container . addClass ( that . options . cssClass ) ; ms . find ( 'option' ) . each ( function ( ) { that . generateLisFromOption ( this ) ; } ) ; this . $selectionUl . find ( '.ms-optgroup-label' ) . hide ( ) ; if ( that . options . selectableHeader ) { that . $selectableContainer . append ( that . options . selectableHeader ) ; }
that . $selectableContainer . append ( that . $selectableUl ) ; if ( that . options . selectableFooter ) { that . $selectableContainer . append ( that . options . selectableFooter ) ; }
if ( that . options . selectionHeader ) { that . $selectionContainer . append ( that . options . selectionHeader ) ; }
that . $selectionContainer . append ( that . $selectionUl ) ; if ( that . options . selectionFooter ) { that . $selectionContainer . append ( that . options . selectionFooter ) ; }
that . $container . append ( that . $selectableContainer ) ; that . $container . append ( that . $selectionContainer ) ; ms . after ( that . $container ) ; that . activeMouse ( that . $selectableUl ) ; that . activeKeyboard ( that . $selectableUl ) ; var action = that . options . dblClick ? 'dblclick' : 'click' ; that . $selectableUl . on ( action , '.ms-elem-selectable' , function ( ) { that . select ( $ ( this ) . data ( 'ms-value' ) ) ; } ) ; that . $selectionUl . on ( action , '.ms-elem-selection' , function ( ) { that . deselect ( $ ( this ) . data ( 'ms-value' ) ) ; } ) ; that . activeMouse ( that . $selectionUl ) ; that . activeKeyboard ( that . $selectionUl ) ; ms . on ( 'focus' , function ( ) { that . $selectableUl . focus ( ) ; } ) }
var selectedValues = ms . find ( 'option:selected' ) . map ( function ( ) { return $ ( this ) . val ( ) ; } ) . get ( ) ; that . select ( selectedValues , 'init' ) ; if ( typeof that . options . afterInit === 'function' ) { that . options . afterInit . call ( this , this . $container ) ; } } , 'generateLisFromOption' : function ( option , index , $container ) { var that = this , ms = that . $element , attributes = "" , $option = $ ( option ) ; for ( var cpt = 0 ; cpt < option . attributes . length ; cpt ++ ) { var attr = option . attributes [ cpt ] ; if ( attr . name !== 'value' && attr . name !== 'disabled' ) { attributes += attr . name + '="' + attr . value + '" ' ; } }
var selectableLi = $ ( '<li ' + attributes + '><span>' + that . escapeHTML ( $option . text ( ) ) + '</span></li>' ) , selectedLi = selectableLi . clone ( ) , value = $option . val ( ) , elementId = that . sanitize ( value ) ; selectableLi . data ( 'ms-value' , value ) . addClass ( 'ms-elem-selectable' ) . attr ( 'id' , elementId + '-selectable' ) ; selectedLi . data ( 'ms-value' , value ) . addClass ( 'ms-elem-selection' ) . attr ( 'id' , elementId + '-selection' ) . hide ( ) ; if ( $option . prop ( 'disabled' ) || ms . prop ( 'disabled' ) ) { selectedLi . addClass ( that . options . disabledClass ) ; selectableLi . addClass ( that . options . disabledClass ) ; }
var $optgroup = $option . parent ( 'optgroup' ) ; if ( $optgroup . length > 0 ) { var optgroupLabel = $optgroup . attr ( 'label' ) , optgroupId = that . sanitize ( optgroupLabel ) , $selectableOptgroup = that . $selectableUl . find ( '#optgroup-selectable-' + optgroupId ) , $selectionOptgroup = that . $selectionUl . find ( '#optgroup-selection-' + optgroupId ) ; if ( $selectableOptgroup . length === 0 ) { var optgroupContainerTpl = '<li class="ms-optgroup-container"></li>' , optgroupTpl = '<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>' + optgroupLabel + '</span></li></ul>' ; $selectableOptgroup = $ ( optgroupContainerTpl ) ; $selectionOptgroup = $ ( optgroupContainerTpl ) ; $selectableOptgroup . attr ( 'id' , 'optgroup-selectable-' + optgroupId ) ; $selectionOptgroup . attr ( 'id' , 'optgroup-selection-' + optgroupId ) ; $selectableOptgroup . append ( $ ( optgroupTpl ) ) ; $selectionOptgroup . append ( $ ( optgroupTpl ) ) ; if ( that . options . selectableOptgroup ) { $selectableOptgroup . find ( '.ms-optgroup-label' ) . on ( 'click' , function ( ) { var values = $optgroup . children ( ':not(:selected, :disabled)' ) . map ( function ( ) { return $ ( this ) . val ( ) } ) . get ( ) ; that . select ( values ) ; } ) ; $selectionOptgroup . find ( '.ms-optgroup-label' ) . on ( 'click' , function ( ) { var values = $optgroup . children ( ':selected:not(:disabled)' ) . map ( function ( ) { return $ ( this ) . val ( ) } ) . get ( ) ; that . deselect ( values ) ; } ) ; }
that . $selectableUl . append ( $selectableOptgroup ) ; that . $selectionUl . append ( $selectionOptgroup ) ; }
index = index == undefined ? $selectableOptgroup . find ( 'ul' ) . children ( ) . length : index + 1 ; selectableLi . insertAt ( index , $selectableOptgroup . children ( ) ) ; selectedLi . insertAt ( index , $selectionOptgroup . children ( ) ) ; } else { index = index == undefined ? that . $selectableUl . children ( ) . length : index ; selectableLi . insertAt ( index , that . $selectableUl ) ; selectedLi . insertAt ( index , that . $selectionUl ) ; } } , 'addOption' : function ( options ) { var that = this ; if ( options . value !== undefined && options . value !== null ) { options = [ options ] ; }
$ . each ( options , function ( index , option ) { if ( option . value !== undefined && option . value !== null && that . $element . find ( "option[value='" + option . value + "']" ) . length === 0 ) { var $option = $ ( '<option value="' + option . value + '">' + option . text + '</option>' ) , index = parseInt ( ( typeof option . index === 'undefined' ? that . $element . children ( ) . length : option . index ) ) , $container = option . nested == undefined ? that . $element : $ ( "optgroup[label='" + option . nested + "']" )
$option . insertAt ( index , $container ) ; that . generateLisFromOption ( $option . get ( 0 ) , index , option . nested ) ; } } ) } , 'escapeHTML' : function ( text ) { return $ ( "<div>" ) . text ( text ) . html ( ) ; } , 'activeKeyboard' : function ( $list ) { var that = this ; $list . on ( 'focus' , function ( ) { $ ( this ) . addClass ( 'ms-focus' ) ; } ) . on ( 'blur' , function ( ) { $ ( this ) . removeClass ( 'ms-focus' ) ; } ) . on ( 'keydown' , function ( e ) { switch ( e . which ) { case 40 : case 38 : e . preventDefault ( ) ; e . stopPropagation ( ) ; that . moveHighlight ( $ ( this ) , ( e . which === 38 ) ? - 1 : 1 ) ; return ; case 37 : case 39 : e . preventDefault ( ) ; e . stopPropagation ( ) ; that . switchList ( $list ) ; return ; case 9 : if ( that . $element . is ( '[tabindex]' ) ) { e . preventDefault ( ) ; var tabindex = parseInt ( that . $element . attr ( 'tabindex' ) , 10 ) ; tabindex = ( e . shiftKey ) ? tabindex - 1 : tabindex + 1 ; $ ( '[tabindex="' + ( tabindex ) + '"]' ) . focus ( ) ; return ; } else { if ( e . shiftKey ) { that . $element . trigger ( 'focus' ) ; } } }
if ( $ . inArray ( e . which , that . options . keySelect ) > - 1 ) { e . preventDefault ( ) ; e . stopPropagation ( ) ; that . selectHighlighted ( $list ) ; return ; } } ) ; } , 'moveHighlight' : function ( $list , direction ) { var $elems = $list . find ( this . elemsSelector ) , $currElem = $elems . filter ( '.ms-hover' ) , $nextElem = null , elemHeight = $elems . first ( ) . outerHeight ( ) , containerHeight = $list . height ( ) , containerSelector = '#' + this . $container . prop ( 'id' ) ; $elems . removeClass ( 'ms-hover' ) ; if ( direction === 1 ) { $nextElem = $currElem . nextAll ( this . elemsSelector ) . first ( ) ; if ( $nextElem . length === 0 ) { var $optgroupUl = $currElem . parent ( ) ; if ( $optgroupUl . hasClass ( 'ms-optgroup' ) ) { var $optgroupLi = $optgroupUl . parent ( ) , $nextOptgroupLi = $optgroupLi . next ( ':visible' ) ; if ( $nextOptgroupLi . length > 0 ) { $nextElem = $nextOptgroupLi . find ( this . elemsSelector ) . first ( ) ; } else { $nextElem = $elems . first ( ) ; } } else { $nextElem = $elems . first ( ) ; } } } else if ( direction === - 1 ) { $nextElem = $currElem . prevAll ( this . elemsSelector ) . first ( ) ; if ( $nextElem . length === 0 ) { var $optgroupUl = $currElem . parent ( ) ; if ( $optgroupUl . hasClass ( 'ms-optgroup' ) ) { var $optgroupLi = $optgroupUl . parent ( ) , $prevOptgroupLi = $optgroupLi . prev ( ':visible' ) ; if ( $prevOptgroupLi . length > 0 ) { $nextElem = $prevOptgroupLi . find ( this . elemsSelector ) . last ( ) ; } else { $nextElem = $elems . last ( ) ; } } else { $nextElem = $elems . last ( ) ; } } }
if ( $nextElem . length > 0 ) { $nextElem . addClass ( 'ms-hover' ) ; var scrollTo = $list . scrollTop ( ) + $nextElem . position ( ) . top -
containerHeight / 2 + elemHeight / 2 ; $list . scrollTop ( scrollTo ) ; } } , 'selectHighlighted' : function ( $list ) { var $elems = $list . find ( this . elemsSelector ) , $highlightedElem = $elems . filter ( '.ms-hover' ) . first ( ) ; if ( $highlightedElem . length > 0 ) { if ( $list . parent ( ) . hasClass ( 'ms-selectable' ) ) { this . select ( $highlightedElem . data ( 'ms-value' ) ) ; } else { this . deselect ( $highlightedElem . data ( 'ms-value' ) ) ; }
$elems . removeClass ( 'ms-hover' ) ; } } , 'switchList' : function ( $list ) { $list . blur ( ) ; this . $container . find ( this . elemsSelector ) . removeClass ( 'ms-hover' ) ; if ( $list . parent ( ) . hasClass ( 'ms-selectable' ) ) { this . $selectionUl . focus ( ) ; } else { this . $selectableUl . focus ( ) ; } } , 'activeMouse' : function ( $list ) { var that = this ; this . $container . on ( 'mouseenter' , that . elemsSelector , function ( ) { $ ( this ) . parents ( '.ms-container' ) . find ( that . elemsSelector ) . removeClass ( 'ms-hover' ) ; $ ( this ) . addClass ( 'ms-hover' ) ; } ) ; this . $container . on ( 'mouseleave' , that . elemsSelector , function ( ) { $ ( this ) . parents ( '.ms-container' ) . find ( that . elemsSelector ) . removeClass ( 'ms-hover' ) ; ; } ) ; } , 'refresh' : function ( ) { this . destroy ( ) ; this . $element . multiSelect ( this . options ) ; } , 'destroy' : function ( ) { $ ( "#ms-" + this . $element . attr ( "id" ) ) . remove ( ) ; this . $element . css ( 'position' , '' ) . css ( 'left' , '' )
this . $element . removeData ( 'multiselect' ) ; } , 'select' : function ( value , method ) { if ( typeof value === 'string' ) { value = [ value ] ; }
var that = this , ms = this . $element , msIds = $ . map ( value , function ( val ) { return ( that . sanitize ( val ) ) ; } ) , selectables = this . $selectableUl . find ( '#' + msIds . join ( '-selectable, #' ) + '-selectable' ) . filter ( ':not(.' + that . options . disabledClass + ')' ) , selections = this . $selectionUl . find ( '#' + msIds . join ( '-selection, #' ) + '-selection' ) . filter ( ':not(.' + that . options . disabledClass + ')' ) , options = ms . find ( 'option:not(:disabled)' ) . filter ( function ( ) { return ( $ . inArray ( this . value , value ) > - 1 ) ; } ) ; if ( method === 'init' ) { selectables = this . $selectableUl . find ( '#' + msIds . join ( '-selectable, #' ) + '-selectable' ) , selections = this . $selectionUl . find ( '#' + msIds . join ( '-selection, #' ) + '-selection' ) ; }
if ( selectables . length > 0 ) { selectables . addClass ( 'ms-selected' ) . hide ( ) ; selections . addClass ( 'ms-selected' ) . show ( ) ; options . prop ( 'selected' , true ) ; that . $container . find ( that . elemsSelector ) . removeClass ( 'ms-hover' ) ; var selectableOptgroups = that . $selectableUl . children ( '.ms-optgroup-container' ) ; if ( selectableOptgroups . length > 0 ) { selectableOptgroups . each ( function ( ) { var selectablesLi = $ ( this ) . find ( '.ms-elem-selectable' ) ; if ( selectablesLi . length === selectablesLi . filter ( '.ms-selected' ) . length ) { $ ( this ) . find ( '.ms-optgroup-label' ) . hide ( ) ; } } ) ; var selectionOptgroups = that . $selectionUl . children ( '.ms-optgroup-container' ) ; selectionOptgroups . each ( function ( ) { var selectionsLi = $ ( this ) . find ( '.ms-elem-selection' ) ; if ( selectionsLi . filter ( '.ms-selected' ) . length > 0 ) { $ ( this ) . find ( '.ms-optgroup-label' ) . show ( ) ; } } ) ; } else { if ( that . options . keepOrder && method !== 'init' ) { var selectionLiLast = that . $selectionUl . find ( '.ms-selected' ) ; if ( ( selectionLiLast . length > 1 ) && ( selectionLiLast . last ( ) . get ( 0 ) != selections . get ( 0 ) ) ) { selections . insertAfter ( selectionLiLast . last ( ) ) ; } } }
if ( method !== 'init' ) { ms . trigger ( 'change' ) ; if ( typeof that . options . afterSelect === 'function' ) { that . options . afterSelect . call ( this , value ) ; } } } } , 'deselect' : function ( value ) { if ( typeof value === 'string' ) { value = [ value ] ; }
var that = this , ms = this . $element , msIds = $ . map ( value , function ( val ) { return ( that . sanitize ( val ) ) ; } ) , selectables = this . $selectableUl . find ( '#' + msIds . join ( '-selectable, #' ) + '-selectable' ) , selections = this . $selectionUl . find ( '#' + msIds . join ( '-selection, #' ) + '-selection' ) . filter ( '.ms-selected' ) . filter ( ':not(.' + that . options . disabledClass + ')' ) , options = ms . find ( 'option' ) . filter ( function ( ) { return ( $ . inArray ( this . value , value ) > - 1 ) ; } ) ; if ( selections . length > 0 ) { selectables . removeClass ( 'ms-selected' ) . show ( ) ; selections . removeClass ( 'ms-selected' ) . hide ( ) ; options . prop ( 'selected' , false ) ; that . $container . find ( that . elemsSelector ) . removeClass ( 'ms-hover' ) ; var selectableOptgroups = that . $selectableUl . children ( '.ms-optgroup-container' ) ; if ( selectableOptgroups . length > 0 ) { selectableOptgroups . each ( function ( ) { var selectablesLi = $ ( this ) . find ( '.ms-elem-selectable' ) ; if ( selectablesLi . filter ( ':not(.ms-selected)' ) . length > 0 ) { $ ( this ) . find ( '.ms-optgroup-label' ) . show ( ) ; } } ) ; var selectionOptgroups = that . $selectionUl . children ( '.ms-optgroup-container' ) ; selectionOptgroups . each ( function ( ) { var selectionsLi = $ ( this ) . find ( '.ms-elem-selection' ) ; if ( selectionsLi . filter ( '.ms-selected' ) . length === 0 ) { $ ( this ) . find ( '.ms-optgroup-label' ) . hide ( ) ; } } ) ; }
ms . trigger ( 'change' ) ; if ( typeof that . options . afterDeselect === 'function' ) { that . options . afterDeselect . call ( this , value ) ; } } } , 'select_all' : function ( ) { var ms = this . $element , values = ms . val ( ) ; ms . find ( 'option:not(":disabled")' ) . prop ( 'selected' , true ) ; this . $selectableUl . find ( '.ms-elem-selectable' ) . filter ( ':not(.' + this . options . disabledClass + ')' ) . addClass ( 'ms-selected' ) . hide ( ) ; this . $selectionUl . find ( '.ms-optgroup-label' ) . show ( ) ; this . $selectableUl . find ( '.ms-optgroup-label' ) . hide ( ) ; this . $selectionUl . find ( '.ms-elem-selection' ) . filter ( ':not(.' + this . options . disabledClass + ')' ) . addClass ( 'ms-selected' ) . show ( ) ; this . $selectionUl . focus ( ) ; ms . trigger ( 'change' ) ; if ( typeof this . options . afterSelect === 'function' ) { var selectedValues = $ . grep ( ms . val ( ) , function ( item ) { return $ . inArray ( item , values ) < 0 ; } ) ; this . options . afterSelect . call ( this , selectedValues ) ; } } , 'deselect_all' : function ( ) { var ms = this . $element , values = ms . val ( ) ; ms . find ( 'option' ) . prop ( 'selected' , false ) ; this . $selectableUl . find ( '.ms-elem-selectable' ) . removeClass ( 'ms-selected' ) . show ( ) ; this . $selectionUl . find ( '.ms-optgroup-label' ) . hide ( ) ; this . $selectableUl . find ( '.ms-optgroup-label' ) . show ( ) ; this . $selectionUl . find ( '.ms-elem-selection' ) . removeClass ( 'ms-selected' ) . hide ( ) ; this . $selectableUl . focus ( ) ; ms . trigger ( 'change' ) ; if ( typeof this . options . afterDeselect === 'function' ) { this . options . afterDeselect . call ( this , values ) ; } } , sanitize : function ( value ) { var hash = 0 , i , character ; if ( value . length == 0 ) return hash ; var ls = 0 ; for ( i = 0 , ls = value . length ; i < ls ; i ++ ) { character = value . charCodeAt ( i ) ; hash = ( ( hash << 5 ) - hash ) + character ; hash |= 0 ; }
return hash ; } } ; $ . fn . multiSelect = function ( ) { var option = arguments [ 0 ] , args = arguments ; return this . each ( function ( ) { var $this = $ ( this ) , data = $this . data ( 'multiselect' ) , options = $ . extend ( { } , $ . fn . multiSelect . defaults , $this . data ( ) , typeof option === 'object' && option ) ; if ( ! data ) { $this . data ( 'multiselect' , ( data = new MultiSelect ( this , options ) ) ) ; }
if ( typeof option === 'string' ) { data [ option ] ( args [ 1 ] ) ; } else { data . init ( ) ; } } ) ; } ; $ . fn . multiSelect . defaults = { keySelect : [ 32 ] , selectableOptgroup : false , disabledClass : 'disabled' , dblClick : false , keepOrder : false , cssClass : '' } ; $ . fn . multiSelect . Constructor = MultiSelect ; $ . fn . insertAt = function ( index , $parent ) { return this . each ( function ( ) { if ( index === 0 ) { $parent . prepend ( this ) ; } else { $parent . children ( ) . eq ( index - 1 ) . after ( this ) ; } } ) ; } } ( window . jQuery ) ; ; ( function ( ) { function naturalSort ( a , b , html ) { var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?%?$|^0x[0-9a-f]+$|[0-9]+)/gi , sre = /(^[ ]*|[ ]*$)/g , dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/ , hre = /^0x[0-9a-f]+$/i , ore = /^0/ , htmre = /(<([^>]+)>)/ig , x = a . toString ( ) . replace ( sre , '' ) || '' , y = b . toString ( ) . replace ( sre , '' ) || '' ; if ( ! html ) { x = x . replace ( htmre , '' ) ; y = y . replace ( htmre , '' ) ; }
var xN = x . replace ( re , '\0$1\0' ) . replace ( /\0$/ , '' ) . replace ( /^\0/ , '' ) . split ( '\0' ) , yN = y . replace ( re , '\0$1\0' ) . replace ( /\0$/ , '' ) . replace ( /^\0/ , '' ) . split ( '\0' ) , xD = parseInt ( x . match ( hre ) , 10 ) || ( xN . length !== 1 && x . match ( dre ) && Date . parse ( x ) ) , yD = parseInt ( y . match ( hre ) , 10 ) || xD && y . match ( dre ) && Date . parse ( y ) || null ; if ( yD ) { if ( xD < yD ) { return - 1 ; }
else if ( xD > yD ) { return 1 ; } }
for ( var cLoc = 0 , numS = Math . max ( xN . length , yN . length ) ; cLoc < numS ; cLoc ++ ) { var oFxNcL = ! ( xN [ cLoc ] || '' ) . match ( ore ) && parseFloat ( xN [ cLoc ] , 10 ) || xN [ cLoc ] || 0 ; var oFyNcL = ! ( yN [ cLoc ] || '' ) . match ( ore ) && parseFloat ( yN [ cLoc ] , 10 ) || yN [ cLoc ] || 0 ; if ( isNaN ( oFxNcL ) !== isNaN ( oFyNcL ) ) { return ( isNaN ( oFxNcL ) ) ? 1 : - 1 ; }
else if ( typeof oFxNcL !== typeof oFyNcL ) { oFxNcL += '' ; oFyNcL += '' ; }
if ( oFxNcL < oFyNcL ) { return - 1 ; }
if ( oFxNcL > oFyNcL ) { return 1 ; } }
return 0 ; }
jQuery . extend ( jQuery . fn . dataTableExt . oSort , { "natural-asc" : function ( a , b ) { return naturalSort ( a , b , true ) ; } , "natural-desc" : function ( a , b ) { return naturalSort ( a , b , true ) * - 1 ; } , "natural-nohtml-asc" : function ( a , b ) { return naturalSort ( a , b , false ) ; } , "natural-nohtml-desc" : function ( a , b ) { return naturalSort ( a , b , false ) * - 1 ; } , "natural-ci-asc" : function ( a , b ) { a = a . toString ( ) . toLowerCase ( ) ; b = b . toString ( ) . toLowerCase ( ) ; return naturalSort ( a , b , true ) ; } , "natural-ci-desc" : function ( a , b ) { a = a . toString ( ) . toLowerCase ( ) ; b = b . toString ( ) . toLowerCase ( ) ; return naturalSort ( a , b , true ) * - 1 ; } } ) ; } ( ) ) ; ; var dnssecKeyList = [ ]
function applyChanges ( data , url , showResult , refreshPage ) { $ . ajax ( { type : "POST" , url : url , data : JSON . stringify ( data ) , contentType : "application/json; charset=utf-8" , crossDomain : true , dataType : "json" , success : function ( data , status , jqXHR ) { console . log ( "Applied changes successfully." )
if ( showResult ) { var modal = $ ( "#modal_success" ) ; modal . find ( '.modal-body p' ) . text ( "Applied changes successfully" ) ; modal . modal ( 'show' ) ; }
if ( refreshPage ) { location . reload ( true ) ; } } , error : function ( jqXHR , status ) { console . log ( jqXHR ) ; var modal = $ ( "#modal_error" ) ; var responseJson = jQuery . parseJSON ( jqXHR . responseText ) ; modal . find ( '.modal-body p' ) . text ( responseJson [ 'msg' ] ) ; modal . modal ( 'show' ) ; } } ) ; }
function applyRecordChanges ( data , domain ) { $ . ajax ( { type : "POST" , url : $SCRIPT _ROOT + '/domain/' + domain + '/apply' , data : JSON . stringify ( data ) , contentType : "application/json; charset=utf-8" , crossDomain : true , dataType : "json" , success : function ( data , status , jqXHR ) { $ . getJSON ( $SCRIPT _ROOT + '/domain/' + domain + '/info' , function ( data ) { $ ( ".button_apply_changes" ) . val ( data [ 'serial' ] ) ; } ) ; console . log ( "Applied changes successfully." )
var modal = $ ( "#modal_success" ) ; modal . find ( '.modal-body p' ) . text ( "Applied changes successfully" ) ; modal . modal ( 'show' ) ; } , error : function ( jqXHR , status ) { console . log ( jqXHR ) ; var modal = $ ( "#modal_error" ) ; var responseJson = jQuery . parseJSON ( jqXHR . responseText ) ; modal . find ( '.modal-body p' ) . text ( responseJson [ 'msg' ] ) ; modal . modal ( 'show' ) ; } } ) ; }
function getTableData ( table ) { var records = [ ]
table . rows ( ) . every ( function ( ) { var r = this . data ( ) ; var record = { }
2019-12-09 10:50:48 +00:00
record [ "record_name" ] = r [ 0 ] . trim ( ) ; record [ "record_type" ] = r [ 1 ] . trim ( ) ; record [ "record_status" ] = r [ 2 ] . trim ( ) ; record [ "record_ttl" ] = r [ 3 ] . trim ( ) ; record [ "record_data" ] = r [ 4 ] . trim ( ) ; record [ "record_comment" ] = r [ 5 ] . trim ( ) ; records . push ( record ) ; } ) ; return records }
2019-12-02 03:32:03 +00:00
function saveRow ( oTable , nRow ) { var status = 'Disabled' ; var jqInputs = $ ( oTable . row ( nRow ) . node ( ) ) . find ( "input" ) ; var jqSelect = $ ( oTable . row ( nRow ) . node ( ) ) . find ( "select" ) ; if ( jqSelect [ 1 ] . value == 'false' ) { status = 'Active' ; }
2019-12-09 10:50:48 +00:00
oTable . cell ( nRow , 0 ) . data ( jqInputs [ 0 ] . value ) ; oTable . cell ( nRow , 1 ) . data ( jqSelect [ 0 ] . value ) ; oTable . cell ( nRow , 2 ) . data ( status ) ; oTable . cell ( nRow , 3 ) . data ( jqSelect [ 2 ] . value ) ; oTable . cell ( nRow , 4 ) . data ( jqInputs [ 1 ] . value ) ; oTable . cell ( nRow , 5 ) . data ( jqInputs [ 2 ] . value ) ; var record = jqInputs [ 0 ] . value ; var button _edit = "<button type=\"button\" class=\"btn btn-flat btn-warning button_edit\" id=\"" + record + "\">Edit <i class=\"fa fa-edit\"></i></button>"
2019-12-02 03:32:03 +00:00
var button _delete = "<button type=\"button\" class=\"btn btn-flat btn-danger button_delete\" id=\"" + record + "\">Delete <i class=\"fa fa-trash\"></i></button>"
2019-12-09 10:50:48 +00:00
oTable . cell ( nRow , 6 ) . data ( button _edit ) ; oTable . cell ( nRow , 7 ) . data ( button _delete ) ; oTable . draw ( ) ; }
2019-12-02 03:32:03 +00:00
function restoreRow ( oTable , nRow ) { var aData = oTable . row ( nRow ) . data ( ) ; oTable . row ( nRow ) . data ( aData ) ; oTable . draw ( ) ; }
function sec2str ( t ) { var d = Math . floor ( t / 86400 ) , h = Math . floor ( t / 3600 ) % 24 , m = Math . floor ( t / 60 ) % 60 , s = t % 60 ; return ( d > 0 ? d + ' days ' : '' ) + ( h > 0 ? h + ' hours ' : '' ) + ( m > 0 ? m + ' minutes ' : '' ) + ( s > 0 ? s + ' seconds' : '' ) ; }
function editRow ( oTable , nRow ) { var isDisabled = 'true' ; var aData = oTable . row ( nRow ) . data ( ) ; var jqTds = oTable . cells ( nRow , '' ) . nodes ( ) ; var record _types = "" ; var ttl _opts = "" ; var ttl _not _found = true ; for ( var i = 0 ; i < records _allow _edit . length ; i ++ ) { var record _type = records _allow _edit [ i ] ; record _types += "<option value=\"" + record _type + "\">" + record _type + "</option>" ; }
for ( var i = 0 ; i < ttl _options . length ; i ++ ) { ttl _opts += "<option value=\"" + ttl _options [ i ] [ 0 ] + "\">" + ttl _options [ i ] [ 1 ] + "</option>" ; if ( ttl _options [ i ] [ 0 ] == aData [ 3 ] ) { ttl _not _found = false ; } }
if ( ttl _not _found ) { ttl _opts += "<option value=\"" + aData [ 3 ] + "\">" + sec2str ( aData [ 3 ] ) + "</option>" ; }
2019-12-09 10:50:48 +00:00
jqTds [ 0 ] . innerHTML = '<input type="text" id="edit-row-focus" class="form-control input-small" value="' + aData [ 0 ] + '">' ; jqTds [ 1 ] . innerHTML = '<select class="form-control" id="record_type" name="record_type" value="' + aData [ 1 ] + '">' + record _types + '</select>' ; jqTds [ 2 ] . innerHTML = '<select class="form-control" id="record_status" name="record_status" value="' + aData [ 2 ] + '"><option value="false">Active</option><option value="true">Disabled</option></select>' ; jqTds [ 3 ] . innerHTML = '<select class="form-control" id="record_ttl" name="record_ttl" value="' + aData [ 3 ] + '">' + ttl _opts + '</select>' ; jqTds [ 4 ] . innerHTML = '<input type="text" style="display:table-cell; width:100% !important" id="current_edit_record_data" name="current_edit_record_data" class="form-control input-small advance-data" value="' + aData [ 4 ] . replace ( /\"/g , """ ) + '">' ; jqTds [ 5 ] . innerHTML = '<input type="text" style="display:table-cell; width:100% !important" id="record_comment" name="record_comment" class="form-control input-small advance-data" value="' + aData [ 5 ] . replace ( /\"/g , """ ) + '">' ; jqTds [ 6 ] . innerHTML = '<button type="button" class="btn btn-flat btn-primary button_save">Save</button>' ; jqTds [ 7 ] . innerHTML = '<button type="button" class="btn btn-flat btn-primary button_cancel">Cancel</button>' ; if ( aData [ 2 ] == 'Active' ) { isDisabled = 'false' ; }
2019-12-02 03:32:03 +00:00
SelectElement ( 'record_type' , aData [ 1 ] ) ; SelectElement ( 'record_status' , isDisabled ) ; SelectElement ( 'record_ttl' , aData [ 3 ] ) ; }
function SelectElement ( elementID , valueToSelect )
{ var element = document . getElementById ( elementID ) ; element . value = valueToSelect ; }
function enable _dns _sec ( url , csrf _token ) { $ . post ( url , { '_csrf_token' : csrf _token } , function ( data ) { var modal = $ ( "#modal_dnssec_info" ) ; if ( data [ 'status' ] == 'error' ) { modal . find ( '.modal-body p' ) . text ( data [ 'msg' ] ) ; }
else { modal . modal ( 'hide' ) ; window . location . reload ( true ) ; } } , 'json' ) }
function getdnssec ( url , domain ) { $ . getJSON ( url , function ( data ) { var dnssec _footer = '' ; var modal = $ ( "#modal_dnssec_info" ) ; if ( data [ 'status' ] == 'error' ) { modal . find ( '.modal-body p' ) . text ( data [ 'msg' ] ) ; }
else { var dnssec _msg = '' ; var dnssec = data [ 'dnssec' ] ; if ( dnssec . length == 0 && parseFloat ( PDNS _VERSION ) >= 4.1 ) { dnssec _msg = '<h3>DNSSEC is disabled. Click on Enable to activate it.' ; modal . find ( '.modal-body p' ) . html ( dnssec _msg ) ; dnssec _footer = '<button type="button" class="btn btn-flat btn-success button_dnssec_enable pull-left" id="' + domain + '">Enable</button><button type="button" class="btn btn-flat btn-default pull-right" data-dismiss="modal">Cancel</button>' ; modal . find ( '.modal-footer ' ) . html ( dnssec _footer ) ; }
else { if ( parseFloat ( PDNS _VERSION ) >= 4.1 ) { dnssec _footer = '<button type="button" class="btn btn-flat btn-danger button_dnssec_disable pull-left" id="' + domain + '">Disable DNSSEC</button><button type="button" class="btn btn-flat btn-default pull-right" data-dismiss="modal">Close</button>' ; modal . find ( '.modal-footer ' ) . html ( dnssec _footer ) ; }
for ( var i = 0 ; i < dnssec . length ; i ++ ) { if ( dnssec [ i ] [ 'active' ] ) { dnssec _msg += '<form>' +
'<h3><strong>' + dnssec [ i ] [ 'keytype' ] + '</strong></h3>' +
'<strong>DNSKEY</strong>' +
'<input class="form-control" autocomplete="off" type="text" readonly="true" value="' + dnssec [ i ] [ 'dnskey' ] + '">' +
'</form>' +
'<br/>' ; if ( dnssec [ i ] [ 'ds' ] ) { var dsList = dnssec [ i ] [ 'ds' ] ; dnssec _msg += '<strong>DS</strong>' ; for ( var j = 0 ; j < dsList . length ; j ++ ) { dnssec _msg += '<input class="form-control" autocomplete="off" type="text" readonly="true" value="' + dsList [ j ] + '">' ; } }
dnssec _msg += '</form>' ; } } }
modal . find ( '.modal-body p' ) . html ( dnssec _msg ) ; }
modal . modal ( 'show' ) ; } ) ; }
function reload _domains ( url ) { $ . getJSON ( url , function ( data ) { $ ( '#modal_bg_reload_content' ) . html ( "<i class=\"fa fa-check\"></i> Finished: " + data [ 'result' ] [ 'msg' ] ) ; } ) }
json _library = { replacer : function ( match , pIndent , pKey , pVal , pEnd ) { var key = '<span class=json-key>' ; var val = '<span class=json-value>' ; var str = '<span class=json-string>' ; var r = pIndent || '' ; if ( pKey ) { r = r + key + pKey . replace ( /[": ]/g , '' ) + '</span>: ' ; }
if ( pVal ) { r = r + ( pVal [ 0 ] == '"' ? str : val ) + pVal + '</span>' ; }
return r + ( pEnd || '' ) ; } , prettyPrint : function ( obj ) { obj = obj . replace ( /u'/g , "\'" ) . replace ( /'/g , "\"" ) . replace ( /(False|None)/g , "\"$1\"" ) ; var jsonData = JSON . parse ( obj ) ; var jsonLine = /^( *)("[\w]+": )?("[^"]*"|[\w.+-]*)?([,[{])?$/mg ; return JSON . stringify ( jsonData , null , 3 ) . replace ( /&/g , '&' ) . replace ( /\\"/g , '"' ) . replace ( /</g , '<' ) . replace ( />/g , '>' ) . replace ( jsonLine , json _library . replacer ) ; } } ;