From b0677037fff01b95605ef7318639274057debce0 Mon Sep 17 00:00:00 2001 From: Garret Wassermann Date: Fri, 26 May 2017 15:12:41 -0400 Subject: [PATCH] Update jquery-ui to 1.12.1 --- .../images/ui-icons_444444_256x240.png | Bin 6992 -> 7006 bytes .../images/ui-icons_555555_256x240.png | Bin 6988 -> 7074 bytes .../images/ui-icons_777620_256x240.png | Bin 4549 -> 4676 bytes .../images/ui-icons_777777_256x240.png | Bin 6999 -> 7013 bytes .../images/ui-icons_cc0000_256x240.png | Bin 4549 -> 4632 bytes .../images/ui-icons_ffffff_256x240.png | Bin 6299 -> 6313 bytes .../helpdesk/vendor/jquery-ui/jquery-ui.css | 625 +- .../helpdesk/vendor/jquery-ui/jquery-ui.js | 16544 +++++++++++++++- .../vendor/jquery-ui/jquery-ui.min.css | 8 +- .../vendor/jquery-ui/jquery-ui.min.js | 14 +- .../vendor/jquery-ui/jquery-ui.structure.css | 615 + .../jquery-ui/jquery-ui.structure.min.css | 4 +- .../vendor/jquery-ui/jquery-ui.theme.css | 6 +- .../vendor/jquery-ui/jquery-ui.theme.min.css | 4 +- 14 files changed, 17798 insertions(+), 22 deletions(-) diff --git a/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_444444_256x240.png b/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_444444_256x240.png index 19f664d970194372c3228494e34ac01d611a4d45..c2daae1663d47f397a01fd4166bce9b6b9ac4183 100644 GIT binary patch delta 6747 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 k7nb1XXCo$oB=0k@l8Z<{9 delta 6756 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 diff --git a/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_555555_256x240.png b/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_555555_256x240.png index e965f6d97c6e39e711dbba68889a7d1f3d95eb45..47849283f84f7026932bf50282ee8af51444c26e 100644 GIT binary patch literal 7074 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 W$6)X8PycD00qQC`%4LeS5&s7ix^mY5 literal 6988 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 Q{C^qJCjLbknMj%c11yI6vj6}9 delta 4218 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 Z5j8q8HaaylEig1XFfcGoZK0DU8!^kGZ5#jq delta 4495 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 diff --git a/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_ffffff_256x240.png b/helpdesk/static/helpdesk/vendor/jquery-ui/images/ui-icons_ffffff_256x240.png index fe41d2d0fdd40f87538d2312fa537a799994e55b..136a4f97bd2e204943789c1ba9ac9bf0e997ff81 100644 GIT binary patch delta 5972 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 diff --git a/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.css b/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.css index 8fb84e48..93707f4c 100644 --- a/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.css +++ b/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.css @@ -1,7 +1,7 @@ -/*! jQuery UI - v1.12.1 - 2016-09-26 +/*! jQuery UI - v1.12.1 - 2016-09-14 * http://jqueryui.com -* Includes: core.css, datepicker.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6 * Copyright jQuery Foundation and other contributors; Licensed MIT */ /* Layout helpers @@ -90,6 +90,228 @@ width: 100%; height: 100%; } +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} .ui-datepicker { width: 17em; padding: .2em .2em 0; @@ -265,6 +487,399 @@ left: .5em; top: .3em; } +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} /* Component containers ----------------------------------*/ @@ -688,8 +1303,8 @@ a.ui-button:active, /* Overlays */ .ui-widget-overlay { background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ + opacity: .003; + filter: Alpha(Opacity=.3); /* support: IE8 */ } .ui-widget-shadow { -webkit-box-shadow: 0px 0px 5px #666666; diff --git a/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.js b/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.js index e07812f9..02135523 100644 --- a/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.js +++ b/helpdesk/static/helpdesk/vendor/jquery-ui/jquery-ui.js @@ -1,6 +1,6 @@ -/*! jQuery UI - v1.12.1 - 2016-09-26 +/*! jQuery UI - v1.12.1 - 2016-09-14 * http://jqueryui.com -* Includes: keycode.js, widgets/datepicker.js +* 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 ) { @@ -20,6 +20,4082 @@ $.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 + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + + +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 { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + 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 ) ); + } + + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + 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, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + 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 ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } 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 is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + 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 { + + // Allow multiple hashes to be passed on init + 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( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "

", + + options: { + classes: {}, + disabled: false, + + // Callbacks + 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 within the document + element.ownerDocument : + + // Element is window or document + 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 ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + 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 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + 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; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + 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 the widget is becoming disabled, then nothing is interactive + 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; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + 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() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + 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 ); + + // Clear the stack to avoid memory leaks (#10056) + 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(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + 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/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://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 = $( "
" + + "
" ), + 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 ); + } + + // Make a copy, we don't want to modify 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 ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.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"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + 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 ) { + + // Adds feedback as second argument to using callback, if present + 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; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } 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; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } 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 + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + 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 + */ + +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ + +// This file is deprecated + + +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 + */ + +//>>label: Effects Core +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/category/effects-core/ +//>>demos: http://jqueryui.com/effect/ + + + +var dataSpace = "ui-effects-", + dataSpaceStyle = "ui-effects-style", + dataSpaceAnimated = "ui-effects-animated", + + // Create a local jQuery because jQuery Color relies on it and the + // global may not exist with AMD and a custom build (#10199) + 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", + + // Plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + + // A set of RE's that can match strings and generate color tuples. + 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 ] + ]; + } + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + 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 ) + ]; + } + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + 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 ] + ]; + } + } ], + + // JQuery.Color( ) + 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 = {}, + + // Element for support tests + supportElem = jQuery( "

" )[ 0 ], + + // Colors = jQuery.Color.names + colors, + + // Local aliases of functions called often + each = jQuery.each; + +// Determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; + +// Define cache name and alpha properties +// for rgba and hsla spaces +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; + } + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } + + if ( type.mod ) { + + // We add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return ( value + type.mod ) % type.mod; + } + + // For now all property types without mod have min and max + 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 ); + + // If this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; + + // Exit each( stringParsers ) here because we matched + return false; + } + } ); + + // Found a stringParser that handled it + if ( rgba.length ) { + + // If this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } + + // Named colors + 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 = []; + + // More than 1 argument specified - assume ( red, green, blue, alpha ) + 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 the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { + + // If the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } + + // This is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + } ); + + // Everything defined but alpha? + if ( inst[ cache ] && + jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { + + // Use the default of 1 + 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 null, don't override start value + if ( endValue === null ) { + return; + } + + // If null - use end + 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 we are already opaque - return ourself + 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; + } + + // Catch 1 and 2 + 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 ) { + + // Default to 0 when nulls exist + 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; + +// Hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 + +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; + } + + // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + 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; + + // Makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { + + // Generate a cache for this space if it doesn't exist + 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 ); + } + }; + + // Makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { + + // Alpha is included in more than one space + 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 ); + }; + } ); +} ); + +// Add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +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 ) { + + // Wrapped to prevent IE from throwing errors on "invalid" values like + // 'auto' or 'inherit' + } + } + }; + 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; + } +}; + +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + + // 4.1. Basic color keywords + 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", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; + +} )( jQuery ); + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +( 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 ]; + } + } + + // Support: Opera, IE <9 + } 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; +} + +// Support: jQuery <1.8 +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; + + // Map the animated objects to store the original styles. + allAnimations = allAnimations.map( function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + } ); + + // Apply class change + applyClassChange = function() { + $.each( classAnimationActions, function( i, action ) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + } ); + }; + applyClassChange(); + + // Map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map( function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + } ); + + // Apply original class + animated.attr( "class", baseClass ); + + // Map all animated objects again - this time collecting a promise + 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(); + } ); + + // Once all animations have completed: + $.when.apply( $, allAnimations.get() ).done( function() { + + // Set the final class + applyClassChange(); + + // For each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function( key ) { + el.css( key, "" ); + } ); + } ); + + // This is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + 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 ) { + + // Without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + ( force ? { add: classNames } : { remove: classNames } ), + speed, easing, callback ); + } + } else { + + // Without force parameter + 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 ); + } +} ); + +} )(); + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +( 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, { + + // Saves a set of properties in a data storage + 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 ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + 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; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // If the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + return element.parent(); + } + + // Wrap the element + var props = { + width: element.outerWidth( true ), + height: element.outerHeight( true ), + "float": element.css( "float" ) + }, + wrapper = $( "

" ) + .addClass( "ui-effects-wrapper" ) + .css( { + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + } ), + + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + // Support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + active.id; + } catch ( e ) { + active = document.body; + } + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + + // Hotfix for jQuery 1.4 since some change in wrap() seems to actually + // lose the reference to the wrapped element + wrapper = element.parent(); + + // Transfer positioning properties to the wrapper + 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 ); + + // Fixes #7595 - Elements lose focus when wrapped. + 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 + }; + }, + + // Injects recently queued functions to be first in line (after "inprogress") + 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; + }, + + // Translates a [top,left] array into a baseline value + 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 + }; + }, + + // Creates a placeholder element so that the original element can be made absolute + createPlaceholder: function( element ) { + var placeholder, + cssPosition = element.css( "position" ), + position = element.position(); + + // Lock in margins first to account for form elements, which + // will change margin if you explicitly set height + // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 + // Support: Safari + 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( { + + // Convert inline to inline block to account for inline elements + // that turn to inline block based on content (like img) + display: /^(inline|ruby)/.test( element.css( "display" ) ) ? + "inline-block" : + "block", + visibility: "hidden", + + // Margins need to be set to account for margin collapse + 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 ); + } + }, + + // Removes a placeholder if it exists and restores + // properties that were modified during placeholder creation + 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; + } +} ); + +// Return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // Allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } + + // Convert to an object + effect = { effect: effect }; + + // Catch (effect, null, ...) + if ( options == null ) { + options = {}; + } + + // Catch (effect, callback) + if ( $.isFunction( options ) ) { + callback = options; + speed = null; + options = {}; + } + + // Catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } + + // Catch (effect, options, callback) + if ( $.isFunction( speed ) ) { + callback = speed; + speed = null; + } + + // Add options to effect + 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 ) { + + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } + + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } + + // Complete callback + if ( $.isFunction( option ) ) { + return true; + } + + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } + + // Didn't match any standard API + return false; +} + +$.fn.extend( { + effect: function( /* effect, options, speed, callback */ ) { + 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; + + // Sentinel for duck-punching the :animated psuedo-selector + el.data( dataSpaceAnimated, true ); + + // Save effect mode for later use, + // we can't just call $.effects.mode again later, + // as the .show() below destroys the initial state + modes.push( normalizedMode ); + + // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13 + 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 ) { + + // Delegate to the original method (e.g., .show()) if possible + 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(); + } + } + + // Override mode option on a per element basis, + // as toggle can be either show or hide depending on element state + args.mode = modes.shift(); + + if ( $.uiBackCompat !== false && !defaultMode ) { + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, done ); + } + } else { + if ( args.mode === "none" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, cleanup ); + } + } + } + + // Run prefilter on all elements first to ensure that + // any showing or hiding happens before placeholder creation, + // which ensures that any layout changes are correctly captured. + 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 = $( "
" ) + .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 + } ); +}; + +} )(); + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +( function() { + +// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing) + +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 + */ + +//>>label: Blind Effect +//>>group: Effects +//>>description: Blinds the element. +//>>docs: http://api.jqueryui.com/blind-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: Bounce Effect +//>>group: Effects +//>>description: Bounces an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/bounce-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { + var upAnim, downAnim, refValue, + element = $( this ), + + // Defaults: + mode = options.mode, + hide = mode === "hide", + show = mode === "show", + direction = options.direction || "up", + distance = options.distance, + times = options.times || 5, + + // Number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = options.duration / anims, + easing = options.easing, + + // Utility: + 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 ); + + // Default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } + + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = refValue; + + // If we are showing, force opacity 0 and set the initial position + // then do the "first" animation + element + .css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } + + // Start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } + + downAnim = {}; + downAnim[ ref ] = refValue; + + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( ; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + element + .animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); + + distance = hide ? distance * 2 : distance / 2; + } + + // Last Bounce when Hiding + 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 + */ + +//>>label: Clip Effect +//>>group: Effects +//>>description: Clips the element on and off like an old TV. +//>>docs: http://api.jqueryui.com/clip-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: Drop Effect +//>>group: Effects +//>>description: Moves an element in one direction and hides it at the same time. +//>>docs: http://api.jqueryui.com/drop-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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; + } + + // Animate + 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 + */ + +//>>label: Explode Effect +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/explode-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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", + + // Show and then visibility:hidden the element before calculating offset + offset = element.show().css( "visibility", "hidden" ).offset(), + + // Width and height of a piece + width = Math.ceil( element.outerWidth() / cells ), + height = Math.ceil( element.outerHeight() / rows ), + pieces = []; + + // Children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } + + // Clone the element for each row and cell. + 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; + + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + element + .clone() + .appendTo( "body" ) + .wrap( "
" ) + .css( { + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + } ) + + // Select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .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 + */ + +//>>label: Fade Effect +//>>group: Effects +//>>description: Fades the element. +//>>docs: http://api.jqueryui.com/fade-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: Fold Effect +//>>group: Effects +//>>description: Folds an element first horizontally and then vertically. +//>>docs: http://api.jqueryui.com/fold-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { + + // Create element + 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; + } + + // Animate + 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 + */ + +//>>label: Highlight Effect +//>>group: Effects +//>>description: Highlights the background of an element in a defined color for a custom duration. +//>>docs: http://api.jqueryui.com/highlight-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: Size Effect +//>>group: Effects +//>>description: Resize an element to a specified width and height. +//>>docs: http://api.jqueryui.com/size-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectSize = $.effects.define( "size", function( options, done ) { + + // Create element + var baseline, factor, temp, + element = $( this ), + + // Copy for children + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], + + // Set options + 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; + } + + // Set scaling factor + factor = { + from: { + y: from.height / original.height, + x: from.width / original.width + }, + to: { + y: to.height / original.height, + x: to.width / original.width + } + }; + + // Scale the css box + if ( scale === "box" || scale === "both" ) { + + // Vertical props scaling + 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 ); + } + + // Horizontal props scaling + 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 ); + } + } + + // Scale the content + if ( scale === "content" || scale === "both" ) { + + // Vertical props scaling + 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 ); + } + } + + // Adjust the position properties based on the provided origin points + 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 ); + + // Animate the children if desired + if ( scale === "content" || scale === "both" ) { + + vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); + hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); + + // Only animate children with width attributes specified + // TODO: is this right? should we include anything with css width specified as well + 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 + }; + + // Vertical props scaling + 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 ); + } + + // Horizontal props scaling + 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 ); + } + + // Animate children + child.css( childFrom ); + child.animate( childTo, options.duration, options.easing, function() { + + // Restore children + if ( restore ) { + $.effects.restoreStyle( child ); + } + } ); + } ); + } + + // Animate + 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 ); + + // Need to save style here so that automatic style restoration + // doesn't restore to the original styles from before the animation. + $.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 + */ + +//>>label: Scale Effect +//>>group: Effects +//>>description: Grows or shrinks an element and its content. +//>>docs: http://api.jqueryui.com/scale-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectScale = $.effects.define( "scale", function( options, done ) { + + // Create element + 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 ); + + // Fade option to support puff + 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 + */ + +//>>label: Puff Effect +//>>group: Effects +//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. +//>>docs: http://api.jqueryui.com/puff-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: Pulsate Effect +//>>group: Effects +//>>description: Pulsates an element n times by changing the opacity to zero and back. +//>>docs: http://api.jqueryui.com/pulsate-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + showhide = show || hide, + + // Showing or hiding leaves off the "last" animation + 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; + } + + // Anims - 1 opacity "toggles" + 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 + */ + +//>>label: Shake Effect +//>>group: Effects +//>>description: Shakes an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/shake-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; + + // Animate + element.animate( animation, speed, options.easing ); + + // Shakes + 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 + */ + +//>>label: Slide Effect +//>>group: Effects +//>>description: Slides an element in and out of the viewport. +//>>docs: http://api.jqueryui.com/slide-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 ]; + + // Define hide animation + animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; + animation.clip = element.cssClip(); + animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; + + // Reverse the animation if we're showing + if ( mode === "show" ) { + element.cssClip( animation.clip ); + element.css( ref, animation[ ref ] ); + animation.clip = startClip; + animation[ ref ] = startRef; + } + + // Actually animate + 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 + */ + +//>>label: Transfer Effect +//>>group: Effects +//>>description: Displays a transfer effect from one element to another. +//>>docs: http://api.jqueryui.com/transfer-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +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 + */ + +//>>label: :focusable Selector +//>>group: Core +//>>description: Selects elements which can be focused. +//>>docs: http://api.jqueryui.com/focusable-selector/ + + + +// Selectors +$.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 ) { + + // Form controls within a disabled fieldset are disabled. + // However, controls within the fieldset's legend do not get disabled. + // Since controls generally aren't placed inside legends, we skip + // this portion of the check. + 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 ) ); +}; + +// Support: IE 8 only +// IE 8 doesn't resolve inherit to visible/hidden for computed values +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; + + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +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 + */ + +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ + + + +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + + // Wait for the form reset to actually happen before refreshing + 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 ) { + + // We don't use _on() here because we use a single event handler per form + 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 + * + */ + +//>>label: jQuery 1.7 Support +//>>group: Core +//>>description: Support version 1.7.x of jQuery core + + + +// Support: jQuery 1.7 only +// Not a great way to check versions, but since we only support 1.7+ and only +// need to detect <1.8, this is a simple check that should suffice. Checking +// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0 +// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting +// 1.7 anymore). See #11197 for why we're not using feature detection. +if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) { + + // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight() + // Unlike jQuery Core 1.8+, these only support numeric values to set the + // dimensions in pixels + $.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 @@ -55,6 +4131,3035 @@ var keycode = $.ui.keyCode = { }; + + +// Internal use only +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 + */ + +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ + + + +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; + + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } + + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); + + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { + + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); + + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + + // Create a selector for the label based on the id + selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; + + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); + + } + + // Return whatever we have found for labels + 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 + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + + +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 + */ + +//>>label: :tabbable Selector +//>>group: Core +//>>description: Selects elements which can be tabbed to. +//>>docs: http://api.jqueryui.com/tabbable-selector/ + + + +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 + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + + +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 + */ + +//>>label: Accordion +//>>group: Widgets +// jscs:disable maximumLineLength +//>>description: Displays collapsible content panels for presenting information in a limited amount of space. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/accordion/ +//>>demos: http://jqueryui.com/accordion/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/accordion.css +//>>css.theme: ../../themes/base/theme.css + + + +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" + }, + + // Callbacks + 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" ); + + // Don't allow collapsible: false and active: false / null + if ( !options.collapsible && ( options.active === false || options.active == null ) ) { + options.active = 0; + } + + this._processPanels(); + + // handle negative values + 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 = $( "" ); + 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; + + // Clean up main element + this.element.removeAttr( "role" ); + + // Clean up headers + this.headers + .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) + .removeUniqueId(); + + this._destroyIcons(); + + // Clean up content panels + 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" ) { + + // _activate() will handle invalid values and update this.options + 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 ); + + // Setting collapsible: false while collapsed; open first panel + 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 ); + + // Support: IE8 Only + // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + 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(); + + // Was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || + !this.headers.length ) { + options.active = false; + this.active = $(); + + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + + // all remaining panel are disabled + if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { + options.active = false; + this.active = $(); + + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + + // was active, active panel still exists + } else { + + // make sure active index is correct + 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" ); + + // Avoid memory leaks (#10056) + 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(); + + // Make sure at least one header is in the tab order + 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 ]; + + // Trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // Trying to collapse, simulate a click on the currently active header + 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 ( + + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // When the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // Switch classes + // corner classes on the previously active header stay after the animation + 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; + + // Handle activating a panel during the animation for another activation + 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 we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + 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; + } + + // fall back from options to animation in case of partial down settings + 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" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; + } + this._trigger( "activate", null, data ); + } +} ); + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an